Hyperref 导致回忆录列表中的章节标题出现错误

Hyperref 导致回忆录列表中的章节标题出现错误

我正在尝试调整一些代码,以便使用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}

相关内容