Problem beim Festlegen von Längen in einer Umgebung (Verschütten außerhalb der Umgebung)

Problem beim Festlegen von Längen in einer Umgebung (Verschütten außerhalb der Umgebung)

Ich habe Probleme mit dem Abstand zwischen den Absätzen in meinem Dokument und ich glaube, ich konnte dies auf eine benutzerdefinierte Umgebung zurückführen, die ich definiert habe.

\makeatletter
\def\remarkname{Remark}
\newcounter{counter@myremarks}
\newenvironment{remark}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
  \addtocounter{counter@myremarks}{1}%
  \textbf{\remarkname~\arabic{counter@myremarks}.}~~\ignorespacesandallpars}{%
  \endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\newenvironment{remark*}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
  \textbf{\remarkname.}~~\ignorespacesandallpars}{%
  \endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\makeatother

Das \ignorespacesandallparsKommando liegt bei Martin Scharrer und kommt voneine frühere StackExchange-Frage.

(Ich weiß, dass es viele andere Möglichkeiten gibt – Pakete oder die Definitionen in amsmath – um diese Art von Umgebung zu erhalten, aber ich habe noch nichts gefunden, mit dem ich völlig zufrieden bin, und im Moment ist es einfacher, eine benutzerdefinierte Definition zu verwenden.)

Nachdem ich diese Definition verwendet habe, merke ich, dass die Abstände etwas verrückt sind und zusätzliche \smallskip- oder \medskip-Befehle erfordern. Ich frage mich, was ich falsch mache.

Liegt mein Problem woanders oder mache ich hier etwas falsch?

AKTUALISIEREN:Der folgende Ausschnitt veranschaulicht eines der Probleme (der Abstand vor der zweiten Aufzählungsliste ist nicht derselbe wie vor der ersten):

Bildbeschreibung hier eingeben

\documentclass{article}

\makeatletter
\def\ignorespacesandallpars{%
  \begingroup
  \catcode13=10
  \@ifnextchar\par
    {\endgroup\expandafter\ignorespacesandallpars\@gobble}%
    {\endgroup}%
}
\def\remarkname{Remark}
\newenvironment{remark*}{\par\vspace{0.2cm}\par\noindent\begingroup\small%
  \textbf{\remarkname.}~~\ignorespacesandallpars}{%
  \endgroup\par\vspace{0.2cm}\par\@afterindentfalse\@afterheading}
\makeatother

\begin{document}

Following is an item list
\begin{itemize}
\item One
\item ...
\end{itemize}

\begin{remark*}
  Now a remark.
\end{remark*}

And another item list
\begin{itemize}
\item One
\item ...
\end{itemize}

\end{document}

Antwort1

Das \@afterheadingist einer der Gründe, warum Abschnittsbefehle nie in Gruppen verwendet werden sollten ;-)

Es geht global unter \@nobreaktrueund dannörtlichsetzt \everypar, um es rückgängig zu machen. Nach dem Ende Ihrer Umgebung (Rückgängigmachen der \everyparEinstellung) müssen Sie \@nobreaktruealso warten, bis die nächste Liste es erfasst ...

Und \@nobreakmacht eine Liste nicht einfügen \topsep...

Um dieses Durcheinander zu vermeiden, müssen Sie sicherstellen, \@afterheadingdass außerhalb Ihrer Umgebung aufgerufen wird.

Wenn Sie in Ihrer Definition \@afterheadingdurch ersetzen, wird es außerhalb der durch Ihre Umgebung definierten Gruppe verschoben und erscheint erneut.\aftergroup\@afterheading\@afterheading\topsep

verwandte Informationen