我想将外部软件生成的附录的自定义行添加到目录中。此外,还应该可以指定任何特定附录的页数。我该如何实现?
作为 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
被添加,因此该命令可以在任何地方使用并且不会产生额外的空格,请参见示例中的“无处可寻的文本!”。
感谢您的帮助 :)