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}

enter image description here


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