我们的同事“结构爱好者”提醒我注意这一点,但由于它影响到我的尺度因子包(开始使用数学风格包来检测当前的数学风格,从 1.4 版开始)现在这也是我的问题。
我甚至认为我知道为什么会发生这种情况,并且我有一个解决方法,但我希望有一个更令人满意的解决方案。这是 MWE:
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathstyle}
\newcommand*{\testcmd}{\(M_{\texttt{k}}\)}
\begin{document}
\(M_{\texttt{k}}\) \par
\testcmd
\end{document}
结果如下。
在其中,你会看到两个不同大小的下标(分别称为小和大),这在代码中似乎并不明显。经过调查,我发现:
1) 未加载任何包,两个下标都很大
2)仅加载 amsmath,两个下标都很小
3)仅加载 mathstyle,两个下标都很大
4)两个包都加载了(就像我的 MWE 一样),第一个包很小,第二个包很大
5) 在两个包都加载的情况下,如果将 的定义\testcmd
移到 之后\begin{document}
,则两个下标都会很小(这就是我所说的解决方法)。
6)如果我加载数学风格前数学,代码中断,表示\dfrac
已经定义。
“啊哈,”我对自己说。似乎其中一个软件包正在使用我见过的“功能”,即在之前加载某些命令\begin{document}
。但这似乎对这两个软件包的用户(或数学和尺度因子);即禁止在文档序言中定义数学命令的快捷方式。
因此,我的问题是:我是否正确理解了问题的本质?是否有解决方案可以让用户在使用包组合时仍可以在序言中定义数学快捷方式?
答案1
mathstyle 确实
\AtBeginDocument{\catcode`\^=12\relax \catcode`\_=12\relax}%
如果您需要序言中的定义,您可以提前执行。
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathstyle}
\catcode`\^=12\relax \catcode`\_=12\relax
\newcommand*{\testcmd}{\(M_{\texttt{k}}\)}
\begin{document}
\(M_{\texttt{k}}\) \par
\testcmd
\end{document}