Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

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.

share|improve this question
    
Welcome to tex.sx! It's not necessary to begin your questions with a greeting. –  lockstep Mar 29 '11 at 11:15
    
@lockstep: Thanks for the hint. –  roesslerj Mar 29 '11 at 13:41

1 Answer 1

up vote 5 down vote accepted

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
share|improve this answer
    
Thanks for this really helpful answer. This is almost the solution, but simply setting \parskip to 0pt makes the text start within the heading of the section, because they rely on this when setting a \vspace{-10.5pt}. But your explanation is really helpful and made it easy to come up with the solution to my problem. Thank you very much! –  roesslerj Mar 29 '11 at 13:46
    
@roesslerj: I'm glad it helped! As I didn't actually try out my suggestions (for which I feel a bit guilty!) then I'm not surprised to hear that there were extra issues; so well done for fixing them yourself. –  Loop Space Mar 29 '11 at 19:27

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.