假设我的参考如下所示:
作者,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$
}