如何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
產生