Настройка `labeldate` в `labelalpha` с помощью biblatex

Настройка `labeldate` в `labelalpha` с помощью biblatex

Как можно настроить имена и часть года в labelalphaполе по отдельности? Например, я хочу, чтобы часть имени была заглавными буквами, а число, представляющее год, — цифрами старого стиля.

Желаемый и текущий результат MWE.

МВЭ:

\documentclass{article}

\usepackage[style=alphabetic]{biblatex}
\addbibresource{biblatex-examples.bib}

% Using colors to clarify
\usepackage{xcolor}

\DeclareFieldFormat{labelalpha}{\textsc{\oldstylenums{\MakeLowercase{#1}}}}

% None of the following works :-(
\DeclareFieldFormat{labelname}{\textcolor{green}{#1}}
\DeclareFieldFormat{labelnumber}{\textcolor{red}{#1}}
\DeclareFieldFormat{labelyear}{\textcolor{red}{#1}}
\DeclareFieldFormat{labeldate}{\textcolor{red}{#1}}
\DeclareFieldFormat{labeldateparts}{\textcolor{red}{#1}}

\begin{document}
Desired: [\textcolor{green}{\textsc{sr}}\oldstylenums{\textcolor{red}{98}}]

Current: \cite{sigfridsson}

\printbibliography
\end{document}

решение1

Буквенная метка создается Biber и передается biblatexв .bblфайл. biblatexBiber на самом деле не имеет представления о том, из чего состоит метка, и видит только полную метку, поэтому форматирование приходится втискивать при создании метки.

Мы можем изменить формат метки с помощью \DeclareLabelalphaTemplateи применить форматирование там. Но мы должны учитывать, что определения меток записываются в .bcfфайл, что усложняет добавление макросов в определение, поскольку они обычно расширяются при записи в файлы. Это определенно не то, что нам нужно здесь. Чтобы избежать расширения, нам нужно довольно много \stringв определении, фигурные скобки для аргументов еще сложнее, им нужны \@charlbи \@charrb(см.Запись { и } в файл с помощью LaTeX). Мы можем избежать некоторых проблем с более сложными макросами, если определим два вспомогательных макроса для форматирования частей метки.

С

\documentclass{article}

\usepackage[style=alphabetic]{biblatex}
\addbibresource{biblatex-examples.bib}

% Using colors to clarify
\usepackage{xcolor}

\newcommand*{\mklabelalphaname}[1]{\color{green}{\textsc{#1}}}
\newcommand*{\mklabelalphayear}[1]{\textcolor{red}{\oldstylenums{#1}}}

\makeatletter
\DeclareLabelalphaTemplate{
  \labelelement{
    \literal{\string\mklabelalphaname\@charlb}
  }
  \labelelement{
    \field[final]{shorthand}
    \field{label}
    \field[strwidth=3,strside=left,ifnames=1,lowercase=true]{labelname}
    \field[strwidth=1,strside=left,lowercase=true]{labelname}
  }
  \labelelement{
    \literal{\@charrb\string\mklabelalphayear\@charlb}
  }
  \labelelement{
    \field[strwidth=2,strside=right]{year}
  }
  \labelelement{
    \literal{\@charrb}
  }
}
\makeatother

\begin{document}
Desired: [\textcolor{green}{\textsc{sr}}\oldstylenums{\textcolor{red}{98}}]

Current: \cite{sigfridsson}

\printbibliography
\end{document}

содержит.bbl

\field{labelalpha}{\mklabelalphaname{sr}\mklabelalphayear{98}}

и вместе с определениями \mklabelalphanameи \mklabelalphayearпроизводит

буквенная маркировка "SR98" "SR" выполнена зелеными заглавными буквами, "98" - красными цифрами старого образца

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