![使用 biblatex/biber 时 bib 输入字段中的百分号错误](https://linux22.com/image/238522/%E4%BD%BF%E7%94%A8%20biblatex%2Fbiber%20%E6%97%B6%20bib%20%E8%BE%93%E5%85%A5%E5%AD%97%E6%AE%B5%E4%B8%AD%E7%9A%84%E7%99%BE%E5%88%86%E5%8F%B7%E9%94%99%E8%AF%AF.png)
我尝试使用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.}
}
(其他一些软件包版本:etoolbox
v2.1、logreq
v1.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>