![biblatex 和 Mendeley 之间的月份格式不兼容](https://linux22.com/image/325773/biblatex%20%E5%92%8C%20Mendeley%20%E4%B9%8B%E9%97%B4%E7%9A%84%E6%9C%88%E4%BB%BD%E6%A0%BC%E5%BC%8F%E4%B8%8D%E5%85%BC%E5%AE%B9.png)
正如标题所示,我使用 Mendeley 作为参考管理器(它会自动.bib
为整个参考书目生成一个文件),并biblatex
使用 BibTeX 作为后端来处理参考书目。正如我在相关帖子中看到的那样,biblatex
希望月份字段为 1 到 12 之间的整数;但是 Mendeley 只将月份导出为标准的 3 个字母的 BibTeX 兼容缩写。请记住,我无法真正摆弄该.bib
文件,因为它是自动生成的,有什么方法可以让我biblatex
很好地使用三个字母的缩写月份?(注意:它仍然可以编译,只是会抛出很多警告)
平均能量损失
\documentclass[a4paper,12pt]{report}
\usepackage[sorting=none,backend=bibtex]{biblatex}
\bibliography{mwebib}
\begin{document}
foo\cite{bar}
\printbibliography
\end{document}
和mwebib.bib
@article{bar,
archivePrefix = {arXiv},
arxivId = {astro-ph.IM/1107.4806},
author = {{The Pierre Auger Collaboration}},
eprint = {1107.4806},
journal = {ArXiv e-prints},
month = {jul},
primaryClass = {astro-ph.IM},
title = {{The Pierre Auger Observatory IV: Operation and Monitoring}},
year = {2011}
}
答案1
标准 BibTeX 缩写不应放在括号中,而应直接用括号括起来,如
month = mar,
只有这样,BibTeX 才能理解它们的特殊含义。
您可以在驯服野兽我们发现(第 13 页)
最好使用数值或缩写,而不是月份的完整名称。
这里并不明确缩写是否需要使用括号或引号。
第 44 页说
即,例如,月份应该以数字形式输入。
所以month = {jul},
这不是 Tame the Beast 推荐的格式。
看看下面的 BibTeX 示例
\documentclass{article}
\begin{filecontents}{\jobname.bib}
@article{Blavatskyy2011,
author = {Blavatskyy, Pavlo R.},
doi = {10.1287/mnsc.1100.1285},
month = mar,
number = {3},
pages = {542--548},
title = {{A Model of Probabilistic Choice Satisfying First-Order Stochastic Dominance}},
volume = {57},
year = {2011},
}
@article{bar,
author = {{The Pierre Auger Collaboration}},
eprint = {1107.4806},
journal = {ArXiv e-prints},
month = {jul},
title = {{The Pierre Auger Observatory IV: Operation and Monitoring}},
year = {2011}
}
\end{filecontents}
\begin{document}
These are my works, \cite{Blavatskyy2011,bar}
\bibliographystyle{plain}
\bibliography{\jobname}
\end{document}
括号中的月份没有给出预期的结果。
biblatex
如果你使用 BibTeX 后端,情况也是如此。新的后端 Biber 非常聪明,它甚至可以处理大括号month
字段
因此以下 MWE 将提供预期的输出(backend=bibtex
但是,它不会按预期工作)。
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\begin{filecontents}{\jobname.bib}
@article{Blavatskyy2011,
author = {Blavatskyy, Pavlo R.},
doi = {10.1287/mnsc.1100.1285},
month = mar,
number = {3},
pages = {542--548},
title = {{A Model of Probabilistic Choice Satisfying First-Order Stochastic Dominance}},
volume = {57},
year = {2011},
}
@article{bar,
author = {{The Pierre Auger Collaboration}},
eprint = {1107.4806},
journal = {ArXiv e-prints},
month = {jul},
title = {{The Pierre Auger Observatory IV: Operation and Monitoring}},
year = {2011}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
These are my works, \cite{Blavatskyy2011,bar}
\printbibliography
\end{document}
尽管 Biber 处理从 Mendeley 导出的文件没有任何问题,但我仍然认为导出存在错误,因为 BibTeX 无法正确处理这个问题。
因此,如果您无法更改文件.bib
但仍想摆脱警告,您应该尝试使用 Biber。
答案2
我使用 python 来更改 bib 文件中的月份字段。将 python 代码文件放在 bib 文件的文件夹中。然后运行python code_file.py bib_file.bib
#!/bin/env python
# -*- coding:utf-8 -*-
import sys
import re
def replace(file_path):
try:
f = open(file_path,'r+')
all_lines = f.readlines()
f.seek(0)
f.truncate()
re_pattern = re.compile(r'month = {(?P<month>[^}]*)}')
for line in all_lines:
line = re_pattern.sub(r'month = \g<month>', line)
f.write(line)
f.close()
except Exception:
print("something wrong!")
if __name__ == "__main__":
if len(sys.argv) < 1:
print("need filename")
sys.exit(1)
file_name = sys.argv[1]
replace(file_name)