为什么 AMSRefs 包中的命令 \MRhref 需要两个参数?

为什么 AMSRefs 包中的命令 \MRhref 需要两个参数?

如果这是一个幼稚的问题,请提前致歉。我试图理解命令\MRAMSRefs包。查看 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 类的某些史前版本使用了该命令的两个参数版本,因此保留了该参数但不使用第二个参数(并且在您显示的调用中任意传递了两次相同的参数)。

相关内容