1

We continue Semantics of negative glues here, however, with more concrete values instead of fill. I've just discovered an earlier code

\vspace{-.56\baselineskip plus.1\baselineskip minus-.1\baselineskip}

of myself inside a macro. I left no meaningful comment earlier, and now I'm wondering what does minus-.1\baselineskip mean? Is "-" after "minus" a typo or does it have some meaning? I guess, my command above takes some vertical gap away (by default, .56\baselineskip) such that regardless of stretching or shrinking between .46\baselineskip and .56\baselineskip is removed, which makes no sense: a typical wish of a typesetter would be that for shrinking more should be removed, and for stretching less should be removed; please correct me if I'm wrong.

I also see that IEEEtran.cls V1.8b has similar lines, e.g.

 \def\subsection{\@startsection{subsection}{2}{\z@}{-3.5ex plus -1.5ex minus -1.5ex}{0.7ex plus .5ex minus 0ex}{\normalfont\normalsize\sffamily\bfseries}}

The fourth argument of \@startsection, namely, -3.5ex plus -1.5ex minus -1.5ex, is strange. A comment inside IEEEtran.cls says "absolute value used, neg indicates not to indent main text, make stretch parts negative, too!" However, I'm confused: is the absolute value of the stretch/shrink parts used or is the verbatim, negative value of the stretch/shrink parts used?

2

There are two possible answers.

the negative value in the argument to \@startsection is never used as a negative length, the length is always used as a positive value but the sign is used as a boolean flag, the signs of two length arguments control respectively whether the heading is inline or display, and whether the first paragraph is or is not indented.

Conversely if the length is used as a skip then it just has the meaning you would expect

 xxx\hspace{-2pt plus -3pt minus -4pt}xxx

places a natural width of -2pt of space, but if the white space on the line needs to be stretched this space reduces by up to -3pt (hopefully counteracted elsewhere) and conversely if the box is over full and white space needs to shrink, this space will increase by up to 4pt.

  • @user0 actually it's used quite a lot, often in conjunction with its negative space, look at the definition of \filbreak which is in plain and latex and described in the texbook – David Carlisle Feb 7 at 22:31
  • if the natural length of the argument is negative that fact is recoded as \@afterindenttrue or by setting an inline heading then the argument is negated, so the natural width is always positive by the time it is used as a length. – David Carlisle Feb 7 at 22:36
  • 1
    @user0 yes, exactly – David Carlisle Feb 7 at 22:52
  • 1
    @user0 the entire length is negated if \ifdim says it is negative, \ifdim ignores the stretch parts so \ifdim -3.5ex plus -1.5ex minus -1.5ex < 0pt is true, so the boolean flag is set and the used length is 3.5ex plus 1.5ex minus 1.5ex so you could, if you were feeling perverse use an argument with a positive natural width and negative stretch and shrink, in that case they would be used as lengths and the heading would have a well specified but quite possibly untested and unwanted behaviour – David Carlisle Feb 7 at 23:55
1

In the following example the first box has -1cm+1cm=0cm shrinking "potential" and so the box is overfull. The second box has 1cm+1cm=2cm shrinkin potential:

\documentclass{article}


\begin{document}

\hbox to 3cm{%
\rule{1cm}{1pt}\hspace{1cm minus -1cm}\rule{1cm}{1pt}\hspace{1cm minus 1cm}\rule{1cm}{1pt}}

\hbox to 3cm{%
\rule{1cm}{1pt}\hspace{1cm minus 1cm}\rule{1cm}{1pt}\hspace{1cm minus 1cm}\rule{1cm}{1pt}}


\end{document} 

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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