biblatex: uppercase in \parencite, but not in \textcite
I think the only way is the redefinition of the cite command. In the example below I defined a new macro named uppercite
which formats the name via the redefinition of \mkbibnamelast
:
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{uppercite}}
{\multicitedelim}
{\usebibmacro{postnote}}
\newbibmacro*{uppercite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\def\mkbibnamelast##1{\MakeUppercase{##1}}\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
The complete MWE is:
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{CARNAP1935,
Address = {London},
Author = {Carnap, Rudolf},
Publisher = {Kegan Paul, Trench, Trubner \& Co.},
Title = {Philosophy and Logical Syntax},
Year = {1935}}
@book{CARNAP1937,
Address = {London},
Author = {Carnap, Rudolf},
Note = {Transl. Amethe Smeaton (Countess von Zeppelin)},
Publisher = {Kegan Paul},
Title = {The Logical Syntax of Language},
Year = 1937}
@book{SCHICKORE2006,
Address = {Dordrecht},
Author = {SCHICKORE, J. and STEINLE, F.},
Date-Added = {2012-07-19 08:53:43 +0000},
Date-Modified = {2013-03-09 19:03:37 +0000},
Publisher = {Kluwer Academic Pub},
Title = {Revisiting discovery and justification: historical and philosophical perspectives on the context distinction},
Volume = {14},
Year = {2006}}
\end{filecontents*}
\documentclass[12pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[citestyle=authoryear,bibstyle=authortitle,labelnumber,natbib=true,firstinits=true,isbn=false,babel=other,language=brazilian,backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\DeclareCiteCommand{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{uppercite}}
{\multicitedelim}
{\usebibmacro{postnote}}
\newbibmacro*{uppercite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\addspace}}
{\def\mkbibnamelast##1{\MakeUppercase{##1}}\printnames{labelname}%
\setunit{\nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}}
\begin{document}
\verb+\textcite{CARNAP1937}+\quad\textcite{CARNAP1937}
\verb+\parencite{CARNAP1935}+\quad\parencite{CARNAP1935}
\verb+\parencite{SCHICKORE2006}+\quad\parencite{SCHICKORE2006}
\verb+\parencite{CARNAP1935}\parencite{SCHICKORE2006}+\parencite{CARNAP1935}\parencite{SCHICKORE2006}
\verb+\parencite{CARNAP1935,SCHICKORE2006}+\parencite{CARNAP1935,SCHICKORE2006}
\printbibliography
\end{document}
An alternative solution that works with versions of biblatex
newer than 3.4 is based on finding out if the current 'delimiter context' is parencite
\makeatletter
\renewcommand*{\mkbibnamefamily}[1]{%
\ifdefstring{\blx@delimcontext}{parencite}
{\textsc{#1}}
{#1}}
\makeatother
(Yes, that uses \textsc
instead of the hideous \MakeUppercase
, but of course it works with \MakeUppercase
as well.)
See also Capital and non-capital citation