语法紧凑的奇怪 ifnum

语法紧凑的奇怪 ifnum

在一些软件包中tabularx,我在很多地方发现了以下语法

{\ifnum0=`}\fi

甚至

\ifnum0=`{\fi}

但我不明白这有什么用?是`某种寄存器吗?还是在特定场合产生错误的 TeX-hack?

答案1

啊,\ifnumTeX 程序员们最爱的时髦括号组\halign:-)

`

是语法的一部分数字在 TeX 中。

125

是小数

"7D

是十六进制,并且

`}

是指定字符的字符代码(碰巧也是 125)。

所以....

{\ifnum0=`}\fi

内部\ifnum测试 0=125 是否为假,因此当展开时 这相当于{开始一个括号组。但是,如果标记没有被扩展,而 TeX 只是在寻找匹配{}对,那么它会将其视为匹配对,因此你可以

\def\foo{  {\ifnum0=`}\fi }

\def\foo{  {  }

是一个错误(或者至少不会就此停止}

通常,您可以使用隐式括号组\bgroup\egroup使用不匹配的{,但某些构造需要明确的{标记,因此这个技巧(由 Knuth 在 TeXBook 中解释)很有用。

通常,如果您发现用于分隔对齐单元格的环境&在嵌套对齐中不起作用,那是因为作者忘记在定义中使用这些组。

相关内容