这个问题是关于 LaTeX 如何在底层对符号进行建模。我想了解构建复杂文本表达式所涉及的语言/术语,例如:
\prod_{\tilde{x}^2_i \in X}^{\infty} \underset{\cdot}{a}^2_{n_r} + \overline{abc}
想知道像 这样的符号的术语是什么\prod
,以及像a
等式中那样用上下和两侧包围元素的术语是什么。正在进行分组,一些嵌套。我还注意到\bar
只覆盖中间字母abc
,而overbar
覆盖所有字母,我想这是基于字母/组的一些概念。还想知道是否有字母组的概念,例如\overline{abc}
作为单个单位,而+ \overline{abc}
被+
视为单独单位。似乎 LaTeX 已经在内部解决了这个问题,以不同的方式处理间距等。
此外,在某些情况下,LaTeX 用户似乎只是手动绘制形状以将线条放置在适当的位置,因此不存在标准化。但基本上要看术语标准化的程度。
答案1
TeX 识别十三种原子在数学公式中并以此为基础构建,就像数学中的任何公式都是建立在原子公式之上一样。
原子是 Ord、Op、Rel、Bin、Open、Close、Punct、Inner、Over、Under、Acc、Rad 和 Vcent。
实际上最终只考虑前八个,因为最后五个被转换为 Ord 个。
每个原子都有三个字段:原子核、下标和上标,而上标又可以包含其他原子。最后五种类型在本说明中同样很特殊,因为只有原子核才真正有意义。
Ord 表示“普通”符号,例如变量。Op 表示“运算符”,例如\sum
或\log
。Rel 和 Bin 表示“关系”和“运算”符号(例如<
或+
)。Open 和 Close 指括号之类的围栏。Punct 表示标点符号(逗号或分号)。
内部原子基本上由\left
–构建而成\right
(并包含子公式)。Over 来自\overline
, Under 来自。Acc 来自由 或等命令调用的\underline
原始元素。Rad 源自,由 内部使用。Vcent 是由 构建而成的特殊对象。\mathaccent
\bar
\tilde
\radical
\sqrt
\vcenter
Op 原子后面可以跟命令\displaylimits
、\limits
或\nolimits
;不指定相当于添加\displaylimits
:当公式本身以显示样式(来自$$...$$
或,在 LaTeX 用语中,\[...\]
或类似环境中)排版时,下标和上标字段将排版在运算符的下方和上方,或者在其他样式中排版在符号旁边。还存在可能在显示样式中选择更大版本的符号的规则。
任何符号或子公式都可以通过将其指定为\mathord
、\mathop
、\mathrel
、\mathbin
、或的参数来制成原子。然而,相当于更简单的。\mathopen
\mathclose
\mathpunct
\mathinner
\mathord{...}
{...}
你的特定问题是关于\bar
和\overline
。 类似 的东西\bar{abc}
(暂时)变成 Acc 原子;重音位于整个子公式之上,但没有更宽的版本,因此最终只覆盖b
。 与之\widetilde
不同,因为\mathaccent
命令指向具有更宽变体的字形(此信息已编码在字体中)。\overline{abc}
相反,使用 ,规则绘制在整个子公式之上,形成单个Over
原子(就间距而言,稍后将被视为 Ord)。
在根据内部表分配原子类型(分配\sum
给 Op、=
Rel 等)处理输入后,对获得的整个数学列表进行重新处理,以便在将 Over、Under、Acc、Rad 和 Vcent 原子转换为 Ord 后添加合适的数学间距;然后再次处理以将其转换为“盒子和胶水”。
TeXbook 中的整个附录 G 专门介绍了此类处理的规则。
答案2
控制数学间距的主要概念是数学课. 比较下面两个表达式
首先,每个原子都有数学类 0(\mathord
),所以没有特殊的间距。
在第二种方法中,运算符用 指定\mathop
,中缀二元运算符用 标记\mathbin
,关系用 标记,\mathrel
并且您会看到经典的 TeX 间距。
\documentclass{article}
\begin{document}
\[{X}_{0}^{n}{+}\mathrm{cos}{x}{=}0\]
\[\mathop{X}_{0}^{n}\mathbin{+}\mathop{\mathrm{cos}}{x}\mathrel{=}0\]
\end{document}
当然,你通常不必像这样手动对符号进行分类,例如
=
在 latex 中声明为
\DeclareMathSymbol{=}{\mathrel}{operators}{"3D}
所以默认情况下\mathrel
相似地
\DeclareMathSymbol{+}{\mathbin}{operators}{"2B}
声明默认情况下 + 是\mathbin
并\cos
定义为
\def\cos{\mathop{\operator@font cos}\nolimits}
因此如果您使用\cos
而不是\mathrm{cos}
那么您会得到额外的操作符间距。