pgf/tikz 源代码中的控制序列 \@undefined 含义是什么?

pgf/tikz 源代码中的控制序列 \@undefined 含义是什么?

控制序列\@undefined在 pgf/tikz 源代码中出现了几次。例如,在文件中<pgf/tikz install dir>/utilities/pgfkeys.code.tex它出现了两次:

\expandafter\ifx\csname#1\endcsname\relax%
\else%
    \expandafter\ifx\csname#1\endcsname\@undefined%
    \else\pgfkeys@csname@testtrue%
    \fi%
\fi

\ifx\foreach\@undefined

但它也出现在其他文件中。

\@undefined不幸的是,我在 pgf/tikz 源代码中找不到 的定义。可能是我搜索得不够仔细,因为\和这两个字母@比较难懂。

  • 什么是\@undefined在 pgf/tikz 源代码上下文中
  • 它是否在 pgf/tikz 源代码的任何地方定义,或者它是一个已知的 TeX 控制序列(或 TeX 的某些扩展,例如 e-TeX),我只是不熟悉?

我已经考虑过这种可能性,即\@undefined它只是一些被认为未定义的控制序列,其目的是帮助测试其他控制序列是否使用习语定义

\ifx\someControlSequence\@undefined ...

但是,如果这确实是预期用途,那么我就不理解上面的第一个例子,因为表达式

 \expandafter\ifx\csname#1\endcsname\@undefined

总是会求值为false:如果控制序列\csname#1\endcsname已定义,这一点显而易见,如果未定义,则\csname...\endcsname构造将把它定义为\relax(这只是\csname...\endcsname构造的工作方式 - 参见 TeXbook 第 20 次印刷 1991 年第 40 页上的练习 7.7)。

答案1

\@undefined是按照惯例从未定义的 csname。打破这一惯例是个坏主意,因为几个核心 latex 命令(包括例如\caption)都包含测试(例如您展示的测试),这些测试假设它未定义。

所以

\ifx\foreach\@undefined

测试是否\foreach已定义

\expandafter\ifx\csname#1\endcsname\@undefined%
\else\pgfkeys@csname@testtrue%
\fi%

实际上和

\pgfkeys@csname@testtrue

因为扩展的结果\csname#1\endcsname永远不会未定义。

相关内容