LaTeX 理论 - 符号的底层建模方式

LaTeX 理论 - 符号的底层建模方式

这个问题是关于 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}那么您会得到额外的操作符间距。

相关内容