使用 unicode-math 在 mhchem 对齐方程式中难以获得数学(斜体)样式

使用 unicode-math 在 mhchem 对齐方程式中难以获得数学(斜体)样式

在我看来这看起来像是一个unicode-math错误,但也许这里的专家可以证实这一点。

我目前正在使用 Libertinus 数学字体系列和 luatex 撰写我的博士论文。对于化学方程式,我使用软件包mhchem

问题是,在align环境中,我无法获得数学模式中的任何字符,即斜体(即使在用 $ ... $ 包围所需字符后明确地哄骗它)。这是一个最小的例子。

%! TEX program = lualatex
\documentclass[varwidth=true, border=10pt, convert={size=640x}]{standalone}
\usepackage[version=4,arrows=pgf]{mhchem}
\usepackage{unicode-math}
\setmathfont{Libertinus Math} % doesn't matter. All unicode math font behaves the same way
%\setmathfont{texgyrepagella-math.otf} % doesn't matter. All unicode math font behaves the same way

\begin{document}

\begin{center}
\ce{A_x <=> B + y C} \\
\end{center}

\begin{align}
    \ce{A_x &<=> B + y C} \\
    \ce{X + Y &-> Z}
\end{align}

\begin{align}
    \ce{A_$x$ &<=> B + $y$ C} \\
    \ce{X + Y &-> Z}
\end{align}

\end{document}

在第一个方程中,我得到了正确的行为,即xy都正确斜体化。但在接下来的两个方程中,我无法得到这种期望的行为。特别是在第三个方程中,即使在用 $..$ 包围x和之后y,它仍然将它们排版为直立,如下所示

错误排版

如果我注释掉与使用 unicode 数学相关的行,如下所示

%! TEX program = lualatex
\documentclass[varwidth=true, border=10pt, convert={size=640x}]{standalone}
\usepackage[version=4,arrows=pgf]{mhchem}
% \usepackage{unicode-math}
% \setmathfont{Libertinus Math}  % doesn't matter. All unicode fonts have this issue
% \setmathfont{texgyrepagella-math.otf} % doesn't matter. All unicode fonts have this issue

并保留其余的源代码,luatex 运行为我提供了所有 3 种情况的正确输出,如下所示

正确排版,不放过任何空隙

和都以斜体正确排版。我能确认这是一个错误吗xyunicode-math

答案1

mhchem v4.08(2018-06-22)已修复此问题。

答案2

虽然它没有回答为什么这个问题会出现组合的原始问题unicode-mathmhchem但我在这里使用替代chemformula包的答案应该为面临这个(或类似)问题的人提供可行的解决方法。

%! TEX-program = lualatex
\documentclass[varwidth=true, border=10pt, convert={size=640x}]{standalone}
% \usepackage[version=4,arrows=pgf]{mhchem}
\usepackage{chemformula}
\usepackage{unicode-math}
\setmainfont[Numbers={Proportional},Ligatures={TeX, Common%, Historic, Contextual, Rare, Discretionary
}]{Libertinus Serif}
\setmonofont[Scale=0.8]{Libertinus Mono}
\setsansfont{Libertinus Sans}

\begin{document}

\begin{center}
    \ch{A_{$x$} <=> B + $y$ C} \\
\end{center}

\begin{align}
    \ch{A_{$x$} &<=> B + $y$ C} \\
    \ch{X + Y &-> Z}
\end{align}

\end{document}

请注意,mhchem已被注释掉,我们改用。还请注意,使用时下chemformula标数学模式需要额外的分组。xchemformula

无论如何,我们获得了所需的输出,如下所示:

输出_使用_化学公式

也许一个合理的替代方案是使用chemformula直到这个问题被解决。(不清楚是谁:unicode-math团队还是mhchem开发人员?)。

答案3

问题是,在数学中,mhchem 将所有内容都用 包围起来\mathrm。这会改变 \Umathcode。您可以尝试添加钩子 \symit。但如果参数不包含单个字符,则它不起作用(在这种情况下,mhchem 会主动将参数设置为罗马字符,即使没有 unicode-math)。

\documentclass{article}
\usepackage[version=4,arrows=pgf]{mhchem}
\usepackage{unicode-math}

\begin{document}

$\ce{A_{\symit{x}}}$

\makeatletter
\def\mhchem@hook@beforeItalicMath{\symit}

$ \ce{A_x} \ce{A_{xxxx}} $

 %not a solution but only to demonstrate that removing the \mathrm avoids the problem:
\def\mhchem@option@mathFont{}%{\mathrm}

${\ce{A_x}}$


\end{document}

在此处输入图片描述

相关内容