Considere o seguinte 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}
Isso imprimirá os sobrenomes dos autores em versalete para todos os comandos de citação, tanto no documento quanto na bibliografia. Apenas para o \textcite
comando eu quero que o sobrenome (ou seja, Knuth no exemplo) seja impresso no texto em fonte normal e não em versalete.
EDIT: A partir de março de 2016 (biblatex 3.3), você precisa mudar \mkbibnamefamily
em vez de\mkbibnamelast
Responder1
Uma solução possível é introduzir um botão de alternância para determinar se estamos ou não em uma citação de texto. Então a modificação de \mkbibnamelast
é parametrizada para a alternância. Esta solução usa o xpatch
pacote para modificar o textcite
bibmacro, para definir a alternância como verdadeira antes de executar a textcite
macro e como falsa logo após a textcite
execução da macro.
\newtoggle{textcite}
\AtBeginDocument{
\renewcommand*{\mkbibnamelast}[1]{%
\iftoggle{textcite}{#1}{\textsc{#1}}}
}
\xpretobibmacro{textcite}{\toggletrue{textcite}}{}{}
\xapptobibmacro{textcite}{\togglefalse{textcite}}{}{}
Responder2
\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}
Responder3
Com versões mais recentes, biblatex
podemos usar uma abordagem semelhante aGuidoderesponder, mas em vez de corrigir comandos de citação para definir um sinalizador, testamos o contexto do delimitador.
\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}