买者自负。

买者自负。

我正在制作一个包含两个子表的表,每个子表都有自己的表注释,因此我使用 threeparttable。但是系统提示我出现以下错误:


    ! Package caption Error: table inside subtable.

    See the caption package documentation for explanation.
    Type  H   for immediate help.
    ...                                                                                            
    l.7         \begin{threeparttable}
    If you do not understand this error, please take a closer look
    at the documentation of the `caption' package, especially the
    section about errors.

这是我的代码的一个小例子。它给出了上面的错误。我搜索了一下,似乎threeparttable应该能够使用subcaption,至少在我这里的简单示例中是这样。你们中有人遇到过类似的问题吗?可以给我指点一下吗?谢谢。


    \documentclass{article}
    \usepackage{threeparttable}
    \usepackage{subcaption}
    \begin{document}
    \begin{table}
        \begin{subtable}{\textwidth}
            \begin{threeparttable}
                \begin{tabular}{ccc}
                    test1 &test1 &test1
                \end{tabular}
            \end{threeparttable}
        \end{subtable}
    \end{table}
    \end{document}

更新 1

感谢@cfr的回答,如果我们把 放在threeparttable外面subtable,编译错误就会消失。但是我们这里有新的问题。让我们首先明确我们想要什么:

  1. 我们想要一个table,这意味着它有一个主标题(Tab 1)。
  2. 在这个顶层里面table,我们需要两个子表,这些子表是否由标签实现subtable并不重要。
  3. 对于每个子表,它都有自己的标题(Tab aTab b)和表格注释。

因此现在我们面临以下问题:

  1. 如果我们将子表的标题放在和之间threeparttablesubtable代码示例如下),子表的标题将使用顶级标题计数器,最终得到Tab 1Tab 2Tab 3在此处输入图片描述

\documentclass{article}
\usepackage{threeparttable}
\usepackage{subcaption}
\begin{document}
\begin{table}
    \centering
    \caption{top level caption}
    \begin{threeparttable}
        \centering
        \caption{sub level caption 1}
        \begin{subtable}{\textwidth}
            \begin{tabular}{|c|c|c|}
                \hline
                test1 &test1 &test1\\
                \hline
            \end{tabular}
        \end{subtable}
    \end{threeparttable}

    \begin{threeparttable}
        \centering
        \caption{sub level caption 2}
        \begin{subtable}{\textwidth}
            \begin{tabular}{|c|c|c|}
                \hline
                test2 &test2 &test2\\
                \hline
            \end{tabular}
        \end{subtable}
    \end{threeparttable}
\end{table}
\end{document}
  1. 如果我们将其放入 环境captionsubtable,则由和分隔开,threeparttable将得到两个Tab a。下面的代码示例和图片。 在此处输入图片描述

\documentclass{article}
\usepackage{threeparttable}
\usepackage{subcaption}
\begin{document}
\begin{table}
    \centering
    \caption{top level caption}
    \begin{threeparttable}
        \centering
        \begin{subtable}{\textwidth}
        \caption{sub level caption 1}
            \begin{tabular}{|c|c|c|}
                \hline
                test1 &test1 &test1\\
                \hline
            \end{tabular}
        \end{subtable}
    \end{threeparttable}

    \begin{threeparttable}
        \centering
        \begin{subtable}{\textwidth}
        \caption{sub level caption 2}
            \begin{tabular}{|c|c|c|}
                \hline
                test2 &test2 &test2\\
                \hline
            \end{tabular}
        \end{subtable}
    \end{threeparttable}
\end{table}
\end{document}

答案1

问题在于,caption包重新定义了threeparttable环境以将标题类型设置为tablecaption使用标题类型检查是否存在不适当的嵌套。在这种情况下,table当在subtable环境中时,它会发现尝试将标题类型设置为。它知道这是不允许的,所以它会给出错误。

最简单的解决方案,特别是如果你的一些threeparttable一些不是类型的,是利用将 放入中subtable时可以正常工作的事实。或者,您可以只在环境中设置标题类型,而根本不使用环境。subtablethreeparttablethreeparttablesubtable

但是,正如您的更新所指出的,这很遗憾地重新启动了每个子表的计数器。这里有一个可以避免这种困难的解决方案。

请注意,这里的想法是,您可以具体更改 的选项threepartsubtable,就像您可以更改 的选项一样threeparttable。我认为一定有一种更优雅的方法可以做到这一点,但尚未找到。

也就是说,我只有很少的线索……

买者自负。

[根据评论进行了编辑,但并不完全符合评论内容。]

\documentclass{article}
\usepackage{threeparttable}
\usepackage{subcaption}
\makeatletter
\newcommand\threepart@subtable{% based on code modified from caption.sty
  \caption@setoptions{threepartsubtable}%
  \caption@ORI@threeparttable
}
\newenvironment{threepartsubtable}{%
  \threepart@subtable
}{%
  \endthreeparttable
}
\makeatother
\captionsetup[threepartsubtable]{subtype}

\begin{document}
\begin{table}
  \centering
  \caption{Standard main caption}
  \begin{subtable}{\textwidth}
    \caption{Caption}
    \begin{tabular}{cc}
      a & b
    \end{tabular}
  \end{subtable}
\end{table}

\begin{table}
  \centering
  \caption{Main caption}
  \begin{threepartsubtable}
    \caption{Caption}
    \begin{tabular}{ccc}
      test 1 & test 1 & test 1
    \end{tabular}
  \end{threepartsubtable}

  \begin{threepartsubtable}
    \caption{Caption}
    \begin{tabular}{ccc}
      test 2  & test 2 & test 2
    \end{tabular}
  \end{threepartsubtable}

  \begin{threepartsubtable}
    \caption{Caption}
    \begin{tabular}{ccc}
      test 3 & test 3 & test 3
    \end{tabular}
  \end{threepartsubtable}

  \begin{threepartsubtable}
    \caption{Caption}
    \begin{tabular}{ccc}
      test 4  & test 4 & test 4
    \end{tabular}
  \end{threepartsubtable}
\end{table}
\begin{table}
  \centering
  \caption{Another main caption}
  \begin{threepartsubtable}
    \caption{Caption}
    \begin{tabular}{ccc}
      test 5 & test 5 & test 5
    \end{tabular}
  \end{threepartsubtable}

  \begin{threepartsubtable}
    \caption{Caption}
    \begin{tabular}{ccc}
      test 6  & test 6 & test 6
    \end{tabular}
  \end{threepartsubtable}
\end{table}


\end{document}

<code>三部分子表</code>

相关内容