如何在目录中添加具有指定页码的自定义行?

如何在目录中添加具有指定页码的自定义行?

我想将外部软件生成的附录的自定义行添加到目录中。此外,还应该可以指定任何特定附录的页数。我该如何实现?

作为 MWE,我会尽我最大的努力。

\documentclass{report}
\newcommand{\append}[2]{%
  \stepcounter{chapter}%
  \newpage\thispagestyle{empty}\phantom{-}%
  \addcontentsline{toc}{chapter}{\protect\numberline{\Alph{chapter}}{#1}}%
  \newpage\addtocounter{page}{-1}\addtocounter{page}{#2}%
}
\begin{document}
\tableofcontents
\chapter{Chapter 1}
Bla bla
\chapter{Chapter 2}
Bla bla bla
\appendix
\chapter{Appendix 1}
Blah
\append{Extra 1}{2}
\append{Extra 2}{1}
\end{document}

生成的目录:

平均能量损失

不幸的是,要想工作,就需要为每个附录插入一张空白页。

如何才能删除这些多余的空白页,同时保留命令的其他特性\input

答案1

由于您不想包含任何空白页,因为您要单独绘制一些大格式的 CAD 图纸,所以我查看了如何\cftaddtitleline{toc}{chapter}{<text>}{<page>}文档包的tocloft第 49 页:

\newcommand{\cftaddtitleline}[4]{
 \addtocontents{#1}{%
  \protect\contentsline{#2}{#3}{#4}
 }
}

因此,您只需使用\addtocontents而不是\addcontentsline。为了使其显示与其他chapter条目相同,您应该将标题定义为\protect\numberline{\Alph{chapter}}#1},这将在您的*.toc文件中生成此条目:

\contentsline {chapter}{\numberline {2}Chapter 2}{3} %automatically done with \chapter{}
\contentsline {chapter}{\numberline {A}Appendix 1}{11} %added

但是,您不能\thepage在下一行中使用并增加它,因为所有部分都会获得相同的编号:

  \addtocontents{toc}{\protect\contentsline{chapter}{\protect\numberline{\Alph{chapter}}#1}{\thecnt}}
  \addtocounter{page}{#2}

\thepage我添加了一个计数器,在调用之前用 进行设置\append,并且对其进行修改以不影响上一章(附录1)的数量。

\documentclass{report}

\newcounter{cnt}

\newcommand{\append}[2]{%
  \stepcounter{chapter}
  \addtocontents{toc}{\contentsline{chapter}{\protect\numberline{\Alph{chapter}}#1}{\thecnt}}
  \addtocounter{cnt}{#2}
}

\begin{document}
\tableofcontents
\chapter{Chapter 1}
Bla bla
\chapter{Chapter 2}
Bla bla bla
\appendix
\chapter{Appendix 1}
Blah

\setcounter{cnt}{\thepage}
\stepcounter{cnt}
\append{Extra 1}{7}
\append{Extra 2}{8}

% In case you want to add other 'normal' appendices
%\clearpage
%\setcounter{page}{\thecnt}
%\chapter{Appendix \thechapter}

\end{document}

答案2

睡了一觉后,我想出了一个替代方案,效果如预期。它在某种程度上基于 U.Martinez-Corral 的回答。

背景故事:我想创建一个命令,将一个项目添加到目录中并保留指定数量的页面。

这是代码。

\documentclass{report}
\usepackage{afterpage}
\newcounter{count}
\newcounter{add}\setcounter{add}{1}
\newcommand{\append}[2]{%
    \stepcounter{chapter}%
    \setcounter{count}{\thepage}\addtocounter{count}{\theadd}%
    \addtocontents{toc}{\protect\contentsline{chapter}{\protect\numberline{\thechapter}#1}{\thecount}}%
    \addtocounter{add}{#2}%
    \afterpage{\addtocounter{page}{-1}\addtocounter{page}{\theadd}\setcounter{add}{1}}%
    \ignorespaces%
}
\begin{document}
\tableofcontents
\append{Extra 1}{3}
\append{Extra 2}{1}
\chapter{Chapter 1}
\chapter{Chapter 2}
\appendix
\chapter{Appendix A}
Some text
\append{Extra B}{2}
\append{Extra C}{1}
Text out of nowhere!
\append{Extra D}{3}
\chapter{Appendix F}
\append{Extra G}{1}
\append{Extra H}{1}
\end{document}

几句话来解释一下发生了什么。

\setcounter{count}...该行计算幻像​​章节的起始页,同时考虑已保留的页数。

\addtocontents...向目录添加自定义行,该行的格式与其他章节完全相同。

\addtocounter{add}{#2}增加保留页的总数。此数字将在下一页或下一个中使用\append

\afterpage...当新页面开始时被调用。它将保留页面的数量添加到计数器page,并将该数字重置为 1。

\ignorespaces被添加,因此该命令可以在任何地方使用并且不会产生额外的空格,请参见示例中的“无处可寻的文本!”。

感谢您的帮助 :)

相关内容