\csname 消除錯誤

\csname 消除錯誤

\csname如果尚未定義,似乎會自動定義有問題的控制序列。下面的程式碼建立一個文檔,建立“ab c”;交換\csname線和\foo線會出現錯誤。如果與未定義的控制序列一起使用,我本希望\csname簡單地給出一個錯誤,但它似乎將序列定義為空的東西?

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

它在 pdflatex 和 luatex 中的行為完全相同,並且存在一些語法差異,在 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

以獲得您想要的行為。

相關內容