我正在尝试使用 Bibtool 根据某些字段标准从参考书目中排除(过滤掉)一系列条目。
Bibtool 提供了一条select.by.non.string
规则,如果书目条目在其某个字段中包含某个字符串,则会将其排除。
例如,对于具有以下条目的给定 bib 文件:
@misc{foo19,
author = {Foo, John},
title = {Travel Diary},
year = {2019},
publisher = {Bar Publishing}
}
@misc{smith20,
author = {Smith, Mary},
title = {New Years Resolutions},
year = {2020}
publisher = {Bar Publishing}
}
@misc{foo20,
author = {Foo, John},
title = {Isolation},
year = {2020}
publisher = {Pandemic Press}
}
并使用以下资源文件调用 bibtool:
select.by.string.ignored {"{}"}
select.case.sensitive {off}
select.by.non.string { title "Travel Diary" }
将导致输出不包括任何标题为“旅行日记”的条目,在这种情况下,结果书目为:
@misc{smith20,
author = {Smith, Mary},
title = {New Years Resolutions},
year = {2020}
publisher = {Bar Publishing}
}
@misc{foo20,
author = {Foo, John},
title = {Isolation},
year = {2020}
publisher = {Pandemic Press}
}
到目前为止,一切都很好。但是,一旦资源文件中包含多个这样的规则,这种行为就会出现问题。在当前 Bibtool 手册的第 34 页(第 A.9.2 节)中,它指出
如果提供了多条规则,则选择符合其中一条规则的任何条目。因此,不同的规则可作为备选方案。
我期望的是,首先匹配的规则适用于该给定条目,但事实并非如此。如果将第二条规则添加到资源文件中,如下所示:
select.by.string.ignored {"{}"}
select.case.sensitive {off}
select.by.non.string { title "Travel Diary" }
select.by.non.string { title "Isolation" }
它不会过滤掉包含“旅行日记”和“隔离”标题的条目,而是完全不过滤掉任何书目条目;完整的原始输入书目会返回,并且不会出现任何 Bibtool 错误。
此外,即使在单个select.by.non.string
规则内指定多个字段,我也会得到相同的结果。
我只想根据一系列标准排除各种条目,这应该是一个相当简单的练习。这是错误的规则/工具吗?我做错了吗?其他人如何在不诉诸剪切和粘贴的情况下完成此任务?
答案1
您可以使用正则表达式来实现这一点。与字符串选项类似,可以select
包含与正则表达式匹配的条目,也select.non
可以排除与表达式匹配的条目。
在正则表达式中,竖线|
用作“或”运算符。在 Bibtool 中,此字符需要用反斜杠转义,如手动的在第32页。
资源文件:
select.by.string.ignored {"{}"}
select.case.sensitive {off}
select.non { title "Travel Diary\|Isolation" }