我想在“使用表格列表”\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
并获得所需的输出。