我对章节标题进行了一些样式设计,基于蒂克兹和标题安全包裹。
不幸的是,KOMA-Script 包给了我很多关于标题安全为了摆脱 titlesec 包,我尝试使用内置\chapterformat
的 KOMA-Script 来实现相同的章节样式。这很有效,直到我注意到\chapter*
类似标题(例如 TOC 等)没有受到影响。
经过一番研究,我发现了这种行为的 - 微不足道的 - 原因。\chapterformat
仅影响标题的数字部分。所有的都\chapter*
没有章节号,所以\chapterformat
不起作用。
问题
是否可以使用纯 KOMA-Script 格式化 \chapter 和 \chapter*,或者这是否需要标题安全或者类似的包?
平均能量损失
\documentclass{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{blindtext}
\usepackage{tikz}
\usepackage[T1]{fontenc}
\renewcommand{\chapterformat}{
\begin{tikzpicture}[remember picture,overlay]
\draw[fill=gray,draw=none] (0,0) rectangle (1cm,1cm);
\end{tikzpicture}
\thechapter
}
\begin{document}
\chapter{The Chapter}
\blindtext
\chapter*{The Chapter without number}
\blindtext
\end{document}
编译的MWE
仅供参考
这也许不是问题的一部分,但这是\chapter
我的文档中的当前样式。\chapter*
应该具有相同的位置和背景,但没有橙色条。上面的只是一个用于演示目的的 MWE。
答案1
自 KOMA-Script 版本 3.19 起,可以重新定义命令\chapterlinesformat
来更改没有前缀行的章节标题的布局。现在可以将章节标题放置在页面顶部的灰色框中,而无需使用scrlayer-scrpage
。并且可以包含多行的章节标题。
\documentclass[twoside,open=any]{scrreprt}[2015/10/03]
%\providecommand*\Ifstr{\ifstr}% needed up to and including KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
%\providecommand*\Ifthispageodd{\ifthispageodd}% needed up to and including KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
\usepackage[utf8]{inputenc}
\usepackage{blindtext}
\usepackage[T1]{fontenc}
\usepackage{libertine}
\usepackage{xcolor}
\RedeclareSectionCommand[
beforeskip=1sp minus 1sp,
afterskip=4\baselineskip plus .2\baselineskip minus .2\baselineskip,
font=\Huge\scshape\color{white}
]{chapter}
\renewcommand\chapterformat{%
\makebox[0pt][r]{\thechapter\enskip
\textcolor{orange}{\smash{\rule[-\dp\strutbox]{2.5pt}{\baselineskip}}}%
}}
\newlength\chapterleftmargin
\newcommand\chaptervmargin{1.5em}
\makeatletter
\renewcommand\chapterlinesformat[3]{%
\vspace*{\dimexpr-1in-\headsep-\headheight-\topmargin-1ex}%
\Ifthispageodd
{\setlength\chapterleftmargin{\dimexpr1in+\hoffset+\oddsidemargin\relax}}
{\setlength\chapterleftmargin{\dimexpr\paperwidth-\textwidth-1in-\hoffset-\oddsidemargin\relax}}
\hspace*{-\chapterleftmargin}%
\makebox[0pt][l]{%
\colorbox{gray}{%
\parbox[t][\dimexpr\totalheight+\chaptervmargin*2\relax][c]{\dimexpr\paperwidth-2\fboxsep\relax}{%
\makebox[\dimexpr\chapterleftmargin-\fboxsep\relax][r]{#2}%
\Ifstr{#2}{}
{\parbox[t]{\textwidth}{\raggedchapter#3}}
{\enskip\parbox[t]{\dimexpr\textwidth-.5em\relax}{\raggedchapter#3}}%
}%
}%
}%
}
\makeatother
\begin{document}
\tableofcontents
\chapter{The chapter}
\KOMAScriptVersion
\Blindtext
\chapter*{The Chapter without number}
\blindtext
\chapter{A long long long long chapter title with more than one line}
\blindtext
\Blinddocument
\end{document}
运行两次(因为\Ifthispageodd
)得到