在标题数字前添加文本(KOMA)

在标题数字前添加文本(KOMA)

我正在使用 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}}}

为了给数字留出更多空间,您可以扩大tocnumwidthsectionsubsection需要最新的 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}

关于\othersectionlevelsformatKOMA-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}

gaspaletToc

gaspaletDoc

相关内容