\csname unterdrückt Fehler

\csname unterdrückt 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 von \csnameZeile und \fooZeile führt zu einem Fehler. Ich hätte erwartet, \csnamedass bei Verwendung mit einer undefinierten Steuersequenz einfach ein Fehler ausgegeben wird, aber stattdessen scheint es, als würde die Sequenz auf etwas Leeres definiert?

\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 das das erwartete Verhalten (und wenn ja, wo ist es dokumentiert) und wie kann ich es umgehen?

Antwort1

Nein, die Wirkungsweise \csnameist anders als Sie glauben.

Wenn die Steuersequenz \foodefiniert ist, \csname foo\endcsnameist dies gleichbedeutend mit \foo.

Andernfalls \csname foo\endcsnamewürde es (lokal) \fooals gleichwertig definiert \relaxund als solches verarbeitet.

Das relevante Zitat aus „TeX by Topic“ (Seite 131):

Bildbeschreibung hier eingeben

Du kannst tun

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

um das gewünschte Verhalten zu erhalten.

verwandte Informationen