尝试理解 renewbibmacro 和 DeclareFieldFormat 构造

尝试理解 renewbibmacro 和 DeclareFieldFormat 构造

我最近迁移到了,biblatex并试图了解调整参考书目中参考文献外观的多种可能性。例如,对于集合中具有特定条目的作品,我想更改其在参考书目中volume的外观。volume

我参与了renewbibmacro建设。因此,我在文档的序言中添加了

\renewbibmacro*{volume}{%
    \printtext{VOLUMEMACRO}\space\printfield{volume}%
}%

这没有产生任何结果,而使用 didDeclareFieldFormat却有效:

\DeclareFieldFormat{volume}{\printtext{VOLUMEDECLARE} #1}

但是,它不适用于volume中的字段article。当我使用renewbibmacrofor时author,它对 有效article

\renewbibmacro*{author}{%
    \printtext{anon}%
}

我搜索了这个论坛和biblatex手册,但找不到关于如何使用这些函数的简明概述renewbibmacroDeclareFieldFormat因此,我自己发布了这篇文章。所以我很想了解这种结构的用法,以及哪些字段可以通过这种方式更改,哪些字段不能通过这种方式更改。

表明MWEforDeclareFieldFormatvolume适用于collection,并且renewbibmacroforauthor有效:

\documentclass[10pt, english]{report}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,style=authoryear]{biblatex}

\begin{filecontents}{abib.bib}
@article{some:article:1964,
    author   = "Mister Smart",
    title    = {A very difficult narrative of sub-atomic particles in the diary of Louis XIV},
    journal  = {Journal for Advanced Thinking},
    volume   = "41",
    number   = "3",
    year     = "1964",
    pages    = "307--323"
}    
@collection{collection:mass:histroical:vol1,
    options      = useeditor,
    title     = {Collections of the Massachusetts Historical Society},
    volume    = {i},
    series    = {third series},
    address   = {Boston},
    year      = 1896,
    sorttitle = {Collections of the Massachusetts Historical Society},
    shorthand = {Collections MHS Vol.~1},
    publisher = {Massachusetts Historical Society}
}
\end{filecontents}

\addbibresource{./abib.bib}

\DeclareFieldFormat{volume}{\printtext{VOLUMEDECLARE} #1}

%\newbibmacro*{volume}{%
%  \printtext{VOLUMEMACRO}\space\printfield{volume}%
%}%

\renewbibmacro*{author}{%
  \printtext{anon}%
}

\begin{document}
Test ~\textcite{some:article:1964} and~\textcite{collection:mass:histroical:vol1}.
\printbibliography
\end{document}

答案1

你必须区分bibmacros、其field formatsbibdrivers

  • bibdrivers(文件 standard.bbx)是打印出不同条目的宏,其中每个条目类型(如书籍,文章;除了熟悉的)有自己的宏。
  • bibmacros 是 biblatex基本的宏,即为一个特定主题收集数据:如果没有给出作者,author则可能需要用该信息替换打印的信息。editor

  • 字段格式在较低级别上起作用。它们是为特定输入设置的字段(作者、标题、年份),而 bibmacros/bibdrivers 将它们拼凑在一起。您可以为所有条目类型全局设置字段格式,也可以仅为特定条目类型设置字段格式,即仅强调条目类型书籍的标题字段(只需将其设置在方括号中)。

对于您的 MWE/代码片段:

\renewbibmacro*{volume}{%
    \printtext{VOLUMEMACRO}\space\printfield{volume}%
}%

该代码片段不会执行任何操作,因为 a) 从未volume声明过宏,并且 b) 声明宏没有多大意义,因为它只打印出信息 + 基本字符串。

\DeclareFieldFormat{volume}{\printtext{VOLUMEDECLARE} #1}

这是正确的做法,因为volume场地...

:如果您希望所有条目类型都采用该格式,包括已经设置的格式,则必须使用带星号的版本覆盖所有现有格式:

\DeclareFieldFormat*{volume}{\printtext{VOLUMEDECLARE} #1}

下面的代码片段没有意义,因为它用您的anon字符串替换了所有作者信息:

\renewbibmacro*{author}{%
    \printtext{anon}%
}

相关内容