如何将空白页上的 addcontentsline 包含到目录中

如何将空白页上的 addcontentsline 包含到目录中

\addcontentsline当页面“发货”时,会将其写入目录。如果命令位于空白页上,且未写入 pdf 或 dvi,则会丢失。

问题:我该如何让\addcontentsline下面的空白页工作?,无需添加可见的文本

\documentclass{article}
\begin{document}
\tableofcontents

blub 
\addcontentsline{toc}{section}{section 1}
\newpage
%empty page 
\addcontentsline{toc}{section}{section 2} %lost
\end{document}

我还对只有 的部分感兴趣figure。在这样的部分中addcontentsline不起作用。我想要一个解决方案,这样我就不必把addcontentsline 里面使其figure能够工作。

答案1

我对这个问题的理解是,你想要\addcontentsline一个具有新页码的“虚拟”页面,但不需要最终文档中的页面,因为它是在其他地方生成的。

\addcontentsline\write如果页面已发送,则使用实际执行的延迟写入,其中包含写入节点。但是 TeX 也知道使用\immediatebefore 的立即写入\write

延迟写入的原因是,页码至少在输出时在输出例程中是已知的,该例程通常在稍后的时间异步调用。然而,在问题的情况下,我们正位于\newpage新页面顶部之后。这\thepage是已知的并且有效的。

该示例定义了\NoPageAddContentsLine本地重新定义\protected@write

  • \immediate\write用来代替延迟的\write
  • \protect必须简化为\noexpand。原文使用了一个额外的扩展级别,而这个扩展级别对于书写\protected@write来说并不需要。\immediate
\documentclass{article}

\makeatletter
\newcommand*{\NoPageAddContentsLine}[3]{%
  \begingroup
    \newpage
    \let\protected@write\protected@immediate@write
    \addcontentsline{#1}{#2}{#3}%
  \endgroup
  \stepcounter{page}%
}
\newcommand{\protected@immediate@write}[3]{%
  \begingroup
    #2%
    \let\protect\noexpand
    \immediate\write#1{#3}%
  \endgroup
}
\makeatother

\begin{document}
\tableofcontents
\listoffigures

\bigskip
\hrule
\noindent
blub
\addcontentsline{toc}{section}{section 1}
\NoPageAddContentsLine{toc}{section}{section 2}
\NoPageAddContentsLine{lof}{section}{figure 9}
\end{document}

结果:PDF文件1仅页面并为虚拟页面更正页码。

结果

答案2

为了解决您提到的第一个问题,请\null在原本空白的页面上添加类似的内容。

要将“隐形人物”——无论它是什么……——添加到人物列表中,您应该使用如下指令

\addcontentsline{lof}{section}{figure 9}

当然,还要添加\listoffigures打印图表列表的说明。如果包含说明的页面\addcontentsline{lof}{section}{figure 9}完全是空白的,请务必\null也提供说明...

在此处输入图片描述

\documentclass{article}
\begin{document}
\tableofcontents
\listoffigures

\bigskip
\hrule
\noindent
blub 
\addcontentsline{toc}{section}{section 1}
\newpage
\null
%empty page 
\addcontentsline{toc}{section}{section 2} % no longer lost b/c page no longer completely empty
\newpage
\addcontentsline{lof}{section}{figure 9}
\null
\end{document}

答案3

要将您的条目添加到目录中而不添加额外的空格,您可以使用以下新命令:

\newcommand{\acl}[3]{
\begingroup
\let\newpage\relax
\null
\addcontentsline{#1}{#2}{#3}
\endgroup}

您可以使用\acl(或您想要赋予的任何其他名称),就像使用 一样\addcontentsline

代码解释:

  • \newcommand定义新命令(第一个参数),该命令接受其选项中指定的参数数量,并在其第二个参数中执行代码。这里,新参数是\acl,它接受三个参数,就像\addcontentsline!一样。
  • \begingroup并将\endgroup代码封闭在他们之间的小安全天堂中。
  • \let\newpage\relax确保 LaTeX 即使想要开始新页面也无法开始。
  • 因为放松是在团体之间进行的,所以命令\newpage将在团体之外正常起作用。

相关内容