
Ich versuche, threeparttable
mit der Klasse zu arbeiten tufte-book
. Wenn ich Folgendes verwende, wird die Überschrift natürlich am Rand platziert. In diesem Fall cleveref
gibt 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}
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:
Dadurch wird die Überschrift an die richtige Stelle gesetzt, allerdings fehlen einige Funktionen:
- Zentrieren Sie die Überschrift über der Tabelle, wenn sie kürzer als eine Zeile ist.
- Die Referenzen mit richtig setzen
\cref
. (Das ließ sich auch nach mehrmaligem erneuten Ausführen des Dokuments nicht beheben.) - Hinzufügen der Tabelle zur Tabellenliste.
- Möglichkeit, als zweites Argument eine Kurzform der Überschrift des Tabellenverzeichnisses anzugeben.
Gibt es eine Möglichkeit, entweder a) die vorhandene \caption
Funktionalität zu verwenden und die Position einfach darüber zu ändern tabular
oder b) meinen \mycaption
Befehl so zu erweitern, dass er sich genauso verhält wie \caption
in 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.tex
Datei 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.def
Ich habe festgestellt, dass bei der ersten Instanz eines Floats die ursprünglichen Definitionen von \caption
und in den Makros und \label
gespeichert werden .\@tufte@orig@caption
\@tufte@orig@label
@tufte@float
Da ich die Umgebung nicht patchen konnte , habe ich etoolbox
am Anfang jeder threeparttable
Umgebung 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-altex
definiert ist \@makecaption
als die Standardklassen.
Ich weiß nicht, ob diese Methode irgendwelche seltsamen Nebenwirkungen hat, aber bisher hat sie bei mir funktioniert.