結合簇絨乳膠和三部曲表

結合簇絨乳膠和三部曲表

我正在努力threeparttable與班級一起工作tufte-book。當然,當我使用以下內容時,標題將放置在頁邊距中。在這種情況下,cleveref獲得正確的引用沒有問題(即正確列印“表格”):

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

在此輸入影像描述

現在我想將標題放在表格上方,類似於中的要求這個問題

由於看起來重新定義標題是不可行的,我嘗試透過定義(作為起點)來滾動我自己的標題:

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

在上面的例子中使用\mycaption{Table}代替會產生:\caption{Table caption}

在此輸入影像描述

這會將標題放在正確的位置,但缺少一些功能:

  1. 如果標題短於一行,則將標題置於表格上方居中。
  2. 使用正確的參考文獻\cref。 (重新運行文件多次後仍無法解決。)
  3. 將表格新增至表格清單。
  4. 可以為表格清單提供簡短形式的標題作為第二個參數。

有沒有辦法a)使用現有\caption功能並簡單地將位置更改為上面tabular或b)擴展我的\mycaption命令以使其像\caption標準類中一樣運行,即滿足要求1-4?

答案1

編輯(請參閱下面的舊答案):

這是我最終使用的改進版本。我建議將其放入tufte-book-local.tex文件中。它定義了一個“經典標題樣式”,滿足問題中提出的所有要求,並在每個實例的開頭啟動此樣式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}

舊答案:

挖掘通過tufte-common.def我發現在第一個浮點實例中,\caption和的原始定義\label保存在巨集\@tufte@orig@caption和中\@tufte@orig@label

由於我無法修補@tufte@float環境,我曾經etoolbox在每個環境的開頭恢復原始的標題和標籤命令threeparttable

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

除了對齊之外,這會產生與標準類別中完全相同的行為(可能是可選參數等)。我認為對齊是不同的,因為tufte-altex定義\@makecaption與標準類別不同。

我不知道這個方法是否有任何奇怪的副作用,但到目前為止它對我有效。

相關內容