LaTeX/特殊字符
在本章中,我们将讨论与输入编码、排版变音符号和特殊字符相关的主题。
在下文中,我们将针对所有除小写字母 a–z、大写字母 A-Z、数字 0–9 和英文标点符号以外的符号使用“特殊字符”。
某些语言通常需要专门的输入系统来简化文档编写。阿拉伯语、中文、日语、韩语等语言就是这种情况。此特定主题将在 国际化 中进行讨论。
生成带有变音符号(例如重音符号)的字符的规则略有不同,具体取决于您是在文本模式、数学模式还是制表环境中。
输入编码
[edit | edit source]TeX 默认使用 ASCII。但 128 个字符不足以支持非英语语言。TeX 有自己的方法,通过命令来处理每个变音标记(参见 转义代码)。但是,如果我们希望重音符号和其他特殊字符直接出现在源文件中,则必须告诉 TeX 我们要使用不同的编码。
LaTeX 提供多种编码
- ASCII:默认值。源文件中仅支持纯英文字符。
- ISO-8859-1(也称为 Latin 1):8 位编码。它支持大多数拉丁语语言的字符,仅此而已。
- UTF-8:Unicode 多字节编码。支持完整的 Unicode 规范。
- 其他...
在下文中,我们假设您要使用 UTF-8。
指定编码有一些重要步骤。
- 确保您的文本编辑器以 UTF-8 解码文件。
- 确保它以 UTF-8 保存您的文件。大多数文本编辑器不区分这两种情况,但有些区分,例如 Notepad++。
- 如果您在终端中工作,请确保它设置为支持 UTF-8 输入和输出。一些旧的 Unix 终端可能不支持 UTF-8。PuTTY 默认情况下未设置为使用 UTF-8,您需要对其进行配置。
- 告诉 LaTeX 源文件是 UTF-8 编码的。
\usepackage[utf8]{inputenc}
|
inputenc [1] 包告诉 LaTeX 您.tex文件的文本编码格式是什么。
如果您检查字符编码(例如使用 Unixfile命令),请确保您的文件中至少包含一个特殊字符,否则它将被识别为 ASCII(这很合理,因为 UTF-8 是 ASCII 的超集)。 |
inputenc 包允许用户在文档中更改编码 - 通过命令 \inputencoding{'编码名称'}
。
\usepackage[utf8]{inputenc}
% ...
% In this area
% The UTF-8 encoding is specified.
% ...
\inputencoding{latin1}
% ...
% Here the text encoding is specified as ISO Latin-1.
% ...
\inputencoding{utf8}
% Back to the UTF-8 encoding.
% ...
|
扩展支持
[edit | edit source]LaTeX 对 UTF-8 的支持相当具体:它只包含有限范围的 Unicode 输入字符。它只定义了那些已知在当前字体编码中可用的符号。您可能会遇到使用 UTF-8 可能会导致错误的情况
! Package inputenc Error: Unicode char \u8:ũ not set up for use with LaTeX.
这是因为 utf8 定义并不一定映射您能够在键盘上输入的所有字符字形。例如,这些字符包括
ŷ Ŷ ũ Ũ ẽ Ẽ ĩ Ĩ
在这种情况下,您可以尝试使用 utf8x 选项定义更多字符组合。 utf8x 未正式支持,但在某些情况下可能有效。但是,它可能会破坏与某些包(如 csquotes)的兼容性。
另一种可能性是坚持使用 utf8 并自己定义字符。这很容易
\DeclareUnicodeCharacter{'codepoint'}{'TeX sequence'}
|
其中 codepoint 是所需字符的 Unicode 码位。 TeX 序列 是在遇到与码位匹配的字符时要打印的内容。您可以在此 网站 上找到码位。码位很容易在网络上找到。示例
\DeclareUnicodeCharacter{0177}{\^y}
|
现在输入 ŷ 将有效地打印 ŷ。
转义代码
[edit | edit source]除了直接输入 UTF-8,LaTeX 还支持特殊字符的组合。如果您的键盘缺少一些所需的重音符号和其他变音符号,这很方便。
以下重音符号可以放在字母上。虽然大多数示例中都使用了“o”字母,但重音符号可以放在任何字母上。重音符号甚至可以放在“缺失”的字母上方;例如,\~{}
会在空白处生成一个波浪号。
以下命令只能在段落(默认)或 LR(左右)模式下使用。
LaTeX 命令 | 示例 | 描述 |
---|---|---|
\`{o} |
ò | 重音符 |
\'{o} |
ó | 锐音符 |
\^{o} |
ô | 圆形符号 |
\"{o} |
ö | 变音符、分音符或双点符号 |
\H{o} |
ő | 长匈牙利变音符(双锐音符) |
\~{o} |
õ | 波浪号 |
\c{c} |
ç | 尾音符 |
\k{a} |
ą | 尾音符 |
\l{} |
ł | 带横线的 l(带笔划的 l) |
\={o} |
ō | 长音符(字母上方的横线) |
\b{o} |
o | 字母下方的横线 |
\.{o} |
ȯ | 字母上方的点 |
\d{u} |
ụ | 字母下方的点 |
\r{a} |
å | 字母上方的圆圈(对于 å,还有一个特殊的命令 \aa ) |
\u{o} |
ŏ | 字母上方的短音符 |
\v{s} |
š | 字母上方的抑扬符/尖音符 ("v") |
\t{oo} |
o͡o | 两个字母上方的 "领带"(倒置的 u) |
\o{} |
ø | 带斜线的 o(带斜线的 o) |
{\i} |
ı | 无点 i(没有点的 i) |
旧版本的 LaTeX 在添加变音符号时不会移除 i 和 j 字母顶部的点。为了纠正这个问题,必须使用这些字母的无点版本,通过输入 \i
和 \j
。例如
\^{\i}
应该用于 i 上加尖音符 î;\"{\i}
应该用于 i 上加双点 ü。
然而,当前版本的 LaTeX 不再需要这样做(实际上,这样做可能会导致崩溃并出现错误)。
如果需要用一种语言编写完整的文档,并且该语言多次需要特定的变音符号,那么使用正确的配置就可以直接在文档中编写这些字符。例如,为了更方便地编写双点符号,可以将 babel 包配置为 \usepackage[german]{babel}
。这提供了 "o
的简写形式,用于 \"o
。如果需要在标签中使用一些文本重音,这将非常有用,因为否则将无法接受任何反斜杠。
有关语言配置的更多信息,请参见 国际化 部分。
小于 < 和 大于 >
[edit | edit source]两个符号 '<' 和 '>' 实际上是 ASCII 字符,但您可能已经注意到,它们分别打印 '¡' 和 '¿'。这是一个字体编码问题。如果您希望它们打印真实的符号,则必须使用其他字体编码,例如 T1,并使用 fontenc 包加载。有关字体编码的更多详细信息,请参见 字体。
或者,可以使用专用命令打印它们
\textless
\textgreater
|
欧元€货币符号
[edit | edit source]如今在编写关于金钱的内容时,您需要 欧元符号。 textcomp 包提供了一个 \texteuro
命令,它会提供当前文本字体提供的欧元符号。根据您选择的字体,这可能与官方符号相差甚远。
eurosym 提供了欧元符号的官方版本。在序言中加载它(可选地使用 official 选项)
\usepackage[official]{eurosym}
|
然后您可以使用 \euro{}
命令插入它。最后,如果您想要一个与当前字体样式匹配的欧元符号(例如,粗体、斜体等),您可以使用不同的选项
\usepackage[gen]{eurosym}
|
同样,您可以使用 \euro{}
插入欧元符号。
或者,您可以使用 marvosym 包,它也提供了欧元符号的官方版本。
\usepackage{marvosym}
% ...
\EUR{}
|
现在您已经成功地打印了欧元符号,您可能希望键盘上的 '€' 实际上打印出与上面一样的欧元符号。有一个简单的方法可以做到这一点。您必须确保使用 UTF-8 编码以及一个可用的 \euro{}
或 \EUR{}
命令。
\DeclareUnicodeCharacter{20AC}{\euro{}}
% or
\DeclareUnicodeCharacter{20AC}{\EUR{}}
|
完整示例
\usepackage[utf8]{inputenc}
\usepackage{marvosym}
\DeclareUnicodeCharacter{20AC}{\EUR{}}
|
温度和数学的度数符号
[edit | edit source]打印温度和角度值的 easiest 方式是使用 siunitx 包的 \SI{value}{unit}
命令,它在文本模式和数学模式下都有效
\usepackage{amsmath}
\usepackage{siunitx}
%...
A $\SI{45}{\degree}$ angle.
It is \SI{17}{\degreeCelsius} outside.
|
有关更多信息,请参见 siunitx 包的文档。
一个常见的错误是使用 \circ
命令。它不会打印正确的字符(尽管 $^\circ$
会)。请改用 textcomp 包,它提供了一个 \textdegree
命令。
\usepackage{textcomp}
%...
A $45$\textdegree angle.
|
对于温度,您可以使用相同的命令,或者选择 gensymb 包并编写
\usepackage{gensymb}
\usepackage{textcomp}
%...
17\,\celsius % best (with textcomp)
|
一些键盘布局包含度数符号,如果您使用的是 UTF-8 和 textcomp,可以直接使用它。为了获得更好的字体质量,我们建议使用合适的字体,例如 lmodern
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{textcomp}
% ...
17\,°C
17\,℃ % best
|
其他符号
[edit | edit source]LaTeX 有许多符号可用。大多数符号都在数学领域,后面的章节将介绍如何访问它们。对于更常见的文本符号,请使用以下命令
命令 | 示例 | 字符 |
---|---|---|
\%
|
% | |
\$
|
$ | |
\{
|
{ | |
\_
|
_ | |
\P
|
¶ | |
\ddag
|
n/a | ‡ |
\textbar
|
n/a | | |
\textgreater
|
> | |
\textendash
|
n/a | – |
\texttrademark
|
n/a | ™ |
\textexclamdown
|
n/a | ¡ |
\textsuperscript{a}
|
a | |
\pounds
|
n/a | £ |
\#
|
# | |
\&
|
& | |
\}
|
} | |
\S
|
§ | |
\dag
|
n/a | † |
\textbackslash
|
n/a | \ |
\textless
|
< | |
\textemdash
|
n/a | — |
\textregistered
|
n/a | ® |
\textquestiondown
|
n/a | ¿ |
\textcircled{a}
|
n/a | ⓐ |
\copyright
|
n/a | © |
上面表格中没有提到,在 LaTeX 代码中使用波浪号 (~) 来生成 不间断空格。要获得打印的波浪号符号,请编写 \~{}
或 \textasciitilde{}
。使用 \textvisiblespace
可以创建一个可见的空格 ␣。
对于一些更有趣的符号,由于 pifont 包,Postscript ZapfDingbats 字体可用。在你的序言中添加声明:\usepackage{pifont}
。接下来,命令 \ding{number}
将打印指定的符号。以下是可用符号的表格
在特殊环境中
[edit | edit source]数学模式
[edit | edit source]上面的一些以及一些类似的重音符号也可以在数学模式下生成。以下命令只能在数学模式下使用。
LaTeX 命令 | 示例 | 描述 | 文本模式等效 |
---|---|---|---|
\hat{o}
|
圆形符号 | \^
| |
\widehat{oo}
|
\hat 的宽版本,在多个字母上 |
||
\check{o}
|
V形或勾号 | \v
| |
\tilde{o}
|
波浪号 | \~
| |
\widetilde{oo}
|
\tilde 的宽版本,在多个字母上 |
||
\acute{o}
|
锐音符 | \'
| |
\grave{o}
|
重音符 | \`
| |
\dot{o}
|
字母上方的点 | \.
| |
\ddot{o}
|
字母上方的两个点(文本模式中的变音符) | \"
| |
\breve{o}
|
短音符 | \u
| |
\bar{o}
|
长音符 | \=
| |
\vec{o}
|
字母上的向量(箭头) |
当对字母 i
和 j
应用重音符时,可以使用 \imath
和 \jmath
来防止点与重音符重叠。
LaTeX 命令 | 示例 | 描述 | 带顶点的示例 |
---|---|---|---|
\hat{\imath}
|
字母 i 上的尖音符,没有顶点 |
||
\vec{\jmath}
|
字母 j 上的向量(箭头),没有顶点 |
制表环境
[edit | edit source]在制表环境中,一些用于正文的重音符具有其他用途。在这种情况下,可以使用以下命令来创建它们。
\a'
用于尖音符\a`
用于重音符\a=
用于长音符
Unicode 键盘输入
[edit | edit source]一些操作系统提供了键盘组合来输入任何 Unicode 代码点,即所谓的 unicode 组合键。
许多 X 应用程序(*BSD 和 GNU/Linux)支持Ctrl+Shift+u组合。应该会出现一个 "u" 符号。输入代码点并按下enter或space以实际打印字符。示例
<Ctrl+Shift+u> 20AC <space>
将打印欧元符号。
GNOME 和 KDE 等桌面环境可能提供可自定义的组合键,用于更易于记忆的序列。
Xorg 提供了具有变体的先进键盘布局,可以让您使用适当的修饰符组合轻松输入许多字符,例如Alt Gr. 这高度依赖于所选的布局+变体,因此建议您在键盘上玩一玩,在每个键和死键之前加上Alt Gr修饰符。
在 Windows 中,您可以按住Alt并输入一个<codepoint>以获取所需的字符。例如,
<Alt> + 0252
将打印德语字母 ü。
外部链接
[edit | edit source]注释和参考资料
[edit | edit source]- ↑ 有关该包的详细信息,请参阅 由该包作者编写的完整规范.