Biblatex - 使用数据注释来格式化日期

Biblatex - 使用数据注释来格式化日期

在参考文献中,将属性字段放在括号中是很常见的。如果一本书没有印上日期,但我们恰好知道日期(因此它不是“不确定”也不是“大约”),我们可以通过将日期放在括号中来表示。

我想使用 biblatex 的数据注释功能来实现这一点。

我曾尝试使用\DeclareFieldFormat{date}\DeclareFieldFormat{urldate}biblatex.def建议这样做的可能性中),但注释的条件在此范围内无法识别,即使它是一个格式指令。那么我如何使用数据注释将日期放入括号中?

我知道我总是可以使用year = {[1933]},。但这里的问题是如何使用 biblatex 的数据注释功能来实现这一点(从而保留 biblatex 的高级日期功能)。

一位 MWE 表示:

\documentclass{article}

\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@article{gillies,
  author       = {Gillies, Alexander},
  title        = {Herder and the Preparation of {Goethe's} Idea of World Literature},
  journaltitle = {Publications of the English Goethe Society},
  date         = {1933},
  date+an      = {=attributed},
  series       = {newseries},
  volume       = {9},
  volume+an    = {=attributed},
  pages        = {46-67},
}
\end{filecontents}

\addbibresource{\jobname.bib}

% This works, but affects all dates
\DeclareFieldFormat{date}{\mkbibbrackets{#1}}
\DeclareFieldFormat{labeldate}{\mkbibbrackets{#1}}

% This doesn't work, for the conditional is not recognized
%\DeclareFieldFormat{date}{\iffieldannotation{attributed}{\mkbibbrackets{#1}}{#1}}
%\DeclareFieldFormat{labeldate}{\iffieldannotation{attributed}{\mkbibbrackets{#1}}{#1}}

% It works with the conditional for volume, for example
\DeclareFieldFormat[article]{volume}{\iffieldannotation{attributed}{\mkbibbrackets{#1}}{#1}}

\begin{document}

\autocite{gillies}

\printbibliography

\end{document}

答案1

date字段有点特殊。 Within\DeclateFieldFormat{date} biblatex不知道它正在处理哪个日期字段(这是因为日期不是通过 打印的,\printfield{date}而且实际上根本biblatex没有字段date,字段格式date只是与 一起使用\printtext),所以您不能使用,\iffieldannotation因为该命令依赖于检测当前正在处理的字段。biblatex还需要解析labeldate,这又增加了一层复杂性。

\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{gillies,
  author       = {Gillies, Alexander},
  title        = {Herder and the Preparation of {Goethe's} Idea of World Literature},
  journaltitle = {Publications of the English Goethe Society},
  date         = {1933},
  date+an      = {=attributed},
  series       = {newseries},
  volume       = {9},
  pages        = {46-67},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\makeatletter
\newcommand*{\ifdateannotation}[2]{%
  \def\blx@tempa{#1}%
  \ifcsundef{abx@field@\blx@tempa source}
    {}%
    {\letcs\blx@tempa{abx@field@\blx@tempa source}%
     \edef\blx@tempa{\blx@tempa date}}%
  \ifinlistcs{#2}{abx@annotation@field@\blx@tempa}}
\makeatother

\DeclareFieldFormat{date}{\ifdateannotation{date}{attributed}{\mkbibbrackets{#1}}{#1}}
\DeclareFieldFormat{labeldate}{\ifdateannotation{labeldate}{attributed}{\mkbibbrackets{#1}}{#1}}

\begin{document}
\autocite{gillies}
\printbibliography
\end{document}

在此处输入图片描述

相关内容