为 LuaLaTeX 中的特定 Unicode 字符定义后备字体

为 LuaLaTeX 中的特定 Unicode 字符定义后备字体

这个封闭式问题促使我提出一个更普遍的问题和一个我认为这里尚未证明的解决方案。

使用 LuaLaTeX 编译并使用 Unicode 输入时,如何为主字体中没有的特定 Unicode 字符设置后备字体?

我欢迎大家对我所展示的方法提出其他方法或提出批评。

答案1

我们可以定义一个命令来使用 切换到后备字体fontspec

然后我们可以用来newunicodechar将缺失的 Unicode 字符映射到切换到这些字符的后备字体的命令。

\documentclass{article}
\usepackage{fontspec, newunicodechar}
\setmainfont{PT Serif}
\newfontfamily{\fallbackfont}{Linux Libertine O}[Scale=MatchLowercase]
\DeclareTextFontCommand{\textfallback}{\fallbackfont}
\newunicodechar{ɔ}{\textfallback{ɔ}}
\newunicodechar{ϱ}{\textfallback{ϱ}}

\begin{document}
Hellɔ woϱld.
\end{document}

在此处输入图片描述

输出pdffonts显示两种字体均被使用:

name                                 type              emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
NUOAQT+PTSerif-Regular               CID TrueType      yes yes yes      4  0
UAEGUX+LinLibertineO                 CID Type 0C       yes yes yes      5  0

编辑:

我们还可以定义一个通用命令来设置缺失字符。它需要一个可选参数,默认为\textfallback,但如果需要额外的后备字体,则可以插入不同的字体。

\newcommand{\fallbackchar}[2][\textfallback]{%
    \newunicodechar{#2}{#1{#2}}%
}
\fallbackchar{ɔ}
\fallbackchar{ϱ}

相关内容