\ csname lỗi im lặng

Sep 10 2020

Có vẻ như nó \csnamesẽ tự động xác định trình tự điều khiển được đề cập nếu nó chưa được xác định. Đoạn mã dưới đây tạo một tài liệu tạo "ab c"; hoán đổi \csnamedòng và \foodòng dẫn đến lỗi. Tôi đã mong đợi \csnamechỉ đơn giản là đưa ra một lỗi nếu được sử dụng với trình tự điều khiển không xác định, nhưng thay vào đó, nó xuất hiện định nghĩa trình tự thành một cái gì đó trống?

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

Nó hoạt động hoàn toàn giống nhau trong pdflatex và lualatex, và với một số khác biệt về cú pháp, hành vi tương tự cũng xảy ra trong pdftex và luatex. Đây có phải là hành vi được mong đợi (và nếu có, nó được ghi lại ở đâu), và tôi có thể khắc phục nó như thế nào?

Trả lời

4 egreg Sep 10 2020 at 19:56

Không, hoạt động của \csnamekhác với những gì bạn tin tưởng.

Nếu trình tự điều khiển \foođược xác định, thì \csname foo\endcsnamesẽ tương đương với \foo.

Nếu không, \csname foo\endcsnamesẽ (cục bộ) định nghĩa \foolà tương đương với \relaxvà xử lý nó như vậy.

Trích dẫn liên quan từ “TeX theo chủ đề” (trang 131):

Bạn có thể làm

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

để có được hành vi bạn muốn.