使用 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”为红色旧式数字

相关内容