处理 biber.conf 和 biblatex 的 \DeclareSourcemap 之间的干扰?

处理 biber.conf 和 biblatex 的 \DeclareSourcemap 之间的干扰?

在下面的 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。因此,我取消注释该行并重新编译;但调用后的调用失败,并显示:mycustomfielduserabiblatex\DoingSourcemaptruepdflatexbiber

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 .. %}

... 随着 的启用\DeclareSourcemapbiber.conf可能会被忽略,并且该abstract字段最终会出现在 中.bbl,从而造成麻烦。

那么,我怎样才能\DeclareSourcemap在我的 tex 文件中使用 ,以及已经设置的映射biber.conf(在这种情况下,两者都abstract在文件中忽略和未输入该字段.bbl- 并使用mycustomfieldas 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 一起使用。

相关内容