Problema al establecer longitudes en un entorno (derramándose fuera del entorno)

Problema al establecer longitudes en un entorno (derramándose fuera del entorno)

Tengo problemas con el espacio entre párrafos en mi documento y creo que he podido rastrear hasta un entorno personalizado que he definido.

\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

El \ignorespacesandallparsmando es de Martin Scharrer y proviene deuna pregunta anterior de StackExchange.

(Sé que hay muchas otras formas (paquetes o definiciones en amsmath) de obtener este tipo de entorno, pero todavía no he encontrado algo con lo que esté completamente satisfecho y en este momento es más fácil usar un definición personalizada.)

Después de usar esta definición, creo que noto que el espaciado es un poco extraño y requiere comandos \smallskip o \medskip adicionales. Me pregunto qué estoy haciendo mal.

¿Mi problema está en otra parte o estoy haciendo algo mal aquí?

ACTUALIZAR:El siguiente fragmento ilustra uno de los problemas (el espacio antes de la segunda lista detallada no es el mismo que el de la primera):

ingrese la descripción de la imagen aquí

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

Respuesta1

Bueno, \@afterheadinges una de las razones por las que los comandos de sección nunca deberían usarse en grupos ;-)

Se pone globalmente \@nobreaktruey luegoen la zonaestablece \everyparpara deshacerlo. Entonces, después del final de su entorno (deshacer la \everyparconfiguración), estará \@nobreaktruesentado esperando que la siguiente lista lo capture...

Y \@nobreakhace una lista para no insertar \topsep...

Para evitar este lío, debes asegurarte de \@afterheadingque se llame fuera de tu entorno.

Reemplazar \@afterheadingcon \aftergroup\@afterheadingen su definición mueve el \@afterheadingexterior del grupo definido por su entorno y lo hace \topsepreaparecer.

información relacionada