在 amsart 中,如何使表格中的标题间距与图形中的一样?

在 amsart 中,如何使表格中的标题间距与图形中的一样?

在文档类中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

相关内容