我稍微重新设计了\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
\addcontentsline
etoolbox
tocdepth
\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}