作者字段具有相同值的 BibTeX 条目过多

作者字段具有相同值的 BibTeX 条目过多

我收到了来自我所在大学的一份定制\bibliographstyle。我的条目数量超过了 26 个,其中没有作者和年份。对于作者,我输入了“oV”。

通常情况下,我会将文件中的 Key .bbl(由 bibtex 从我的 .bib 文件中生成)\bibitem[o.Va]改为\bibitem[o.Vz] 这里的问题。在“z”之后,它会生成一个“{”,这显然不起作用。因此,在我的论文中,应该将 [o.Va]-[o.Vz] 写为引用。但理论上,Z 之后是 [oV{],这无法编译!

我假设我需要修改我的.bst文件(如果我没记错的话,这是 bibliographstyle)。

我怎样才能使我的参考书目采用除 oV 之外的其他 3 个字母,或者如果我将作者留空,它就会采用我可以选择的自定义内容?

敬请期待http://pastebin.com/1Qdy83eJ第 352 行。这不起作用,并且与 jabref 无关!

答案1

您说得对,BibTeX 样式 ( alphadin.bst) 会为看起来相同的条目添加额外的标签。此标签只是转换为字符的等效条目的计数器,之后以 ASCII 格式z显示{

我们可以通过改变此转换来获得形式的额外标签,从而解决这个问题a..z, aa..az, ba..bz, ...

为此,请复制alphadin.bst,例如alphadin2.bst,并将其保存在 BibTeX 可以找到的地方。

在编辑器中打开新文件,找到函数forward.pass(第 2144 行以下)。添加以下整数除法函数该功能:

INTEGERS { a b aneg bneg }
%% takes two arguments a and b, and returns q = a/b, and the remainder a-q*b
FUNCTION {div} {
  'a :=
  'b :=
  a #0 <
    { #1 'aneg :=
      #0 a - 'a := }
    { #0 'aneg := }
  if$
  b #0 <
    { #1 'bneg :=
      #0 b - 'b :=
    }
    { #0 'bneg := }
  if$
  b #0 =
    {
      "Division by zero requested, will return 0 0" * warning$
      #0 #0
    }
    {
      #0                 %% initialize quotient on stack
      { a b > a b = or }
      { a b - 'a :=      %% decrement a by b
        #1 +             %% increment value on stack
      }
      while$
      aneg
        {
          a #0 >
            { b a - 'a :=
               #-1 swap$ -
            }
            { #0 swap$ - }
          if$
        }
        {}
      if$
      bneg
        { #0 swap$ - }
        {}
      if$
      a                  %% push remainder
    }
  if$
}

然后进行forward.pass如下修改:

FUNCTION {forward.pass}
{ last.sort.label sort.label =
    { last.extra.num #1 + 'last.extra.num :=
      %% last.extra.num int.to.chr$ 'extra.label :=   %% original; the next 10 lines are new
      last.extra.num #122 >
        {
          last.extra.num #97 - #26 swap$ div
          #97 + int.to.chr$                   %% remainder; 0..25 -> a..z
          swap$ #96 + int.to.chr$             %% quotient;  1..26 -> a..z
          swap$ *
          'extra.label :=
        }
        { last.extra.num int.to.chr$ 'extra.label := }
      if$
    }
    { "a" chr.to.int$ 'last.extra.num :=
      "" 'extra.label :=
      sort.label 'last.sort.label :=
    }
  if$
}

现在您可以\bibliographystyle{alphadin2}在文档中使用。

答案2

您的问题有点误导。

我想您不必更改bst文件或其他内容。不清楚您是自己编写密钥还是使用程序为您编写密钥。

在评论中,您告诉我您正在使用 Jabref。Jabref 手册中有一章 BibTeX Keys(在我的德语 2.4 Beta 版本中是第 3.4 章)。它描述了 Jabref 为您创建 BibTex-Keys 以及您可以在哪里控制 Jabref 的行为。它还说,在第 4.3 章中您可以了解如何更改密钥的创建。

我非常确定您可以建议 Jabref 使用另一种算法来构建密钥。因为我使用 citavi,所以我无法告诉您如何操作。但我确信查看文档会有所帮助。

德语文献说:

使用 BibTEX-Keys 时,JABREF 自动生成,并且当使用这些键时,您可以在 BibTEX-Keys 4.3 自动创建对话框中体验这些键。

答案3

.bib您用来引用参考书目中某个项目的键(使用 bibtex)在包含有关参考文献的所有数据的文件中定义。

所以如果你有一个MyBib.bib包含该条目的书目

@article{ref1, author = "o.V."}

你可以在文中这样引用它

\documentclass{article}
\begin{document}
 I am now citing the reference 1 \cite{ref1}.
\end{document}

和其他字段的值author无关紧要。(我不知道如果您不自己提供密钥,BiBTeX 是否会自动分配密钥,但如果您像示例中那样提供密钥,那么这才是最重要的)。

.bbl文件是 BiBTeX 创建的辅助文件,其中的参考文献格式应正确无误,因此当第二次运行 LaTeX(在 BiBTeX 之后)时,它可以插入这些参考文献。您不必修改它。

相关内容