以下代码在 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}