[Tex/LaTex] Use short form with \cite

biblatex

I am using a modified verbose-ibid citestyle (as suggested here). If I use \cite, it won't use the short version, and that might be good, but right know I need to use the short version (cite:short). So how would I use \cite and force the short form?

Best Answer

Since captions (and floats in general) are rarely considered part of the text flow (after all a float is quite volatile in its placement and it is even more difficult to predict when exactly a reader might look at a float), the trackers are disabled within those environments.

The biblatex documentation states in §4.11.5 Trackers in Floats and TOC/LOT/LOF, p. 232

If a citation is given in a float (typically in the caption of a figure or table), scholarly back references like ‘ibidem’ or back references based on the page tracker get am- biguous because floats are objects which are (physically and logically) placed outside the flow of text, hence the logic of such references applies poorly to them. To avoid any such ambiguities, the citation and page trackers are temporarily disabled in all floats. In addition to that, these trackers plus the back reference tracker (backref) are temporarily disabled in the table of contents, the list of figures, and the list of tables.

So this behaviour is indeed intended, if you want to force short citations instead, you can define an "enforcer"

\makeatletter
\newcommand{\captshort}{\let\blx@imc@ifciteseen\@firstoftwo}
\makeatother

If you use this within a caption (e.g. \caption{\captshort\cite{foo}}), short citations will be forced.

\documentclass{article}
\usepackage[style=verbose]{biblatex}
\addbibresource{biblatex-examples.bib}
\makeatletter
\newcommand{\captshort}{\let\blx@imc@ifciteseen\@firstoftwo}
\makeatother

\begin{document}
  \cite{geer} \cite{geer}

  \begin{table}[!h]
  \caption{\captshort\cite{geer}}
  \end{table}

  \cite{wilde} \cite{wilde}
\end{document}

Table 1: Geer, “Earl, Saint, Bishop, Skald – and Music”


Alternatively, we can define a new cite command \shrtcite that always prints the short form and use that instead

\newbibmacro*{shrtcite}{%
  \usebibmacro{cite:citepages}%
  \iffieldundef{shorthand}
    {\usebibmacro{cite:short}}
    {\usebibmacro{cite:shorthand}}}

\DeclareCiteCommand{\shrtcite}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{shrtcite}}
  {\multicitedelim}
  {\usebibmacro{cite:postnote}}

MWE

\documentclass{article}
\usepackage[style=verbose]{biblatex}
\addbibresource{biblatex-examples.bib}

\newbibmacro*{shrtcite}{%
  \usebibmacro{cite:citepages}%
  \iffieldundef{shorthand}
    {\usebibmacro{cite:short}}
    {\usebibmacro{cite:shorthand}}}

\DeclareCiteCommand{\shrtcite}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{shrtcite}}
  {\multicitedelim}
  {\usebibmacro{cite:postnote}}

\begin{document}
  \cite{geer} \cite{geer}

  \begin{table}[!h]
  \caption{\shrtcite{geer}}
  \end{table}

  \cite{wilde} \cite{wilde}
\end{document}

Table 1: Geer, “Earl, Saint, Bishop, Skald – and Music”

Related Question