\addcontentsline 在带有图像的页面上

\addcontentsline 在带有图像的页面上

根据使用 \addcontentsline 添加的章节未出现在目录中,第 2 节未显示在目录中的原因是它是一个空白页。但是,即使我添加了图像,目录仍然不包含第 2 节。我猜是因为同样的原因(页面中有空文本)。有办法解决这个问题吗?仅供参考,我能够将文本添加到第 2 节中,并且效果很好,但我只想知道一种简洁的方法。

\documentclass{article}

\usepackage{graphicx}

\begin{document}
\tableofcontents

blub 
\addcontentsline{toc}{section}{section 1}
\newpage
%empty page

\begin{figure}[t]
    \centering
    \includegraphics[width=0.9\textwidth]{pic.jpg}
    \caption{pic A}
    \label{picA}
\end{figure}

\addcontentsline{toc}{section}{section 2} %lost
\end{document}

答案1

免责声明

此解决方案在某些情况下会产生错误的页码!请谨慎使用!

解决方案

真正的问题是,如果\write( 使用的\addcontentsline) 毕竟是文档中的材料,它就会丢失。如果我们将其设为\immediate\write,它会进入目录,但可能带有错误的页码,即展开的页码,而不是排版周围文本的页码。

\documentclass{article}

\usepackage{graphicx}

\makeatletter
\let\orig@write\write
% xacl = extra add contents line
% USE WITH CAUTION!!!
\def\xacl{\def\write{\immediate\orig@write}}
\makeatother

\begin{document}
\tableofcontents

blub 
\addcontentsline{toc}{section}{section 1}
\newpage
%empty page

\begin{figure}[t]
    \centering
    \includegraphics[width=0.9\textwidth]{pic.jpg}
    \caption{pic A}
    \label{picA}
\end{figure}

\begingroup
\xacl % locally make `\write -> \immediate@write`
\addcontentsline{toc}{section}{section 2} %lost
\endgroup

\end{document}

相关内容