章节标题和旋转表格(带子表格)在同一页上

章节标题和旋转表格(带子表格)在同一页上

我的问题与横向模式和标题在同一页面上的问题hvfloats但是,那里建议的解决方案对我不起作用,因为我使用了多个subtables。但让我从头开始:

在我的论文附录中,我想添加一个需要设置为横向模式的宽表。通常我只会使用环境sidewaystable,但这样一来,附录的第一页除了章节标题外就完全是空白的了

\documentclass[a4paper] {scrbook}

\usepackage{rotating}
\usepackage{subcaption}

\begin{document}

\appendix \cleardoublepage
\chapter{Some Data Tables}

\begin{sidewaystable}
  \hspace*{\fill}
  \begin{subtable}{.3\textwidth}
    \rule{\linewidth}{12cm}
  \end{subtable}
  %
  \hspace*{\fill}
  %
  \begin{subtable}{.3\textwidth}
    \rule{\linewidth}{12cm}
  \end{subtable}
  \hspace*{\fill}

  \caption{Table with interesting data}
\end{sidewaystable}

\end{document}

这三个的目的\hspace*{\fill}只是为了让生成的表格在页面上正确居中。


意识到指sidewaystable的是\textheight我也试图暂时调整

\def \textheightTmp \textheight
\def \textheight 0.8\textheightTmp
\begin{sidewaystable}
  [...]
\end{sidewaystable}
\def \textheight \textheightTmp

但这导致了以下错误

附录 A。

! 包标题错误:\setcaptionsubtype 超出浮点数。

请参阅 caption 包文档以了解解释。输入 H 可立即获得帮助。...

l.15 \begin{subtable}{.3\textwidth}


正如我在开头提到的,hvfloats由于subtable

\documentclass[a4paper] {scrbook}

\usepackage{hvfloat}
\usepackage{subcaption}

\begin{document}

\appendix \cleardoublepage
\chapter{Some Data Tables}

\hvFloat[capPos=b,rotAngle=90,nonFloat]{table}{%
  \hspace*{\fill}
  \begin{subtable}{.3\textwidth}
    \rule{\linewidth}{12cm}
  \end{subtable}
  %
  \hspace*{\fill}
  %
  \begin{subtable}{.3\textwidth}
    \rule{\linewidth}{12cm}
  \end{subtable}
  \hspace*{\fill}
}{Table with interesting data}{}

\end{document}

这会导致错误:

附录 A。

! 包标题错误:\setcaptionsubtype 超出浮点数。

请参阅 caption 包文档以了解解释。输入 H 可立即获得帮助。...

l.23}{包含有趣数据的表格}{}


我想要的是旋转表格(带有子表格)和标题,它们与章节标题放在同一页上。空间不是问题,表格可以放在页面上。

有什么办法可以做到这一点?

答案1

您在这里面临两个问题:

  1. hvfloat包未设置\@captype(与普通浮动环境不同),因此subcaption包不知道其命令是在 a figure、 a内使用table,还是根本不在浮动环境中使用。 Herbert 必须修复此问题,但您可以使用此方法\captionsetup{type=table}作为解决方法。
  2. 标准文档类设置\abovecaptionskip为 10pt 到 0pt 的值\belowcaptionskip。将在标题上方和下方\abovecaptionskip使用。但是,当排版在图形或表格内容上方时,这会给您带来一个明显的问题,因为您将在标题和内容之间获得 (=0pt) 的距离,即没有任何距离。有两种不同的(且不兼容的)方法可以解决这种情况:\belowcaptionskip\caption\belowcaptionskip

    • \abovecaptionskip将用于标题和内容之间,\belowcaptionskip将用于标题和浮动环境的边缘之间。(这样做的好处是,您可以使用文档类设置的\abovecaptionskip和的默认值\belowcaptionskip,而当在其内容下方使用时,结果不会发生任何变化\caption,正如 Leslie Lamport 所设计的那样。)

    • 如果标题位于内容下方,则仅\abovecaptionskip使用。如果标题位于内容上方,则仅\belowcaptionskip使用。(需要调整跳过才能使其正常工作,但您可以在此处为标题上方和标题下方设置不同的跳过。)

如您所见,这两种方法各有利弊,但不幸的是它们不兼容。但是,KOMA-Script 和 (sub)caption包使用的是第一种方法,而hvfloat似乎使用的是后一种方法。(我对此不太确定,因为我没有时间研究 Herbers 的来源,但至少hvfloat会改变标题跳过的值,因此只需加载包就会影响非 hvfloat 浮动环境(以及环境longtable和……)的跳过。)

为了弥补这一点,需要编写宏来保存和恢复跳过。

因此,我们总共有:

\documentclass[a4paper] {scrbook}

% Save the values of \abovecaptionskip and \belowcaptionskip into \restorecaptionskips
\edef\restorecaptionskips{%
  \noexpand\setlength\noexpand\abovecaptionskip{\the\abovecaptionskip}%
  \noexpand\setlength\noexpand\belowcaptionskip{\the\belowcaptionskip}}
%\show\restorecaptionskips
\usepackage{hvfloat}
% Save the changed values of \abovecaptionskip and \belowcaptionskip into \restorehvcaptionskips
\edef\restorehvcaptionskips{%
  \noexpand\setlength\noexpand\abovecaptionskip{\the\abovecaptionskip}%
  \noexpand\setlength\noexpand\belowcaptionskip{\the\belowcaptionskip}}
% Restore the values of \abovecaptionskip and \belowcaptionskip
\restorecaptionskips

\usepackage{subcaption}

\begin{document}

\appendix \cleardoublepage
\chapter{Some Data Tables}

\restorehvcaptionskips % only needed if "capPos=t"
\hvFloat[capPos=b,rotAngle=90,nonFloat]{table}{%
\restorecaptionskips
\captionsetup{type=table}% set \@captype
  \hspace*{\fill}
  \begin{subtable}{.3\textwidth}
    \rule{\linewidth}{12cm}
  \end{subtable}
  %
  \hspace*{\fill}
  %
  \begin{subtable}{.3\textwidth}
    \rule{\linewidth}{12cm}
  \end{subtable}
  \hspace*{\fill}
}{Table with interesting data}{}
\restorecaptionskips

\end{document}

附注:另请参阅http://sourceforge.net/p/latex-caption/tickets/4/

相关内容