KOMA scrartcl 按节缩进

KOMA scrartcl 按节缩进

所以我知道这不是最佳实践,但我有一个需要复制的模板,而文字可以轻松做到这一点......我需要\parindent根据级别缩进全文(而不仅仅是)。我需要分别为标题和文本设置它,例如

  1. 章节、标题(内含编号)位于左边距
  2. 章节,文本距左边距缩进 0.7cm
  3. 小节、标题在有部分的文本上,例如从左边距缩进 0.7 厘米
  4. 子节,正文距左边距缩进 1.4cm

有没有一种使用 KOMA 的简单方法可以实现这一点?

文档的当前状态

\documentclass[11pt, oneside, a4]{scrartcl}

% Packages, Design
\usepackage[top=1.5cm, bottom=2.5cm, left=2.5cm, right=1.6cm]{geometry}
\usepackage{lipsum}
\pagestyle{empty}
%\usepackage{showframe}

% Section style
\setkomafont{section}{\bfseries\fontsize{14pt}{14pt}\selectfont}
\setkomafont{subsection}{\bfseries}
\setkomafont{subsubsection}{\bfseries}

\RedeclareSectionCommand[
beforeskip=-2\baselineskip,
afterskip=0.2\baselineskip,
]{section}

\RedeclareSectionCommands[
beforeskip=-2\baselineskip,
afterskip=0.2\baselineskip
]{subsection, subsubsection}

% Opening
\title{Report}
\author{A Anme}

\begin{document}

\section{Test 1}
Text\\
More text on a second line\par
\lipsum
\section{Test 2}
Text\\
Equation: 
\begin{equation}
    E = m\cdot c^2
\end{equation}
\subsection{Test 2 2}
Text
\subsubsection{TestSub}
Something

\end{document}

答案1

做这样的事情并不像看起来那么简单。左边距是整个页面始终使用的值。因此,要添加额外的左边距,您可以将子节的整个内容移动到环境中,例如缩进(问题minipage:没有分页符),或addmargin,甚至tcolorbox,或者您可以操作\leftskip。在下面的例子中,我做了最后一件事(并使用了 2020/10/01 的 LaTeX 通用钩子)并重新定义\sectionlinesformat(有关此内容的更多信息,请参阅 KOMA-Script 手册):

\documentclass{scrartcl}% All default options removed

% Packages, Design
\usepackage[top=1.5cm, bottom=2.5cm, left=3.2cm, right=1.6cm]{geometry}% left
                                % margin increased by the text indent of
                                % sections

\usepackage{mwe}
\pagestyle{empty}
%\usepackage{showframe}

% Section style
\setkomafont{section}{\bfseries\fontsize{14pt}{14pt}\selectfont}
\setkomafont{subsection}{\bfseries}
\setkomafont{subsubsection}{\bfseries}

\makeatletter
\renewcommand*{\sectionlinesformat}[4]{%
  \hskip#2\parbox{\dimexpr\linewidth+0.7cm}{%
    \@hangfrom{#3}{#4}%
  }%
}
\makeatother

\RedeclareSectionCommand[
  indent=-0.7cm,
  runin=false,
  afterindent=false,
  beforeskip=2\baselineskip,
  afterskip=0.2\baselineskip,% IMHO not enough
]{section}

\RedeclareSectionCommands[
  indent=0cm,
  afterindent=false,
  beforeskip=2\baselineskip,
  afterskip=0.2\baselineskip,% IMHO not enough
]{subsection, subsubsection}

\AddToHook{cmd/section/before}{%
  \par
  \setlength{\leftskip}{0pt}%
  \setlength{\linewidth}{\textwidth}%
}
\AddToHook{cmd/subsection/before}{%
  \par
  \setlength{\leftskip}{0.7cm}%
  \setlength{\linewidth}{\textwidth}%
  \addtolength{\linewidth}{-\leftskip}%
}

% Opening
\title{Report}
\author{A Anme}

\begin{document}
\tableofcontents

\section{Test 1}
\lipsum[1]
\begin{itemize}
\item Testitem
\item Testitem
\end{itemize}
\lipsum[2-3]

\section{Test 2}
\lipsum[1]
\begin{equation}
    E = m\cdot c^2
\end{equation}
\lipsum[2]
\subsection{Test 2 2}
\lipsum[3]
\subsubsection{TestSub}
\lipsum[4]

\blinddocument

\end{document}

在第 1 页和第 2 页,这似乎符合要求:

第 1 页和第 2 页,并按要求缩进

但是第 3 页和第 4 页的列表缩进不正确:

两页列表缩进错误

如果这对您有用,您还应该\leftmargini在钩子内进行更改等。或者,您可以使用包enumitem来调整列表。

更改\leftskip几乎整个文档可能会出现其他问题。例如,源自trivlist以下环境的环境addmargin派生的环境也可能行为怪异

所以恕我直言,你的问题的答案

有没有一种使用 KOMA 的简单方法可以实现这一点?

答案是:不,不容易。

相关内容