类似 amsalpha 的 bibtex 风格,带有手动标签

类似 amsalpha 的 bibtex 风格,带有手动标签

我想amsalpha使用 BibTeX 进行样式引用,但我希望手动控制键/标签(例如[ABC09])。有这个选项吗?

答案1

BibTeX 条目的可选字段之一是key,用于按字母顺序排列、交叉引用和在信息不可用时用作标签authoreditor因此,可以使用该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$
}

除了自定义标签之外,这还将产生参考书目中标签的正确排序。但是我必须承认,使用此解决方案时,用户有责任避免出现重复的键。

相关内容