我正在研究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}
获得的数字列表:
评论:
- 由于以下评论,最初的解决方案得到了简化:马库斯·施马斯曼。
- 作为步调一致他在评论中提到,如果使用连续图形编号方案,则需要进一步改进。完毕经过马库斯·施马斯曼。
- 使用时
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}
不幸的是我也无法发布快照...
无论如何,这是一篇很棒的文章,正是我想要的!