약간은 늦었지만.. expl3에는 기본적으로 clist (comma separated list)라는 자료형이 있습니다. 이를 사용하면 다음과 같이 한 방에 작성할 수 있습니다:
\documentclass{article} \usepackage{xparse} \ExplSyntaxOn \NewDocumentCommand \split { m } { \begin{itemize} \clist_set:Nn \l_tmpa_clist { #1 } \clist_map_inline:Nn \l_tmpa_clist { \item ##1 } \end{itemize} } \ExplSyntaxOff \begin{document} \split{abc,def,ghi} \end{document}
\l_tmpa_clist라는 임시변수에 들어있는 값들에 대해서 각각 \item을 앞에 붙여주도록 하는 map을 걸어줘서 작동되는 코드입니다. 비슷하게 seq라는 자료형을 쓰면 ,가 아니라 다른 delimeter로 구분된 경우에도 작업할 수 있습니다.
혹은 recursion으로 구현해도 되고요. expl3로는:
\documentclass{article} \usepackage{xparse} \ExplSyntaxOn \cs_new:Npn \split_fn_rec:n #1 { \quark_if_recursion_tail_stop:n { #1 } \tl_if_eq:nnTF { #1 } { , } { \item } { #1 } \split_fn_rec:n } \NewDocumentCommand \splitrec { m } { \begin{itemize} \item \split_fn_rec:n #1 \q_recursion_tail \q_recursion_stop \end{itemize} } \ExplSyntaxOff \begin{document} \splitrec{abc,def,ghi} \end{document}
plainTeX으로는:
\documentclass{article} \def\split#1{\item\expandafter\splita#1\end} \def\splita#1{\ifx#1\end\let\next\relax \else\ifx#1,\item\let\next\splita \else#1\let\next\splita\fi\fi\next} \begin{document} \begin{itemize} \split{abc,def,ghi} \end{itemize} \end{document}
KTUG 한국 텍 사용자 그룹
약간은 늦었지만.. expl3에는 기본적으로 clist (comma separated list)라는 자료형이 있습니다.
이를 사용하면 다음과 같이 한 방에 작성할 수 있습니다:
\l_tmpa_clist라는 임시변수에 들어있는 값들에 대해서 각각 \item을 앞에 붙여주도록 하는 map을 걸어줘서 작동되는 코드입니다.
비슷하게 seq라는 자료형을 쓰면 ,가 아니라 다른 delimeter로 구분된 경우에도 작업할 수 있습니다.
혹은 recursion으로 구현해도 되고요. expl3로는:
plainTeX으로는: