2
\documentclass[fontsize=12pt,oneside,headsepline]{scrbook}
    \usepackage[demo]{graphicx}
    \usepackage{csquotes}
    \usepackage[style=apa,natbib=true,backend=biber,uniquename=false,pagetracker=true]{biblatex}
    \usepackage[T1]{fontenc} 
    \usepackage[utf8]{inputenc} 
    \usepackage[ngerman]{babel} 

    \DeclareLanguageMapping{german}{german-apa}
    \DeclareFieldFormat{apacase}{#1} 
    \DefineBibliographyStrings{ngerman}{ 
        andothers = {{et al\adddot}},  } 


    \usepackage{filecontents}   
    \addbibresource{\jobname.bib}


    \begin{filecontents}{\jobname.bib}
    @article{zapkau2015,
      author   = {Florian B. Zapkau and Christian Schwens and Holger Steinmetz and R{\"u}diger Kabst},
      title    = {Disentangling the effect of prior entrepreneurial exposure on entrepreneurial intention},
      journal  = {Journal of Business Research},
      year     = {2015},
      volume   = {68},
      number   = {3},
      pages    = {639 - 653},
      issn     = {0148-2963},
      keywords = {Prior entrepreneurial exposure, Role models, Work experience, Entrepreneurial intention, Theory of planned behavior },
    }
    \end{filecontents}

    \begin{document}    

    Some Text ...\citep{zapkau2015}.
    More Text ... 

    \begin{figure}[h]
      \centering
      \caption{Caption Text \citet{zapkau2015}.} \label{fig:forschungsmodell}
      \vspace{2ex}
      \includegraphics[width=0.7\linewidth]{TPB.eps}\\
    \end{figure}


    \end{document}

Here my problem is: Citing zapkau for the first time brings the all author's names. And here, that is right. Citing zapkau more than one time brings an "et al." after the author's names when being used in the text.

enter image description here

Citing for the second time.

PROBLEM:

When citing in a figure's caption, it's again:

Too many authors even though there has to be et al.

I scanned other solutions but there does not seem to be one which works in my case. Thanks in advance for your help! :-)

9
  • Please add a minimal working example meta.tex.stackexchange.com/questions/228/… . +Add the bib entries. +image could be: ` \includegraphics[width=3cm]{example-image} `.
    – Bobyandbob
    Commented Feb 28, 2017 at 17:53
  • 1
    epsfig is a package existing only for back compatibility with older documents and should not be used in new documents. Use graphicx and \includegraphics. It's not the cause for the problem. The example is far from minimal.
    – egreg
    Commented Feb 28, 2017 at 18:03
  • Please provide the zapkau2015 bib entry.
    – Mico
    Commented Feb 28, 2017 at 18:34
  • 1
    This is by design. biblatex considers figures to be outside the flow of text. So its 'trackers' are disabled there. So biblatex can not check if an entry has been seen/cited before in a figure. Have a look at \footcite always prints long citation if used in figure environment. If that does not work for you, please prepare a proper MWE/MWEB: most of the packages in your preamble are not important to the question, yet we lack the bib file.
    – moewe
    Commented Mar 1, 2017 at 9:07
  • I have edited your question a bit. We do not have your .eps and there was the classic \DeclareLanguageMapping missing.
    – moewe
    Commented Mar 1, 2017 at 18:01

2 Answers 2

2

This is because biblatex disables citation tracking within figures as explained in \footcite always prints long citation if used in figure environment, you could re-enable citation tracking in figures as described in the answer there. That is probably the 'best' solution if you consider float objects to form part of the text and want things to behave as if they appeared in text.

Alternatively, you can just reset the non-tracking behaviour of \ifciteseen in floats

\makeatletter
\AtBeginDocument{
  \apptocmd\@floatboxreset
    {\let\blx@imc@ifciteseen\@firstoftwo}
    {}
    {\blx@err@patch{floats}}%
}
\makeatother

This will cause all citations in floats to appear in the shortened version and not the long first-cite version.


Since you are using the natbib compatibility mode that defines starred command versions, we might as well redefine those. Normally, the starred version of a cite command in natbib compatibility mode would print all authors. The code for that, however, does not work for biblatex-apa. So the starred natbib-commands are useless with biblatex-apa. We can revive them and make them do the opposite: Always print out the shortened list, no matter what anything else says.

\makeatletter
\renewrobustcmd*{\citet}{%
  \@ifstar
    {\AtNextCite{\AtEachCitekey{\let\ifciteseen\@firstoftwo}}%
     \textcite}
    {\textcite}}
\makeatletter

Should be enough.

Mico's MWE then gives

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{zapkau2015,
  author   = {Florian B. Zapkau and Christian Schwens 
     and Holger Steinmetz and R{\"u}diger Kabst},
  title    = {Disentangling the effect of prior 
     entrepreneurial exposure on entrepreneurial 
     intention},
  journal  = {Journal of Business Research},
  year     = {2015},
  volume   = {68},
  number   = {3},
  pages    = {639 - 653},
  issn     = {0148-2963},
  keywords = {Prior entrepreneurial exposure, Role 
     models, Work experience, Entrepreneurial intention, 
     Theory of planned behavior},
}
\end{filecontents}

\documentclass[american]{article}
\usepackage[demo]{graphicx}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=apa,natbib=true,backend=biber,
    uniquename=false,pagetracker=true]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
\addbibresource{\jobname.bib}

\usepackage[skip=0.333\baselineskip]{caption}    % <-- optional

\makeatletter
\renewrobustcmd*{\citet}{%
  \@ifstar
    {\AtNextCite{\AtEachCitekey{\let\ifciteseen\@firstoftwo}}%
     \textcite}
    {\textcite}}
\makeatletter

\begin{document}    
Some Text \dots\ \citep{zapkau2015}.

More Text \dots\ \citep{zapkau2015}

\begin{figure}[h]
  \centering
  \caption{Caption Text \dots\ \citet*{zapkau2015}.} % <-- new 
  \label{fig:forschungsmodell}
  \includegraphics[width=0.7\linewidth]{TPB.eps}
\end{figure}

More Text \dots\ \citep{zapkau2015}

\printbibliography
\end{document}

example

2
  • Thank you very much. This seems to be the most elegant solution. Is there any reason for the behaviour biblatex shows? I mean, why should the citation always be printed in the long version when appearing in captions and other float objects?
    – junkmaster
    Commented Mar 4, 2017 at 8:34
  • @junkmaster Well, as I said there are good reasons to disable the tracking mechanisms in floats, since they are outside the flow of text. (See also my linked answer.) I don't think there is a good reason that citations in floats now always appear in their long form, it is simply a consequence of the code structure. (If tracking is disabled, \ifciteseen always yields false, making biblatex-apa believe all citations are first citations that require the long form.)
    – moewe
    Commented Mar 4, 2017 at 11:24
2

If the biblatex package is loaded with the option natbib=true, it provides emulation of some of the "core" commands of the natbib citation management package -- but not for all of natbib's macros and options, such as the option longnamesfirst, which directs \citet and \citep to typeset the full list of authors the very first time an entry is cited and an abbreviated list ("et al") for subsequent citation call-outs.

However, natbib's commands \defcitealias and \citetalias are emulated if the option natbib=true is set. I therefore suggest you make use of them to create abbreviated-list citation call-outs inside \caption commands. It's admittedly a little bit kludgy, but I trust your document doesn't have all that many instances of creating citation call-outs inside \caption directives...

enter image description here

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{zapkau2015,
  author   = {Florian B. Zapkau and Christian Schwens 
     and Holger Steinmetz and R{\"u}diger Kabst},
  title    = {Disentangling the effect of prior 
     entrepreneurial exposure on entrepreneurial 
     intention},
  journal  = {Journal of Business Research},
  year     = {2015},
  volume   = {68},
  number   = {3},
  pages    = {639 - 653},
  issn     = {0148-2963},
  keywords = {Prior entrepreneurial exposure, Role 
     models, Work experience, Entrepreneurial intention, 
     Theory of planned behavior},
}
\end{filecontents}

\documentclass[american]{article}
\usepackage[demo]{graphicx}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=apa,natbib=true,backend=biber,
    uniquename=false,pagetracker=true]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
\addbibresource{\jobname.bib}

\defcitealias{zapkau2015}{Zapkau et~al.\ (2015)} % <-- new
\usepackage[skip=0.333\baselineskip]{caption}    % <-- optional

\begin{document}    
Some Text \dots\ \citep{zapkau2015}.

More Text \dots\ \citep{zapkau2015}

\begin{figure}[h]
  \centering
  \caption{Caption Text \dots\ \citetalias{zapkau2015}.} % <-- new 
  \label{fig:forschungsmodell}
  \includegraphics[width=0.7\linewidth]{TPB.eps}
\end{figure}

\printbibliography
\end{document}
8
  • While this certainly works it seems to go against the spirit of bibilatex to have to define a cite alias with information that biblatex could provide automatically. If I were to define a new cite command I would just make one that always has \ifciteseen true.
    – moewe
    Commented Mar 2, 2017 at 9:35
  • @moewe - I did write that the approach taken in this answer is "a little bit kludgy". :-) I think it would be very useful if you provided a separate answer that goes with the spirit of biblatex and, in particular, shows how to set up a custom citation command that always sets \ifciteseen to true. I guess such a custom citation command would emulate the behavior of natbib's \citep* and \citet* directives, right? Or, feel free to edit my answer. :-)
    – Mico
    Commented Mar 2, 2017 at 10:20
  • I have added an answer that reverses the behaviour of the starred commands from the natbib compatibility mode.
    – moewe
    Commented Mar 2, 2017 at 11:50
  • I meant 'reverses'. According to merkel.texture.rocks/Latex/natbib.php as well as the code in blx-natbib.def, the starred versions give the full list of names, while the unstarred might truncate the list. My new starred command always truncates, hence 'reversing' (but certainly not reproducing) the default behaviour.
    – moewe
    Commented Mar 2, 2017 at 11:58
  • @moewe - Thanks! You're correct, natbib's "starred" citation commands provide the full list of authors, not the truncated list. Glad you caught this!
    – Mico
    Commented Mar 2, 2017 at 11:59

You must log in to answer this question.

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