我可以为小节添加自定义副标题吗?

我可以为小节添加自定义副标题吗?

我正在使用 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}

相关内容