Sie sind hier

Seitenabstand \leftmargin in eingebetteter \list-Umgebung

Hallo zusammen,
um meine Hypothesen automatisch durchzählen zu lassen, habe ich ein kleines Skript programmiert. Es funktioniert auch wunderbar, das Problem liegt an der Formatierung. Ich möchte gerne den gesamten Absatz der Hypothese eingerückt erscheinen lassen. Dies habe ich mit dem Attribut \leftmargin20pt nach \list versucht. Allerdings wird der Befehl nicht beachtet, der Rand bleibt unverändert. Wende ich genau denselben Code in der \teaser-Umgebung an, funktioniert er einwandfrei (s. ebenfalls Minimalbeispiel).

Anmerkung: Im Minimalbeispiel sind Teile des \hypothesen-Skripts nicht enthalten, da der Code eigentlich komplexer ist. Aufgrund verschiedener if-Abfragen kann ich auch nicht die Theorem-Umgebung benutzen.

Es wäre wirklich super, wenn jemand von euch eine Idee hätte. Ich möchte es für meine Diplomarbeit verwenden und die Abgabe rückt stetig näher...

Vielen Dank
fredo77

\documentclass[a4paper,10pt]{scrreprt}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{blindtext}
 
% Anfang Skript für Hypothese
\newcounter{hypothesenzahl}
\newcommand{\hypothese}[1]%
% Hier folgt die entscheidende Zeile:
{{{\list{}{\rightmargin0pt\leftmargin20pt}\item\relax\bfseries %
Hypothese \thehypothesenzahl: %
\stepcounter{hypothesenzahl}%
}\textit{#1} \endlist}}
 
% Ende Hypothese
 
% Teaser für Zitat zum Anfang eines Kapitels
% s. http://forum.de.selfhtml.org/archiv/2005/12/t120634/
% 1. Parameter: Zitattext, 2.: Quelle, hintendran: großer Abstand zum Folgetext
\newcommand{\teaser}[2]%
{{\list{}{\rightmargin0pt\leftmargin200pt}\item\relax\textit{#1}\endlist%
\begin{flushright}#2\end{flushright}\list{}{}\item\relax\endlist}}
 
% Ende Teaser
 
 
\begin{document}
 
\hypothese{\blindtext}
 
\teaser{\blindtext}{Eine kleine Zeile.}
 
\end{document}
Bild von Markus Kohm

Korrekte LaTeX-Syntax wäre \begin{list}{...}{...}...\end{list} statt {\list{...}{...}...\endlist}. Wenn Du das machst, wird Dir auch der Fehler, den Du gemacht hast, gemeldet. Wenn Du ihn trotzdem nicht findest, melde Dich nochmal.

Bei der Gelegenheit solltest Du Dir dann auch noch korrekte LaTeX-Syntax für Längenzuweisungen angewöhnen, also die Verwendung von \setlength. Auch das ist in diversen Fällen von Vorteil und deshalb ist es sinnvoll das einfach grundsätzlich zu machen. Früher gab es ja mal das Argument Tokenzahl oder Geschwindigkeit. Bei heutigen TeX-Distributionen ist Token-Speicher normalerweise kein Problem und der Geschwindigkeitsunterschied ist lachhaft.

Und um das Ganze jetzt doch noch on-topic zu machen: Warum verwendest Du nicht einfach die addmargin-Umgebung. Die ist genau für solche Dinge gemacht.

... aber da kommt in der Tat eine Fehlermeldung, die ich nicht verstehe. Sie sagt, es fehle eine geschweifte Klammer:

! Extra }, or forgotten \endgroup.

Dem ist aber nicht so. Alle geöffneten Klammern sind korrekt geschlossen.

Gleiches passiert, wenn ich die addmargin-Umgebung benutzen möchte. Demnach liegt das Problem irgendwie an der Verwendung von \begin{...} und \end{...} in dem Skript.

Vielen Dank an der Stelle für deine tollen Hinweise!

Bild von Markus Kohm

Du kannst nicht eine Gruppe öffnen und darin eine Gruppe öffnen und dann erst die äußere und dann die innere Gruppe schließen. Genau das machst Du aber (hier mal mit anderer Formatierung):

\newcommand{\hypothese}[1]
{% Beginn des Arguments von \newcommand
  {% erste Gruppe (I)
    {% zweite Gruppe (II)
      \list{}{\rightmargin0pt\leftmargin20pt}% lokal zu Gruppe II
                                             % eine Liste begonnen
        \item\relax\bfseries %
          Hypothese \thehypothesenzahl: %
          \stepcounter{hypothesenzahl}%
    }% Gruppe II und damit die lokalen Einstellungen von \item
     % und der Liste beendet
  \textit{#1}% etwas innerhalb von Gruppe I ausgegeben
  \endlist % eine Liste in Gruppe I beendet, die gar nicht in
           % dieser Gruppe begonnen wurde
  }% Gruppe I beendet
}% Argument von \newcommand beendet

Wenn man \begin{list}...\end{list} verwendet, bemerkt LaTeX diesen Fehler und meldet ihn in der angegebenen Weise.

\newcommand{\hypothese}[1]
{% Beginn des Arguments von \newcommand
  {% freie Gruppe
    \begin{list}{\rightmargin0pt\leftmargin20pt}% list-Gruppe
      \item\relax\bfseries %
        Hypothese \thehypothesenzahl: %
        \stepcounter{hypothesenzahl}%
    }% freie Gruppe geschlossen, die nie beendet wurde, also ein
     % Extra-Ende einer Gruppe, das zur Fehlermeldung:
     %     `! Extra }, or forgotten \endgroup'
     % führt.
    \textit{#1}% etwas innerhalb der freien Gruppe aber nicht mehr
               % innerhalb der list-Gruppe ausgeben
  \end{list} % Listgruppe beendet, obwohl hier gar keine List-Gruppe
             % mehr korrekt verfügbar ist.
}% Argument von \newcommand beendet

Korrekt wäre wohl:

\documentclass[a4paper,10pt]{scrreprt}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{blindtext}

% Anfang Skript für Hypothese
\newcounter{hypothesenzahl}
\newcommand{\hypothese}[1]{%
  \begin{list}{}{\rightmargin0pt\leftmargin20pt}
  \item\relax\textbf{Hypothese \thehypothesenzahl:}
    \stepcounter{hypothesenzahl}%
    \textit{#1} 
  \end{list}
}

% Ende Hypothese

% Teaser für Zitat zum Anfang eines Kapitels
% In Abwandlung des Murks von 
% http://forum.de.selfhtml.org/archiv/2005/12/t120634/
% 1. Parameter: Zitattext, 2.: Quelle, hintendran: großer Abstand zum Folgetext
\newcommand{\teaser}[2]{%
  \begin{list}{}{\rightmargin0pt\leftmargin200pt}
  \item\relax\textit{#1}
  \end{list}
  \begin{flushright}#2\end{flushright}
  \bigskip
}

% Ende Teaser

\begin{document}

\noindent\hrulefill\ Textbreite \hrulefill

\hypothese{\blindtext}

\teaser{\blindtext}{Eine kleine Zeile.}

\end{document}

Oder eben gleich richtig:

\documentclass[a4paper,10pt]{scrreprt}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{blindtext}

% Anfang Skript für Hypothese
\newcounter{hypothesenzahl}
\newcommand{\hypothese}[1]{%
  \begin{addmargin}[20pt]{0pt}
    \noindent\refstepcounter{hypothesenzahl}\textbf{Hypothese
      \thehypothesenzahl:} 
    \textit{#1}
  \end{addmargin}
}

% Ende Hypothese

\begin{document}

\noindent\hrulefill\ Textbreite \hrulefill

\hypothese{\blindtext\label{hyp:diese}}

Siehe auch Hypothese~\ref{hyp:diese}.

\end{document}

Und dann gibt es bei KOMA-Script auch noch \dictum, so dass man \teaser normalerweise nicht brauchen dürfte. Wenn es wirklich am Kapitelanfang verwendet werden soll, kann man das auch gleich noch mit \setchapterpreamble kombinieren. Das liest Du aber bitte in der Anleitung nach.

das ist wirklich super! Da wäre ich selbst nie drauf gekommen. Vielen Dank für diese ausführliche Antwort, Markus. Ich habe auch gleich die Idee mit dem \label übernommen. Allerdings wird bei mir immer die Abschnittsnummerierung ausgegeben, wenn ich mit \ref auf eine Hypothese zugreifen möchte. Ich versuche noch, ein Minimalbeispiel hierfür zu bauen, das den Fehler repliziert. Gleichzeitig käme dann noch die Schwierigkeit hinzu, dass ich einen zusammengesetzten Counter habe (also bspw. "Hypothese 1.a").

Ich habe \teaser vorerst beibehalten, habe allerdings nun die Längenangaben mit \setlength gesetzt :-) Werde mich noch in den Abschnitt über \dictum des scrguide einlesen.

Bild von Markus Kohm

den Zähler, der in der aktuellen Gruppe zuletzt (bezogen auf die \label-Anweisung) mit \refstepcounter erhöht wurde. LaTeX-Umgebungen stellen ebenfalls eine Gruppe dar. Auch in Anweisungen können sich Gruppen verstecken. So steckt das das Argument von \text... (also beispielsweise \textbf) etwa in einer impliziten Gruppe.

Man muss also etwas aufpassen, wo man ein \label unterbringt, damit es sich auf den richtigen Zähler bezieht.

In der Tat, es kommt ziemlich darauf an, wo man \label bei der Verwendung im Fließtext benutzt. Es kommt aber auch darauf an, wo geschweifte Klammern und welche Umgebungen im Skript benutzt werden. Herzlichen Dank für deine super Hilfe, Markus!

Habe nun das Problem mit \label im Griff, allerdings gibt es beim Verweis darauf mit \ref noch andere Probleme. Dies liegt einmal daran, dass ich eine zusammengesetzten Zähler verwende, zum anderen an der Benutzung der Hypothesen in unterschiedlichen Abschnitten.

Zum ersten Problem: Bei Verwendung eines zusammengesetzten Zählers (bspw. "Hypothese 1.a") soll er beim Aufruf über \ref "1.a" zurückgeben und nicht alleine "1" (wie im Minimalbeispiel). Wie könnte ich das Problem lösen?

Das zweite Problem zeigt sich leider nicht in dem hier eingefügten Minimalbeispiel. Es besteht darin, dass beim Aufruf einer Hypothese mit \ref in einem neuen Abschnitt "1" zurückgegeben wird. Die Nummerierung allerdings funktioniert, es wird also die nächsthöhere Zahl ausgegeben (bspw. "Hypothese 2"), wenn die Hypothese generiert wird.

Vielleicht ist das alles auch zu komplex und ich muss doch auf theorem zurückgreifen. Allerdings kann ich hier keine Unter-Hypothesen generieren, die nicht aneinander hängen und durch Fließtext getrennt sind.

\documentclass[a4paper,10pt]{scrbook}
\usepackage[latin1]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage{blindtext}

% Anfang Skript für Hypothese
\newcounter{hypothesenzahl}
\newcounter{hypothesenzahlin}[hypothesenzahl]

\newcommand{\hypothese}[2]{%
  \begin{addmargin}[20pt]{0pt}
    \noindent%
    % if-Abfrage eigentlich komplexer, für Minimalbsp. vereinfacht
    \ifnum#1=1%
      \refstepcounter{hypothesenzahl}%
    \else%
      \refstepcounter{hypothesenzahlin}%
    \fi%
    \textbf{Hypothese \thehypothesenzahl.\alph{hypothesenzahlin}: }%
    \textit{#2}
  \end{addmargin}
}


% Ende Hypothese

\begin{document}

\chapter{Kapitelüberschrift}
\section{Abschnittsüberschrift 1}

\hypothese{1}{Erste tolle Behauptung.\label{hyp:diese}}

Siehe auch Hypothese~\ref{hyp:diese}.

\hypothese{2}{Zweite tolle Behauptung.\label{hyp:jene}}

% Hier wird nicht "1.a" angezeigt, sondern nur "1"
Siehe auch Hypothese~\ref{hyp:jene}.

\section{Abschnittsüberschrift 2}

\hypothese{1}{Dritte tolle Behauptung.\label{hyp:nocheine}}

Siehe auch Hypothese~\ref{hyp:nocheine}.

\end{document}

Bild von Markus Kohm

\ref verwendet das, was in \the<Zähler> steht und setzt noch das davor, was in \p@<Zähler> steht. Näheres ist source2e zu entnehmen oder einer der Definition von \theenumi bis \theenumiv und \p@enumii bis \p@enumiv (z. B. in scrsource.pdf oder classes.dtx) für das, was bei Referenzen auf geschachtelte enumerate-Umgebungen herauskommen soll.

Eventuell habe ich dazu im Forum auch schon etwas erklärt. Ansonsten sprengt das eigentlich den Rahmen hier, da es eine Einführung in den LaTeX-Kern und nicht in KOMA-Script bedeutet.

Außerdem solltest Du in der De-TeX-FAQ (siehe Grundlagenliteratur) nachschauen, wie man Zähler an andere Zähler koppelt. Wenn ich Deine Frage richtig verstanden habe, solltest Du den Hypothesenzähler an section koppeln.

für die tolle Hilfe bis hierher. Du hast recht, das geht wohl über den Rahmen hinaus. Ich werde die von dir angegebenen Quellen durchsehen. Auf jeden Fall komme ich sehr gerne hierher zurück, wenn ich mal wieder etwas zu KOMA-Script suche :)

Bild von Markus Kohm

Der Spruch gilt nicht nur für diejenigen, die sich wie die Axt im Wald benehmen. Wer sich ein wenig Mühe bei den Fragen gibt und nicht erwartet, dass man ihm den Hinten hinterherträgt, kann diese Regel eben auch zum Vorteil nutzen.

Wenn ich im Augenblick nicht so knapp an Zeit wäre, hätte ich auch noch etwas genauer geantwortet, statt nur auf weitere Literatur zu verweisen.

... auch der Fragende sollte sich die größte Mühe bei der Formulierung und Genauigkeit der Formulierung geben.

Denn man kann nur das von anderen erwarten, was man ihnen selbst gibt. Das gilt im Umfeld des Internets, in dem man sich nicht einmal zu Gesicht bekommt, einmal mehr als im Face-to-Face-Kontakt.

Viele Grüße und vielen Dank!
fredo77

Mir fehlte die Verkopplung des äußeren Zählers hypothesenzahl mit dem inneren hypothesenzahlin durch \def\thehypothesenzahlin{\thehypothesenzahl.\alph{hypothesenzahlin}}

Beim Aufruf einer Hypothese mit dem \ref-Befehl wird nun der volle Zähler ausgegeben und nicht nur allein der innere hypothesenzahlin.

Nun funktioniert's und ich bin glücklich :)

Bild von Markus Kohm

(ungetestet):

\def\p@hypothesenzahlin{\thehypothesenzahl.}

wenn außer in Querverweisen der innere Zähler ohne den äußeren ausgegeben werden soll. Wegen des @ im Befehlsname siehe ggf. \makeatletter in der De-TeX-FAQ (Link in den Grundlageninfos).

Comments for "Seitenabstand \leftmargin in eingebetteter \list-Umgebung" abonnieren