使用 APAlike 书目样式时如何删除作者姓名首字母之间的空格

使用 APAlike 书目样式时如何删除作者姓名首字母之间的空格

假设我的参考如下所示:

作者,JM (2006)。比较物种丰度模型。生态建模,199(2):153 – 163。

如何删除作者两个首字母之间的空格,以便获得 Last, JM

谢谢!

答案1

复制一份apalike.bst并命名,例如apalike-nospace.bst。将其保存在 中的本地texmf文件夹中texmf/bib/bst

然后更改文件format.names中的函数.bst。关键的变化在于函数中的以下字符串,它告诉bibtex如何格式化名称片段:

"{vv~}{ll}{, jj}{, f.}"

这需要更改为:

"{vv~}{ll}{, jj}{, f{.}.}"

f部分是首字母部分,默认的元素间单位是空格。我们需要通过使用 来明确覆盖它 {.}

以下是新旧版本的完整功能:

原始代码:

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't :=   % last name first
      nameptr #1 >
        { namesleft #1 >
            { ", " * t * }
            { numnames #2 >
                { "," * }
                'skip$
              if$
              t "others" =
                { " et~al." * }
                { " and " * t * }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

新代码

FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr "{vv~}{ll}{, jj}{, f{.}.}" format.name$ 't :=   % last name first
      nameptr #1 >
        { namesleft #1 >
            { ", " * t * }
            { numnames #2 >
                { "," * }
                'skip$
              if$
              t "others" =
                { " et~al." * }
                { " and " * t * }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}

相关内容