![使用带有 ucharclasses 的 Dingbats 时出现意外行为](https://linux22.com/image/414017/%E4%BD%BF%E7%94%A8%E5%B8%A6%E6%9C%89%20ucharclasses%20%E7%9A%84%20Dingbats%20%E6%97%B6%E5%87%BA%E7%8E%B0%E6%84%8F%E5%A4%96%E8%A1%8C%E4%B8%BA.png)
我尝试使用 来切换 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}