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。其中 %、&、$、# 都要用前置反斜杠转义。
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 环境。
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{...}。它会自动处理内部的保留字符,以等宽字体排版,并在合适位置换行,因此不需要手动转义。
\usepackage{hyperref}
% ...
See \url{https://example.com/path?id=1#sec_2~ok}总之,单个符号按表中方式转义,密集代码片段或符号块交给 \verb / verbatim,URL 交给 \url{},这样记住就足够了。语法本身的整体思路在“语法规则”中说明,正文中可用的各种符号在“文本符号”页中介绍。
先区分容易出错的输入
在报告和技术文档中,出错的原因往往不是正文,而是文件名、URL、类型名和表格单元格中包含的 _、% 或 &。开始写稿时,先把材料分成三类:“作为自然语言阅读的文本”“按代码原样展示的内容”“作为链接处理的内容”。这样一来,特殊字符该如何转义也会自然确定。
| 场景 | 使用工具 | 判断 |
|---|---|---|
price | 单个转义,如 \$ 和 \% | 文本应作为普通正文阅读时使用 |
code | \verb 或 verbatim | 原样显示源代码、终端输出或短路径 |
url | \url{...}(通常与 hyperref 配合) | 把长 URL 排成可换行链接 |
表格尤其需要小心:因为 & 用来分隔单元格,若公司名或论文题名中的 ampersand 没有转义,列数就会错位。从外部粘贴表格数据时,先搜索 & 和 %,逐个判断它是正文符号还是 LaTeX 语法,然后再编译,就能避免原因不明的表格错乱。
粘贴外部数据前的清理
在实际稿件中,特殊字符往往不是自己输入的,而是从 CSV、网页、邮件或 PDF 中粘贴进来的。与其粘贴后追查错误,不如在粘贴前按用途决定接收形式,这样更快也更可靠。作为正文阅读的值只转义必要字符;代码和日志放入 verbatim 类环境;URL 放入 \url{...}。
% 表へ貼る前に、データ中の & と % を確認する
% 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;如果是代码,就用逐字显示。