将目录中的(子)节号移至(子)节标题的右侧

将目录中的(子)节号移至(子)节标题的右侧

我稍微重新设计了\section\subsection,以更好地满足我写作业时的需求。使用 titlesec,我将(子)节编号移到了(子)节标题的右侧。在我的序言中:

\usepackage[compact,explicit]{titlesec}

\def\thesection{\Roman{section}}
\titleformat{\section}[hang]{\Large\bfseries}{}{0pt}{#1 \thesection}
\def\thesubsection{\roman{subsection}:}
\titleformat{\subsection}[runin]{\large\itshape}{}{0pt}{#1 \thesubsection:}

在我的文档中,我通常使用\section{Part}\subsection{Question},具体取决于作业。当然,这样做的好处是,我不必担心问题编号。

然而,问题在于,在目录中,(子)章节编号当然仍然显示在左侧,而我希望两者都显示在右侧。

我看了看tocloft包裹,但我不明白这个特殊情况。

答案1

这是一个可能的解决方案;想法是在章节标题的重新定义中设置tocdepth为,这样它们就不会自动包含在目录中;然后使用所需的格式(标题、编号、页码)手动包含标题;最后,使用该包将计数器恢复为其默认值:0\addcontentslineetoolboxtocdepth

\documentclass{article}
\usepackage[compact,explicit]{titlesec}
\usepackage{etoolbox}
\pretocmd{\subsection}{\addtocontents{toc}{\setcounter{tocdepth}{2}}}{}{}

\def\thesection{\Roman{section}}
\def\thesubsection{\roman{subsection}}

\titleformat{\section}[hang]
  {\Large\bfseries}{}{0pt}{#1 \thesection%
    \addcontentsline{toc}{section}{#1~\numberline{\thesection}}
}[\addtocontents{toc}{\setcounter{tocdepth}{0}}]
\titleformat{name=\section,numberless}[hang]
  {\Large\bfseries}{}{0pt}{#1}
\titleformat{\subsection}[runin]
  {\large\itshape}{}{0pt}{#1 \thesubsection:}
\titleformat{name=\subsection,numberless}[runin]
  {\large\itshape}{}{0pt}{#1:}

\begin{document}

\tableofcontents
\section{Test Section One}
\subsection{Test}
\section{Test Section Two}

\end{document}

在此处输入图片描述

与提到的问题无关,但我还提供了应用于未编号章节和小节(用\section*和生成\subsection*)的定义,以防止对它们进行编号。

另一种选择是使用一个新的辅助文件(.moc例如,扩展名为)并重新定义\tableofcontents以便\@starttoc使用moc而不是toc;这个简单的技巧简化了解决方案(不需要修补),并且更适合于必须将新格式应用于更多部分单元的情况(如在对原始答案的评论中所要求的那样);这里有一个完整的例子来说明这种方法:

\documentclass{article}
\usepackage[compact,explicit]{titlesec}


\def\thesection{\Roman{section}}
\def\thesubsection{\roman{subsection}}

\titleformat{\section}[hang]
  {\Large\bfseries}{}{0pt}{#1 \thesection%
    \addcontentsline{moc}{section}{#1~\numberline{\thesection}}
}
\titleformat{name=\section,numberless}[hang]
  {\Large\bfseries}{}{0pt}{#1}
\titleformat{\subsection}[runin]
  {\large\itshape}{}{0pt}{#1 \thesubsection:%
    \addcontentsline{moc}{subsection}{#1~\numberline{\thesubsection}}}
\titleformat{name=\subsection,numberless}[runin]
  {\large\itshape}{}{0pt}{#1:}

\makeatletter
\renewcommand\tableofcontents{%
    \section*{\contentsname
        \@mkboth{%
           \MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
    \@starttoc{moc}%
    }
\makeatother
\begin{document}

\tableofcontents
\section{Test Section One}
%\addtocontents{tocdepth}{0}
\subsection{Test Subsection A}
\subsection{Another Test Subsection A}
\section{Test Section Two}
\subsection{Test Subsection B}
\subsection{Another Test Subsection B}

\end{document}

在此处输入图片描述

相关内容