[Tex/LaTex] Remove/Reduce vertical space between paragraphs for acm_proc_article-sp

paragraphsparskipspacing

I need to use a certain document class (acm_proc_article-sp) that introduces vertical space between paragraphs. I want to remove or at least reduce that space, which I am unable to.

Here is a minimal file to reproduce the problem:

\documentclass{acm_proc_article-sp}

\begin{document}

\section{Introduction}

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer lobortis sagittis  libero, et mattis arcu vehicula at. Morbi a hendrerit diam. Quisque quis rhoncus mauris. 

Nulla tempor molestie aliquet. Nulla quis sapien sapien, non egestas dui. Phasellus consectetur blandit orci, ut viverra urna dapibus sit amet. 

\end{document}

Now I tried to change the vertical space by using \partopsep, \parskip and also tried using the package parskip. No change at all.

I know this is a very specific question as it is related probably to this document class only, yet being relatively new to LaTeX I have no ideas where to go from here. Any help is highly appreciated.

Best Answer

I found a copy of the relevant class file here; assuming that this is the same as the one that you are using, the culprit is the following comment:

\parskip 0pt        % Extra vertical space between paragraphs.
                    % Set to 0pt outside sections, to keep section heads
                    % uniformly spaced.  The value of parskip is set
                    % to leading value _within_ sections.
                    % 12 Jan 2000 gkmt

Sure enough, looking further down in the document we find that in the definition of the section commands, \parskip gets reset. For example:

\def\@ssect#1#2#3#4#5{%
  \@tempskipa #3\relax
  \ifdim \@tempskipa>\z@
    \begingroup
      #4{%
        \@hangfrom{\hskip #1}%
          \interlinepenalty \@M #5\@@par}%
    \endgroup
  \else
    \def\@svsechd{#4{\hskip #1\relax #5}}%
  \fi
  \vskip -10.5pt  %gkmt, 7 jan 00 -- had been -14pt, now set to parskip
  \@xsect{#3}\parskip=10.5pt} % within the starred section, parskip = leading 12 Jan 2000 gkmt

That innocuous \parskip=10.5pt at the end means that every time a \section, \subsection, \subsubsection, or \paragraph command is used then \parskip gets reset to 10.5pt. (The command \@sect has the same ending.)

So to reduce \parskip, you need to reduce it each time that you start a section or otherwise. Depending on your needs, a variety of strategies are possible. The simplest would be to have a copy of the class file in the same directory as the TeX file and simply edit out that extra \parskip=10.5pt (actually, edit out both of them: one from \@ssect and one from \@sect). If you need to leave the class file pristine for some reason, then you can redefine these commands in your preamble. The simplest would be to simply copy out the definitions from the class file with the appropriate modifications to \parskip. If you do this, then the copied definitions need to be sandwiched between \makeatletter ... \makeatother.

If you want to be a bit more fancy, you could have the \section commands remember what \parskip is when they are called, then reset it at the end. This would involve hacking three commands from the class file, since the command \@startsection also messes with \parskip. So it would be something like (not tested!):

\makeatletter
\let\orig@startsection=\@startsection
\let\orig@ssect=\@ssect
\let\orig@sect=\@sect
\newskip\orig@parskip
\orig@parskip\parskip % just for safety's sake!

\def\@startsection{%
 \orig@parskip\parskip%
 \orig@startsection}

\def\@ssect#1#2#3#4#5{%
 \orig@ssect{#1}{#2}{#3}{#4}{#5}%
 \parskip\orig@parskip}

\def\@sect#1#2#3#4#5#6[#7]#8{%
 \orig@sect{#1}{#2}{#3}{#4}{#5}{#6}[#7]{#8}%
 \parskip\orig@parskip}

\makeatother