¿Cómo agregar líneas personalizadas con un número de página específico a la tabla de contenido?

¿Cómo agregar líneas personalizadas con un número de página específico a la tabla de contenido?

Quiero agregar líneas personalizadas para mis apéndices, producidos en software externo, al índice. Además, debería ser posible especificar el número de páginas de cualquier apéndice en particular. ¿Cómo puedo conseguir esto?

Como MWE haré mi mejor esfuerzo.

\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}

TOC generado:

MWE

Lamentablemente, para funcionar, es necesario insertar una página en blanco para cada apéndice.

¿Cómo puedo deshacerme de esas páginas en blanco adicionales y mantener otras características del \inputcomando?

Respuesta1

Como no desea que se incluya ninguna página en blanco, porque va a trazar algunos dibujos CAD de gran formato por separado, miré cómo \cftaddtitleline{toc}{chapter}{<text>}{<page>}se define en eldocumentacióndel tocloftpaquete, página 49:

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

Por lo tanto, sólo tienes que usar \addtocontentsen lugar de \addcontentsline. Para que se muestre igual que las otras chapterentradas, debe definir el título como \protect\numberline{\Alph{chapter}}#1}, lo que producirá esta entrada en su *.tocarchivo:

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

Sin embargo, no puede usarlo \thepagee incrementarlo en la siguiente línea, porque todas las secciones obtendrán el mismo número:

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

Agregué un contador que se configura \thepageantes de llamar \appendy se modifica para no afectar el número del capítulo anterior (Apéndice 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}

Respuesta2

Después de dormir un poco, se me ocurrió una alternativa y funcionó como deseaba. Se basa en cierta medida en la respuesta de U. Martínez-Corral.

Historia de fondo: quería crear un comando que agregara un elemento a la tabla de contenido y reservara una cantidad específica de páginas.

Aquí está el código.

\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}

Unas pocas palabras para explicar lo que está pasando.

\setcounter{count}...La línea calcula la página inicial del capítulo fantasma, teniendo en cuenta el número de páginas ya reservadas.

\addtocontents...agrega una línea personalizada a ToC, la línea tiene el mismo formato que cualquier otro capítulo.

\addtocounter{add}{#2}incrementa el número total de páginas reservadas. Este número se utilizará en la página siguiente o en la siguiente \append.

\afterpage...Se invoca cuando comienza una nueva página. Agrega el número de páginas reservadas al pagecontador y restablece el número a 1.

\ignorespacesse agrega para que el comando pueda usarse en cualquier lugar y no produzca espacios en blanco adicionales; consulte "¡Texto surgido de la nada!" en el ejemplo.

Gracias por tu ayuda :)

información relacionada