Biblatex: выделите некоторые цитаты (\cite) жирным шрифтом

Biblatex: выделите некоторые цитаты (\cite) жирным шрифтом

Я хотел бы напечатать всех \cite{}авторов жирным шрифтом в моем документе. Сейчас я делаю это shorthand = {\textbf{Foo23}}в моем .bib, но это не очень практично, и, это не только имеет проблему обработки плохо дублированных записей с одинаковым сокращением, что более важно,алфавитный порядок нарушен:

введите описание изображения здесь

\documentclass{article}

\usepackage[
  style=alphabetic,% also 
  minalphanames=3,maxalphanames=4, % [Foo+99] -> [FBB+99].
  maxnames=99, % Do not put "et al". Sets maxbibnames, maxcitenames and maxsortnames.
  sortcites=true,
  sortcites=false, % \cite{B,A,C}: [A,B,C] --> [B,A,C]
]{biblatex}

\usepackage{filecontents}

\begin{filecontents}[overwrite]{\jobname.bib}
@article{a1,
  author={John Smith and Mary Stuart and Peter Pan},
  year = 2020,
  shorthand = {\textbf{SSP20}},
  journal = {I should should have a Awesome Journal},
  volume = 3
}
@article{a2,
  author={John Smith and Mary Stuart and Peter Pan},
  year = 2020,
  journal = {Another Journal},
  volume = 3
}
@article{a3,
  author={Abc Abc and Def Ahi},
  year = 2020,
  journal = {I should appear first in the list as it is sorted alphabetically},
  volume = 3
}
\end{filecontents}


\addbibresource{\jobname.bib}

\begin{document}

\cite{a1,a2,a3}

\printbibliography

\end{document}

решение1

Обычно лучше избегать форматирования команд во .bibвходных данных, насколько это возможно. Как вы заметили, команды будут обрабатываться более или менее как обычный текст и могут испортить сортировку и вычисления уникальности.

Вместо этого лучше установить семантический маркер в данных и действовать на его biblatexоснове. Одним из вариантов может быть установка ключевого слова.

Удивительно, но нет простого способа сбоку biblatexвыделить всю метку цитаты, поэтому нам нужно встроить это в citebibmacro.

\documentclass{article}

\usepackage[
  style=alphabetic,% also 
  minalphanames=3,maxalphanames=4, % [Foo+99] -> [FBB+99].
  maxnames=99, % Do not put "et al". Sets maxbibnames, maxcitenames and maxsortnames.
  sortcites=true,
  sortcites=false, % \cite{B,A,C}: [A,B,C] --> [B,A,C]
]{biblatex}

\DeclareFieldFormat{citelabel}{%
  \ifkeyword{importantauthor}
    {\mkbibbold{#1}}
    {#1}}

\DeclareFieldFormat{labelalphawidth}{%
  \mkbibbrackets{%
    \ifkeyword{importantauthor}
      {\mkbibbold{#1}}
      {#1}}}

\renewbibmacro*{cite}{%
  \printtext[bibhyperref]{%
    \printtext[citelabel]{%
      \printfield{labelprefix}%
      \printfield{labelalpha}%
      \printfield{extraalpha}%
      \ifbool{bbx:subentry}
        {\printfield{entrysetcount}}
        {}}}}

\begin{filecontents}{\jobname.bib}
@article{a1,
  author   = {John Smith and Mary Stuart and Peter Pan},
  year     = 2020,
  journal  = {I should should have a Awesome Journal},
  volume   = 3,
  keywords = {importantauthor},
}
@article{a2,
  author  = {John Smith and Mary Stuart and Peter Pan},
  year    = 2020,
  journal = {Another Journal},
  volume  = 3,
}
@article{a3,
  author  = {Abc Abc and Def Ahi},
  year    = 2020,
  journal = {I should appear first in the list as it is sorted alphabetically},
  volume  = 3,
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}

\cite{a1,a2,a3}

\printbibliography

\end{document}

"[SSP20a; SSP20b; AA20]" с "SSP20a" жирным шрифтом

Связанный контент