Рассмотрим следующий 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
пакет для изменения textcite
bibmacro, чтобы установить переключатель в значение 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}