我正在尝试了解如何使用 ucharclasses 包。请参见以下示例:
\documentclass{article}
\usepackage{fontspec}
\usepackage{ucharclasses}
\newfontfamily\latinfont{Arial}
\newfontfamily\unicodefont{Times New Roman}
\setTransitionsForLatin{\latinfont}{\unicodefont}
\begin{document}
Doppelgänger
\end{document}
输出:
(我选择了两种容易区分的字体作为示例。)
为什么在 中呈现为“Doppelgä”(包括“ä”)\latinfont
而在 中呈现为“nger” \unicodefont
?
答案1
如果边界上同时存在:in
和out
插入,则 ucharclasses 会出现问题。然后它只使用其中一个,而使用哪一个甚至取决于声明的顺序。这意味着只要不同块之间有字间距,它就可以正常工作,但是只要输入和输出代码在一个字中,就会出现问题。由于是Latin
块的组合,这导致了您的示例:一个字中有两个块的字符。
因此,在设置转换时,你必须记住这一点。在必须将两个块中的字符组合成一个单词的情况下,你可以尝试添加一个零宽度字符来分隔它们:
\documentclass{article}
\usepackage{fontspec}
\usepackage[]{ucharclasses}
\newfontfamily\latinfont{Arial}
\newfontfamily\unicodefont{Times New Roman}
\begin{document}
\setTransitionsFor{BasicLatin}{\latinfont}{\unicodefont}
\setTransitionsFor{LatinSupplement}{\latinfont}{\unicodefont}
\setTransitionsFor{GreekAndCoptic}{\unicodefont}{\latinfont}
Doppelgänger αβ-Doppel Doppel-αβ
\setTransitionsFor{LatinSupplement}{\latinfont}{\unicodefont}
\setTransitionsFor{BasicLatin}{\latinfont}{\unicodefont}
\setTransitionsFor{GreekAndCoptic}{\unicodefont}{\latinfont}
Doppelgänger αβ-Doppel Doppel-αβ
\setTransitionsFor{Latin}{\latinfont}{}
\setTransitionsFor{BasicLatin}{\latinfont}{}
\setTransitionsFor{GreekAndCoptic}{\unicodefont}{}
Doppelgänger αβ-Doppel Doppel-αβ αβ-^^^^200dDoppel
\setTransitionsFor{GreekAndCoptic}{\unicodefont}{}
\setTransitionsFor{Latin}{\latinfont}{}
\setTransitionsFor{BasicLatin}{\latinfont}{}
Doppelgänger αβ-Doppel Doppel-αβ Doppel-^^^^200dαβ
\end{document}