我正在编写 TeX 教程,不小心输入了\*
,然后发现编译器没有将其读取为错误。我知道添加*
触发\ifstar
条件,但我很好奇编译器如何处理\*
。
在 Overleaf 上,它不会产生任何错误或警告,但它也没有做任何可见的事情(甚至是一个很小的空间)。当编译器意识到控制序列标记是“ \*
”时会做什么?
答案1
本身*
不触发任何内容。只有一些命令会接受*
变体,但它们以特殊方式定义。例如,在 LaTeX 中,我们有
% latex.ltx, line 6002:
\DeclareRobustCommand\vspace{\@ifstar\@vspacer\@vspace}
所以如果\vspace
后面跟着*
,LaTeX 就会执行\@vspacer
(并吞噬星号),否则它就会执行\@vspace
。
在普通的 TeX 中没有*
-variant(除非定义基础结构并做出特定定义)。
根据标记化规则,\*
是控制符号它在纯 TeX 和 LaTeX 中被定义为产生“自由乘法符号”:如果将其用于连字符,它将在行\textfont2
尾产生一个细空格,后跟字符 2,通常是 ✕。它通常(但不经常)用于数学模式。
一个例子:
\documentclass{article}
\begin{document}
\parbox{0pt}{$x\*y$}
\end{document}
宽度\parbox
为零的 将强制\discretionary
使用。