Sie sind hier

Abstand der Absätze in labeling Umgebung

Hallo,
ich möchte den Abstand, der zwischen den Absätzen der items einer labeling-Umgebung entsteht verändern. Dazu habe ich auch schon den Befehl \itemsep=xxpt gefunden.
Jetzt möchte ich die Umgebung labeling so umdefinieren, dass der Abstand schon für die Umgebung an sich geändert wird.
Für die Umgebungen itemize, enumerate und description habe ich auch schon einen Style im Internet gefunden. Siehe unten.
Ich schaffe es aber leider nicht, diese Vorlage auf die labeling-Umgebung anzuwenden, weil, so gleube ich, die Parameter, die bei labeling übergeben werden, bei dieser Änderung der Umgebung berücksichtigt werden müsen.
Ich hätte also gerne so etwas wie:

\documentclass{scrbook}

\makeatletter
\let\orig@Labeling=\labeling
\renewenvironment{labeling}{\orig@Labeling\itemsep=0pt}{\endlist}
\makeatother

\begin{document}

\begin{labeling}[:]{xxx}
	\item[eins] text text text text text text text text text text
                    text text text text text text text text text text
                    text text text text text text text text text text
	\item[zwei] text text text text text text text text text text
                    text text text text text text text text text text
                    text text text text text text text text text text 
\end{labeling}

\end{document}

Ich hoffe, ich konnte mich verständlich ausdrücken und es kann mir jemand helfen.

Danke und viele Grüße
Christian

%%%% debut macro %%%%
%% ----------------------------------------------------
%% Copyright (c) 1993 Hydro-Quebec mboyer@robot.ireq.ca
%% ----------------------------------------------------

%% Bring items closer together in list environments
% Prevent infinite loops
\let\orig@Itemize =\itemize
\let\orig@Enumerate =\enumerate
\let\orig@Description =\description
% Zero the vertical spacing parameters
\def\Nospacing{\itemsep=0pt\topsep=0pt\partopsep=0pt%
\parskip=0pt\parsep=0pt}
% Redefinition de art12.sty pour commencer a la marge de gauche
%\leftmargini 1.2em      % 2.5em

\def\noitemsep{
% Redefine the environments in terms of the original values
\renewenvironment{itemize}{\orig@Itemize\Nospacing}{\endlist}
\renewenvironment{enumerate}{\orig@Enumerate\Nospacing}{\endlist}
\renewenvironment{description}{\orig@Description\Nospacing}%
{\endlist}
}

\def\doitemsep{
% Redefine the environments to the original values
\renewenvironment{itemize}{\orig@Itemize}{\endlist}
\renewenvironment{enumerate}{\orig@Enumerate}{\endlist}
\renewenvironment{description}{\orig@Description}{\endlist}
}
%%%% fin macro %%%%
Bild von Markus Kohm

Lass uns

\let\orig@Labeling=\labeling
\renewenvironment{labeling}{\orig@Labeling\itemsep=0pt}{\endlist}

mal stattdessen als

\newenvironment{newlabeling}{\labeling\itemsep=0pt}{\endlist}

schreiben. Dann fällt Dir sicher auf, was da falsch ist. Hier wird tatsächlich \itemsep als Argument an \labeling übergeben. Stattdessen sollen aber die Argumente für newlabeling an \labeling übergeben und danach \itemsep=0pt ausgeführt werden. Also:

\newenvironment{newlabeling}[2][]{% Umgebung mit zwei Argumenten,
    % das erste Argument ist optional und in der Voreinstellung leer
  \labeling[#1]{#2}\itemsep=0pt
}{\endlabeling}

Ich habe hier gleich noch \endlist in \endlabeling geändert. Ich betrachte es bereits bei der Umdefinierung von itemize etc. als Designfehler, davon auszugehen, dass bei \end{itemize} nur \endlist aufgerufen wird. Das ist bei den Standardklassen so, aber wer sagt, dass es bei allen Klassen und bei Verwendung aller Pakete so ist?

Das muss man jetzt nur noch auf den Fall übertragen, dass die geänderte Umgebung unter dem Namen der alten Umgebung verfügbar sein soll. Und wenn wir schon dabei sind, an der vorgeführten Lösung herumzumäkeln: Wenn man sich darauf stützt, dass die labeling-Umgebung per \labeling und \endlabeling definiert ist (dieses Prinzip gilt für alle LaTeX-Umgebungen), und man nur den \begin{labeling}-Teil ändern will, dann ist eigentlich nicht einzusehen, dass man den \end{labeling}-Teil ebenfalls neu definiert:

\let\orig@Labeling=\labeling
\renewcommand*{\labeling}[2][]{%
  \orig@Labeling[#1]{#2}%
  \itemsep=0pt}

Noch ein Hinweis zum Schluss: \itemsep ist der Abstand zwischen den Items. Es gibt aber innerhalb der Items dann auch noch Absätze. Deren Abstand ist bei Definition einer Liste per \list die Länge \parsep, innerhalb der Liste jedoch ganz normal \parskip. \partopsep wiederum ist der zusätzliche Abstand vor der Liste, wenn mit der Liste ein eigener Absatz beginnt. Demgegenüber ist \topsep der Abstand vor der Liste, wenn mit der Liste keinen eigener Absatz beginnt.

Hallo,
erst mal vielen Dank für die schnelle Hilfe. Ich habe den Code übernommen und mein Dokument sieht jetzt so aus:

\documentclass{scrbook}

\makeatletter
\let\orig@Labeling=\labeling
\renewcommand*{\labeling}[2][]{%
  \orig@Labeling[#1]{#2}%
  \itemsep=0pt}
\makeatother

\begin{document}

\begin{labeling}[:]{xxx}
	\item[eins] text text text text text text text text text text
                    text text text text text text text text text text
                    text text text text text text text text text text
	\item[zwei] text text text text text text text text text text
                    text text text text text text text text text text
                    text text text text text text text text text text 
\end{labeling}

\end{document}

Jetzt hab ich das Problem, dass die Kompilierung der Datei mit folgender Fehlermeldung abbricht:

! TeX capacity exceeded, sorry [input stack size=5000].
\@protected@testopt ...estopt \else \@x@protect #1
                                                  \fi 
l.12 \begin{labeling}[n]{xxx}
                             
If you really absolutely need more capacity,
you can ask a wizard to enlarge me.

Bedeutet das, dass an meiner Installation etwas falsch konfiguriert ist, oder hab ich bei dem .tex-Dokument etwas falsch gemacht?

Danke und viele Grüße
Christian

Bild von Markus Kohm

Das deutet darauf hin, dass irgendwie eine unendliche Rekursion drin ist. Ich habe jetzt nicht die Zeit, dem nachzugehen, vermute aber, dass es damit zusammenhängt wie \renewcommand, \newcommand, \renewenvironment und \newenvironment bei der Definition von Befehlen und Umgebungen mit optionalen Argumenten arbeitet. Jedenfalls funktioniert:

\makeatletter
\let\orig@Labeling\labeling
\newcommand{\x@labeling}[2][]{%
  \orig@Labeling[{#1}]{#2}
  \itemsep=0pt
}
\let\labeling\x@labeling
\makeatother

Das funktioniert.
Vielen Dank und Gruß
Christian

Comments for "Abstand der Absätze in labeling Umgebung" abonnieren