Alterar a fonte do autor para um comando de citação específico

Alterar a fonte do autor para um comando de citação específico

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 \textcitecomando 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 \mkbibnamefamilyem 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 xpatchpacote para modificar o textcitebibmacro, para definir a alternância como verdadeira antes de executar a textcitemacro e como falsa logo após a textciteexecução da macro.

\newtoggle{textcite}

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

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

insira a descrição da imagem aqui

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}

insira a descrição da imagem aqui

Responder3

Com versões mais recentes, biblatexpodemos 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}

"Knuth (1986)" sem versalete // "Abdus Salam (1968)." "Salam" em versalete

informação relacionada