这个问题基本上是使用 biblatex/biber 时 bib 输入字段中的百分号错误但是,接受的解决方案(biber 配置文件设置为完全跳过抽象字段)不能让我满意,而且问题有点旧,所以可能发生了变化。
一方面,我希望能够在需要时使用摘要字段;另一方面,一些编辑器的导出工具通常会在摘要中包含未转义的“%”。有没有办法解决这个问题,而不需要手动或使用外部软件在 .bib 文件中进行替换?
(顺便说一句,我不明白 biber能即使包含“%”,也要跳过抽象字段,这证明在某些时候它不处于“忽略注释”的 LateX 模式,但是不能可靠地逃脱它 - 这纯粹是出于好奇,但既然我在问......)
如果需要,可以使用 MWE :(第一个 pdflatex 和 biber 编译将会起作用,因为连续的 pdflatex 将会失败并出现“失控参数?”)
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{filecontents}
\begin{filecontents}{biblio.bib}
@article{key1,
author="Ann Onymous",
journal="Some journal",
title="Title",
year="2017",
abstract={This abstract will fail because of an unescaped percent sign:
10\% is fine, 10% is not.},
}
\end{filecontents}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblio.bib}
\begin{document}
Citation: \parencite{key1}.
\printbibliography
\end{document}
答案1
biber 几乎从不处于“LaTeX 模式”。它是 perl 程序。它很容易删除完整的条目。biber 也不会因 % 而阻塞。但如果它不忽略它,整个条目最终会进入由 LaTeX 处理的文件中。然后 LaTeX 就会阻塞。
您可以使用源映射将 % 替换为 \%。但在我看来,这没有多大意义。如果您想在 LaTeX 中使用摘要,那么您无论如何都必须浏览文本以检查和更正排版,并将例如 - 更改为 -- 或类似 的路径C:\documents
。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{filecontents}
\begin{filecontents}{biblio.bib}
@article{key1,
author="Ann Onymous",
journal="Some journal",
title="Title",
year="2017",
abstract={This abstract will fail because of an unescaped percent sign:
10\% is fine, 10% is not.},
}
\end{filecontents}
\usepackage[backend=biber]{biblatex}
\addbibresource{biblio.bib}
\DeclareSourcemap{
\maps[datatype = bibtex]{
\map{
\step[fieldsource = abstract,
match = \regexp{([^\\])\%},
replace = \regexp{$1\\\%}]
}
}
}
\begin{document}
Citation: \parencite{key1}.
\printbibliography
\end{document}