我尝试在 osx 上从命令行使用 Biber 和 BibLaTeX。当我编译 .tex 文件时,我得到
No file print_bibliography.bbl.
LaTeX Warning: Citation 'Huse2007' on page 1 undefined on input line 19.
LaTeX Warning: Empty bibliography on input line 20.
[1{/usr/local/texlive/2018/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
(./print_bibliography.aux)
LaTeX Warning: There were undefined references.
Package biblatex Warning: Please (re)run Biber on the file:
(biblatex) print_bibliography
(biblatex) and rerun LaTeX afterwards.
这些错误似乎很常见,具体描述如下本维基百科,但给出的解决方案取决于所使用的编辑器,而我的情况没有解决方案。我使用 pycharm 作为编辑器并从终端调用 latex。
在终端我输入:
pdflatex print_bibliography.tex
我对 print_bibliography.tex 文件的 MWE 是
\documentclass{article}
\usepackage[backend=biber, natbib=true]{biblatex}
\addbibresource{references.bib}
\begin{document}
This sentence should be cited\cite{Huse2007}
\printbibliography
\end{document}
对于 references.bib 文件来说:
@article{Huse2007,
title = {Localization of interacting fermions at high temperature},
author = {Oganesyan, Vadim and Huse, David A.},
journal = {Phys. Rev. B},
volume = {75},
issue = {15},
pages = {155111},
numpages = {5},
year = {2007},
month = {Apr},
publisher = {American Physical Society},
doi = {10.1103/PhysRevB.75.155111},
url = {https://link.aps.org/doi/10.1103/PhysRevB.75.155111}
}
相关问题: 如何从命令行使用 Biber 和 BibLaTeX 通过修复 biber 和 biblatex 之间的版本不兼容问题,这个问题得到了解决。但这似乎不适用于我的情况。
谢谢。
答案1
警告biblatex
显示:
Package biblatex Warning: Please (re)run Biber on the file:
(biblatex) print_bibliography
(biblatex) and rerun LaTeX afterwards.
意味着您对文档进行了某些更改(通常是添加了一些引用),并且您需要运行biber
,这是一个外部工具。
在命令行中,您只需输入
biber <name_of_your_tex_file_without_extension>
就你的情况来说:
biber print_bibliography
有多种方法可以自动处理参考书目,其中大多数也依赖于外部工具。我知道两种,但还有更多。
阿拉拉
这是我最喜欢的 :-)
要使用 Arara,你必须在文档的序言中告诉它要做什么。我通常把它写在之前\documentclass
。你可以这样使用:
% arara: pdflatex
% arara: biber
% arara: pdflatex
\documentclass{article}% or whatever class you use
每次运行 Arara 时,它都会运行pdflatex
一次、biber
一次、pdflatex
再一次。要运行它,您只需从命令行调用它:
arara print_bibliography.tex
然后它就会执行它的任务。如果你想要更花哨,你可以告诉 Arara 只在必要时运行。这是我目前用于我的论文项目的标题:
% arara: lualatex: { draft: yes }
% arara: biber if found ('log', 'Please \\(re\\)run Biber on the file')
% arara: --> || changed (toFile('bibliography.bib'))
% arara: lualatex until !found('log', '\\(?(R|r)e\\)?run (to get|LaTeX)')
\documentclass{article}% or whatever class you use
它会在草稿模式下运行一次lualatex
(如果您使用,pdflatex
只需更改它),只是为了获取辅助文件。然后,biber
只有当在日志中找到之前的消息或我更改了bibliography.bib
文件时,它才会运行。最后,它会根据需要运行lualatex
多次,以使所有交叉引用正确无误(通常一次或两次以上)。
拉特克斯
与 Arara 不同,你需要明确说明要做什么,而 LaTeXmk 会尝试从日志文件的内容中猜测要做什么。你只需在文档中运行它即可:
latexmk print_bibliography.tex
优点:它确实更易于使用。
缺点:在我看来,它并不总是知道正确的事情,导致编译时间比必要的要多。