工具模式下的 Biber:如何使用 map_foreach 和 $MAPLOOP?

工具模式下的 Biber:如何使用 map_foreach 和 $MAPLOOP?

我正在尝试在工具模式下使用 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.bibsource_bibertool.bib

@ARTICLE{key1,
  KEYWORDS = {RG;Group A},
  USERA = {A},
}

@ARTICLE{key2,
  KEYWORDS = {RG;Group A;Group B},
  USERA = {A, B},
}

所以我真的不知道哪里出了问题。你能报告一下这个小改动是否有帮助吗?如果没有,我唯一能想到的就是版本过时了(但这只是一种不太有想象力的猜测)。你使用的是哪个版本的 biber?

相关内容