我想扩展的biber
数据模型,即我想biber
接受诸如review
或之类的字段owner
作为所有条目类型的有效输入字段。
(注:这是不是关于在文档中使用这些字段的数据,我也不想将自定义字段映射到现有字段例如usera
或customa
。如果您想知道我为什么问这个问题,请参阅下文(“背景”)。
在工具模式下使用,我通过以下方式biber
扩展了默认配置文件(用找到):biber --tool-conf
<config>
<!-- skipped 383 lines -->
<datamodel>
<!-- skipped "constants" and "entrytypes" -->
<fields>
<!-- skipped all predefined fields -->
<field fieldtype="field" datatype="literal">owner</field>
<field fieldtype="field" datatype="literal">review</field>
</fields>
<entryfields>
<field>owner</field>
<field>review</field>
<!-- skipped remainder of file -->
</entryfields>
</datamodel>
</config>
我完整修改版已上传biber.conf
至 pastebin.com。
据我所知,这是“有效的”,即biber --tool input.bib
用这个运行input.bib
@REPORT{Self2016,
YEAR = {2016},
AUTHOR = {Self, My},
TITLE = {The title},
OWNER = {Me},
REVIEW = {Important stuff.}
}
不会通过修改配置文件来删除review
和字段(而默认配置会删除这些字段)。owner
我的问题是: 为什么这有效吗?我或多或少通过反复试验找到了这个解决方案。我想添加<field ...>
in<fields>
表示biber
这样的字段可能存在。实际上,仅此配置扩展即可发挥作用。我进一步假设下面的条目<entryfields>
使新字段成为全部条目类型。如果我跳过此部分,则biber
当我使用 调用它时会出现错误--validate-datamodel
。
你能告诉我我的假设是否正确,并帮助我理解在哪里可以找到这个比伯或者比布拉特克斯手册?我认为biblatex
手册中的 §4.5.4 非常相关,但是有没有文档说明那里记录的 LaTeX 命令与 XML 结构有何关系biber.conf
?
此外,这是扩展数据模型的正确方法吗?还是我做错了,但测试用例太简单而无法揭示这一点?
背景:我使用 JabRef 来管理我的参考文献。有时,我会使用 JabRef 的“审阅”选项卡来注释条目。这些注释保存在review
相应条目的字段中。有时,我会biber
在 BIB 文件上运行工具模式,以便获得干净的格式、排序并应用一些其他转换。这在过去很有效,但从 biber 2.6 开始,biber 会丢弃自定义条目字段。这是我报告的内容Github 上@plk 建议我扩展数据模型。
答案1
您的假设是正确的。字段元素描述了允许的字段。Biber 使用它来决定是否允许该字段。数据模型的其他方面用于验证。.conf
文件数据模型格式并没有真正记录下来,因为人们很少在工具模式下使用自定义数据模型。用于数据模型操作的 biblatex 宏将您看到的 XML 写入文件.bcf
(但带有bcf:
命名空间)。
答案2
我遇到了完全相同的问题,而且我真的不想维护我自己的 Biber 配置文件版本。我注意到在默认数据模型中,有许多我从未使用过的字段定义,包括usera
等userb
。lista
所以listb
我的解决方法是将我的自定义字段(在本例中是以 开头的字段OPT
,我想保留这些字段)重命名为这些预定义字段,在工具模式下运行 Biber,然后将它们重命名回来。这是一个执行此操作的小 Bash 脚本:
# Define replacements (each will be prefixed with 'OPT')
FIND=(address booktitle doi editor isbn issn location month note url)
REPL=(usera userb userc userd usere userf lista listb listc listd)
IXS=`seq 0 $((${#FIND[*]} - 1))`
# Input and output file
FILE=refs.bib
# Replace forward
for i in $IXS; do
sed -i '' s/OPT${FIND[$i]}/${REPL[$i]}/ $FILE
done
# Biber
biber --tool --output-file=$FILE $FILE
# Replace back
for i in $IXS; do
sed -i '' s/${REPL[$i]}/OPT${FIND[$i]}/ $FILE
done