문자열을 받아 문자를 하나씩 분리하여 처리하는 매크로를 만들었습니다.
http://www.ktug.org/xe/index.php?document_srl=219521&mid=KTUG_open_board
\NewDocumentCommand \segment { m }
{
\tl_map_inline:nn { #1 }
{
\str_case:nnF {##1}
{
{.} { \segment_include:n {dot} }
{?} { \segment_include:n {QM} }
{|} {\space} %% 여기에서 스페이스를 식별할 방법이 없어서
}
{ \segment_include:n {##1} }
}
}
이 매크로는 스페이스를 처리하지 못하는 문제가 있습니다. \tl_map_inline:nn이 스페이스를 무시(?)해 버리고 ##1에 넘겨주지 않습니다.
스페이스의 캣코드가 다르다는 점, 중복된 공백 문자들을 텍이 모두 무시한다는 점 등을 고려하면 아주 이상한 처리라고 말할 수 없습니다. 해법을 찾다가 궁여지책으로 세로 막대기(|)를 사용했습니다.
\segment{O 20.9} 대신 \segmen{O|20.9}라고 쓰는 거죠.
이 문제에 대한 해법이 있을까요?
KTUG 한국 텍 사용자 그룹