我必须遵守一个风格指南,该指南规定在章节/部分/等编号后必须有换行符,而不是通常的
1.2 Heading
它应该是
1.2
Heading
这必须适用于标题本身和目录。到目前为止,我使用了一个丑陋的离合器,只是简单地写了\section{\\Heading}
,这会导致一些问题,例如包hyperref
。我正在使用 KOMA-Script(scrreprt
),并试图通过重新定义来解决这个问题\sectionformat
,但遗憾的是它会忽略任何\newline
命令。有没有一种干净的方法来实现这一点?我知道有一种twolinechapter
选项可以解决章节标题的问题,但不能解决目录或任何其他分段命令的问题。
提前致谢!
编辑: 我发现了另一个离合器,它适用于标题,并且可能也以某种方式适用于目录(不知道如何格式化目录项目,将尝试找出答案):
\renewcommand*{\chapterformat}{\makebox[0pt][l]{\raisebox{17.5pt}{\thechapter}}}
这只是增加了编号,并\makebox
避免了缩进(出于某种原因,负数\vspace
/\hspace
不起作用)。感觉不对,但至少比标题开头的换行符要好。
编辑我当前方法的一个最小示例:
\documentclass{scrreprt}
\usepackage{blindtext}
% Styling the Headings
\renewcommand*{\chapterformat}{\makebox[0pt][l]{\raisebox{17.5pt}{\thechapter}}}
\renewcommand*{\sectionformat}{\makebox[0pt][l]{\raisebox{17.5pt}\thesection}}
\renewcommand*{\subsectionformat}{\makebox[0pt][l]{\raisebox{12pt}\thesubsection}}
\begin{document}
\tableofcontents
\blinddocument
\end{document}
现在剩下的就是设置目录样式。\chapterformat
目录是否有类似版本的 (etc.)?我知道我可以使用 重新定义目录缩进\RedeclareSectionCommand
,并设置不同的目录样式。但没有与我想要实现的类似的东西。
答案1
第二次更新
从 3.20 版本开始,您可以使用选项tocbreakafternumber
在\RedeclareSectionCommands
分段编号 TOC 后进行中断。
\documentclass{scrreprt}[2016/04/09]
\RedeclareSectionCommands[
tocbreakafternumber,% <-
tocindent=0pt
]{chapter,section,subsection,subsubsection}
\renewcommand\chapterlinesformat[3]{\ifstr{#2}{}{}{#2\\*}#3}
\renewcommand*{\sectionlinesformat}[4]{%
\hspace*{#2}%
\parbox{\dimexpr\linewidth-#2\relax}{\raggedsection
\ifstr{#3}{}{}{#3\\}%
#4}%
}
\usepackage[english]{babel}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\listoffigures
\Blinddocument
\begin{figure}%
Figure
\caption{A Figure}%
\end{figure}
\end{document}
结果和下面的图片一样。
更新
自 3.19 版本以来,更改章节数字和文本的顺序或布局的推荐方法是重新定义命令\chapterlinesformat
、 \chapterlineswithprefixformat
和。\sectionlinesformat
\sectioncatchphraseformat
另外,我在下一个 KOMA-Script 版本 (3.20) 的预发布版中测试了我在 TOC 的原始答案中的 hack/workaround。对于即将推出的这个版本,简单的重新定义\numberline
不起作用。您可以将代码附加到,\numberline
但目前我建议重新定义\addtocentrydefault
。也许将来会有一个特殊的tocstyle
功能可以自动定义您需要的 toc 条目样式。
\documentclass[toc=flat]{scrreprt}[2015/10/03]
\renewcommand\chapterlinesformat[3]{\ifstr{#2}{}{}{#2\\*}#3}
\renewcommand*{\sectionlinesformat}[4]{%
\hspace*{#2}%
\parbox{\dimexpr\linewidth-#2\relax}{\raggedsection
\ifstr{#3}{}{}{#3\\}%
#4}%
}
\renewcommand\addtocentrydefault[3]{%
\ifstr{#2}{}{%
\addcontentsline{toc}{#1}{\protect\nonumberline#3}%
}{%
\addcontentsline{toc}{#1}{\protect\nonumberline#2\\*#3}%
}%
}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\listoffigures
\Blinddocument
\begin{figure}%
Figure
\caption{A Figure}%
\end{figure}
\end{document}
原始答案:
有人问过 Markus Kohm 类似的问题。因此,现在有一个关于KOMA-Script 网站(德语):
\documentclass[chapterprefix]{scrreprt}
\renewcommand*{\chapterformat}{\thechapter\autodot}
\RedeclareSectionCommand[innerskip=0pt]{chapter}
\makeatletter
\renewcommand*{\raggedsection}{\raggedright\renewcommand*{\@hangfrom}[1]{##1\\*}}
\makeatother
\usepackage{mwe}
\begin{document}
\Blinddocument
\end{document}
注意:此代码是一种解决方法,使用 KOMA-Script 内部代码。它适用于当前版本 3.18但它可能不会适用于未来的版本。
此外,这里还有一个基于 Markus 想法的目录解决方法/破解方法:
\documentclass[chapterprefix,
toc=flat
]{scrreprt}
\renewcommand*{\chapterformat}{\thechapter\autodot}
\RedeclareSectionCommand[innerskip=0pt]{chapter}
\makeatletter
\renewcommand*{\raggedsection}{\raggedright\renewcommand*{\@hangfrom}[1]
{##1\\*}}
\makeatother
\BeforeStartingTOC[toc]{\renewcommand*{\numberline}[1]{#1\\*}}
\RedeclareSectionCommands[tocnumwidth=0pt]{chapter,section,subsection}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\listoffigures
\Blinddocument
\begin{figure}%
Figure
\caption{A Figure}%
\end{figure}
\end{document}
或者没有toc=flat
: