![为什么 AMSRefs 包中的命令 \MRhref 需要两个参数?](https://linux22.com/image/428863/%E4%B8%BA%E4%BB%80%E4%B9%88%20AMSRefs%20%E5%8C%85%E4%B8%AD%E7%9A%84%E5%91%BD%E4%BB%A4%20%5CMRhref%20%E9%9C%80%E8%A6%81%E4%B8%A4%E4%B8%AA%E5%8F%82%E6%95%B0%EF%BC%9F.png)
如果这是一个幼稚的问题,请提前致歉。我试图理解命令\MR
在AMSRefs包。查看 amsrefs.sty 样式文件,我发现相关部分似乎是第 2673-2689 行和第 2933-2951 行,如下所示:
\def\strip@MRprefix#1#2#3#4\@nil{%
\def\@tempa{#1#2#3#4}%
\if#1M%
\if#2R%
\def\@tempa{#3#4}%
\fi
\fi
}
\def\MR#1{%
\relax\ifhmode\unskip\spacefactor3000 \space\fi
\begingroup
\strip@MRprefix#1\@nil
\edef\@tempa{MR\@nx\MRhref{\@tempa}{\@tempa}}%
\@xp\endgroup
\@tempa
}
\providecommand{\MRhref}[2]{#1}
\IfOption{msc-links}{%
\@ifundefined{href}{}{%
\def\parse@MR#1 (#2)#3\@nil{%
\def\MR@url{http://www.ams.org/mathscinet-getitem?mr=#1}%
\def\@tempd{#1}%
\def\@tempe{#2}%
}%
\def\MRhref#1#2{%
\begingroup
\parse@MR#1 ()\@empty\@nil%
\href{\MR@url}{\@tempd\vphantom{()}}%
\ifx\@tempe\@empty
\else
\ \href{\MR@url}{(\@tempe)}%
\fi
\endgroup
}%
}{}
}{}
这文献来源第 111 页关于后半部分说:
除非您使用 pdfTeX,否则链接不能跨行拆分,这会导致长格式 MR 编号(例如“MR2149145 (2006d:01012)”)出现问题。为了缓解此问题,我们手动将此类编号拆分为两个单独的链接。
好吧,我思考即使我不理解所有宏(如\@nx
等)的复杂性,我也明白这里发生了什么。但让我困惑的是 的定义\MRhref
。我注意到我们有\providecommand{\MRhref}[2]{#1}
。那么,\MRhref
接受两个输入并只看到第一个?那么为什么要接受第二个输入呢?此外,在 的定义中,\MR
它看起来\MRhref
两次都接受相同的输入。此外,在\MRhref
部分下的定义中\IfOption{msc-links}
,我没有看到第二个参数在哪里使用。
有人可以向我解释一下这个命令的作用吗\MRhref
?
答案1
您链接到的文档说
对于某些 AMS 文档类别的旧版本,需要此补丁。
2659 \providecommand{\MRhref}[2]{#1}
这意味着 AMS 类的某些史前版本使用了该命令的两个参数版本,因此保留了该参数但不使用第二个参数(并且在您显示的调用中任意传递了两次相同的参数)。