我觉得这类似于BibTeX natbib 中仅使用命名样式的作者姓名首字母或者 缩写名字之间没有空格吗?
当作者有多个名字时,我需要使用这些名字的首字母,中间没有空格或波浪符号。例如author="Gamboz, A. B."
:A.B. Gamboz
该格式"{f{.}. }{vv~}{ll}{, jj}"
可以实现这一点,但是它还会删除某些法语名称或日语和中文音译中可能出现的“-”。
例如: (author="Jean-Baptiste Poquelin"
而J.B. Poquelin
不是J.-B. Poquelin
)。
有没有办法保留“-”?
MWE(摘自《Tame the BeaST》第37页):
最小bst
ENTRY {any}{}{}
FUNCTION {test}
{"Jean-Baptiste Poquelin"
#1 "{f{.}.~}{vv~}{ll}{, jj}" format.name$ top$}
READ
EXECUTE{test}
最小辅助
\bibstyle{min}
然后运行bibtex min
答案1
我在BibTeX 常见问题Q.35 由 Philip G. Ratcliffe 于 2002 年 6 月 28 日在新闻组 comp.text.tex 上提出,主题为BiBTeX,bst hacker,format.name$,请帮忙该方法包括使用函数“手动”删除空格
STRINGS {z}
FUNCTION {remove.spaces}
{ 'z :=
""
{ z empty$ not }
{ z #1 #1 substring$
z #2 global.max$ substring$ 'z :=
duplicate$ "~" =
'pop$
{ duplicate$ " " =
'pop$
{ * }
if$
}
if$
}
while$
}
INTEGERS { nameptr namesleft numnames }
FUNCTION {forname.format.string}
{ "{f.}" }
FUNCTION {surname.format.string}
{ "{vv~}{ll}" }
FUNCTION {jnrname.format.string}
{ "{, jj}" }
FUNCTION {format.names}
{ 's :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr forname.format.string format.name$ remove.spaces
duplicate$ empty$ 'skip$ { "~" * } if$
s nameptr surname.format.string format.name$ *
s nameptr jnrname.format.string format.name$ *
't :=
但是,如果作者的口音写成以下形式,则此解决方案将失效:
author = {Greensite, Jeff and Olejn\'ik, {\v S}tefan and Zwanziger, Daniel},
因为中的空格{\v S}
将会丢失:
J.~Greensite, {\vS}.~Olejn\'ik and D.~Zwanziger