我想将章节标题添加到图表等列表中。我无法在手册中找到解决方案memoir
,尽管解决方案可能包含在其中,但我不知道我到底在寻找什么,所以我很抱歉。
我已经修改了RicoRally 的 EDIT 解决方案在这里应用于章节,但memoir
检测不到标题,或者它们被称为我不知道的其他名称。代码\documentclass{memoir}
生成以下 lof:
而代码\documentclass{report}
生成了这个 lof:
我正在使用的代码是:
\documentclass[oneside]{memoir}
\usepackage{lipsum}
\usepackage{etoolbox}
\makeatletter
\def\thischaptertitle{}\def\thischapternumber{}
\newtoggle{noFigs}
\apptocmd{\@chapter}%
{\gdef\thischaptertitle{#1}\gdef\thischapternumber{\thechapter}%
\global\toggletrue{noFigs}}{}{}
\AtBeginDocument{%
\AtBeginEnvironment{figure}{%
\iftoggle{noFigs}{
\addtocontents{lof}{\protect\contentsline {chapter}%
{\protect\numberline {\thischapternumber.} {\thischaptertitle}}{}{} }
\global\togglefalse{noFigs}
}{}
}%
}
\long\def\@caption#1[#2]#3{%
\par
\gdef\my@caption{#2}
\begingroup
\@parboxrestore
\if@minipage
\@setminipage
\fi
\normalsize
\@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
\endgroup}
\renewenvironment{figure}%
{\@float{figure}}%
{\end@float
\addcontentsline{lof}{figure}%
{\protect\numberline{\thefigure}{\my@caption}}%
}%
\renewenvironment{figure*}%
{\@dblfloat{figure}}%
{\end@dblfloat
\addcontentsline{lof}{figure}%
{\protect\numberline{\thefigure}{\my@caption}}%
}%
\makeatother
%\usepackage{hyperref}
\begin{document}
\listoffigures
\chapter{Testing}
\lipsum
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Hallo}
\lipsum
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\end{document}
\makeatletter
我大概了解了和之间的代码要点,\makeatother
尽管我不明白该\long\def
部分的作用。如果有人能帮我将章节标题添加到memoir
lof,我将不胜感激。
memoir
或代码均report
不起作用hyperref
,它会给出以下错误消息:
Package hyperref Warning: old lof file detected, not used; run LaTeX again.
[1{c:/texlive/2021/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] [2]
! Undefined control sequence.
<argument> ...umberline {\thefigure }{\my@caption
}}{\thepage }{\@currentHre...
l.60 \end{figure}
如果有人能同时帮助我解决这个问题,我将不胜感激,尽管如果需要的话我也可以将其作为单独的问题提出。
答案1
在包含图表的章节中使用:
\addcontentsline{lof}{chapter}{\thechapter.\;~Testing}
之后 \chapter{Testing}
等等。
更新
\chapterlof
在任何\chapter{..}
数字后使用。
一个简单的回忆录 MWEhyperref
\documentclass[oneside]{memoir}
\usepackage{lipsum}
\usepackage{hyperref}
%**************************** added
\makeatletter
\def\printchaptertitle#1{\chaptitlefont #1 \gdef\thischaptertitle{#1}}%
\makeatother
\cftsetindents{figure}{1.5em}{2.3em} %indent
\newcommand{\chapterlof}{\addcontentsline{lof}{chapter}{\thechapter.\;~\thischaptertitle}}% add chapter to lof
%*****************************************
\begin{document}
\listoffigures
\chapter{Testing}
\chapterlof % add chapter to lof
\lipsum
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Hallo}
\chapterlof
\lipsum
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Bye}
\end{document}
答案2
我感谢 Simon Dispa 的回答,我注意到了你关于“更自动化的东西”的评论。以下是 Simon 的回答的一个版本,它会自动将章节添加到 LoF
% chapinlofprob.tex 603616 (A modified version of Simon Dispa's answer)
\documentclass[oneside]{memoir}
\usepackage{lipsum}
\usepackage{hyperref}
%**************************** added
\newcommand{\chapterlof}{\addcontentsline{lof}{chapter}{\thechapter.\;~\thischaptertitle}}% add chapter to lof
%%%% PW deleted
%\makeatletter
%\def\printchaptertitle#1{\chaptitlefont #1 \gdef\thischaptertitle{#1}}%
%\makeatother
\cftsetindents{figure}{1.5em}{2.3em} %indent
%*****************************************
\begin{document}
\tableofcontents
\listoffigures
%%%% PW added here
\makeatletter
\def\printchaptertitle#1{\chaptitlefont #1 \gdef\thischaptertitle{#1}\chapterlof}%
\makeatother
\chapter{Testing}
%\chapterlof % add chapter to lof PW deleted
\lipsum
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Hallo}
%\chapterlof % PW deleted
\lipsum
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Bye}
\end{document}
请注意,如果的定义\printchaptertitle
位于之前,\listoffigures
则可以将各种未编号的章节式标题添加到 LoF;这就是为什么我把它放在第一个编号章节之前。