Abstand der neuen Umgebung in Listen

Abstand der neuen Umgebung in Listen

Der Titel ist nicht sehr aussagekräftig. Ich versuche, eine benutzerdefinierte Umgebung remarkim -Stil zu schreiben amsthm, die Argumente als Header annehmen kann (ich brauche keine Referenzierungsfunktionen). Ich wollte den Code vereinfachen, indem ich vermeide trivlist, remarkdass Theoremumgebungen im -Stil .5\topsepvor und nach der Umgebung Leerzeichen haben. Aber das sieht in Listenumgebungen wie wirklich seltsam aus itemize. Hier ist, was ich habe:

\documentclass{article}
\usepackage{lipsum} % for testing

% paragraph environment, takes one mandatory header text
\newenvironment{para}[1]{
    % add space before environment
    \par\addvspace{.5\topsep}
    % header text 
    \noindent\textit{#1.}%
    % default rubber space after header text and ignore following spaces
    \hspace*{5pt plus 1pt minus 1pt}\ignorespaces
}{
    % add space after environment
    \par\addvspace{.5\topsep}
}

\begin{document}

\lipsum[66]

\begin{para}{Looks good}
    \lipsum[66]
\end{para}

\lipsum[66]

\begin{itemize}
    \item \lipsum[66]

        Compare \verb|\parsep| above and the \verb|\parsep+.5\topsep| below.

        \begin{para}{Looks weird}
            \lipsum[66]
        \end{para}

        \lipsum[66]
\end{itemize}

\end{document}

Wie Sie sehen, wird in Listenumgebungen das .5\topsepzu dem von Null verschiedenen hinzugefügt \parsep, wodurch eine größere Lücke entsteht. Die ursprünglichen amsthmUmgebungen vermeiden dies, indem sie die Mechanismen von Latex für Listen verwenden ( \@topsepund \@topsepaddauf den gewünschten Abstand von einstellen .5\topsep). Ebenso würde ich es viel lieber vorziehen, überhaupt kein Leerzeichen hinzuzufügen, wenn parain Listenumgebungen aufgerufen wird.Gibt es eine Möglichkeit festzustellen, ob man sich in einer Listenumgebung befindet? Oder gibt es eine elegantere Lösung?


Bearbeiten:Bild der kompilierten Datei hinzugefügt.

Bildbeschreibung hier eingeben

Antwort1

AlsDavid Carlisle sagte, sollten Sie nicht verwenden, \topsepum Ihre Umgebung zu definieren, da es durch Listenumgebungen gesetzt und zurückgesetzt wird und Ihre Umgebung kein konsistentes Verhalten zeigt (da es von einer Länge abhängt, die häufig im laufenden Betrieb geändert wird). Sie möchten wahrscheinlich einen Wert fest codieren (machen Sie einen Kleber daraus, wenn Sie möchten, aber ich nehme einfach, 4ptda dies die gewünschte Menge zu sein scheint).

Um den Effekt von zu handhaben, \parskipder vorhanden sein kann oder nicht (in einer Listenumgebung \parskipist auf gleich gesetzt \parsep), können Sie ihn einfach durch Hinzufügen eines zusätzlichen vspace aufheben. Folgendes wird wahrscheinlich das gewünschte Ergebnis erzielen:

\documentclass{article}
\usepackage{lipsum} % for testing

% paragraph environment, takes one mandatory header text
\newenvironment{para}[1]{
    % add space before environment
    \par\addvspace{4pt}\addvspace{-\parskip}
    % header text 
    \noindent\textit{#1.}%
    % default rubber space after header text and ignore following spaces
    \hspace*{5pt plus 1pt minus 1pt}\ignorespaces
}{
    % add space after environment
    \par\addvspace{4pt}\addvspace{-\parskip}
}

\begin{document}

\lipsum[66]

\begin{para}{Looks good}
    \lipsum[66]
\end{para}

\lipsum[66]

\begin{itemize}
    \item \lipsum[66]

        Compare \verb|\parsep| above and the \verb|\parsep+.5\topsep| below.

        \begin{para}{Looks weird}
            \lipsum[66]
        \end{para}

        \lipsum[66]
\end{itemize}

\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen