topfigrule 仅适用于图形,不适用于表格

topfigrule 仅适用于图形,不适用于表格

我的表格有上面的标题,并在末尾设置了booktabs's \bottomrule。我想用 's 将图表(其标题在下面)与文本分开\topfigrule

\newcommand{\topfigrule}{\hrule}

不适用于表格,因为它们之间已经被 足够分开了\bottomrule

我如何配置\topfigrule才能仅对图形有效?

假设页面顶部始终只有一个浮动元素,要么是表格或者一个数字。

MWE:第一页有表格,第二页有图片。第一页不应该有 topfigrule。

\documentclass[captions=tableheading]{scrbook}
\usepackage{booktabs}
\usepackage{blindtext}

\newcommand{\topfigrule}{\vspace{0.5cm}\hrule}
\setlength{\textfloatsep}{0.5cm}

\begin{document}

\blindtext

\begin{table}
  \caption{Foo}
  \centering
  \begin{tabular}{@{}ccccc@{}}
    \toprule
     1 & 2 & 3 & 4 & 5\\\midrule
     a & b & c & d & e\\
     \bottomrule
  \end{tabular}
\end{table}

\clearpage

\blindtext

\begin{figure}
  \centering
  \caption{Bar}
  \rule{2cm}{2cm}
\end{figure}

\end{document}

答案1

LaTeX 通常不会跟踪此时的浮点类型,但您可以让它记住它看到的最后一种类型,然后根据该类型制定规则:

在此处输入图片描述

\documentclass{article}

\makeatletter
\def\@comflelt#1{%
{\count@\count#1\divide\count@32 \xdef\lasttype{\the\count@}}%
\setbox\@tempboxa
      \vbox{\unvbox\@tempboxa\box #1\vskip\floatsep}}

\newcommand{\topfigrule}{\ifnum\lasttype=1\hrule\fi}

\makeatother

\begin{document}
aaa

\begin{table}[t]\caption{ccc} xxx\end{table}

bbb

\newpage

aaa

\begin{figure}[t]xxx \caption{kkk}\end{figure}

bbb

\end{document}

相关内容