当前位置:   article > 正文

LaTeX bst文件修改(以ieeetr.bst为例)_修改bst文件

修改bst文件

1.将参考文献中作者和题名以", "分割改为以". "

  1. FUNCTION {output.nonnull}
  2. { 's :=
  3. output.state mid.sentence =
  4. { ", " * write$ }
  5. { output.state after.quote =
  6. { " " * write$ }
  7. { output.state after.block =
  8. { add.period$ write$
  9. newline$
  10. "\newblock " write$
  11. }
  12. { output.state before.all =
  13. 'write$
  14. { output.state after.quoted.block =
  15. { write$
  16. newline$
  17. "\newblock " write$
  18. }
  19. { add.period$ " " * write$ }
  20. if$
  21. }
  22. if$
  23. }
  24. if$
  25. }
  26. if$
  27. mid.sentence 'output.state :=
  28. }
  29. if$
  30. s
  31. }

将第四行改为

{ ". " * write$ }

或者

{ add.period$ " " * write$ }

其中add.period$就是添加"."

2.超过3个作者自动使用et al代替,而不用去bib中改成and others

  1. FUNCTION {format.names}
  2. { 's :=
  3. #1 'nameptr :=
  4. s num.names$ 'numnames :=
  5. numnames 'namesleft :=
  6. { namesleft #0 > }
  7. { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't :=
  8. nameptr #1 >
  9. { namesleft #1 >
  10. { ", " * t * }
  11. { numnames #2 >
  12. { "," * }
  13. 'skip$
  14. if$
  15. t "others" =
  16. { " {\em et~al.}" * }
  17. { " and " * t * }
  18. if$
  19. }
  20. if$
  21. }
  22. 't
  23. if$
  24. nameptr #1 + 'nameptr :=
  25. namesleft #1 - 'namesleft :=
  26. }
  27. while$
  28. }

改为

  1. FUNCTION {format.names}
  2. { 's :=
  3. #1 'nameptr :=
  4. s num.names$ 'numnames :=
  5. numnames 'namesleft :=
  6. { namesleft #0 > }
  7. { s nameptr "{f~}{vv~}{ll}{, jj}" format.name$ 't :=
  8. nameptr #1 >
  9. nameptr #3
  10. #1 + =
  11. numnames #3
  12. > and
  13. { "others" 't :=
  14. #1 'namesleft := }
  15. 'skip$
  16. if$
  17. { namesleft #1 >
  18. { ", " * t * }
  19. { numnames #2 >
  20. { "," * }
  21. 'skip$
  22. if$
  23. t "others" =
  24. { " {\em et~al}" * }
  25. { " and " * t * }
  26. if$
  27. }
  28. if$
  29. }
  30. 't
  31. if$
  32. nameptr #1 + 'nameptr :=
  33. namesleft #1 - 'namesleft :=
  34. }
  35. while$
  36. }

大致意思就是先判断已读取的作者是否达到3个,达到了后面的不读取了,用et al代替。

为了看懂这个代码可以去看一下GBT7714-2005NLang.bst中的相关注释,我截取了一段

  1. FUNCTION {format.names.for.non.peer.review} {
  2. % 初始化
  3. 's := % s := author域
  4. #1 'nameptr := % nameptr 是姓名指针,初始化为 1
  5. s num.names$ 'numnames := % 利用 num.names$ 获得 s 中的作者数量存入 nameptr
  6. numnames 'namesleft := % 未处理的姓名数 namesleft := numnames
  7. % 循环处理所有姓名
  8. { namesleft #0 > } % if namesleft > #0 (还有姓名没有格式化)
  9. { s nameptr % 选择第 nameptr 个姓名
  10. name.format.string % 按 name.format.string 的格式排版
  11. format.name$ % 调用 format.name$
  12. % language empty$
  13. % { "u" change.case$ } % 如果不是语言为空, 做大写转换
  14. % { skip$ }
  15. % if$ % <language 判断结束>
  16. remove.period % 并删除缩写符号'.'
  17. 't := % 格式化后的姓名暂存于 t
  18. nameptr #1 >
  19. { nameptr max.num.names.before.forced.et.al #1 + =
  20. { "others" 't := % 如果当前作者的序数已经超出了最大列显作者数
  21. #1 'namesleft := } % 则置未处理姓名数为#1, 以便跳出循环
  22. { skip$ } % 如果作者序数在允许范围内, 则跳过
  23. if$ % <et al 判断结束>
  24. bbl.comma * % 添加逗号
  25. namesleft #1 > % 若当前姓名不是最后一个
  26. { t * } % 显示当前姓名
  27. { t "others" = % 若当前姓名是最后一个且后面有略去的姓名
  28. { bbl.etal * } % 添加", et~al"或",等"
  29. { t * } % 如果没有略去姓名,以句点结束
  30. if$ % <others 判断结束>
  31. }
  32. if$ % <namesleft 判断结束>
  33. }
  34. { t } % 如果是第一个作者, 直接将排版后的姓名压栈
  35. if$
  36. nameptr #1 + 'nameptr := % 姓名指针加 1
  37. namesleft #1 - 'namesleft := % 剩余姓名数减 1
  38. }
  39. while$
  40. }

3.顺便说明一下作者名字相关的知识,f代表first name,v代表von,l代表last name,j代表Jr 

{ff}表示first name正常打出,不省略

{f}表示仅显示首字母

{f~} 表示仅显示首字母且后面空一点距离

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/572301
推荐阅读
  

闽ICP备14008679号