用LaTeX排版文字
ASCII编码
计算机的基本存储单位是字节(byte),每个字节为八位(8-bit),范围用十六进制写作 0x00–0xFF。ASCII(美国通用信息交换码)使用 0x00–0x7F 对文字编码,也就是 7-bit,覆盖了基本的拉丁字母、数字和符号,以及一些不可打印的控制字符(如换行符、制表符等)。
由于$\TeX$最初设计用于排版以英文为主的西文文档,ASCII编码完全够用,因而早期版本的$\TeX$只支持7-bit和ASCII编码。排版扩展拉丁字符必须使用后文所述的各种符号和重音命令,如Möbius必须通过输入 M\“obius 得到。
扩展编码
在ASCII 之后,各种语言文字都发展了自己的编码,比如西欧语言的Latin-1、日本的Shift-JIS、中国大陆的GB 2312—80和GBK 等。它们中的绝大多数都向下兼容ASCII,因此无论是在哪种编码下,$\TeX$以及$\LaTeX$的命令和符号都能用。
使用latex或pdflatex编译命令时,对源代码的编码处理由inputenc宏包支持。比如将源代码保存为Latin-1编码,并在导言区调用inputenc宏包并指定latin1选项后,Möbius这样的词语就可以直接通过(用适当输入法)输入Möbius 得到了。
用于汉字的GBK等编码是多字节编码,ASCII字符为一个字节,汉字等非ASCII字符为两个字节,使用latex或pdflatex编译命令时需要借助一些宏包进行较为复杂的判断和处理。早期排版中文须使用CJK宏包,它是一个用于处理中、日、韩等东亚语言文字编码和字体配置的宏包。但CJK 宏包的使用非常不方便,目前已不再推荐直接使用。
UTF-8编码
Unicode 是一个多国字符的集合,覆盖了几乎全球范围内的语言文字。UTF-8是Unicode的一套编码方案,一个字符由一个到四个字节编码,其中单字节字符的编码与ASCII编码兼容。
现行版本的$\LaTeX$使用UTF-8作为默认编码($\LaTeX$2018-04-01版本之前,需要调用inputenc宏包并指定utf8选项才能使用UTF-8 编码)。将使用拉丁字母的文档保存为UTF-8 编码后,可以用pdflatex直接编译。但是非拉丁字母仍然无法直接在$\LaTeX$中使用,如西里尔字母(俄文)、希腊字母、阿拉伯字母以及东亚文字等。
较为现代的$\TeX$引擎,如XeTeX和LuaTeX,它们均原生支持UTF-8 编码。使用xelatex和lualatex排版时,将源代码保存为UTF-8 编码,并借助fontspec宏包调用适当的字体,原则上就可以在源代码中输入任意语言的文字。注意此时不再适用inputenc宏包。但一些复杂语言(如印地语、阿拉伯语等)的排版需要考虑到断词规则、文字方向、标点禁则等诸多细节,因此需要更多的宏包支持,如babel、polyglossia等。
排版中文
用$\LaTeX$排版中文需要解决两方面问题,一方面是对中文字体的支持,另一方面是对中文排版中的一些细节的处理,包括在汉字之间控制断行、标点符号的禁则(如句号、逗号不允许出现在行首)、中英文之间插入间距等。
CJK宏包对中文字体的支持比较麻烦,已经不再推荐直接使用。
XeTeX和LuaTeX除了直接支持UTF-8编码外,还支持直接调用TrueType/OpenType格式的字体。
xeCJK及luatexja宏包则在此基础上封装了对汉字排版细节的处理功能。
ctex宏包和文档类进一步封装了CJK、xeCJK、luatexja等宏包,使得用户在排版中文时不用再考虑排版引擎等细节。ctex宏包本身用于配合各种文档类排版中文,而ctex文档类对$\LaTeX$的标准文档类进行了封装,对一些排版根据中文排版习惯做了调整,包括ctexart、ctexrep、ctexbook等。ctex 宏包和文档类能够识别操作系统和$\TeX$发行版中安装的中文字体,因此基本无需额外配置即可排版中文文档。
下面举一个使用ctex 文档类排版中文的最简例子:
1 | \documentclass{ctexart} |
注意源代码须保存为UTF-8编码,并使用xelatex或lualatex命令编译。
虽然ctex宏包和文档类保留了对GBK编码以及latex和pdflatex编译命令的兼容,但我们并不推荐这样做。
$\LaTeX$中的字符
空格
- 空格键和Tab键输入的空白字符视为“空格”。
- 连续的若干个空白字符视为一个空格。
- 一行开头的空格忽略不计。
- 行末的换行符视为一个空格。
注释
$\LaTeX$用%字符作为注释。在这个字符之后直到行末,所有的字符都被忽略,行末的换行符也不引入空格。
特殊字符
特殊字符 | 输入方法 | 注释 |
---|---|---|
# | \# | |
$ | \$ | $ 用于排版数学公式 |
% | % | % 表示注释 |
& | \& | & 用于排版表格 |
{ | \{ | |
} | \} | |
_ | \_ | _ 用于排版数学公式 |
^ | \^{} | ^ 用于排版数学公式 加一对花括号的写法相当于提供了空的参数,否则它们可能会将后面的字符作为参数,形成重音效果。 |
~ | \~{} | 加一对花括号的写法相当于提供了空的参数,否则它们可能会将后面的字符作为参数,形成重音效果。 |
\ | \textbackslash | \\ 被定义为手动换行 |
连字
文本字母后面加{}阻断
标点符号
中文的标点符号(绝大多数为非ASCII 字符)使用中文输入法输入即可。
标点符号 | 输入方式 | 注释 |
---|---|---|
引号 | ` ‘(`` ‘’) | 中文的引号‘ ’和“ ”与西文的引号实际上是同一组符号,但由于中西文通常用不同的字体显示,它们的具体形状和宽度可能有所不同 |
连字号 | - | 连字号-用来组成复合词 |
短破折号 | – | 短破折号—用来连接数字表示范围 |
长破折号 | — | 长破折号——用来连接单词,语义上类似中文的破折号 |
省略号 | \ldots或\dots |
拉丁文扩展与重音
特殊字符 | 输入方式 | 特殊字符 | 输入方式 | 特殊字符 | 输入方式 | 特殊字符 | 输入方式 |
---|---|---|---|---|---|---|---|
ò | \`o | ó | \‘o | ô | \^o | õ | \~o |
ō | \=o | ȯ | \.o | ö | \“o | o ̊ | \r o |
ŏ | \u o | ǒ | \v o | ő | \H o | o̧ | \c o |
ọ | \d o | o ̲ | \b o | oo(连) | \t{oo} | ||
oe() | \oe | OE() | \OE | æ | \ae | Æ | \AE |
å | \aa | Å | \AA | ß | \ss | ||
ø | \o | Ø | \O | ł | \l | Ł | \L |
ı | \i | ȷ | \j | ¡ | !` | ¿ | ?` |
前四行实际上都是带一个参数的命令。\^o 也可以写作 \^{o},以此类推。
其它符号
更多的符号多由特定的宏包支持,使用时要留意每个符号所依赖的宏包。
断行和断页
单词间距
文字在单词间的“空格”处断行时,“空格”生成的间距随之舍去。我们可以使用字符~输入一个不会断行的空格,通常用在英文人名、图表名称等上下文环境。
手动断行和断页
1 | % 手动断行 |
1 | % 断页 |
断词
如果$\LaTeX$遇到了很长的英文单词,仅在单词之间的“空格”处断行无法生成疏密程度匀称的段落时,就会考虑从单词中间断开。对于绝大多数单词,$\LaTeX$能够找到合适的断词位置,在断开的行尾加上连字符-。
如果一些单词没能自动断词,我们可以在单词内手动使用 \- 命令指定断词的位置。
COPYRIGHT (c) OLENCER. ALL RIGHTS RESERVED.
- Title: 用LaTeX排版文字
- Author: OLENCER.
- Created at : 2023-06-28 21:04:08
- Updated at : 2023-07-06 17:02:12
- Link: https://olencer.github.io/LaTeX/用latex排版文字/
- License: This work is licensed under CC BY-NC-SA 4.0.