amsrefs
我在使用 with 选项时遇到包自动生成的引文标签问题shortalphabetic
。假设我有两个姓氏首字母相同的作者,比如Aaa
和Abc
:
\documentclass{article}
\usepackage[shortalphabetic]{amsrefs}
\begin{document}
\begin{biblist}
\bib{a}{article}{
author={Aaa}
}
\bib{b}{article}{
author={Abc}
}
\end{biblist}
\end{document}
这可以正确生成标签[A1]
和。但是,当作者有另一篇文章与合著者[A2]
时,就会出现问题:Aaa
Bbb
\documentclass{article}
\usepackage[shortalphabetic]{amsrefs}
\begin{document}
\begin{biblist}
\bib{a}{article}{
author={Aaa}
}
\bib{c}{article}{
author={Aaa},
author={Bbb}
}
\bib{b}{article}{
author={Abc}
}
\end{biblist}
\end{document}
生产的标签有[A]
、、[AB]
。[A]
这看起来像是一个错误。我做错了什么吗?如果是错误,有没有办法手动指定引用标签?
(根据 MiKTeX 包管理器,我使用的 amsrefs 包是在 2010-08-30 打包的,有更新的版本吗?)
答案1
我收到了开发人员的回复。标签分配的方式是经过设计的。(但是,文档完全不够用,我已要求升级它。)
替换引用标签是有可能。这是手册中的相关内容:
标签:当使用
alphabetic
或选项时, 通常会尝试自行生成标签。如有必要,您可以通过指定字段来覆盖自动生成的标签。shortalphabetic
amsrefs
label
以下是开发人员给出的理由:
[...] 如果作者坚持参考文献在参考书目中严格按照作者姓名的字母顺序排列,那么他或她应该使用与该顺序一致的引用样式。看到对“L1”、“LS”和“L2”的引用的作者有权期望 L2 出现在“LS”之前,无论作者姓名是什么,就像看到对 [1]、[2] 和 [3] 的引用的作者有权期望参考文献 [2] 出现在参考文献 [3] 之前一样。
话虽如此,我已经看到很多参考书目都忽略了(或没有意识到)这个原则。由于许多人不阅读文档,我不确定在手册中明确说明这一点是否有什么好处。但至少从到的amsrefs
交叉引用会很有用。shortauthor
label
更新:开发人员接受有关重复标签的警告概念作为合理请求,并将在稍后查看,但不能保证这样做的确切时间。
答案2
看起来像是一个错误,你应该报告它,但我们可以尝试 ping @barbrarabeeton
此版本通过附加检查修补了 amsrefs,请注意,它仅修补了用于该选项的代码路径shortalphabetic
。(我最初的回答试图包含一个更新的包文件,该文件将涵盖更多选项,但对于本网站来说太大了)
这不是一个完整的修复,但它使它比较两个标签而不仅仅是前一个标签是否存在冲突,所以它在这种情况下有效。
\documentclass{article}
\usepackage[shortalphabetic]{amsrefs}
\makeatletter
\let\pprevious@stem\@empty
\def\fooo#1#2\global\let\previous@stem\current@stem#3\zz{%
\def#1{#2%
\global\let\pprevious@stem\previous@stem
\global\let\previous@stem\current@stem
#3}}
\def\foo#1{\expandafter\fooo\expandafter#1#1\zz}
\foo\generate@alphalabel
\let\generate@label\generate@alphalabel
\def\calc@alpha@suffix{%
\@tempswafalse
\compare@stems\previous@stem\current@stem
\ifsame@stems
\ifx\previous@year\current@year
\@tempswatrue
\fi
\else
\compare@stems\pprevious@stem\current@stem
\ifsame@stems
\ifx\previous@year\current@year
\@tempswatrue
\fi
\fi
\fi
\if@tempswa
\global\advance\alpha@suffix\@ne
\edef\alpha@label@suffix{\@suffix@format\alpha@suffix}%
\ifnum\alpha@suffix=\tw@
\immediate\write\@auxout{%
\string\ModifyBibLabel{\prev@citekey}%
}%
\fi
\else
\let\alpha@label@suffix\@empty
\global\alpha@suffix\@ne
\@xp\ifx \csname b@\current@citekey @suffix\endcsname \relax
\else
\edef\alpha@label@suffix{\@suffix@format\alpha@suffix}%
\fi
\fi
}
\makeatother
\tracingmacros3
\begin{document}
\begin{biblist}
\bib{a}{article}{
author={Aaa}
}
\bib{c}{article}{
author={Aaa},
author={Bbb}
}
\bib{b}{article}{
author={Abc}
}
\end{biblist}
\end{document}