通常情况下,我基本上可以接受 BibTeX 对引用键的选择(我的意思是它在最终文档中显示的短符号,如 [2] 或 [Hil05],而不是在 tex 文件中输入的键),但偶尔会有一篇论文迫切需要特定的键(例如 Freyd、Hoste、Lickorish、Millet、Ocneano 和 Yetter 的论文,其中明确定义了 HOMFLY 多项式,应该使用键 [HOMFLY],而不是 [FHL+95]),或者 BibTeX 选择了一个特别糟糕的键。
在这些情况下,是否有一个字段可以插入到 bibtex 条目中以覆盖密钥选择,或者除了编辑 .bbl 文件之外还可以做些什么?
答案1
使用biblatex
,您可以添加shorthand
字段:
\documentclass{article}
\usepackage[style=alphabetic]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
shorthand = {Author},
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography
\end{document}
答案2
如果你使用natbib
包中,你可以为某个源声明一个“别名”或者替代引用:
例如,以下.bib
条目:
@techreport{caltrans2002,
Author = {{California Department of Transportation}},
Title = {{Humboldt Bay Bridges Seismic Substructure Retrofit Environmental Assessment/Finding of No Significant Impact (EA/FONSI)}},
Year = {2002}}
\citep{caltrans2002}
在文档中使用时会产生以下输出:
引用占了大部分行可能会很麻烦 - 尤其是当全名必须出现在参考书目中时,但在文本中引用时应该使用一个很好的速记方法。通过\usepackage{natbib}
在序言中包含,您可以访问引用别名:
\defcitealias{caltrans2002}{\scshape CalTrans, 2002}
然后使用\citepalias{caltrans2002}
而不是\citep{caltrans2002}
产生以下输出:
在这两种情况下,参考书目中的相关条目如下所示:
我用来创建此示例的 LaTeX 和 BibTeX 源可以从以下位置获取GitHub。
答案3
Stack Overflow 上实际上有一个非常好的答案:有没有办法覆盖特定条目的 bibtex 样式文件?。
事实上,BibTeX 样式文件 (.bst) 所使用的编程语言名为 BAFLL,这可能提醒您这种问题很难处理。
答案4
如果只需要更改一两个标签,并希望坚持bibtex
并避免编辑文件bst
,那么这是一个非常棘手的解决方案。
唯一的变化是在.bib
文件中,我们在其中添加了两个宏。
@preamble{"\newcommand\HOlabel{}"}
@preamble{"\newcommand\HO[2]{HOMFLY}"}
@article{HOMFLY,
author = {\HOlabel{P.~Freyd, D.~Yetter, J.~Hoste, W.~B.~R.~Lickorish, K.~Millett, and A.~Ocneanu}},
title = {{A new polynomial invariant of knots and links}},
journal = {Bull. Amer. Math. Soc. (N.S.)},
volume = {12},
Year = {1985}
}
生成的文件中的条目bbl
将如下所示
\bibitem[\HO85]{HOMFLY}
\HOlabel{P.~Freyd, D.~Yetter, J.~Hoste, W.~B.~R.~Lickorish, K.~Millett, and A.~Ocneanu}.
\newblock {A new polynomial invariant of knots and links}.
\newblock {\em Bull. Amer. Math. Soc. (N.S.)}, 12, 1985.
第一个宏会误bibtex
以为这\HO
是作者姓名的前三个字母,因此标签变为\HO85
。然后第二个宏会吃掉这两个数字并输出所需的标签。
此外,此条目将按 排序HO
(即,它将出现在字母下,H
而不是F
)