仅列出某些表格以列出表格

仅列出某些表格以列出表格

我想在“使用表格列表”\listoftables命令中仅列出书中的某些表格,尤其是带标题的表格。我标记了带标题的表格,而没有标记的表格。我该如何解决这个问题?假设我有 100 个表格中的 15 个表格想要列出。

我使用空的\caption{}无标题表格仅用于显示表格编号。

答案1

好的,让我们假设您想要一个备用字幕命令,该命令仅打印表格编号,但不打印字幕,也不会进入表格列表。

让我们看看它\caption是如何定义的,部分是在 LaTeX 内核中:

\def\caption{%
   \ifx\@captype\@undefined
     \@latex@error{\noexpand\caption outside float}\@ehd
     \expandafter\@gobble
   \else
     \refstepcounter\@captype
     \expandafter\@firstofone
   \fi
   {\@dblarg{\@caption\@captype}}%
}
\long\def\@caption#1[#2]#3{%
  \par
  \addcontentsline{\csname ext@#1\endcsname}{#1}%
    {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}%
  \begingroup
    \@parboxrestore
    \if@minipage
      \@setminipage
    \fi
    \normalsize
    \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
  \endgroup}

部分存在于文档类中(基类的实现都非常相似):

\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \sbox\@tempboxa{#1: #2}%
  \ifdim \wd\@tempboxa >\hsize
    #1: #2\par
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip\belowcaptionskip}

这将很容易简化以满足您的需求。我们无需担心处理可选参数或任何参数。相反,我们将创建一个\nocaption命令,只打印表号而不打印其他内容。作为额外的奖励,我们的格式可以比 提供的格式更好一些\caption{}

第一步是,当我们调用时,我们将进行检查以确保我们在浮点数内\caption

\def\nocaption{%
   \if\@captype\@undefined
       \@latex@error{\noexpand\nocaption outside float}\@ehd
   \else
      \refstepcounter\@captype

没有必要担心解析参数的相关内容,但我们会将所有内容包装在\if...中\fi,以便我们可以从错误中恢复。

我们不需要这里的任何其他内容\caption\@caption我们需要做的就是将表号居中并留出适当的间距

      \vskip\abovecaptionskip
      \hb#@xt@\hsize{\hfil\normalsize \@nameuse{\@captype} 
          \@nameuse{the\@captype}\hfil}
      \vskip\belowcaptionskip

\@nameuse是 LaTeX 中的一个内部宏,允许我们通过名称访问命令(它与\csname...相同\endcsname。内核在选择...方面不一致\@nameuse\csname原因\endcsname我怀疑没人知道,但很可能只是代码的不同年代)。

最后,我们可以结束我们的\if......\fi和我们的定义:

    \fi
  }

现在您可以用 替换所有\caption{}s\nocaption并获得所需的输出。

相关内容