带副标题的章节标题

带副标题的章节标题

我正在使用该类memoir,我想创建一个更漂亮的部分标题,但我不具备必要的 LaTeX 技能。我在这个论坛上找到了很多漂亮的部分标题,但我不知道如何自定义它以使其看起来像我想要的那样。是否可以将部分标题修改为如下所示(这是我在 OmniGraffle 中自己绘制的):

在此处输入图片描述

但是,有了这些选项:

  • 日期和副标题是可选的,并非所有部分都有
  • 日期不一定是今天,而是过去的某一天
  • 未显示章节编号
  • 章节标题和副标题的长度都可以超过一行

非常感谢您的帮助!

答案1

这是一种可能性,使用titlesec包;在每个 之前\section,可以使用一些命令:\undefds隐藏前面的日期和副标题;\sectiondate{<text>}指定<text>为以下内容的日期\section,并\sectionsubtitle{<text>}指定<text>为以下内容的副标题\section

由于titlesec使用,因此适用一些限制(见关于 memoir 和 titlesec 不兼容)。 代码:

\documentclass[article]{memoir}
\usepackage[margin=3cm]{geometry}% just for the example
\usepackage[T1]{fontenc}
\usepackage[explicit]{titlesec}
\usepackage{xcolor}
\usepackage{textcase}
\usepackage{lmodern}
\usepackage{lipsum}

\makeatletter
\newcommand*\nameundef[1]{%
  \expandafter\let\csname #1\endcsname\@undefined}
\newcommand\sectiondatefont{\normalfont\sffamily\itshape\bfseries\Large}
\newcommand\sectionsubtitlefont{\normalfont\sffamily\LARGE}
\newcommand\sectiondate[1]{\def\@sectiondate{#1}}
\newcommand\sectionsubtitle[1]{\def\@sectionsubtitle{#1}}
\titleformat{\section}
  {\normalfont\bfseries\huge\sffamily}{}{0em}
  {\colorbox{gray}{%
    \parbox[t]{\dimexpr\textwidth-2\fboxsep-2\fboxrule\relax}{%
      \vspace*{1ex}%
      \@ifundefined{@sectiondate}
        {}{{\sectiondatefont\@sectiondate}\\*}%
      \raggedright%
      \textcolor{white}{\huge\MakeTextUppercase{#1}}%
      \@ifundefined{@sectionsubtitle}
        {}{\\*{\sectionsubtitlefont\@sectionsubtitle}}%
      \vspace*{1ex}
      }%
    }%
  }
\newcommand\undefds{%
  \nameundef{@sectiondate}\nameundef{@sectionsubtitle}}
\makeatother

\begin{document}

\sectiondate{March 15, 2013}
\sectionsubtitle{Test Subtitle}
\section{Test Section With a Title Spanning Two Lines}
\lipsum[4]

\undefds
\section{Test Section}
\lipsum[4]

\undefds
\sectiondate{April 23, 2009}
\section{Another Test Section}
\lipsum[4]

\undefds
\sectionsubtitle{Another Test Subtitle}
\section{Test Section}
\lipsum[4]

\end{document}

结果图像:

在此处输入图片描述

答案2

Gonzalo 解决方案的一个可能的改进是使用键值语法:

\documentclass[article]{memoir}
\usepackage[margin=3cm]{geometry}% just for the example
\usepackage[T1]{fontenc}
\usepackage[explicit]{titlesec}
\usepackage{xcolor}
\usepackage{textcase}
\usepackage{lmodern}
\usepackage{lipsum}
\usepackage{keyval}
\usepackage{microtype}

\makeatletter
\define@key{mosquito}{date}{\def\mosquito@date{#1}}
\define@key{mosquito}{subtitle}{\def\mosquito@subtitle{#1}}
\newcommand\sectiondatefont{\normalfont\sffamily\itshape\bfseries\Large}
\newcommand\sectionsubtitlefont{\normalfont\sffamily\LARGE}

\titleformat{\section}
  {\normalfont\bfseries\sffamily}{}{0em}
  {\colorbox{gray}{%
    \parbox{\dimexpr\textwidth-2\fboxsep-2\fboxrule\relax}{%
      \vspace{.5ex}%
      \ifx\mosquito@date\@empty\else
        {\sectiondatefont\mosquito@date\endgraf}
      \fi
      \raggedright
      \textcolor{white}{\huge\textls[50]{\MakeTextUppercase{#1}}\endgraf}
      \addvspace{.5ex}
      \ifx\mosquito@subtitle\@empty\else
        \endgraf{\sectionsubtitlefont\mosquito@subtitle\endgraf}
      \fi
      \addvspace{.5ex}
      }%
    }%
  }
\newcommand{\Section}[1][]{%
  \setkeys{mosquito}{date={},subtitle={},#1}%
  \section*}
\makeatother

\begin{document}

\Section[date={March 15, 2013},
  subtitle={Test Subtitle}]
  {Test Section With a Title Spanning Two Lines}
\lipsum[4]

\Section{Test Section}
\lipsum[4]

\Section[date={April 23, 2009}]
  {Another Test Section}
\lipsum[4]

\Section[subtitle={Another Test Subtitle}]
  {Test Section}
\lipsum[4]

\end{document}

我添加了可能更好的垂直间距控制,并且还为大写标题添加了字母间距。不幸的是,Computer Modern 和 Latin Modern 字体缺少无衬线小写字母。

在此处输入图片描述

相关内容