[Tex/LaTex] Package parskip to add more (or remove) vertical space

parskipspacing

If you want vertical space between your paragraphs and no indentation, then as I have seen, the best solution is to use the parskip package. But in the documentation that package has no options, so how do you change that vertical space if you want to add more or less of it?

Best Answer

Here, I take parskip.sty, rename it as myparskip.sty and make the following changes:

1) change to \ProvidesPackage{myparskip}

2) change

\parskip=0.5\baselineskip \advance\parskip by 0pt plus 2pt

to

\ifdim\parskip>0pt\relax
  \advance\parskip by 0pt plus 2pt
\else
  \parskip=0.5\baselineskip \advance\parskip by 0pt plus 2pt
\fi

This has the effect if called with a zero value of \parskip, it mimics what the parskip package would do (which is to set \parskip to a value of 0.5\baselineskip). On the other hand, if \parskip is specified to a non-zero value in advance of calling the package, it will take that as the new default value and do the other things the parskip package would do, such as adding glue to the \parskip dimension, and adjusting vertical dimensions associated with list making.

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{myparskip}

\ifdim\parskip>0pt\relax
  \advance\parskip by 0pt plus 2pt
\else
  \parskip=0.5\baselineskip \advance\parskip by 0pt plus 2pt
\fi
\parindent=\z@

%
% from a suggestion by Donald Arseneau on comp.text.tex:

\DeclareOption{parfill}{\setlength{\parfillskip}{30\p@ \@plus 1fil}}
\ProcessOptions

% To accompany this, the vertical spacing in the list environments is changed
% to use the same as \parskip in all relevant places (for normalsize only):
%   \parsep = \parskip
%   \itemsep = \z@ % add nothing to \parskip between items
%   \topsep = \z@ % add nothing to \parskip before first item

\def\@listI{\leftmargin\leftmargini
   \topsep\z@ \parsep\parskip \itemsep\z@}
\let\@listi\@listI
\@listi

\def\@listii{\leftmargin\leftmarginii
   \labelwidth\leftmarginii\advance\labelwidth-\labelsep
   \topsep\z@ \parsep\parskip \itemsep\z@}

\def\@listiii{\leftmargin\leftmarginiii
    \labelwidth\leftmarginiii\advance\labelwidth-\labelsep
    \topsep\z@ \parsep\parskip \itemsep\z@}

% and, now...
%   \partopsep = \z@ % don't even add anything before first item (beyond 
%                    % \parskip) even if the list is preceded by a blank line
\partopsep=\z@

% Note that listiv, listv and listvi don't change vertical parameters.

% deal with a problem raised on comp.text.tex in april 2001
%
% don't expand the table of contents any further
%
% first: check that the definition of \@starttoc is unchanged from
% that in latex.ltx
\@ifundefined{CheckCommand}{}{%
  \CheckCommand*{\@starttoc}[1]{%
    \begingroup
      \makeatletter
      \@input{\jobname.#1}%
      \if@filesw
        \expandafter\newwrite\csname tf@#1\endcsname
        \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
      \fi
      \@nobreakfalse
    \endgroup}}
%
% now having generated any warning that might help, redefine
\renewcommand*{\@starttoc}[1]{%
  \begingroup
    \makeatletter
    \parskip\z@
    \@input{\jobname.#1}%
    \if@filesw
      \expandafter\newwrite\csname tf@#1\endcsname
      \immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
    \fi
    \@nobreakfalse
  \endgroup
}

\endinput

Consider this MWE, which gives the default parskip package behavior:

\documentclass{article}
\usepackage{lipsum}
%\parskip\baselineskip
\usepackage{myparskip}
\begin{document}
\lipsum[1]
\begin{itemize}
\item the first
\item the second
\item the third
\end{itemize}
\lipsum[2-6]
\end{document}

enter image description here

When the \parskip value is set in advance (uncomment the one line in the preamble), it affects the paragraph and list-making spacing both:

enter image description here