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 \ignorespacesandallpars
mando 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):
\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, \@afterheading
es una de las razones por las que los comandos de sección nunca deberían usarse en grupos ;-)
Se pone globalmente \@nobreaktrue
y luegoen la zonaestablece \everypar
para deshacerlo. Entonces, después del final de su entorno (deshacer la \everypar
configuración), estará \@nobreaktrue
sentado esperando que la siguiente lista lo capture...
Y \@nobreak
hace una lista para no insertar \topsep
...
Para evitar este lío, debes asegurarte de \@afterheading
que se llame fuera de tu entorno.
Reemplazar \@afterheading
con \aftergroup\@afterheading
en su definición mueve el \@afterheading
exterior del grupo definido por su entorno y lo hace \topsep
reaparecer.