Espaçamento do novo ambiente nas listas

Espaçamento do novo ambiente nas listas

O título não é tão descritivo. Tento escrever um ambiente remarkde estilo personalizado amsthmque possa receber argumentos como cabeçalho (não preciso de funcionalidades de referência). Eu queria simplificar o código evitando trivlist. remarkOs ambientes de teorema de estilo têm .5\topsepespaço antes e depois do ambiente. Mas isso parece muito estranho em ambientes de lista como itemize. Aqui está o que eu tenho:

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

Como você pode ver, em ambientes de lista, o .5\topsepé adicionado ao diferente de zero \parsep, criando uma lacuna maior. Os ambientes originais amsthmevitam isso empregando mecanismos do Latex para listas (configuração \@topsepe \@topsepaddespaçamento desejado .5\topsep). Da mesma forma, prefiro não adicionar nenhum espaço se parafor chamado dentro de ambientes de lista.Existe uma maneira de detectar se alguém está em um ambiente de lista? Ou existe uma solução mais elegante?


Editar:Adicionada imagem do arquivo compilado.

insira a descrição da imagem aqui

Responder1

ComoDavid Carlisle disse, você não deve usar \topseppara definir seu ambiente, pois ele é definido e redefinido por ambientes de lista e seu ambiente não fornecerá um comportamento consistente (já que depende de um comprimento que é frequentemente alterado em tempo real). Você provavelmente deseja codificar um valor (faça uma cola, se quiser, mas considerarei apenas 4ptque essa parece ser a quantidade desejada).

Para lidar com o efeito \parskipque pode ou não estar presente (em um ambiente de lista, \parskipé definido como igual a \parsep), você pode simplesmente cancelá-lo adicionando um vspace adicional. O seguinte provavelmente fará o que você deseja:

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

insira a descrição da imagem aqui

informação relacionada