\ csname stummschaltet Fehler
Es scheint, dass \csnamedie betreffende Steuersequenz automatisch definiert wird, wenn sie nicht bereits definiert ist. Der folgende Code erstellt ein Dokument, das "ab c" erstellt. Das Vertauschen der \csnameLinie und der \fooLinie führt zu einem Fehler. Ich hätte erwartet \csname, einfach einen Fehler zu geben, wenn er mit einer undefinierten Steuersequenz verwendet wird, aber stattdessen scheint es, dass die Sequenz für etwas Leeres definiert wird?
\documentclass{article}
\begin{document}
a
\csname foo\endcsname
b
\foo
c
\end{document}
Es verhält sich in pdflatex und lualatex genau gleich, und mit einigen syntaktischen Unterschieden tritt das gleiche Verhalten auch in pdftex und luatex auf. Ist dies das erwartete Verhalten (und wenn ja, wo ist es dokumentiert) und wie kann ich es umgehen?
Antworten
Nein, die Arbeitsweise von \csnameunterscheidet sich von dem, was Sie glauben.
Wenn die Steuersequenz \foodefiniert ist, \csname foo\endcsnameentspricht dies \foo.
Andernfalls \csname foo\endcsnamewürde (lokal) definiert \foo, dass es äquivalent ist, \relaxund es als solches verarbeiten.
Das relevante Zitat aus „TeX nach Thema“ (Seite 131):
Du kannst tun
\ifcsname foo\endcsname\csname foo\endcsname\else\ERROR\fi
um das gewünschte Verhalten zu erhalten.