如何在 KOMA-Script 中将自定义样式应用于章节标题?我知道 titlesec 包的存在,但我读到它与 KOMA-Script 配合得不是很好,会输出警告。因此我的想法是仅借助 KOMA-Script 功能来设置章节页面的样式。
我读了一些关于章节样式的文章,并想出了以下代码:
\documentclass[english]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{blindtext}
\KOMAoption{chapterprefix}{true}
% centering the chapter head
\let\raggedchapter\centering
\setkomafont{chapterprefix}{\normalsize\mdseries}
% This block has the two variables \chapapp and \thechapter. But where
% can I find a variable for the title of the chapter (eg. \chaptertile) to apply some styling?
\renewcommand*{\chapterformat}{%
\MakeUppercase{\chapapp}~\thechapter\\[-0.6\baselineskip]
\noindent\makebox[\textwidth]{%
\rule{0.9\textwidth}{.5pt}%
}%
}
% If I use this line for styling the title of the chapter - I get an error
% \addtokomafont{chapter}{\MakeUppercase}
\RedeclareSectionCommand[beforeskip=0pt,afterskip=8\baselineskip]{chapter}
\begin{document}
\blinddocument
\end{document}
使用\renewcommand*{\chapterformat}
确实可以对 进行样式化,从而\chapapp~\thechapter
正确输出“第 1 章”。我还没有找到类似于\chapapp
或 的变量\thechapter
,它保存章节标题,并可用于设置标题的样式,例如分配大写字母
我已经找到了\addtokomafont{chapter}{}
,但是不知何故,这不适用于MakeUppercase
makro。
我的问题是是否\renewcommand*{\chapterformat}
存在类似的命令,我可以通过该命令访问 chaptertitle 的变量?
答案1
第二次更新
这是一个新的、我认为更好的建议,需要KOMA-Script 版本 3.19 或更新版本。在 3.19 版本中有一个新命令\chapterlineswithprefixformat
,可以重新定义用于\MakeUppercase
章节标题。
\documentclass[english]{scrreprt}[2015/09/29]% needs version 3.19 or newer
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{blindtext}
\KOMAoption{chapterprefix}{true}
\renewcommand*\raggedchapter{\centering}
\RedeclareSectionCommand[beforeskip=0pt,afterskip=8\baselineskip]{chapter}
\setkomafont{chapterprefix}{\normalsize\mdseries}
\renewcommand*{\chapterformat}{%
\chapappifchapterprefix{\nobreakspace}\thechapter\autodot%
\IfUsePrefixLine{%
\par\nobreak\vspace{-\parskip}\vspace{-.6\baselineskip}%
\rule{0.9\textwidth}{.5pt}%
}{\enskip}%
}
\renewcommand\chapterlineswithprefixformat[3]{%
\MakeUppercase{#2#3}
}
\begin{document}
\tableofcontents
\chapter{Chapter One}
\textbf{\KOMAScriptVersion}
\par
\Blindtext
\addchap{Chapter without number}
\Blindtext
\end{document}
注意:如果您还想使用\MakeUppercase
不带选项,chapterprefix=true
则必须重新定义命令\chapterlinesformat
:
\makeatletter
\renewcommand{\chapterlinesformat}[3]{%
\@hangfrom{#2}{\MakeUppercase{#3}}%
}
\makeatother
更新
我最初的答案(见下文)适用于 MiKTeX2.9 和 TL 2015,但不适用于 2014(但您可以加载fixltx2e
以使其工作,正如@Johannes 在评论中提到的那样)。所以这是另一个建议。
\documentclass[english]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{blindtext}
\KOMAoption{chapterprefix}{true}
\renewcommand*\raggedchapter{\centering}
\newif\ifmakeupper
\newcommand*\chaptertitleformat[1]{\ifmakeupper\MakeUppercase{#1}\else#1\fi}
\addtokomafont{chapter}{\makeuppertrue}
\setkomafont{chapterprefix}{\normalsize\mdseries}
\renewcommand*{\chapterformat}{%
\MakeUppercase{\chapappifchapterprefix{\nobreakspace}}\thechapter\autodot%
\IfUsePrefixLine{%
\par\nobreak\vspace{-\parskip}\vspace{-.6\baselineskip}%
\rule{0.9\textwidth}{.5pt}%
}{\enskip}%
}
\RedeclareSectionCommand[beforeskip=0pt,afterskip=8\baselineskip]{chapter}
\renewcaptionname{english}{\contentsname}{\chaptertitleformat{Contents}}
\begin{document}
\tableofcontents
\chapter{\chaptertitleformat{Chapter One}}
\textbf{\KOMAScriptVersion}
\par
\Blindtext
\addchap{\chaptertitleformat{Chapter without number}}
\Blindtext
\end{document}
请注意,您必须重新定义\tablename
、\listfigurename
、\listtablename
、 ... 以便它们使用\chaptertitleformat
,并且您必须将其插入所有\chapter
命令中。但优点是现在\addtokomafont
命令中只有一个开关。
原始答案(不适用于 3.19 版)
这是一条建议,但请注意,\MakeUppercase
在里面\setkomafont
或\addtokomafont
可能会有问题。无论如何都\MakeUppercase
必须是添加到字体元素的 komafont 的最后一个命令,因为它需要一个参数。
\documentclass[english]{scrreprt}[2015/02/07]
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{blindtext}
\KOMAoption{chapterprefix}{true}
\renewcommand*\raggedchapter{\centering}
\addtokomafont{chapter}{\MakeUppercase}
\setkomafont{chapterprefix}{\normalsize\mdseries}
\renewcommand*{\chapterformat}{%
\chapapp~\thechapter%
\par\nobreak\vspace{-\parskip}\vspace{-.6\baselineskip}%
\rule{0.9\textwidth}{.5pt}%
}
\RedeclareSectionCommand[beforeskip=0pt,afterskip=8\baselineskip]{chapter}
\begin{document}
\tableofcontents
\blinddocument
\end{document}
答案2
有点另类的方法:
\documentclass{scrreprt}
\let\raggedchapter\centering
\setkomafont{chapterprefix}{\normalsize\mdseries}
\KOMAoption{chapterprefix}{true}
\renewcommand{\chapterheadmidvskip}{%
\par\nobreak\vskip -.1cm {\rule{.9\textwidth}{.5pt}}\par%
}
\RedeclareSectionCommand[beforeskip=0pt,afterskip=8\baselineskip]{chapter}
\usepackage{xpatch}
\tracingpatches
\xpatchcmd{\@@makeschapterhead}{%for the unnumbered
\usekomafont{chapter}{#1}\par
}{%
\usekomafont{chapter}{\MakeUppercase{#1}}\par
}{}{}
\xpatchcmd{\@@makechapterhead}{%for numbered
\usekomafont{chapter}{#1}\par
}{%
\usekomafont{chapter}{\MakeUppercase{#1}}\par
}{}{}
\renewcommand*{\chapterformat}{%
\mbox{\MakeUppercase{\chapappifchapterprefix{\nobreakspace}}\thechapter\autodot
\IfUsePrefixLine{}{\enskip}}%
}
\begin{document}
\tableofcontents
\listoffigures
\chapter*{Bussy Baboon}
\chapter{walzing Wombat}
\end{document}