1

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 Answer 1

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})}

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .