biblatex 将 bib 中的每个元素涂成不同的颜色

biblatex 将 bib 中的每个元素涂成不同的颜色

我正在使用 biblatex(带有 xelatex)。更具体地说,我使用 Zotero,然后从 Zotero 导出为 bib 格式。

一切正常,但我的书目只有黑色。这当然是正常现象……但是,我的目的是为了测试目的而将每个 bib 元素涂成不同的颜色,以确保我没有忘记 bib 的某个元素,例如“volume”。例如,我想应用以下颜色代码。

    volume -> dark blue
    pages -> turqoise
    url -> brown
    title -> red
    isbn -> yellow
    booktitle -> pink
    publisher -> orange
    author -> grey
    date -> black

是否有可能做到这一点 ?

答案1

您可以使用 更改字段的显示方式\DeclareFieldFormat

所以您要做的就是重新定义\DeclareFieldFormat相关字段。

不过,有几点需要注意,

  1. 并非所有“领域”都是字段.biblatex知道字段、列表和名称列表。这三种类型使用不同的\Declare...Format指令。因此,您需要知道字段的类型

  2. 如果您不想完全覆盖它,则需要知道原始定义。我在这里假设您仍然像往常一样想要斜体和引号,只有颜色应该改变。

    • 尽管可以使用xpatch's来修补字段格式\xpretofieldformat,但您需要知道是否有任何类型得到特殊处理。因为您只能修补一般格式或特定于类型的格式,但不能同时修补两者。

对于标准样式,大多数格式指令可以在 中找到biblatex.def

对于字段,这应该像搜索字段、复制\DeclareFieldFormat并在定义中添加\color{...}命令一样简单。不要忘记,\DeclareFieldFormat同一字段可能有多个 type-secipific(在标准样式中,您应该可以找到彼此相邻的字段)。

对于列表,您可以做类似的事情,但您需要搜索\DeclareListFormat。(见publisher下文。)

名称更复杂。首先,您必须找出要着色的名称使用哪种名称格式。使用中的author格式。并且定义为。因此,我们复制 的定义,将其称为,添加并从现在开始告诉 。sortnamestyle=authoryearsortnamefamily-given/given-familyfamily-given/given-familycoloured:family-given/given-family\colour{...}sortnamecoloured:family-given/given-family

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}

\usepackage[svgnames]{xcolor}

\DeclareFieldFormat{volume}{\color{DarkBlue}\bibstring{volume}~#1}% volume of a book
\DeclareFieldFormat[article,periodical]{volume}{\color{DarkBlue}#1}% volume of a journal

\DeclareFieldFormat{pages}{\color{Turquoise}\mkpageprefix[bookpagination]{#1}}

\DeclareFieldFormat{url}{\mkbibacro{URL}\addcolon\space\color{Brown}\url{#1}}

\DeclareFieldFormat{title}{\color{Red}\mkbibemph{#1}}
\DeclareFieldFormat
  [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
  {title}{\color{Red}\mkbibquote{#1\isdot}}
\DeclareFieldFormat
  [suppbook,suppcollection,suppperiodical]
  {title}{\color{Red}#1}

\DeclareFieldFormat{isbn}{\mkbibacro{ISBN}\addcolon\space \color{Yellow}#1}

\DeclareFieldFormat{booktitle}{\color{Pink}\mkbibemph{#1}}

\DeclareListFormat{publisher}{%
  \color{Orange}%
  \usebibmacro{list:delim}{#1}%
  #1\isdot
  \usebibmacro{list:andothers}}

\DeclareNameFormat{coloured:family-given/given-family}{%
  \color{Grey}%
  \ifnumequal{\value{listcount}}{1}
    {\ifgiveninits
       {\usebibmacro{name:family-given}
         {\namepartfamily}
         {\namepartgiveni}
         {\namepartprefix}
         {\namepartsuffix}}
       {\usebibmacro{name:family-given}
         {\namepartfamily}
         {\namepartgiven}
         {\namepartprefix}
         {\namepartsuffix}}%
     \ifboolexpe{%
       test {\ifdefvoid\namepartgiven}
       and
       test {\ifdefvoid\namepartprefix}}
       {}
       {\usebibmacro{name:revsdelim}}}
    {\ifgiveninits
       {\usebibmacro{name:given-family}
         {\namepartfamily}
         {\namepartgiveni}
         {\namepartprefix}
         {\namepartsuffix}}
       {\usebibmacro{name:given-family}
         {\namepartfamily}
         {\namepartgiven}
         {\namepartprefix}
         {\namepartsuffix}}}%
  \usebibmacro{name:andothers}}

\DeclareNameAlias{sortname}{coloured:family-given/given-family}

\begin{document}
\cite{sigfridsson,vizedom:related,westfahl:space,worman,geer,nussbaum,ctan}
\printbibliography
\end{document}

在此处输入图片描述

您可以在编译时使用 Biber 选项--validate-datamodel来帮助您检查您的条目是否符合数据模型。

相关内容