在 scrbook 中章节标题后缩进第一行

在 scrbook 中章节标题后缩进第一行

我对此进行了大量搜索,但毫无收获。所以,我在这里寻求帮助。我想将章节标题后的第一行段落缩进,缩进量与标题本身相同。但经过多次尝试,没有找到与我需要的类似的内容,我变得绝望了。这是我的 MWE,实际上是我的“最小不工作示例”:

\documentclass{scrbook} 
\usepackage{lipsum}

\DeclareSectionCommand[
    afterindent=true,
    indent=10mm,
    beforeskip=10mm,
    afterskip=5mm,
]{section}

\begin{document}
\chapter{Chapter Title}
\lipsum[75]

\lipsum[75]
\section{Section Title}
\lipsum[75]

\lipsum[75]
\end{document}

在此处输入图片描述 当我搜索类似以下的输出时,其中部分标题后的第一行保留其上方标题的缩进。 在此处输入图片描述 在 Koma-script 手册中,我可以找到如何控制垂直分隔,或者是否有缩进或根本没有缩进,但我没有找到如何设置第一段缩进的数量。我甚至不知道这是否以任何方式直接实现,或者是否可以使用 scrbook 类来实现。

答案1

indentfirst.sty奏效

\documentclass{scrbook} 
\usepackage{indentfirst}
\usepackage{lipsum}

\begin{document}
\chapter{Chapter Title}
\lipsum[75]

\lipsum[75]
\section{Section Title}
\lipsum[75]

\lipsum[75]
\end{document}

答案2

免责声明:以下建议使用内部命令,因此将来可能会出现故障。

\documentclass{scrbook}
\KOMAoptions{fontsize=12pt}
\recalctypearea% <- added, because of the fontsize change
\usepackage{lipsum}

\renewcommand\raggedchapter{\raggedleft}

\DeclareSectionCommand[
    indent=10mm,
    afterindent=true,
    beforeskip=10mm,
    afterskip=5mm,
]{section}

\RedeclareSectionCommand[
    indent=15mm,
    afterindent=true,
    beforeskip=15mm,
    afterskip=5mm,
]{subsection}

\usepackage{xpatch}
\newlength\firstindent

\makeatletter
\xpatchcmd{\@afterheading}
  {\if@afterindent \else}
  {\if@afterindent \hspace{\firstindent}\else}
  {}{\PatchFailed}

\newcommand*\setfirstindent[1]{%
  \scr@ifundefinedorrelax{scr@#1@sectionindent}
    {\setlength{\firstindent}{-\parindent}}
    {\setlength{\firstindent}{\dimexpr\@nameuse{scr@#1@sectionindent}-\parindent\relax}}%
}
\makeatother
\AddtoDoHook{heading/postinit}{\setfirstindent}

\begin{document}
\chapter{Chapter Title}
\lipsum[75]\par\lipsum[75]
\section{Section Title}
\lipsum[75]\par\lipsum[75]
\subsection{Subsection Title}
\lipsum[75]\par\lipsum[75]
\end{document}

结果:

在此处输入图片描述

答案3

最后我得到了两个不同的解决方案。第一个感谢@esdd,另一个通过邮件。

\documentclass[fontsize=12pt]{scrbook}
\usepackage{lipsum}

\DeclareSectionCommand[
    indent=20mm,
    afterindent=true,
    beforeskip=3ex,
    afterskip=0.5ex,
]{section}

\usepackage{xpatch}
\newlength\firstindent

\makeatletter
\xpatchcmd{\@afterheading}
  {\if@afterindent \else}
  {\if@afterindent \hspace{\firstindent}\else}
  {}{\PatchFailed}

\newcommand*\setfirstindent[1]{%
  \scr@ifundefinedorrelax{scr@#1@sectionindent}
    {\setlength{\firstindent}{-\parindent}}
    {\setlength{\firstindent}{\dimexpr\@nameuse{scr@#1@sectionindent}-\parindent\relax}}%
}
\makeatother
\AddtoDoHook{heading/postinit}{\setfirstindent}

\begin{document}
    \chapter{Chapter Title}
        \lipsum[75] 

        \lipsum[75]
    \section{Section Title}
        \lipsum[75] 

        \lipsum[75]
\end{document}

第二个(不需要 xpatch 包):

\documentclass[fontsize=12pt]{scrbook}
\usepackage{lipsum}

\RedeclareSectionCommand[
    indent=20mm,
    beforeskip=3ex,
    afterskip=0.5ex,
    afterindent=true,
    runin=false,
]{section}

% Change the paragraph indent after the sectio:
\AddtoDoHook{heading/endgroup/section}{\global\parindent=20mm}

\makeatletter
\def\@afterheading{%
    \@nobreaktrue
    \everypar{%
        \if@nobreak
        \@nobreakfalse
        \clubpenalty \@M
        \if@afterindent
        \else
        {\setbox\z@\lastbox}%
        \fi
        \global\parindent=\scr@parindent% reset the paragraph indent
        \else
        \clubpenalty \@clubpenalty
        \everypar{}%
        \fi}}
\makeatother

\begin{document}
    \chapter{Chapter Title}
    \lipsum[75] 

    \lipsum[75]
    \section{Section Title}
    \lipsum[75] 

    \lipsum[75]
\end{document}

现在运行良好。谢谢!

相关内容