自定义参考书目样式,将“et al.”添加到作者列表中,前面不加分隔符

自定义参考书目样式,将“et al.”添加到作者列表中,前面不加分隔符

我正在完成我的论文。虽然我使用 LaTeX 已经有一段时间了,但在排版论文时我又学到了很多关于 LaTeX 的知识。不过,我对参考书目中的参考文献格式还是有点小问题。

作为参考书目样式,我使用的是该文件的改编版本unsrtdin.bst。我设法将其更改为自动剪切作者列表并仅打印前五位作者,而用“其他”替换其余作者。作者列表的最后一个分隔符或只有两位作者之间的分隔符是“and”。这导致剪切作者列表末尾出现“and others”。但是,我更希望在剪切作者列表末尾只使用“et al.”而不在其前面添加任何分隔符。

.bst 文件中我的函数的(希望)相应代码垃圾format.names如下所示,但我无法找到要更改的正确行:

nameptr #1 >
     {
      nameptr #5
      #1 + =
      numnames #5
      > and
        { " others" 't :=       %% simply setting " et al." here produces "and et al."
          #1 'namesleft := }
        'skip$
      if$
      namesleft #1 >
         { " ; " * t * }
         { numnames #2 >
              { " " * }
              'skip$
           if$
           t "\textsc{others}" = t "\textsc{others} (ed.)" = or
              { " others" * }
              { " and " * t * }
           if$
           }
      if$  
      }
        't
  if$  

此自定义样式的示例输出如下

在此处输入图片描述

我希望

“Tacutu,R.;Craig,T.;Budovsky,A.;Wuttke,D.;Lehmann,G. 等。”

最好的,安娜

答案1

您需要在代码中注释所指示的位置更改" others "" et al."。此外,您还必须更改" and "为该""位置下方的几行。以下是完整的FUNCTION {format.names}

%% Adelspraedikate beim Sortieren nach den(m) Vornamen auffuehren
%% Abweichend v. DIN !!!
FUNCTION {format.names}
{ '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 >
     {
      nameptr #5
      #1 + =
      numnames #5
      > and
        { " et al." 't :=       %% simply setting " et al." here produces "and et al."
          #1 'namesleft := }
        'skip$
      if$
      namesleft #1 >
         { " ; " * t * }
         { numnames #2 >
              { " " * }
              'skip$
           if$
           t "\textsc{others}" = t "\textsc{others} (ed.)" = or
              { " others" * }
              { "" * t * }
           if$
           }
      if$  
      }
            't
           if$  %%  Ende der nameptr-Pruefung

      nameptr #1 + 'nameptr :=
      namesleft #1 -  'namesleft :=
    }
  while$  %%  Ende von { namesleft #0 > } ganz oben
  "" 'fkt :=  %% fkt wird zurueckgesetzt
}

生成结果:

在此处输入图片描述

相关内容