以下代码显示了在启用该选项的情况下如何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
相反,我使用了\xymatrix
(http://ctan.mirror.garr.it/mirrors/CTAN/macros/generic/diagrams/xypic/doc/xyguide.pdf)绘制最佳用户@egreg 的相同图形。
您可以观察到,它与mtpro2
v配合得很好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}