Fundo:
Estou criando uma compilação de vários artigos no formato IEEE. Esta compilação terá um único índice. Cada artigo inclui um título e \maketitle
um comando. Gostaria que o sumário incluísse o título de cada artigo como nível primário, juntamente com todas as seções/subseções, 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}
Deve gerar um TOC que se aproxime disso:
Título 1
I - Seção 1
IA Subseção 1
Subseção IB 2
II - Seção 2
Título 2
I - Seção 1
IA Subseção 1
Subseção IB 2
II - Seção 2
Pergunta:
Como posso modificar o sumário para incluir títulos?
Estou aberto a outras sugestões. Sei que o ieeetran ou outras classes de artigos/diários não usam comandos \chapter
ou \part
, mas se houvesse uma maneira de forçar essa operação sem alterar a classe, eu também estaria interessado em tal solução.
Responder1
\maketitle
é um comando que se 'desativa' logo antes do final da macro (bem, \relax
então é editado). Como tal, uma nova chamada para esta macro não fornecerá nada. Usando um comando patch, isso \let\maketitle\relax
pode ser capturado e um \addcontentsline
comando injetado, que fará a entrada do ToC.
Introduzi ainda um titlecounter
contador, que é redefinido automaticamente, então \label
também deve funcionar. O formato da entrada do ToC é bastante simples no momento – mude à vontade.
Mico teve uma objeção importante: deveria haver um \clearpage
direito no início do \maketitle
comando, que despachará possíveis carros alegóricos do artigo anterior. Porém, restrinjai esse comportamento ao 2º \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}
Versão com recuo de nível
Use \setlength{\articlesectionindent}{10pt}
(ou qualquer outro valor apropriado), para obter o recuo dos níveis relativos à entrada do título toc.
O reset das seções etc. é feito com o comando \@addtoreset{section}{titlecounter}
, ou seja, cada vez que o titlecounter
é pisado, as seções são resetadas (e consecutivamente as subseções etc. também)
\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}
** Aviso ** Ambas as versões falharão em conjunto com hyperref
o pacote. É algum problema com o \footnotemark
comando.