KOMA-Script:如何设计章节标题的样式

KOMA-Script:如何设计章节标题的样式

如何在 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}{},但是不知何故,这不适用于MakeUppercasemakro。

我的问题是是否\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}

相关内容