问题
如何让\eqdef
符号在 xelatex 中起作用kpfonts
?
细节
kpfonts
做不是提供\eqdef
符号,即等号上方的小文本“def”。(≝ (U+225D)) 在 pdftex 中,我通过覆盖这三个字母来伪造它\overset{\mbox{\tiny def}}{=}
。到目前为止一切顺利。
但是如果我使用 xetex 编译同一个文件,它就不起作用了。(该kpfonts
包会自动检测 xetex 引擎并加载kpfonts-otf
。)
平均能量损失
\documentclass{article}
\usepackage{kpfonts}
\newcommand\eqdef{\overset{\mbox{\tiny def}}{=}}
\begin{document}
$\eqdef$
\end{document}
使用 进行构建xelatex
,输出显示:
Missing character: There is no ≝ (U+225D) in font [KpMath-Regular.otf]/OT:scrip
t=math;language=dflt;!
[1] (./testkp.aux) )
(\end occurred when \ifx on line 3 was incomplete)
似乎unicode-math
(由 加载kpfonts-otf
)正在默默地覆盖我提供的定义\eqdef
,但随后却无法在字体中真正找到unicode符号。
解决这个问题的正确方法是什么?
答案1
简单的解决办法:unicode-math
设置完命令后重新定义该命令。
\documentclass{article}
\usepackage{kpfonts}
\AtBeginDocument{%
\renewcommand \eqdef{\ensuremath{\mathrel{\overset{\mbox{\tiny def}}{=}}}}%
}
\begin{document}
$\eqdef$
\end{document}
这是否是解决问题的“正确方法”,实际上取决于您\eqdef
对 pdfLaTeX 的原始定义是否是解决问题的正确方法。如果您\eqdef
在重写之前检查定义,unicode-math
则不会设置任何花哨的东西。它只是分配(不存在的)字符,
> \eqdef=the character ≝.
一个问题可能是缩放。虽然≝
和=
可以缩放,\tiny def
但不会。因此,如果您需要不同大小的这个东西,重新定义是不够的。但是,在这种情况下,原始定义对于 pdfLaTeX 来说也是不够的。
如果你的问题是关于重新定义的\eqdef
,这种方法直接来自于unicode-math
自己的文档(第 23 页),
6.2 如何覆盖宏
unicode-math
用 定义宏\AtBeginDocument
,即延迟定义直到\begin{document}
满足。如果要覆盖 定义的宏unicode-math
,请\AtBeginDocument
在加载此包后在 中重新定义它。
此外,没有直接的方法可以防止unicode-math
为缺失字符定义命令。基本格式只是
\UnicodeMathSymbol{"0225D}{\eqdef }{\mathrel}{equals by definition}%
因此您需要重新定义\UnicodeMathSymbol
以进行检查。但是,首先,这不是预期的行为,其次,这将充满困难。
对于第一点,LaTeX 本身和软件包完全按照标准为所用字体中缺少的字符定义命令。这会导致日志中出现熟悉的警告。如果未定义命令,用户将收到有关未定义命令的错误。虽然这些错误严格来说准确无误,但它们的信息量不如有关特定缺失字符的警告那么多。
关于第二个问题,假设定义时的当前字体将是使用时的当前字体是有问题的。这可能会导致两种情况都很糟糕:缺少现有字符的命令,缺少现有字符的命令。unicode-math
将定义推迟到文档的开头,那时应该已经配置了数学字体,但用户可以决定稍后更改它们。
答案2
另一个解决方法是从另一种数学字体中借用缺失的字形,例如:
\documentclass[12pt]{article}
\usepackage{kpfonts-otf}
\setmathfont{Asana-Math.otf}[range={"2258-"225B,"225D-"225F}]
\begin{document}
\[A\eqdef B, A=B\]
\end{document}
kpfonts
建议的范围涵盖了(传统和 OpenType)中缺少的“类似方程式”字形。
另一个选择可能是 TeX-Gyre Paladio 字体(也类似于 Palatino),你会得到
环境:
\setmathfont{texgyrepagella-math.otf}[range={"2258-"225B,"225D-"225F}, Scale=0.8]