I'd like to change the authoryear citations using \parencite, so that authors appear as:

(AUTHOR, year) and/or (AUTHOR, year, p.) (one page) (AUTHOR, year, pp.) (multiple pages)

So far I managed to change last names to uppercase (not my choice, but I'm trying to implements this) in citations and in the bibliography using:


\ifblank{#3}{}{\addcomma\space #3}}

I have also tried to change multi-author delimiters in-text \parencite citations using


So that references look like:


But it didn't work.

I would also like to set all multi-author names as last-first in the references list, separated by semicolons, but the following didn't work either:


I'm using the following in my preamble:

\setmainfont{EB Garamond}

\DefineBibliographyStrings{brazil}{namedash={---},volumeof={de},url={Disponível em: }}


\ifblank{#3}{}{\addcomma\space #3}}
  • To clarify, you want to change bibliography as well or just \parencite ? If you modify mkbibnamefirst and so on, you will also modify the bibliography. Also, a full MWE, i.e. one with \begin{document} etc. would be quite helpful.
    – ach
    Jun 2, 2013 at 16:03
  • Yes, it's just \parencite. Behavior in the bibliography looks ok. I don't want \textcite to change.
    – user9424
    Jun 2, 2013 at 16:39
  • What are you trying to achieve with DeclareNameFormat... ? #3 is the author firstname, what are you trying to do there ? MakeUppercase in that context seems superfluous given the earlier definition.
    – ach
    Jun 2, 2013 at 17:02
  • DeclareNameFormat was supposed to turn into uppercase last names in bibliography.
    – user9424
    Jun 2, 2013 at 17:11

2 Answers 2


I do not know what the historian style is (it's not a standard one), but I see you use citestyle=authoryear anyway, so this should be the same.

The example below does what you want, I believe. It uses the biblatex example bibliography. Note that some years have letters after them, this happens when the same author has several works in the same year.

\usepackage[style=authoryear, backend=biber]{biblatex}
% \renewcommand{\mkbibnamefirst}[1]{\MakeUppercase{#1}}
% \renewcommand{\mkbibnamelast}[1]{\MakeUppercase{#1}}
% \renewcommand{\mkbibnameprefix}[1]{\MakeUppercase{#1}}
% \renewcommand{\mkbibnameaffix}[1]{\MakeUppercase{#1}}

\newbibmacro*{cite_p}{%adapted from authoryear.cbx

\DeclareCiteCommand{\parencite}[\mkbibparens]%adapted from authoryear.cbx

\DeclareNameFormat{labelname_p}{%from biblatex.def



\item Year and pages \parencite{nietzsche:historie}.
\item Two inbook with year and pages \parencite{nietzsche:historie, brandt} 
\item A book with no pages \parencite{massa}
\item textcite on a book with no pages \textcite{massa}.
\item Several books \parencite{murray, augustine, cotton, bertram, massa}.
\item Article with single page \parencite{art1}
\item textciting  \textcite{nietzsche:historie, brandt}



enter image description here


If you want to know the nitty gritty, compare what I have here with what's in authoryear.cbx, you should see what I changed. However, in short:

  1. \renewcommand*{\nameyeardelim}{\addcomma\addspace} to make sure name and year are separated by a space and a comma
  2. Made new citation macro cite_p, basically a copy of cite, but added the pages bit at the end
  3. Redefine parencite to use our custom cite_p.
  4. 3+4 ensure that other citation commands are unchanged.


Fixed some bugs, as per comments below

enter image description here

  • Thanks! This works just fine. However, I needed the textcite command to remain the same, namely: "Author (year)." (author not in uppercase). But that's fine. The "historian" style is used just because it puts years where I want them: as the last part of the bibliography entry, and not like "Surname, Name (2000)." What the historian style does (in the bibliography) is "Surname, Name. Title (italics). Place: Publisher, Year."
    – user9424
    Jun 2, 2013 at 21:16
  • I have just found that in the bibliography, last names and first names are in uppercase, so I just commented: %\renewcommand{\mkbibnamefirst}[1]{\MakeUppercase{#1}} %\renewcommand{\mkbibnamelast}[1]{\MakeUppercase{#1}}
    – user9424
    Jun 2, 2013 at 21:23
  • @Joseph I edited the code, it should now only uppercase the last name of authors that are \parencited.
    – ach
    Jun 2, 2013 at 21:42
  • That's great ach! I just commented out the code \printfield{pages} (just want total page range in articles etc. to show in the bibliography, as usual).
    – user9424
    Jun 3, 2013 at 0:21
  • Only one caveat: as you can see above, there is a space between the year and the parenthesis in (MASSA, 2004 ). And in all other citations when I remove \addcomma\addspace\printfield{pages}. I couldn't figure out what is causing this space.
    – user9424
    Jun 3, 2013 at 0:33

Since you're making only small changes to an existing citation command, the \AtNextCite hook comes in handy:




The advantage to this approach is that it should work for any of the author-year styles.

  • your solution works nice, too.
    – user9424
    Jun 3, 2013 at 18:30

You must log in to answer this question.