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>처럼 입력하시면 좋습니다.
\DeclareRobustCommand가 무엇인지요?
2011.11.22 08:50
앞의 글에서 Progress님이 올리신 예제에 \DeclareRobustCommand가 쓰였던데, 그게 무엇을 의미하는지 모르겠습니다.
http://tex.loria.fr/general/new/clsguide.html 같은 데에서 보니 Robust, moving argument라는 말이 나오고
또다른 어떤 글에서는 예로 \ ( 와 \ )가 robust하지 않을 때 어쩌구 저쩌구라고 말하는데, robust와 moving argument가 무엇을 뜻하는지요?
10년 가까이 이걸 모른 채 지내도 아무 불편이 없었던 것으로 보아 (아마도 수식에 관계된 것인가 싶어) 저와는 별 관계가 없는 듯도 하지만요.
댓글 5
-
gromob
2011.11.22 10:48
-
nova de hi
2011.11.22 11:47
moving arguments라는 것은 예컨대 \section, \caption 등의 인자로 오는 것을 가리키는데요.
이 인자들의 특징은 나중에 toc나 lot, lof에서 한번 더 사용된다는 것입니다.
그러기 위해서 일단 이 내용을 .aux에 쓰는데 말이죠....
간단히 생각해보자면 예를 들어 \newcommand{\AAA}{Progress}라고 정의한 어떤 커맨드가 있을 때
\section{\AAA}의 결과로 .aux에 기록되는 내용은 "\AAA"일까요 "Progress"일까요?
결론만 말하자면 "Progress"인 거구요 이것을 "풀렸다" (fragile하다)고 합니다.
이 "풀림" 방지를 위해 보통 \section{\protect\AAA}라고 쓰게 되는데 이러면 .aux에 정말로 "\AAA"라고 적히겠죠.
\DeclareRobustCommand는 LaTeX 명령으로서 애초부터 이 명령이 풀리지 않게 정의해두라는 의미입니다.
\DeclareRobustCommand{\BBB}{Yihoze}라고 하면 \section{\BBB}의 결과 .aux에 "\BBB"라고 기록되는 거죠.
재미있는 사실은 \TeX 이라는 로고 명령은 풀리는(fragile) 명령인데 \LaTeX은 Robust해요.
다음을 컴파일한 다음 .aux를 열어서 지금 한 얘기를 확인해보세요.
\documentclass{article}
\newcommand\AAA{Progress}
\DeclareRobustCommand\BBB{Yihoze}
\begin{document}
\section{\AAA \TeX}
\section{\BBB \LaTeX}
\end{document}
-
Progress
2011.11.22 13:40
저도 텍은 안 쓰고 레이텍을 쓰는데요.
\DeclareRobustCommand\BBB{Yihoze} 밑에
\renewcommand\BBB{Not only Yihoze but also Progress }
라고 추가해주시면 감사하겠습니다. ^^;
-
yihoze
2011.11.22 12:29
그렇네요.
\@writefile{toc}{\contentsline {section}{\numberline {1}ProgressT\kern -.1667em\lower .5ex\hbox {E}\kern -.125emX\spacefactor \@m }{1}}
\@writefile{toc}{\contentsline {section}{\numberline {2}\BBB \LaTeX }{1}}
고맙습니다. -
gromob
2011.11.22 13:58
그러니까 단단히 묶어두라는 말이군요. 원래 robust라는 말의 뜻을 알 것 같습니다.
음 이런 질문 자주 해야겠군.
이래야 텍을 배우는거 같네요.
그니까 프로..스 님은 꽁꽁 묶이고 싶다는 의사 표현인 듯.
저도요.
프로그래밍쪽에서도 가끔씩 보이는 단어인데 가르쳐주는 사람이 없어서 그냥 넘어가고 있었던 단어예요.
쉽고 멋진 답을 해 주시면 대단히 감사하겠습니다.