仅显示至少存在一个表的表列表

仅显示至少存在一个表的表列表

如果至少存在一个表,则如何让 Tex 仅显示表列表,而如果没有表则不显示?

答案1

您可以保存的含义\listoftables,使宏成为无操作,然后在第一个开头添加在必须接收其原始含义的table日志文件中写入的指令。\listoftables

使用\AddToHookNext,这只会执行一次。

\documentclass{article}

\makeatletter
\let\orig@listoftables\listoftables
\let\listoftables\relax
\AddToHookNext{env/table/begin}{%
  \write\@auxout{\global\let\string\listoftables\string\orig@listoftables}%
}
\makeatother

\begin{document}

\listoftables

\section{Test}

\begin{table}[htp]
There is a table
\caption{Test}
\end{table}

\begin{table}[htp]
There is a table
\caption{Test}
\end{table}

\end{document}

在此处输入图片描述

.aux文件包含

\relax 
\@writefile{toc}{\contentsline {section}{\numberline {1}Test}{1}{}\protected@file@percent }
\global \let \listoftables\orig@listoftables
\@writefile{lot}{\contentsline {table}{\numberline {1}{\ignorespaces Test}}{1}{}\protected@file@percent }
\@writefile{lot}{\contentsline {table}{\numberline {2}{\ignorespaces Test}}{1}{}\protected@file@percent }
\gdef \@abspage@last{1}

注意这\global是必要的,因为.aux文件是按组读取的。

如果我注释掉两个表环境,输出是

在此处输入图片描述

并且没有生成表格列表。

相关内容