LaTeX/国际化
LaTeX 需要一些额外的配置才能排版非英语文档。目前有两个提供国际语言支持的包,分别是 Babel 和 Polyglossia。
- Babel[1] 支持三个主要引擎,分别是 pdfTeX、LuaTeX 和 XeTeX。根据引擎的不同,支持的语言数量(具有不同程度的覆盖范围)从大约 170 到 300 不等,涵盖了大约 45 个脚本,并且可以轻松地从头开始声明新的脚本。它还为 Plain TeX 提供了部分支持。
- Polyglossia 被设计为 Babel 的替代方案,用于 XeTeX(虽然目前也为 LuaTeX 提供了部分支持,但不支持 pdfTeX)。它支持大约 90 种语言,涵盖了大约 30 个脚本。
这两个包都涵盖了世界上的主要语言(法语、西班牙语、阿拉伯语、汉语、日语、泰语、印地语、马拉地语等),并处理以下任务
- 字体
- 如果可能,设置当前字体的脚本和语言标签,并在用户指定的情况下(主要是 XeTeX 和 LuaTeX)在每种语言的字体之间切换。使用 Babel + LuaTeX,字体可以根据脚本自动切换。另请参阅关于 fontspec 的讨论,在 Fonts 章节中。
- 断行、对齐和连字符
- 为每个脚本和语言激活相应的断行算法。对于带连字符的语言,加载特定语言的连字符模式。Babel 为 CJK 脚本提供基本的断行功能,以及非标准连字符,例如“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} % <- With XeTeX or LuaTeX, delete this line
\usepackage{babel}
\begin{document}
Plus ça change, plus c'est la même chose!
\end{document}
|
此外,还有一些针对日语、韩语或汉语等语言的专门框架,将在下面介绍。
编码
[edit | edit source]Unicode 引擎
[edit | edit source]使用xelatex或lualatex引擎时,下面描述的许多问题都会为你解决。输入文件假定为 UTF-8(XeLaTeX 也接受 UTF-16 和 UTF-32),并且引擎会自动将 Unicode 字符映射到你在文档中选择的 TrueType 或 OpenType 字体中的字形。(当然,这是假设这些字体包含你需要的字形,因此你必须确保你的字体支持你使用的语言。)
8 位引擎
[edit | edit source]对于不支持 Unicode 的引擎(latex或pdflatex),LaTeX 必须处理两个基本问题
- 将你的输入文件中的字节映射到你要使用的语言的字符。
- 将这些字符映射到你的文档使用的字体中的字形。
使用它们,你必须告诉 LaTeX 使用哪种编码来处理你的输入文件,以及它应该使用哪种“输出”编码来将字符映射到字体中的字形。在大多数情况下(特别是对于多语言文档),UTF-8 是最佳的输入编码,它目前是默认编码。
对于大多数拉丁语系语言,T1是所需的输出编码,可以用以下方式设置
\usepackage[T1]{fontenc}
|
下面显示了特定语言的其他输出编码。
有关更多信息,请参阅关于 Fonts 章节中的编码讨论,以及 Special Characters 章节。
Babel
[edit | edit source]核心包 babel 支持 3 个主要引擎(PDFLaTeX、LuaLaTeX 和 XeLaTeX)。指定文档语言有两种方法。其中一种是在加载包时作为参数传递。
\usepackage[language]{babel}
|
另一种方法是将语言设置为全局选项,以便其他包可以检测和使用它。
\documentclass[language]{article}
\usepackage{babel}
|
最后,babel 通过一组 ini 文件,提供对约 300 种语言的全部或部分支持,这些文件可以通过 \babelprovide
访问。此命令也可以用来从头开始轻松定义自己的语言。名称被规范化为 Unicode CLDR 中的名称。
Babel 会自动为选择的语言激活适当的连字符规则。如果您的 LaTeX 格式不支持您选择的语言的连字符,Babel 仍然可以工作,但会禁用连字符,这会对排版文档的外观产生负面影响(但使用 LuaLaTeX,可以在排版文档时加载连字符规则)。Babel 还为某些语言指定了新的命令,这些命令简化了特殊字符的输入。有关更多信息,请参阅下面有关语言的部分。
如果您用多种语言调用 babel
\usepackage[languageA,languageB]{babel}
|
次要语言中的简短文本不需要在前言中显式声明,因为 babel 支持懒加载语言。只需按以下说明选择它,基本声明就会动态加载。
选项列表中的最后一种语言将处于活动状态(即 languageB),您可以使用命令
\selectlanguage{languageA}
|
来更改活动语言(当文档开始时,使用 \{document}
,主语言会自动选择)。您也可以使用命令添加另一种语言的简短文本
\foreignlanguage{languageB}{Text in another language}
|
Babel 还提供各种环境来输入另一种语言的较长文本
\begin{otherlanguage}{languageB}
Text in language B. This environment switches all language-related definitions, like the language
specific names for figures, tables etc. to the other language.
\end{otherlanguage}
|
此环境的星号版本根据另一种语言的规则对主文本进行排版,但将特定语言的字符串保留用于辅助内容,例如文档主语言的图形。环境hyphenrules仅切换使用的连字符模式;它也可以用来使用语言名 'nohyphenation' 来禁止连字符(但请注意otherlanguage*更受欢迎)。
babel 手册 提供了有关这些选项和许多其他选项的更多信息。
字体管理
[edit | edit source]如果您使用的是 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}
|
双向文本
[edit | edit source]Babel 为 bidi 文本提供基本支持,主要是在 LuaTeX 中。包选项可以取三个值,分别是 default
、basic-r
和 basic
。使用 bidi=basic
,RTL 和 LTR 文本可以在没有显式标记的情况下混合(仅限 LuaTeX)。
多语言版本
[edit | edit source]在 LaTeX 中,可以将一个文档的内容排版成多种语言,并在编译时选择要输出的语言,并在预定义的字符串中(章节名称、日期等)。在多语言文档中使用上面的命令可能很麻烦,因此 babel 提供了一种方法来定义更短的名称。使用
\babeltags{de = german}
|
您可以写
text \textde{German text} text
text
\begin{de}
German text
\end{de}
text
|
此功能有一个明显的缺点,即 ‘前缀’\text...在 LaTeX 中被严重重载,并且可能会与现有的宏发生冲突。 babel 手册建议坚持使用默认选择器或定义自己的替代方案。
还可以使用 Heiko Oberdiek 的 iflang 包来测试当前语言(babel 包的内置功能不可靠)。以下是一个简单的示例
\IfLanguageName{ngerman}{Hallo}{Hello}
这样可以轻松区分两种语言,而无需定义自己的命令。另一种用于本地化字符串的方法是 translator。
Polyglossia
[edit | edit source]使用 XeLaTeX 或 LuaLaTeX 时,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}
|
特定语言
[edit | edit source]以下是一些特定语言的建议。如果您对以下未列出的语言有经验,请添加一些关于该语言的笔记。本章描述的一些方法在处理参考文献中的非英语作者姓名时可能会有用。
以下大多数假设您使用的是 babel,但 polyglossia 支持一些相同的命令,尽管它们的行为可能不同。 |
阿拉伯语脚本
[edit | edit source]使用阿拉伯语脚本的文档,包括阿拉伯语、波斯语、乌尔都语、普什图语、库尔德语、维吾尔语等,最好使用 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 的阿拉伯语对齐提供部分和初步支持(使用 ARABIC TATWEEL Unicode 字符)或基于 OpenType 表格的‘对齐备选方案’(jalt).
LuaTeX 的一个替代包是 arabluatex,它是 LuaTeX 的扩展,基于 arabtex,下面将对其进行介绍。对于 XeTeX,则可以使用 arabxetex。
在 8 位引擎中,可以通过多种方式进行排版,其中最古老的一种是 arabtex。请将以下代码添加到您的前言部分
\usepackage{arabtex}
|
您可以使用罗马化字符或原生阿拉伯脚本编码输入文本。可以使用以下任何命令和环境来输入文本
\< ... >
\RL{ ... }
\begin{arabtext} ... \end{arabtext}.
|
有关更多详细信息,请参阅 ArabTeX 维基百科文章。
您还可以使用 Arabi 包在 Babel 中排版阿拉伯语和波斯语
\usepackage{cmap}
\usepackage[LAE,LFE]{fontenc}
\usepackage[arabic,farsi]{babel}
|
您还可以复制并粘贴来自 Arabi 生成的 PDF 文件,这得益于 cmap 包的支持。您可以将 Arabi 与 LyX 或 tex4ht 结合使用以生成 HTML。
请参阅 CTAN 上的 Arabi 页面
亚美尼亚语
[edit | edit source]亚美尼亚字母使用其自身的字符,这要求您安装一个支持 Unicode 的文本编辑器,并允许您输入 UTF-8 文本,例如 Texmaker 或 WinEdt。然后,应该将这些文本编辑器配置为使用 XeLaTeX 或 LuaLaTeX 编译。
一旦文本编辑器设置为使用 XeLaTeX 或 LuaLaTeX 编译,就可以使用 fontspec 包来书写亚美尼亚语
\usepackage{fontspec}
\setmainfont{DejaVu Serif}
|
或
\usepackage{fontspec}
\setmainfont{Sylfaen}
|
Sylfaen 字体缺乏斜体和粗体,但 DejaVu Serif 支持它们。
有关更多详细信息,尤其是关于如何配置支持 Unicode 的文本编辑器以使用 Unicode 引擎进行编译,请参阅 亚美尼亚维基教科书。
西里尔字母
[edit | edit source]目前,排版西里尔字母文本最方便的方式是使用 XeTeX 或 LuaTeX,并采用 UTF-8 编码。以下是以这些引擎排版俄语的示例,由于所有操作都直接在该编码中进行,因此不需要进行编码转换。
\documentclass{article}
\usepackage[russian]{babel}
\babelfont{rm}{DejaVu Serif}
\begin{document}
Россия, находящаяся на пересечении множества культур, а также
с учётом многонационального характера её населения, — отличается
высокой степенью этнокультурного многообразия и способностью к
межкультурному диалогу.
\end{document}
|
在非 Unicode 引擎中,对西里尔字母的支持基于标准 LaTeX 机制以及 fontenc 和 inputenc 包。babel 包含对以下内容的支持T2*编码,以及使用西里尔字母排版保加利亚语、俄语和乌克兰语文本[2](使用非 Unicode 引擎)。AMS-LaTeX 包应该在 fontenc 和 babel(Why?) 之前加载。如果您要在数学模式中使用西里尔字母,还需要在 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 还提供了一些命令,允许根据保加利亚语、俄语或乌克兰语的标准进行排版。
对于所有三种语言,都提供了语言特定的标点符号:文本中的西里尔字母连字符(它比拉丁字母连字符略窄,并被微小的空格包围),直接引语中的连字符、引号以及用于简化连字符化的命令
组合键 | 操作 |
---|---|
"| |
在该位置没有连字符。 |
"- |
显式连字符,允许在单词的其余部分进行连字符化。 |
"--- |
纯文本中的西里尔字母 emdash。 |
"--~ |
复合名称(姓氏)中的西里尔字母 emdash。 |
"--* |
用于表示直接引语的西里尔字母 emdash。 |
"" |
类似于 "- ,但它不会生成连字符(用于带连字符的复合词,例如 x-""y 或其他一些符号,如“disable/enable”。)。 |
"~ |
没有断点的复合词标记。 |
"= |
带有断点的复合词标记,允许在构成词语中进行连字符化。 |
", |
在后面的姓氏中带有断点的缩写之间的细空格。 |
"‘ |
德语开头的双引号 (,,)。 |
"’ |
德语结尾的双引号 (“)。 |
"< |
法语开头的双引号 (<<)。 |
"> |
法语结尾的双引号 (>>)。 |
babel 的俄语和乌克兰语选项定义了以下命令
\Asbuk
\asbuk
|
它们的用法类似于 \Alph
和 \alph
(将计数器转换为字母的命令,例如 a, b, c...
),但会生成俄语或乌克兰语字母的字母(无论哪种语言是文档的活动语言)。
babel 的保加利亚语选项提供了以下命令
\enumBul
\enumLat
\enumEng
|
它们使 \Alph
和 \alph
生成保加利亚语或拉丁语(英语)字母。对于保加利亚语语言选项,\Alph
和 \alph
的默认行为是生成保加利亚语字母的字母。
请参阅 “LaTeX 简介(不是那么短)” 的保加利亚语翻译[3],了解使用不同发行版从键盘直接输入西里尔字母的方法。
中文
[edit | edit source]排版中文文本(以及一般来说 CJK 脚本文本)最好使用完整的框架,例如 CJK 或 xeCJK,尽管对于短文本或少量水平排版文本,使用 XeTeX 和 LuaTeX 的 babel 就足够了,可以进行基本的断行。
CJK 包
[edit | edit source]得益于 CJK 包集合,可以实现对中文的支持。如果您使用的是包管理器或 portage 树,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 (简体宋体, simplified Chinese)
- gkai (简体楷体, simplified Chinese)
- bsmi (繁體細上海宋體, traditional Chinese)
- bkai (繁體標楷體, traditional Chinese)
在 CTeX 发行版(已过时)中,还包含了六种简体中文字体,对应于 Windows 默认字体
- song (宋体, Simsun)
- hei (黑体, Simhei)
- fang (仿宋, STFangSong)
- kai (楷体, STKaiti)
- li (隶书, SimLi)
- you (幼圆, SimYou)
xeCJK 包
[edit | edit source]使用 XeTeX 引擎时,还有一个名为 xeCJK 的包,它基于 fontspec 并提供与 CJK 包类似的接口。
使用该包时,可以像这样定义 CJK 字体
\documentclass{article}
\usepackage{xeCJK}
\setCJKmainfont{FZSSK.ttf} % use Foundertype's Chinese font, which has a free license
\begin{document}
你好
You can still mix Latin letters and Chinese!
\end{document}
|
捷克语使用
\usepackage[czech]{babel}
|
UTF-8 允许您在文本中直接使用 “捷克语引号”。否则,可以使用宏 \clqq 和 \crqq 来生成左引号和右引号。您可以将引号文本放在 \uv
中。
虽然带重音符号的捷克字母显示正确,但它们无法在使用 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-french 3.0 版本开始,建议使用以下命令选择语言作为全局选项[4]
\documentclass[french]{article}
\usepackage{babel}
|
以前,您可以使用以下命令加载法语支持
\usepackage[frenchb]{babel}
|
或
\usepackage[francais]{babel}
|
根据法语的种类,排版法语文档有多种选择:french 用于巴黎法语,而 acadian 和 canadien 用于新世界法语。如果您不知道或不关心,我们建议使用 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~€?»
|
欧元符号之前的非换行空格仍然是必要的,因为货币符号和其他单位通常不受支持(这并非法语特有的)。
您可以将 numprint 包与 Babel 一起使用。它可以让您以法语方式打印数字。
\usepackage[french]{babel}
\usepackage[autolanguage]{numprint} % Must be loaded *after* babel.
% ...
\nombre{123456.123456 e-17}
|
|
您还会注意到,当切换到法语时,列表的布局会发生变化。可以使用 \frenchsetup
命令对其进行自定义。有关 french 选项在 babel 中的作用以及如何自定义其行为的更多信息,请在文件上运行 LaTeXfrenchb.dtx并阅读生成的frenchb.pdf或frenchb.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}
|
有一个专门针对 XeTeX 的包名为 xgreek。
使用以下几行
\usepackage[magyar]{babel}
|
更多信息匈牙利语。
以下几行可以添加到冰岛语文本中
\usepackage[icelandic]{babel}
|
这会将类似于 Part 的文本更改为 Hluti。它使其他命令可用
"`或\glqq | „ |
\grqq | “ |
\TH | Þ |
\th | þ |
\DH | Ð |
\dh | ð |
要使 Þ 和 Æ 等特殊字符可用,只需添加
\usepackage[T1]{fontenc}
|
默认的 LATEX 字体编码是 OT1,但它只包含 128 个字符。T1 编码包含使用拉丁字母的大多数欧洲语言的字母和标点符号。
LaTeX 很好地支持意大利语。只需添加
\usepackage[italian]{babel}
|
在你的文档开头,所有命令的输出将被正确翻译。
LaTeX 很好地支持挪威语。只需添加
\usepackage[norsk]{babel}
|
在你的文档开头,所有命令的输出将被正确翻译。
该包为 LuaTeX-ja / pLaTeX / upLaTeX 提供类文件和 JFM(日语字体度量)文件。这旨在实施日语文本布局要求。
TeX 有一个针对日语的变体,称为 upTeX,它支持垂直排版。
在日语中写作的另一种方法是使用 Lualatex 和 luatex-ja 包。来自 Luatexja 文档的修改示例
\documentclass{ltjsarticle}
\usepackage{luatexja} % This line is unnecessary when using ltjclasses or ltjsclasses.
\begin{document}
\section{はじめてのLua\TeX-ja}
ちゃんと日本語が出るかな?
\subsection{出たかな?}
長い文章を入力するとちゃんと右端のところで折り返されるかな?
大丈夫そうな気がするけど.ちょっと不安だけど何事も挑戦だよね.
\end{document}
|
你也可以使用 fontspec 包提供的功能以及 luatexja-fontspec 提供的功能来声明要在你的论文中使用的字体。让我们举个例子
% **********************************
% Basic setup
\documentclass[10pt,a4paper]{article}
\usepackage{fontspec}
\setmainfont[Numbers={OldStyle,Proportional}]{Arno Pro} %setup of western font
\usepackage{luatexja}
\usepackage{luatexja-fontspec}%needed to call \setmainjfont bellow
\setmainjfont[BoldFont=KozGoPr6N-Bold]{KozGoPr6N-Regular} %setup of japanese font
%***********************************
\begin{document}
It is a test to show japanese and english mix. テスト中です。どうですか皆さん。
\end{document}
|
使用 UTF-8 作为你的编码。如果你不知道如何做到这一点,请查看 Texmaker,一个默认使用 UTF-8 的 LaTeX 编辑器。
luatex-ja 可以与 babel 协作。例如
\documentclass{ltjbook}
\usepackage[ngerman,japanese]{babel}
|
对于其他语言文档中的简短日语文本(几个单词或几段),babel(≥3.31)与 luatex 应该就足够了;例如
\usepackage[ngerman]{babel}
\babelprovide[import]{japanese}
\babelfont[japanese]{rm}{IPAMincho}
|
为了使 hyperref 包正确显示目录,必须明确指定编码。
\usepackage[unicode=true]{hyperref}
|
另一个(但很旧)的日语支持是通过 CJK 或 XeCJK 包集合提供的。如果你使用的是包管理器或 portage 树,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 用户使用 CJK 包。
\documentclass[pdflatex,ja=standard]{bxjsarticle}
\begin{document}
吾輩は猫である。名前はまだ無い。
どこで生れたかとんと見当がつかぬ。
何でも薄暗いじめじめした所で
ニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
\end{document}
|
韩语文本文件最常用的两种编码是 EUC-KR 及其在韩国 MS-Windows 中使用的向上兼容扩展,CP949/Windows-949/UHC。在这些编码中,每个 US-ASCII 字符都代表其正常的 ASCII 字符,类似于其他与 ASCII 兼容的编码,例如 ISO-8859-x、EUC-JP、Big5 或 Shift_JIS。另一方面,韩语音节、韩字(汉语字符在韩国使用)、韩语字母、平假名、片假名、希腊语和西里尔字母以及从 KS X 1001 中提取的其他符号和字母由两个连续的八位字节表示。第一个的 MSB 设置为 1。直到 1990 年代中期,在非本地化(非韩语)操作系统下建立一个支持韩语的环境需要花费大量时间和精力。你可以浏览一下现在已经过时的 http://jshin.net/faq,以了解 1990 年代中期在非韩语操作系统下使用韩语的情况。
TeX 和 LaTeX 最初是为字母表中不超过 256 个字符的脚本编写的。为了使它们适用于具有更多字符的语言,例如韩语或中文,开发了一种子字体机制。它将具有数千或数万个字形的单个 CJK 字体划分为一组每个包含 256 个字形的子字体。
对于韩语,有三个常用的包。
- UN Koaunghi 的 HLATEX
- CHA Jaechoon 的 hLATEXp
- Werner Lemberg 的 CJK 包
HLATEX 和 hLATEXp 专门针对韩语,并在字体支持之上提供韩语本地化。它们都可以处理以 EUC-KR 编码的韩语输入文本文件。HLATEX 甚至可以处理以 CP949/Windows-949/UHC 和 UTF-8 编码的输入文件,前提是在使用 Λ、Ω 的情况下。
CJK 包不特定于韩语。它可以处理以 UTF-8 以及各种 CJK 编码(包括 EUC-KR 和 CP949/Windows-949/UHC)编码的输入文件,它可以用于排版包含多种语言内容(尤其是中文、日文和韩文)的文档。CJK 包没有像 HLATEX 提供的韩语本地化,并且它不像 HLATEX 那样附带那么多韩语特殊字体。
使用 TeX 和 LaTeX 等排版程序的最终目的是以美观的方式排版文档。可以说,排版中最重要的一点是使用一组设计良好的字体。HLATEX 发行版包含 10 个不同系列的 UHC PostScript 字体和 5 个不同系列的 Munhwabu 字体(TrueType)。CJK 包使用早期版本的 HLATEX 使用的一组字体,并且它可以使用 Bitstream 的 cyberbit True-Type 字体。
要使用 HLATEX 包排版你的韩语文本,请将以下声明添加到你的文档的序言中
\usepackage{hangul}
|
此命令开启韩语本地化功能。章节、节、小节、目录和图表目录的标题将全部翻译成韩语,文档格式也将更改为符合韩语规范。该包还提供自动语尾选择功能。在韩语中,存在语法上等价但形式不同的后缀语尾对。在给定语尾对中,哪个语尾正确取决于前一个音节是否以元音或辅音结尾。(实际情况比这复杂一些,但这足以让您了解基本情况。)韩语母语人士不会遇到选择正确语尾的问题,但对于引用和其他在您编辑文档时会更改的自动文本,无法确定使用哪个语尾。每次添加/删除引用,或只是调整文档部分时,手动添加适当的语尾非常繁琐,而且容易出错。HLATEX 为其用户免除了这个无聊且容易出错的过程。
如果您不需要韩语本地化功能,但只需要排版韩语文本,则可以在前言中添加以下行。
\usepackage{hfont}
|
有关使用 HLATEX 排版韩语的更多详细信息,请参阅 HLATEX 指南。查看韩国 TeX 用户组 (KTUG)的网站。
在 KTUG 的常见问题解答部分,建议使用 kotex 包
\usepackage{kotex}
|
对于波斯语,有一个名为 XePersian 的专用包,它使用 XeLaTeX 作为排版引擎。只需将以下代码添加到您的前言中即可
\usepackage{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.
|
带有 LuaTeX 的 Babel(>=3.58)为此目的提供了一个转换,无需显式标记,它由以下代码激活
\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}
|
这些类的完整文档可在http://web.archive.org/web/20040609034031/http://www.ci.pwr.wroc.pl/~pmazur/LaTeX/mwclsdoc.pdf(波兰语)获得。
缩进节和章节中的第一段可能很常见(取决于出版商)。
\usepackage{indentfirst}
|
与美式排版中常见的做法相比,在页面之间使用连字符化来设置页面会更加不受欢迎。
要调整跨页连字符化的惩罚,请使用以下命令
\brokenpenalty=1000
|
要调整留下寡妇行和孤儿行(TeX 术语中的俱乐部)的惩罚,请使用以下命令
\clubpenalty=1000
\widowpenalty=1000
|
根据一些排版规则,数字的小数部分应该用逗号分隔,而不是点。要让 LaTeX 在数学模式下不插入逗号后面的额外空格(除非逗号后面有空格),请使用 icomma 包。
\usepackage{icomma}
|
不幸的是,它与 dcolumn 包部分不兼容。您需要在源文件中对包含数字数据的列使用点,并让 dcolumn 将其转换为逗号以进行显示或将列定义如下
\begin{tabular}{... D{,}{\mathord\mathcomma}{2} ...}
|
另一种选择是使用 numprint 包,但它很不方便。
另一种选择是使用 siunitx 包,它允许您一致地排版数字及其相应的单位。它支持表中的数字对齐和不同的输出模式。
有关波兰语语法和排版规则的更多信息,请参阅波兰语拼写词典。
可在波兰语文本排版规则中找到良好的摘录。
将以下代码添加到您的前言中
\usepackage[portuguese]{babel}
|
您可以通过选择 brazilian 或 brazil 来将语言替换为巴西葡萄牙语。
当斯洛伐克语的设置与捷克语相同,则基本设置就可以了,但是斯洛伐克语需要特殊的符号表示“ď”、“ť”、“ľ”。为了能够从键盘输入这些符号,请使用以下设置
\usepackage[slovak]{babel}
\usepackage[T1]{fontenc}
|
包括适当的 Babel 选项
\usepackage[spanish]{babel}
|
诀窍是西班牙语有多个选项和命令来控制布局。这些选项可以在调用 Babel 时加载,也可以在调用之前加载,方法是定义命令 \spanishoptions
。因此,以下命令大致等价
\def\spanishoptions{mexico}
\usepackage[spanish]{babel}
|
\usepackage[spanish,mexico]{babel}
|
一般来说,应该优先使用前一种语法,因为后一种语法不被一些与 LaTeX 交互的程序(LyX、latex2rtf)识别。
西班牙语还为点和 << >> 定义了简写,以便将它们用作逻辑标记:前者用作数学模式中的小数点,输出通常是逗号或点;后者用作引用文本,输出通常是 «» 或 “”。这允许使用相同的输入获得不同的排版约定,因为人们的偏好可能与西班牙和墨西哥等地方有很大差异。
两个特别有用的选项是 es-noquoting,es-nolists:一些包和类在处理活动字符时,已知会与西班牙语发生冲突,这些选项会禁用西班牙语的内部工作机制,以便您克服这些常见的陷阱。此外,这些选项可以简化 LyX 从 GUI 中自定义西班牙语布局某些功能的方式。
选项 mexico,mexico-com 提供了对墨西哥本地习俗的支持:前者使用小数点,这是习惯用法,后者允许使用小数逗号,这是墨西哥经济部(NOM)以前在食品和商品标签中要求的规范。更多本地化正在制作中。
其他命令在加载 Babel 后修改了西班牙语布局。两个特别有用的命令是 \spanishoperators
和 \spanishdeactivate
。
宏 \spanishoperators{<运算符列表>}{
包含西班牙语数学运算符的列表,可以随意重新定义。例如,命令
\def\spanishoperators{sen}
|
仅定义 sen,覆盖所有其他定义;命令 \let\spanishoperators\relax
禁用它们全部。此命令支持带重音或空格的运算符: \acute{<字母>}
命令添加重音, \,
命令添加一个小空格。例如,以下运算符默认定义。
l\acute{i}m l\acute{i}m\,sup l\acute{i}m\,inf m\acute{a}x
\acute{i}nf m\acute{i}n sen tg arc\,sen arc\,cos arc\,tg
cotg cosec senh tgh
|
最后,宏 \spanishdeactivate{<字符列表>}
禁用了一些活动字符,以防止其他包重新定义它们时出现问题。停用的候选者是集合 {<>."'}. 请注意,一些选项会优先使用某些活动字符。特别是,您不应该将 es-noquoting 选项与 \spanishdeactivate{<>}
结合使用,或者将 es-noshorthands 与 \spanishdeactivate{<>."}
结合使用。
请查看 Babel 或spanish.dtx的文档以获取更多详细信息。
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}
|
并使用略微修改的威利转写进行输入。有关详细信息,请参阅出色的包文档。更多信息可以在 [1] 中找到。
`babel` 对于 `luatex` 提供了对带尾随tshegs的对齐的支持。[2]
以下前言可用于直接输入越南语(xetex 或 luatex)。
\documentclass{article}
\usepackage{fontspec}%
\setmainfont[Ligatures=TeX]{Linux Libertine O}
|
对于用这种语言编写的文档
\documentclass{article}
\usepackage[vietnamese]{babel}
|
- ↑ Babel:用于本地化 LaTeX、LuaLaTeX、XeLaTeX 的多语言框架
- ↑ LaTeX 不完全指南,2.5.6 西里尔字母支持,Maksym Polyakov
- ↑ LaTeX 不完全指南,保加利亚语翻译
- ↑ babel-french 文档:“法语现在应该加载为 french,而不是 frenchb 或 francais,最好是作为
\documentclass
的全局选项。在 v3.0 中仍然存在一些容忍度,但不要依赖它。”