我正在使用 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}
我已经修改过的内容:
- 章节标题的字体。
- 定心。
- 没有开始新的一页。
- 标题前的垂直空间。
但我不知道如何在打印实际章节标题后添加字符甚至新行。
我还想了解除了我已经使用过的方法之外的更多方法,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
可以通过从中删除相应的代码来避免分页\patchcmd
符etoolbox
。- 我们现在用来
\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}”中添加格式对我没有任何效果)
据我发现,允许调整标题的软件包通常仅限于选择字体和字体样式,它们不提供修改章节标题的功能内容,这就是第二片叶子所需要的。