ucharclasses 在这里起什么作用?

ucharclasses 在这里起什么作用?

我正在尝试了解如何使用 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

如果边界上同时存在:inout插入,则 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} 

在此处输入图片描述

相关内容