LaTeX/特殊字符
在本章中,我们将解决与输入编码、排版重音符号和特殊字符相关的相关问题。
在下文中,我们将针对除小写字母 a-z、大写字母 A-Z、数字 0-9 和英语标点符号以外的所有符号使用 特殊字符。
一些语言通常需要一个专用的输入系统来简化文档编写。例如阿拉伯语、中文、日语、韩语等。这个特定问题将在 国际化 中解决。
使用重音符号(如重音符号)生成字符的规则,根据您是处于文本模式、数学模式还是制表环境中而略有不同。
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.
% ...
|
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}
|
现在输入 ŷ 将有效地打印 ŷ。
除了直接的 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} |
š | 尖音符/háček(“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 way 是使用\SI{value}{unit}
命令,该命令来自siunitx包,它在文本和数学模式下都有效
\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]- ↑ 有关该软件包的详细信息,请参阅由该软件包作者撰写的完整规范。