如何向现有的 biblatex 类型添加字段?

如何向现有的 biblatex 类型添加字段?

我希望在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为了避免复杂化和不良行为,这些命令不能在序言中使用。答案现已修改以反映这一变化。

因此,如果您现在想使用数据模型命令,则必须使用数据模型文件( 或.dbxbiblatex-dm.cfg。您可以将此文件命名为werner.dbx,其内容为

\DeclareDatamodelFields[type=field,datatype=verbatim,nullok=true]{breakurl}
\DeclareDatamodelEntryfields{breakurl}

然后您必须biblatex使用该选项进行加载datamodel=werner

请注意,即使nullok=true字段为空,也不能确保该字段出现在中,只是不会生成警告。因此不会使该字段出现在中。.bblbreakurl = {},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}

相关内容