以两种方式修改“agsm”书目样式

以两种方式修改“agsm”书目样式

我在文档类中使用 LaTeX article。我使用的 Bibtex 书目样式是agsm,属于哈佛书目样式系列。

我有两个问题:

(1)如果我引用类型的条目@book,那么在参考文献列表中我会得到出版社,地址。我想重新安排这个订单地址: 出版社。我应该修改哪一部分agsm.bst

(2)我想将 类型的条目标题前的单引号 ' ' 改为双引号 " " 。我应该重点关注@article的哪一部分?agsm.bst

答案1

我建议您按如下方式进行。

  • 在您的 TeX 发行版中找到该文件agsm.bst。复制此文件并将副本命名为 。agsm-mod.bst(不要直接编辑 TeX 发行版的原始文件。)

  • 在文本编辑器中打开文件agsm-mod.bst。你用来编辑 .tex 文件的编辑器就可以了。

  • 让我们先解决比较简单的任务:将引用样式从单引号更改为双引号。在 中agsm-mod.bst,找到名为 的函数quote。(在我的此文件副本中,该quote函数从第 155 行开始。)在此函数中,找到以下行:

        { "`" swap$ * "'" * }
    

    将其更改为

        { "``" swap$ * "''" * }
    

    此更改不仅会影响 类型的条目标题的@article排版方式;还会影响@misc和类型的条目标题@booklet。我假设您同意这一点。

  • 事实上,更艰巨的任务是改变出版社,地址地址: 出版社对于类型的条目@book。事实证明,为了完成这项任务,需要提供几个新的 BibTeX 函数。这是因为库存agsm样式被编程为在字段之间使用逗号到处address;在两个特定字段(此处:和)之间使用冒号publisher并不是此 bib 样式能轻易做到的事情。

    首先在函数multi.page.check和之间插入以下代码块format.pages

    FUNCTION {bibinfo.warn}
    { swap$
      duplicate$ missing$
        {
          swap$ "missing " swap$ * " in " * cite$ * warning$ pop$
          ""
        }
        { duplicate$ empty$
            {
              swap$ "empty " swap$ * " in " * cite$ * warning$
            }
            { swap$
              pop$
            }
          if$
        }
      if$
    }
    
    FUNCTION {bibinfo.check}
    { swap$
      duplicate$ missing$
        {
          pop$ pop$
          ""
        }
        { duplicate$ empty$
            {
              swap$ pop$
            }
            { swap$
              pop$
            }
          if$
        }
      if$
    }
    
    FUNCTION {format.org.or.pub}
    { 't :=
      ""
      address empty$ t empty$ and
        'skip$
        {
          address "address" bibinfo.check *
          t empty$
            'skip$
            { address empty$
                'skip$
                { ": " * }
              if$
              t *
            }
          if$
        }
      if$
    }
    
    FUNCTION {format.publisher.address}
    { publisher "publisher" bibinfo.warn format.org.or.pub
    }
    
  • 接下来,book在文件中找到该函数agsm-mod.bst。在此函数中,找到以下两行

          publisher "publisher" output.check
          address output
    

    用(我想你已经猜到了……)替换这两行

          format.publisher.address output
    

    inbook并且,在执行此操作的同时,您还应该替换函数和中的相同行。(只需在 bst 文件中incollection搜索剩下的两个实例即可。)publisher "publisher" output.check

  • 将 bst 文件保存在主 tex 文件所在的目录中,或保存在 BibTeX 搜索的目录中。如果选择第二个选项,请确保也适当更新 TeX 发行版的文件名数据库。

  • 最后,在主 tex 文件中,更改指令

    \bibliographystyle{agsm} 
    

    \bibliographystyle{agsm-mod} 
    

    并执行完整的重新编译循环:LaTeX、BibTeX,然后再执行两次 LaTeX。


为了确保万无一失,这里有一个 MWE(最小工作示例),用来演示使用参考书目样式的结果agsm-mod

在此处输入图片描述

\RequirePackage{filecontents}
\begin{filecontents}{mybib.bib}
@article{a,
  author   = "Anne Author",
  title    = "Thoughts",
  year     = 3001,
  journal  = "Circularity Today",
  volume   = 1,
  number   = 2,
  pages    = "3-4",
}
@book{b,
  author   = "Brenda Buthor",
  title    = "Further Thoughts",
  year     = 4001,
  publisher= "Publisher",
  address  = "Some Place, XY",
}
\end{filecontents}

\documentclass{article}
\usepackage{harvard}
\bibliographystyle{agsm-mod}%

\begin{document}
\cite{a}, \cite{b}
\bibliography{mybib}
\end{document}

相关内容