biblatex 和 Mendeley 之间的月份格式不兼容

biblatex 和 Mendeley 之间的月份格式不兼容

正如标题所示,我使用 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}

括号中的月份没有给出预期的结果。

带有 plain.bst 的 BibTeX 示例


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}

biblatex 示例与 Biber


尽管 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)

相关内容