修改 bst 文件以允许使用 arxiv 字段

修改 bst 文件以允许使用 arxiv 字段

我正在尝试添加arxiv对我的 bibentries 的引用,并且我想控制它在引用中的显示方式。

我希望该字段仅包含信息部分:

arxiv = 0809.0726

但为了使结果更具信息量,可能包含一个链接:

\href{https://arxiv.org/abs/0809.0726}{arXiv:0809.0726}

当然,这可以通过宏来完成:

\newcommand{\arxiv}[1]{{ \href{https://arxiv.org/abs/#1}{arXiv:#1}}}
\arxiv{0809.0726}

到目前为止一切都很好。

我已经接受unsrt.bst并开始修改它。

  1. 我已添加arxiv到参赛名单

  2. 我添加了一个format.arxiv函数,它是我想要的模型:

    FUNCTION {format.arxiv}
    { arxiv empty$
         { "" }
         {" {\url{arXiv:" * arxiv * "}}" * }
      if$
    }
    
  3. 我修改了相关的输出函数来调用 arxiv.output(例如unpublished):

     FUNCTION {unpublished}
     { output.bibitem
      format.authors "author" output.check
      new.block
      format.title "title" output.check
      new.block
      note "note" output.check
      new.block
      format.arxiv output
      format.date output
      fin.entry
     }
    

但是,当我尝试编译文件时出现错误:

Running `BibTeX' on `ResearchStatement' with ``bibtex ResearchStatement''
This is BibTeX, Version 0.99c (Web2C 7.5.6)
The top-level auxiliary file: ResearchStatement.aux
The style file: myunsrt.bst
Database file #1: general.bib
You can't pop an empty literal stack for entry FarjounSchaeffer2010
while executing---line 963 of file myunsrt.bst
(There was 1 error message)

BibTeX exited abnormally with code 2 at Thu Nov 10 16:39:09

我尝试使用函数*中的 's format.arxiv,但一直得到错误的结果

我相信对于那些能够使用原力的人来说这很容易......但我在这里仍然是一只蚱蜢......

答案1

尝试将以下内容放入 .bst 文件中。(上面的函数可能已经存在)。

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

FUNCTION {format.archive}
{
  archivePrefix empty$
      { "" }
      { archivePrefix ":" *}
  if$            
}

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

FUNCTION {unpublished}
{ output.bibitem
  format.authors "author" output.check
  new.block
  format.title "title" output.check
  format.date output
  new.block
  format.note "note" output.check
  format.eprint output
  fin.entry
}

答案2

Mark 的答案是一个完整的工作示例,但我有自己的做事方式,因此我想要一个关于如何修复我的代码的答案......而不是不同的代码......但查看他的代码后,我设法弄清楚我的定义*中有一个伪代码,然后从堆栈中提取了太多项目。format.arxiv我最终使用的函数是:

 FUNCTION {format.arxiv}
{ arxiv empty$
    { "" }
    {"\href{www.arxiv.org/abs/" arxiv *  "}" * 
             "{\tt arXiv:" * arxiv *  "}" *}
  if$
}

*请注意,错误子句的前两个参数之间缺少 a 。

答案3

您可以在以下链接下载文件 unsrt-phys.bst: https://drive.google.com/open?id=0B8AqjYFfBKw0dEZXcFN0WEVIN0U&authuser=0 并将其放入您文章的文件夹中。然后将参考书目样式更改为\bibliographystyle{unsrt-phys}。运行 Bibtex,然后享受它吧!

答案4

使用

FUNCTION {format.arxiv}
{ arxiv empty$
    { "" }
    { "{\url{arXiv:" arxiv * "}}" * }
  if$
}

当然,还有arxiv列表中的条目ENTRY。然后我得到:

\documentclass{article}
\usepackage{filecontents}
\usepackage{url}
\begin{filecontents*}{\jobname.bib}
@unpublished{demo,
    author="foo",
    title="bar",
    arxiv="1234.5678"
}
\end{filecontents*}

\begin{document}
    \nocite{*}
    \bibliographystyle{unsrt}
    \bibliography{\jobname}
\end{document}

在此处输入图片描述

相关内容