重新定义 \section 以在章节标题中生成第二行

重新定义 \section 以在章节标题中生成第二行

我正在尝试重新定义\section命令以在标题中生成第二行,其样式与主标题不同。我希望它看起来类似于下图(除了节编号)。部分命令结果

这是使用以下代码生成的。

\textbf{\large Text}

\textit{\scriptsize\textcolor{gray}{Text}}

我尝试查看 titlesec 包但我不太确定。

答案1

我假设您不希望副标题出现在目录和标题中。

我建议定义一个\Section带有可选参数的命令,您可以在其中进行设置。由于这使用标准命令,因此您可以使用或任何方法\section修改样式。titlesec

代码

\documentclass{book}
\usepackage{lipsum}

\ExplSyntaxOn
\NewDocumentCommand{\Section}{sO{}m}
 {
  \keys_set:nn { bzirzer/section }
   {
    header=,toc=,subtitle=,#2
   }
  \bzirzer_section:nn { #1 } { #3 }
 }

\keys_define:nn { bzirzer/section }
 {
  header .tl_set:N = \l_bzirzer_section_header_tl,
  toc    .tl_set:N = \l_bzirzer_section_toc_tl,
  subtitle .tl_set:N = \l_bzirzer_section_subtitle_tl,
 }

\cs_new_protected:Nn \bzirzer_section:nn
 {
  \bool_if:nTF { #1 }
   {% unnumbered
    \section* { \__bzirzer_section_make:n { #2 } }
   }
   {% numbered
    \tl_if_empty:NTF \l_bzirzer_section_toc_tl
     {
      \section[ #2 ]{ \__bzirzer_section_make:n { #2 } }
     }
     {
      \section[ \l_bzirzer_section_toc_tl ]{ \__bzirzer_section_make:n { #2 } }
     }
    \tl_if_empty:NTF \l_bzirzer_section_header_tl
     {
      \sectionmark{#2}
     }
     {
      \sectionmark{\l_bzirzer_section_header_tl}
     }
   }
 }

\cs_new_protected:Nn \__bzirzer_section_make:n
 {
  #1
  \tl_if_empty:NF \l_bzirzer_section_subtitle_tl
   { \\ {\normalfont\normalsize\itshape \tl_use:N \l_bzirzer_section_subtitle_tl} }
 }

\ExplSyntaxOff

\begin{document}

\tableofcontents

\chapter{Title}

\Section*[subtitle=Where we present things]{Introduction}

\lipsum

\Section[subtitle=This is important]{Starting off}

\lipsum

\Section[
  subtitle=This is not important,
  toc=Abbreviated title for the toc,
  header=Abbreviated title for the header
]{This is a very long section title that should wrap across lines}

\lipsum\lipsum

\Section{This has no subtitle}

\lipsum

\end{document}

一些图片。

1. 未编号部分

在此处输入图片描述

2. 带副标题的普通部分

在此处输入图片描述

3. 带有副标题的长章节标题

在此处输入图片描述

4. 缩写标题

在此处输入图片描述

5. 目录

在此处输入图片描述

答案2

您几乎可以将任何内容放入章节标题中,但不能将(可选)版本发送到目录和\sectionmark。请注意,行距是为整个段落设置的,在本例中使用\scriptsize

\documentclass{article}
\usepackage{xcolor}
\begin{document}

\tableofcontents

\section[short title]{\scriptsize\textbf{\large Text}\\
\textit{\textcolor{gray}{Text}}}

\end{document}

相关内容