Combinando penacho-látex y mesa de tres partes.

Combinando penacho-látex y mesa de tres partes.

Estoy tratando de ponerme threeparttablea trabajar con la tufte-bookclase. Naturalmente, cuando uso lo siguiente, el título se colocará en el margen. En este caso, cleverefno tiene problemas para acertar con la referencia (es decir, imprime correctamente la "Tabla"):

\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}

ingrese la descripción de la imagen aquí

Ahora quiero poner el título encima de la tabla, similar al requisito enesta pregunta.

Como parece que redefinir el título no es factible, intenté crear mi propio título definiendo (como punto de partida):

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

Usar \mycaption{Table}en lugar de \caption{Table caption}en el ejemplo anterior produce:

ingrese la descripción de la imagen aquí

Esto coloca el título en el lugar correcto, pero faltan algunas características:

  1. Centrar el título encima de la tabla si tiene menos de una línea.
  2. Obtener las referencias correctas con \cref. (Esto no se pudo resolver incluso después de volver a ejecutar el documento varias veces).
  3. Agregar la tabla a la lista de tablas.
  4. Posibilidad de proporcionar una forma breve del título de la lista de tablas como segundo argumento.

¿Hay alguna manera de a) usar la \captionfuncionalidad existente y simplemente cambiar la posición por encima de tabularob) extender mi \mycaptioncomando para que se comporte como \captionen las clases estándar, es decir, cumplir con los requisitos 1-4?

Respuesta1

EDITAR(ver a continuación la respuesta anterior):

Aquí está la versión mejorada que terminé usando. Recomiendo ponerlo en el tufte-book-local.texarchivo. Define un "estilo de título clásico" que cumple con todos los requisitos planteados en la pregunta y activa este estilo al comienzo de cada instancia de 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}

Antigua respuesta:

Cavando a travéstufte-common.defDescubrí que en la primera instancia de un flotante, las definiciones originales de \captiony \labelse guardan en las macros \@tufte@orig@captiony \@tufte@orig@label.

Como no podía parchear el @tufte@floatentorno, solía etoolboxrestaurar los comandos de título y etiqueta originales al comienzo de cada threeparttableentorno:

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

Esto produce exactamente el mismo comportamiento que en las clases estándar (es posible un argumento opcional, etc.), excepto por la alineación. Supongo que la alineación es diferente ya que tufte-altexse define \@makecaptionde manera diferente a las clases estándar.

No sé si este método tiene algún efecto secundario extraño, pero hasta ahora me ha funcionado.

información relacionada