修改 plainnat.bst 以不同方式显示引用

修改 plainnat.bst 以不同方式显示引用

我对 .bst 文件非常陌生,我正在尝试更改 plainnat.bst 中的某些内容,以使我的参考文献看起来不同。\cite 和 \citep 目前的方式非常完美,我不想通过在 bst 中进行错误的更改来以任何方式影响它(如果可能的话?)。参考文献现在如下所示:

目前引用的方式

我已成功将卷号加粗、移动年份,并添加 () 以包含年份。我想要更改的是:

  1. 页码之前“:”后面有一个空格。

  2. 删除文章年份后的“。”和书籍后的“,”。

  3. 如果作者超过三位则不打印所有作者,三位作者之后以 et al. 结尾。

  4. 最后一位作者之前没有“and”,只有一个“,”与其他作者一样。

  5. 作者姓名首字母后不加“。”,仅在年份前最后一位作者加“。”

  6. 将期刊名称后的“,”改为“;”。

我真的迷茫了,我尝试用谷歌搜索并找到了一些答案,因此已经做出了更改,但我无法弄清楚其余部分。提前致谢!

编辑(带有最少的工作示例,我不确定这是所要求的):主文档

\documentclass[11pt, titlepage]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} %remove comment before print 
\usepackage[nottoc,numbib]{tocbibind} %inputs bibliography in table of contents
\usepackage[round]{natbib}   % omit 'round' option if you prefer square brackets
\bibliographystyle{myplainnat3_2}
\begin{document}
\citep{Cyrys2012}
\bibliography{report}  
\end{document}

Bib 文件(参考文献之一的示例,它们均由 bst 以相同的方式呈现)

@article{Cyrys2012,
author = {Cyrys, Josef and Eeftens, Marloes and Heinrich, Joachim and Ampe, Christophe and Armengaud, Alexandre and Beelen, Rob and Bellander, Tom and Beregszaszi, Timea and Birk, Matthias and Cesaroni, Giulia and Cirach, Marta and de Hoogh, Kees and {De Nazelle}, Audrey and de Vocht, Frank and Declercq, Christophe and Dedele, Audrius and Dimakopoulou, Konstantina and Eriksen, Kirsten and Galassi, Claudia and Graulevi\v{c}iene, Regina and Grivas, Georgios and Gruzieva, Olena and Gustafsson, Annika Hagenbj{\"{o}}rk and Hoffmann, Barbara and Iakovides, Minas and Ineichen, Alex and Kr{\"{a}}mer, Ursula and Lanki, Timo and Lozano, Patricia and Madsen, Christian and Meliefste, Kees and Modig, Lars and M{\"{o}}lter, Anna and Mosler, Gioia and Nieuwenhuijsen, Mark and Nonnemacher, Michael and Oldenwening, Marieke and Peters, Annette and Pontet, Sabrina and Probst-Hensch, Nicole and Quass, Ulrich and Raaschou-Nielsen, Ole and Ranzi, Andrea and Sugiri, Dorothee and Stephanou, Euripides G. and Taimisto, Pekka and Tsai, Ming Yi and Vask{\"{o}}vi, \'{E}va and Villani, Simona and Wang, Meng and Brunekreef, Bert and Hoek, Gerard},
journal = {Atmospheric Environment},
keywords = {Air pollution,ESCAPE study,Long term,NO2,NOx,Spatial variation,Traffic},
number = {2},
pages = {374--390},
title = {{Variation of NO2 and NOx concentrations between and within 36 European study areas: Results from the ESCAPE study}},
volume = {62},
year = {2012}
}

bst 文件的一小段

FUNCTION {article}
{ output.bibitem
format.authors "author" output.check
author format.key output
new.block
format.date "year" output.check
new.block
format.title "title" output.check
new.block
crossref missing$
{ journal emphasize "journal" output.check
  eid empty$
    { format.vol.num.pages output }
    { format.vol.num.eid output }
  if$
}
{ format.article.crossref output.nonnull
  eid empty$
    { format.pages output }
    { format.eid output }
  if$
}
if$
format.issn output
format.doi output
format.url output
new.block
note output
fin.entry
}

FUNCTION {book}
{ output.bibitem
author empty$
{ format.editors "author and editor" output.check
  editor format.key output
}
{ format.authors output.nonnull
  crossref missing$
    { "author and editor" editor either.or.check }
    'skip$
  if$
}  
if$
new.block
format.date "year" output.check 
format.btitle "title" output.check
crossref missing$
{ format.bvolume output
  new.block
  format.number.series output
  new.sentence
  publisher "publisher" output.check
  address output
}
{ new.block
  format.book.crossref output.nonnull
}
if$
format.edition output
format.isbn output
format.doi output
format.url output
new.block
note output
fin.entry
}

答案1

我将从原始的 plainnat.bst 开始。

1:删除“FUNCTION {format.vol.num.pages}”中“:”后面的“\penalty0”。该函数将为:

FUNCTION {format.vol.num.pages}
{ volume field.or.null
  number empty$
    'skip$
    { "\penalty0 (" number * ")" * *
      volume empty$
        { "there's a number but no volume in " cite$ * warning$ }
        'skip$
      if$
    }
  if$
  pages empty$
    'skip$
    { duplicate$ empty$
        { pop$ format.pages }
        { ": " * pages n.dashify * }
      if$
    }
  if$
}

2:output条目中间的每一个在前一项后写一个点或逗号。由于年份后不需要任何内容​​,因此您可以使用一个技巧,手动将 设置output.statebefore.all。然后FUNCTION {article}就像这样:

FUNCTION {article}
{ output.bibitem
  format.authors "author" output.check
  author format.key output
  new.block
  format.date "year" output.check
  before.all 'output.state :=
  format.title "title" output.check
  new.block
  crossref missing$
    { journal emphasize "journal" output.check
      before.all 'output.state :=
      "; " output
      before.all 'output.state :=
      eid empty$
        { format.vol.num.pages output }
        { format.vol.num.eid output }
      if$
    }
    { format.article.crossref output.nonnull
      eid empty$
        { format.pages output }
        { format.eid output }
      if$
    }
  if$
  format.issn output
  format.doi output
  format.url output
  new.block
  note output
  fin.entry
}

的修改FUNCTION {book}也是一样。

3--5:这些需要进行大量的更改FUNCTION {format.names}。我将直接给出结果如下。

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

6:这个和1类似,设置output.state并写入“;”。

整个修改后的 bst 文件位于https://gist.github.com/zepinglee/31f2f01c267922af77bff9cbbf7f1a19

相关内容