我正在使用 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
相关字段。
不过,有几点需要注意,
并非所有“领域”都是字段.
biblatex
知道字段、列表和名称列表。这三种类型使用不同的\Declare...Format
指令。因此,您需要知道字段的类型如果您不想完全覆盖它,则需要知道原始定义。我在这里假设您仍然像往常一样想要斜体和引号,只有颜色应该改变。
- 尽管可以使用
xpatch
's来修补字段格式\xpretofieldformat
,但您需要知道是否有任何类型得到特殊处理。因为您只能修补一般格式或特定于类型的格式,但不能同时修补两者。
- 尽管可以使用
对于标准样式,大多数格式指令可以在 中找到biblatex.def
。
对于字段,这应该像搜索字段、复制\DeclareFieldFormat
并在定义中添加\color{...}
命令一样简单。不要忘记,\DeclareFieldFormat
同一字段可能有多个 type-secipific(在标准样式中,您应该可以找到彼此相邻的字段)。
对于列表,您可以做类似的事情,但您需要搜索\DeclareListFormat
。(见publisher
下文。)
名称更复杂。首先,您必须找出要着色的名称使用哪种名称格式。使用中的author
格式。并且定义为。因此,我们复制 的定义,将其称为,添加并从现在开始告诉 。sortname
style=authoryear
sortname
family-given/given-family
family-given/given-family
coloured:family-given/given-family
\colour{...}
sortname
coloured: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
来帮助您检查您的条目是否符合数据模型。