是否在带有 titletoc 的图表列表中包含章节?

是否在带有 titletoc 的图表列表中包含章节?

我正在研究book使用titlesec&titletoc并希望包括章节(包括其编号和名称,但没有页码) 在图片列表中,当且仅当它们包含数字。手动添加

\addtocontents{lof}{\contentsline {chapter}{\numberline {\thechapter} {#1}}{} }}

每个章节之后都可以工作(#1是章节名称),而且我还可以修复对齐(不是 MWE 的一部分),但我无法将其附加到\chapter

我可以titletoc将章节添加到图表列表中吗?
或者我该如何修改\chapter以将其添加到 lof 中?

\documentclass[a4paper,12pt]{book}

\usepackage[pagestyles,psfloats,clearempty,newlinetospace]{titlesec}
\usepackage{titletoc}

\titleformat{\chapter}{\huge\bfseries\filcenter}{\vspace{1cm}\thechapter}{0.5cm}{}[]

%\let\Oldchapter\chapter
%\renewcommand{\chapter}[1]{\Oldchapter{#1}\addtocontents{lof}%
%{\contentsline {chapter}{\numberline {\thechapter} {#1}}{} }}

\begin{document}

\tableofcontents
\listoffigures

\mainmatter

\chapter{Introduction}
\section{First}

\chapter{Has Figures}
\begin{figure}
\rule{1cm}{1cm}
\caption{caption text}
\end{figure}

\end{document}

答案1

下面的代码说明了一种可能的解决方案;基本思想是让figure环境完成工作并决定是否将章节信息写入目录;这是通过使用\AtBeginEnvironment(从etoolbox或者xpatch它会在文档中使用一个图形环境(packages);每当文档中使用图形环境时,它都会检查一个布尔标志;如果布尔值为假,则将章节信息添加到 LoF 并将布尔值设置为真;否则,它不会添加任何信息。

\@chapter命令也被修改为重置布尔值并全局存储有关相应标题和编号的信息;然后这些信息将在写入 LoF 时使用。

\documentclass{book}
\usepackage{etoolbox}  % or xpatch

\makeatletter
% initial definitions of the chapter info (name and number)
\def\thischaptertitle{}\def\thischapternumber{}
\newtoggle{noFigs}

\apptocmd{\@chapter}%
  {\gdef\thischaptertitle{#1}\gdef\thischapternumber{\thechapter}%
    \global\toggletrue{noFigs}}{}{}

% the figure environment does the job: the first time it is used after a \chapter command, 
% it writes the information of the chapter to the LoF
\AtBeginDocument{%
  \AtBeginEnvironment{figure}{%
    \iftoggle{noFigs}{
      \addtocontents{lof}{\protect\contentsline {chapter}%
        {\protect\numberline {\thischapternumber} {\thischaptertitle}}{}{} }
      \global\togglefalse{noFigs}
    }{}
  }%
}

\makeatother

\begin{document}

\tableofcontents
\listoffigures

\mainmatter

\chapter{Introduction with no Figures}

\chapter{Test Chapter with Figures}
\begin{figure}
\caption{caption text}
\end{figure}
\begin{figure}
\caption{caption text}
\end{figure}

\chapter{Test Chapter with no Figures}

\chapter{Another Test Chapter with Figures}
\begin{figure}
\caption{caption text}
\end{figure}
\begin{figure}
\caption{caption text}
\end{figure}
\begin{figure}
\caption{caption text}
\end{figure}
\begin{figure}
\caption{caption text}
\end{figure}
\begin{figure}
\caption{caption text}
\end{figure}

\end{document}

获得的数字列表:

在此处输入图片描述

评论:

  1. 由于以下评论,最初的解决方案得到了简化:马库斯·施马斯曼
  2. 作为步调一致他在评论中提到,如果使用连续图形编号方案,则需要进一步改进。完毕经过马库斯·施马斯曼
  3. 使用时hyperref必须加载包线条\apptocmd{\@chapter}...

答案2

处理此问题的另一种方法是修补,不需要单独修改所需的每个环境(图形、表格、算法、列表等)\addcontentsline。对 Gonzalo 的解决方案进行了轻微修改:

\documentclass{book}
\usepackage{etoolbox}

\makeatletter
\def\thischaptertitle{}
\apptocmd{\@chapter}{\gdef\thischaptertitle{#1}}{}{}

\newcommand{\DeclareDividedList}[1]%
  {\newcounter{#1@chapter}\setcounter{#1@chapter}{0}}

\pretocmd{\addcontentsline}%
  {\ifltxcounter{#1@chapter}%
   {%
     \ifnumgreater{\thechapter}{\value{#1@chapter}}{%
       \setcounter{#1@chapter}{\thechapter}%
       \addtocontents{#1}{\protect\contentsline{chapter}%
         {\protect\numberline {\thechapter} {\thischaptertitle}}{}{} }
     }{}%
   }{}%
  }{}{}
\makeatother

\DeclareDividedList{lof}
\DeclareDividedList{lot}

\begin{document}

\tableofcontents
\listoffigures
\listoftables

\mainmatter

\chapter{Introduction with no Figures}

\chapter{Test Chapter with Figures but no Tables}
\begin{figure}
\caption{caption text}
\end{figure}
\begin{figure}
\caption{caption text}
\end{figure}

\chapter{Test Chapter with Tables but no Figures}
\begin{table}
\caption{caption text}
\end{table}
\begin{table}
\caption{caption text}
\end{table}

\chapter{Test Chapter with Figures and Tables}
\begin{figure}
\caption{caption text}
\end{figure}
\begin{table}
\caption{caption text}
\end{table}
\begin{figure}
\caption{caption text}
\end{figure}
\begin{table}
\caption{caption text}
\end{table}
\begin{figure}
\caption{caption text}
\end{figure}

\end{document}

这将为您提供图表列表和表格列表中的章节标题:

图表示例 表格示例列表

如果您没有\DeclareDividedList对其中一个使用,比如说,那么就不会创建lot计数器,并且切换将失败,并且在表格列表中创建行时不会运行添加的代码;列表将按正常方式排版,没有章节标题。\lot@chapter\ifltxcounter

正如前面的例子一样,这往往会与无编号章节的情况发生冲突。

答案3

实际上,与其说是答案,不如说是评论(抱歉,新帐户还没有信用)。通过进行微小的更改,所提出的代码也可用于通过类似地修改环境来在 LoT 中添加章节table

\documentclass{book} \usepackage{etoolbox}  % or xpatch

\makeatletter % initial definitions of the chapter info (name and number) \def\thischaptertitle{}\def\thischapternumber{} \newtoggle{noTabs}

\apptocmd{\@chapter}%   {\gdef\thischaptertitle{#1}\gdef\thischapternumber{\thechapter}%
    \global\toggletrue{noTabs}}{}{}

% the table environment does the job: the first time it is used after a \chapter command,  % it writes the information of the chapter to the LoF \AtBeginDocument{%   \AtBeginEnvironment{table}{%
    \iftoggle{noTabs}{
      \addtocontents{lot}{\protect\contentsline {chapter}%
        {\protect\numberline {\thischapternumber} {\thischaptertitle}}{}{} }
      \global\togglefalse{noTabs}
    }{}   }% }

\makeatother

\begin{document}

\tableofcontents \listoftables

\mainmatter

\chapter{Introduction with no Tables}

\chapter{Test Chapter with Tables} \begin{table} \caption{caption text} \end{table} \begin{table} \caption{caption text} \end{table}

\chapter{Test Chapter with no Tables}

\chapter{Another Test Chapter with Tables} \begin{table} \caption{caption text} \end{table} \begin{table} \caption{caption text} \end{table} \begin{table} \caption{caption text} \end{table} \begin{table} \caption{caption text} \end{table} \begin{table} \caption{caption text} \end{table}

\end{document}

不幸的是我也无法发布快照...

无论如何,这是一篇很棒的文章,正是我想要的!

相关内容