使用 XeLaTeX 替换字体

使用 XeLaTeX 替换字体

我有一个自动生成的文档(使用 Doxygen),其中包含多种语言的许多不同 Unicode 字符:希伯来语、日语、希腊语、阿拉伯语等等。

部分文本使用等宽字体显示。

我尝试使用 DejaVu Sans 字体,它包含大多数字形,但我仍然缺少一些日文字符和等宽字体中的一些字符。

如果字体缺少字形,有什么方法可以告诉 XeLaTeX 自动进行替换?

因此,例如,它会使用一种字体作为主要字体,如果缺少某种字体,则会恢复为另一种字体,或者至少恢复为具有正确字形的非等宽字体?

答案1

正如 Andrey 指出的那样,关键在于“字符间标记”的概念。假设您有一些 CJK 字符未出现在常规字体中,并且您想为它们使用另一种字体;假设这些字符是 U+4E01 和 U+4E02。

然后执行以下操作即可:

\usepackage{fontspec}
\setmainfont[Ligatures=TeX]{<a font>}
\newfontfamily{\JapSubstFont}{<another font with the missing chars>}

\XeTeXinterchartokenstate=1
\newXeTeXintercharclass\JapSubst

\XeTeXcharclass"4E01=\JapSubst
\XeTeXcharclass"4E02=\JapSubst

\XeTeXinterchartoks 0 \JapSubst = {\begingroup\JapSubstFont}
\XeTeXinterchartoks 255 \JapSubst = {\begingroup\JapSubstFont}
\XeTeXinterchartoks \JapSubst 0 = {\endgroup}
\XeTeXinterchartoks \JapSubst 255 = {\endgroup}

每当\JapSubstcharclass 中的字符位于“单词”的开头或结尾或者位于“普通”字符之前或之后时,它将被排版在 中\JapSubstFont

还可以指定一个范围:

\count255="4E01
\loop\ifnum\count255<"5000
  \XeTeXcharclass\count255=\JapSubst
  \advance\count255 by 1
\repeat

相关内容