Я хочу добавить пользовательские строки для моих приложений, созданных во внешнем программном обеспечении, в оглавление. Кроме того, должна быть возможность указать количество страниц любого конкретного приложения. Как мне этого добиться?
Как 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
Поскольку вы не хотите включать ни одной пустой страницы, поскольку вы собираетесь отдельно печатать некоторые крупноформатные чертежи САПР, я рассмотрел, как\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
После того, как я немного поспал, я смог придумать альтернативу, работающую по желанию. Она в некоторой степени основана на ответе У.Мартинес-Коррала.
Предыстория: Я хотел создать команду, которая будет добавлять элемент в оглавление и резервировать указанное количество страниц.
Вот код.
\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
добавлено, чтобы команду можно было использовать где угодно и не создавать дополнительных пробелов, см. «Текст из ниоткуда!» в примере.
Спасибо за вашу помощь :)