\"
上部变音符号( 、\u
等)与下部变音符号( 、 等)的表现\c
似乎存在一些不一致之处\k
。上部变音符号位于
- 参数的第一个字符(或
\i
/ ),除非\j
- 参数以
{}
或命令 (\c c
) 开头,然后将其放置在插入的空格上前第一部分
另一方面,下部变音符号被放置在
- 参数的第一个字符,除非
- 参数以
{}
或 命令开头或者论点不完全a-z
,然后它围绕整个论点
下面是一些示例 TeX(使用 pdfLaTeX 从 Overleaf 输出)来演示这一点:
\begin{enumerate}
\item \u{A}
\item \u{\i}
\item \u{\c A}
\item \u{\copyright}
\item \c{aa}
\item \c{aA}
\item \c{AA}
\item \c{11}
\item \c{\u A}
\end{enumerate}
这些差异是否有记录在某处,或者有其他解释?我正在尝试将这些变音符号转换为 Unicode(至少对于居中的变音符号来说这似乎是不可能的),以供 BibTeX 解析器使用。
答案1
这些差异是由于 TeX 只能真的设置大写变音符号。该机制在 TeXbook 第 54 页中有描述。
字体中的每个字符都可以使用基\accent
元作为重音符。例如,\accent19 a
将插槽 19 中的字符(对于 Computer Modern 字体,这是重音符)设置在字母 a 上,得到 á。该命令\'
定义plain.tex
为
\def\'#1{{\accent19 #1}}
当字体中的字符用作重音符号时,TeX 会假定它是为具有1ex
相应字体高度的字符设计的;如果字符更高或更矮,则重音符号会向上或向下移动以解释差异。这就是为什么这种机制不适用于较低的变音符号:字符C计算机现代水平1ex
很高,而且确实\accent24 c
在C。 特点d然而,它更高,所以 TeX 将重音上移,并\accent24 d
给出d带有升高的变音符。因此,这些下部变音符号的实现方式非常不同:
\def\c#1{{\setbox\z@\hbox{#1}\ifdim\ht\z@=1ex\accent24 #1%
\else\ooalign{\unhbox\z@\crcr\hidewidth\char24\hidewidth}\fi}}
如果要重读的字符1ex
很高,则直接用 来设置,就像设置大写变音符号一样\accent24 #1
,否则,将单独设置重音符号,并与后续字符对齐。
现在关键点是,在\accent..
命令之后,TeX 会寻找要加重音的字符。两者之间只允许出现与模式无关的命令,例如赋值(尤其是字体更改,如果您希望重音和字符来自不同的字体),但不允许出现分组操作或框。因此,
\'{\hbox{a}} \'{{a}} \'{{}a}
都会阻止 TeX 找到A才会断定 后面没有合适的字符\accent
,在这种情况下,TeX 会将重音符号设置为普通字符,然后继续排版其余部分。 这与 相同,\copyright
不是简单字符,而是由圆圈和C,其定义包含方框。由于\c
通常只是将其输入与变音符对齐,因此它对方框进行操作,不会出现同样的问题。但是,如果该方框很高1ex
,它仍然会失败,因为它会accent24
直接使用。因此,
\c{\hbox{c}}
在变音符前设置变音符C, 但
\c{\hbox{d}}
得到d重音正确。
总而言之,以下是使用重音命令时应期望的行为。这实际上并不取决于您使用的是大写还是小写变音符号,而是取决于您的表达式是否会扩展为,\accent.. #1
或者重音符和重音符号是否会以另一种方式对齐:
- 如果
\accent
将原语应用于参数,它会为找到的第一个字符添加重音,但不得插入任何包含括号的内容。在后一种情况下,重音将放在字符前面。 - 如果它们的对齐方式不同,则取决于具体的实现,但在的情况下
\c
,它会将重音置于参数下方的中心。
与您的想法进行比较:
上部变音符号位于
- 参数的第一个字符(或
\i
/ ),除非\j
如果上部变音符号扩展为如下表达式,则为 true\accent.. #1
- 参数以
{}
或命令 (\c c
) 开头,则放置在第一部分之前插入的空格上
或者一般来说,如果参数涉及的不仅仅是赋值;而且从技术上讲,它不是放在插入的空间上,而是直接插入字体中的字形
另一方面,下部变音符号被放置在
- 参数的第一个字符,除非
- 参数以
{}
或 命令开头或者论点不完全a-z
,然后它围绕整个论点
取决于实现,但如果不直接设置\accent.. #1
,它通常会以整个参数为中心。声称它不以完全由 组成的参数为中心a-z
是一种错觉:这仅适用于所有字符都1ex
很高的情况,因为那时我们在\accent24 #1
的定义的情况下\c
,TeX 会很高兴找到一个合适的字符来应用它。如果你尝试\c{ad}
,你会看到 cedilla 再次被放在中间,因为框现在高于1ex
。