我正在尝试调整一些代码,以便使用memoir
文档类在我的图表、表格、方程式和反应方案列表中添加章节标题。我昨天问了一个问题并得到了高质量的答案,我对此非常满意并付诸实施,直到我查看了 JohnKormylo 的评论,该评论解决了问题的主要问题,即如何让回忆录识别章节标题以及章节编号(更改\gdef\thischaptertitle{#1}
为{#2}
是解决方案)。现在,如果该章节中没有图表/表格等,则会跳过第 3 章标题,这对我来说非常理想。
现在的问题是代码不兼容hyperref
并且产生以下错误消息:
(./Listoffigurestest.out) (./Listoffigurestest.out)
Package hyperref Warning: old lof file detected, not used; run LaTeX again.
[1{c:/texlive/2021/texmf-var/fonts/map/pdftex/updmap/pdftex.map}]
! Undefined control sequence.
<argument> ...umberline {\thefigure }{\my@caption
}}{\thepage }{\@currentHre...
l.59 \end{figure}
?
即使我在运行之前删除了 .aux 文件,错误仍然存在。如果有人知道如何修复此问题,我将不胜感激,因为我目前对 latex 了解不够,尽管这种情况会随着时间的推移而改变。产生错误的最小工作示例是:
\documentclass[oneside]{memoir}
\usepackage{etoolbox}
\makeatletter
\def\thischaptertitle{}\def\thischapternumber{}
\newtoggle{noFigs}
\apptocmd{\@chapter}%
{\gdef\thischaptertitle{#2}\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}
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Hallo}
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Bye}
\chapter{Bonjour}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\end{document}
编辑:解决章节标题位于...条目列表下方的问题
运行 Ulrike 提供的解决方案时,我的列表中的章节标题如下所示:
我使用的是带有自定义 .sty 包的分段文件\include{}
,因此很难确定导致错误的原因。原来解决方案是删除\include{chapter1}
etc 中的代码,保存并重新执行代码。不知道为什么这样做有效,但就这样吧。
希望这对将来的某人有所帮助。
答案1
我认为你太复杂了。
\documentclass[oneside]{memoir}
\usepackage{etoolbox}
\makeatletter
\def\thischaptertitle{}\def\thischapternumber{}
\newtoggle{noFigs}
\apptocmd{\@chapter}%
{\gdef\thischaptertitle{#2}\gdef\thischapternumber{\thechapter}%
\global\toggletrue{noFigs}}{}{}
\makeatother
\usepackage{hyperref}
\makeatletter
\AtBeginDocument{%
\AtBeginEnvironment{figure}{%
\iftoggle{noFigs}{%
\addtocontents{lof}{\protect\contentsline {chapter}%
{\protect\numberline {\thischapternumber.} {\thischaptertitle}}{}{} }%
\global\togglefalse{noFigs}%
}{}%
}%
}
%
\makeatother
\begin{document}
\listoffigures
\chapter{Testing}
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Hallo}
\section{Hallo}
\begin{figure}[t]
\caption{First figure}
Test
\end{figure}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\chapter{Bye}
\chapter{Bonjour}
\begin{figure}[b]
\caption{Second figure}
Test
\end{figure}
\end{document}