tufte-latex: BibLatex-Zitate in Bildunterschriften

tufte-latex: BibLatex-Zitate in Bildunterschriften

Wie können Biblatex-Zitate in Beschriftungen der Dokumentklasse „Tufte-Book“ verwendet werden?

Das folgende MWE funktioniert nicht, da der \autociteBefehl in der Bildunterschrift von tufte-book nicht richtig verarbeitet wird. Ich gehe davon aus, dass die Randnotiz irgendwo in die Warteschlange gestellt werden musstufte-common.def.

% !TeX program = pdflatex
% !TeX encoding = UTF-8
% !TeX spellcheck = en-US
% !BIB program = biber
\documentclass[a4paper,twoside,justified,marginals=raggedright,nobib]{tufte-book}
\usepackage{graphicx}

\usepackage[%
    backend=biber,
    bibstyle=authoryear,
    citestyle=authortitle-icomp,    
    ]{biblatex}%

\addbibresource{biblatex-examples.bib}

\begin{document}
    Citation in text.\autocite{westfahl:space}
    \begin{figure}
        \includegraphics{example-grid-100x100pt}
        \caption{Citation in caption.\autocite{westfahl:space}}
    \end{figure}
\end{document}

Antwort1

Standardmäßig sind die Tufte-Klassen nicht besonders begeistert davon, \footnotewenn Sie ein innerhalb eines verwenden \caption. Da biblatexnicht weiß, dass wir es \autociteinnerhalb eines verwenden \caption, wird standardmäßig verwendet \footcite. Da das Patchen des \footnoteBefehls fehlgeschlagen ist, biblatexkann es nicht einmal erkennen, dass es sich in einer Fußnote befindet, und es \parencitedort verwenden.

Mit

\makeatletter
\long\def\@caption#1[#2]#3{%
  \expandafter\ifx\csname if@capstart\expandafter\endcsname
                  \csname iftrue\endcsname
    \global\let\@currentHref\hc@currentHref
  \else
    \hyper@makecurrent{\@captype}%
  \fi
  \@ifundefined{NR@gettitle}{%
    \def\@currentlabelname{#2}%
  }{%
    \NR@gettitle{#2}%
  }%
  \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
    \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
  }%
  \begingroup
    \toggletrue{blx@footnote}%
    \@parboxrestore
    \if@minipage
      \@setminipage
    \fi
    \@tufte@caption@font\@tufte@caption@justification%
    \expandafter\ifx\csname if@capstart\expandafter\endcsname
                    \csname iftrue\endcsname
      \global\@capstartfalse
      %\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces#3}%
      \noindent\csname fnum@#1\endcsname: \ignorespaces#3%
    \else
      %\@makecaption{\csname fnum@#1\endcsname}{%
      \noindent\csname fnum@#1\endcsname:
        \ignorespaces
        \ifHy@nesting
          \expandafter\hyper@@anchor\expandafter{\@currentHref}{#3}%
        \else
          \Hy@raisedlink{%
            \expandafter\hyper@@anchor\expandafter{%
              \@currentHref
            }{\relax}%
          }%
          #3%
        \fi
      %}%
    \fi
    \par
  \endgroup
}

\renewcommand\@footnotetext[2][0pt]{%
  \marginpar{%
    \hbox{}\vspace*{#1}%
    \def\baselinestretch {\setspace@singlespace}%
    \reset@font\footnotesize%
    \@tufte@margin@par% use parindent and parskip settings for marginal text
    \vspace*{-1\baselineskip}\noindent%
    \protected@edef\@currentlabel{%
       \csname p@footnote\endcsname\@thefnmark%
    }%
    \color@begingroup%
       \toggletrue{blx@footnote}%
       \@makefntext{%
         \ignorespaces#2%
       }%
    \color@endgroup%
  }%
}%
\makeatother

eine Bastardisierung der tufte-common.defDefinitionen von , Teilen dessen, was hyperref.styfunktioniert und Patches, die von durchgeführt werden biblatex, die Fußnotenerkennung wird funktionieren und \captions werden vom biblatexTracker von so behandelt, als wären sie Randnoten.

MWE

\documentclass[a4paper,twoside,justified,marginals=raggedright,nobib]{tufte-book}
\usepackage{graphicx}
\usepackage{mwe}

\usepackage[%
    backend=biber,
    bibstyle=authoryear,
    citestyle=authortitle-icomp,    
    ]{biblatex}%

\addbibresource{biblatex-examples.bib}

\makeatletter
\long\def\@caption#1[#2]#3{%
  \expandafter\ifx\csname if@capstart\expandafter\endcsname
                  \csname iftrue\endcsname
    \global\let\@currentHref\hc@currentHref
  \else
    \hyper@makecurrent{\@captype}%
  \fi
  \@ifundefined{NR@gettitle}{%
    \def\@currentlabelname{#2}%
  }{%
    \NR@gettitle{#2}%
  }%
  \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
    \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
  }%
  \begingroup
    \toggletrue{blx@footnote}%
    \@parboxrestore
    \if@minipage
      \@setminipage
    \fi
    \@tufte@caption@font\@tufte@caption@justification%
    \expandafter\ifx\csname if@capstart\expandafter\endcsname
                    \csname iftrue\endcsname
      \global\@capstartfalse
      %\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces#3}%
      \noindent\csname fnum@#1\endcsname: \ignorespaces#3%
    \else
      %\@makecaption{\csname fnum@#1\endcsname}{%
      \noindent\csname fnum@#1\endcsname:
        \ignorespaces
        \ifHy@nesting
          \expandafter\hyper@@anchor\expandafter{\@currentHref}{#3}%
        \else
          \Hy@raisedlink{%
            \expandafter\hyper@@anchor\expandafter{%
              \@currentHref
            }{\relax}%
          }%
          #3%
        \fi
      %}%
    \fi
    \par
  \endgroup
}

\renewcommand\@footnotetext[2][0pt]{%
  \marginpar{%
    \hbox{}\vspace*{#1}%
    \def\baselinestretch {\setspace@singlespace}%
    \reset@font\footnotesize%
    \@tufte@margin@par% use parindent and parskip settings for marginal text
    \vspace*{-1\baselineskip}\noindent%
    \protected@edef\@currentlabel{%
       \csname p@footnote\endcsname\@thefnmark%
    }%
    \color@begingroup%
       \toggletrue{blx@footnote}%
       \@makefntext{%
         \ignorespaces#2%
       }%
    \color@endgroup%
  }%
}%
\makeatother

\begin{document}
    Citation in text.\autocite{westfahl:space}
    \begin{figure}
        \includegraphics{example-grid-100x100pt}
        \caption{Citation in caption. \autocite{westfahl:space}}
    \end{figure}
\end{document}

Beispielausgabe

Antwort2

Ich habe einen manuellen Workaround gefunden, der aufVerwendung von \footnote in der \caption einer Abbildung, aber ich würde eine automatisierte Lösung bevorzugen.

% !TeX program = pdflatex
% !TeX encoding = UTF-8
% !TeX spellcheck = en-US
% !BIB program = biber
\documentclass[a4paper,twoside,justified,marginals=raggedright,nobib]{tufte-book}
\usepackage{graphicx,lipsum}

\usepackage[%
    backend=biber,
    bibstyle=authoryear,
    citestyle=authortitle-icomp,    
    ]{biblatex}%

\addbibresource{biblatex-examples.bib}

\usepackage{ftnxtra}
\begin{document}
    Citation in text.\autocite{westfahl:space}
    \begin{figure}
        \includegraphics{example-grid-100x100pt}
        \caption{Citation in caption.\footnotemark}
    \end{figure}
    \footnotetext{\cite{westfahl:space}}
\end{document}

verwandte Informationen