\csname silencia los errores

\csname silencia los errores

Parece que \csnamedefine automáticamente la secuencia de control en cuestión si aún no está definida. El siguiente código crea un documento que crea "ab c"; intercambiar \csnamelínea y \foolínea da un error. Esperaba \csnamesimplemente dar un error si se usaba con una secuencia de control indefinida, pero en lugar de eso parece que define la secuencia como algo vacío.

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

Se comporta exactamente igual en pdflatex y lualatex, y con algunas diferencias sintácticas, el mismo comportamiento ocurre también en pdftex y luatex. ¿Es este el comportamiento esperado (y, de ser así, dónde está documentado) y cómo puedo solucionarlo?

Respuesta1

No, el funcionamiento de \csnamees diferente de lo que crees.

\fooSi se define la secuencia de control , \csname foo\endcsnameserá equivalente a \foo.

De lo contrario, \csname foo\endcsnamelo definiría (localmente) \foocomo equivalente \relaxy lo procesaría como tal.

La cita relevante de “TeX by Topic” (página 131):

ingrese la descripción de la imagen aquí

Tu puedes hacer

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

para obtener el comportamiento que desea.

información relacionada