KTUG 한국 텍 사용자 그룹

Menu

KTUG :: Q&A 마당

예컨대 \test{abc,def,ghi}라고 입력했을 때 쉼표로 분리된 각 부분을 별도로 잘라내는 거라면 간단히 할 수 있습니다.

\newcount\mycnt
\def\fifo#1,{\ifx\ofif#1\ofif\fi\process{#1}\fifo}
\def\ofif#1\fifo{\fi}
\def\process#1{\advance\mycnt1
   \expandafter\def\csname rsltstr\romannumeral\mycnt\endcsname
      {#1}}
\def\testcmd#1{\mycnt=0\expandafter\fifo#1,\ofif,}

이렇게 정의한 다음 \testcmd를 부르면 앞에서부터 차례로 \rsltstri, \rsltstrii, \rsltstriii 이라는 매크로에 저장됩니다. 이 결과를 어떻게 이용할 것인가는 사용자에게 달렸겠지만, 

\usepackage{multido}
\def\printcmd{%
	\begin{itemize}
	\multido{\i=1+1}{\the\mycnt}%
		{\item \csname rsltstr\romannumeral\i\endcsname}
	\end{itemize}	
}

이것은 itemize 안에 하나씩 차례로 나열하게 한 것입니다. 필요하다면 \testcmd와 \printcmd를 하나의 명령으로 묶을 수도 있겠습니다. 다음 그림은 

\testcmd{abc,def,123}
\printcmd

이렇게 한 결과입니다.

result.png

이밖에도 xstring같은 패키지의 도움을 받거나 expl3로 코딩하거나 할 수 있습니다.

KTUG 한국 텍 사용자 그룹