BibLaTeX 中的自定义字段

BibLaTeX 中的自定义字段

我想允许在我的 .bib 条目中添加一个可选的自定义字段。我不需要将这些字段作为参考书目的一部分,但希望能够通过以下方式访问这些字段

\citefield{<entry-key>}{<custom-field-name>}

答案可能就在下面列出的参考资料的某个地方,但我最初的尝试适应\DeclareSourcemap\DeclareFieldFormat失败了。

参考:

代码:

\begin{filecontents}{mybib.bib}
@book{knuth1984texbook,
  title={The texbook},
  author={Knuth, D.E. and Knuth, A.D. and Bibby, D. and American Mathematical Society and Addison-Wesley Publishing Company and Addison-Wesley},
  isbn={9780201134483},
  lccn={85030845},
  series={Computers \& typesetting},
  url={https://books.google.com/books?id=hEYuAQAAIAAJ},
  year={1984},
  publisher={Addison-Wesley},
  myFieldA={Useful Book},
  myFieldB={on Shelf 4},
}
@book{goossens1994latex,
  title={The LaTeX Companion},
  author={Goossens, M. and Mittelbach, F. and Samarin, A.},
  isbn={9780201541991},
  lccn={lc93023150},
  series={Addison-Wesley series on tools and techniques for computer typesetting},
  url={https://books.google.com/books?id=54A3MuBzIrEC},
  year={1994},
  publisher={Addison-Wesley},
  myFieldA={Also Useful Book},
  myFieldB={on Shelf 5},
}
\end{filecontents}

%% -----------------

\documentclass{article}
\usepackage{biblatex}
\addbibresource{mybib.bib}

\begin{document}
    This should print ``Also Useful Book'':
    \citefield{goossens1994latex}{myFieldA}
\end{document}

答案1

假设您只需要几个字段,并且愿意稍微牺牲标记语义(用于引用),那么您可以使用“自定义字段”biblatex提供的功能(标准样式不使用它们,但如果您使用非标准字段,您可能必须检查它是否真的“空缺”)。

鉴于您在评论中提到您希望为字段指定一个自定义名称,可以使用 SourceMap 将值从自定义字段复制到 的biblatex数据模型中可用的字段之一。这意味着您可以在文件中使用自定义名称.bib,但在实际引用时,您仍然必须使用biblatex“知道”的字段。

这可能是这样的:

\begin{filecontents}[overwrite]{mybib.bib}
@book{knuth1984texbook,
  title={The texbook},
  author={Knuth, D.E. and Knuth, A.D. and Bibby, D. and American Mathematical Society and Addison-Wesley Publishing Company and Addison-Wesley},
  isbn={9780201134483},
  lccn={85030845},
  series={Computers \& typesetting},
  url={https://books.google.com/books?id=hEYuAQAAIAAJ},
  year={1984},
  publisher={Addison-Wesley},
  myFieldA={Useful Book},
  myFieldB={on Shelf 4},
}
@book{goossens1994latex,
  title={The LaTeX Companion},
  author={Goossens, M. and Mittelbach, F. and Samarin, A.},
  isbn={9780201541991},
  lccn={lc93023150},
  series={Addison-Wesley series on tools and techniques for computer typesetting},
  url={https://books.google.com/books?id=54A3MuBzIrEC},
  year={1994},
  publisher={Addison-Wesley},
  myFieldA={Also Useful Book},
  myFieldB={on Shelf 5},
}
\end{filecontents}

%% -----------------

\documentclass{article}
\usepackage{biblatex}
\addbibresource{mybib.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=myFieldA]
      \step[fieldset=usera, origfieldval]
      \step[fieldsource=myFieldB]
      \step[fieldset=userb, origfieldval]
    }
  }
}

\begin{document}
This should print ``Also Useful Book'':
\citefield{goossens1994latex}{usera}

This should print ``on Shelf 5'':
\citefield{goossens1994latex}{userb}
\end{document}

在此处输入图片描述

这种方法的优点是您不需要扩展数据模型,因此更简单。但是如果您确实需要在两侧使用自定义字段名称,那么据我所知,唯一的方法是扩展数据模型以包含您的字段。在这种情况下,规范答案是 @moewe 的答案:如何使用 BibLaTeX/Biber 创建全新的数据类型?

相关内容