为什么 biber 仍然抱怨 \DeclareSourceMap 删除的字段内容?

为什么 biber 仍然抱怨 \DeclareSourceMap 删除的字段内容?

已经出现了一些关于biblatex摘要等字段中特殊字符的处理的问题(例如输出不需要),参见使用 biblatex/biber 时 bib 输入字段中的百分号错误

一个常见的答案是使用源映射机制来biblatex删除这些字段。

但是,即使在一个非常简单的例子上尝试这个,biber也会删除该字段(参见的输出biber --debug),

[314] bibtex.pm:727> DEBUG - Source mapping (type=user, key=test):
Deleting field 'abstract'

但仍然抱怨该字段的内容。

我的问题是,是否有办法解决此类问题,或者修改\DeclareSourceMap是否为时已晚?还有其他解决方案吗(在 之内biblatex)?

\begin{filecontents}{ex.bib}
  @book{test,
   author = {Mustermann, Max},
   title = {Example},
   abstract = {A maybe longer text with a = b or
               c = d and other special characters.}
 }
 \end{filecontents}
 \begin{filecontents}{biblatex.cfg}
  \DeclareSourcemap{
     \maps[datatype=bibtex]{
        \map[overwrite]{%
           \step[fieldset=abstract,null]%
         }%
     }%
  }%
 \end{filecontents}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[]{biblatex}
\addbibresource{ex.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

答案1

目前没有办法绕过这个警告。它已经出现在“输入”阶段,Biber 只收集每个字段的数据。此时 Biber 唯一需要做的就是保存字段名称及其内容。

由于字段名称及其内容通常用 分隔,=而字段内容要么是裸的,要么用引号或花括号括起来,并在其顶部加上逗号,因此=新行中的 看起来对 Biber 来说是可疑的,并且您会收到警告,提示您可能忘记了某些内容。

也许 Biber 在这里警告你可能创建了一个失控字符串有点过分了。请注意,in=a = b可以的,但 fromc = d才是你示例中的邪恶之物。

在输入阶段应用源映射之后。毕竟,Biber 只有在读取字段并了解其内容后才能开始操作字段。

只有在进行诸如名称和日期处理之类的高级解析之后才会发生。

这样做的结果是,由于警告本身的性质,如果不在.bibBiber 读取它之前更改文件,您就无法避免它。

相关内容