Sie sind hier

Fehlendes item bei minisec innerhalb von addmargin direkt nach section

Ich weiß nicht, ob das ein Fehler von KOMA-Script ist, oder ob ich etwas falsch gemacht und es übersehen habe. Setzt man direkt nach einer Abschnittsüberschrift eine addmargin-Umgebung und darin eine minisec-Überschrift, dann wirft LaTeX mit KOMA-Script v3.19a eine Fehlermeldung aus. Das war bei KOMA-Script v3.09 nicht. Mit anderen Versionen, anderen als Abschnittsüberschriften und anderen Umgebungen habe ich es nicht getestet. Minimalbeispiel:

\documentclass[parskip=half]{scrreprt}
 
\usepackage[utf8]{inputenc}
\usepackage[german]{babel}
 
\usepackage{blindtext}
 
\newenvironment{env}{%
	\begin{addmargin}{5em}
	\minisec{\centering Mini}
}{%
	\end{addmargin}%
}
 
\begin{document}
\chapter{Kapitel}
 
Das Zusammentreffen von section, addmargin und darin enthaltener minisec erzeugt 
einen Fehler, der gestern mit KOMA-Script v3.09 nicht aufgetreten ist, erst nach dem 
Update auf v3.19a. Die parskip-Option und das Zentrieren der Minisecs wären für das 
Minimalbeispiel nicht nötig, sollen aber zeigen, wie es im Originaldokument aussehen 
soll. Ursprünglich waren die Miniüberschriften nicht zentriert, deswegen stehen sie 
(noch) innerhalb der addmargin-Umgebung. Stehen sie außerhalb, tritt der Fehler 
nicht auf.
 
\section{Abschnitt}
 
\begin{env}
\blindtext
\end{env}
 
Aussehen sollte das eigentlich so:
 
\section{Abschnitt}
 
Text.
 
\begin{env}
\blindtext
\end{env}
 
Das funktioniert mit KOMA-Script v3.19a nicht, wenn direkt vor addmargin ein 
section-Makro steht, ohne Text (Absatz?) dazwischen, während es mit 
KOMA-Script v3.09 noch ging:
 
\section{Abschnitt}
 
\begin{addmargin}{5em}
\minisec{\centering Mini}
 
\blindtext
\end{addmargin}
 
Beides jeweils allein direkt nach einem section-Makro macht keine Probleme:
 
\section{Abschnitt}
 
\begin{addmargin}{5em}
\blindtext
\end{addmargin}
 
\section{Abschnitt}
 
\minisec{\centering Mini}
 
Mit minisec außerhalb von addmargin funktioniert es:
 
\section{Abschnitt}
 
\minisec{\centering Mini}
 
\begin{addmargin}{5em}
\blindtext
\end{addmargin}
\end{document}
Bild von Markus Kohm

Das ist eine ganz normale Beschränkung von Überschriften und Listenumgebungen in LaTeX:

\documentclass{article}
 
\begin{document}
\section{Test}
\begin{itemize}
\item \subsection*{Test}
\end{itemize}
\end{document}

Die Ursache dürfte in der Absatzänderung (via \everypar) von Überschriften liegen. Bereits ein \csname @nobreakfalse\endcsname oder das einfachere \leavevmode nach der \section-Überschrift kann hier Abhilfe schaffen, führt aber auch zu zusätzlichem vertikalem Abstand und ermöglicht einen Seitenumbruch zwischen Überschrift und Listenumgebung. Man kann an der Stelle aber auch ein \vskip und ein \nopagebreak verwenden:

\documentclass{scrartcl}
\usepackage{blindtext} 
\begin{document}
\section{Abschnitt}
\leavevmode\vskip-\ht\strutbox\nopagebreak% Alternativ am Anfang der addmargin-Umgebung
\begin{addmargin}{5em}
\minisec{Mini}
 
\blindtext
\end{addmargin}
\section{Abschnitt}
\minisec{Mini}
\blindtext
\end{document}

In Deine eigene Umgebung könntest Du am Anfang

\if@nobreak\leavevmode\vskip-\ht\strutbox\nopagebreak\fi

einbauen.

Es ginge auch schlicht \@noskipsectrue am Anfang der addmargin-Umgebung, aber dann hat man einen größeren vertikalen Abstand.

BTW: \centering innerhalb von Überschriften ist nicht zulässig. Das gilt auch für \minisec. Wenn es dadurch zu Problemen kommt, gibt es dafür keinen Support. Dafür kann man \raggedsection umdefinieren.

Dass das ganze bei KOMA-Script v3.09 noch kein Problem war, liegt daran, dass \minisec dort noch keine echte Überschrift war. Dafür gab es andere Probleme. Du kannst aber mit version=3.13 auch auf eine Version zurück schalten, bei der das alte Verhalten verwendet wird.

Ich habe \if@nobreak…\fi benutzt. Da darf man nur \makeat nicht vergessen …

Comments for "Fehlendes item bei minisec innerhalb von addmargin direkt nach section" abonnieren