我想按章节分开图片列表和表格列表。我尝试了不同的代码(例如是否在带有 titletoc 的图表列表中包含章节?和包括章节中有带标题的图表的图表列表),但最终得到的是如下代码:
\documentclass[a4paper,oneside,11pt]{report}
\usepackage{etoolbox}
\makeatletter
\newcommand{\thechaptername}{}
\newcounter{chapter@last}
\renewcommand{\chaptermark}[1]
{
\markboth{#1}{}
\renewcommand{\thechaptername}{#1}
}
\pretocmd{\caption}
{\ifnumequal
{\value{chapter}}
{\value{chapter@last}}
{}
{
\addtocontents{lot}
{\protect\numberline{\bfseries\thechapter\quad\thechaptername}}
\addtocontents{lof}
{\protect\numberline{\bfseries\thechapter\quad\thechaptername}}
\setcounter{chapter@last}{\value{chapter}}
}
}
{}
{}
\makeatother
\begin{document}
\tableofcontents
\listoffigures
\listoftables
\newpage
\chapter{Test Chapter with no Figures}
\chapter{Test Chapter with Figures and Tables}
\begin{figure}
\caption{test figure 1}
\end{figure}
\begin{table}
\caption{test table 1}
\end{table}
\begin{figure}
\caption{test figure 2}
\end{figure}
\begin{table}
\caption{test table 2}
\end{table}
\chapter{Test Chapter with no Figures}
\chapter{Test Chapter with Figures only}
\begin{figure}
\caption{test figure 3}
\end{figure}
\begin{figure}
\caption{test figure 4}
\end{figure}
\begin{figure}
\caption{test figure 5}
\end{figure}
\chapter{Test Chapter with Tables only}
\begin{table}
\caption{test table 3}
\end{table}
\begin{table}
\caption{test table 4}
\end{table}
\begin{table}
\caption{test table 5}
\end{table}
\end{document}
不幸的是,代码生成的章节标题中没有图表或表格,如下面的例子所示:
有人可以帮忙解决这个问题,以便代码只生成包含图表或表格的章节的章节标题吗?
答案1
我会分别跟踪最后一个figure
或table
。因此,不要只使用计数器,而是对每个浮点类型chapter@last
使用类似的东西:chapter@last@<type>
\newcounter{chapter@last@figure}
\newcounter{chapter@last@table}
这样,您可以将前缀更新为\caption
如下形式:
\pretocmd{\caption}{
\ifnum\pdfstrcmp{\@captype}{figure}=0
\ifnum\value{chapter}=\value{chapter@last@figure}\else
\addtocontents{lof}
{\protect\numberline{\bfseries\thechapter\quad\thechaptername}}%
\fi
\fi
\ifnum\pdfstrcmp{\@captype}{table}=0
\ifnum\value{chapter}=\value{chapter@last@table}\else
\addtocontents{lot}
{\protect\numberline{\bfseries\thechapter\quad\thechaptername}}%
\fi
\fi
\expandafter\setcounter\expandafter{chapter@last@\@captype}{\value{chapter}}%
}{}{}
上述条件\caption
是判断在 afigure
或 a内是否调用table
。如果文档中只有这两种类型的浮点数,则可能需要稍微简化一下。
每个计数器的更新chapter@last@<type>
都是根据 代码末尾的自动完成的\@captype
。