我已经安装了 BibTool,它似乎可以用于将格式化的参考书目打印到终端。我正尝试从使用 BibLaTeX 编译的文档中的 .aux 文件中提取参考书目。作为 MWE,这里有这样一个文档:
\documentclass[12pt, oneside, article, a4paper]{memoir}
\usepackage[backend=biber, natbib, style=authoryear-comp]{biblatex}
\ExecuteBibliographyOptions{alldates=short, language=british, sortcites}
\usepackage{kantlipsum}
\title{BibTool MWE}
\author{Thomas Hodgson}
\date{11 May 2013}
\bibliography{bibtool_mwe}
\begin{document}
\maketitle
\kant
\citet{Melville2007}
\printbibliography
\end{document}
这将编译并生成如下所示的 bib tool_mwe.aux 文件:
\relax
\providecommand*{\memsetcounter}[2]{}
\abx@aux@sortscheme{nyt}
\@writefile{toc}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
\@writefile{lof}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
\@writefile{lot}{\boolfalse {citerequest}\boolfalse {citetracker}\boolfalse {pagetracker}\boolfalse {backtracker}\relax }
\abx@aux@cite{Melville2007}
\abx@aux@page{1}{3}
\@writefile{toc}{\defcounter {refsection}{0}\relax }\@writefile{toc}{\contentsline {section}{References}{3}}
\abx@aux@page{2}{3}
\memsetcounter{lastsheet}{3}
\memsetcounter{lastpage}{3}
并且,如果有必要的话,这里是 .bib 文件:
@book{Melville2007,
Author = {Melville, Herman},
Booktitle = {Moby-Dick},
Date-Added = {2013-05-12 09:35:11 +0000},
Date-Modified = {2013-05-12 09:37:33 +0000},
Location = {London},
Publisher = {Vintage},
Title = {Moby-Dick},
Year = {2007}}
当我在命令行中输入以下内容时,BibTool 会生成一个空白行,当我使用 ctrl-D 保留它时,它会生成一个 .bib 文件,但它是空的。
bibtool -x bibtool_mwe.aux -o test.bib
有一段时间我以为这是同样的问题这问题。我也在使用 BibLaTeX。但只有当我遇到 BibTool 的语法错误时,我才会收到类似的错误消息。无论如何,我的问题无法按照该问题的答案所建议的方式解决,因为我的 .aux 文件与那里描述的文件不同。
答案1
只需按如下方式运行biber
:
biber mainfile --output_format bibtex
你的 tex 文件在哪里mainfile.tex
?然后你将获得一个文件
mainfile_biber.bib
包含相关的 bib 条目。
答案2
我写了,或者至少采纳了这个问题的答案问题在 Stack Overflow 上,以下内容(使用 Python)从 .bcf 文件中提取正则表达式:
def xmltocitekeys(file):
from xml.dom import minidom
xmldoc = minidom.parse(file)
taglist = xmldoc.getElementsByTagName('bcf:citekey')
keylist = []
for x in taglist:
keylist.append(str(x.childNodes[0].nodeValue))
print('\|'.join(keylist))
然后可以将输出与 BibTool 一起使用,例如:
bibtool -X "output" -o extract.bib -i bibliography.bib
顺便说一句,我需要在 BibTool 中设置一个选项以保留我的 citekeys 的大写。
答案3
Biber
可以在“工具”模式下为您完成此操作。将其放入您的文件中(或放入您随后使用该选项biber.conf
告知的任何文件中):biber
-g
<config>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<map_step map_field_source="entrykey" map_match="^(?!(?:key1|key2))" map_final="1"/>
<map_step map_entry_null="1"/>
</map>
</maps>
</sourcemap>
</config>
biber
并像这样调用(假设您的.bib
文件名为“foo.bib”):
biber --tool foo.bib
或者如果您不使用默认biber.conf
文件:
biber -g <conf_file> --tool foo.bib
这将输出另一个.bib
文件,foo_bibertool.bib
其中仅包含带有“key1”和“key2”的条目。您可以相应地更改正则表达式以选择所需的内容。我将在 biber 中添加一个“map_not_match”选项,以方便下一个版本,这样您就不必使用负正则表达式。此配置文件本质上会遍历您传递的 .bib 文件并忽略与正则表达式匹配的任何条目。
这完全独立于任何 .bcf 或 .aux 等。请参阅 biber 手册第 3.12 节。