Problema de numeración de ToC

Problema de numeración de ToC

Mi documento LaTeX está actuando de manera extraña. Aquí hay una versión simplificada:

\documentclass{article}

\begin{document}

\tableofcontents
\newpage

\addcontentsline{toc}{part}{A Part of My Document}
\include{includedfile}

\end{document}

Y en includedfile.tex:

\section{My Section Title}
Quack.

Claramente, en el índice, el encabezado de la parte debe preceder al de la sección, ¡pero no es así! ¿Qué ocurre?

Respuesta1

El problema del retraso que varias personas han mencionado es que TeX retrasa todos \writelos comandos hasta \shipoutel momento. Si por alguna razón necesita un correo electrónico inmediato \write, puede utilizarlo \immediate\write. Con ese fin, aquí hay una nueva macro simple que actúa como \addcontentsline, pero escribe en el archivo auxiliar inmediatamente.

\documentclass{article}
\newcommand\immediateaddcontentsline[3]{%
        \begingroup
        \let\origwrite\write
        \def\write{\immediate\origwrite}%
        \addcontentsline{#1}{#2}{#3}%
        \endgroup
}
\begin{document}

\tableofcontents
\newpage

\immediateaddcontentsline{toc}{part}{A Part of My Document}
\include{includedfile}

\end{document}

Respuesta2

Este es un pequeño tema complicado. Resulta que \includese diferencia de \inputen un aspecto importante; no solo agrega un par de \clearpages. Creo que la solución correcta es crear un \includecomando personalizado que funcione casi como el habitual:

\newcommand{\myinclude}[1]{\clearpage\input{#1}\clearpage}

Cuando usas \addcontentsline, directa o indirectamente, escribe una línea en el auxarchivo que dice "escribe esto y aquello en el tocarchivo". Luego lee el auxarchivo y sigue esa instrucción. Cuando corres látexde nuevo, el tocarchivo tiene lo correcto y obtienes una buena tabla de contenido.

Pero el \writecomando tex tiene algún tipo de retraso (que no entiendo). Cuando lo usas \addcontentslinevarias veces seguidas, no importa porque todos van a la pila de escritura en el orden correcto. Pero aquí está la parte complicada: cuando usas \include, genera unaseparado auxarchivo para el archivo que está incluyendo yinmediatamenteescribe un comando en el auxarchivo principal que dice "ve a buscar auxinstrucciones en ese otro archivo" (sin demoras extrañas). Entonces, si usa \includeinmediatamente después de un , se escribe \addcontentslineel comando "ir a mirar el otro archivo".auxantesel comando "escribir algunas cosas en el tocarchivo". ¡Así que todas las entradas de contenido del archivo incluido se escriben primero!

Respuesta3

A mí me funciona cuando lo reemplazo \includepor \input.

Creo que \includees para capítulos (obliga a \clearpagealgo así), así que nunca lo uso en la práctica.

Respuesta4

Intente mover la línea addcontents encima de la tabla de contenido:

Actualizado:Se produce un pedido incorrecto si \addcontentslineestá en el mismo nivel que \include. Una solución alternativa es tener \addcontentslineen el archivo incluido:

\documentclass{article}
\begin{document}
\tableofcontents
\newpage
\include{includedfile}
\include{some-other-file}
\end{document}

contenidos deincludedfile.tex

\addcontentsline{toc}{part}{First Part of My Document}
\section{My Section Title}
Quack.

información relacionada