使用带有 ucharclasses 的 Dingbats 时出现意外行为

使用带有 ucharclasses 的 Dingbats 时出现意外行为

我尝试使用 来切换 Dingbats 字体ucharclasses,但无法获得正确的结果。这是我的 MWE:

\documentclass[border=0.2in,varwidth]{standalone}
\usepackage{fontspec}
\usepackage{ucharclasses}

\newfontfamily{\dingbatsfont}{Zapf Dingbats}

\setTransitionTo{Dingbats}{\dingbatsfont}
\setTransitionFrom{Dingbats}{\rmfamily}

\begin{document}
I award you a ✓︎, which is what you deserve.
\end{document}

以下是我得到的结果: 糟糕的结果。

似乎没有发生从 Dingbats 块的转换。我尝试将\setTransition...代码更改为

\setTransitionTo{Dingbats}{[entering dingbats] \dingbatsfont}
\setTransitionFrom{Dingbats}{\rmfamily [exiting dingbats]}

并得到 又一个糟糕的结果。

这似乎证实了这一点。

答案1

\rmfamily从块过渡时,您不一定想切换到。正确的行为是切换回您之前使用的字体。您可以通过在 a\begingroup和之间更改字体来实现这一点\endgroup

中存在许多错误ucharclasses:不仅 Dingbats 中的转换从未被调用,\setTransitions手册中记录的宏也不存在。但是,另一种解决方法是将默认转换设置为\begingroup\endgroup。默认转换 out 却(错误地)被调用。

这确实很不确定,因为实际上启用我使用的角色类会破坏它。

\tracinglostchars=2 % Show a warning for missing characters
\documentclass[border=0.2in,varwidth]{standalone}
\usepackage{fontspec}
\usepackage{ucharclasses}

\newfontfamily{\dingbatsfont}{DejaVu Sans}[Scale = MatchUppercase]

\setDefaultTransitions{\begingroup}{\endgroup}
\setTransitionsForSymbols{\begingroup\dingbatsfont}{\endgroup}

\begin{document}
\sffamily I award you a ✓︎, which is what you deserve.
\end{document}

字体示例

您的补丁,,\XeTeXinterchartoks \DingbatsClass 0 =也在这里有效。

\tracinglostchars=2 % Show a warning for missing characters
\documentclass[border=0.2in,varwidth]{standalone}
\usepackage{fontspec}
\usepackage[Dingbats]{ucharclasses}

\newfontfamily{\dingbatsfont}{DejaVu Sans}[Scale = MatchUppercase]

\setTransitionTo{Dingbats}{\begingroup\dingbatsfont}
\setTransitionFrom{Dingbats}{\endgroup}
% Workaround for a bug in ucharclasses:
\XeTeXinterchartoks \DingbatsClass 0 = {\endgroup}

\begin{document}
\sffamily I award you a ✓︎, which is what you deserve.
\end{document}

答案2

事实证明,这ucharclasses并不能完全涵盖这种情况。显然(据我所知),切换出 Dingbat 相当于结束一个“单词”,这需要作为特殊情况处理。解决方法是添加

\XeTeXinterchartoks \DingbatsClass 0 = {\rmfamily [exiting dingbats]}

产生预期的结果:

固定的!

相关内容