3

I have created an environment env which just adds a \medskip and some text (say "Blablabla") after the text inside \begin{env} ... \end{env}. The problem is that if the last line is full, then I get an additional horizontal space between the text and "Blablabla".

Here is an MWE:

\documentclass{article}
\newenvironment{env}{
ENVIRONMENT:\par
}{
\medskip
\par\noindent Blablabla
}

\begin{document}

\section*{First case: the last line is not full}

\begin{env}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada porta tortor non vestibulum. Vivamus vel tincidunt purus. Curabitur quam arcu, suscipit sed diam sed, ornare efficitur felis. Duis at arcu iaculis, viverra ligula sit amet, hendrerit eros. Proin finibus venenatis sollicitudin. Nunc ullamcorper sem ut lacinia posuere. Integer pulvinar nulla lorem, ut pulvinar ipsum egestas at. Duis quam ipsum, posuere ac pulvinar vitae, auctor non leo.
\end{env}

\section*{Seconde case: the last line is full}

\begin{env}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque suscipit vitae neque eu gravida. Quisque et enim quam. Integer elementum diam a ex laoreet, ac egestas lacus volutpat. Nunc ullamcorper non urna tincidunt ultrices. Etiam eu ultricies diam. Proin mollis, nunc sit amet volutpat varius, ipsum tellus bibendum nulla, in eleifend lacus felis pellentesque nisl. Phasellus laoreet, libero quis auctor congue, nulla nulla aliquam metus, in hendrerit arcu justo quis tortor. Nunc nec nisi euismod, consectetur tellus nec, suscipit libero. 
\end{env}

\end{document}
Arkandias
  • 268

1 Answers1

4

This is mostly as a result of improper use of \par to get into vertical mode, and spurious spaces in your ending clause:

enter image description here

\documentclass{article}
\newenvironment{env}{%
  ENVIRONMENT:\par
}{%
  \par\medskip
  \noindent Blablabla
}

\begin{document}

\section*{First case: the last line is not full}

\begin{env}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla malesuada porta tortor non vestibulum. Vivamus vel tincidunt purus. Curabitur quam arcu, suscipit sed diam sed, ornare efficitur felis. Duis at arcu iaculis, viverra ligula sit amet, hendrerit eros. Proin finibus venenatis sollicitudin. Nunc ullamcorper sem ut lacinia posuere. Integer pulvinar nulla lorem, ut pulvinar ipsum egestas at. Duis quam ipsum, posuere ac pulvinar vitae, auctor non leo.
\end{env}

\section*{Seconde case: the last line is full}

\begin{env}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque suscipit vitae neque eu gravida. Quisque et enim quam. Integer elementum diam a ex laoreet, ac egestas lacus volutpat. Nunc ullamcorper non urna tincidunt ultrices. Etiam eu ultricies diam. Proin mollis, nunc sit amet volutpat varius, ipsum tellus bibendum nulla, in eleifend lacus felis pellentesque nisl. Phasellus laoreet, libero quis auctor congue, nulla nulla aliquam metus, in hendrerit arcu justo quis tortor. Nunc nec nisi euismod, consectetur tellus nec, suscipit libero. 
\end{env}

\end{document}

Rather use \par\medskip and possibly insert % where appropriate.

Without rigorous testing you may want to actually issue \unskip\par\medskip. And, depending on what happens with/after Blablabla, another % might be of use.

Werner
  • 603,163
  • You need another % after “Blablabla”. – Manuel Nov 29 '14 at 02:41
  • This \par / \medskip order problem is very tricky! Thanks for your answer! – Arkandias Nov 29 '14 at 03:16
  • @Arkandias: \par puts TeX into vertical mode, and \medskip is a vertical skip, so it only acts once in vertical mode, hence the given order. Using \medskip\par is therefore not appropriate. – Werner Nov 29 '14 at 03:17