![工具模式下的 Biber:如何使用 map_foreach 和 $MAPLOOP?](https://linux22.com/image/369070/%E5%B7%A5%E5%85%B7%E6%A8%A1%E5%BC%8F%E4%B8%8B%E7%9A%84%20Biber%EF%BC%9A%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20map_foreach%20%E5%92%8C%20%24MAPLOOP%EF%BC%9F.png)
我正在尝试在工具模式下使用 biber 操作 bibtex 文件:给定源文件 source.bib:
@article{key1,
group = {A}
}
@article{key2,
group = {A, B}
}
我需要制作:
@article{key1,
group = {A},
keywords = {RG;Group A}
}
@article{key2,
group = {A, B},
keywords = {RG;Group A; Group B}
}
我使用配置文件 group.conf 输入“biber --tool --configfile=group.conf source.bib”:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex" level="user">
<map map_overwrite="1">
<map_step map_field_source="group" map_final="1"/>
<map_step map_field_set="keywords" map_field_value="RG" map_append="1"/>
</map>
<map map_overwrite="1" map_foreach="group">
<map_step map_field_set="keywords" map_field_value=";Group $MAPLOOP" map_append="1"/>
</map>
</maps>
</sourcemap>
</config>
我得到了:
@ARTICLE{key1,
GROUP = {A},
KEYWORDS = {RG;Group $MAPLOOP},
}
@ARTICLE{key2,
GROUP = {A, B},
KEYWORDS = {RG;Group $MAPLOOP},
}
有人能告诉我我哪里做错了吗?
答案1
评论太长,因此以答案形式发布。
我无法重现您的结果。我得到了两个不同之处:1 -$MAPLOOP
确实像宣传的那样扩展了;2 -group
字段丢失了,我不确定为什么,但我想这是因为这个字段不是数据模型的一部分。
我可以通过以下设置实现您想要的结果:
souce.bib
(用usera
代替group
):
@article{key1,
usera = {A}
}
@article{key2,
usera = {A, B}
}
group.conf
:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex">
<map map_overwrite="1">
<map_step map_field_source="usera" map_final="1"/>
<map_step map_field_set="keywords" map_field_value="RG" map_append="1"/>
</map>
<map map_overwrite="1" map_foreach="usera">
<map_step map_field_set="keywords" map_field_value=";Group $MAPLOOP" map_append="1"/>
</map>
</maps>
</sourcemap>
</config>
结果biber --tool --configfile=group.conf source.bib
是source_bibertool.bib
:
@ARTICLE{key1,
KEYWORDS = {RG;Group A},
USERA = {A},
}
@ARTICLE{key2,
KEYWORDS = {RG;Group A;Group B},
USERA = {A, B},
}
所以我真的不知道哪里出了问题。你能报告一下这个小改动是否有帮助吗?如果没有,我唯一能想到的就是版本过时了(但这只是一种不太有想象力的猜测)。你使用的是哪个版本的 biber?