Problema ao definir comprimentos em um ambiente (derramamento para fora do ambiente)

Problema ao definir comprimentos em um ambiente (derramamento para fora do ambiente)

Estou tendo problemas com espaçamento entre parágrafos em meu documento e acho que consegui rastrear um ambiente personalizado que defini.

\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

O \ignorespacesandallparscomando é de Martin Scharrer e vem deuma pergunta anterior do StackExchange.

(Eu sei que existem muitas outras maneiras - pacotes, ou as definições no amsmath - de obter esse tipo de ambiente, mas ainda não encontrei algo que me deixe completamente satisfeito, e é mais fácil no momento usar um definição personalizada.)

Depois de usar essa definição, acho que percebi que o espaçamento é um pouco estranho e exige comandos adicionais \smallskip ou \medskip. Eu me pergunto o que estou fazendo de errado.

Meu problema está em outro lugar ou estou fazendo algo errado aqui?

ATUALIZAR:O trecho a seguir ilustra um dos problemas (o espaçamento antes da segunda lista de itens não é igual ao da primeira):

insira a descrição da imagem aqui

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

Responder1

Bem, essa \@afterheadingé uma das razões pelas quais os comandos de seccionamento nunca devem ser usados ​​em grupos ;-)

Ele define \@nobreaktruee entãolocalmentedefine \everyparpara desfazer isso. Então após o término do seu ambiente (desfazendo a \everyparconfiguração) você fica \@nobreaktruesentado esperando a próxima lista para pegá-lo...

E \@nobreakfaz uma lista não inserir \topsep...

Para evitar essa bagunça, você deve certificar-se \@afterheadingde que é chamado fora do seu ambiente.

Substituir \@afterheadingpor \aftergroup\@afterheadingna sua definição move o \@afterheadinggrupo para fora do grupo definido pelo seu ambiente e faz \topsepreaparecer.

informação relacionada