リスト内の新しい環境の間隔

リスト内の新しい環境の間隔

タイトルはそれほど説明的ではありません。引数をヘッダーとして受け取ることができるカスタムremarkスタイルのamsthm環境を記述しようとしています (参照機能は必要ありません)。 を避けてコードを簡素化したいと考えましたtrivlistremarkスタイルの定理環境では.5\topsep、環境の前後にスペースがあります。 しかし、 のようなリスト環境では、これは非常に奇妙に見えますitemize。 これが私のものです:

\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}

ご覧のとおり、リスト環境では、 が.5\topsep非ゼロの に追加され\parsep、より大きなギャップが作成されます。元のamsthm環境では、リスト用の LaTeX メカニズム (\@topsep\@topsepaddを の必要な間隔に設定.5\topsep) を使用することでこれを回避します。同様に、リスト環境内で が呼び出される場合は、スペースをまったく追加しないことを強くお勧めしますparaリスト環境にあるかどうかを検出する方法はありますか? または、よりエレガントな解決策はありますか?


編集:コンパイルされたファイルの画像を追加しました。

ここに画像の説明を入力してください

答え1

としてデビッド・カーライルは言った\topsepは、環境を定義するために使用しないでください。これは、リスト環境によって設定およびリセットされ、環境が一貫した動作をしないためです (頻繁に変更される長さに依存するため)。おそらく、値をハードコードする必要があります (必要に応じてグルーにすることもできますが、4pt必要な量であると思われるので、そのまま使用します)。

存在するかどうかわからないの効果\parskip(リスト環境では は と\parskip等しくなるように設定されます\parsep) を処理するには、追加の vspace を追加してそれをキャンセルします。次の操作でおそらく目的の動作が実現します。

\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}

ここに画像の説明を入力してください

関連情報