我正在写一本书,我想让书中的某些部分有一个像这样的“标题”:
我可能希望目录条目看起来像“科学与社会:伽利略事件”,页眉写着“伽利略事件”。
我能想到的最接近的情况是这样的:
\section[The Galileo Affair]{Science and Society: The Galileo Affair}
但这不会给我上面显示的视觉布局,并且标题的初始部分不会出现在目录中。
是否有任何包可以提供直接的方法来实现这一点?
答案1
您可以尝试此代码。\sectionsurtitle{....}
在您想要添加标题的部分之前使用。请注意,您可以\sectionsurtitle*
对未编号的部分使用带星号的版本。
\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{suffix}
\newcommand\sectionsurtitle[1]{\surtitletoc{#1}\printsectionsurtitle{#1}}
\WithSuffix\newcommand\sectionsurtitle*[1]{\printsectionsurtitle{#1}}
\makeatletter
\newcommand{\printsectionsurtitle}[1]{%
{\parindent0pt\vspace*{20pt}%
\sffamily\uppercase{#1}%
\par\nobreak}
\@afterheading%
}
\newcommand{\surtitletoc}[1]{%
\addtocontents{toc}{%
\protect\contentsline{section}%
{\mdseries\sffamily\protect\scriptsize\uppercase{#1}}{}{}}
\addtocontents{toc}{\vskip-10pt}%
}
\makeatother
\begin{document}
\tableofcontents
\bigskip
\sectionsurtitle{Science and society}
\section{The Galileo Affair}
\lipsum[1]
\sectionsurtitle{Art}
\section{The Michelangelo Affair}
\lipsum[1]
\section{A normal section}
\lipsum[1]
\sectionsurtitle*{Nothing}
\section*{A unnumbered section}
\lipsum[1]
\end{document}
输出:
编辑
看到您的评论后,我认为您可以使用以下代码:
\documentclass{scrbook}
\usepackage{lipsum}
\usepackage{suffix}
\newcommand\sectionsurtitle[2]{\printsectionsurtitle{#1}\section[#1: #2]{#2}\sectionmark{#2}}
\WithSuffix\newcommand\sectionsurtitle*[2]{\printsectionsurtitle{#1}\section*{#2}}
\makeatletter
\newcommand{\printsectionsurtitle}[1]{%
{\parindent0pt\vspace*{20pt}%
\sffamily\uppercase{#1}%
\par\nobreak}
\@afterheading%
}
\makeatother
\begin{document}
\tableofcontents
\bigskip
\chapter{Test}
\sectionsurtitle{Science and society}{The Galileo Affair}
\lipsum[1]
\sectionsurtitle{Art}{The Michelangelo Affair}
\lipsum[1]
\section{A normal section}
\lipsum[1]
\sectionsurtitle*{Nothing}{A unnumbered section}
\lipsum[1]
\end{document}
输出:
和目录
答案2
我将使用键值语法:
\documentclass[openany]{book}
\usepackage{titlesec}
\usepackage{xparse}
\titleformat{\section}
{\normalfont\Large\sffamily\printcurrentsurtitle}
{\thesection}
{1em}
{}
\ExplSyntaxOn
\keys_define:nn { crowell/section }
{
surtitle .tl_set:N = \l_crowell_section_surtitle_tl,
toc .tl_set:N = \l_crowell_tocentry_tl,
header .tl_set:N = \l_crowell_header_tl,
}
\NewDocumentCommand{\Section}{sO{}m}
{
\keys_set:nn { crowell/section }
{
surtitle = {},
toc = { #3 },
header = { #3 },
#2
}
\IfBooleanTF{#1}
{\section*{#3}}
{
\section[
\tl_if_empty:NF \l_crowell_section_surtitle_tl
{ \l_crowell_section_surtitle_tl : ~ }
\l_crowell_tocentry_tl
]{#3}
\markright{\l_crowell_header_tl}
}
}
\NewDocumentCommand{\printcurrentsurtitle}{ }
{
\tl_if_empty:NF \l_crowell_section_surtitle_tl
{
\mbox{\normalsize\MakeUppercase{\l_crowell_section_surtitle_tl}}\par
}
}
\ExplSyntaxOff
\begin{document}
\tableofcontents
\chapter{Title}
\Section[surtitle=Science and Society]{The Galileo Affair}
\Section{No surtitle for this one}
\Section*[surtitle=Unnumbered]{Section}
\Section[
surtitle=Science and Society,
header=TGA,
toc=Abbrev
]{The Galileo Affair}
\newpage
\mbox{}
\end{document}
以下是目录
请注意,给出的值toc=
是在目录中附加标题旁边添加的内容;在标题中,您将获得章节标题,或者指定为的值header=
(在本例中,第 3 页将有“TGA”)。