下部变音符号有时居中,而上部变音符号则相反

下部变音符号有时居中,而上部变音符号则相反

\"上部变音符号( 、\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}

TeX 输出

这些差异是否有记录在某处,或者有其他解释?我正在尝试将这些变音符号转换为 Unicode(至少对于居中的变音符号来说这似乎是不可能的),以供 BibTeX 解析器使用。

答案1

这些差异是由于 TeX 只能真的设置大写变音符号。该机制在 TeXbook 第 54 页中有描述。

字体中的每个字符都可以使用基\accent元作为重音符。例如,\accent19 a将插槽 19 中的字符(对于 Computer Modern 字体,这是重音符)设置在字母 a 上,得到 á。该命令\'定义plain.tex

\def\'#1{{\accent19 #1}}

当字体中的字符用作重音符号时,TeX 会假定它是为具有1ex相应字体高度的字符设计的;如果字符更高或更矮,则重音符号会向上或向下移动以解释差异。这就是为什么这种机制不适用于较低的变音符号:字符C计算机现代水平1ex很高,而且确实\accent24 cC。 特点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

相关内容