我正在使用 titlesec 创建自定义子部分。我有我的声明:
\titleformat{\subsection}[hang]
{\large\bfseries}
{$\square$\medspace}{0mm}{}
然而,我经常想在章节标题下方添加副标题。它总是使用相同的格式
\subsection{The Coastline Theorem}
\vspace{-6px}
\textit{Discussion and proof of the coastline theorem.}
\vspace{4px}\hfill\break
每次写这个有点麻烦,如果我想重构它,那就太麻烦了。如果我可以传递一个额外的参数并\subsection
在其中定义格式,那就太好了\titleformat
。那么它可能看起来像:
\subsection{The Coastline Theorem}{Discussion and proof of the coastline theorem.}
我读了文档titlesec
,没有看到类似的东西,但文档对我来说很难读懂。有没有办法用 titlesec 做到这一点?有没有办法在 titlesec 之外做到这一点?
答案1
titlesec 提供了一个可选参数,用于\titleformat
让代码在标题之后运行,而不允许在标题和副标题之间或副标题之后进行分页。您只需安排将文档提供的文本放入该位置即可。
\documentclass{article}
\usepackage{amssymb}
\usepackage{titlesec}
\showoutput
\titleformat{\subsection}[hang]
{\large\bfseries}
{$\square$\medspace}{0mm}{}[\mdseries\itshape \subsecsubhead]
\NewDocumentCommand\subsectionB{O{#2}mm}{%
\def\subsecsubhead{#3}%
\subsection[#1]{#2}%
}
\begin{document}
\section{Zzzz}
\subsectionB{The Coastline Theorem}{Discussion and proof of the coastline theorem.}
some text
\end{document}
答案2
此版本不使用 titlesec。实际上,我从\chapter
报告类中偷取了大部分内容。我为子部分使用了默认的垂直间距。请注意,\subsection*
使用的宏与 不同\subsection
。
\documentclass{article}
\usepackage{amssymb}
\usepackage{showframe}
\makeatletter
\renewcommand\subsection{\secdef\@subsection\s@subsection}
\def\@subsection[#1]#2#3{\ifnum \c@secnumdepth >1
\refstepcounter{subsection}%
\addcontentsline{toc}{subsection}%
{\protect\numberline{\thesubsection}#1}%
\else
\addcontentsline{toc}{subsection}{#1}%
\fi
\@makesubsectionhead{#2}{#3}%
\@afterheading}
\def\@makesubsectionhead#1#2{%
\vspace*{3.25ex\@plus 1ex \@minus .2ex}%
{\parindent=0pt
\interlinepenalty\@M
\normalfont\large\bfseries
\ifnum \c@secnumdepth >1
\@hangfrom{$\square$\medspace}
\fi
#1\par\nobreak% insert \vskip before subtitle
\textit{#2}\par\nobreak
\vskip 1.5ex \@plus .2ex
}}
\def\s@subsection#1#2{\s@makesubsectionhead{#1}{#2}%
\@afterheading}
\def\s@makesubsectionhead#1#2{%
\vspace*{3.25ex\@plus 1ex \@minus .2ex}%
{\parindent=0pt
\interlinepenalty\@M
\normalfont\large\bfseries
#1\par\nobreak% insert \vskip before subtitle
\textit{#2}\par\nobreak
\vskip 1.5ex \@plus .2ex
}}
\makeatother
\begin{document}
\tableofcontents
\subsection{The Coastline Theorem}{Discussion and proof of the coastline theorem}
Some text added.
\end{document}