更改了 XeLatex/mathspec 中对 \fam\z@ 命令(来自 dchem)的响应

更改了 XeLatex/mathspec 中对 \fam\z@ 命令(来自 dchem)的响应

我是 Donald Arsenau 软件包的忠实用户dchem,该软件包已私下发布很长时间,但他从未觉得它已经足够成熟到可以公开发布(或者,如果这不再是事实,那么公开发布显然在他的优先级列表中还不够高。)

我现在正尝试切换到xelatex/mathspec。不幸的是,我发现此更改破坏了\chdchem 包的主要命令。我私下写信给 D. Arsenau,并在 ctt 上询问,但我也想尝试在这里寻求建议。

我试图将问题降至最低。因此,我提取了一行 dchem.sty,并将其重命名为gchem.sty

\newcommand\ch{\fam\z@\everymath{\fam\z@}}
% like \rm but don't have to repeat 

此命令通常用于$\ch H_2O$生成罗马mathrm字体(更准确地说)的化学公式。

这行属于 dchem.sty 中的一些复杂条件,试图确定有关当前乳胶环境及其的一些信息\everymath,并且根据条件分支的不同,实现方式略有不同,但我相信这一行是所有版本命令的精髓\ch

现在,我使用 Fourier 包编写一个简单的测试文件:

\documentclass{article}
\usepackage{fourier}
\usepackage{gchem}
\begin{document}
$\rm CH_2O$, $\ch CH_2O$
\end{document}

当我使用 pdflatex 处理此包时,用 生成的公式\rm和用 生成的公式\ch均按预期出现在 Utopia 中。

然后我修改测试文件以使用xelatex/mathspec

\documentclass{article}
\usepackage{mathspec}
\setmainfont{Minion Pro}
\setmathsfont(Digits,Latin,Greek){Minion Pro}
\setmathrm{Minion Pro}
\usepackage{gchem}
\begin{document}
$\rm CH_2O$, $\ch CH_2O$
\end{document}

xelatex当我用(这是 XeTeX,版本 3.1415926-2.3-0.9997.5(MiKTeX 2.9))处理此文件时,\rm公式按预期在 Minion Pro 中出现,但\ch版本在 Computer Modern 中出现,除了下标 2 是 Minion Pro。

我有日志文件,包括启用了跟踪的文件,这些文件显示了\rm和的行为之间的明显差异\ch,如果需要,我可以发布或转发它们。

但我认为这些例子已经说明了要点:似乎\fam\z@dchem 使用的短命令确实会切换到\mathrmin pdflatex,但在 中却不会xelatex。这是预期的吗?如果不是,问题出在哪里?如果是,应该如何\ch修改命令以兼容xetex

答案1

mathspec不会改变基本数学组 0,但会分配新的数学字母或数学符号字体​​。应该与直立字符相对应的是用于数字的字体,因此

\makeatletter
\newcommand\ch{\fam\csname sym\eu@DigitsArabic@symfont\endcsname
  \everymath{\fam\csname sym\eu@DigitsArabic@symfont\endcsname }}
\makeatother

可能就是您所需要的。

让我们看看会发生什么。在某个时刻,mathspec声明

\DeclareSymbolFont{Digits:m:n}{EU1}{\eu@Digitsmathsfont}{m}{n}

并被\eu@Digitsmathsfont翻译成正确的家族名称。这定义了一个新的数学组(在 TeXbook 中称为家族),LaTeX 通过将字符串添加到 来访问它symDigits:m:n但在我看来,使用 更安全,\eu@DigitsArabic@symfont无论在什么情况下,它都是正确的字符串,与包加载时给出的选项无关。

所以我们要做的是

\fam\csname sym\eu@DigitsArabic@symfont\endcsname

由于\fam期望后面有一个数字,它将扩展\csname...\endcsname;这导致扩展\eu@DigitsArabic@symfont(在您的情况下为Digits:m:n)并形成令牌

\symDigits:m:n

这相当于分配给\DeclareSymbolFont所需数学组的数字。

相关内容