我对此进行了大量搜索,但毫无收获。所以,我在这里寻求帮助。我想将章节标题后的第一行段落缩进,缩进量与标题本身相同。但经过多次尝试,没有找到与我需要的类似的内容,我变得绝望了。这是我的 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}
现在运行良好。谢谢!