使用 XeLaTeX 在 kpfonts 中使用 `\eqdef`

使用 XeLaTeX 在 kpfonts 中使用 `\eqdef`

问题

如何让\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]

相关内容