amsrefs 中的别名/同义词

amsrefs 中的别名/同义词

是否可以为 的键设置别名/同义词amsrefs?请考虑以下示例文档:

\documentclass{amsart}
\usepackage{amsrefs}
\begin{document}
See \cite{short}.
It is the same reference as
%\cite{a-longer-label-for-the-texbook}
    %% Uncomment the previous line.
\cite{short}. %% Comment out this line

\begin{bibdiv}
\begin{biblist}
\bib{short}{book}{
        author={Knuth, Donald},
        title={The TeXbook}
}

%\synonym{a-longer-label-for-the-texbook}{short}
    %% Uncomment the previous line.
\end{biblist}
\end{bibdiv}
\end{document}

我想取消注释指示的两行(并注释掉指示的行)并具有相同的行为。(当然,我可以复制较长键下参考书目条目的内容short;但是,如果我在源中使用这两个标签,那么生成的参考书目中就会出现两个相同的条目。)

如果我们谈论的是\labels 而不是参考书目条目,那么可以 — — 虽然我知道这不是最佳实践 — — 只需将两个\labels 放在相关范围内,并交替引用它们;这就是我所寻求的功能。文档提及“别名”这个词(但不是“同义词”这个词),但在这种情况下不是。

这似乎是一个非常奇怪的愿望。人们可能想这样做有几个原因;我给出两个我自己想到的原因,尽管我承认它们不一定令人信服。一个是允许与不同意内部参考书目键格式的合著者轻松编写文档,同时让每个人都满意。当然,这可能会使 TeX 代码令人困惑,所以这里还有另一个原因。

出于第二个原因,我之前的是合著者:我希望能够使用一个amsrefs文件来保存我的所有论文,同时也能够适应我随着时间的推移在选择密钥方面所做的更改,而不必更改旧论文的来源。在这里我可以只需复制参考书目条目,只要我在每个文档中引用它的方式一致即可;但这样很容易混淆几乎- 重复条目(例如,一本书的第一版和第二版)实际上-重复条目。\synonym类型会使故意重复变得明确。

答案1

的内部引用short存储在 中\b@short。我们可以利用.aux文件 使新密钥与 相同\b@short。使用\csname\endcsname,因为密钥可能不只包含字母。

\documentclass{amsart}
\usepackage{amsrefs}

\makeatletter
\newcommand{\makesynonym}[2]{%
  \AtEndDocument{\write\@auxout{\noexpand\@makesynonym{#1}{#2}}}%
}
\newcommand{\@makesynonym}[2]{%
  \global\expandafter\let\csname b@#1\expandafter\endcsname\csname b@#2\endcsname
}
\makeatother

\makesynonym{a-longer-label-for-the-texbook}{short}


\begin{document}
See \cite{short}.
It is the same reference as
\cite{a-longer-label-for-the-texbook}

\begin{bibdiv}
\begin{biblist}
\bib{short}{book}{
        author={Knuth, Donald},
        title={The TeXbook}
}
\end{biblist}
\end{bibdiv}
\end{document}

在此处输入图片描述

相关内容