在下面的 MWE 中,我显示我有一个书目条目,该条目%
在abstract
字段中嵌入了注释字符;虽然这可以通过bibtex
,但使用biblatex
/biber
会产生问题,因为 biber 会将字段的所有行压缩为.bbl
文件中的一行。因此,我使用biber.conf
文件来完全避免abstract
在.bbl
文件中输入字段:
\documentclass{article}
\usepackage[
bibencoding=utf8,
backend=biber,
natbib,
style=ieee,
isbn=true,
url=true,
defernumbers=true,
sorting=nyt,
]{biblatex}
\usepackage{filecontents}
\usepackage{trace}
\usepackage{hyperref}
\begin{filecontents*}{\jobname.bib}
@article {jo-audm08,
author = {Some Author},
title = {{Testing the title of a paper}},
url = {http://example.com/paper.pdf},
journal={Proceedings of Some Conference},
pages={123--127},
publisher = {example.com},
year={2008},
mycustomfield = {whatever},
lastaccessed = {Last Accessed: 13 April, 2009},
lastmodified = {Last Modified: 10/28/2008 14:46:42},
abstract = {%
In this paper, we would like to describe the employment of .. %
},
}
\end{filecontents*}
% http://tex.stackexchange.com/questions/32930/is-it-possible-to-suppress-a-specific-field-from-bibtex-bbl-in-biblatex/33309#33309
\begin{filecontents*}{biber.conf}
<config>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<map_step map_field_set="ABSTRACT" map_null="1"/>
</map>
</maps>
</sourcemap>
</config>
\end{filecontents*}
\addbibresource{\jobname.bib}
\newif\ifDoingSourcemap
\DoingSourcemapfalse
% \DoingSourcemaptrue % uncomment this
\ifDoingSourcemap
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=mycustomfield]
\step[fieldset=usera,origfieldval]
}
}
}
\DeclareFieldFormat{usera}{#1} % not mycustomfield
\fi
\begin{document}
Citing here: \cite{jo-audm08}
\printbibliography[sorting=none]
\end{document}
此 MWE 可以很好地编译pdflatex test.tex && biber test && pdflatex test.tex && pdflatex test.tex
。
现在,我想在我的书目条目中使用自定义字段mycustomfield
,并且为了处理它,我设置了一个映射到的字段\DeclareSourcemap
。因此,我取消注释该行并重新编译;但调用后的调用失败,并显示:mycustomfield
usera
biblatex
\DoingSourcemaptrue
pdflatex
biber
Runaway argument?
{\field {journaltitle}{Proceedings of Some Conference} \field {title}\ETC.
! File ended while scanning use of \field.
<inserted text>
\par
l.65 \begin{document}
...随后可以确认:
$ grep abstract test.bbl
\field{abstract}{% In this paper, we would like to describe the employment of .. %}
\field{abstract}{% In this paper, we would like to describe the employment of .. %}
... 随着 的启用\DeclareSourcemap
,biber.conf
可能会被忽略,并且该abstract
字段最终会出现在 中.bbl
,从而造成麻烦。
那么,我怎样才能\DeclareSourcemap
在我的 tex 文件中使用 ,以及已经设置的映射biber.conf
(在这种情况下,两者都abstract
在文件中忽略和未输入该字段.bbl
- 并使用mycustomfield
as usera
)?
答案1
尽管我仍然希望对 OP 中展示的干扰(biber.conf
和\DeclareSourcemap
之间)给出更为博学的答案,但我认为我已经设法解决了这个特殊情况。
在跌倒后biber/biblatex:\DeclareSourcemap 与 bcf 文件冲突?,并意识到biber.conf
实际上看起来像是在写\DeclareSourcemap
- 我在 OP MWE 中写了这个:
\ifDoingSourcemap
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=mycustomfield]
\step[fieldset=usera,origfieldval]
}
\map[overwrite]{
\step[fieldsource=abstract]
\step[fieldset=abstract,null]
}
}
}
\DeclareFieldFormat{usera}{#1} % not mycustomfield
\fi
...并且这编译得很好,并且基本上完成了biber.conf
以前所做的事情(abstract
从中消除字段.bbl
) - 因此biber.conf
似乎不再需要了(至少在这种情况下)。
答案2
这是一个错误。请立即在 Sourceforge 上尝试 biber 2.2 dev 版本。biber 2.2 可与 biblatex 3.0 一起使用。