坏邻居:amscd 和 mtpro2

坏邻居:amscd 和 mtpro2

以下代码显示了在启用该选项的情况下如何amscd以及mtpro2不能很好地协同运行subscriptcorrection

\documentclass{article}

\usepackage[subscriptcorrection]{mtpro2}
\usepackage{amscd}

\begin{document}

\[
 \begin{CD}
     H_{R}(U) @>d >> B
 \end{CD}
\]

\end{document}

这会因错误而停止

! Package amscd Error: Invalid use of @.

这可能是更正

 \disablesubscriptcorrection

但结果并不理想。

我认为问题与 _ 的 catcode 值有关,例如这里但尽管如此,冲突仍然存在。问题是:

这到底是谁的错?amscd或者mtpro2?或者甚至 LaTeX 现在允许包之间的交互。

答案1

问题显然出在下标中:mtpro2使_数学活跃并且它的扩展引发了对临时宏的重新定义\next,而该宏CD预计不会改变。

这是谁的错?恐怕这个问题没有答案。可能最应该受到谴责的是CD,其中的\next用法令人生疑,认为其含义在很长一段时间内不会改变。然而,改变它已经太晚了。

一个简单的解决方法是用括号保护条目。

\begin{CD}
  {H_{R}(U)} @>d >> B
\end{CD}

还可以使用与关键宏mtpro2不同的命令名来解决该问题。\next

\documentclass{article}
\usepackage{amsmath}
\usepackage{amscd}
\usepackage[subscriptcorrection,lite]{mtpro2}

\makeatletter
\begingroup\lccode`~=`_
\lowercase{\endgroup\def~}{\futurelet\next@@@\s@@b}
\def\s@@b{\ifcat\relax\noexpand\next@@@\expandafter\sb\else
 \expandafter\s@@b@\fi}
\makeatother

\begin{document}

\[
 \begin{CD}
     H_{A}(U) @>d >> B
 \end{CD}
\]
\[
\disablesubscriptcorrection
 \begin{CD}
     H_{A}(U) @>d >> B
 \end{CD}
\]

\end{document}

我添加了版本以\disablesubscriptcorrection表明校正确实按照第一张图中的预期完成。

在此处输入图片描述


有更好的图表包,不会遭受此问题。

仅举例来说,这里有一个无法用 绘制的图表CD;它带有下标校正以及与 匹配的箭头mtpro2

\documentclass{article}
\usepackage{amsmath}
\usepackage[subscriptcorrection,lite]{mtpro2}
\usepackage{tikz-cd}

\tikzcdset{arrow style=math font}

\begin{document}

\[
\begin{tikzcd}
H_{A}(U) \arrow[r,"d"] \arrow[dr,"\varphi"] &
B \arrow[d]
\\
& C
\end{tikzcd}
\]

\end{document}

在此处输入图片描述

答案2

相反,我使用了\xymatrixhttp://ctan.mirror.garr.it/mirrors/CTAN/macros/generic/diagrams/xypic/doc/xyguide.pdf)绘制最佳用户@egreg 的相同图形。

您可以观察到,它与mtpro2v配合得很好lite,获得了相同的结果。由于标签没有放在每个箭头的中心,我设置了一个任意间距(例如\ar[r]^(.65){d}特别是(.65)),经过一些编译后,我得到了我想要的数字。

在此处输入图片描述

\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage[subscriptcorrection,lite]{mtpro2}
\usepackage[all]{xy}


\begin{document}
\xymatrix @R=2pc@C=2pc{ H_{A}(U) \ar[r]^(.65){d} \ar[dr]^(.55){\varphi}&  B \ar[d]\\
 & C
}
\end{document}

相关内容