작성해둔 논문의 template을 변경해야 할 일이 있었는데 (IEEE -> ACM) 대충 양식만 바꾸고 컴파일 하니까 에러가 발생했다.
main.tex:492: Undefined control sequence. l.492 For an input circuit ${\cal C}$, let ${\cal F}_{all}$ and ${\cal F}_{s... The control sequence at the end of the top line of your error message was never \def'ed. If you have misspelled it (e.g., `\hobx'), type `I' and the correct spelling (e.g., `I\hbox'). Otherwise just continue, and I'll forget about whatever was undefined.
원래는 잘 컴파일되던 코드였는데? 문제가 뭔가 하니, \cal
명령어는 LaTeX 2.09까지 사용되었다가 LaTeX2e (1999)의 등장과 함께 더이상 사용되지 않는다고 한다. 대신 \mathcal
명령어를 사용해야 하며, syntax가 조금 다르다.
${\cal C}$ % cal $\mathcal{C}$ % mathcal
물론 .tex 파일 내 모든 명령어를 \mathcal
로 대체하면 해결할 수 있는 문제이지만 그러기에는 고칠 부분이 너무 많고 귀찮았다. vim에서 한 번에 처리가 가능할 것 같긴 한데 방법을 모르겠고. 그런데 기존에는 컴파일이 되던 코드였으니 원래 사용하던 template file (IEEEtran.cls)를 살펴봤고 아래와 같은 명령어를 발견할 수 있었다.
% provide the user with some old font commands % got this from article.cls % (중간 생략) \DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal}
와! 원래 사용할 수 없는 명령어를 저렇게 우회하고 있어서 컴파일이 가능했나 보다. 친절하기도 해라!
비슷하게 .tex 파일 앞부분에 아래 명령어를 넣어서 해결했다.
\makeatletter \DeclareRobustCommand*\cal{\@fontswitch\relax\mathcal} % \cal -> \mathcal \makeatother