如果至少存在一个表,则如何让 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
文件是按组读取的。
如果我注释掉两个表环境,输出是
并且没有生成表格列表。