我的问题与横向模式和标题在同一页面上的问题。hvfloats
但是,那里建议的解决方案对我不起作用,因为我使用了多个subtable
s。但让我从头开始:
在我的论文附录中,我想添加一个需要设置为横向模式的宽表。通常我只会使用环境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
您在这里面临两个问题:
- 该
hvfloat
包未设置\@captype
(与普通浮动环境不同),因此subcaption
包不知道其命令是在 afigure
、 a内使用table
,还是根本不在浮动环境中使用。 Herbert 必须修复此问题,但您可以使用此方法\captionsetup{type=table}
作为解决方法。 标准文档类设置
\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}