用LaTeX排版文字

用LaTeX排版文字

OLENCER. Infinity

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
2
3
4
5
6
7
\documentclass{ctexart}
\begin{document}
\LaTeX{}中排版中文。
汉字和English单词混排,通常不需要在中英文之间添加额外的空格。
当然,为了代码的可读性,加上汉字和English 之间的空格也无妨。
汉字换行时不会引入多余的空格。
\end{document}

注意源代码须保存为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 \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
2
3
4
% 手动断行
\\[⟨length⟩] % 可以带可选参数⟨length⟩,用于在断行处向下增加垂直间距,也在表格、公式等地方用于换行
\\*[⟨length⟩] % 表示禁止在断行处分页
\newline % 只用于文本段落中
1
2
3
4
5
6
7
8
9
10
% 断页
\newpage % 双栏排版模式中,另起一栏
\clearpage % 双栏排版模式中,另起一页

\linebreak[⟨n⟩]
\nolinebreak[⟨n⟩]
\pagebreak[⟨n⟩]
\nopagebreak[⟨n⟩]
% 以上命令都带一个可选参数,用数字⟨n⟩代表适合/不适合的程度,取值范围为0–4,不带可选参数时,缺省为4。
% \linebreak或者\linebreak[4]意味着此处需要强行断行;\nopagebreak或\nopagebreak[4]意味着禁止在此处断页。

断词

如果$\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.
Comments