按章节单独列出图表和目录

按章节单独列出图表和目录

我想按章节分开图片列表和表格列表。我尝试了不同的代码(例如是否在带有 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

我会分别跟踪最后一个figuretable。因此,不要只使用计数器,而是对每个浮点类型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

在此处输入图片描述

相关内容