Babel 在 fontspec 之前还是之后?

Babel 在 fontspec 之前还是之后?

密切关注包裹的装载顺序,我想知道是否babel应该装载或者 fontspec. 两本手册均未提供有关装载顺序的信息。

此外,该论坛中对此存在矛盾的观点,甚至专家的回答也存在矛盾的观点。

例如,2014 年 7 月 egreg 回答的问题建议加载fontspec babel

然而,egreg 在 2014 年 10 月的回答中似乎自相矛盾问题并建议加载fontspec babel

我确信这种混乱只是因为我对细节缺乏了解。我遗漏了什么?正确的加载顺序应该是什么?

答案1

您不会指望加载顺序会有什么不同:babel是关于选择语言自定义,fontspec是关于选择字体,这些只是略有关联。当然,babel包括许多不同作者的许多不同语言文件,可能存在一些极端情况,以不同的顺序加载可以解决某些问题,但我不知道有任何这种情况。

请注意,链接的问题都是 2015 年之前的旧版本,当时 xelatex 和 lualatex 默认(如 pdftex)使用原始 TeX OT1 7 位编码,因此某些 babel 文件可能已警告该编码无法支持所请求的语言。然而,lualatex 和 xelatex 现在都默认(并且通常只使用)TU(Unicode),因此语言的选择不应影响所使用的编码,尽管当然并非所有字体都涵盖所有语言脚本。

请注意,在 (pdf)latex 中情况有所不同,因为您只能使用 8 位编码,因此需要更改编码以支持不同的语言。这意味着可能需要事先调用fontenc(not )以避免出现警告,例如加载编码以支持希腊语,或加载 T1 以支持大多数西欧语言,但即使在这里,我认为在大多数情况下,即使没有事先明确加载,babel 文件也会安排正确的编码。fontspecbabelLGRfontenc

答案2

在 3.15 版本中,Babel 直接支持通过 fontspec 配置字体。在这种情况下,你可以直接使用命令\babelfont,而不需要fontspec自己显式加载:

\documentclass{article}

\usepackage[american]{babel}

\babelfont{rm}{Libertinus Serif}
\babelfont{sf}{Libertinus Sans}

\begin{document}
\Huge Hello World. \textsf{In Sans.}
\end{document}

参见 babel 手册第 1.14 节“选择字体”。

相关内容