我编写了一个小型 biber 配置文件 exper3.conf 来清理 .bib 文件。目标是按字母顺序排列和规范化各个条目。脚本是
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output-indent>2</output-indent>
<output_align>true</output_align>
<output_fieldcase>title</output_fieldcase>
<output_field_order>author,title</output_field_order>
<sortingtemplate name="tool">
<sort order="1">
<sortitem order="1">entrykey</sortitem>
</sort>
</sortingtemplate>
</config>
当我用这个命令行运行它时
biber --tool -O TexStackOutput.bib -g exper3.conf TexStackInput.bib
在此输入文件 TexStackInput.bib 上(请注意格式奇怪的行、无序的条目和无序的字段)
@XData{PHEnglewoodCliffs,
Ids = {PH:EnglewoodCliffs},
Publisher = {Prentice-Hall},
Location = {Englewood Cliffs NJ},
}
@Article{wombat2016,
Author = {Wombat, Walther and Koala, Klaus},
Title = {The true meaning of 42},
Date = {2016},
Journaltitle = {Journal of modern skepticism},
Keywords = {trusted},
}
@Book{WetherellEtudes,
Date = {1978},
Author= {Charles Wetherell},
Title = {Etudes For Programmers},
Xdata = {PH:EnglewoodCliffs},
}
输出是这个文件
@Xdata{PHEnglewoodCliffs,
Ids = {PH:EnglewoodCliffs},
Location = {Englewood Cliffs NJ},
Publisher = {Prentice-Hall},
}
@Book{WetherellEtudes,
Author = {Wetherell, Charles},
Title = {Etudes For Programmers},
Date = {1978},
}
@Article{wombat2016,
Author = {Wombat, Walther and Koala, Klaus},
Title = {The true meaning of 42},
Date = {2016},
Journaltitle = {Journal of modern skepticism},
Keywords = {trusted},
}
现在一切都整洁干净了……除了
Xdata 字段已从条目 WetherellEtudes 中删除。
如果我在命令行(或在 .conf 文件中)使用选项 --outputresolve,则 @XData 条目 PH:EnglewoodCliffs 中的数据将被正确复制,但 Xdata 字段仍会被删除。这正是我所期望的解决方案。
但是,我并不想为使用 biber 而解析或删除 Xdata 字段。我只想“整理”原始 .bib 文件,以便它(嗯,它是我在一个大项目中使用的非常大的兄弟文件)更容易操作和错误检查。
此外,这似乎是一个“错误”。如果没有办法将 Xdata 字段保留在 tidy 输出文件中,那么这似乎首先违背了 @XData 条目的目的。如果我想在 @XData 中进行更改并传播到其所有用法,该怎么办?我无法在 tidy 文件上执行此操作,因为 Xdata 字段已被解析或删除。我不想在原始输入上执行此操作;毕竟,它很脏,很难使用。工作流程强烈建议在输出经过测试和批准后,用“tidy”输出替换“脏”原始输出。如果 Xdata 字段在 tidy 结果中丢失,则无法进行此替换。
随着书目不断增长,我预计这个循环将会在这个项目期间重复多次。
我在 Mac 上使用 biber 2.18。