在目录中包含 \maketitle 来编译 IEEE 文章的“书”

在目录中包含 \maketitle 来编译 IEEE 文章的“书”

背景:

我正在创建多篇 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. 标题 1

    我 - 第 1 部分

    IA 第 1 款

    IB 第 2 小节

    第二部分

  2. 标题 2

    我 - 第 1 部分

    IA 第 1 款

    IB 第 2 小节

    第二部分

问题:

我如何修改目录以包含标题?

我愿意听取其他建议。我知道 ieeetran 或其他文章/期刊类别不使用\chapter\part命令,但如果有一种方法可以在不更改类别的情况下强制执行此操作,我也会对这样的解决方案感兴趣。

答案1

\maketitle是一个命令,它在宏结束之前“禁用”自身(好吧,它\relax当时被 ed 了)。因此,进一步调用此宏将不会提供任何结果。通过使用 patch 命令,\let\maketitle\relax可以捕获此情况并\addcontentsline注入命令,然后执行 ToC 条目。

我进一步引入了一个titlecounter计数器,它会自动进行 refstepped,因此它\label也应该可以工作。目前 ToC 条目的格式非常简单 - 可以随意更改。

\clearpageMico 有一个重要的反对意见:命令开头应该有一个右键\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命令的一些问题。

相关内容