我正在使用 KOMA 类 scrbook,并尝试在任何章节和小节标题前添加一些文本。就像这样:
\section{Hello !}
必须显示Section 1 : Hello !
(1 为正常计数器)。任何章节标题前的“子章节编号:”也一样。
因此我尝试了以下代码:
\renewcommand{\thesection}{Section \@arabic\c@section}
问题是我想要那些章节/小节标题居中,因此我在定义标题字体时添加了参数 \centering :
\addtokomafont{disposition}{\HeadingFont\centering}
但有了这个代码,只有部分的名称居中,但不是前缀“section 1”。当我的标题很长时,就会出现问题,页面缺乏平衡。我可以\othersectionlevelsformat
像手册中指出的那样尝试使用吗,或者您有其他解决方案吗?
作为奖励,您有一个快速修复目录的方法,因为点正在侵占添加的文本。我手动尝试了以下方法:
\renewcommand\l@section{\@dottedtocline{1}{1.5em}{4.2em}}
答案1
更新关于KOMA-Script 版本 3.28:
重新定义\raggedsection
并\sectionlinesformat
居中包括数字的章节标题:
\documentclass[numbers=noenddot]{scrbook}
%\providecommand*\Ifstr{\ifstr}% needed up to and including KOMA-Script version 3.27, see https://komascript.de/faq_deprecatedif
\usepackage{blindtext}
\let\raggedsection\centering
\let\raggedchapter\raggedright
\renewcommand\sectionformat{Section~\thesection:\enskip}
\renewcommand\subsectionformat{Subsection~\thesubsection:\enskip}
\renewcommand\subsubsectionformat{Subsubsection~\thesubsection:\enskip}
\renewcommand*\sectionlinesformat[4]{#3#4}
\DeclareTOCStyleEntry[
dynnumwidth,
entrynumberformat=\entrywithprefix{Sect.}
]{default}{section}
\DeclareTOCStyleEntry[
dynnumwidth,
entrynumberformat=\entrywithprefix{Subs.}
]{default}{subsection}
\DeclareTOCStyleEntry[
dynnumwidth,
entrynumberformat=\entrywithprefix{Subsubs.}
]{default}{subsubsection}
\newcommand*\entrywithprefix[2]{%
\def\autodot{}%
\mbox{#1\,#2:}%
}
\begin{document}
\tableofcontents
\chapter{First chapter}
\blindtext
\section{First section}
\blindtext
\subsection{a rabbit subsection with quite a few words to make it
extra long not only because ducks are so cute}
\Blindtext
\blinddocument
\end{document}
原始答案(2015年):
您可以重新定义\raggedsection
,\raggedchapter
和\othersectionlevelsformat
(对于版本 3.17 或更新版本,请参阅下面的更新):
\let\raggedsection\centering
\let\raggedchapter\raggedright
\renewcommand\othersectionlevelsformat[3]{%
\ifstr{#1}{section}{Section~#3:\enskip}{%
\ifstr{#1}{subsection}{Subsection~#3:\enskip}{%
#3\autodot\enskip}}}
要将章节和小节标题(包括编号)置于中心,请使用
\makeatletter
\addtokomafont{section}{\let\@hangfrom\relax}
\addtokomafont{subsection}{\let\@hangfrom\relax}
\makeatother
如果目录中的条目也需要更改,请重新定义\addsectiontocentry
并\addsubsectiontocentry
补充:
\renewcommand\addsectiontocentry[2]{%
\ifstr{#1}{}{%
\addtocentrydefault{section}{}{#2}}{%
\addtocentrydefault{section}{Sect.\,#1:}{#2}}}
\renewcommand\addsubsectiontocentry[2]{%
\ifstr{#1}{}{%
\addtocentrydefault{subsection}{}{#2}}{%
\addtocentrydefault{subsection}{Subs.\,#1:}{#2}}}
为了给数字留出更多空间,您可以扩大tocnumwidth
和section
(subsection
需要最新的 KOMA-Script 版本 3.15)
\RedeclareSectionCommand[tocnumwidth=5em]{section}
\RedeclareSectionCommand[tocnumwidth=5.5em]{subsection}
代码:
\documentclass[numbers=noenddot]{scrbook}
\usepackage{blindtext}
\let\raggedsection\centering
\let\raggedchapter\raggedright
\makeatletter
\addtokomafont{section}{\let\@hangfrom\relax}
\addtokomafont{subsection}{\let\@hangfrom\relax}
\makeatother
\renewcommand\othersectionlevelsformat[3]{%
\ifstr{#1}{section}{Section~#3:\enskip}{%
\ifstr{#1}{subsection}{Subsection~#3:\enskip}{%
#3\autodot\enskip}}}
\renewcommand\addsectiontocentry[2]{%
\ifstr{#1}{}{%
\addtocentrydefault{section}{}{#2}}{%
\addtocentrydefault{section}{Sect.\,#1:}{#2}}}
\renewcommand\addsubsectiontocentry[2]{%
\ifstr{#1}{}{%
\addtocentrydefault{subsection}{}{#2}}{%
\addtocentrydefault{subsection}{Subs.\,#1:}{#2}}}
\RedeclareSectionCommand[tocnumwidth=5em]{section}
\RedeclareSectionCommand[tocnumwidth=5.5em]{subsection}
\begin{document}
\tableofcontents
\chapter{First chapter}
\blindtext
\section{First section}
\blindtext
\subsection{a rabbit subsection with quite a few words to make it
extra long not only because ducks are so cute}
\Blindtext
\blinddocument
\end{document}
关于\othersectionlevelsformat
KOMA-Script 版本 3.17 或更新版本
请注意,KOMA-Script 版本 3.17 使用等代替。因此您必须重新定义这些命令,而\sectionformat
不是\subsectionformat
\othersectionlevelsformat
\othersectionlevelsformat
\renewcommand\sectionformat{Section~\thesection:\enskip}
\renewcommand\subsectionformat{Subsection~\thesubsection:\enskip}
如果代码需要同时适用于旧版本(3.15 和 3.16)以及 3.17 或更新版本,则可以使用
\renewcommand\othersectionlevelsformat[3]{%
\ifstr{#1}{section}{Section~#3:\enskip}{%
\ifstr{#1}{subsection}{Subsection~#3:\enskip}{%
#3\autodot\enskip}}}
\providecommand*\sectionformat}{}
\providecommand*{\subsectionformat}{}
\renewcommand\sectionformat{Section~\thesection:\enskip}
\renewcommand\subsectionformat{Subsection~\thesubsection:\enskip}
答案2
我有绝对地不知道你想实现什么,但这应该能给你一个良好的开端:
\documentclass{scrbook}
\addtokomafont{disposition}{\itshape}
\let\raggedsection\centering
\makeatletter
\renewcommand{\thesection}{Section \@arabic\c@section}
\renewcommand{\thesubsection}{Subsection \@arabic\c@subsection}
\makeatother
\usepackage{tocstyle}
\usetocstyle{KOMAlike}
\begin{document}
\tableofcontents
\chapter{gaspalet}
\section{a duck section}
\label{duck}
\subsection{a rabbit subsection with quite a few words to make it
extra long not only because ducks are so cute}
See \ref{duck}
\end{document}