Изменить шрифт автора для определенной команды цитирования

Изменить шрифт автора для определенной команды цитирования

Рассмотрим следующий MWE

\documentclass{article}
\usepackage[style=authoryear-comp,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\AtBeginDocument{%
  \renewcommand*{\mkbibnamelast}[1]{\textsc{#1}}
}

\begin{document}
\textcite{knuth:ct:e}\\
\fullcite{salam}\\
Footcite\footfullcite{baez/article}
\printbibliography
\end{document}

Это напечатает фамилии авторов маленькими заглавными буквами для всех команд cite как в документе, так и в библиографии. Просто для команды \textciteя хочу, чтобы фамилия (т.е. Кнут в примере) была напечатана в тексте обычным шрифтом, а не маленькими заглавными буквами.

EDIT: Начиная с марта 2016 года (biblatex 3.3) вам необходимо изменить \mkbibnamefamilyвместо\mkbibnamelast

решение1

Возможным решением является введение переключателя для определения, находимся ли мы в текстовом цитировании или нет. Затем изменение \mkbibnamelastпараметризуется для переключателя. Это решение использует xpatchпакет для изменения textcitebibmacro, чтобы установить переключатель в значение true непосредственно перед выполнением textciteмакроса и в значение false сразу после textciteвыполнения макроса.

\newtoggle{textcite}

\AtBeginDocument{
  \renewcommand*{\mkbibnamelast}[1]{%
    \iftoggle{textcite}{#1}{\textsc{#1}}}
}

\xpretobibmacro{textcite}{\toggletrue{textcite}}{}{}
\xapptobibmacro{textcite}{\togglefalse{textcite}}{}{}

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

решение2

\documentclass{article}
\usepackage[style=authoryear-comp,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}
\AtBeginDocument{%
  \renewcommand*\mkbibnamelast[1]{\textsc{#1}}}
\let\TC\textcite
\renewcommand\textcite[1]{{\def\mkbibnamelast##1{##1}\TC{#1}}}% hold it local
%% If you need the optional argument of \textcite then we have to modify
%% the macro    

\begin{document}
\textcite{knuth:ct:e}\\
\fullcite{salam}\\
Footcite\footfullcite{baez/article}
\printbibliography
\end{document}

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

решение3

В более поздних версиях biblatexмы можем использовать подход, аналогичныйГвидо'sотвечать, но вместо исправления команд цитирования для установки флага мы проверяем контекст разделителя.

\documentclass{article}
\usepackage[style=authoryear-comp,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}

\makeatletter
\renewcommand*{\mkbibnamefamily}{%
  \ifcsundef{mkbibnamefamily@\blx@delimcontext}
    {\textsc}
    {\csuse{mkbibnamefamily@\blx@delimcontext}}}

\newcommand*{\mkbibnamefamily@textcite}[1]{#1}
\makeatother


\begin{document}
\textcite{knuth:ct:e}

\fullcite{salam}

Footcite\footfullcite{sigfridsson}

\printbibliography
\end{document}

"Кнут (1986)" без заглавных букв//"Абдус Салам (1968)." "Салам" заглавными буквами

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