0

I am using biblatex and biber. In my main text, I am happy to have the standard default \textcite display, which (depending on maxbibnames may give the names of many authors). This standard default is also what I would want to see in the references (\printbibliography).

However, I have one literature review table, in which I don't really want to see all authors displayed. This is partly because I want to fit the names into a tabular column, with more information on the right. Here and only here, I would really only want to have maxbibnames=1. easy?

Ideally, an even better version would allow me to invent my own \citemystyle. I would want to add a journal abbreviation, like Smith et.al. (AER, 2021). I would add a field into my *.bib file for the journal abbreviation; and then,

\newcommand{\citemystyle}[1]{\citeauthorlastname[1]{#1}\citeetalifnany{#1}~%
                                            (\citejournalabbrev{#1}, \citeyear{#1}}

where the [1] tries to designate that citeauthorlastname should only grab the first author's last name.

I could then write \citemystyle{smith2021aer} and it would magically work to give me Smith et.al. (AER, 2021).

I may be asking too much of biblatex/biber, but I have been surprised by its flexibility in the past...heck, sometimes the answers are even easy. if hard, please don't spend much time on this. I can just duplicate the text by hand.

1

You can use the shortjournal field and define a new \mytextcite command through \DeclareCiteCommand. We limit maxnames to 1 with \setcounter{maxnames}{1} and we load a modified version of the textcite macro, called mytextcite. This macro executes \usebibmacro{shortjournal} which print the shortjournal field only if it is given, and adds a comma and a space.

\begin{filecontents*}[overwrite]{\jobname.bib}
@article{bertram,
  author       = {Bertram, Aaron and Wentworth, Richard},
  title        = {Gromov invariants for holomorphic maps on {Riemann} surfaces},
  journaltitle = {J.~Amer. Math. Soc.},
  shortjournal = {JAMS},
  date         = 1996,
  volume       = 9,
  number       = 2,
  pages        = {529-571}}
\end{filecontents*}
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
  \addbibresource{\jobname.bib}

\newbibmacro*{shortjournal}{%
  \iffieldundef{shortjournal}{}
  {\printfield{shortjournal}\setunit{\addcomma\space}}}

\newbibmacro*{mytextcite}{%
  \ifnameundef{labelname}
  {\iffieldundef{shorthand}
    {\usebibmacro{cite:label}%
      \setunit{%
        \global\booltrue{cbx:parens}%
        \printdelim{nonameyeardelim}\bibopenparen}%
      \ifnumequal{\value{citecount}}{1}
      {\usebibmacro{prenote}}
      {}%
      \usebibmacro{shortjournal}%
      \usebibmacro{cite:labeldate+extradate}}
    {\usebibmacro{cite:shorthand}}}
  {\printnames{labelname}%
    \setunit{%
      \global\booltrue{cbx:parens}%
      \printdelim{nameyeardelim}\bibopenparen}%
    \ifnumequal{\value{citecount}}{1}
    {\usebibmacro{prenote}}
    {}%
      \usebibmacro{shortjournal}%
\usebibmacro{citeyear}}}

\DeclareCiteCommand{\mytextcite}
{\boolfalse{cbx:parens}}
{\setcounter{maxnames}{1}%
  \usebibmacro{citeindex}%
  \iffirstcitekey
  {\setcounter{textcitetotal}{1}}
  {\stepcounter{textcitetotal}%
    \textcitedelim}%
  \usebibmacro{mytextcite}}
{\ifbool{cbx:parens}
  {\bibcloseparen\global\boolfalse{cbx:parens}}
  {}}
{\usebibmacro{textcite:postnote}}

\begin{document}
  \textcite{bertram}
  \mytextcite{bertram}
    \printbibliography
\end{document}

Considering your need, the command could have been defined in a simpler way, but in that way it can be used more extensively (I belive).

\newcommand{\mytextcite}[1]{%
  \citeauthor*{#1} (\citefield{#1}{shortjournal}, \citeyear{#1})}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.