我尝试仅在相关元素存在时有条件地打印图表列表和表格列表。(我首先修改了这个问题的解决方案:仅当内容)
以下代码适用于图表列表(存在前三行/后三行是因为我正在修改现有的论文类并尝试进行最小的更改;我的贡献是中间两行):
\newif\if@figures
\@figurestrue
\def\listoffigures{
\newbox\tmpboxA\newbox\tmpboxB%
\setbox\tmpboxA\vbox{\makeatletter\@input{\jobname.lof}}\setbox\tmpboxB\vbox{Figure 1}%
\ifdim\ht\tmpboxA<\ht\tmpboxB\@figuresfalse\fi
\if@figures\chapter*{List of Figures\markboth
{LIST OF FIGURES}{LIST OF FIGURES}}\@starttoc{lof}\fi
}
但是,对表格列表执行相同操作却不起作用:
\newif\if@tables
\@tablestrue
\def\listoftables{
\newbox\tmpboxA\newbox\tmpboxB%
\setbox\tmpboxA\vbox{\makeatletter\@input{\jobname.lot}}\setbox\tmpboxB\vbox{Table 1}%
\ifdim\ht\tmpboxA<\ht\tmpboxB\@tablesfalse\fi
\if@tables\chapter*{List of Tables\markboth
{LIST OF TABLES}{LIST OF TABLES}}\@starttoc{lot}\fi
}
我发现这是因为\jobname.lof
是空的,而\jobname.lot
包含六个
\addvspace{10pt}
(每个章节一个)。有没有办法解决这个问题/更好的方法来处理这个问题?
编辑:清理目录后,问题似乎出在\@starttoc
命令负责生成文件\jobname.lof
和。因此,在调用\jobname.lot
之前,测试列表的大小无法进行?\@starttoc
答案1
我建议使用链接问题中的第二个答案并使用 totalcount 包:
\documentclass[]{article}
\RequirePackage[figure,table]{totalcount}
\begin{document}
\iftotaltables
\listoftables
\fi
\iftotalfigures
\listoffigures
\fi
\begin{figure}
blal
\caption{a figure}
\end{figure}
\end{document}