我很好奇:为什么以下两个例子的行为不同?
示例 1:(有效,在 displaymath 模式下显示 xyz。)
\newcommand\weird{$$xyz$}
\weird$
示例 2:(错误,缺少插入 $。)
\newcommand\curious{$uvw$$}
$\curious
如果我\newcommand
用替换,会出现同样的现象\def
。
引擎盖下发生了什么?
答案1
第一个例子:
\newcommand\weird{$$xyz$}
\weird$
\weird
被扩展$$xyz$
并处理;$
确定第一个之后,TeX 会搜索下一个,因为...和...的设置$
方式有所不同;$
$
$$
$$
- TeX 找到后续的
$
,从而启动显示数学等式; - 处理完方程内部之后,寻找一个闭式
$$
; - TeX 找到
$
(的一部分\weird
)并像之前一样搜索后续的$
; - TeX 找到闭合值
$
(在 之外\weird
)并关闭显示数学等式。
使用更像 LaTeX 的编码,扩展的解释类似于
\[xyz\]
第二个例子:
\newcommand\curious{$uvw$$}
$\curious
- TeX 查找
$
并寻找以下内容,因为...和...的设置$
方式有所不同;$
$
$$
$$
- 没有后续的
$
(实际上,下一个标记是\curious
),因此 TeX 打开一个常规内联数学表达式; - TeX 扩展
\curious
为$uvw$$
; - TeX 查找
$
(内部\curious
)并关闭内联数学表达式; - TeX 流程
uvw
; - TeX 查找
$
并寻找以下内容,因为...和...的设置$
方式有所不同;$
$
$$
$$
- TeX 找到后续
$
并打开显示数学表达式; $$
未发现关闭— 错误。
使用更像 LaTeX 的编码,扩展的解释类似于
\(\)xyz\[
答案2
正如 TeXbook 第 24 章所解释的那样,(类别代码 3)$
不能处于垂直模式:如果在 TeX 处于垂直模式时发现它,则会启动水平模式并$
重新检查。
第 25 章规定
•
$
。“数学移位”字符使 TeX 进入数学模式或以以下方式显示数学模式:TeX 查看以下标记而不展开它。如果该标记是 a$
并且 TeX 当前处于不受限制的水平模式,则 TeX 会中断当前段落 […]。否则,TeX 会将查看的标记放回输入中,进入新的分组级别,插入标记\everymath
,并处理“⟨数学模式材料⟩$
[…]”。
该条款无需扩大是理解你发现的内容的关键。
随着\weird$
,TeX 不断扩展\weird
,因此它看到$$weird$$
。
使用$\curious
,以下标记$
是不是 $
,因此 TeX 会启动内联数学模式,并且只有在启动后(插入标记后\everymath
)才会扩展\curious
,这会留$curious$$
在输入流中。第一个$
结束刚刚启动的数学模式,$$
并将启动显示数学模式。
但是,\hbox{\weird$}
和 都\hbox{$\curious$}
不会引发错误,但在这种情况下xyz
和uvw
会处于文本模式。为什么会这样?“如果 TeX 当前处于不受限制的水平模式”子句进入 action: 在 内部\hbox
,TeX 处于受限制的水平模式:上述规则暗示在受限的水平模式下$$
只是一个空的数学公式。
答案3
latex 中的所有命令都以 开头。 前面的任何符号都将成为文本的一部分。 开头的 $ 符号表示它是一个数学符号。