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>처럼 입력하시면 좋습니다.
\NewDocumentCommand로 매개변수 없는 명령을 정의할 때...
2015.06.17 11:07
매개변수 없는 명령을 \newcommand와 \NewDocumentCommand 두 가지 버전으로 정의했는데 결과에 차이가 납니다. 어떤 부분에서 실수한 건지 감을 잡기 힘드네요.
\documentclass{oblivoir}
\usepackage{tabu}
\usepackage{xparse}
\newcommand\firstrow{\rowfont{\bfseries}}
\NewDocumentCommand\FirstRow{}{\rowfont{\bfseries}}
\begin{document}
\section{\textbackslash newcommand로 정의한 명령}
\bigskip
\begin{tabu}{*3{X[c]}}
\firstrow 클래스 & 예선 & 결승(제2전) \\
크루즈/액센트 & 전 차량 & 1---3위 \\
슈퍼1600 & --- & 전 차량 \\
GT & 전 차량 & 1---3위\\
\end{tabu}
\section{\textbackslash NewDocumentCommand로 정의한 명령}
\bigskip
\begin{tabu}{*3{X[c]}}
\FirstRow 클래스 & 예선 & 결승(제2전) \\
크루즈/액센트 & 전 차량 & 1---3위 \\
슈퍼1600 & --- & 전 차량 \\
GT & 전 차량 & 1---3위\\
\end{tabu}
\end{document}
댓글 9
-
JangNa
2015.06.17 12:35
-
Dennis
2015.06.18 10:10
감사합니다. expansion 개념은 참 이해하기 쉽지 않네요...
-
세벌
2015.06.18 08:21
왼쪽 위의 셀에 차이가 난다는 거죠? 혹시 newcommand와 NewDocumentCommand의 특성의 차이는 아닌가요?
-
DohyunKim
2015.06.18 11:23
심지어
\relax\rowfont{\bfseries} aaa & bbb
이렇게 relax만 앞에 넣어도 똑같은 오류가 발생하네요.
tabu 패키지, 문제가 좀 있네요. 이거 쓸 때는 살얼음 건너듯 조심해야 할 듯.
-
nanim
2015.06.18 11:51
xparse 설명서에 보면, 다음과 같은 구절이 있습니다. \DeclareExpandableDocumentCommand를 설명하는 부분인데요,
for example, a function for use in a table might expand so that \omit is the first non-expandable token
일반적으로 말해서, tabular의 첫머리에 non-expandable token이 오면 에러가 생기는 경우가 많습니다.
이 위치에 오는 명령은 모두 expandable해야 한다는 거지요. \NewDocumentCommand 명령으로 만든 매크로는 이 조건을 충족하지 않기 때문에 에러를 보이거나 오동작하는 것이라고 봅니다.
이것은 tabu만의 문제가 아니고 tabular 종류나 array 종류 전체에 대해서 그럴 거라고 짐작합니다. tabu가 약간 억울해보여서...
-
Dennis
2015.06.18 12:14
도대체 LaTeX 쓴 지 10년이 넘었는데도 아직까지도 Expansion의 개념을 제대로 이해 못하고 있으니...
저는 정말이지 그냥 무식하게 써왔나 싶네요.
-
JangNa
2015.06.18 12:24
텍에서의 expansion을 제대로 이해하는 사람이 몇이나 되겠습니까?
그리고 라텍 패키지를 만들게 아니면 이해할 필요도 없습니다. :-)
자신이 원하는 문서 만들기에 충분한 지식만 있으면 되지 않나요?
여태까지 무식하게 써온게 아니라 아주 잘 사용하고 계신거지요.
-
DohyunKim
2015.06.18 13:04
네, 그렇군요. 지적 고맙습니다.
결국 tabu 소스를 보고서야 말씀하신 부분을 이해했습니다. rowfont 명령이 noalign을 쓰고 있더군요. noalign은 행의 맨 처음에 와야 하죠.
사실 폰트 명령뿐이면 왜 noalign을 이용했을까 의아했었습니다. 다른 유연한 방법도 충분히 있을텐데 말이죠. 헌데 알고보니 셀 정렬도 rowfont에서 함께 지시할 수 있더군요.
여하튼 저는 개인적으로 타부에 끌리지 않는 게 사실입니다. (매뉴얼부터가 기분나쁘게 지저분해요^^)
-
Dennis
2015.06.18 13:14
일견 tabu를 taboo시하는 게 이해가 됩니다만 역시 X column의 유혹이 워낙에 진해서... ^^
예전에 이 게시판에서 본 기억이 나는데, 지금 tabu 개발자가 여러 가지 문제가 있다는 점을 인정하고 거의 밑바닥에서부터 다시 개발한다고 했던 듯합니다. 그래서 아주 중요한 부분에는 tabu 사용을 자제해달라 했던 것 같은데요...
엑스파스도 모르고 타부도 사용해 본적이 없지만,
아마도 그 둘 사이가 뭔가 좋지 않은가 봅니다.
\NewDocumentCommand 를 \DeclareExpandableDocumentCommand 로 바꾸어 보세요.