我创建了一些书目类型的别名,例如standard
is areport
或software
is online
。现在,当我在 bib 文件中使用这些类型并启用时--validate-datamodel
,我收到如下警告:
数据模型:条目“Spread”(thesis.bib):条目类型“software”的字段“url”无效
我怎样才能让 biber 再次对此感到高兴?有什么方法可以增强别名的数据模型吗?
平均能量损失
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{test.bib}
@standard{RFC4627,
date = {2006},
editor = {IETF},
number = {4627},
title = {The application/json Media Type for {JavaScript} Object Notation ({JSON})},
type = {RFC},
url = {http://www.ietf.org/rfc/rfc4627.txt},
urldate = {2016-09-08}
}
@software{Spread,
label = {Spread},
title = {The Spread Toolkit},
url = {http://www.spread.org/},
urldate = {2016-09-08}
}
\end{filecontents}
\usepackage[backend=biber,style=alphabetic]{biblatex}
\DeclareBibliographyAlias{software}{online}
\DeclareBibliographyAlias{standard}{report}
\bibliography{test}
\begin{document}
\nocite{*}
\printbibliography{}
% should still work
\printbibliography[heading=bibintoc,type=software,title={List of Software Packages}]{}
\end{document}
使用 latexmk 编译,内容如下latexmkrc
:
$pdf_mode = 1;
$pdflatex = 'pdflatex -shell-escape -interaction=nonstopmode';
$biber = 'biber --validate-datamodel %O %S';
答案1
正如解释的那样BibLaTeX 所指的条目类型别名关系究竟是什么?别名条目类型的格式应如何配置?定义的别名\DeclareBibliographyAlias
仅用于参考书目驱动程序。该别名仅供 访问biblatex
。特别是 Biber 不知道它。
你可以做
\DeclareDriverSourcemap[datatype=bibtex]{
\map{
\pertype{software}
\step[typesource=software, typetarget=online, final]
\step[fieldset=keywords, fieldvalue={,type:software}, append]
}
\map{
\pertype{standard}
\step[typesource=standard, typetarget=report, final]
\step[fieldset=keywords, fieldvalue={,type:standard}, append]
}
}
在所有意图和目的上,这将重新映射@software
到和@online
到@standard
(@report
因此您不能再选择type
)。为了解决这个问题,我们添加了关键字,使用关键字 给出前一种类型type:<type>
。
现在你的过滤不是type=<type>
,而是keyword = {type:<type>}
,即
\printbibliography[heading=bibintoc, keyword=type:software],
代替\printbibliography[heading=bibintoc, type=software]
。