longtable 中的 captionof 给出了放错位置的 \noalign

longtable 中的 captionof 给出了放错位置的 \noalign

尝试制作一个多页图形面板,其中 50 个相同大小的图形以 2x5 的排列方式分布在 5 页上,整个图形的标题位于第一页的顶部,所有内容都放置在边距已减小的页面上。

使用 subfigure、subfig、subcaption 时,我只收到“未处理的浮动框太多”的错误,虽然 \usepackage{morefloats} 消除了错误,但也删除了图形。切换到简单的“表格”会导致其他问题,与“minipage”类似,其中图形面板必须拆分为每页一个面板,然后其他浮动框会出现在面板之间,尽管之前已多次使用 \clearpage。

使用 'longtable' 几乎可以正常工作。但表格不计入图形中。

\documentclass{article}
\usepackage{longtable}
\usepackage{capt-of}
\begin{document}

\begin{longtable}{cc}
    \captionof{figure}{This gives a Misplaced noalign error \label{fig:dummy1}} \\
     %\caption[This]{Works} \\
    Test & test 2 \\
    Test & test 2 \\
% later need to include this: \addtocounter{table}{-1} %
\end{longtable}

\end{document}

如何让 captionof 起作用……?

答案1

longtable有其自己的定义,\caption这使得使用\captionof加倍困难:即使你绕过Misplaced \noalign,你也会注意到 floattypetable是硬编码的......

正如\captionof总是所说的那样,如果不完全重写的版本,\caption就很难以一种可以在 内部和外部工作的方式对其进行修补。这是一个基于 的想法:longtablelongtable\caption\multicolumn

\documentclass{article}
\usepackage{longtable}
\usepackage{etoolbox}

\makeatletter
\let\o@caption\caption
\newcommand\LT@captionof[2]
{%
  \multicolumn{\LT@cols}{p{\textwidth}}{\def\@captype{#1}\o@caption{#2}}%
}
\patchcmd\LT@array{\let\caption\LT@caption}
{\let\caption\LT@caption\let\captionof\LT@captionof}{}{}
\makeatother

\begin{document}

\listoffigures

\begin{longtable}{cc}
    \captionof{figure}{This gives a Misplaced noalign error \label{fig:dummy1}} \\
     %\caption[This]{Works} \\
    Test & test 2 \\
    Test & test 2 \\
% later need to include this: \addtocounter{table}{-1} %
\end{longtable}

reference to figure \ref{fig:dummy1}.

\end{document}

在此处输入图片描述

答案2

不要脸地自我宣传:/Myltcaption包(它是包束的一部分caption)提供了一种重新定义所使用的浮点类型的方法longtable

\documentclass{article}
\usepackage{longtable}
\usepackage{ltcaption}
\begin{document}

\renewcommand\LTcaptype{figure}
\begin{longtable}{cc}
    \caption{This does not give a Misplaced noalign error \label{fig:dummy1}} \\
    Test & test 2 \\
    Test & test 2 \\
% not needed: \addtocounter{table}{-1} %
\end{longtable}

\end{document}

相关内容