输入 \'e 得到 é,输入 \"o 得到 ö。LaTeX 的 accent 命令——锐音符、变音符(umlaut)、波浪号、háček——名字只有 一个字符,而且那个字符本身就是标点。LaTeX 里没有别的命令是这样命名的。这是键盘打不出 é 的年代留下的设计,底层是 Knuth 写进 plain TeX 的 \accent 原语。本页用来查每个命令实际输出什么:16 个文本 accent 命令、并非 accent 的字母(\ss、\ae、\oe、\aa、\l)、无点的 \i 和 \j,以及公式用的 \hat、\bar、\vec、\dot。此外还有表格显示不出来的一点:fontenc 是否选 T1,不只决定能排出哪些符号,还决定 带 accent 的单词能不能断词——下面用实测数据说明。
16 个 accent 命令,各自输出什么
文本模式的 accent 共有 16 种,每一种都 以一个字母为参数。\'o 和 \'{o} 输出相同的字符,花括号可省略。放在字母上方的 11 个——锐音符、抑音符、扬抑符、分音符、波浪号、长音符、上点、短音符、háček、双锐音符、上圈——直接来自 Knuth 的 plain TeX,由 \accent 原语构成。挂在下面的 \c(软音符)、\d(下点)、\b(下横线),跨两个字母的 \t(连接符),以及 \k(ogonek),机制则不同。
| 命令 | 输出 | 名称 | 备注 |
|---|---|---|---|
\'o | ó | 锐音符 | OT1 与 T1 皆可 |
\`o | ò | 抑音符 | 反斜线加反引号 |
\^o | ô | 扬抑符 | 法语的 â ê î ô û |
\"o | ö | umlaut / 分音符 | 德语 ä ö ü,法语 ë ï |
\~n | ñ | 波浪号 | 西班牙语 ñ,葡萄牙语 ã õ |
\=o | ō | 长音符 | 转写与词典中的长元音 |
\.o | ȯ | 上点 | 波兰语 ż、立陶宛语 |
\u o | ŏ | 短音符 | 罗马尼亚语 ă、韵律标记 |
\v c | č | háček / caron | 捷克语 č š ž |
\H o | ő | 双锐音符 | 匈牙利语 ő ű,俗称「匈牙利变音符」 |
\r o | o̊ | 上圈 | \r a 即 å,与 \aa 同字 |
\c c | ç | 软音符(下) | 法语 ç,土耳其语 ç ş |
\d o | ọ | 下点 | 由叠印合成,不是字体中的单个字形 |
\b o | o̲ | 下横线 | 同样是叠印;用于转写 |
\t oo | o͡o | 跨两字母的连接弧 | 唯一取自 TS1/OML 的 accent,参数为两个字母 |
\k a | ą | ogonek(下钩) | 仅 T1 可用;波兰语 ą ę |
% braces are optional for a single letter, required for a command
r\'esum\'e, na\"ive, se\~nor, G\"odel, \c{c}a va, \H{o}r\'an
% two-letter argument: the tie accent
t\t{oo}k出现 Command \k unavailable in encoding OT1. 时
这个错误的意思是,你要的 accent 在当前生效的字符编码中不存在。pdfLaTeX 的默认编码仍是 1980 年代的 OT1,其中没有 \k(ogonek)。解决办法只有一行:在导言区加 \usepackage[T1]{fontenc}。还有别的命令同样如此——在 TeX Live 2024 上实测,\dj 与 \DJ(克罗地亚语 đ)、\th 与 \TH(冰岛语 þ)、\dh 与 \DH(ð)、\ng 与 \NG(ŋ)都会给出完全相同的提示。
\documentclass{article}
\usepackage[T1]{fontenc} % without this, \k \dj \th \dh \ng all error
\begin{document}
Polish: j\k{e}zyk. \quad Croatian: \dj\ \quad Icelandic: \th\ \dh
\end{document}不过真正的代价并不在会报错的命令上,而在 不报错的那些 上。OT1 里没有单个的 é,于是 LaTeX 用 \accent 合成:把锐音符放到 e 上。但对 TeX 而言,\accent 是连字与紧排(kerning)链条中断的边界。实测:OT1 下 AV 宽 13.8889pt,而 \'AV(Á 后接 V)为 15.00003pt——A 与 V 之间 1.11113pt 的紧排整个消失了。改用 T1 后,Á 是单一字形,AV 与 \'AV 都是 13.8855pt。
断词上的差别更明显。运行 \showhyphens{universit\'e r\'esum\'e},OT1 给出 uni-ver-sité résumé——résumé 完全没有断点。同样的输入改用 T1 编译,结果是 uni-ver-sité ré-sumé。当一篇 accent 密集的文档(法语、波兰语、捷克语,或只有人名带 accent 的英文论文)行末总是空得难看时,原因多半在此。反过来说,用 pdfLaTeX 排西文时,\usepackage[T1]{fontenc} 不是锦上添花,而是必需品。
无点的 \i、\j:16 个命令里只有 7 个真的需要
先说结论:你几乎不需要写 \"{\i}。翻看 ot1enc.def 与 t1enc.def 可以看到,对锐音符、抑音符、扬抑符、分音符和上点这 5 个 accent,LaTeX 已经通过 \DeclareTextComposite / \DeclareTextCompositeCommand 自动把参数里的 i 换成无点 i。在 TeX Live 2024 上实测,\"i 与 \"{\i} 都得到完全相同的 ï,宽度同为 3.33252pt。真正需要你手写 \i 的,是余下 7 个:\~、\=、\u、\v、\H、\r、\k。
% the dot is removed automatically for these five
na\"ive \quad \'idem \quad \`ile \quad \^ile \quad \.i
% here you must ask for the dotless letter yourself
\v{\i} \quad \u{\i} \quad \={\i} \quad \~{\i} \quad \H{\j}\i 和 \j 并不是 accent 的组成部分,而是 本身就是字母。它们在 OT1 中位于 16、17 号位,在 T1 中位于 25、26 号位;单独写 \i 就得到无点 i(ı)。在土耳其语这类把无点 i 当作独立字母的语言里,它不是装饰而是拼写的一部分。公式模式中的对应命令名字不同、模式也不同:\imath 和 \jmath。
\ss \ae \oe \o \aa \l——它们是字母,不是 accent
这一组不带参数,因为 ß、æ、ø、ł 并不是带 accent 的元音,而是各自语言中 独立的字母。大写形式就是把命令名首字母大写:\AE、\OE、\O、\AA、\L。唯有 \SS 是例外:在 TeX Live 2024 上,无论 OT1 还是 T1,它输出的都是 「SS」两个字母,而不是大写 ß(latex.ltx 中的默认定义正是 \DeclareTextCommandDefault{\SS}{SS})。若需要德语大写 eszett ẞ,可靠做法是在 Unicode 引擎上使用含该字形的字体。
| 命令 | 输出 | 语言 | 备注 |
|---|---|---|---|
\ss | ß | 德语 | \SS 给出 SS 两个字母,而非 ẞ |
\ae | æ | 丹麦语、古英语 | 大写为 \AE |
\oe | œ | 法语 | cœur、sœur;大写为 \OE |
\o | ø | 丹麦语、挪威语 | 大写为 \O;与公式中的 \emptyset 不同 |
\aa | å | 瑞典语、挪威语 | 与 \r a 同字;大写为 \AA |
\l | ł | 波兰语 | OT1 下靠叠画合成;只有 T1 才是真正的字形 |
\dj | đ | 克罗地亚语、越南语 | 需要 T1;大写为 \DJ |
\th | þ | 冰岛语 | 需要 T1;\dh 得 ð,\ng 得 ŋ |
\ij | ij | 荷兰语 | ij 合字;大写为 \IJ |
\l 是本节里唯一 会影响 PDF 内部数据 的差别。OT1 的 \l 并不是真正的 ł,而是在 l 上叠画一小道斜线合成的;把 TeX Live 2024 生成的 PDF 交给 pdftotext,抽取出来的只是一个 l。改用 T1,真正的 ł 位于 170 号位,检索和复制粘贴都正常。下方 accent 的 \d、\b 也一样:\d o(ọ)从 PDF 中抽出来是 o.。正文里看着对了往往就够了,但对书目数据和需要检索的词就不够。
正文里写 \hat{x} 会得到 ! Missing $ inserted.——公式 accent 是另一套
文本 accent 与公式 accent 在名称和实现上完全分属两套,越界会在两个方向都报错,而且措辞不同,正好可以用来判断原因。正文里写 \hat{x} 会得到 ! Missing $ inserted.;反过来在公式里写 $\'e$ 会得到 ! Please use \mathaccent for accents in math mode.(两者均在 TeX Live 2024 上实测)。前者是 TeX 好意替你打开公式模式却失败;后者则直接点名:那个 accent 属于文本。
| 命令 | 外观 | 典型用途 | 备注 |
|---|---|---|---|
\hat{x} | 尖帽 | 估计量、单位向量 | 可伸缩形式为 \widehat |
\tilde{x} | 波形 | 近似值、变换后的量 | 可伸缩形式为 \widetilde |
\bar{x} | 短横线 | 样本均值、复共轭 | 覆盖整个表达式用 \overline |
\vec{v} | 小的右箭头 | 向量 | \vec{AB} 不会伸长;应用 \overrightarrow |
\dot{x} | 一个点 | 一阶时间导数 | 自牛顿以来的力学记法 |
\ddot{x} | 两个点 | 二阶时间导数 | 加速度 |
\dddot{x} | 三个点 | 三阶时间导数 | 需要 amsmath;\ddddot 为四个点 |
\acute{x} | 锐音符 | 语言学,偶尔用于数学 | 与文本的 \' 形状相同 |
\grave{x} | 抑音符 | 语言学,偶尔用于数学 | 与文本抑音符形状相同 |
\check{x} | v 形(háček) | 几何与代数中的标记 | 如 Čech 上同调的 Č |
\breve{x} | 碗形(短音符) | 几何与代数中的标记 | 常与 \check 配对使用 |
\mathring{x} | 小圆圈 | 几何标记、内部(开核) | 相当于 \r 的公式版 |
\usepackage{amsmath} % \dddot, \ddddot
\[
\dot{x}, \quad \ddot{x}, \quad \bar{x}, \quad \hat{p},
\quad \tilde{a}, \quad \vec{v}, \quad \check{s}, \quad \mathring{r},
\quad \hat{\imath}, \quad \vec{\jmath}
\]有两点实务提醒。第一,accent 叠放并不整齐:像 \hat{\vec{x}} 这样叠两层,上方标记往往会漂浮或偏离中心。如果只是想加点,用 \ddot / \dddot / \ddddot;如果确实要叠层,最好用下一页介绍的 \overset 显式构造。第二,amsmath 的 \dddot 在上标里不会缩小。实测 $x^{\ddot a}$ 为 10.55292pt,而 $x^{\dddot a}$ 为 16.21565pt——三个点仍保持正文尺寸。遇到这种情况,载入 mathdots 宏包即可修正。
该写 \'e,还是直接打 é?
如果已载入 T1,两种写法的输出完全相同。 实测显示 \'e、\'{e} 与直接输入的 é 三者宽度都是 4.44336pt,落到同一个字形上;而且自 2018 年起 LaTeX 默认读取 UTF-8,无需再写 inputenc。若想让源文件更易读,直接输入更有利。命令写法主要在三种场合仍然保留:要求 ASCII 的投稿规范、.bib 文件中的人名,以及 tabbing 环境。在 tabbing 里,\' 被「移到制表位」的命令占用,因此 accent 要用专门的 \a' 形式——就是在前面加上 \a。
% inside tabbing, \' means "go to a tab stop" — use \a' for the accent
\begin{tabbing}
caf\a'e \= au lait \\
th\a'e \> vert
\end{tabbing}- 用 pdfLaTeX 排西文时,务必加上
\usepackage[T1]{fontenc}。 断词、紧排和 PDF 可检索性会一并修好 - 正文直接输入带 accent 的字母;
.bib按投稿方的规定来。 同一项目内不要混用两种写法 - 只有
\~\=\u\v\H\r\k这 7 个需要写\i。 其余 5 个由 LaTeX 自动处理 \SS是 SS,不是 ẞ。 需要大写 eszett 就改用 Unicode 引擎和含该字形的字体\hat属公式,\^属文本。 错误文本会告诉你身在哪一侧:! Missing $ inserted.还是! Please use \mathaccent …