在文档类中amsart
,我在表格和图形的标题周围获得了不同的垂直间距。例如,比较一下差异:
\documentclass{amsart}
\begin{document}
\begin{figure}
\begin{center}
\begin{tabular}{c}
Figure
\end{tabular}
\caption{Caption}
\end{center}
\end{figure}
\begin{table}
\begin{center}
\begin{tabular}{c}
Table
\end{tabular}
\caption{Caption}
\end{center}
\end{table}
\end{document}
这是错误吗?更重要的是,是否有某种方法可以获取表格中的图形间距?如果我将文档类更改为article
,则间距将变为相同。
答案1
Im amsart 标题通常位于表格上方和图形下方。这在排版中很常见。这意味着,\caption
在开始表格环境之前定位命令。然后标题和表格之间会有适当的空间。或者你想使用预期的样式?
如果需要,一个快速的解决方法是在标题前手动添加缺失的空格:
\begin{center}
\begin{tabular}{c}
Table
\end{tabular}
\vspace{\abovecaptionskip}
\caption{Caption}
\end{center}
\end{table}
在这种情况下,请考虑使用序言中的这一行删除标题后的空格:
\setlength{\belowcaptionskip}{0pt}
或者将其设置为你喜欢的空间。类似地,你可以更改 \abovecaptionskip 的值。
或者,您可以使用 very finecaption
包。它提供了许多自定义标题格式和对齐方式的方法。例如,如果您只写
\usepackage[tableposition=above]{caption}
那么您可以将 \caption 放在表格环境上方并获得正确的间距。
但是,如果您不想使用 caption 包,您可以\@makecaption
在序言中写入以下内容来重新定义 amsart 的内部命令:
\makeatletter
\renewcommand{\@makecaption}[2]{%
\setbox\@tempboxa\vbox{\color@setgroup
\advance\hsize-2\captionindent\noindent
\@captionfont\@captionheadfont#1\@xp\@ifnotempty\@xp
{\@cdr#2\@nil}{.\@captionfont\upshape\enspace#2}%
\unskip\kern-2\captionindent\par
\global\setbox\@ne\lastbox\color@endgroup}%
\ifhbox\@ne % the normal case
\setbox\@ne\hbox{\unhbox\@ne\unskip\unskip\unpenalty\unkern}%
\fi
\ifdim\wd\@tempboxa=\z@ % this means caption will fit on one line
\setbox\@ne\hbox to\columnwidth{\hss\kern-2\captionindent\box\@ne\hss}%
\else % tempboxa contained more than one line
\setbox\@ne\vbox{\unvbox\@tempboxa\parskip\z@skip
\noindent\unhbox\@ne\advance\hsize-2\captionindent\par}%
\fi
\addvspace\abovecaptionskip
\hbox to\hsize{\kern\captionindent\box\@ne\hss}%
\relax
}
\makeatother
我只是删除了对数字和其他浮点数的不同处理。原始代码在这里有区别:
\ifnum\@tempcnta<64 % if the float IS a figure...
\addvspace\abovecaptionskip
\hbox to\hsize{\kern\captionindent\box\@ne\hss}%
\else % if the float IS NOT a figure...
\hbox to\hsize{\kern\captionindent\box\@ne\hss}%
\nobreak
\vskip\belowcaptionskip
\fi
就在最后一个 之前\relax
。请注意,像这样重新定义内部命令通常不是一个好主意。此类命令以后可能会更改。这只是暂时的解决方法。
使用caption
包功能来做这件事就容易得多。
最后,请注意:\begin{center} ... \end{center}
在图形或浮动环境中使用会导致额外的空间,因为中心环境在内部是一个列表环境,在其前后会带来一些空间。我建议改用命令\centering
。或许可以看看center
对阵\centering
。