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>처럼 입력하시면 좋습니다.
Expl3 안에서의 ampersand 기호 사용
2017.11.26 18:16
안녕하세요. 이제 막 Expl3 사용을 시작한 초보입니다.
함수에 주어진 인자를 ,(comma)로 split하여, 변수로 사용하고 있습니다.
표 안에서 expl3로 만든 함수를 넣기 위해, &(ampersand) 기호를 사용해야 하는데,
아래의 MWE와 같이 함수를 작성했는데도 &가 제 역할(표 안에서 열을 구분하는 역할)을 하지 못하고 있습니다.
expl3안에서는 공백도 ~(tilde)를 사용하던데, &를 넣기 위해서는 어떤 방법을 사용해야 하나요?
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\seq_new:N \l_temp_seq
\NewDocumentCommand{\myfunc}{m}{%
\seq_set_split:Nnn \l_temp_seq {,} {#1}
\seq_item:Nn \l_temp_seq {1} & \seq_item:Nn \l_temp_seq {2} \\
}
\ExplSyntaxOff
\begin{document}
\begin{tabular}{|c|c|}
\hline
1 & 2 \\
\hline
3 & 4 \\
\hline
\myfunc{5,6}
\hline
\end{tabular}
\end{document}
tabular나 array에서 쓰이는 정렬자 &는 expl3에 상수 \c_alignment_token 으로 정의되어 있습니다.
그건 그런데 제시하신 코드에서 문제가 되는 것은 \myfunc라는 함수 호출이 tabular 내부에서 잘 작동하지 않을 것으로 생각되네요. tabular 영역 내부에서 올 수 있는 문자는 매우 제한되어 있는 것으로 보입니다. 다음 예와 같이 tabular가 시작하기 전에 토큰리스트를 생성해두는 방법으로 피해갈 수 있을 것 같습니다.
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \outputstring
\NewDocumentCommand{\myfunc}{m}{%
\tl_clear:N \outputstring
\clist_set:Nn \l_tmpa_clist { #1 }
\int_zero:N \l_tmpa_int
\clist_map_inline:Nn \l_tmpa_clist
{
\int_incr:N \l_tmpa_int
\int_compare:nTF { \l_tmpa_int = \clist_count:N \l_tmpa_clist }
{
\tl_gput_right:Nn \outputstring { ##1 \tabularnewline }
}
{
\tl_gput_right:Nn \outputstring { ##1 \c_alignment_token }
}
}
}
\ExplSyntaxOff
\begin{document}
\myfunc{5,6} %% tabular보다 먼저 부른다.
\begin{tabular}{|c|c|}
\hline
1 & 2 \\
\hline
3 & 4 \\
\hline
\outputstring %% \myfunc에서 정의되는 token list
\hline
\end{tabular}
\end{document}