
我正在努力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}
這會將標題放在正確的位置,但缺少一些功能:
- 如果標題短於一行,則將標題置於表格上方居中。
- 使用正確的參考文獻
\cref
。 (重新運行文件多次後仍無法解決。) - 將表格新增至表格清單。
- 可以為表格清單提供簡短形式的標題作為第二個參數。
有沒有辦法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
與標準類別不同。
我不知道這個方法是否有任何奇怪的副作用,但到目前為止它對我有效。