我正在使用该类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 字体缺少无衬线小写字母。