据说,为了在字母“i”上放置重音符号,应该\i
先使用 删除 点。(当然,可能需要删除 点,这只是惯例问题。为了在拉丁语中表示元音长度,人们在带或不带 点的“i”上放置一个长音符号;也就是说,我遇到过这两种做法。)
然而,奇怪的是,重音命令\'
、、、和似乎会自动删除标题:\`
^
\"
\.
\documentclass{article}
\begin{document}
\verb|\ACCENT{i}|:\hphantom{\texttt{A}}\quad
\'{i} \`{i} \^{i} \"{i} \.{i} \~{i} \={i} \H{i} \r{i} \v{i} \u{i}
\verb|\ACCENT{\i}|:\quad
\'{\i} \`{\i} \^{\i} \"{\i} \.{\i} \~{\i} \={\i} \H{\i} \r{\i} \v{\i} \u{\i}
\end{document}
1. 自从什么时候开始 (La)TeX 中的重音命令会从这 5 种情况下的字母“i”中删除标题?(我是否遗漏了什么特殊情况?)
2. 我该如何避免这种情况?也就是说,我希望重音符号位于字母 i 上方和識別碼。
有趣的是,标题中的字母“j”保留了下来:
答案1
在输出编码的定义文件中,你可以找到用预组合的重音字符替换的定义组合;例如,t1enc.def
我们发现
\DeclareTextComposite{\.}{T1}{i}{`\i}
\DeclareTextComposite{\.}{T1}{\i}{`\i}
\DeclareTextComposite{\`}{T1}{i}{236}
\DeclareTextComposite{\`}{T1}{\i}{236}
\DeclareTextComposite{\'}{T1}{i}{237}
\DeclareTextComposite{\'}{T1}{\i}{237}
\DeclareTextComposite{\^}{T1}{i}{238}
\DeclareTextComposite{\^}{T1}{\i}{238}
\DeclareTextComposite{\"}{T1}{i}{239}
\DeclareTextComposite{\"}{T1}{\i}{239}
以便
\.i \`i \'i \^i \"i
完全等同于
\.{\i} \`{\i} \'{\i} \^{\i} \"{\i}
这是 中的相应代码ot1enc.def
,其中重音符号上方的点与预制字形相对应(当然是正常的带点的“i”):
\DeclareTextComposite{\.}{OT1}{i}{`\i}
\DeclareTextComposite{\.}{OT1}{\i}{`\i}
\DeclareTextCompositeCommand{\`}{OT1}{i}{\@tabacckludge`\i}
\DeclareTextCompositeCommand{\'}{OT1}{i}{\@tabacckludge'\i}
\DeclareTextCompositeCommand{\^}{OT1}{i}{\^\i}
\DeclareTextCompositeCommand{\"}{OT1}{i}{\"\i}
请注意,这些预定义组合t1enc.def
与 T1 编码字体中可用的预组合重音字母完全对应。对于其他重音,组合尚未定义,因此需要\i
按顺序排列字母,以消除点。
但是,没有人阻止你定义自己的复合材料:
\documentclass{article}
\DeclareTextCompositeCommand{\~}{OT1}{i}{\~\i}
\DeclareTextCompositeCommand{\=}{OT1}{i}{\=\i}
\DeclareTextCompositeCommand{\H}{OT1}{i}{\H\i}
\DeclareTextCompositeCommand{\r}{OT1}{i}{\r\i}
\DeclareTextCompositeCommand{\v}{OT1}{i}{\v\i}
\DeclareTextCompositeCommand{\u}{OT1}{i}{\u\i}
\begin{document}
\verb|\ACCENT{i}|:\hphantom{\texttt{A}}\quad
\'{i} \`{i} \^{i} \"{i} \.{i} \~{i} \={i} \H{i} \r{i} \v{i} \u{i}
\verb|\ACCENT{\i}|:\quad
\'{\i} \`{\i} \^{\i} \"{\i} \.{\i} \~{\i} \={\i} \H{\i} \r{\i} \v{\i} \u{\i}
\end{document}
为什么只定义了一些涉及“i”的组合,而不是所有组合?因为那些组合是最常见的,因为它们实际上对应于编码中的字形,而不常见的组合会浪费宝贵的内存(请记住,当 LaTeX2e 发布时,计算机与当前的机器有很大不同)。
如何“取消定义”这些带有“i”的组合?必须知道\DeclareTextCompositeCommand{\"}{OT1}{i}{\"\i}
定义宏
\\OT1\"-i
扩展为\"\i
,同时\DeclareTextComposite{\.}{OT1}{i}{`\i}
定义
\\OT1\.-i
扩展为\char`\i
(即“打印 i”)。LaTeX 在尝试重音时会测试此宏是否存在。请注意这个奇特的名称,其中第一个反斜杠表示转义字符,而内部的反斜杠只是字符。您可以定义一个函数来取消定义要排除的组合:
\documentclass{article}
\newcommand{\UndeclareTextComposite}[3]{%
\expandafter\let\csname\expandafter\string\csname #2\endcsname\string#1-\string#3\endcsname\relax
}
\UndeclareTextComposite{\'}{OT1}{i}
\UndeclareTextComposite{\`}{OT1}{i}
\UndeclareTextComposite{\^}{OT1}{i}
\UndeclareTextComposite{\"}{OT1}{i}
\UndeclareTextComposite{\.}{OT1}{i}
\begin{document}
\verb|\ACCENT{i}|:\hphantom{\texttt{A}}\quad
\'{i} \`{i} \^{i} \"{i} \.{i} \~{i} \={i} \H{i} \r{i} \v{i} \u{i}
\verb|\ACCENT{\i}|:\quad
\'{\i} \`{\i} \^{\i} \"{\i} \.{\i} \~{\i} \={\i} \H{\i} \r{\i} \v{\i} \u{\i}
\end{document}
关于“这些组合从什么时候开始定义的”这个问题,我在 LaTeX 源代码中找不到任何内容,所以我猜它们从 LaTeX2e 开始就存在了。我记得与 Claudio Beccari 的一次谈话中,他声称坚持要求 LaTeX 团队加入这些组合;这一添加可能发生在 LaTeX2e 发布之前,当时字体编码业务正在开发中。
最后,请注意 BibTeX 可以同样接受{\×i}
和{\×\i}
(其中\×
表示重音命令之一\.
, \`
, \'
, \^
, \"
)。(改编自在其他地方评论)
答案2
我无法回答您的第一个问题,但如果您确实需要这些变音符号组合,您可以通过以下tipa
包获取它们:
\documentclass{article}
\usepackage{tipa}
\usepackage{times}
\begin{document}
\huge
\'{\.{i}}
\`{\.{i}}
\textcircumdot{\i}
\"{\.{i}}
\.{\.{\i}}
\end{document}
但是,我想说这是一个特性而不是一个错误,因为它们没有常规用途(据我所知)。
答案3
问题是这些字符如何使用。我不知道有什么语言使用\"i
三个点。但是,在数学模式下,您可以设置重音符号:
$\dot{\textrm{i}} \grave{\textrm{i}} \check{\textrm{i}} \breve{\textrm{i}}$ \ldots