Personalizando `labeldate` en `labelalpha` usando biblatex

Personalizando `labeldate` en `labelalpha` usando biblatex

¿Cómo puedo personalizar los nombres y la parte del año del labelalphacampo por separado? Por ejemplo, quiero la parte del nombre en versales, mientras que el número representa el año en números de estilo antiguo.

Resultado deseado y actual del 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}

Respuesta1

Biber produce la etiqueta alfabética y se pasa al biblatexarchivo .bbl. biblatexRealmente no tiene una idea de de qué está compuesta la etiqueta y solo ve la etiqueta completa, por lo que el formato debe ajustarse en el momento de la creación de la etiqueta.

Podemos modificar el formato de la etiqueta \DeclareLabelalphaTemplatey aplicar formato allí. Pero debemos tener en cuenta que las definiciones de las etiquetas se escriben en el .bcfarchivo, lo que dificulta agregar macros a la definición, ya que normalmente se expanden al escribir en archivos. Definitivamente eso no es lo que queremos aquí. Para evitar la expansión necesitamos una buena cantidad de \stringen la definición, las llaves de los argumentos son aún más complicadas, necesitan \@charlby \@charrb(verEscribir { y } en un archivo con LaTeX). Podemos evitar algunos dolores de cabeza con macros más complejas si definimos dos macros auxiliares para formatear las partes de la etiqueta.

Con

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

el .bblcontiene

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

y junto con las definiciones de \mklabelalphanamey \mklabelalphayearproduce

etiqueta alfabética "SR98" "SR" está en versitas verdes, "98" en números rojos de estilo antiguo

información relacionada