使用 Babel 和 FreeSerif 字体时出现泰语问题

使用 Babel 和 FreeSerif 字体时出现泰语问题

以下代码在 Windows 10 上使用 LuaLatex 进行编译时会出现警告,尽管会生成可读的文档。

\documentclass{article}
\usepackage{babel}
\babelprovide[main, import]{thai}
\babelfont{rm}{FreeSerif}
\begin{document}
    สวัสดี
\end{document}

警告:

font2.tex|| Package fontspec Warning: Language 'Thai' not available for font 'FreeSerif' with script 'Thai'.

以下情况会触发额外警告,并生成一份完全缺少泰语文本的文档。

\documentclass{article}
\usepackage[english,thai]{babel}
\babelprovide[import]{thai}
\babelfont{rm}{FreeSerif}
\begin{document}
Hello.

\begin{otherlanguage}{thai}
    สวัสดี
\end{otherlanguage}
\end{document}

警告:

font_problem.tex|| Package fontspec Warning: Language 'Thai' not available for font 'FreeSerif' with script 'Thai'.
font_problem.tex|| LaTeX Font Warning: Font shape `LTH/FreeSerif(0)/m/n' undefined using `LTH/norasi/m/n' instead on input line 3.

是什么原因造成的?我该如何解决?自由衬线包含泰语字形,第一个代码直接取自Latex WikiBooks 的示例

答案1

您必须稍微修改一下序言:

\documentclass{article}
\usepackage[english]{babel}
\babelprovide[import, main]{thai} % Remove main if the main language is english
\babelfont{rm}{FreeSerif}
\begin{document}
Hello.

\begin{otherlanguage}{thai}
    สวัสดี
\end{otherlanguage}
\end{document}

在此处输入图片描述

至于警告,它们通常是无害的,不是错误。它们在手册中进行了解释,也在使用 babel 避免 fontspec 警告

答案2

哈维尔·贝佐斯解决了你的问题,但需要更多的解释。

这个babel软件包很棒,但你刚刚遇到了它最大的问题之一。你加载了

\usepackage[english,thai]{babel}

当你通过该thai选项时,babel会加载一个名为的文件thai.ldf。它会尝试加载 8 位字体,并且无法使用 Unicode。很明显,你会收到一条错误消息

LaTeX Font Warning: Font shape `LTH/FreeSerif(0)/m/n' undefined using `LTH/norasi/m/n' instead [...]

LTH 是 8 位本地 THai 编码。任何时候 XeLaTeX 或 LuaLaTeX 尝试使用 TU 以外的编码时,某些软件包都会认为它仍处于 8 位世界中。

有效的示例却这样做了:

\usepackage{babel}
\babelprovide[main, import]{thai}

这将加载在 LuaLaTeX 和 XeLaTeX 中使用的泰语定义。

那么,使用\babelprovide来加载语言,对吗?我曾经这么认为。问题就在这里。坚持 的 Javier Bezosbabel告诉我这是错的。你会注意到他用 修复了这个问题

\usepackage[english]{babel}
\babelprovide[import, main]{thai} % Remove main if the main language is english

从 2020 年起,您应该将某些语言作为包选项加载到babel。其他语言仅适用于\babelprovide[import]

以何种方式加载哪种语言尚无详尽的记录。 我最初写了一份在文档中可以得到的关于使用哪些线索的列表,但后来删除了,但要点是:你需要通过反复试验来弄清楚。

答案3

下面的代码可以解决错误并正确呈现。尽管 Javier Bezos 引用的线程提供了有关错误和可能出错的线索,但我仍然不明白我尝试过的所有方法,根据其中的信息,似乎都是有意义的,只有这个解决方案有效。

\documentclass{article}
\usepackage{babel}
\babelprovide[import, language=Default, main]{english}
\babelprovide[import, language=Default]{thai}
\babelfont{rm}{FreeSerif}

\begin{document}
Hello.

\begin{otherlanguage}{thai}
    สวัสดี
\end{otherlanguage}
\end{document}

相关内容