如何自定义 .bst 文件

如何自定义 .bst 文件

我想定制这个.bst 文件。现在,当我编译一个参考时,它会给我(对于类型的条目@article):

作者 1、作者 2、“标题”期刊卷(年份)页,arxiv:0208157。

但我想让逗号出现在引号后面,并且我想arxiv:0208157用以下形式替换[hep-ph/0208157]

作者 1、作者 2、“标题”、期刊卷(年份)页码 [hep-ph/0208157]。

以下是 MWE:

  \documentclass{article}
   \usepackage{filecontents}
   \begin{filecontents*}{test.bib}
      @article{AA,
      archivePrefix = {arXiv},
      arxivId = {hep-th/9605032},
      primaryClass = {hep-th},
      author = {AuthorI, A. and AuthorII, B. and AuthorIII, C.},
      eprint = {9605032},
      journal = {Journal},
      pages = {pages},
      title = {{Title with ?}},
      volume = {Volume},
      year = {Year}
      }
  \end{filecontents*}
  \begin{document}

  \nocite{*}

  %Bibloography

 \bibliographystyle{utphys}
 \bibliography{test}
 \end{document}

更新:关于 arxiv 问题,你必须在文件中将代码替换FUNCTION {format.primaryClass}.bst"{ " [" primaryClass * "]" *}{ "" primaryClass *}函数中FUNCTION {format.eprint},你应该将其替换"{{\ttfamily " * format.archive * eprint * format.primaryClass * "}}" *}"{{" * " [" * format.primaryClass * "/" * eprint * "]" * "}}" * }

现在,我遇到了一个新问题:当arxivId不包含类别例如hep-th,在 中primaryClass = {hep-th},引用打印为[/9605032]。因此,我的新问题是,在这种情况下如何将其写入[Arxiv:9605032]?。

更新二:解决方案非常简单!我只需输入"Arxiv"而不是""之后primaryClass empty$

答案1

您需要对文件中从 l. 519 开始的以下两个函数进行微小的修改utphys.bst

FUNCTION {format.title}
{ title empty$
    { "" }
    { "``" title "t" change.case$ * ",''" * }
  if$
}

FUNCTION {format.title.p}
{ title empty$
    { "" }
    { "``" title "t" change.case$ * ".''" * }
  if$
}

具体来说,就是将 改为在,'',将改为在。'',format.title.''''.format.title.p

请注意,您不应直接编辑和更改 TeX 发行版中的原始文件。相反,请复制该文件utphys.bst并将上述两个建议应用于副本。

答案2

要修复 arxiv 论文的问题,首先,你必须在文件中替换utphys.bst代码

FUNCTION {format.primaryClass}
{
  primaryClass empty$
      { "" }
      { " [" primaryClass * "]" *}
  if$            
}

FUNCTION {format.eprint}
{ eprint empty$
     { ""}
     { archive empty$
          {"\href{http://arxiv.org/abs/" eprint * "}" * 
             "{{\ttfamily " * format.archive * eprint *
              format.primaryClass * "}}" *}
          {"\href{" archive *  "/" * eprint * "}" * 
             "{{\ttfamily " * format.archive * eprint *
              format.primaryClass * "}}" *}
       if$
     }
     if$
}

通过以下代码:

FUNCTION {format.primaryClass}
{
  primaryClass empty$
      { "Arxiv:" } % 
     { "" primaryClass * "/" *}        %Vall { " [" primaryClass * "]" *}
  if$            
}

FUNCTION {format.eprint} % eprint:9605032, http://arxiv.org/abs/hep-th/9605023
{ eprint empty$
     { "" }
     {  archive empty$
          {"\href{http://arxiv.org/abs/"  format.primaryClass *  eprint * "}" *
             "{{" * " [" * format.primaryClass *                              % vall "{{\ttfamily " * format.archive * eprint *
               eprint * "]" * "}}" * }

          {"\href{http://arxiv.org/abs/"  "}" *
             "{{" * " [" * format.primaryClass *
              eprint * "]" * "}}" *}
       if$
        }
     if$
}

解释:

我)format.primaryClass { "" primaryClass * "/" *}而不是{ " [" primaryClass * "]" *} 将被 替换 [hep-th]。因此 ,当它被定义时hep-th/,它将打印primaryClass/(printClass 是论文的类别,例如hep-th),否则(某些 arxiv 论文没有primaryClass)它将打印Arxiv:(If$ 将检查这一点)。

二)format.eprint

A): \href{http://arxiv.org/abs/" format.primaryClass * eprint * "}": 这仅在您使用该hyperref包时才有用,它会生成超链接http://arxiv.org/abs/primerClass/eprint,例如,如果 primaryClass = {hep-th}eprint = {9605032}它将生成 http://arxiv.org/abs/hep-th/9605032。代码"{{" * " [" * format.primaryClass * eprint * "]" * "}}" * }是超链接的打印文本,即 [format.primaryClass eprint]我前面示例中的[hep-th/9605032]。备注:如果您不使用该hyperref包,这将仅打印 [hep-th/9605032]

B):现在,您可以猜一下代码的"\href{http://arxiv.org/abs/" "}"作用是什么?当 arxiv 论文没有primaryClass案例 时A)被省略,程序将执行此代码,所以这只不过是,因为没有。\href{http://arxiv.org/abs/format.primaryClass eprint }例如,如果 这将提供超链接,您将自动重定向到链接。最后,代码将打印超链接文本,即我们最后一个例子中的文本。primaryClassformat.primaryClassArxiv:eprint = {1512.00704}http://arxiv.org/abs/Arxiv:1512.00704http://arxiv.org/abs/1512.00704"{{" * " [" * format.primaryClass * eprint * "]" * "}}" *[format.primaryClass eprint][Arxiv:1512.00704]

要删除之前的逗号,Arxiv必须替换以下代码(例如这个答案):

FUNCTION {article}
{ output.bibitem
  format.collaboration output
  format.authors "author" output.check
  format.title "title" output.check
  blank.sep
  crossref missing$
  { journal missing$   
        {}
        { format.journal add.doi "journal" output.check}
      if$
    report missing$
        {format.eprint output}
        {blank.sep format.report output format.eprint output}
      if$
    }
    { format.article.crossref output.nonnull
      format.pages output
      format.eprint output
    }
  if$
  new.sentence
  format.url output
  new.sentence
  note output
  new.sentence
  format.SLACcitation output
  fin.entry
}

通过代码:

FUNCTION {article}
{ output.bibitem
  format.collaboration output
  format.authors "author" output.check
  format.title "title" output.check
  blank.sep
  crossref missing$
  { journal missing$   
        {}
        { format.journal add.doi "journal" output.check}
      if$
    report missing$
         {before.all 'output.state := %% added  
         format.eprint output}
        {blank.sep format.report output format.eprint output}
      if$
    }
    { format.article.crossref output.nonnull
      format.pages output
      format.eprint output
    }
  if$
  new.sentence
  format.url output
  new.sentence
  note output
  new.sentence
  format.SLACcitation output
  fin.entry
}

一位 MWE 表示:

  \documentclass{article}
   \begin{filecontents*}{test.bib}
     @article{A,
      archivePrefix = {arXiv},
      arxivId = {hep-th/9605032},
      author = {AuthorI, A. and AuthorII, B. and AuthorIII, C.},
      eprint = {9605032},
      journal = {Journal of Bla bla},
      pages = {12},
      primaryClass = {hep-th},
      title = {{Title of the paper A}},
      volume = {123},
      year = {2016}
        }
     @article{B,
      archivePrefix = {arXiv},      
      author = {AuthorA, A. and AuthorB, B. and AuthorC, C.},
      arxivId = {1512.00704},
      eprint = {1512.00704},
      journal = {Journal of bla bla},
      pages = {1233},
      title = {{Title of the paper B}},
      volume = {567},
      year = {2016}
        }
  \end{filecontents*}
  \begin{document}

   ~\nocite{*}

 %Bibleography

 \bibliographystyle{Vall}
 \bibliography{test}
 \end{document}

结果: 在此处输入图片描述

相关内容