這個問題是關於遇到的副作用這個答案。避免這種副作用的一種方法是不使用 biber,但bibtool -biblatex
如中所述這個答案。
我用來biber --tool
自動刪除.bib 檔案中 biblatex 條目中的abstract
、review
、groups
和等欄位。file
這樣做的一個副作用是所有非標準欄位似乎也被刪除,我想防止這種情況發生。這是一個最小的例子:
這是 .bib 檔案中的條目mybib.bib
:
@Thesis{Author_18_TheThesis,
author = {Mr Author},
title = {The Thesis},
type = {Doctoral Dissertation},
institution = {Department of Documents, University of Stackexchange},
year = {2018},
abstract = {This is the abstract.},
file = {:author/Author_18_TheThesis.pdf:PDF},
review = {This is the review.},
groups = {publications},
ispreprintpublic = {true},
}
這是clean-bibfiles.conf
設定檔biber --tool
:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_fieldcase>lower</output_fieldcase>
<output_indent>2</output_indent>
<output_align>true</output_align>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map map_overwrite="1">
<map_step map_field_set="abstract" map_null="1"/>
<map_step map_field_set="review" map_null="1"/>
<map_step map_field_set="groups" map_null="1"/>
<map_step map_field_set="file" map_null="1"/>
</map>
</maps>
</sourcemap>
</config>
運行biber --tool --configfile=clean-bibfiles.conf mybib.bib
將產生一個mybib_bibertool.bib
包含此 biblatex 條目的檔案:
@thesis{Author_18_TheThesis,
author = {Author, Mr},
institution = {Department of Documents, University of Stackexchange},
date = {2018},
title = {The Thesis},
type = {Doctoral Dissertation},
}
非標準欄位ispreprintpublic
已從條目中刪除。準確地說,即使groups
和review
字段不在來源映射中,它們也會被刪除,因為它們也是非標準字段或分別從文章類型「借用」。如何防止使用時自動剝離此類欄位biber --tool
?
1參見例如“2.1.1 常規類型”和“4.2.4.1 通用字段”biblatex 文檔。
答案1
事實上,biber
不處理不屬於資料模型的字段,因此如果您的資料來源具有非標準字段或條目類型,則必須提供biber
包含它們的資料模型。
但是,在繼續執行此任務之前,最好先了解您需要的預設資料模型中實際缺少什麼。您可以使用以下--validate-datamodel
選項來做到這一點:
biber --tool --validate-datamodel mybib.bib
在包含您的該條目的 .bib 檔案中,會出現以下警告:
WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'review' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'groups' invalid in data model - ignoring
WARN - Datamodel: Entry 'Author_18_TheThesis' (mybib.bib): Field 'ispreprintpublic' invalid in data model - ignoring
這讓您準確地知道必須將 fields review
、groups
和包含ispreprintpublic
到資料模型中。
(當然,將review
和添加groups
到資料模型中,然後將它們放入來源映射中並不是「通常的」做法。我在這裡這樣做只是為了通用性和程序性。)
要設定您的自訂biber-tool.conf
文件(您稱之為它clean-bibfiles.conf
,讓我們保持這種方式,但一般來說,可以透過此過程實現其他操作),您必須調整資料模型以包含非標準的行組內的字段<fields>...</fields>
。在您的情況下(假設這裡這些是「文字」類型欄位):
<field fieldtype="field" datatype="literal">review</field>
<field fieldtype="field" datatype="literal">groups</field>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
並且,在群組內<entryfields><entrytype>thesis</entrytype>...</entryfields>
添加:
<field>review</field>
<field>groups</field>
<field>ispreprintpublic</field>
結果clean-bibfiles.conf
應該是:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<output_fieldcase>title</output_fieldcase>
<output_indent>2</output_indent>
<output_align>true</output_align>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map map_overwrite="1">
<map_step map_field_set="abstract" map_null="1"/>
<map_step map_field_set="review" map_null="1"/>
<map_step map_field_set="groups" map_null="1"/>
<map_step map_field_set="file" map_null="1"/>
</map>
</maps>
</sourcemap>
<datamodel>
<fields>
<field fieldtype="field" datatype="literal">review</field>
<field fieldtype="field" datatype="literal">groups</field>
<field fieldtype="field" datatype="literal">ispreprintpublic</field>
</fields>
<entryfields>
<entrytype>thesis</entrytype>
<field>review</field>
<field>groups</field>
<field>ispreprintpublic</field>
</entryfields>
</datamodel>
</config>
使用此配置文件,命令:
biber --tool --validate-datamodel --configfile=clean-bibfiles.conf mybib.bib
將mybib_bibertool.bib
根據需要輸出條目:
@Thesis{Author_18_TheThesis,
Author = {Author, Mr},
Institution = {Department of Documents, University of Stackexchange},
Date = {2018},
Ispreprintpublic = {test},
Title = {The Thesis},
Type = {Doctoral Dissertation},
}
若要檢查預設資料模型和配置,您可以使用下列命令找到預設資料模型和配置的位置biber-tool.conf
:
biber --tool-config
這可能不是特別簡單。但是,引用PLK的話評論上圖:“在工具模式下使用資料模型的好處超過了此類問題。”