我想amsalpha
使用 BibTeX 进行样式引用,但我希望手动控制键/标签(例如[ABC09]
)。有这个选项吗?
答案1
BibTeX 条目的可选字段之一是key
,用于按字母顺序排列、交叉引用和在信息不可用时用作标签author
。editor
因此,可以使用该key
字段作为想要手动控制标签的记录的值。
为此,必须修改amsalpha.bst
,特别是FUNCTION {output.bibitem}
。(请创建 的副本amsalpha.bst
并将名称更改为myamsalpha.bst
)可以按如下方式修改此功能
FUNCTION {output.bibitem}
{ newline$
"\bibitem[" write$
key empty$
{label write$}
{key write$}
if$
"]{" write$
cite$ write$
"}" write$
newline$
""
before.all 'output.state :=
}
然后,您可以按如下方式使用它:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{first,
author = "Last, First",
title = "First Title",
journal = "Journal Name",
year = 2012
}
@Article{second,
key = {ABC12},
author = "Last, First",
title = "Second Title",
journal = "Journal Name",
year = 2011
}
@Article{third,
author = "More, First",
title = "Third Title",
journal = "Journal Name",
year = 2011
}
\end{filecontents}
\begin{document}
Testing citations
\cite{first}
\cite{second}
\cite{third}
\bibliographystyle{amsalpha}
\bibliography{\jobname}
\end{document}
答案2
虽然 Guido 的解决方案对我很有用,但它导致参考书目排序不正确。为了获得一致的排序,最好只修改calc.label
自定义 bibtex 样式中的函数(例如myamsalpha.bst
),如下所示。
FUNCTION {calc.label}
{ key empty$
{ type$ "book" =
type$ "inbook" =
or
'author.editor.key.label
{ type$ "proceedings" =
'editor.key.organization.label
{ type$ "manual" =
'author.key.organization.label
'author.key.label
if$
}
if$
}
if$
duplicate$
year field.or.null purify$ #-1 #2 substring$
*
'label :=
year field.or.null purify$ #-1 #4 substring$
*
sortify 'sort.label :=
}
{ key 'label :=
key sortify 'sort.label :=
}
if$
}
除了自定义标签之外,这还将产生参考书目中标签的正确排序。但是我必须承认,使用此解决方案时,用户有责任避免出现重复的键。