![修改 bst 文件以允许使用 arxiv 字段](https://linux22.com/image/242488/%E4%BF%AE%E6%94%B9%20bst%20%E6%96%87%E4%BB%B6%E4%BB%A5%E5%85%81%E8%AE%B8%E4%BD%BF%E7%94%A8%20arxiv%20%E5%AD%97%E6%AE%B5.png)
我正在尝试添加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
并开始修改它。
我已添加
arxiv
到参赛名单我添加了一个
format.arxiv
函数,它是我想要的模型:FUNCTION {format.arxiv} { arxiv empty$ { "" } {" {\url{arXiv:" * arxiv * "}}" * } if$ }
我修改了相关的输出函数来调用 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}