Kombination aus Tufte-Latex und Dreiteiler

Kombination aus Tufte-Latex und Dreiteiler

Ich versuche, threeparttablemit der Klasse zu arbeiten tufte-book. Wenn ich Folgendes verwende, wird die Überschrift natürlich am Rand platziert. In diesem Fall cleverefgibt es keine Probleme, die Referenz richtig zu setzen (d. h. die „Tabelle“ wird korrekt gedruckt):

\documentclass{tufte-book}

\usepackage{threeparttable}
\usepackage{cleveref}

\begin{document}

\begin{table}
    \centering
    \begin{threeparttable}
        \caption{Table caption}
        \begin{tabular}{cc}
        Some & tabular \\
        Contents & \ldots
        \end{tabular}
    \end{threeparttable}
    \label{tab:foo}
\end{table}

See \cref{tab:foo}.

\end{document}

Bildbeschreibung hier eingeben

Nun möchte ich die Überschrift über die Tabelle setzen, ähnlich der Anforderung indiese Frage.

Da es so aussieht, als ob eine Neudefinition der Beschriftung nicht möglich ist, habe ich versucht, meine eigene Beschriftung zu erstellen, indem ich (als Ausgangspunkt) Folgendes definiert habe:

\newcommand{\mycaption}[1]{\refstepcounter{table}Table~\thetable:~#1}

Die Verwendung \mycaption{Table}von anstelle von \caption{Table caption}im obigen Beispiel ergibt:

Bildbeschreibung hier eingeben

Dadurch wird die Überschrift an die richtige Stelle gesetzt, allerdings fehlen einige Funktionen:

  1. Zentrieren Sie die Überschrift über der Tabelle, wenn sie kürzer als eine Zeile ist.
  2. Die Referenzen mit richtig setzen \cref. (Das ließ sich auch nach mehrmaligem erneuten Ausführen des Dokuments nicht beheben.)
  3. Hinzufügen der Tabelle zur Tabellenliste.
  4. Möglichkeit, als zweites Argument eine Kurzform der Überschrift des Tabellenverzeichnisses anzugeben.

Gibt es eine Möglichkeit, entweder a) die vorhandene \captionFunktionalität zu verwenden und die Position einfach darüber zu ändern tabularoder b) meinen \mycaptionBefehl so zu erweitern, dass er sich genauso verhält wie \captionin den Standardklassen, d. h. die Anforderungen 1–4 erfüllt?

Antwort1

BEARBEITEN(die alte Antwort finden Sie unten):

Hier ist die verbesserte Version, die ich letztendlich verwendet habe. Ich empfehle, sie in die tufte-book-local.texDatei einzufügen. Sie definiert einen „klassischen Untertitelstil“, der alle in der Frage gestellten Anforderungen erfüllt, und aktiviert diesen Stil zu Beginn jeder Instanz von threeparttable:

\RequirePackage{etoolbox}
\makeatletter
\newif\if@tufte@margtab\@tufte@margtabfalse
\AtBeginEnvironment{margintable}{\@tufte@margtabtrue}
\AtEndEnvironment{margintable}{\@tufte@margtabfalse}
\newcommand{\classiccaptionstyle}{%
    \long\def\@caption##1[##2]##3{%
        \par
        \addcontentsline{\csname ext@##1\endcsname}{##1}%
        {\protect\numberline{\csname the##1\endcsname}{\ignorespaces ##2}}%
        \begingroup
        \@parboxrestore
        \if@minipage
        \@setminipage
        \fi
        \normalsize
        \@makecaption{\csname fnum@##1\endcsname}{\ignorespaces ##3}\par
        \endgroup}
    \long\def\@makecaption##1##2{%
        \vskip\abovecaptionskip
        \sbox\@tempboxa{\@tufte@caption@font##1: ##2}%
        \ifdim \wd\@tempboxa >\hsize
        \@tufte@caption@font\if@tufte@margtab\@tufte@caption@justification\fi##1: ##2\par
        \else
        \global \@minipagefalse
        \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
        \fi
        \vskip\belowcaptionskip}
    %   \setcaptionfont{\normalfont}
    \let\caption\@tufte@orig@caption%
    \let\label\@tufte@orig@label}
\makeatother

\AtBeginEnvironment{threeparttable}{%
    \classiccaptionstyle}

Alte Antwort:

Durchwühlentufte-common.defIch habe festgestellt, dass bei der ersten Instanz eines Floats die ursprünglichen Definitionen von \captionund in den Makros und \labelgespeichert werden .\@tufte@orig@caption\@tufte@orig@label

@tufte@floatDa ich die Umgebung nicht patchen konnte , habe ich etoolboxam Anfang jeder threeparttableUmgebung die ursprünglichen Befehle für Untertitel und Beschriftungen wiederhergestellt:

    \usepackage{etoolbox}
    \AtBeginEnvironment{threeparttable}{%
        \let\caption\@tufte@orig@caption%
        \let\label\@tufte@orig@label}
    \makeatother

Dies führt zu genau demselben Verhalten wie in den Standardklassen (optionales Argument möglich usw.), mit Ausnahme der Ausrichtung. Ich gehe davon aus, dass die Ausrichtung anders ist, da sie anders tufte-altexdefiniert ist \@makecaptionals die Standardklassen.

Ich weiß nicht, ob diese Methode irgendwelche seltsamen Nebenwirkungen hat, aber bisher hat sie bei mir funktioniert.

verwandte Informationen