使用 biblatex/biber 时 bib 输入字段中的百分号错误

使用 biblatex/biber 时 bib 输入字段中的百分号错误

我尝试使用biblatex(v1.5a) 和biber(v0.9.3) 来代替 BibTeX,但我遇到了 bib 条目的问题,其中摘要包含百分号。在这种情况下,文件中的bbl相应条目将有一行带有\field{abstract}{ ...% ...}百分号,导致引号无法关闭。并pdflatex抱怨错误“参数失控”(请参阅​​下面的错误消息和最小示例)。

biblatex所以我的问题是:由于我的 LaTeX 文档中不需要它们,我怎样才能忽略摘要条目(就像 BibTeX 那样),或者告诉biblatex它们自动添加转义字符?

或者我这里遗漏了什么?任何帮助都非常感谢!谢谢。

错误信息是:

Runaway argument?
{Limit Cycle Walkers are bipeds that exhibit a stable cyclic gait wit\ETC.
! File ended while scanning use of \field.
<inserted text> 
                \par 
l.51 \begin{document}

! Undefined control sequence.
<argument> \blx@bbl@data 

这是一个最小的工作示例:

\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[american]{babel}
\usepackage{graphicx}
\usepackage{amsmath} 
\usepackage{booktabs}
\usepackage[citestyle=authoryear,%numeric-comp, 
bibstyle=authoryear,%numeric
backend=biber,
natbib=true,
hyperref=false]{biblatex}
\bibliography{myref}
\listfiles
\begin{document}
 adsf asdf asdf asdf asdf asdf  asdf
\citep{Hobbelen2008b}

\printbibliography
\end{document}

相应的冲突条目(摘要缩写)如下:

@ARTICLE{Hobbelen2008b,
  author = {Hobbelen, D.G.E. and Wisse, M.},
  title = {{Ankle Actuation for Limit Cycle Walkers}},
  journal = {The International Journal of Robotics Research},
  year = {2008},
  volume = {27},
  pages = {709-735},
  number = {6},
  abstract = {Limit Cycle Walkers are bipeds that exhibit a stable ... by at  least 60%, without increasing ...
    of 5% of its leg length, while walking efficiently at a mechanical
    cost of transport of 0.09.}
}

(其他一些软件包版本:etoolboxv2.1、logreqv1.0)

答案1

从 biber 0.9.4/biblatex 1.6 开始,您可以定义用户指定的字段和条目类型映射。一种特殊情况是,您可以将字段映射到 null,这实际上会将它们从输入流中完全删除。因此,例如,如果您只想忽略 bibtex 数据源中的所有 ABSTRACT 字段(这些字段通常是从自动化系统导出时不需要的特殊字符的来源),您可以将其放入 biber.conf 中:

<map>
  <bibtex>
   <globalfield>
     ABSTRACT BMAP_NULL
   </globalfield>
  </bibtex>
</map>

这样做的好处是您不必更改数据源本身,如果数据源是自动生成的并且您无法控制它,那么这样做就很好了。您还可以忽略/仅映射某些条目类型中的字段。请参阅 0.9.4 biber 手册,第 2.1.1 节。

编辑:配置文件格式将在 Biber 0.9.8 中发生变化,因为当前格式限制太多。映射将不会太混乱。以下是新格式的相同解决方案:

<config>
  <sourcemap>
    <maps datatype="bibtex" map_overwrite="1">
      <map>
        <map_step map_field_set="ABSTRACT" map_null="1"/>
      </map>
    </maps>
  </sourcemap>
</config>

使用最新版本的biblatex和 Biber,您可以

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldset=abstract, null]
    }
  }
}

到你的序言中以获得相同的结果。

答案2

您的第二个请求——自动为百分号添加转义字符——是不可能的。引用自biber 手册

[P]请注意,biber 将不是 尝试净化数据源的内容 bibtex。也就是说,不要指望它自动转义在 TITLE 字段等中找到的任何 TeX 特殊字符(如“&”或“%”)。在某些情况下,它在早期版本中会这样做,但从 0.9 版开始,它不再这样做,因为它充满了问题,并导致不同数据源类型之间的期望和行为不一致。在您的bibtex数据源中,请确保您的条目是合法的 TeX 代码。

答案3

您必须在 biber.conf 文件中获取此代码。它对我来说非常有效:

    <config>
  <sourcemap>
    <maps datatype="bibtex" map_overwrite="1">
      <map>
        <map_step map_field_source="decision" map_field_target="USERA"/>
        <map_step map_field_source="sign" map_field_target="USERB"/>
        <map_step map_field_source="officialvolume" map_field_target="USERC"/>
        <map_step map_field_source="officialpages" map_field_target="USERD"/>
        <map_step map_field_source="journalyear" map_field_target="USERE"/>
        <map_step map_field_source="decisionname" map_field_target="USERF"/>
      </map>
    </maps>
  </sourcemap>
</config>

相关内容