biblatex を使用して `labelalpha` の `labeldate` をカスタマイズする

biblatex を使用して `labelalpha` の `labeldate` をカスタマイズする

フィールドの名前と年の部分をlabelalpha個別にカスタマイズするにはどうすればよいでしょうか? たとえば、名前の部分を小文字の大文字にして、年を表す数字を旧式の数字にしたいとします。

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}

答え1

biblatexアルファベットのラベルは Biber によって生成され、ファイルに渡されます.bblbiblatexはラベルが何で構成されているかを実際には把握しておらず、完全なラベルしか認識しないため、ラベル作成時にフォーマットを無理やり組み込む必要があります。

ラベルのフォーマットを で変更し\DeclareLabelalphaTemplate、そこでフォーマットを適用することができます。しかし、ラベル定義はファイルに書き込まれることを考慮する必要があります。通常、ファイルに書き込むときにマクロが展開されるため、定義にマクロを追加するのは困難です。これは、ここで必要なことではありません。展開を回避するには、定義に.bcfかなりの が必要です。引数の中括弧はさらに複雑で、 と が必要です( を参照)。\string\@charlb\@charrbLaTeX でファイルに { と } を書き込む)。ラベル部分をフォーマットするための 2 つのヘルパー マクロを定義すると、より複雑なマクロで発生する問題を回避できます。

\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」は赤の旧式数字で表記

関連情報