如何使用 babelbib 设置我的参考书目中作者和编辑的最大数量?

如何使用 babelbib 设置我的参考书目中作者和编辑的最大数量?

我目前使用babelbibalphadin样式来编写我的学士论文的参考书目。现在我必须处理一个有四位作者的资源,并且是@incollection一本有八位编辑(出版商)的书。

当我拥有超过三位作者/编辑的资源时,我的论文导师希望我仅提及前三位作者/编辑,并et al.在其后附加一个。我知道使用 可以做到这一点biblatex,但我使用的是babelbib。我还没有找到任何设置或解决方法来执行此操作,而且纪录片也没有任何帮助。有什么办法吗?我也检查了alphadin.bst执行此操作的样式,但也没有针对最大作者和编辑数量的变量。

如果不可能:我使用 Citavi 作为我的文献整理软件。有没有办法存档,只导出三个作者,然后用and othersLaTeX 替换et al.?我也没有找到这个选项。我更喜欢在 latex 中执行此操作。

编辑:这是我包含参考书目包的部分:

\usepackage[fixlanguage]{babelbib}
\selectbiblanguage{ngerman}
\addto\captionsngerman{\renewcommand{\refname}{Literatur- und Quellenverzeichnis}}
\bibliographystyle{alphadin} 

答案1

由于我确实必须使用 babelbib,而没有选择使用其他书目,并且 babelbib 本身也没有定义最大作者数量的选项,因此我决定看看如何修改文件alphadin.bst

我引入了两个新变量:

INTEGERS { et.al.char.used.names et.al.char.used.names.stop }

第一个计算给定来源的作者数量,第二个指示是否et al.已经写完。

必须编辑该函数format.names才能只有三个名称:

FUNCTION {format.names}
{ #0 'et.al.char.used.names :=
  #0 'et.al.char.used.names.stop := 
  's :=
  "" 'u  :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    {
       s nameptr "{ll}" format.name$ 't :=
       t capitalize 't :=
       s nameptr "{ jj}" format.name$ 'w :=
       s nameptr "{, ff}{ vv}{ jj}" format.name$ 'u :=
       u  text.length$  'lang :=
       #1 'zahl :=
       "" 'v :=
         {  zahl  lang  <  }
         {  u  zahl  #1  substring$  "~"  =
               {  v  ""  =
                     {  u  #1  zahl  #1  -  substring$  'v :=  }
                     'skip$
                  if$
                  v  u  zahl  #2  substring$ * "." *  w * 'v :=
                }
               'skip$
            if$
            zahl  #1  +  'zahl :=  }
      while$
      v  ""  =
         {  u  'v :=  }
         'skip$
      if$
      t  v  *  fkt  *  't :=
      nameptr #1 >
         {

         et.al.char.used.names #1 + 'et.al.char.used.names :=   

         namesleft #1 >
             { 

                et.al.char.used.names #2 >
                    { 
                        et.al.char.used.names.stop #1 =
                        {}
                        {
                            ua.etal *
                            #1 'et.al.char.used.names.stop :=
                        }
                        if$
                    }
                    { "; " * t * }
                if$
             }
           % { "; " * t * }
             { numnames #2 >
                  { "" * }
                  'skip$
               if$

               et.al.char.used.names.stop #1 =
                {}
                {
                   t "\textsc{others}" = t "\textsc{others} (Hrsg.)" =  or
                      { ua.etal * }
                      { 
                        et.al.char.used.names #2 >
                            { ua.etal * }
                            { "; " * t * }
                        if$
                      } 
                   if$
                }
                if$
               }
            if$  %% Ende der namesleft-Pruefung
          }
            't
           if$  %%  Ende der nameptr-Pruefung

      nameptr #1 + 'nameptr :=
      namesleft #1 -  'namesleft :=
    }
  while$  %%  Ende von { namesleft #0 > } ganz oben
  "" 'fkt :=  %% fkt wird zurueckgesetzt
  #0 'et.al.char.used.names :=  %%% MODIFIZIERT 
  #0 'et.al.char.used.names.stop :=  %%% MODIFIZIERT 
}

format.lab.names并且标记函数(例如[ABC12])在添加之前仅显示三个作者的姓名首字母,而不是 5 个+

FUNCTION {format.lab.names}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #3 >                     %% MODIFIZIERT war 4
        { #3 'namesleft := }
        { numnames 'namesleft := }
      if$
      #1 'nameptr :=
      ""
        { namesleft #0 > }
        { nameptr numnames =
            { s nameptr "{ff }{vv }{ll}{ jj}" format.name$ "others" =
%%                { "\," *  %% kein besonderes Zeichen fuer "others" i. label
                { "{\etalchar{+}}" *   %% ein plus-Zeichen (+) fuer "others"!
                  #1 'et.al.char.used :=
                }
                { s nameptr "{l{}}" format.name$ * }
              if$
            }
            { s nameptr "{l{}}" format.name$ * }
          if$
          nameptr #1 + 'nameptr :=
          namesleft #1 - 'namesleft :=
        }
      while$
      numnames #3 >                     %% MODIFIZIERT war 4
%%        { "\," *  %%  s. Bemerkung oben
        { "{\etalchar{+}}" *
          #1 'et.al.char.used :=
        }
        'skip$
      if$
    }
    { s #1 "{l{}}" format.name$
      duplicate$ text.length$ #2 <
        { pop$ s #1 "{ll}" format.name$ #3 text.prefix$ } %%  vgl. Anmerkung!
        'skip$
      if$
    }
  if$
}

如果需要的话,也许这可以帮助到某人。

相关内容