我如何labelalpha
分别自定义字段的名称和年份部分?例如,我希望名称部分采用小写字母,而表示年份的数字采用旧式数字。
梅威瑟:
\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
中.bbl
。biblatex
并不真正了解标签是由什么组成的,而只看到完整的标签,因此必须在创建标签时强行设置格式。
我们可以使用 修改标签格式并\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
得出