国际化和编码支持

LaTeX 需要一些额外的配置来排版非英语的文档。此外,许多脚本需要使用 LuaTeX,这是当前推荐的引擎,用于新创建的文档[1],或者 XeTeX。

目前有两个包提供国际语言支持,即 Babel 和 Polyglossia:

  • Babel[2] 与三大引擎兼容,分别是 pdfTeX、LuaTeX 和 XeTeX。根据使用的引擎,支持的语言数量(及其覆盖的层次)大致从约 170 种到 300 种,涵盖约 45 种脚本,新的脚本可以从零开始轻松声明。它还为 Plain TeX 提供部分支持。

  • Polyglossia 被设计为 Babel 的替代方案,专为现在不推荐的 XeTeX 提供支持(尽管对 LuaTeX 提供部分支持,但不支持 pdfTeX)。它支持约 90 种语言,覆盖约 30 种脚本。

这两个包都覆盖了全球主要的语言(如法语、西班牙语、阿拉伯语、中文、日语、泰语、印地语、马拉地语等),并处理以下任务:

字体

为每种非拉丁语言分配字体。传统的 LaTeX 需要设置适当的字体编码,而在 Unicode 引擎中,Babel 和 Polyglossia 依赖于 fontspec 包提供的高级 OpenType 字体功能。Babel 提供了一个高级接口来自动处理不同脚本的字体,并设置语言和脚本,而 Polyglossia 依赖于标准的 fontspec 调用,后者需要手动设置。在 Babel + LuaTeX 中,可以根据脚本自动切换字体。有关更多息,请参见字体章节中的 fontspec 讨论。

换行、对齐和连字符

为每种脚本和语言激活相应的换行算法。在使用连字符的语言中,加载语言特定的连字符模式。Babel 和 Polyglossia 为 CJK(中日韩)脚本提供基本的换行支持。Babel 提供非标准的连字符处理,如 "ff" → "ff-f"、重复的连字符、排名规则,并且在某些情况下对阿拉伯语和藏语的排版提供初步支持。

文化元素

翻译文档标签(如“章节”、“图表”、“参考文献”),以及根据语言特定的惯例格式化日期和为拥有独立数字系统的语言格式化数字。Polyglossia 可以生成希伯来、伊斯兰(民用)和波斯历的当前日期;Babel 还支持伊斯兰 Umm al-Qura、科普特文、埃塞俄比亚文、中文和佛教历。

双向排版

支持包含从右至左书写脚本的文档。Babel + LuaTeX 使用基于 Unicode 的算法,自动改变书写方向。像表格、边距等布局元素也必须反转,Babel 和 LuaTeX 在很大程度上做到了这一点。对于 XeTeX,Babel 和 Polyglossia 都依赖于 bidi 包,需要显式标记来改变方向。

排版规则和音译

执行各种转换,包括字符级别的(如音译)和排版级别的(如在适当的位置插入空格或惩罚)。Babel 与 LuaTeX 可以通过“转换”自动完成此操作;对于 XeTeX,这在一定程度上可以完成(无论是 Babel 还是 Polyglossia),而在 8 位引擎中,许多操作必须手动完成。

Babel 配置示例

对于 LaTeX ≥ 2018-04-01,并且文档为 UTF-8 编码的单语文档(推荐的编码),在许多欧洲语言中,您只需要类似以下的代码:

\documentclass[french]{article}
\usepackage[T1]{fontenc}  % <- 在 XeTeX 或 LuaTeX 中删除此行
\usepackage{babel}

\begin{document}
Plus ça change, plus c'est la même chose!
\end{document}

此外,对于日语、韩语或中文等语言,有一些专用的框架。

编码

Unicode 引擎

使用 xelatexlualatex 引擎时,许多下面描述的问题会自动解决。输入文件默认为 UTF-8 编码(XeLaTeX 还支持 UTF-16 和 UTF-32),引擎会自动将 Unicode 字符映射到您为文档选择的 TrueType 或 OpenType 字体中的字符。如果这些字体包含您需要的字符,LaTeX 会自动进行转换。

8 位引擎

对于不支持 Unicode 的引擎(如 latexpdflatex),LaTeX 必须处理两个基本问题:

  1. 将输入文件的字节映射到您希望使用的语言的字符。

  2. 将这些字符映射到文档中使用的字体中的字符。

在这种情况下,您必须告诉 LaTeX 使用哪种编码来处理输入文件,并使用哪个“输出”编码来将字符映射到字体中的字符。在大多数情况下(特别是对于多语言文档),UTF-8 是一种理想的输入编码,当前是默认编码。

对于大多数拉丁语系语言,T1 是理想的输出编码,可以通过以下命令设置:

\usepackage[T1]{fontenc}

有关更多输出编码和语言的设置,请参见字体章节和特殊字符章节的讨论。

Babel

核心包 babel 支持三大引擎(PDFLaTeX、LuaLaTeX 和 XeLaTeX)。有两种方式可以指定文档的语言。其中一种是在加载包时作为参数传递:

\usepackage[language]{babel}

另一种方法是将语言作为全局选项,以便其他包可以检测并使用它:

\documentclass[language]{article}
\usepackage{babel}

最后,Babel 为约 300 种语言提供完全或部分支持,使用一组 ini 文件,可以通过 \babelprovide 访问。这条命令也可以轻松地从头开始定义您自己的语言。名称会根据 Unicode CLDR 进行规范化。

Babel 会自动激活您选择的语言的相应连字符规则。如果您的 LaTeX 格式不支持所选语言的连字符,Babel 仍然可以工作,但会禁用连字符,这对排版文档的外观有负面影响(然而,在 LuaTeX 中,当文档排版时,可以加载连字符规则)。Babel 还为某些语言指定了新命令,简化了特殊字符的输入。更多息,请参见语言章节。

如果你在 Babel 中使用多个语言:

\usepackage[languageA, languageB]{babel}

对于第二语言的短文本,不需要在导言区显式声明,因为 Babel 支持懒加载语言。只需按以下方式选择语言,基本声明将动态加载。

选项列表中的最后一个语言将被激活(即 languageB),你可以使用命令:

\selectlanguage{languageA}

来切换活动语言(当文档开始时,通过 \begin{document},主语言会自动选择)。你还可以使用命令在其他语言中添加短文本:

\foreignlanguage{languageB}{另一种语言的文本}

Babel 还提供了多种环境来输入更大块的文本:

\begin{otherlanguage}{languageB}
语言B中的文本。这个环境会切换所有与语言相关的定义,例如图表、表格等的语言特定名称。
\end{otherlanguage}

这个环境的带星版本会按照其他语言的规则排版主文本,但保持图表等附加元素的语言为文档的主语言。

Babel 手册提供了更多关于这些和其他选项的息。

字体管理

如果你使用 XeTeX 或 LuaTeX,Babel 支持通过 fontspec 使用 OpenType 字体。为了简化字体处理,它提供了宏 \babelfont,该宏会跨语言切换字体并设置 OpenType 的“语言系统”(即语言和脚本)。假设你正在设置一个包含瑞典语和一些希伯来语单词的文档,并且字体适合这两种语言:

\babelfont{rm}{FreeSerif}

如果你不得不使用不同的字体,可以这样设置:

\babelfont{rm}{Iwona}
\babelfont[hebrew]{rm}{FreeSerif}

此外,在版本 >= 3.38 中,区域标识符(\language\localeid)以及字体可以根据脚本切换而无需显式标记(仅限 LuaTeX)。在以下示例中,bidi=basic 会切换方向,onchar=ids fonts 会切换标识符和字体

\documentclass{article}
\usepackage[swedish, bidi=basic]{babel} 
\babelprovide[import, onchar=ids fonts]{hebrew} 
\babelfont{rm}{Iwona}
\babelfont[hebrew]{rm}{FreeSerif}
\begin{document}
Svenska עִבְרִית svenska.
\end{document}

双向文本

Babel 提供了对双向文本的基本支持。包选项可以取三个值:defaultbasic-rbasic。使用 bidi=basic,RTL(从右至左)和 LTR(从左至右)文本可以在没有显式标记的情况下混排(仅限 LuaTeX)。

自定义

Babel 提供了工具来定制语言的行为。最常见的需求是修改默认的标题(如章节名),因为每种语言定义的字符串并不总是符合某些编辑或个人偏好。为此,提供了 \setlocalecaption 命令。例如:

\setlocalecaption{spanish}{contents}{Contenidos}

以前,自定义标题的唯一方法是使用类似这样的命令:

\addto\captionsspanish{\renewcommand{\contentsname}{Contenidos}}

根据 Babel 手册,这种低级接口不推荐使用。

多语言版本

在 LaTeX 中,可以将一个文档的内容排版成多种语言,并在编译时选择输出的语言。使用上面的命令在多语言文档中可能会显得繁琐,因此 Babel 提供了一种定义更短名称的方法。使用:

\babeltags{de = german}

你可以这样写:

text \textde{German text} text
text
\begin{de}
German text
\end{de}
text

此功能有一个明显的缺点,即 LaTeX 中的“前缀”\text... 重载严重,可能会与现有的宏产生冲突。Babel 手册建议坚持使用默认选择器或定义自己的替代方案。

可以使用 Heiko Oberdiek 提供的 iflang 包测试当前语言(Babel 包内置的功能不可靠)。这里是一个简单的示例:

\IfLanguageName{ngerman}{Hallo}{Hello}

这允许你轻松区分两种语言,而无需定义自己的命令。另一个本地化字符串的替代方法是 translator

Polyglossia

当使用 XeLaTeX 或 LuaTeX 时,polyglossia 提供了 Babel 的替代方案,用于国际语言支持,如其手册中所述。

最初的目标是与 Babel 兼容,但也有一些差异。例如,LaTeX 中用于声明语言的标准机制(通过包或类选项)不被识别,用户必须依赖一组新的命令,如下例所示。与 Babel 不同,Polyglossia 必须显式声明第二语言,因为它不支持懒加载。它还添加了“语言变体”这一概念,而 Babel 将所有地区视为平等。此外,不仅语言以非标准方式声明,切换语言的方式也有所不同,使用如 \textenglish\textlang 的命令。字体使用标准的 fontspec 命令,且没有提供更高层次的接口。

要使用 Polyglossia,请在导言区加载它并指定将要使用的语言以及任何语言特定的选项。

例如,如果我们的文档主要使用美式英语,并且包含一些法语、保加利亚语和希腊语的短文本,你可以使用:

\documentclass{article}
\usepackage{polyglossia}
\setdefaultlanguage[variant=american]{english}
\setotherlanguages{french, bulgarian, greek}
\newfontfamily\bulgarianfont
  {NewComputerModern10}[Script=Cyrillic,Language=Bulgarian]
\newfontfamily\greekfont
  {NewComputerModern10}[Script=Greek,Language=Greek]
\begin{document}
English. \textlang{french}{French}. \textlang{bulgarian}{Български}.
\textlang{greek}{Ελληνικά}.
\end{document}

与之比较,使用 babel 的代码如下:

\documentclass{article}
\usepackage[american]{babel}
\babelfont[*cyrillic, *greek]{rm}{NewComputerModern10}
\begin{document}
English. \foreignlanguage{french}{French}.
\foreignlanguage{bulgarian}{Български}. \foreignlanguage{greek}{Ελληνικά}.
\end{document}

特定语言

以下是一些特定语言的建议。如果你在未列出的语言方面有经验,请添加相关说明。本章中描述的某些方法对于处理非英语作者姓名(如参考文献中的)可能会很有帮助。

阿拉伯文脚本

使用阿拉伯文脚本的文档,包括阿拉伯语、波斯语、乌尔都语、普什图语、库尔德语、维吾尔语等,最好使用 XeTeX 或 LuaTeX 排版。以下是使用 Babel 和 LuaTeX 的示例:

\documentclass{article}
\usepackage[bidi=basic]{babel}
\babelprovide[import, main]{arabic}
\babelfont{rm}{FreeSerif}
\begin{document}
وﻗﺪ ﻋﺮﻓﺖ ﺷﺒﻪ ﺟﺰﻳﺮة اﻟﻌﺮب ﻃﻴﻠﺔ اﻟﻌﺼﺮ اﻟﻬﻴﻠﻴﻨﻲ )اﻻﻏﺮﻳﻘﻲ( ﺑـ
Arabia أو Aravia )ﺑﺎﻻﻏﺮﻳﻘﻴﺔ Αραβία (، اﺳﺘﺨﺪم اﻟﺮوﻣﺎن ﺛﻼث
ﺑﺎدﺋﺎت ﺑـ “Arabia” ﻋﻠﻰ ﺛﻼث ﻣﻨﺎﻃﻖ ﻣﻦ ﺷﺒﻪ اﻟﺠﺰﻳﺮة اﻟﻌﺮﺑﻴﺔ، إﻻ أﻧﻬﺎ
ﺣﻘﻴﻘﺔً ﻛﺎﻧﺖ أﻛﺒﺮ ﻣﻤﺎ ﺗﻌﺮف ﻋﻠﻴﻪ اﻟﻴﻮم.
\end{document}

对于 XeTeX,可以设置 bidi=bidi,但是混合 LR 和 RL 文本必须显式标记。Polyglossia 也适用。

Babel 与 LuaTeX 提供了对阿拉伯文的部分和初步支持,基于卡什达(kashida)或“排版替代” OpenType 表(jalt)。

对于 LuaTeX 的替代包是 arabluatex,这是 arabtex 的扩展,下面会描述。对于 XeTeX,有 arabxetex

在 8 位引擎中,文档可以通过多种方式排版,其中最古老的是 arabtex。在导言区添加以下代码:

\usepackage{arabtex}

您可以以罗马化字符或本地阿拉伯文编码输入文本。使用以下命令和环境输入文本:

\< ... >
\RL{ ... }
\begin{arabtext} ... \end{arabtext}.

更多细节请参见 ArabTeX Wikipedia 页面。

你还可以在 Babel 中使用 Arabi 包来排版阿拉伯语和波斯语:

\usepackage{cmap}
\usepackage[LAE,LFE]{fontenc}
\usepackage[arabic,farsi]{babel}

得益于 cmap 包的支持,你还可以从用 Arabi 生成的 PDF 文件中复制和粘贴文本。你可以使用 Arabi 与 LyX 或 tex4ht 来生成 HTML。

请参阅 CTAN 上的 Arabi 页面。

亚美尼亚语

亚美尼亚语使用其独特的字符,需要安装支持 Unicode 的文本编辑器,以便输入 UTF-8 文本,如 Texmaker 或 WinEdt。然后,这些文本编辑器应配置为使用 XeLaTeX 或 LuaLaTeX 编译。

一旦文本编辑器设置为使用 XeLaTeX 或 LuaLaTeX 编译,可以使用 fontspec 包来编写亚美尼亚语:

\usepackage{fontspec}
\setmainfont{DejaVu Serif}

或者:

\usepackage{fontspec}
\setmainfont{Sylfaen}

Sylfaen 字体不支持斜体和粗体,但 DejaVu Serif 字体支持它们。

请参阅 Armenian Wikibooks 获取更多详情,尤其是关于如何配置支持 Unicode 的文本编辑器以使用 Unicode 引擎进行编译。

西里尔字母

目前,排版西里尔文本的最便捷方式是使用 XeTeX 或 LuaTeX 和 UTF-8 编码。使用这些引擎,俄罗斯语的示例如下:

\documentclass{article}
\usepackage[russian]{babel}
\babelfont{rm}{DejaVu Serif}
\begin{document}

Россия, находящаяся на пересечении множества культур, а также
с учётом многонационального характера её населения, — отличается
высокой степенью этнокультурного многообразия и способностью к
межкультурному диалогу.

\end{document}

在不支持 Unicode 的引擎中,西里尔文的支持基于标准 LaTeX 机制以及 fontencinputenc 包。Babel 包支持 T2* 编码以及使用西里尔字母排版保加利亚语、俄语和乌克兰语文本。AMS-LaTeX 包应在 fontencbabel 之前加载(为什么?)。如果你打算在数学模式中使用西里尔字母,还需要在 fontenc 之前加载 mathtext 包:

\usepackage{amsmath,amsthm,amssymb}
\usepackage{mathtext}

\usepackage[T1,T2A]{fontenc}
\usepackage[english,bulgarian,russian,ukrainian]{babel}

通常,Babel 会自动选择默认的字体编码,对于上述三种语言,这是 T2A。然而,文档并不局限于单一字体编码。对于使用西里尔字母和拉丁字母语言的多语言文档,明确包含拉丁字体编码是有意义的。Babel 会在文档中选择不同语言时,自动切换到适当的字体编码。

在现代操作系统中,建议使用 Unicode(utf8 或 utf8x)而不是 KOI8-RU(koi8-ru)作为西里尔文本的输入编码。

除了启用连字符、翻译自动生成的文本字符串以及激活一些语言特定的排版规则(如 \frenchspacing)外,Babel 还提供了一些命令,允许根据保加利亚语、俄语或乌克兰语的标准进行排版。

对于所有三种语言,都提供了语言特定的标点符号:文本中的西里尔破折号(它比拉丁破折号稍窄,且两侧有小间距)、直接引语的破折号、引号,以及方便连字符的命令:

键盘组合 操作
" "
"-" 显式连字符符号,允许在单词中进行连字符拆分
"---" 西里尔破折号
"--~" 复合名(姓氏)的西里尔破折号
"--*" 表示直接引语的西里尔破折号
"''" 类似于 "-,但不会产生连字符符号(用于带连字符的复合词,如 x-""y 或其他符号如“disable/enable”)
"~" 复合词标记,没有断点
"=" 复合词标记,有断点,允许在构成单词中断开
"," 用于初始字母的细空间,后跟姓氏
"‘" 德文开引号(,,)
"’" 德文闭引号(“)
"<" 法文开引号(<<)
">" 法文闭引号(>>)

Babel 的俄语和乌克兰语选项定义了命令:

\Asbuk
\asbuk

它们类似于 \Alph\alph(将计数器转换为字母的命令,例如 a, b, c...),但生成的是俄语或乌克兰语字母(取决于文档的活动语言)。

Babel 的保加利亚语选项提供了命令:

\enumBul
\enumLat
\enumEng

这些命令使得 \Alph\alph 生成保加利亚语或拉丁字母(英语)字母。对于保加利亚语言选项,\Alph\alph 的默认行为是生成保加利亚字母。

有关更多详细息,请参阅《LaTeX 的简明介绍》保加利亚语翻译 [4],其中包含使用不同分布直接从键盘输入西里尔字母的方法。

中文

排版中文文本(一般而言,CJK 脚本文本)最好使用完整的框架,如 CJK 或 xeCJK,尽管对于短文本或少数几个单词的水平排版,使用 Babel 与 XeTeX 或 LuaTeX 也能满足基本的换行需求。

CJK 包

一种可能的中文支持通过 CJK 包集合提供。如果你使用包管理器或端口树,CJK 包通常是一个单独的包,因为它的大小(主要是字体)。

确保你的文档使用 UTF-8 字符编码保存。参见《特殊字符》获取更多详细息。在你想编写中文字符的部分,使用 CJK 环境。

\documentclass{article}
\usepackage{CJK}

\begin{document}

\begin{CJK}{UTF8}{gbsn}
你好
You can mix Latin letters and Chinese.
\end{CJK}

\end{document}

最后一个参数指定字体。它必须符合所需语言的要求,因为中文、日文和韩文的字体不同。对于中文,可能的选择包括:

  • gbsn(简体宋体)

  • gkai(简体楷体)

  • bsmi(繁体细上海宋体)

  • bkai(繁体标楷体)

在 CTeX 发行版中(虽然已过时),包括六种简体中文字体,对应默认的 Windows 字体

  • song(宋体,Simsun)

  • hei(黑体,Simhei)

  • fang(仿宋,STFangSong)

  • kai(楷体,STKaiti)

  • li(隶书,SimLi)

  • you(幼圆,SimYou)

xeCJK 包

使用 XeTeX 引擎时,有一个名为 xeCJK 的包,它基于 fontspec,提供了与 CJK 包类似的接口。

使用该包时,可以像这样定义 CJK 字体

\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{FZSSK.ttf} % 使用 Foundertype 的中文字体,具有免费许可证
\begin{document}
你好
You can still mix Latin letters and Chinese!
\end{document}

捷克语

捷克语使用以下命令即可:

\usepackage[czech]{babel}

UTF-8 允许你直接在文本中使用“捷克引号”。否则,可以使用宏 \clqq\crqq 来生成左引号和右引号。你可以将引用的文本放入 \uv 中。

从 PDF 中复制和搜索

虽然捷克字母及其变音符号可以正确显示,但在使用 pdfLaTeX 生成的 PDF 文件中,它们不能被复制或搜索。使用 cmap 包可以解决某些字体的问题,对于其他字体,还需要使用命令 glyphtounicode

不同字体的命令组合

以下是使用不同字体的命令组合:

\usepackage{cmap}
\usepackage[resetfonts]{cmap}
\usepackage{cmap}
\input{glyphtounicode}
\pdfgentounicode=1
\usepackage{lmodern}
ešcržýáíédtnúuŠCRŽÁÚ	ěščřžýáíéďťňúůŠČŘŽÁÚ	ěščřžýáíéďťňúůŠČŘŽÁÚ	ěščřžýáíéďťňúůŠČŘŽÁÚ
\usepackage{ebgaramond}
ešcržýáíédtnúuŠCRŽÁÚ	ešcržýáíédtnúuŠCRŽÁÚ	ešcržýáíédtnúuŠCRŽÁÚ	ěščřžýáíéďťňúůŠČŘŽÁÚ

梵文及其他印度文字

梵文脚本用于许多语言,包括马拉地语、巴利语、梵语、印地语、尼泊尔语、博多语、孔卡尼语、梵文等。以下是一个使用 babel 设置的梵文示例,适用于 XeTeX 和 LuaTeX:

\documentclass{article}
\usepackage[hindi, provide=*]{babel}
\babelfont{rm}{FreeSerif}
\begin{document}
देवनागरी एक भारतीय लिपि है जिसमें अनेक भारतीय भाषाएँ तथा कई विदेशी
भाषाएँ लिखी जाती हैं।
\end{document}

其他印度语言脚本(如马拉雅拉姆语、孟加拉语、僧伽罗语、泰卢固语、泰米尔语、卡纳达语、阿萨姆语、旁遮普语等)有类似的设置。

如果需要额外功能,您需要使用另一种方法,例如以下设置孟加拉语的示例,设置选项 mapdigits 将阿拉伯数字转换为本地数字(仅限 LuaTeX):

\documentclass{article}
\usepackage{babel}
\babelprovide[import, main, mapdigits]{bengali}
\babelfont{rm}{FreeSerif}
\begin{document}
গাইতে গাইতে গায়েন।
\end{document}

数字映射在 XeTeX 中通过字体级别完成,使用 Mapping= 选项,如下所示:

\babelfont{rm}[Mapping=bengalidigits]{FreeSerif}

这实际上是 XeTeX 的功能,不需要 babel,可以直接与 fontspec 一起使用。

pdfTeX 的支持主要基于 velthuis 包。XeTeX 的替代方案是 latexbangla,它依赖于 polyglossia

芬兰语

启用芬兰语连字符:

\usepackage[finnish]{babel}

这也会自动将文档语言(章节名等)更改为芬兰语。

法语

从 Babel 版本 3.0 开始,建议使用以下命令选择语言作为全局选项:

\documentclass[french]{article}
\usepackage{babel}

之前,您可以使用以下命令加载法语语言支持:

\usepackage[frenchb]{babel}

\usepackage[francais]{babel}

根据法语的不同变体,排版法语文档有多种选项:french 用于巴黎法语,acadiancanadien 用于新世界法语。如果您不确定或不在乎,我们建议使用 french

这些选项都启用了法语连字符,如果您已经配置了您的 LaTeX 系统,它们将自动将所有文本转换为法语:\chapter 打印 Chapitre\today 打印当前日期(以法语显示),等等。还会提供一组新命令,使得编写法语输入文件更加简便。以下是一些示例:

输入代码 输出结果
\og guillemets \fg{} « guillemets »
M\up{me}, D\up{r} Mme, Dr
1\ier{}, 1\iere{}, 1\ieres{} 1er, 1re, 1res
2\ieme{} 4\iemes{} 2e 4es
\No 1, \no 2 N° 1, n° 2
20~\degres C, 45\degres 20 °C, 45°
M. \bsc{Durand} M. Durand
\nombre{1234,56789} 1 234,567 89

如果您的键盘支持直接输入法语字符,可以直接输入。对于 Xorg(*BSD 和 GNU/Linux),您可能想使用 OSS 变体,它提供了一些方便的快捷键,如下所示:

键盘组合 字符
Alt Gr + w «
Alt Gr + x »
Alt Gr + Shift + é É
Alt Gr + Shift + è È
Alt Gr + Shift + ç Ç

您需要 T1 字体编码,以便正确打印法语引号。

法语

对于度字符,您将遇到类似以下的错误:

! Package inputenc Error: Unicode char \u8:° not set up for use with LaTeX.

textcomp 包会为您解决此问题。

Babel 对法语的巨大优势是,它会自动处理一些法语排版元素,尤其是在所有双部分标点符号前添加不换行空格。所以,现在您可以写:

Il répondit: «Ce pain coûte-t-il 2~€?»

在欧元符号前的不换行空格仍然是必要的,因为货币符号和其他单位通常不支持(这不仅仅是法语的特性)。

您还可以与 Babel 一起使用 numprint 包,它允许您按法式方式打印数字:

\usepackage[french]{babel}
\usepackage[autolanguage]{numprint} % 必须在 babel 后加载。

% ...

\nombre{123456.123456 e-17}

您还会注意到,当切换到法语时,列表的布局会发生变化。您可以使用 \frenchsetup 命令进行自定义。有关 babel 的法语选项以及如何自定义其行为的更多息,请运行 LaTeX 文件 frenchb.dtx,并阅读生成的文件 frenchb.pdffrenchb.dvi。您可以在 CTAN 上获取 PDF 版本。

德语

您可以使用以下两条命令之一加载德语语言支持(pdfTeX、XeTeX 和 LuaTeX 支持):

对于传统("旧")德语正字法,使用:

\usepackage[german]{babel}

或者,对于改革("新")德语正字法,使用:

\usepackage[ngerman]{babel}

这将启用德语连字符功能(如果您已经配置了 LaTeX 系统)。它还会将所有自动文本转换为德语,例如:“Chapter” 变为 “Kapitel”。还会提供一组新命令,使得编写德语输入文件更容易,即使您不使用 inputenc 包。以下是一些灵感示例。如果使用 inputenc,这些就不再是问题,但您的文本也被限制在特定的编码世界中。

德语特殊字符

输入命令 输出字符
"A "O "U Ä Ö Ü
"a "o "u "s ä ö ü ß
`` 或 \glqq
'\grqq
\glq \grq ‹ ›
"<\flqq «
">\frqq »
\flq \frq ‹ ›
\dq "

在德语书籍中,您有时会看到法语引号(« guillemets »)。然而,德语排版师使用它们的方式不同。德语书中的引号应为 »this«。在瑞士德语区,排版师使用 «guillemets» 的方式与法语相同。一个主要的问题是使用像 \flq 这样的命令:如果您使用 OT1 字体编码(默认编码),则引号看起来像数学符号 "≪",这会让排版师感到不适。而 T1 编码的字体则包含所需的符号。因此,如果您使用这种类型的引号,请确保使用 T1 编码。

十进制数字通常应写作 0{,}5(而不是 0,5)。像 ziffer 这样的包可以让您输入 0,5。或者,您也可以使用 Babel 提供的 \num 命令,并通过以下方式全局设置十进制分隔符:

\usepackage[output-decimal-marker={,}]{siunitx}
% ...
\num{0,5}

希腊语

要使用希腊语言,您需要以下引言:

\usepackage[greek]{babel}

此引言将启用连字符功能并将所有自动文本转换为希腊语。还会提供一组新命令,使您能够更轻松地编写希腊语输入文件。

现代单音希腊语、复音希腊语以及古希腊语都受支持。

如果您需要使用拉丁字母脚本的语言,并且使用 LuaTeX,您可以通过以下方式自动切换字体,而无需显式标记:

\documentclass{book}

\usepackage[portuguese, greek]{babel}
\babelprovide[onchar=ids fonts]{portuguese}
\babelfont{rm}{FreeSerif}
\babelfont[portuguese]{rm}{DejaVu Sans}

\begin{document}
   abelha -- μελισσα
\end{document}

匈牙利语

使用以下命令:

\usepackage[magyar]{babel}

冰岛语和法罗语

要编写冰岛语文本,您可以使用以下命令:

\usepackage[icelandic]{babel}

这会将文本如 "Part" 转换为 "Hluti"。还会提供一些额外的命令:

冰岛语特殊命令:

输入命令 输出字符
`` 或 \glqq
\grqq
\TH Þ
\th þ
\DH Ð
\dh ð

为了使特殊字符如 Þ 和 Æ 可用,只需添加:

\usepackage[T1]{fontenc}

意大利语

意大利语在 LaTeX 中得到了很好的支持。只需在文档开头添加:

\usepackage[italian]{babel}

然后所有命令的输出将正确地翻译成意大利语。

挪威语

挪威语在 LaTeX 中得到了很好的支持。只需在文档开头添加:

\usepackage[norsk]{babel}

这将自动将所有命令的输出正确翻译为挪威语。

日语

jlreq

这个包提供了类文件和 JFM(日本字体度量)文件,适用于 LuaTeX-ja、pLaTeX 和 upLaTeX。它旨在实现日本文本布局的要求。

upTeX, pTeX

有一个专门为日语设计的 TeX 变体,称为 upTeX,它支持垂直排版。

luatexja

另一种写日语的方式是使用 LuaLaTeX 和 luatex-ja 包。以下是来自 Luatexja 文档的适配示例:

\documentclass{ltjsarticle}
\usepackage{luatexja} % 如果使用 ltjclasses 或 ltjsclasses,此行可省略。
\begin{document}
\section{はじめてのLua\TeX-ja}
ちゃんと日本語が出るかな?
\subsection{出たかな?}
長い文章を入力するとちゃんと右端のところで折り返されるかな?
大丈夫そうな気がするけど.ちょっと不安だけど何事も挑戦だよね.
\end{document}

您还可以使用 fontspec 包提供的功能和 luatexja-fontspec 提供的功能,在文档中声明您想要使用的字体。以下是一个示例:

% **********************************
% 基本设置
\documentclass[10pt,a4paper]{article}
\usepackage{fontspec}
\setmainfont[Numbers={OldStyle,Proportional}]{Arno Pro} % 设置西文字体
\usepackage{luatexja}
\usepackage{luatexja-fontspec} % 必须调用此命令来设置日文字体
\setmainjfont[BoldFont=KozGoPr6N-Bold]{KozGoPr6N-Regular} % 设置日文字体
% ***********************************
\begin{document}
It is a test to show japanese and english mix. テスト中です。どうですか皆さん。
\end{document}

确保使用 UTF-8 作为您的编码。如果您不知道如何做,请查看 Texmaker,它默认使用 UTF-8 编码。

luatex-ja 可以与 babel 配合使用。例如:

\documentclass{ltjbook}
\usepackage[ngerman,japanese]{babel}

对于文档中短小的日文文本(几句话或几段),使用 Babel(≥3.31)和 LuaTeX 可能足够;例如:

\usepackage[ngerman]{babel}
\babelprovide[import]{japanese}
\babelfont[japanese]{rm}{IPAMincho}

CJK, XeCJK, bxcjkjatype

另一种(但较旧的)日语支持方式是使用 CJK 或 XeCJK 包集合。如果您使用包管理器或端口树,CJK 集合通常是单独的包,原因是它的大小(主要是字体)。

确保您的文档使用 UTF-8 字符编码保存。更多息请参见《特殊字符》一章。将您想要书写日文字符的部分放入 CJK 环境中。

\documentclass{article}
\usepackage{CJK}

\begin{document}

\begin{CJK}{UTF8}{min}
こんにちは
You can mix latin letters as well as hiragana, katakana and kanji.
\end{CJK}

\end{document}

最后一个参数指定字体。它必须适应所需的语言,因为中文、日文和韩文使用的字体不同。min 是日文的一个例子。

bxcjkjatype 包提供了 CJK 包的工作配置,适用于中等质量的日语排版。它还为 pLATEX 用户提供了与 pLATEX 内核和其他包兼容的命令。

韩语

韩语文件的两种最常用编码是 EUC-KR 和其向上兼容的扩展,用于韩文 MS-Windows 的 CP949/Windows-949/UHC。在这些编码中,每个 US-ASCII 字符代表其常规 ASCII 字符,与其他兼容 ASCII 的编码(如 ISO-8859-x、EUC-JP、Big5 或 Shift_JIS)类似。另一方面,韩文音节、汉字(在韩国使用的汉字)、韩文字母、日文假名、希腊字母、斯拉夫字母和其他符号由两个连续字节表示。

TeX 和 LaTeX 最初是为不超过 256 个字符的脚本编写的。为了使它们能够处理如韩语或中文这样具有大量字符的语言,开发了一种子字体机制。它将一个包含成千上万个字形的 CJK 字体分为一组每个包含 256 个字形的子字体

对于韩语,有三个广泛使用的包:

  1. HLATEX:由 UN Koaunghi 开发

  2. hLATEXp:由 CHA Jaechoon 开发

  3. CJK 包:由 Werner Lemberg 开发

HLATEX 和 hLATEXp 专为韩语设计,并在字体支持上提供韩语本地化。它们都可以处理以 EUC-KR 编码的韩文输入文件。HLATEX 甚至可以处理以 CP949/Windows-949/UHC 和 UTF-8 编码的文件。

CJK 包并非专为韩语设计,但它可以处理 UTF-8 编码的输入文件,以及包括 EUC-KR 和 CP949/Windows-949/UHC 在内的各种 CJK 编码,它可以用于排版包含多语言内容(尤其是中文、日文和韩文)的文档。CJK 包没有像 HLATEX 提供的那样的韩语本地化功能,也没有 HLATEX 提供的那么多韩语特殊字体

要使用 HLATEX 包来排版韩文文本,请将以下声明添加到文档的前言部分:

\usepackage{hangul}

此命令会启用韩语本地化。章节、节、子节、目录、图表等标题将被翻译为韩语,文档的排版会改变以遵循韩语的约定。该包还提供自动选择助词的功能。在韩语中,有一些词缀形式上不同但语法上等价的后缀。使用正确的后缀取决于前一个音节是否以元音或辅音结尾。HLATEX 能够自动为您处理这个问题。

韩语

如果您不需要韩语本地化功能,只想排版韩文文本,可以在前言部分添加以下行:

\usepackage{hfont}

有关使用 HLATEX 排版韩语的更多息,请参考 HLATEX 指南。您还可以访问韩国 TeX 用户组 (KTUG) 的网站。

在 KTUG 的 FAQ 部分,推荐使用 kotex 包:

\usepackage{kotex}

波斯语

对于波斯语,可以使用专门的 XePersian 包,它使用 XeLaTeX 作为排版引擎。只需将以下代码添加到文档的前言部分:

\usepackage{xepersian}

更多息请参见 CTAN 上的 XePersian 页面。

此外,您也可以使用阿拉伯语脚本来排版波斯语,具体请参见相关部分。

波兰语

如果您打算在已编码的文档中使用波兰语,请使用以下代码:

\usepackage{polski}
\usepackage[polish]{babel}

上述代码仅允许使用波兰字母,并将自动文本翻译为波兰语, 例如 "chapter" 变为 "rozdział"。此外,您还需要注意以下几点。

连接词

波兰语中有许多单个字母的连接词:如 "a"、"o"、"w"、"i"、"u"、"z" 等,语法和排版规则不允许它们作为一行的最后一个字母。为了确保 LaTeX 不将它们设置为行尾的字母,您需要使用不可断行的空格:

Noc była sierpniowa, ciepła i~słodka, Księżyc oświecał srebrnem światłem wgłębienie, tak,
że twarze małego rycerza i~Basi były skąpane w blasku.
Poniżej, na podwórzu zamkowem, widać było uśpione kupy żołnierzy, a~także i~ciała zabitych
podczas dziennej strzelaniny, bo nie znaleziono dotąd czasu na ich pogrzebanie.

Babel(>=3.58)与 LuaTeX 提供了一个转换功能,无需显式标记,通过以下命令激活:

\babelprovide[transforms = oneletter.nobreak]{polish}

数字

根据波兰语语法规则,在章节、节、小节等标题后必须在数字后加点。

通过重新定义几个 LaTeX 宏来实现这一点:

对于书籍:

\renewcommand\thechapter{\arabic{chapter}.}
\renewcommand\thesection{\arabic{chapter}.\arabic{section}.}
\renewcommand\thesubsection{\arabic{chapter}.\arabic{section}.\arabic{subsection}.}
\renewcommand\thesubsubsection{\arabic{chapter}.\arabic{section}.\arabic{subsection}.\arabic{subsubsection}.}

对于文章:

\renewcommand\thesection{\arabic{section}.}
\renewcommand\thesubsection{\arabic{section}.\arabic{subsection}.}
\renewcommand\thesubsubsection{\arabic{section}.\arabic{subsection}.\arabic{subsubsection}.}

另外,您可以使用专用的文档类:

  • mwart 类代替 article

  • mwbk 类代替 book

  • mwrep 类代替 report

这些类提供了更多的欧洲排版设置,但不需要使用波兰语 Babel 设置或字符编码。

简单用法:

\documentclass{mwart}
\usepackage[polish]{babel}
\usepackage{polski}
\begin{document}
Pójdź kińże tę chmurność w głąb flaszy.
\end{document}

这些类的完整文档可以在 此处 查阅(波兰语)。

缩进

在某些出版商的习惯中,可能会在章节和小节的第一段进行缩进:

\usepackage{indentfirst}

连字符和排版

在排版中,将单词的连字符放在页面之间比美国排版习惯更为不推荐。

要调整跨页断字的处罚,请使用以下命令:

\brokenpenalty=1000

要调整处理寡妇与孤儿行(在TeX术语中称为“俱乐部”)的处罚,请使用以下命令:

\clubpenalty=1000
\widowpenalty=1000

数学中的逗号

根据一些排版规则,数字的小数部分应由逗号分隔,而不是点。在数学模式下,为了防止逗号后面插入额外的空格(除非逗号后面有空格),可以使用 icomma 包:

\usepackage{icomma}

不幸的是,它与 dcolumn 包部分不兼容。需要使用点代替数值列中的逗号,并让 dcolumn 将它们转换为逗号,或者通过以下方式定义列:

\begin{tabular}{... D{,}{\mathord\mathcomma}{2} ...}

另一种方法是使用 numprint 包,尽管它不太方便。

另外一种替代方法是使用 siunitx 包,它可以让你一致地排版数字及其单位,支持表格中的数字对齐和不同的输出模式。

进一步

有关波兰语语法和排版规则的更多息,请参阅《Słownik Ortograficzny》(波兰语)。

Zasady Typograficzne Składania Tekstu(波兰语)中提供了很好的摘要。

葡萄牙语

在文档的前言部分添加以下代码:

\usepackage[portuguese]{babel}

您可以通过选择 brazilianbrazil 来替换为巴西葡萄牙语。

斯洛伐克语

基本设置与捷克语相同,但斯洛伐克语需要特殊符号,如 ‘ď’, ‘ť’, ‘ľ’。为了能够从键盘输入这些符号,使用以下设置:

\usepackage[slovak]{babel}
\usepackage[T1]{fontenc}

西班牙语

包括适当的 Babel 选项:

\usepackage[spanish]{babel}

西班牙语有多个选项和命令来控制布局。选项可以在调用 Babel 时加载,或者通过定义命令 \spanishoptions 来加载。因此,以下命令大致等价:

\def\spanishoptions{mexico}
\usepackage[spanish]{babel}
\usepackage[spanish,mexico]{babel}

通常,前者语法应优先使用,因为后者并非所有程序(如 LyX,latex2rtf)都能识别。

西班牙语还定义了点和符号 << >> 的简写,使它们作为逻辑标记使用:前者用于数学模式中的小数点,输出通常为逗号或点;后者用于引用文本,输出通常为«»或“”。这使得使用相同的输入可以根据不同的排版习惯输出不同的格式。

特别有用的选项是 es-noquotinges-nolists:一些包和类在处理活动字符时与西班牙语有冲突,这些选项可以禁用西班牙语的内部功能,从而克服这些常见的陷阱。

mexicomexico-com 选项提供了墨西哥当地习惯的支持:前者使用小数点,符合习惯,后者允许使用小数逗号,曾被墨西哥经济秘书处的食品和商品标签的官方标准所要求。

泰语

babel(luatex 和 xetex)和 polyglossia(仅 xetex)支持泰语。luatex 中的分词基于标准的连字符机制,因此可以通过 \babelpatterns 修改模式,而 xetex 使用其内建机制。在 pdftex 中,您需要使用外部工具进行分词(如 swath)。一个带有 babel(luatex 和 xetex)的示例:

\documentclass{book}
\usepackage{babel}
\babelprovide[main, import]{thai}
\babelfont{rm}{FreeSerif}
\begin{document}
ปัจจุบันข้าวและพริกเป็นส่วนประกอบสำคัญที่สุดของอาหารไทย
\end{document}

藏文

使用藏文脚本的 LaTeX 选项之一是添加:

\usepackage{ctib}

并使用略微修改的 Wylie 音译进行输入。有关详细息,请参阅出色的包文档。更多息请查看[1]。

babelluatex 提供了对尾部 tshegs 的 tentative 支持。[2]

越南语

以下前言可用于直接输入越南语(xetex 或 luatex)。

\documentclass{article}
\usepackage{fontspec}%
\setmainfont[Ligatures=TeX]{Linux Libertine O}

对于用此语言编写的文档:

\documentclass{article}
\usepackage[vietnamese]{babel}

Last modified: Sunday, 20 April 2025, 11:14 AM