biblatex покрасьте каждый элемент нагрудника в свой цвет

biblatex покрасьте каждый элемент нагрудника в свой цвет

Я использую biblatex (с xelatex). Если быть точнее, я использую Zotero, а затем экспортирую из Zotero в формат bib.

Все работает отлично, но моя библиография только черного цвета. Конечно, это нормальное поведение... Однако моя цель — раскрасить каждый элемент нагрудника по-разному в целях тестирования, чтобы убедиться, что я не забыл какой-либо элемент нагрудника, например «объем». Например, я хотел бы применить следующий цветовой код.

    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{...}команды в определение. Не забывайте, что может быть несколько специфичных для типа \DeclareFieldFormats для одного и того же поля (в стандартных стилях вы должны найти их рядом друг с другом).

Для списков вы сделаете то же самое, но вам нужно будет искать \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которая поможет вам проверить, соответствуют ли ваши записи модели данных.

Связанный контент