\csname은 오류를 침묵시킵니다.

\csname은 오류를 침묵시킵니다.

\csname아직 정의되지 않은 경우 문제의 제어 시퀀스를 자동으로 정의하는 것 같습니다 . 아래 코드는 "ab c"를 생성하는 문서를 생성합니다. \csname줄과 줄을 바꾸면 \foo오류가 발생합니다. 정의되지 않은 제어 시퀀스와 함께 사용하면 단순히 오류가 발생할 것으로 예상했지만 \csname대신 시퀀스를 빈 것으로 정의하는 것처럼 보입니다.

\documentclass{article}
\begin{document}
a
\csname foo\endcsname
b
\foo
c
\end{document}

pdflatex와 lualatex에서는 정확히 동일하게 동작하며, 일부 구문상의 차이가 있지만 pdftex와 luatex에서도 동일한 동작이 발생합니다. 이것이 예상되는 동작입니까? 그렇다면 해당 동작은 어디에 문서화되어 있습니까? 이 문제를 해결하려면 어떻게 해야 합니까?

답변1

아니, 그 일은 \csname당신이 믿는 것과 다릅니다.

제어 시퀀스가 \foo​​정의된 경우 는 \csname foo\endcsname와 동일합니다 \foo.

그렇지 않으면 (로컬에서) 동등한 것으로 \csname foo\endcsname정의 하고 그렇게 처리합니다.\foo\relax

"TeX by Topic"(131페이지)의 관련 인용문:

여기에 이미지 설명을 입력하세요

넌 할 수있어

\ifcsname foo\endcsname\csname foo\endcsname\else\ERROR\fi

원하는 행동을 얻으려면.

관련 정보