防止 biber 因摘要中的“%”字符而窒息?

防止 biber 因摘要中的“%”字符而窒息?

这个问题基本上是使用 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}

相关内容