![修改作者列表(`format.names` 问题)](https://linux22.com/image/246942/%E4%BF%AE%E6%94%B9%E4%BD%9C%E8%80%85%E5%88%97%E8%A1%A8%EF%BC%88%60format.names%60%20%E9%97%AE%E9%A2%98%EF%BC%89.png)
我正在使用 natbib,并开始apa-good.bst
进行微小的修改;例如,使用全名而不是缩写:)但即使在阅读了用于指定 bst 文件的“未命名编程语言”的几篇教程之后,我还是不明白以下内容:
我目前{ll}, {ff}
为所有在&
最后一个作者之前加上了;即:
Aurnague, Michel, Hickmann, Maya, & Vieu, Laure
但我只想第一的为{ll}, {ff}
,且在一个逗号后所有其他作者应跟在{ff} {ll}
; 即:
Aurnague, Michel, Maya Hickmann & Laure Vieu
任何提示都非常感谢。我的教授不允许我将参考书目更改为任何一致的东西 :|
目前的状况如下format.names
:
FUNCTION {format.names}
{ 'bibinfo :=
duplicate$ empty$ 'skip$ {
's :=
"" 't :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
"{vv~}{ll}{, ff}{, jj}"
format.name$
bibinfo bibinfo.check
't :=
nameptr #1 >
{
namesleft #1 >
{ ", " * t * }
{
"," *
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
t "others" =
{
" " * bbl.etal *
}
{
"\&"
space.word * t *
}
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
} if$
}
答案1
默认情况下,参考书目样式文件apa-good.bst
确实不提供根据作者/编辑是否列在第一位而对名字和姓氏进行不同排序的功能。不过幸运的是,添加此功能并不难实现。
复制该文件apa-good.bst
并将副本命名为 。myapa-good.bst
然后,在函数中format.names
(从我的系统的该文件副本的第 365 行开始),搜索以下行块:
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
"{vv~}{ll}{, ff}{, jj}"
format.name$
bibinfo bibinfo.check
并将其替换为
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
duplicate$ #1 >
{ "{ff }{vv~}{ll}{, jj}" }
{ "{vv~}{ll}{, ff}{, jj}" }
if$
format.name$
bibinfo bibinfo.check
在这些代码片段中,我已经{, f.}
在原始 bst 文件中替换了,{, ff}
因为你已表明你这样做不是希望缩写作者的名字。
使用此补丁,您可以指示 BibTeX 执行检查以查看剩余待处理的作者/编辑者姓名数量是否大于 1。如果是,它使用格式化字符串{ff }{vv~}{ll}{, jj}
;如果不是,即,如果只剩下一个名称需要处理(由于 BibTeX 处理堆栈的“逆波兰表示法”方法,它必须是第一的作者/编辑),它使用字符串{vv~}{ll}{, ff}{, jj}
。
接下来,您应该将新.bst
文件存储在 TeX 发行版自动搜索的目录中,并在必要时运行texhash
(或任何适合您的 TeX 发行版的命令)来更新发行版的文件名数据库。最后,请务必发出命令
\bibliographystyle{myapa-good}
代替\bibliographystyle{apa-good}
。
祝您 BibTeX 愉快!
答案2
我建议改用,biblatex
原因有二。第一,它biblatx-apa
试图完全符合 APA6 的要求。第二,它的格式是用“标准” LaTex 宏定义的,而不是 bst 样式。