为什么 mhchem 将宏文本变为斜体?

为什么 mhchem 将宏文本变为斜体?

我使用该软件包mhchem来排版化学公式和方程式。如果我直接将聚合状态插入 mhchem \ce 命令,它会显示为直立。如果我通过宏插入它,它会变成斜体。我对两者都没有任何美学上的反对意见,但为什么会出现这种情况?

我能想到的唯一导致这种情况的原因是宏被自动置于数学模式,但我不明白为什么会发生这种情况,因为它newcommand通常不会自动将文本设置为数学模式。否则,它一定是解析行为的一部分。

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage[version=4]{mhchem}

% States of aggregation
\newcommand{\liq}{(l)}
\newcommand{\aq}{(aq)}

\begin{document}

\noindent
\ce{H2O(l) <=> H+(aq) + OH^-(aq)}\\
\ce{H2O\liq{} <=> H+\aq{} + OH^-\aq{}}

\end{document}

答案1

诚实回答:答案很简单。因为我,包的作者,在编写宏处理时,并没有考虑任何合理的用例。

解释:因为 mhchem 语法与普通 LaTeX 有很大不同,所以我必须对其进行解析任何内部扩展。所以我必须尽早处理宏并决定如何处理它们。我考虑了一些“学术”用例,插入一些特殊符号。然而,我从来没有想过有人会想用宏插入文本。因此,宏扩展不知何故最终进入了数学模式。

近期变动:在过渡到版本 4 的过程中,我意识到了这种不一致(= 您的错误报告),并在扩展之前将所有宏置于正确的模式,即 的文本模式\ce{...}和 的数学模式$\ce{...}$。所以现在更加一致了。但我仍然不知道有人真的使用文本宏。

未来变化:现在,我学会了一个新的用例(使用宏来插入\ce语法——我还发现这个问题),我将尝试创建一些魔法,可以区分语法中包含替换的宏\ce和执行不同操作的宏,例如插入特殊符号。

笔记:如果您是那种愿意输入 6 个字符\liq{}来获得 3 个字符(l)输出的人,那么您可能会对该软件包的功能和理念更加满意chemmacros

答案2

它本身似乎mhchem使用了数学环境,而且宏的解析方式与普通文本的解析方式不同。

对此的测试是在宏中使用某种数学专用命令(如\mathcal{X}),它不会产生错误。

一个笨拙的修复方法(如果需要的话)是仅使用\text{}宏内的命令:

\newcommand{\liq}{\text{(l)}}
\newcommand{\aq}{\text{(aq)}}

相关内容