使用 biblatex 自訂“labelalpha”中的“labeldate”

使用 biblatex 自訂“labelalpha”中的“labeldate”

如何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.bblbiblatex並不真正了解標籤的組成部分,只能看到完整的標籤,因此必須在建立標籤時硬塞格式。

我們可以修改標籤格式\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」為紅色舊式數字

相關內容