Personalizando `labeldate` em `labelalpha` usando biblatex

Personalizando `labeldate` em `labelalpha` usando biblatex

Como posso personalizar os nomes e a parte do ano do labelalphacampo separadamente? Por exemplo, quero a parte do nome em versalete, enquanto o número que representa o ano em algarismos antigos.

Resultado desejado e atual do MWE.

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}

Responder1

A etiqueta alfabética é produzida pela Biber e repassada biblatexno .bblarquivo. biblatexnão tem realmente uma noção do que a etiqueta é composta e só vê a etiqueta completa, então a formatação deve ser ajustada na criação da etiqueta.

Podemos modificar o formato do rótulo \DeclareLabelalphaTemplatee aplicar a formatação nele. Mas temos que levar em conta que as definições dos rótulos são gravadas no .bcfarquivo, o que torna complicado adicionar macros à definição, já que elas geralmente são expandidas ao gravar em arquivos. Definitivamente não é isso que queremos aqui. Para evitar a expansão, precisamos de um pouco de \stringdefinição, os colchetes para os argumentos são ainda mais complicados, eles precisam \@charlbe \@charrb(vejaEscrevendo { e } em um arquivo com LaTeX). Podemos evitar algumas dores de cabeça para macros mais complexas se definirmos duas macros auxiliares para formatar as partes do rótulo.

Com

\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}

o .bblcontém

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

e junto com as definições de \mklabelalphanamee \mklabelalphayearproduz

rótulo alfabético "SR98" "SR" está em versalete verde, "98" em algarismos vermelhos antigos

informação relacionada