背景:
複数の IEEE 形式の記事をまとめた編集物を作成しています。この編集物には 1 つの目次が含まれます。各論文にはタイトルと\maketitle
コマンドが含まれます。TOC には、各論文のタイトルをプライマリ レベルとして含め、すべてのセクション/サブセクションなどを含めたいと思います。
\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}
次のような TOC を生成する必要があります。
タイトル1
I - セクション 1
IA サブセクション 1
IB サブセクション 2
II - セクション2
タイトル2
I - セクション 1
IA サブセクション 1
IB サブセクション 2
II - セクション2
質問:
タイトルを含めるように目次を変更するにはどうすればよいですか?
\chapter
他の提案も歓迎します。ieeetran やその他の記事/ジャーナル クラスではまたはコマンドが使用されないのは承知しています\part
が、クラスを変更せずにこの操作を強制する方法があれば、そのような解決策にも興味があります。
答え1
\maketitle
は、マクロの終了直前に自分自身を「無効にする」コマンドです (つまり、\relax
その時点では ed です)。そのため、このマクロをさらに呼び出しても何も提供されません。パッチ コマンドを使用すると、これをキャッチして代わりにコマンドを挿入する\let\maketitle\relax
ことができ\addcontentsline
、ToC エントリが実行されます。
さらにtitlecounter
、自動的に参照ステップされるカウンターも導入したので、これ\label
も機能するはずです。ToC エントリの形式は現時点では非常に単純で、自由に変更できます。
\clearpage
Mico は重要な異議を唱えました。コマンドの先頭に rightがあるべきで\maketitle
、これにより、前の項目から可能なフロートが出荷されます。ただし、この動作は 2 番目などに制限しました\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}
レベルインデント付きバージョン
\setlength{\articlesectionindent}{10pt}
タイトルの toc エントリを基準としたレベルのインデントを取得するには、 (またはその他の適切な値)を使用します。
セクションなどのリセットはコマンドで行われます\@addtoreset{section}{titlecounter}
。つまり、 がステップされるたびにtitlecounter
、セクションがリセットされます(それに続いてサブセクションなどもリセットされます)。
\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}
hyperref
** 警告 ** 両方のバージョンともパッケージと連動して失敗します。これは\footnotemark
コマンドに何らかの問題があります。