\ csname은 오류를 차단합니다.
Sep 10 2020
\csname아직 정의되지 않은 경우 해당 제어 시퀀스 를 자동으로 정의하는 것 같습니다 . 아래 코드는 "ab c"를 만드는 문서를 만듭니다. 스와핑 \csname라인과 \foo라인에 오류가 있습니다. \csname정의되지 않은 제어 시퀀스와 함께 사용하면 단순히 오류를 줄 것으로 예상 했지만 대신 시퀀스를 빈 것으로 정의하는 것처럼 보입니다.
\documentclass{article}
\begin{document}
a
\csname foo\endcsname
b
\foo
c
\end{document}
pdflatex 및 lualatex에서 정확히 동일하게 작동하며 일부 구문 차이가 있지만 pdftex 및 luatex에서도 동일한 동작이 발생합니다. 예상되는 동작입니까 (그렇다면 어디에 문서화되어 있습니까?), 어떻게 해결할 수 있습니까?
답변
4 egreg Sep 10 2020 at 19:56
아니, \csname당신이 믿는 것과는 일 이 다릅니다.
제어 시퀀스가있는 경우 \foo에 정의 된 다음 \csname foo\endcsname에 해당 될 것이다 \foo.
그렇지 않으면 \csname foo\endcsname(로컬로) \foo동등하다고 정의 하고 \relax그렇게 처리합니다.
"TeX by Topic"의 관련 인용문 (131 페이지) :
넌 할 수있어
\ifcsname foo\endcsname\csname foo\endcsname\else\ERROR\fi
원하는 동작을 얻으려면.