KOMA 课程中修改章节标题的方法

KOMA 课程中修改章节标题的方法

我正在使用 KOMA 类。假设我希望我的章节标题如下所示:

在此处输入图片描述

然而我能得到的最接近的答案是:

在此处输入图片描述

我使用的代码是这样的:

\documentclass{scrbook}

\usepackage{kantlipsum} %providing dummy text
\usepackage{adforn} %providing ornaments

\RedeclareSectionCommand[style=section,indent=0pt,beforeskip=2\baselineskip]{chapter}
\setkomafont{chapter}{\normalfont\large\scshape}
\renewcommand*{\raggedsection}{\centering}
\renewcommand*{\chapterformat}{\adforn{36}\enskip\thechapter.\ }

\begin{document}

    \kant[1]

    \chapter{An Interesting Chapter Title}

    \kant[2]

    \begin{center}
        \vspace{\baselineskip}
        \scshape\large \adforn{36}\enskip 1. An Interesting Chapter Title\enskip\adforn{36}
        \\
        \rule{2em}{1pt}
    \end{center}

    \noindent\kant[3]


\end{document}

我已经修改过的内容:

  1. 章节标题的字体。
  2. 定心。
  3. 没有开始新的一页。
  4. 标题前的垂直空间。

但我不知道如何在打印实际章节标题后添加字符甚至新行。

我还想了解除了我已经使用过的方法之外的更多方法,KOMA 课程提供的更改章节标题的方法(是否有意义使用它们是另一回事)。

编辑:正如 schtandard 所说,当标题占几行时,必须决定标题应该是什么样子。因此,让我们看看是否可以使以下内容起作用:

在此处输入图片描述

我的代码(当然很糟糕):

    \begin{center}
        \vspace{\baselineskip}
        \scshape\large
        \adforn{36}\hspace{-1em}
        \parbox{11cm}{\centering 1. An Interesting Chapter Title Which is Way Too Long to Fit in One Line}
        \hspace{-1em}\adforn{36}
        \\[\baselineskip]
        \rule{2em}{1pt}
    \end{center}

注意,这里的盒子长度固定为11cm这对于拍照来说是可以的,但在实践中,应该能够指定一个最大寬度这样,如果标题短,框也会变短。

答案1

如果您使用style=section章节,那么您必须重新定义\sectionlinesformat以更改章节标题的布局:

\documentclass{scrbook}
\usepackage{kantlipsum} %providing dummy text
\usepackage{adforn} %providing ornaments

\RedeclareSectionCommand[style=section,indent=0pt,beforeskip=-2\baselineskip]{chapter}
\setkomafont{chapter}{\normalfont\large\scshape}
\renewcommand*{\raggedchapter}{\centering}

\usepackage{varwidth}
\makeatletter
\renewcommand\sectionlinesformat[4]{%
  \ifstr{#1}{chapter}
    {%
      \raggedchapter
      \adforn{36}\enskip
      \begin{varwidth}{\dimexpr\textwidth-6em\relax}
        \raggedchapter#3#4%
      \end{varwidth}%
      \enskip\adforn{36}%
      \par\nobreak
      \strut\rule{2em}{1pt}%
      \par
    }
    {\@hangfrom{\hskip#2#3}{#4}}% original definition for other section levels
}
\makeatother

\begin{document}
\kant[1]
\chapter{An Interesting Chapter Title}
\kant[2]
\chapter{An Interesting Chapter Title Which is Way Too Long to Fit in One Line}
\kant[3]
\end{document}

在此处输入图片描述

答案2

\documentclass{scrbook}

\usepackage{etoolbox}

\usepackage{kantlipsum} %providing dummy text
\usepackage{adforn} %providing ornaments

\makeatletter
    % \RedeclareSectionCommand[beforeskip=2\baselineskip]{chapter} % <-- this seems too little
    \setkomafont{chapter}{\normalfont\large\scshape}
    \renewcommand*{\raggedchapter}{\centering}
    \renewcommand*{\chapterformat}{\thechapter.\ }
    \patchcmd\scr@startchapter{\if@openright\cleardoublepage\else\clearpage\fi}{}{}{}

    \newbox\@chapter@heading@testbox
    \renewcommand\chapterlinesformat[3]{%
        \savebox\@chapter@heading@testbox{#2#3}%
        \ifdim\wd\@chapter@heading@testbox>\dimexpr\linewidth-6em\relax
            \raggedchapter
            \adforn{36}\hskip 1em%
            \parbox{\dimexpr\linewidth-6em}{%
                \raggedchapter
                #2#3
            }%
            \hskip 1em\adforn{36}
            \@@par
        \else
            \parbox{\linewidth}{%
                \raggedchapter%
                \adforn{36}\hskip 1em%
                {\let\@@par\relax
                    #2#3%
                }%
                \hskip 1em\adforn{36}%
            }%
            \@@par
        \fi
        \raggedchapter\strut\rule{2em}{.4pt}\par%
    }
\makeatother

\begin{document}

\kant[1]

\chapter{An Interesting Chapter Title}

\kant[2]

\chapter{An Interesting Chapter Title Which is Way Too Long to Fit in One Line}

\kant[3]

\end{document}

上述代码的输出

这里发生了什么事?

  • 章节是不是重新声明为类型section
  • \scr@startchapger可以通过从中删除相应的代码来避免分页\patchcmdetoolbox
  • 我们现在用来\chapterlinesformat格式化章节标题(#2包含格式化的章节编号,#3格式化的章节标题)。
  • 我们首先检查标题是否长于一行,然后进行相应的排版。
  • #3包含一个\@@par。由于我们希望第二个装饰与标题在同一行,因此在单行标题的情况下,我们需要在排版之前将其停用。
  • 线上\strut\rule确保在有多条线的情况下它与标题具有正确的距离。

请注意,由于标题居中,章节标题的第二行(及后续行)可能会位于章节编号下方。

答案3

有点像 hack,但对于单行标题,我最有效的方法是添加

\newcommand{\mychapter}[1]{%
    \addtocounter{chapter}{1}%
    \chapter*{\chapterformat #1\enskip\adforn{36}}%
    \addcontentsline{toc}{chapter}{\thechapter.\ #1}
    \vspace{-2\baselineskip}%
    \begin{center}
        \rule{2em}{1pt}
    \end{center}
}

在 '\renewcommand{\chapterformat}...' 之后。然后当然使用 \mychapter 而不是 \chapter。
但我觉得一定有更好的方法......(在“\renewcommand{chapterlinesformat}”中添加格式对我没有任何效果)

据我发现,允许调整标题的软件包通常仅限于选择字体和字体样式,它们不提供修改章节标题的功能内容,这就是第二片叶子所需要的。

相关内容