因为我不能依赖特定的包(drm),所以我需要尽可能地模拟它,这在决定加载之前工作正常unicode-math
。请考虑这个被剪切的 MWE,因此它只显示错误:
\documentclass{article}
%\usepackage{fontspec}
\usepackage{unicode-math}
\newcommand*{\drmsym}[1]%
{\fontspec{drmsym10.otf}%
[SizeFeatures=%
{{Size={-7},Font=drmsym7.otf},
{Size={8},Font=drmsym8.otf},
{Size={9},Font=drmsym9.otf},
{Size={10-12},Font=drmsym10.otf},
{Size={12-14},Font=drmsym12.otf},
{Size={14-17},Font=drmsym14.otf},
{Size={17-24},Font=drmsym17.otf},
{Size={24-},Font=drmsym24.otf}}]%
{#1}}
\providecommand*{\textdied}%
{\drmsym{\char'144}}
\begin{document}
\textdied
\end{document}
当您使用 XeLaTeX 编译此文档时,您会收到错误消息Command \textdied unavailable in encoding EU1
。当我决定不加载unicode-math
而只加载fontspec
代码时,代码按预期工作,这似乎表明前一个包在某处更改了字体编码。有人知道如何在保留包的同时解决这个问题unicode-math
吗?
答案1
您不应使用 either \fontspec
nor \providecommand
:
\fontspec
不建议使用,因为效率很低;\textdied
unicode-math
在加载时已经有了 TS1 命令的定义,因此 \providecommand 不执行任何操作
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}
\newfontface{\drmfont}{drmsym10}[
Extension=.otf,
SizeFeatures={
{Size={-7.5},Font=drmsym7},
{Size={7.5-8.5},Font=drmsym8},
{Size={8.5-9.5},Font=drmsym9},
{Size={9.5-11},Font=drmsym10},
{Size={11-13},Font=drmsym12},
{Size={13-15},Font=drmsym14},
{Size={15-21},Font=drmsym17},
{Size={21-},Font=drmsym24}
}
]
\DeclareTextFontCommand{\drmsym}{\normalfont\drmfont}
\UndeclareTextCommand{\textdied}{TS1}
\DeclareRobustCommand{\textdied}{\drmsym{\symbol{'144}}}
\begin{document}
\textdied
\end{document}
我已经改变了尺寸选择,但这不是很重要。
使用\UndeclareTextCommand
是为了避免原始定义生效;\normalfont
确保形状和重量参数被重置,因此在斜体或粗体上下文中符号无论如何都会打印。