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 \ignorespacesandallpars
comando é 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):
\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 \@nobreaktrue
e entãolocalmentedefine \everypar
para desfazer isso. Então após o término do seu ambiente (desfazendo a \everypar
configuração) você fica \@nobreaktrue
sentado esperando a próxima lista para pegá-lo...
E \@nobreak
faz uma lista não inserir \topsep
...
Para evitar essa bagunça, você deve certificar-se \@afterheading
de que é chamado fora do seu ambiente.
Substituir \@afterheading
por \aftergroup\@afterheading
na sua definição move o \@afterheading
grupo para fora do grupo definido pelo seu ambiente e faz \topsep
reaparecer.