在 LuaTeX 中使用两种样式的 \babelfont 时出现奇怪的行为

在 LuaTeX 中使用两种样式的 \babelfont 时出现奇怪的行为

考虑这些 MWE。

\documentclass{article}

\usepackage[english]{babel}
\babelprovide[onchar=ids fonts]{english}
\babelprovide[main,import]{thai}
\usepackage{fontspec}

% \babelfont[thai]{rm}[
%     Script=Thai,
%     UprightFont = *.otf,
%     BoldFont = *-Bold.otf,
%     ItalicFont = *-Italic.otf,
%     BoldItalicFont = *-BoldItalic.otf]
%     {Laksaman}
\babelfont[thai]{rm}{FreeSerif}
\babelfont[thai]{sf}[
    Script=Thai,
    UprightFont = *.otf,
    BoldFont = *-Bold.otf,
    ItalicFont = *-Italic.otf,
    BoldItalicFont = *-BoldItalic.otf]
    {Laksaman}

\begin{document}
    ข้อความทดสอบ Test text.
    \textsf{ข้อความทดสอบ Test text.}
\end{document}

以下代码产生预期结果。(正确应用衬线和无衬线样式) 在此处输入图片描述

然而,当我将泰语的衬线字体改为与无衬线字体(Laksaman)相同时,此代码的产物被格式化错误的。(最后一个测试文本的样式是衬线,而不是无衬线)

\documentclass{article}

\usepackage[english]{babel}
\babelprovide[onchar=ids fonts]{english}
\babelprovide[main,import]{thai}
\usepackage{fontspec}

\babelfont[thai]{rm}[
    Script=Thai,
    UprightFont = *.otf,
    BoldFont = *-Bold.otf,
    ItalicFont = *-Italic.otf,
    BoldItalicFont = *-BoldItalic.otf]
    {Laksaman}
% \babelfont[thai]{rm}{FreeSerif}
\babelfont[thai]{sf}[
    Script=Thai,
    UprightFont = *.otf,
    BoldFont = *-Bold.otf,
    ItalicFont = *-Italic.otf,
    BoldItalicFont = *-BoldItalic.otf]
    {Laksaman}

\begin{document}
    ข้อความทดสอบ Test text.
    \textsf{ข้อความทดสอบ Test text.}
\end{document}

在此处输入图片描述

那么,有人能向我解释一下这里发生了什么吗?提前谢谢!

答案1

Babel尝试根据字体名称猜测系列。如果有两个系列或两个字体具有相同的名称,就会产生混淆。我必须研究如何处理这些情况。一种 hack 解决方法是复制并重命名字体文件(例如Laksaman-Bold.otfLaksamanSF-Bold.otf)并使用 Harfbuzz 渲染器(默认渲染器会引发 lua 错误):

\babelfont[thai]{sf}[
    Script=Thai,       % Very likely redundant
    Renderer=Harfbuzz,
    UprightFont = *.otf,
    BoldFont = *-Bold.otf,
    ItalicFont = *-Italic.otf,
    BoldItalicFont = *-BoldItalic.otf]
    {LaksamanSF}       % The new name

巴贝尔方特泰语

编辑[原始答案的一部分如下,这并不正确。]但是,有一个简单的解决方案:按以下方式设置不同的 NFSS 名称:

\babelfont[thai]{sf}[
    Script=Thai,
    NFSSFamily=LaksamanSF,
    UprightFont = *.otf,
    BoldFont = *-Bold.otf,
    ItalicFont = *-Italic.otf,
    BoldItalicFont = *-BoldItalic.otf]
    {Laksaman}

巴贝尔方特-泰-巴德

相关内容