Как можно настроить имена и часть года в 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
Biber на самом деле не имеет представления о том, из чего состоит метка, и видит только полную метку, поэтому форматирование приходится втискивать при создании метки.
Мы можем изменить формат метки с помощью \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
производит