我希望在biblatex
书目类型@online
。例如,
@online{abc,
author = {A Author},
title = {Some lengthy title that's awesome},
url = {http://tex.stackexchange.com},
breakurl = {}
}
我添加了一个breakurl
字段(可以为空),希望在使用online
书目驱动程序时以此为条件插入换行符。但是,即使遵循了将字段“tome”添加到 biblatex 条目。
这是一个简单的例子:
\documentclass{article}
\usepackage{filecontents,showframe}
\usepackage{biblatex}
\begin{filecontents*}{mybib.bib}
@online{abc,
author = {A Author},
title = {Some lengthy title that's awesome},
url = {http://tex.stackexchange.com},
breakurl = {}
}
\end{filecontents*}
\addbibresource{mybib.bib}
% https://tex.stackexchange.com/q/163303/5764
\DeclareDatamodelFields[type=field,datatype=verbatim,nullok=true]{breakurl}
\DeclareDatamodelEntryfields{breakurl}
\DeclareFieldFormat[online]{breakurl}{}% Used as a boolean variable
\begin{document}
\nocite{*}
\printbibliography
\end{document}
使用 进行编译后biber
,该breakurl
字段在 中不可见.bbl
:
\refsection{0}
\sortlist{nty}{nty}
\entry{abc}{online}{}
\name{author}{1}{}{%
{{hash=1318a946c3fffa54cec1130748f21c17}{Author}{A\bibinitperiod}{A}{A\bibinitperiod}{}{}{}{}}%
}
\strng{namehash}{1318a946c3fffa54cec1130748f21c17}
\strng{fullhash}{1318a946c3fffa54cec1130748f21c17}
\field{sortinit}{A}
\field{sortinithash}{b685c7856330eaee22789815b49de9bb}
\field{labelnamesource}{author}
\field{labeltitlesource}{title}
\field{title}{Some lengthy title that's awesome}
\verb{url}
\verb http://tex.stackexchange.com
\endverb
\endentry
\endsortlist
\endrefsection
添加新字段的动机是它很容易被biber
驱动程序忽略。另一种方法是将此类换行符作为源中字段条目的一部分@online
,但这是不可接受的。
更普遍的问题是:如何向现有biblatex
类型添加字段?
答案1
答案将字段“tome”添加到 biblatex 条目写于过去的美好时光,当时数据模型命令仍允许出现在文档序言中,从版本 2.9为了避免复杂化和不良行为,这些命令不能在序言中使用。答案现已修改以反映这一变化。
因此,如果您现在想使用数据模型命令,则必须使用数据模型文件( 或.dbx
)biblatex-dm.cfg
。您可以将此文件命名为werner.dbx
,其内容为
\DeclareDatamodelFields[type=field,datatype=verbatim,nullok=true]{breakurl}
\DeclareDatamodelEntryfields{breakurl}
然后您必须biblatex
使用该选项进行加载datamodel=werner
。
请注意,即使nullok=true
字段为空,也不能确保该字段出现在中,只是不会生成警告。因此不会使该字段出现在中。.bbl
breakurl = {},
breakurl
.bbl
您似乎想将breakurl
字段用作布尔值。使用 可以更轻松地完成此操作\DeclareEntryOption
。
\newtoggle{blx@breakurl}
\DeclareEntryOption{breakurl}[true]{%
\settoggle{blx@breakurl}{#1}%
% or whatever you need to do here
}
breakurl
定义一个设置切换的新选项。
在您的.bib
条目中您有
options = {breakurl},
切换至开启breakurl
。
你可以看看biblatex - 引用已故作者,如何从作者年份引文中删除逗号,apacites \nocitemeta 与 biblatex-apa 的功能:在作者姓氏中添加星号(元分析)和将 @inbook 中一个 BibLaTex 条目的“章节”更改为“附录”了解更多示例和用法\DeclareEntryOption
。
平均能量损失
\documentclass{article}
\usepackage{filecontents}
\usepackage{biblatex}
\begin{filecontents*}{\jobname.bib}
@online{abc,
author = {A Author},
title = {Some lengthy title that's awesome},
url = {http://tex.stackexchange.com},
options = {breakurl},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\newtoggle{blx@breakurl}
\togglefalse{blx@breakurl}
\DeclareEntryOption{breakurl}[true]{%
\settoggle{blx@breakurl}{#1}%
% or whatever you need to do here
}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
答案2
根据 biblatex 手册 ( texdoc biblatex
)
无法使用序言中的以下宏来添加到已加载的数据模型,因为序言是在 Biblatex 根据数据模型定义关键内部宏之后读取的。如果在文档中使用任何数据模型宏,它将被忽略并生成警告。
声明数据模型(以及新字段)的命令应该在配置文件中。
要将它们插入到文档中,可以使用filecontents
环境来生成配置文件。
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field,datatype=verbatim,nullok=true]{breakurl}
\DeclareDatamodelEntryfields{breakurl}
\DeclareFieldFormat[online]{breakurl}{}% Used as a boolean variable
\end{filecontents}