Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
LaTex에서 split 함수 사용 가능할까요?
2019.06.12 15:08
안녕하세요.
LaTex 문서를 작성하는 데 몇 가지 변수를 외부 프로그램으로부터 받아서 사용하고 있습니다.
그 중에서 구분자를 이용하여 split함수를 이용하고 싶은 함수가 있는데, LaTex에 그런 기능이 지원되나요?
예를 들면,
기존 변수명: "abc,def,ghi"
구분자: ,
split 함수 결과:
- abc
- def
- ghi
댓글 4
-
noname
2019.06.12 18:24
-
yihoze
2019.06.13 14:49
xparse만 이용해 봤습니다. (\SplitList와 \ProcessList가 전적으로 의지하기에 다소 미흡하지만요.)
\documentclass{article}
\usepackage{xparse}\NewDocumentCommand \itemizelist { >{ \SplitList{,} } m }
{
\begin {itemize}
\ProcessList {#1} { \litem }
\end {itemize}
}
\NewDocumentCommand \litem { m }
{
\item #1
}\begin {document}
\itemizelist{abc, def, ghi}
\end {document} -
ts
2019.06.15 21:33
두 분 조언 모두 감사합니다. 잘 되네요!
-
Zeta
2019.06.30 06:13
약간은 늦었지만.. 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}
예컨대 \test{abc,def,ghi}라고 입력했을 때 쉼표로 분리된 각 부분을 별도로 잘라내는 거라면 간단히 할 수 있습니다.
이렇게 정의한 다음 \testcmd를 부르면 앞에서부터 차례로 \rsltstri, \rsltstrii, \rsltstriii 이라는 매크로에 저장됩니다. 이 결과를 어떻게 이용할 것인가는 사용자에게 달렸겠지만,
이것은 itemize 안에 하나씩 차례로 나열하게 한 것입니다. 필요하다면 \testcmd와 \printcmd를 하나의 명령으로 묶을 수도 있겠습니다. 다음 그림은
이렇게 한 결과입니다.
이밖에도 xstring같은 패키지의 도움을 받거나 expl3로 코딩하거나 할 수 있습니다.