背景:
我正在創建多篇 IEEE 格式文章的彙編。該彙編將有一個目錄。每篇論文都包含標題和\maketitle
命令。我希望目錄將每篇論文的標題以及所有章節/小節等作為主要等級。
\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}
應該會產生一個近似於此的目錄:
標題 1
I - 第 1 節
IA 第 1 款
IB 第 2 款
II - 第 2 節
標題 2
I - 第 1 節
IA 第 1 款
IB 第 2 款
II - 第 2 節
問題:
如何修改目錄以包含標題?
我願意接受其他建議。我意識到 ieeetran 或其他文章/期刊類別不使用\chapter
或\part
命令,但如果有一種方法可以在不更改類別的情況下強制執行此操作,我也會對這樣的解決方案感興趣。
答案1
\maketitle
是一個命令,它在巨集結束之前「禁用」自身(好吧,\relax
然後是 ed)。因此,進一步呼叫該巨集將不會提供任何結果。透過使用 patch 命令,\let\maketitle\relax
可以捕獲此問題並\addcontentsline
注入命令,然後該命令將執行目錄條目。
我進一步引入了一個titlecounter
計數器,它會自動重新執行,因此\label
應該也可以工作。目前ToC條目的格式非常簡單-隨意更改。
\clearpage
Mico 有一個重要的反對意見:命令的開頭應該有一個右側\maketitle
,它將從前一篇文章中發出可能的浮動。但是,我將這種行為限制為第二次等\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}
(或任何其他適當的值),以獲得相對於標題目錄條目的層級縮排。
部分等的重置是透過命令完成的\@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
命令有問題。