![为什么 biber 仍然抱怨 \DeclareSourceMap 删除的字段内容?](https://linux22.com/image/350482/%E4%B8%BA%E4%BB%80%E4%B9%88%20biber%20%E4%BB%8D%E7%84%B6%E6%8A%B1%E6%80%A8%20%5CDeclareSourceMap%20%E5%88%A0%E9%99%A4%E7%9A%84%E5%AD%97%E6%AE%B5%E5%86%85%E5%AE%B9%EF%BC%9F.png)
已经出现了一些关于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 只有在读取字段并了解其内容后才能开始操作字段。
只有在进行诸如名称和日期处理之类的高级解析之后才会发生。
这样做的结果是,由于警告本身的性质,如果不在.bib
Biber 读取它之前更改文件,您就无法避免它。