指定したページ番号のカスタム行を目次に追加するにはどうすればよいですか?

指定したページ番号のカスタム行を目次に追加するにはどうすればよいですか?

外部ソフトウェアで作成した付録のカスタム行を目次に追加したいと考えています。さらに、特定の付録のページ数を指定できるようにする必要があります。どうすればこれを実現できますか?

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>}大きなサイズのCAD図面を別々にプロットするので、空白ページを一切含めたくないので、ドキュメンテーションパッケージのtocloft49ページ:

\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...ToC にカスタム行を追加します。その行は他の章とまったく同じようにフォーマットされます。

\addtocounter{add}{#2}予約ページの総数を増やします。この数は、次のページまたは次の で使用されます\append

\afterpage...新しいページが始まるときに呼び出されます。予約されたページ数をカウンターに追加しpage、その数を 1 にリセットします。

\ignorespacesこのコマンドをどこでも使用でき、追加の空白が生成されないようにするために追加されました。例の「どこからともなくテキストが出てくる!」を参照してください。

ご協力いただきありがとうございます :)

関連情報