我使用该软件包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)}}