Fondo:
Estoy creando una compilación de varios artículos en formato IEEE. Esta recopilación tendrá un único índice. Cada artículo incluye un título y \maketitle
un comando. Me gustaría que el TOC incluya el título de cada artículo como nivel primario, junto con todas las secciones/subsecciones, etc.
\documentclass[journal]{IEEEtran}
\begin{document}
\onecolumn
\tableofcontents
\twocolumn
% Title and Author information Paper 1
\title{Title 1}
\author{Author 1}
% Make the title area
\maketitle
$ Paper Content
% Title and Author information Paper 2
\title{Title 2}
\author{Author 2}
% Make the title area
\maketitle
$ Paper Content
\end{document}
Debería generar un TOC que se aproxime a esto:
Título 1
I - Sección 1
IA Subsección 1
Subsección 2 del IB
II - Sección 2
Título 2
I - Sección 1
IA Subsección 1
Subsección 2 del IB
II - Sección 2
Pregunta:
¿Cómo puedo modificar el TOC para incluir títulos?
Estoy abierto a otras sugerencias. Me doy cuenta de que ieeetran u otras clases de artículos/revistas no usan comandos \chapter
ni \part
, pero si hubiera una manera de forzar esta operación sin cambiar la clase, también estaría interesado en esa solución.
Respuesta1
\maketitle
es un comando que se 'deshabilita' justo antes del final de la macro (bueno, \relax
entonces se edita). Como tal, una nueva llamada a esta macro no proporcionará nada. Al usar un comando de parche, esto \let\maketitle\relax
se puede detectar e \addcontentsline
inyectar un comando en su lugar, que luego realizará la entrada de ToC.
Además, introduje un titlecounter
contador, que se actualiza automáticamente, por lo que \label
también debería funcionar. El formato de la entrada de ToC es bastante simple en este momento: cámbielo a voluntad.
Mico tenía una objeción importante: debería haber un \clearpage
derecho al inicio del \maketitle
comando, que eliminaría posibles flotadores del artículo anterior. Sin embargo, restringí este comportamiento al segundo \maketitle
, etc.
\documentclass[journal]{IEEEtran}
\usepackage{etoolbox}%
\usepackage{xpatch}
\usepackage{blindtext}
\makeatletter
\newcounter{titlecounter}
\xpretocmd{\maketitle}{\ifnumgreater{\value{titlecounter}}{1}}{\clearpage}{}{} % Well, this is lazy at the end ;-)
\xpatchcmd{\maketitle}{\let\maketitle\relax\let\@maketitle\relax}{\refstepcounter{titlecounter}\addcontentsline{toc}{section}{\protect{\numberline{\thetitlecounter}{\@title~ \@author}}}}{\typeout{Patching was successful}}{\typeout{patching failed}}%
\makeatother
\begin{document}
\onecolumn
\tableofcontents
\twocolumn
% Title and Author information Paper 1
\title{Title 1}
\author{Author 1}
% Make the title area
\maketitle
\blindtext[10]
%$ Paper Content
% Title and Author information Paper 2
\title{Title 2}
\author{Author 2}
% Make the title area
\maketitle
\blindtext[20]
%$ Paper Content
\end{document}
Versión con sangría de nivel
Use \setlength{\articlesectionindent}{10pt}
(o cualquier otro valor apropiado), para obtener la sangría de niveles relativa a la entrada del título.
El reinicio de secciones, etc. se realiza con el comando \@addtoreset{section}{titlecounter}
, es decir, cada vez que titlecounter
se pisa, se reinician las secciones (y consecutivamente también las subsecciones, etc.)
\documentclass[journal]{IEEEtran}
\usepackage{etoolbox}%
\usepackage{xpatch}
\usepackage{blindtext}
\usepackage{tocloft}%
\newlength{\articlesectionshift}%
\setlength{\articlesectionshift}{10pt}%
\addtolength{\cftsecindent}{\articlesectionshift}%
\makeatletter
\newcounter{titlecounter}
\xpretocmd{\maketitle}{\ifnumgreater{\value{titlecounter}}{1}}{\clearpage}{}{} % Well, this is lazy at the end ;-)
\xpatchcmd{\maketitle}{\let\maketitle\relax\let\@maketitle\relax}{\refstepcounter{titlecounter}\begingroup
\addtocontents{toc}{\begingroup\addtolength{\cftsecindent}{-\articlesectionshift}}%
\addcontentsline{toc}{section}{\protect{\numberline{\thetitlecounter}{\@title~ \@author}}}%
\addtocontents{toc}{\endgroup}}{\typeout{Patching was successful}}{\typeout{patching failed}}%
\@addtoreset{section}{titlecounter}
\makeatother
\begin{document}
\onecolumn
\tableofcontents
\twocolumn
% Title and Author information Paper 1
\title{Title 1}
\author{Author 1}
% Make the title area
\maketitle
\section{First}
\subsection{First subsection of 1st section}%
\subsection{2nd subsection of 1st section}%
\subsection{3rd subsection of 1st section}%
\subsection{4th subsection of 1st section}%
\blindtext[10]
\section{Two}
\subsection{First subsection of 2nd section}%
% Title and Author information Paper 2
\title{Title 2}
\author{Author 2}
% Make the title area
\maketitle
\section{First from second paper}
\subsection{First subsection of 2nd section of 2nd article}%
\blindtext[20]
%$ Paper Content
\end{document}
** Advertencia ** Ambas versiones fallarán junto con hyperref
el paquete. Es algún problema con el \footnotemark
comando.