Hintergrund:
Ich erstelle eine Zusammenstellung mehrerer Artikel im IEEE-Format. Diese Zusammenstellung wird ein einzelnes Inhaltsverzeichnis haben. Jeder Artikel enthält einen Titel und \maketitle
einen Befehl. Ich möchte, dass das Inhaltsverzeichnis den Titel jedes Artikels als primäre Ebene enthält, zusammen mit allen Abschnitten/Unterabschnitten usw.
\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}
Sollte ein Inhaltsverzeichnis generieren, das ungefähr folgendes enthält:
Titel 1
I - Abschnitt 1
IA Unterabschnitt 1
IB Unterabschnitt 2
II - Abschnitt 2
Titel 2
I - Abschnitt 1
IA Unterabschnitt 1
IB Unterabschnitt 2
II - Abschnitt 2
Frage:
Wie kann ich das Inhaltsverzeichnis ändern, um Titel einzuschließen?
Ich bin offen für andere Vorschläge. Mir ist klar, dass die ieeetran- oder andere Artikel-/Journalklassen keine \chapter
oder \part
-Befehle verwenden, aber wenn es eine Möglichkeit gäbe, diesen Vorgang zu erzwingen, ohne die Klasse zu ändern, wäre ich auch an einer solchen Lösung interessiert.
Antwort1
\maketitle
ist ein Befehl, der sich kurz vor dem Ende des Makros selbst „deaktiviert“ (also, es wird \relax
dann beendet). Ein weiterer Aufruf dieses Makros bringt daher nichts. Mit einem Patch-Befehl \let\maketitle\relax
kann dies abgefangen und \addcontentsline
stattdessen ein Befehl eingefügt werden, der dann den ToC-Eintrag vornimmt.
Ich habe außerdem einen titlecounter
Zähler eingeführt, der automatisch neu gestartet wird, also \label
sollte das auch funktionieren. Das Format des ToC-Eintrags ist im Moment recht einfach – ändern Sie es nach Belieben.
Mico hatte einen wichtigen Einwand: Es müsste gleich \clearpage
zu Beginn des \maketitle
Befehls ein Häkchen stehen, das eventuell vorhandene Floats aus dem vorhergehenden Artikel aussortiert. Ich habe dieses Verhalten allerdings auf den 2. usw. beschränkt \maketitle
.
\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}
Ausführung mit ebener Einkerbung
Verwenden Sie \setlength{\articlesectionindent}{10pt}
(oder einen anderen geeigneten Wert), um die Einrückung der Ebenen relativ zum Titelinhaltsverzeichniseintrag zu erhalten.
Das Zurücksetzen von Abschnitten etc. erfolgt mit dem Befehl \@addtoreset{section}{titlecounter}
, d. h. jedes Mal, wenn der titlecounter
Schritt ausgeführt wird, werden die Abschnitte (und anschließend auch die Unterabschnitte etc.) zurückgesetzt.
\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}
** Warnung ** Beide Versionen schlagen in Verbindung mit hyperref
dem Paket fehl. Es liegt ein Problem mit dem \footnotemark
Befehl vor.