特殊字符

LaTeX 中有 10 个 字符不能直接输入后期待原样显示:# $ % & _ { } ~ ^ \。这是因为它们分别承担“注释”“进入数学模式”“命令开头”等特殊作用。本页汇总每个字符的作用,以及当你确实需要字符本身时该如何打印。

10 个保留字符

保留字符 是 LaTeX 作为语法一部分使用的字符,因此如果直接写在正文中,它会触发某种行为,而不是被打印出来。输入 % 后,该行剩余部分会作为注释消失;输入 $ 后,会切换到数学模式。要让这些字符在页面上 作为它本身 出现,需要额外处理一下。

各字符的作用如下。# 在宏定义中表示参数;$ 开始和结束数学模式;% 开始注释(忽略该行剩余部分);& 在表格或对齐环境中分隔列(单元格)。_^ 在数学中引入下标和上标;{} 限定参数或分组范围。~ 产生不会断行的词间空格,而 \(反斜杠)位于每个命令的开头。

字符特殊作用
#宏定义中的参数(#1, #2, …)
$开始和结束数学模式
%开始注释(忽略该行剩余部分)
&表格和对齐环境中的列(单元格)分隔符
_数学模式中的下标
^数学模式中的上标
{开始参数或分组
}结束参数或分组
~不会断行的词间空格
\开始命令

打印字符本身

这 10 个字符中有 7 个 很简单:只要在前面加一个反斜杠即可,也就是 \#, \$, \%, \&, \_, \{, \}。例如写 \$1.23 会打印 $1.23。反斜杠相当于提示“下一个字符是它本身,不是命令的开头”。

剩下 3 个 要麻烦一些。~\textasciitilde(或 \~{})输出,^\textasciicircum(或 \^{})输出。单独写 \~\^ 时,它们会被解释为 *重音* 命令,把波浪线或帽子放到 下一个字母上方;加上空的 {} 后,重音没有对象可放,就留下符号本身。

最后是反斜杠本身:用 \textbackslash 打印。不要使用 \\,它不是两个反斜杠,而是换行命令。这是非常容易出错的陷阱。

输入输出备注
\##前面加一个反斜杠
\$$同上
\%%同上
\&&同上
\__同上
\{{同上
\}}同上
\textasciitilde~\~{} 也可;单独的 \~ 是重音
\textasciicircum^\^{} 也可;单独的 \^ 是重音
\textbackslash\不能用 \\,那是换行命令

\textbackslash\textasciitilde\textasciicircum 现在属于 LaTeX 内核,无需额外包即可使用(历史上它们来自 textcomp)。不过有些西文字体在正文字面中没有独立的波浪线或插入符号字形;在这种字体中,使用这些文本符号命令最可靠。

实例

试着打印一句包含许多保留字符的文本,例如 100% & $5 cost #1。其中 %&$# 都要用前置反斜杠转义。

latex
100\% \& \$5 cost \#1

% backslash, tilde and caret need their own commands:
A path: C:\textbackslash Users \\
Math symbols out of math: \textasciitilde{} and \textasciicircum{}

第一行会排成 100% & $5 cost #1。后面的部分中,Windows 风格路径使用反斜杠(\textbackslash),独立的波浪线和插入符号使用 \textasciitilde{}\textasciicircum{}(行末的 \\ 是输出换行命令,不是打印反斜杠)。

有很多特殊字符或 URL 时

对密集包含保留字符的代码片段或符号串逐个转义很费力。这时 verbatim 机制很有用。行内可写 \verb|...|,用内容中不会出现的某个字符(这里是 |)围住文本;其中内容会以等宽字体原样打印,所有特殊含义都会关闭。多行内容则使用 verbatim 环境。

latex
Use \verb|a_b^c & d%| to show specials literally.

\begin{verbatim}
foo_bar = 100% & #1   % all printed as-is
\end{verbatim}

对于容易包含 ~#%_ 的字符串,尤其是 URL,适合使用 url(或 hyperref)包的 \url{...}。它会自动处理内部的保留字符,以等宽字体排版,并在合适位置换行,因此不需要手动转义。

latex
\usepackage{hyperref}
% ...
See \url{https://example.com/path?id=1#sec_2~ok}

总之,单个符号按表中方式转义,密集代码片段或符号块交给 \verb / verbatim,URL 交给 \url{},这样记住就足够了。语法本身的整体思路在“语法规则”中说明,正文中可用的各种符号在“文本符号”页中介绍。

先区分容易出错的输入

在报告和技术文档中,出错的原因往往不是正文,而是文件名、URL、类型名和表格单元格中包含的 _%&。开始写稿时,先把材料分成三类:“作为自然语言阅读的文本”“按代码原样展示的内容”“作为链接处理的内容”。这样一来,特殊字符该如何转义也会自然确定。

场景使用工具判断
price单个转义,如 \$\%文本应作为普通正文阅读时使用
code\verbverbatim原样显示源代码、终端输出或短路径
url\url{...}(通常与 hyperref 配合)把长 URL 排成可换行链接

表格尤其需要小心:因为 & 用来分隔单元格,若公司名或论文题名中的 ampersand 没有转义,列数就会错位。从外部粘贴表格数据时,先搜索 &%,逐个判断它是正文符号还是 LaTeX 语法,然后再编译,就能避免原因不明的表格错乱。

粘贴外部数据前的清理

在实际稿件中,特殊字符往往不是自己输入的,而是从 CSV、网页、邮件或 PDF 中粘贴进来的。与其粘贴后追查错误,不如在粘贴前按用途决定接收形式,这样更快也更可靠。作为正文阅读的值只转义必要字符;代码和日志放入 verbatim 类环境;URL 放入 \url{...}

latex
% 表へ貼る前に、データ中の & と % を確認する
% before pasting into a table, inspect & and % in the data

\begin{tabular}{ll}
  Smith \& Wesson & company name \\
  95\% & reported rate \\
\end{tabular}

% URL は手で _ や # を逃がさず \url に任せる
\url{https://example.com/report?id=95#table_1}

如果出现“表格偏移一列”“一行后半部分消失”“突然出现 Missing $ inserted”这类症状,原因通常是 &%_。先只搜索刚粘贴的范围,然后逐个分类:如果是正文字符,就转义为 \&\%\_;如果是 LaTeX 语法,就保留原样;如果是链接,就用 \url;如果是代码,就用逐字显示。