Spaces

LaTeX has many ways to produce white (or filled) space. Some of these are best suited to mathematical text; see Spacing in math mode. Some spacing commands are suitable for both regular text and mathematical text; versions of some of these commands are in this chapter.


\enspace & \quad & \qquad

Synopsis, one of:

\enspace
\quad
\qquad

Insert a horizontal space of 1/2em, 1em, or 2em. The em is a length defined by a font designer, often thought of as being the width of a capital M. One advantage of describing space in ems is that it can be more portable across documents than an absolute measurement such as points (see Lengths/em).

This puts a suitable gap between two graphics.

\begin{center}
  \includegraphics{womensmile.png}%
  \qquad\includegraphics{mensmile.png}
\end{center}

See Spacing in math mode for \quad and \qquad. These are lengths from centuries of typesetting and so may be a better choice in many circumstances than arbitrary lengths, such as you get with \hspace.


\hspace

Synopsis, one of:

\hspace{length}
\hspace*{length}

Insert the horizontal space length. The length can be positive, negative, or zero; adding negative space is like backspacing. It is a rubber length, that is, it may contain a plus or minus component, or both (see Lengths). Because the space is stretchable and shrinkable, it is sometimes called glue.

This makes a line with ‘Name:’ an inch from the right margin.

\noindent\makebox[\linewidth][r]{Name:\hspace{1in}}

The *-version inserts horizontal space that non-discardable. More precisely, when TeX breaks a paragraph into lines any white space—glues and kerns—that come at a line break are discarded. The *-version avoids that (technically, it adds a non-discardable invisible item in front of the space).

In this example

\parbox{0.8\linewidth}{%
  Fill in each blank: Four \hspace*{1in} and seven years ago our
  fathers brought forth on this continent, a new \hspace*{1in},
  conceived in \hspace*{1in}, and dedicated to the proposition
  that all men are created \hspace*{1in}.}

the 1 inch blank following ‘conceived in’ falls at the start of a line. If you erase the * then LaTeX discards the blank.

Here, the \hspace separates the three graphics.

\begin{center}
  \includegraphics{lion.png}%   comment keeps out extra space
  \hspace{1cm minus 0.25cm}\includegraphics{tiger.png}%
  \hspace{1cm minus 0.25cm}\includegraphics{bear.png}
\end{center}

Because the argument to each \hspace has minus 0.25cm, each can shrink a little if the three figures are too wide. But each space won’t shrink more than 0.25cm (see Lengths).


\hfill

Synopsis:

\hfill

Produce a rubber length which has no natural space but that can stretch horizontally as far as needed (see Lengths).

This creates a one-line paragraph with ‘Name:’ on the left side of the page and ‘Quiz One’ on the right.

\noindent Name:\hfill Quiz One

The \hfill command is equivalent to \hspace{\fill} and so the space can be discarded at line breaks. To avoid that instead use \hspace*{\fill} (see \hspace).

Here the graphs are evenly spaced in the middle of the figure.

\newcommand*{\vcenteredhbox}[1]{\begin{tabular}{@{}c@{}}#1\end{tabular}}
  ...
\begin{figure}
  \hspace*{\fill}%
  \vcenteredhbox{\includegraphics{graph0.png}}%
    \hfill\vcenteredhbox{\includegraphics{graph1.png}}%
  \hspace*{\fill}%
  \caption{Comparison of two graphs} \label{fig:twographs}
\end{figure}

Note the \hspace*’s where the space could otherwise be dropped.


\hss

Synopsis:

\hss

Produce a horizontal space that is infinitely shrinkable as well as infinitely stretchable (this command is a TeX primitive). LaTeX authors should reach first for the \makebox command to get the effects of \hss (see \mbox & \makebox).

Here, the first line’s \hss makes the Z stick out to the right, overwriting the Y. In the second line the Z sticks out to the left, overwriting the X.

X\hbox to 0pt{Z\hss}Y
X\hbox to 0pt{\hss Z}Y

Without the \hss you get something like ‘Overfull \hbox (6.11111pt too wide) detected at line 20’.


\spacefactor

Synopsis:

\spacefactor=integer

Influence LaTeX’s glue stretch and shrink behavior. Most user-level documents do not use this command.

While LaTeX is laying out the material, it may stretch or shrink the gaps between words. (This space is not a character; it is called the interword glue; see \hspace). The \spacefactor command (from Plain TeX) allows you to, for instance, have the space after a period stretch more than the space after a word-ending letter.

After LaTeX places each character, or rule or other box, it sets a parameter called the space factor. If the next thing in the input is a space then this parameter affects how much stretching or shrinking can happen. A space factor that is larger than the normal value means that the glue can stretch more and shrink less. Normally, the space factor is 1000. This value is in effect following most characters, and any non-character box or math formula. But it is 3000 after a period, exclamation mark, or question mark, it is 2000 after a colon, 1500 after a semicolon, 1250 after a comma, and 0 after a right parenthesis or bracket, or closing double quote or single quote. Finally, it is 999 after a capital letter.

If the space factor f is 1000 then the glue gap will be the font’s normal space value (for Computer Modern Roman 10 point this is 3.3333 points). Otherwise, if the space factor f is greater than 2000 then TeX adds the font’s extra space value (for Computer Modern Roman 10 point this is 1.11111 points), and then the font’s normal stretch value is multiplied by f /1000 and the normal shrink value is multiplied by 1000/f (for Computer Modern Roman 10 point these are 1.66666 and 1.11111 points).

For example, consider the period ending A man's best friend is his dog. After it, TeX puts in a fixed extra space, and also allows the glue to stretch 3 times as much and shrink 1/3 as much, as the glue after friend, which does not end in a period.

The rules for space factors are even more complex because they play additional roles. In practice, there are two consequences. First, if a period or other punctuation is followed by a right parenthesis or bracket, or right single or double quote then the spacing effect of that period carries through those characters (that is, the following glue will have increased stretch and shrink). Second, if punctuation comes after a capital letter then its effect is not in place so you get an ordinary space. This second case also affects abbreviations that do not end in a capital letter (see \@).

You can only use \spacefactor in paragraph mode or LR mode (see Modes). You can see the current value with \the\spacefactor or \showthe\spacefactor.

(Comment, not really related to \spacefactor: if you get errors like ‘You can't use `\spacefactor' in vertical mode’, or ‘You can't use `\spacefactor' in math mode.’, or ‘Improper \spacefactor’ then you have probably tried to redefine an internal command. See \makeatletter & \makeatother.)


\@

Synopsis:

capital-letter\@.    

Treat a period as sentence-ending, where LaTeX would otherwise think it is part of an abbreviation. LaTeX thinks that a period ends an abbreviation if the period comes after a capital letter, and otherwise thinks the period ends the sentence. By default, in justifying a line LaTeX adjusts the space after a sentence-ending period (or a question mark, exclamation point, comma, or colon) more than it adjusts the space between words (see \spacefactor).

This example shows the two cases to remember.

The songs \textit{Red Guitar}, etc.\ are by Loudon Wainwright~III\@.

The second period ends the sentence, despite that it is preceded by a capital. We tell LaTeX that it ends the sentence by putting \@ before it. The first period ends the abbreviation ‘etc.’ but not the sentence. The backslash-space, \ , produces a mid-sentence space.

So: if you have a capital letter followed by a period that ends the sentence, then put \@ before the period. This holds even if there is an intervening right parenthesis or bracket, or right single or double quote, because the spacing effect of that period carries through those characters. For example, this

Use the \textit{Instructional Practices Guide},
(a book by the MAA)\@.

will have correct inter-sentence spacing after the period.

The \@ command is only for a text mode. If you use it outside of a text mode then you get ‘You can't use `\spacefactor' in vertical mode’ (see Modes).

Comment: the converse case is a period ending an abbreviation whose last letter is not a capital letter, and that abbreviation is not the last word in the sentence. For that case follow the period with a backslash-space, (\ ), or a tie, (~), or \@. Examples are Nat.\ Acad.\ Science, and Mr.~Bean, and (manure, etc.\@) for sale (note in the last one that the \@ comes before the closing parenthesis).


\frenchspacing

Synopsis, one of:

\frenchspacing
\nonfrenchspacing

The first declaration causes LaTeX to treat spacing between sentences in the same way as spacing between words in the middle of a sentence. The second causes spacing between sentences to stretch or shrink more (see \spacefactor); this is the default.

Some typographic traditions, including English, prefer to adjust the space between sentences (or spaces following a question mark, exclamation point, comma, or colon) more than the space between words that are in the middle of a sentence. Declaring \frenchspacing (the command is from Plain TeX) switches to the tradition that all spaces are treated equally.


\normalsfcodes

Synopsis:

\normalsfcodes

Reset the LaTeX space factor values to the default (see \spacefactor).


Backslash-space, \

This section refers to the command consisting of two characters, a backslash followed by a space. Synopsis:

\    

Produce a space. By default it produces white space of length 3.33333pt plus 1.66666pt minus 1.11111pt.

When you type one or more blanks between words, LaTeX produces white space. But that is different than an explicit space. This illustrates.

\begin{tabular}{l}
One blank: makes some space \\
Three blanks:   in a row \\
Three spaces:\ \ \ in a row \\
\end{tabular}

On the first line LaTeX puts some space after the colon. On the second line LaTeX collapses the three blanks to output one whitespace, so you end with the same space after the colon as in the first line. LaTeX would similarly collapse a blank followed by a tab, or a blank and a newline and a blank. However, the bottom line asks for three spaces so the white area is wider. That is, the backslash-space command creates a fixed amount of horizontal space. (Note that you can define a horizontal space of any width at all with \hspace; see \hspace.)

The backslash-space command has two main uses. It is often used after control sequences to keep them from gobbling the space that follows, as in \TeX\ is nice. (But using curly parentheses, as in \TeX{} is best, has the advantage of still working if the next character is a period.) The other common use is that it marks a period as ending an abbreviation instead of ending a sentence, as in So says Prof.\ Smith (see \@).

Under normal circumstances, \tab and \newline are equivalent to backslash-space, \ .


~

Synopsis:

before~after

The tie character, ~, produces a space between before and after at which the line will not be broken. By default the white space has length 3.33333pt plus 1.66666pt minus 1.11111pt (see Lengths).

Here LaTeX will not break the line between the final two words.

Thanks to Prof.~Lerman.

In addition, despite the period, LaTeX does not use the end-of-sentence spacing (see \@).

Ties prevent the end of line separation of things where that could cause confusion. But they also reduce LaTeX’s options when it breaks lines into paragraphs, so you can use too many. They are also matters of taste, sometimes alarmingly dogmatic taste, among readers. Nevertheless, here are some usage models, many of them from the TeXbook.


\thinspace & \negthinspace

Synopsis, one of:

\thinspace
\negthinspace

Produce an unbreakable and unstretchable space of 1/6em and -1/6em. These are the text mode equivalents of \, and \! (see Spacing in math mode/\thinspace). You can use \, as a synonym for \thinspace in text mode.

The \negthinspace command is used in text mode mostly for fiddling with spaces. One common use of \thinspace is as the space between nested quotes.

Killick replied, ``I heard the Captain say, `Ahoy there.'\thinspace''

Another use is that some style guides call for a \thinspace between an ellipsis and a sentence ending period (other style guides, though, think the three dots are quite enough already). Still another use is between initials, as in D.\thinspace E.\ Knuth.


\/

Synopsis:

before-character\/after-character

Insert an italic correction, a small space defined by the font designer for each character, to avoid the character colliding with whatever follows. When you use \/, LaTeX takes the correction from the font metric file, scales it by any scaling that has been applied to the font, and then inserts that much horizontal space.

Here, were it not for the \/, the before-character italic f would hit the after-character roman H

\newcommand{\companylogo}{{\it f}\/H}

because the italic letter leans far to the right.

If after-character is a period or comma then don’t insert an italic correction since those punctuation symbols have a very small height. However, with semicolons or colons as well as with normal letters, the italic correction can help.

When you use commands such as \textit or \itshape to change fonts, LaTeX will automatically insert any needed italic correction (see Font styles).

Roman characters can also have an italic correction. An example is in the name pdf\/\TeX.

There is no concept of italic correction in math mode; spacing is done in a different way.


\hrulefill & \dotfill

Synopsis, one of:

\hrulefill
\dotfill

Produce an infinite horizontal rubber length (see Lengths) that LaTeX fills with a rule (that is, a line) or with dots, instead of white space.

This outputs a line 2 inches long.

Name:~\makebox[2in]{\hrulefill}

This example, when placed between blank lines, creates a paragraph that is left and right justified and where the middle is filled with evenly spaced dots.

\noindent John Aubrey, RN \dotfill{} Melbury Lodge

To make the rule or dots go to the line’s end use \null at the start or end.

To change the rule’s thickness, copy the definition and adjust it, as here

\renewcommand{\hrulefill}{%
  \leavevmode\leaders\hrule height 1pt\hfill\kern\z@}

which changes the default thickness of 0.4pt to 1pt. Similarly, adjust the dot spacing as with

\renewcommand{\dotfill}{%
  \leavevmode\cleaders\hb@xt@1.00em{\hss .\hss }\hfill\kern\z@}

which changes the default length of 0.33em to 1.00em.

This example produces a line for a signature.

\begin{minipage}{4cm}
  \centering
  \hrulefill\\
  Signed
\end{minipage}

The line is 4cm long.


\bigskip & \medskip & \smallskip

Synopsis, one of:

\bigskip
\medskip
\smallskip

Produce an amount of vertical space, large or medium-sized or small. These commands are fragile (see \protect).

Here the skip suggests the passage of time (from The Golden Ocean by O’Brian).

Mr Saumarez would have something rude to say to him, no doubt: he
was at home again, and it was delightful.

\bigskip
``A hundred and fifty-seven miles and one third, in twenty-four hours,''
said Peter.

Each command is associated with a length defined in the document class file.

\bigskip

The same as \vspace{\bigskipamount}, ordinarily about one line space, with stretch and shrink. The default for the book and article classes is 12pt plus 4pt minus 4pt.

\medskip

The same as \vspace{\medskipamount}, ordinarily about half of a line space, with stretch and shrink. The default for the book and article classes is 6pt plus 2pt minus 2pt.

\smallskip

The same as \vspace{\smallskipamount}, ordinarily about a quarter of a line space, with stretch and shrink. The default for the book and article classes is 3pt plus 1pt minus 1pt.

Because each command is a \vspace, if you use on in mid-paragraph then it will insert its vertical space between the line in which you use it and the next line, not necessarily at the place that you use it. So these are best between paragraphs.

The commands \bigbreak, \medbreak, and \smallbreak are similar but also suggest to LaTeX that this is a good place to put a page break (see \bigbreak & \medbreak & \smallbreak.


\bigbreak & \medbreak & \smallbreak

Synopsis, one of:

\bigbreak
\medbreak
\smallbreak

Produce a vertical space that is big or medium-sized or small, and suggest to LaTeX that this is a good place to break the page. (The associated penalties are -200, -100, and -50.)

See \bigskip & \medskip & \smallskip, for more. These commands produce the same vertical space but differ in that they also remove a preceding vertical space if it is less than what they would insert (as with \addvspace). In addition, they terminate a paragraph where they are used: this example

abc\bigbreak def ghi

jkl mno pqr

will output three paragraphs, the first ending in ‘abc’ and the second starting, after an extra vertical space and a paragraph indent, with ‘def’.


\strut

Synopsis:

\strut

Ensure that the current line has height at least 0.7\baselineskip and depth at least 0.3\baselineskip. Essentially, LaTeX inserts into the line a rectangle having zero width, \rule[-0.3\baselineskip]{0pt}{\baselineskip} (see \rule). The \baselineskip changes with the current font and fontsize.

In this example the \strut keeps the box inside the frame from having zero height.

\setlength{\fboxsep}{0pt}\framebox[2in]{\strut}

This example has four lists. In the first there is a much bigger gap between items 2 and 3 than there is between items 1 and 2. The second list fixes that with a \strut at the end of its first item’s second line.

\setlength{\fboxsep}{0pt}
\noindent\begin{minipage}[t]{0.2\linewidth}
\begin{enumerate}
  \item \parbox[t]{15pt}{test \\ test}
  \item test
  \item test
\end{enumerate}
\end{minipage}%
\begin{minipage}[t]{0.2\linewidth}
\begin{enumerate}
  \item \parbox[t]{15pt}{test \\ test\strut}
  \item test
  \item test
\end{enumerate}
\end{minipage}%
\begin{minipage}[t]{0.2\linewidth}
\begin{enumerate}
  \item \fbox{\parbox[t]{15pt}{test \\ test}}
  \item \fbox{test}
  \item \fbox{test}
\end{enumerate}
\end{minipage}%
\begin{minipage}[t]{0.2\linewidth}
\begin{enumerate}
  \item \fbox{\parbox[t]{15pt}{test \\ test\strut}}
  \item \fbox{test}
  \item \fbox{test}
\end{enumerate}
\end{minipage}%

The final two lists use \fbox to show what’s happening. The third list’s \parbox goes only to the bottom of its second ‘test’, which happens not have any characters that descend below the baseline. The fourth list adds the strut that gives the needed extra below-baseline space.

The \strut command is often useful in graphics, such as in TikZ or Asymptote. For instance, you may have a command such as \graphnode{node-name} that fits a circle around node-name. However, unless you are careful the node-name’s ‘x’ and ‘y’ will produce different-diameter circles because the characters are different sizes. A careful \graphnode might insert a \strut, then node-name, and then draw the circle.

The general approach of using a zero width \rule is useful in many circumstances. In this table, the zero-width rule keeps the top of the first integral from hitting the \hline. Similarly, the second rule keeps the second integral from hitting the first.

\begin{tabular}{rl}
  \textsc{Integral}   &\textsc{Value}           \\
  \hline
  $\int_0^x t\, dt$   &$x^2/2$  \rule{0em}{2.5ex} \\  
  $\int_0^x t^2\, dt$ &$x^3/3$  \rule{0em}{2.5ex}
\end{tabular}

(Although the line-ending double backslash command has an available optional argument to put in more vertical room, that won’t work here. Changing the first double backslash to something like \\[2.5ex] will put the room between the header line and the \hline, and the integral would still hit the line.)


\vspace

Synopsis, one of:

\vspace{length}
\vspace*{length}

Add the vertical space length. The length can be positive, negative, or zero. It is a rubber length—it may contain a plus or minus component (see Lengths).

This puts space between the two paragraphs.

And I slept.

\vspace{1ex plus 0.5ex}
The new day dawned cold.

(See \bigskip & \medskip & \smallskip for common inter-paragraph spaces.)

The *-version inserts vertical space that non-discardable. More precisely, LaTeX discards vertical space at a page break and the *-version causes the space to stay. This example leaves space between the two questions.

Question: Find the integral of \( 5x^4+5 \).

\vspace*{2cm plus 0.5cm}
Question: Find the derivative of \( x^5+5x+9 \).

That space will be present even if the page break happens to fall between the questions.

If you use \vspace in the middle of a paragraph (i.e., in horizontal mode) then the space is inserted after the line containing the \vspace command; it does not start a new paragraph at the \vspace command.

In this example the two questions will be evenly spaced vertically on the page, with at least one inch of space below each.

\begin{document}
1) Who put the bomp in the bomp bah bomp bah bomp?
\vspace{1in plus 1fill}

2) Who put the ram in the rama lama ding dong?
\vspace{1in plus 1fill}
\end{document}

\vfill

Synopsis:

\vfill

End the current paragraph and insert a vertical rubber length that is infinite, so it can stretch or shrink as far as needed (see Lengths).

It is often used in the same way as \vspace{\fill}, except that \vfill ends the current paragraph whereas \vspace{\fill} adds the infinite vertical space below its line, irrespective of the paragraph structure. In both cases that space will disappear at a page boundary; to circumvent this see the starred option in \vspace.

In this example the page is filled, so the top and bottom lines contain the text ‘Lost Dog!’ and the second ‘Lost Dog!’ is exactly halfway between them.

\begin{document}
Lost Dog!
\vfill
Lost Dog!  % perfectly in the middle
\vfill
Lost Dog!
\end{document}

\addvspace

Synopsis:

\addvspace{vert-length}

Add a vertical space of vert-length. However, if there are two or more \addvspace’s in a sequence then together they only add the space needed to make the natural length equal to the maximum of the vert-length’s in that sequence. This command is fragile (see \protect). The vert-length is a rubber length (see Lengths).

This example illustrates. The picture draws a scale. In a standard LaTeX article the length \baselineskip is 12pt. The two rules here are 22pt apart: the sum of the \baselineskip and the 10pt from the first addvspace.

\documentclass{article}
\usepackage{color}
\begin{document}
\setlength{\unitlength}{2pt}%
\noindent\begin{picture}(0,0)%
  \multiput(0,0)(0,-1){25}{{\color{blue}\line(1,0){1}}}
  \multiput(0,0)(0,-5){6}{{\color{red}\line(1,0){2}}}
\end{picture}%
\rule{0.25\linewidth}{0.1pt}% 
\par\addvspace{10pt}% \addvspace{20pt}%
\par\noindent\rule{0.25\linewidth}{0.1pt}%
\end{document}

Now uncomment the second \addvspace. It does not make the gap 20pt longer; instead the gap is the sum of \baselineskip and 20pt. So \addvspace in a sense does the opposite of its name — it makes sure that multiple vertical spaces do not accumulate, but instead that only the largest one is used.

LaTeX uses this command to adjust the vertical space above or below an environment that starts a new paragraph. For instance, a theorem environment begins and ends with \addvspace so that two consecutive theorem’s are separated by one vertical space, not two.

A error ‘Something's wrong--perhaps a missing \item’ pointing to an \addvspace means that you were not in vertical mode when you hit this command. One way to change that is to precede \addvspace with a \par command (see \par), as in the above example.