有人能至少告诉我在 TeX 的哪个部分可以找到字母上各种重音符号/装饰符号的定义吗,比如变音符?
答案1
重音符号是在格式中定义的,因此它们的定义位置取决于格式。我假设您使用的是 LaTeX,并且对文本重音符号感兴趣,而不是数学。
LaTeX 几乎将所有这些命令归类为编码特定所以实际的定义取决于当前使用的字体的声明编码。
我将使用 OT1(原始 TeX 7 位)和 T1(基于 latin1 的 8 位)编码作为示例
ot1enc.def
,并t1enc.def
在基础 Latex 分布中的文件定义:
ot1enc
\DeclareTextAccent{\.}{OT1}{95}
\DeclareTextCommand{\c}{OT1}[1]
{\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
\else{\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}}\fi}
因此,在 T1 中,\.
使用 TeX 基元\accent
将重音符号放置在基本字母上的位置 95 处。\c
位于位置 24 处,并使用重音符号基元放置,或者“手动”使用表格构造放置,具体取决于基数的大小。
t1enc
\DeclareTextAccent{\.}{T1}{10}
\DeclareTextCommand{\c}{T1}[1]
{\leavevmode\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent11 #1%
\else{\ooalign{\unhbox\z@\crcr
\hidewidth\char11\hidewidth}}\fi}
\DeclareTextComposite{\c}{T1}{S}{147}
\DeclareTextComposite{\c}{T1}{T}{149}
\DeclareTextComposite{\c}{T1}{s}{179}
\DeclareTextComposite{\c}{T1}{t}{181}
\DeclareTextComposite{\.}{T1}{i}{`\i}
\DeclareTextComposite{\.}{T1}{\i}{`\i}
\DeclareTextComposite{\.}{T1}{Z}{155}
\DeclareTextComposite{\.}{T1}{I}{157}
...
因此,T1 类似,只是重音符号在字体中的位置不同,最常见的组合是不是构造时\accent
完全使用,但字体中预先设计了字形,有自己的位置。因此,OT1
\.{s}
使用一个点字形和一个 s 字形,并将一个置于另一个之上,但在T1
编码时,它只使用位置 179 的带点 s 字形。
答案2
所有重音符号的定义都在文件中plain.tex
,附录b中附有代码的一点点解释。教科书. 重音定义主要有三种:
使用基元来定义字体中用于修饰小写字母的适当位置的重音符号
\accent
(所有此类重音符号在专为 tex 设计的 cm 字体中宽度均为零,并且位于中等宽度的小写字母上,尽管 tex 程序会调整水平定位以适应更宽或更窄的字母,并根据需要调整垂直定位以适应大写或更高的小写字母);\oalign
使用(也在 `plain.tex 中定义) 来定义那些与其他符号或形状 (例如一个点或一个规则) 共同使用并且旨在设置在字母或符号上方的重音符号;位于字母下方的 cedilla 符号(因为 cedilla 符号在字体中)使用 来访问
\accent
,如果应用于高度大于 的字母1ex
,则使用 调整到正确的垂直位置\ooalign
。(这是一个临时解决方案,如果 knuth 需要其他“下”重音符号,例如 ogonek,可能会以不同的方式实现,使用真正的“下重音”原语。)
这是关于文本中重音的故事;数学重音则是另一回事,正如 stephan lehmke 在回答中指出的那样。
答案3
答案4
也许你应该更详细地说明你希望在哪个级别上获得这些信息。TeXbook 关于定位数学重音的说法(第 443 页):
12 . 如果当前项目是 Acc 原子(来自 \mathaccent),如果重音字符在当前大小中不存在,则转到规则 16。否则将框 x 设置为样式 C' 中的原子核,并将 u 设置为此框的宽度。如果原子核不是单个字符,则让 s = 0;否则将 s 设置为原子核的字距量,后跟其字体的 \skewchar。如果重音字符在其字体中有一个宽度 ≤ u 的后继,则将其更改为后继并重复此句子。现在设置 δ ← min(h(x); χ),其中 χ 是重音字体中的 \fontdimen5(x 高度)。如果原子核是单个字符,则将框 x 替换为包含原子核以及样式 C 中的 Acc 原子的上标和下标的框,并将 Acc 原子的上标/下标清空;还使 δ 增加 h(x) 新值与旧值之间的差值。将重音符号放入新的框 y 中,包括斜体修正。令 z 为一个垂直框,由以下部分组成:框 y 向右移动 s + 1/2 (u - w(y))、核外直方图 -δ 和框 x。如果 h(z) < h(x),则在框 y 上方添加一个核外直方图 h(x) - h(z),并设置 h(z) ← h(x)。最后设置 w(z) ← w(x),用框 z 替换 Acc 原子的原子核,并继续执行规则 16。
如果你能理解这一点,欢迎你 :-)