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