% $Id: faq-wdidt.tex,v 1.24 2014/01/22 17:29:03 rf10 Exp $

\section{Why does it \emph{do} that?}

\subsection{Common errors}

\Question[Q-crossref]{\LaTeX{} gets cross-references wrong}

Sometimes, however many times you run \LaTeX{}, the cross-references
are just wrong.  A likely reason is that you have placed the label
before the data for the label was set; if the label is recording a
\csx{caption} command, the \csx{label} command must appear
\emph{after} the \csx{caption} command, or be part of it. For example:
\begin{quote}
\begin{verbatim}
\begin{figure}
  <the illustration itself>
  \caption{My figure}
  \label{myfig}
\end{figure}
\end{verbatim}
\end{quote}
is correct, as is
\begin{quote}
\begin{verbatim}
\begin{figure}
  <the illustration itself>
  \caption{My figure%
    \label{myfig}}
\end{figure}
\end{verbatim}
\end{quote}
whereas, in
\begin{quote}
\begin{verbatim}
\begin{figure}
  <the illustration itself>
  \label{myfig}
  \caption{My figure}
\end{figure}
\end{verbatim}
\end{quote}
the label will report the number of the section (or whatever) in which
the surrounding text resides, or the like.

You can, with the same malign effect, shield the \csx{caption} command
from its associated \csx{label} command, by enclosing the caption in an
environment of its own.  This effect will be seen with:
\begin{quote}
\begin{verbatim}
\begin{figure}
  <the illustration itself>
  \caption{A Figure}
\end{figure}
\label{myfig}
\end{verbatim}
\end{quote}
where the \csx{label} definitely \emph{is} after the \csx{caption},
but because the \environment{figure} environment closed before the
\csx{label} command, the \csx{caption} is no longer ``visible''.

In summary, the \csx{label} must be \emph{after} the command that
defines it (e.g., \csx{caption}), and if the \csx{caption} is inside
an environment, the \csx{label} must be in there too.
\LastEdit{2012-02-07}

\Question[Q-newlineargs]{Start of line goes awry}
\keywords{asterisk square bracket start line}

This answer concerns two sorts of problems: errors of the form
\begin{quote}
\begin{verbatim}
! Missing number, treated as zero.
<to be read again> 
                   p
<*> [perhaps]
\end{verbatim}
\end{quote}
and errors where a single asterisk at the start of a line mysteriously
fails to appear in the typeset output.

Both problems arise because \texttt{\bsbs } takes optional arguments.  The
command \texttt{\bsbs *} means ``break the line here, and inhibit page break
following the line break''; the command \texttt{\bsbs [}\meta{dimen}\texttt{]}
means ``break the line here and add \meta{dimen} extra vertical space
afterwards''.

The problem arises because \texttt{\bsbs } looks for the next
non-blank thing; the test it uses ignores the end of the line in
your input text, so that \texttt{\bsbs } comes to imagine that you
were giving it a `modifier'.

An obvious solution is to enclose the stuff at the start of the new
line in braces, typing:
\begin{quote}
\begin{verbatim}
{\ttfamily
  /* C-language comment\\
  {[perhaps]} this could be done better\\
  {*}/
}
\end{verbatim}
\end{quote}
This particular example could be coded (without any problems) in
verbatim, but the behaviour does confuse people.

The problem also appears in maths mode, in arrays and so on.  In this
case, large-scale bracketing of things is \emph{not} a good idea; the
\TeX{} primitive \csx{relax} (which does nothing except to block
searches of this nature) may be used.  From another
\Newsgroup{comp.text.tex} example:
\begin{quote}
\begin{verbatim}
\begin{eqnarray}
  [a] &=& b \\
  \relax[a] &=& b
\end{eqnarray}
\end{verbatim}
\end{quote}
which is a usage this \acro{FAQ} would not recommend, anyway: refer
to the \Qref*{reason not to use \environment{eqnarray}}{Q-eqnarray}.

Note that the \Package{amsmath} package modifies the behaviour of
\texttt{\bsbs } in maths.  With \Package{amsmath}, the
\environment{eqnarray} example doesn't need any special action
(\csx{relax} or braces).
\LastEdit{2012-09-02}

\Question[Q-verbwithin]{Why doesn't verbatim work within\,\dots{}?}

The \LaTeX{} verbatim commands work by changing category codes.  Knuth
says of this sort of thing ``Some care is needed to get the timing
right\dots{}'', since once the category code has been assigned to a
character, it doesn't change.  So \csx{verb} and
\cmdinvoke{begin}{verbatim} have to assume that they are getting the
first look at the parameter text; if they aren't, \TeX{} has already
assigned category codes so that the verbatim command doesn't have a
chance.  For example:
\begin{quote}
\begin{verbatim}
\verb+\error+
\end{verbatim}
\end{quote}
will work (typesetting `\csx{error}'), but if we define no more than a
no-op macro,
\begin{quote}
\begin{verbatim}
\newcommand{\unbrace}[1]{#1}
\end{verbatim}
\end{quote}
which simply regurgitates its argument, and use it as:
\begin{quote}
\begin{verbatim}
\unbrace{\verb+\error+}
\end{verbatim}
\end{quote}
the combinartion will not (it will attempt to execute \csx{error}).
Other errors one
may encounter are `\csx{verb} ended by end of line', or even the
rather more helpful `\csx{verb} illegal in command argument'.  The
same sorts of thing happen with \cmdinvoke{begin}{verbatim} \dots{}
\cmdinvoke{end}{verbatim}:
\begin{quote}
\begin{quoteverbatim}
\ifthenelse{\boolean{foo}}{%
\begin{verbatim}
foobar
\end{verbatim}
}{%
\begin{verbatim}
barfoo
\end{verbatim}
}
\end{quoteverbatim}
\end{quote}
provokes errors like `File ended while scanning use of
\csx{@xverbatim}', as \cmdinvoke{begin}{verbatim} fails to see its
matching \cmdinvoke{end}{verbatim}.

This is why the \LaTeX{} book insists that verbatim
commands must not appear in the argument of any other command; they
aren't just fragile, they're quite unusable in any ``normal'' command
parameter, 
regardless of \Qref*{\csx{protect}ion}{Q-protect}.  (The \csx{verb}
command tries hard to detect if you're misusing it; unfortunately, it
can't always do so, and the error message is therefore not reliable as an
indication of problems.)

The first question to ask yourself is: ``is \csx{verb} actually
necessary?''.
\begin{itemize}
\item If \cmdinvoke{texttt}{\emph{your text}} produces the same result
  as \csx{verb}\texttt{+\emph{your text}+}, then there's no need of
  \csx{verb} in the first place.
\item If you're using \csx{verb} to typeset a \acro{URL} or email
  address or the like, then the \csx{url} command from the
  \Package{url} will help: it doesn't suffer from all the problems of
  \csx{verb}, though it's still not robust; % ! line break
  ``\Qref*{typesetting \acro{URL}s}{Q-setURL}'' offers advice here.
\item If you're putting \csx{verb} into the argument of a boxing
  command (such as \csx{fbox}), consider using the \environment{lrbox}
  environment:
\begin{quote}
\begin{verbatim}
\newsavebox{\mybox}
...
\begin{lrbox}{\mybox}
  \verb!VerbatimStuff!
\end{lrbox}
\fbox{\usebox{\mybox}}
\end{verbatim}
\end{quote}
\end{itemize}

If you can't avoid verbatim, the \csx{cprotect} command (from the
package \Package{cprotect}) might help.  The package manages to make a
macro read a verbatim argument in a ``sanitised'' way by the simple
medium of prefixing the macro with \csx{cprotect}:
\begin{quote}
\begin{verbatim}
\cprotect\section{Using \verb|verbatim|}
\end{verbatim}
\end{quote}
The package \emph{does} work in this simple case, and deserves
consideration in many others cases; the package documentation gives
more details.

Another way out is to use one of ``argument types'' of the
\csx{NewDocumentCommand} command in the experimental \latex{}3 package
\Package{xparse}:
\begin{quote}
\begin{verbatim}
\NewDocumentCommand\cmd{ m v m }{#1 `#2' #3}
\cmd{Command }|\furble|{ isn't defined}
\end{verbatim}
\end{quote}
Which gives us:
\begin{quote}
  Command \csx{furble} isn't defined
\end{quote}
The ``\texttt{m}'' tag argument specifies a normal mandatory argument,
and the ``\texttt{v}'' specifies one of these verbatim arguments.
As you see, it's implanting a \csx{verb}-style command argument in the
argument sequence of an otherwise ``normal'' sort of command; that
\begin{typesetversion}
  `\texttt{\char`\|}'
\end{typesetversion}
\begin{htmlversion}
  `\texttt{|}' % | balance for emacs text-colouring
\end{htmlversion}
may be any old character that doesn't
conflict with the content of the argument.

This is pretty neat (even if the verbatim is in an argument of its
own) but the downside is that \Package{xparse} pulls in
the experimental \latex{}3 programming environment
(\Package{l3kernel}) which is pretty big.

Other than the \Package{cprotect} package, there are four partial
solutions to the problem:
\begin{itemize}
\item Some packages have macros which are designed to be responsive
  to verbatim text in their arguments.  For example,
  the \Package{fancyvrb} package defines a command
  \csx{VerbatimFootnotes}, which redefines the \csx{footnotetext}
  command, and hence also the behaviour of the \csx{footnote})
  command, in such a way that you can include \csx{verb} commands in
  its argument.  This approach could in principle be extended to the
  arguments of other commands, but it can clash with other packages:
  for example, \csx{VerbatimFootnotes} interacts poorly with the
  \pkgoption{para} option of the \Package{footmisc} package.

  The \Class{memoir} class defines its \csx{footnote} command so that
  it will accept verbatim in its arguments, without any supporting package.
\item The \Package{fancyvrb} package defines a command \csx{SaveVerb},
  with a corresponding \csx{UseVerb} command, that allow you to save
  and then to reuse the content of its argument; for details of this
  extremely powerful facility, see the package documentation.

  Rather simpler is the \Package{verbdef} package, whose \csx{verbdef}
  command defines a (robust) command which expands to the verbatim
  argument given; the \Package{newverbs} package provides a similar
  function as well as several related ones.
\item In a similar vein, the \Package{verbatimbox} package makes it
  possible to put verbatim material in a box:
  \begin{quote}
\begin{verbatim}
\begin{verbbox}
some exotic _&$ stuff
\end{verbbox}
\theverbbox
\end{verbatim}
  \end{quote}
  the operation typesets exotic stuff into an anonymous box, and its
  contents may be retrieved using the command \csx{theverbbox}.  It is
  clear that it's in the same mould as the \csx{verbdef} command
  mentioned above; the package defines other similar commands.
\item The \Package{tcolorbox} package provides a similar facility
\item If you have a single character that is giving trouble (in
  its absence you could simply use \csx{texttt}), consider using
  \csx{string}.  \cmdinvoke{texttt}{my\csx{string}\_name}
  typesets the same as 
  \csx{verb+my\_name+}, and will work in the argument of a command.  It
  won't, however, work in a moving argument, and no amount of
  \Qref*{\csx{protect}ion}{Q-protect} will make it work in
  such a case.

  A robust alternative is:
\begin{quote}
\begin{verbatim}
\chardef\us=`\_
...
\section{... \texttt{my\us name}}
\end{verbatim}
\end{quote}
  Such a definition is `naturally' robust; the construction
  ``\meta{back-tick}\csx{\meta{char}}'' may be used for any
  troublesome character (though it's plainly not necessary for things
  like percent signs for which \AllTeX{} already provides
  robust macros).

\item One may also consider putting verbatim material in an external
  file; this is somewhat more tedious, but the file may be reused
  several times within a single document.  The \Package{tcolorbox}
  permits this:
\begin{quote}
\begin{verbatim}
\begin{tcbverbatimwrite}{<file name>}
...
\end{tcbverbatimwrite}
\end{verbatim}
\end{quote}
  which (as one might guess) writes to the named file; load the saved
  contents using \cmdinvoke{input}{<file name>}

  A second environment puts your verbatim material in an (apparently)
  anonymous temporary file:
\begin{quote}
\begin{verbatim}
\begin{tcbwritetemp}{<file name>}
...
\end{tcbverbatimwrite}
\end{verbatim}
\end{quote}
  In this case, you use the anonymous file with the \csx{tcbusetemp}
  macro.  (You can change the name used for the `anonymous' file, if
  its default proves troublesome.)

  The \Package{moreverb} package provides a \csx{verbatimwrite}
  command, which doesn't provide an anonynous file.

  Macros, to achieve the same effect, are outlined in the
  documentation of the \Package{verbatim} package; the macros use the
  facilities of the package, but the user has to write a mini-package
  actually to use them.
\end{itemize}
\begin{ctanrefs}
\item[cprotect.sty]\CTANref{cprotect}
\item[fancyvrb.sty]\CTANref{fancyvrb}
\item[l3kernel \nothtml{\rmfamily}bundle]\CTANref{l3kernel}
\item[memoir.cls]\CTANref{memoir}
\item[newverbs.sty]\CTANref{newverbs}
\item[tcolorbox.sty]\CTANref{tcolorbox}
\item[url.sty]\CTANref{url}
\item[verbatim.sty]\CTANref{verbatim}
\item[verbatimbox.sty]\CTANref{verbatimbox}
\item[verbdef.sty]\CTANref{verbdef}
\item[xparse.sty]Distributed as part of \CTANref{l3packages}[xparse]
\end{ctanrefs}
\LastEdit{2013-10-21}

\Question[Q-noline]{``No line here to end''}

The error
\begin{quote}
\begin{wideversion}
\begin{verbatim}
! LaTeX Error: There's no line here to end.

See the LaTeX manual or LaTeX Companion for explanation.
\end{verbatim}
\end{wideversion}
\begin{narrowversion}
\begin{verbatim}
! LaTeX Error: There's no line here to end.

See the LaTeX manual or LaTeX Companion
...                           for explanation.
\end{verbatim}
\end{narrowversion}
\end{quote}
appears when you give \LaTeX{} a \texttt{\bsbs } command at a time
when it's not expecting it; it is a \emph{line-breaking} command, and
is confused if \latex{} isn't building a paragraph when you give the
command.  A common case is where you've decided you want the label of
a list item to be on a line of its own, and written (for example):
\begin{quote}
\begin{verbatim}
\begin{description}
\item[Very long label] \\
  Text...
\end{description}
\end{verbatim}
\end{quote}
% ridiculous coding for sanitize.pl -- careful!
% \bsbs {} is actually a rather bad command to use in this case (even if
% it worked), since it could force the `paragraph' that's made up of the
% text of the item to terminate a line which has nothing on it but the
% label.  This could lead to an ``\texttt{Underfull }\csx{hbox}'' warning message
% (usually with `infinite' badness of 10000); while this message doesn't
% do any actual harm other than slowing down your \LaTeX{} run, any
% message that doesn't convey any information distracts for no useful
% purpose.

The proper solution to the problem is to write a new sort of
\environment{description} environment, that does just what you're after.  (The
\nothtml{\emph{\LaTeX{} Companion}~--- see }% ! line wrap, and next line
\Qref[question]{\emph{\LaTeX{} Companion}}{Q-latex-books}\nothtml{~---}
offers a rather wide selection of variants of these things.)

A straightforward solution, which avoids the warning, is to write:
\begin{quote}
\begin{verbatim}
\begin{description}
\item[Very long label] \leavevmode \\
  Text...
\end{description}
\end{verbatim}
\end{quote}
which starts a paragraph before forcing a break.  The
\Package{expdlist} package provides the same functionality with its
\csx{breaklabel} command, and \Package{mdwlist} provides it via its
\csx{desclabelstyle} command.

The other common occasion for the message is when you're using the
\texttt{center} (or \environment{flushleft} or \environment{flushright})
environment, and have decided you need extra separation between lines
in the environment:
\begin{quote}
\begin{verbatim}
\begin{center}
  First (heading) line\\
  \\
  body of the centred text...
\end{center}
\end{verbatim}
\end{quote}
The solution here is plain: use the \texttt{\bsbs } command in the way it's
supposed to be used, to provide more than just a single line break
space.  \texttt{\bsbs } takes an optional argument, which specifies
how much extra space to add; the required effect in the text above can
be had by saying:
\begin{quote}
\begin{verbatim}
\begin{center}
  First (heading) line\\[\baselineskip]
  body of the centred text...
\end{center}
\end{verbatim}
\end{quote}

You \emph{can} use \csx{leavevmode}, as above:
\begin{quote}
\begin{verbatim}
\begin{center}
  First (heading) line\\
  \leavevmode\\
  body of the centred text...
\end{center}
\end{verbatim}
\end{quote}
but that is just as tiresome to type as \texttt{\bsbs } with an optional
argument, and can not be recommended.
\begin{ctanrefs}
\item[expdlist.sty]\CTANref{expdlist}
\item[mdwlist.sty]Distributed as part of \CTANref{mdwtools}[mdwlist]
\end{ctanrefs}
\LastEdit{2014-01-13}

% other instances: \[no]linebreak in vertical mode

\Question[Q-vertspacefloat]{Extra vertical space in floats}

A common complaint is that extra vertical space has crept into
\environment{figure} or \environment{table} floating environments.
More common still are users who post code that introduces this extra
space, and \emph{haven't noticed the problem}!

The trouble arises from the fact that the \environment{center}
environment (and its siblings \environment{flushleft} and
\environment{flushright}) are actually based on \LaTeX{}'s
list-handling code; and lists always separate themselves from the
material around them.  Meanwhile, there are parameters provided to
adjust the spacing between floating environments and their
surroundings; so if we have:
\begin{quote}
\begin{verbatim}
\begin{figure}
 \begin{center}
   \includegraphics{...}
   \caption{...}
 \end{center}
\end{figure}
\end{verbatim}
\end{quote}
\nothtml{\noindent}or worse still:
\begin{quote}
\begin{verbatim}
\begin{figure}
 \begin{center}
   \includegraphics{...}
 \end{center}
 \caption{...}
\end{figure}
\end{verbatim}
\end{quote}
unwarranted vertical space is going to appear.

The solution is to let the float and the objects in it position
themselves, and to use ``generic'' layout commands rather than their
list-based encapsulations.
\begin{quote}
\begin{verbatim}
\begin{figure}
  \centering
  \includegraphics{...}
  \caption{...}
\end{figure}
\end{verbatim}
\end{quote}
(which even involves less typing).

This alternative code will work with any \LaTeX{} package.  It will
not work with obsolete (pre-\LaTeXe{}) packages such as
\Package{psfig} or \Package{epsf}~--- see % beware line break
\Qref[question]{graphics inclusion}{Q-impgraph} for discussion of the
genesis of \csx{includegraphics}.
\LastEdit{2012-11-16}

\Question[Q-centre-flt]{Why is my table/figure/\dots{} not centred?}

You want a float whose contents are centred, but \latex{} ignores your
\environment{center} environment.  Most likely, you have written:
\begin{quote}
\begin{verbatim}
\begin{center}
  \begin{figure}
    ...
  \end{figure}
\end{center}
\end{verbatim}
\end{quote}
In this case, \latex{} has ``taken the \environment{figure} away'',
and will typeset it at some location it fancies (it does the same with
\environment{table}s) the only thing we can say (for sure) about the
location is that it \emph{won't} be inside that \environment{center}
environment.  As a result, the \environment{center} environment is
left with nothing to do~\dots{} except to % !line break
\Qref*{make a mess of your vertical spacing}{Q-vertspacefloat}.

The solution is the same as that outlined in % !line break
\Qref*{the same answer}{Q-vertspacefloat}, noting that all control of
an \environment{figure} or \environment{table} needs to be
inside the environment.  So the example's code should be converted to
\begin{quote}
\begin{verbatim}
\begin{figure}
  \centering
  ...
\end{figure}
\end{verbatim}
\end{quote}
(or something similar for a \environment{table}).
\LastEdit*{2013-11-19}

\Question[Q-2colfltorder]{Two-column float numbers out of order}

When \LaTeX{} can't place a float immediately, it places it on one of
several ``defer'' lists.  If another float of the same type comes
along, and the ``defer'' list for that type still has something in it,
the later float has to wait for everything earlier in the list.

Now, standard \LaTeX{} has different lists for single-column floats,
and double-column floats; this means that single-column figures can
overtake double-column figures (or vice-versa), and you observe later
figures appear in the document before early ones.  The same is true,
of course, for tables, or for any user-defined float.

The \LaTeX{} team recognise the problem, and provides a package
(\Package{fixltx2e}) to deal with it.  \Package{Fixltx2e} amalgamates
the two defer lists, so that floats don't get out of order.

For those who are still running an older \LaTeX{} distribution, the
package \Package{fix2col} should serve.  This package (also by a
member of the \LaTeX{} team) was the basis of the relevant part of
\Package{fixltx2e}.  The functionality has also been included in
\Package{dblfloatfix}, which also has code to place full-width floats
at \Qref*{\texttt{[b]} placement}{Q-2colfloat}.

Once you have loaded the package, no more remains to be done: the
whole requirement is to patch the output routine; no extra commands
are needed.
\begin{ctanrefs}
\item[dblfloatfix.sty]\CTANref{dblfloatfix}
\item[fix2col.sty]\CTANref{fix2col}
\item[fixltx2e.sty]Part of the \LaTeX{} distribution
\end{ctanrefs}

\Question[Q-tabacc]{Accents misbehave in \environment{tabbing}}

So you are constructing a \environment{tabbing} environment, and you
have the need of some diacriticised text~--- perhaps something as simple
as \cmdinvoke{'}{e}~--- and the accent disappears because it has been
interpreted as a \environment{tabbing} command, and everything goes
wrong.

This is really a rather ghastly feature of the \environment{tabbing}
environment; in order to type accented characters you need to use the
\csx{a} kludge: so \cmdinvoke{a'}{e} inside \environment{tabbing} for
\cmdinvoke{'}{e} outside, and similarly \csx{a`} for \csx{`} and \csx{a=}
for \csx{=}.  This whole procedure is of course hideous and
error-prone.

The simplest alternative is to type in an encoding that has the
diacriticised characters in it, and to use an appropriate encoding
definition file in the \Package{inputenc} package.  So for example,
type:
\begin{quote}
  \cmdinvoke{usepackage}[latin1]{inputenc}\\
  \texttt{...}\\
  \cmdinvoke{begin}{tabbing}\\
  \texttt{...}\\
  \texttt{...} \csx{>} \texttt{voil\`a} \csx{>} \texttt{...}
\end{quote}
for:
\begin{quote}
  \dots{}\quad voil\`a\quad \dots{}
\end{quote}
and the internal mechanisms of the \Package{inputenc} package will put
the right version of the accent command in there.

A witty reversal of the r\^oles is introduced by the package
\Package{Tabbing} (note the capital ``T''): it provides a
\environment{Tabbing} environment which duplicates
\environment{tabbing}, but all the single-character commands become
complicated objects.  So \environment{tabbing}'s \csx{>} becomes
\csx{TAB>}, \csx{=} becomes \csx{TAB=}, and so on.  The above trivial
example would therefore become:
\begin{quote}
\begin{verbatim}
\usepackage{Tabbing}
...
\begin{Tabbing}
  ...  ... \TAB> voil\`a \TAB> ...
\end{verbatim}
\end{quote}
\begin{ctanrefs}
\item[Tabbing.sty]\CTANref{Tabbing}
\end{ctanrefs}

\Question[Q-alreadydef]{Package reports ``command already defined''}

You load a pair of packages, and the second reports that one of the
commands it defines is already present.  For example, both the
\Package{txfonts} and \Package{amsmath} define a command \csx{iint}
(and \csx{iiint} and so on); so
\begin{quote}
\begin{verbatim}
...
\usepackage{txfonts}
\usepackage{amsmath}
\end{verbatim}
\end{quote}
produces a string of error messages of the form:
\begin{quote}
\begin{wideversion}
\begin{verbatim}
! LaTeX Error: Command \iint already defined.
               Or name \end... illegal, see p.192 of the manual.
\end{verbatim}
\end{wideversion}
\begin{narrowversion}
\begin{verbatim}
! LaTeX Error: Command \iint already
   defined.  Or name \end... illegal,
   see p.192 of the manual.
\end{verbatim}
\end{narrowversion}
\end{quote}
As a general rule, things that \Package{amsmath} defines, it defines
well; however, there is a good case for using the \Package{txfonts}
version of \csx{iint}~--- the associated \FontName{tx} fonts have a
double integral symbol that doesn't need to be ``faked'' in the way
\Package{amsmath} does.  In the case that you are loading several
symbol packages, every one of which defines the same symbol, you are
likely to experience the problem in a big way (\csx{euro} is a common
victim).

There are similar cases where one package redefines another's command,
but no error occurs because the redefining package doesn't use
\csx{newcommand}.  Often, in such a case, you only notice the change
because you assume the definition given by the first package.  The
\Package{amsmath}--\Package{txfonts} packages are just such a pair;
\Package{txfonts} doesn't provoke errors.

You may deal with the problem by saving and restoring the command.
Macro programmers may care to do this for themselves; for the rest of
us, there's the package \Package{savesym}.  The sequence:
\begin{quote}
\begin{verbatim}
\usepackage{savesym}
\usepackage{amsmath}
\savesymbol{iint}
\usepackage{txfonts}
\restoresymbol{TXF}{iint}
\end{verbatim}
\end{quote}
does the job; restoring the \Package{amsmath} version of the command,
and making the \Package{txfonts} version of the command available as
\csx{TXFiint}.

Documentation of \Package{savesym} doesn't amount to much: the only
commands are \csx{savesymbol} and \csx{restoresymbol}, as noted above.
\begin{ctanrefs}
\item[amsmath.sty]Part of \CTANref{amslatex}
\item[savesym.sty]\CTANref{savesym}
\item[txfonts.sty]Part of \CTANref{txfonts}
\end{ctanrefs}

\Question[Q-zerochap]{Why are my sections numbered 0.1\,\dots{}?}

This happens when your document is using the standard \Class{book} or
\Class{report} class (or one similar), and you've got a \csx{section}
before your first \csx{chapter}.

What happens is, that the class numbers sections as % ! line break
``\meta{chapter no}.\meta{section no}'', and until the first
\csx{chapter} has appeared, the chapter number is 0.  (If you
use\csx{chapter*}, which doesn't number the chapter it produces, the
problem still arises.)

If you're doing this, it's possible that the \Class{article} class
is for you; try it and see.  Otherwise, put a \csx{chapter} before
your sections, or do away with section numbering by using
\csx{section*} instead.  An alternative way of avoiding numbering is
discussed in % ! line break
``\Qref*{unnumbered sections in the table of contents}{Q-secnumdep}''.

\Question[Q-breaklinks]{Link text doesn't break at end line}
\keywords{hyperref overfull link}

When using the \Package{hyperref} package, you make a block of text
``active'' when you define a hyper-link (when the user clicks on
that text, the reader program will divert to the \emph{target} of the
link).

The \Package{hyperref} package uses a \emph{driver} (in the same way
as the \Package{graphics} package does), to determine how to implement
all that hyper-stuff.

If you use the driver for \ProgName{dvips} output (presumably you want
to distill the resulting \PS{}), limitations in the way \ProgName{dvips}
deals with the \csx{special} commands mean that \Package{hyperref}
must prevent link anchors from breaking at the end of lines.  Other
drivers (notably those for \PDFTeX{} and for \ProgName{dvipdfm}) don't
suffer from this problem.

The problem may occur in a number of different circumstances.  For a
couple of them, there are work-arounds:

First, if you have an \acro{URL} which is active (so that clicking on
it will activate your web browser to ``go to'' the \acro{URL}).  In
this case \Package{hyperref} employs the \Package{url} package to
split up the \acro{URL} (as described in % ! line break
\Qref[question]{typesetting \acro{URL}s}{Q-setURL}), but the
\ProgName{dvips} driver then suppresses the breaks.  The way out is
the \Package{breakurl} package, which modifies the \csx{url} command
to produce several smaller pieces, between each of which a line break
is permitted.  Each group of pieces, that ends up together in one
line, is converted to a single clickable link.

Second, if you have a table of contents, list of figure or tables, or
the like, \Package{hyperref} will ordinarily make the titles in the
table of contents, or captions in the lists, active.  If the title or
caption is long, it will need to break within the table, but the
\ProgName{dvips} driver will prevent that.  In this case, load
\Package{hyperref} with the option \pkgoption{linktocpage}, and only
the page number will be made active.

Otherwise, if you have a lengthy piece of text that you want active,
you have at present no simple solution: you have to rewrite your text,
or to use a different \acro{PDF} generation mechanism.
\begin{ctanrefs}
\item[breakurl.sty]\CTANref{breakurl}
\end{ctanrefs}

\Question[Q-wrongpn]{Page number is wrong at start of page}

This is a long story, whose sources are deep inside the workings of
\TeX{} itself; it all derives from the \TeX{}'s striving to generate
the best possible output.

The page number is conventionally stored in \csx{count0}; \LaTeX{}
users see this as the counter \texttt{page}, and may typeset its value
using \csx{thepage}.

The number (that is to say, \csx{count0}) is only updated when \TeX{}
actually outputs a page.  \TeX{} only even tries to do this when it
detects a hint that it may be a good thing to do.  From \TeX{}'s point
of view, the end of a paragraph is a good time to consider outputting
a page; it will output a page if it has \emph{more} than a page's
worth of material to output.  (Ensuring it always has something in
hand makes some optimisations possible.)  As a result, \csx{count0}
(\csx{thepage}) is almost always wrong in the first paragraph of a
page (the exception is where the page number has been ``forcibly''
changed, either by changing its value directly, or by breaking the
page where \TeX{} wouldn't necessarily have chosen to break).

\LaTeX{} provides a safe way of referring to the page number, by using
label references.  So, rather than writing:
\begin{quote}
\begin{verbatim}
Here is page \thepage{}.
\end{verbatim}
\end{quote}
you should write:
\begin{quote}
\begin{verbatim}
Here is page \pageref{here}\label{here}.
\end{verbatim}
\end{quote}
(note: no space between the \csx{pageref} and the \csx{label}, since
that could potentially end up as a page-break space itself, which
rather defeats the purpose of the exercise!).

\Question[Q-matchbrak]{My brackets don't match}

\AllTeX{} has a low-level mechanism for matching braces in document
text.  This means you can type something like:
\begin{quote}
\begin{verbatim}
\section{All \emph{OK} now.}
\end{verbatim}
\end{quote}
and know that the first brace (for the argument of \csx{section}) will
be matched with the last brace, and the internal pair of braces (for
the argument of \csx{emph}) will be matched with each other.  It's all
very simple.

However, \LaTeX{} has a convention of enclosing optional arguments in
brackets, as in:
\begin{quote}
\begin{verbatim}
\section[OK]{All \emph{OK} now.}
\end{verbatim}
\end{quote}
These brackets are not matched by \TeX{} mechanisms, despite the
superficial similarity of their use.  As a result,
straightforward-looking usages like:
\begin{quote}
\begin{verbatim}
\section[All [OK] now]{All \emph{OK} now.}
\end{verbatim}
\end{quote}
aren't \acro{OK} at all~--- the optional argument comes to consist of
``All [OK'', and \csx{section} takes the single character ``n'' (of
the first ``now'') as its argument.

Fortunately, \TeX{}'s scanning mechanisms helps us by accepting the
syntax ``\texttt{\{]\}}'' to `hide' the closing bracket from the
scanning mechanism that \LaTeX{} uses.  In practice, the commonest way
to use this facility is:
\begin{quote}
\begin{verbatim}
\section[All {[OK]} now]{All \emph{OK} now.}
\end{verbatim}
\end{quote}
since bracing the bracket on its own ``looks odd''.

\LaTeX{} has another argument syntax, even less regular, where the
argument is enclosed in parentheses, as in:
\begin{quote}
\begin{verbatim}
\put(1,2){foo}
\end{verbatim}
\end{quote}
(a picture environment command).

This mechanism is also prone to problems with matching closing
parentheses, but the issue seldom arises since such arguments rarely
contain text.  If it were to arise, the same solution (enclosing the
confused characters in braces) would solve the problem.

\Question[Q-pdf-fig-chars]{Characters disappear from figures in \PDFTeX{}}

You have a \acro{PDF} figure, which you want to use in your
\PDFLaTeX{} document.  When you compile the document, \PDFTeX{}
complains about ``missing glyphs'', and some (or all) of the labelling
text or symbols in the original figure is no longer visible.

What has happened is:
\begin{enumerate}
\item Your figure file (say \File{fig.pdf}) has a font \File{font.pfb}
  embedded in it.
\item \PDFTeX{} notes that it has \File{font.pfb} on disc, and loads
  that in place of the copy in \File{fig.pdf}.
\item It turns out that the copy in \File{fig.pdf} has glyphs that
  aren't in \File{font.pfb} on disc, so that you get errors while
  compiling and you see that characters are missing when you view the
  output.  (\PDFTeX{} can't know that the fonts are different, since
  they have the same name.)
\end{enumerate}
Which is all very undesirable.

\PDFTeX{} does this to keep file sizes down: suppose you have a
document that loads figures \File{fig1.pdf} and \File{fig2.pdf}; both
of those use font \File{font.pfb}.  If \PDFTeX{} takes no action,
there will be \emph{two} copies of \File{font.pfb} in the output.
(If your document also uses the font, there could be three copies.)

A real case is the \acro{URW} font \File{NimbusRomNo9L-Regu} (a clone
of Times Roman), which is available in a version with Cyrillic
letters, while the version in \TeX{} distributions doesn't have those
letters.  Both versions, as distributed, have the same name.

The simple (``quick and dirty'') solution is to add the command
\begin{quote}
  \csx{pdfinclusioncopyfonts}\texttt{=1}
\end{quote}
to the preamble of your document.

The ``real'' solution is that one or other font should be renamed.  In
either case, this would require that you reconfigure some program's
(\TeX{}'s or your drawing package's) font tables~--- inevitably a
tiresome job.

\Question[Q-emptynum]{I asked for ``empty'', but the page is numbered}

If you use \cmdinvoke{pagestyle}{empty} and you find some pages are
numbered anyway, you are probably encountering one of the style
decisions built into the standard \LaTeX{} classes: that certain
special pages should always appear with \cmdinvoke{pagestyle}{plain},
with a page number at the centre of the page foot.  The special pages
in question are those (in \Class{article} class) containing a
\csx{maketitle}, or (in \Class{book} and \Class{report} classes)
\csx{chapter} or \csx{part} commands.

The simple solution is to reissue the page style \emph{after} the
command, with effect for a single page, as, for example (in
\Class{article}):
\begin{quote}
\begin{verbatim}
\maketitle
\thispagestyle{empty}
\end{verbatim}
\end{quote}
or (in \Class{book} or \Class{report})
\begin{quote}
\begin{verbatim}
\chapter{foo bar}
\thispagestyle{empty}
\end{verbatim}
\end{quote}
A similar technique doesn't work for a \Class{book} or \Class{report}
\csx{part} command pages.  For that, and for other detail, take look
at ``\Qref*{getting rid of page numbers}{Q-nopageno}''.

\subsection{Common misunderstandings}

\Question[Q-include]{What's going on in my \csx{include} commands?}

The original \LaTeX{} provided the \csx{include} command to address the
problem of long documents: with the relatively slow computers of the
time, the companion \csx{includeonly} facility was a boon.  With the
vast increase in computer speed, \csx{includeonly} is less valuable
(though it still has its place in some very large projects).
Nevertheless, the facility is retained in current \LaTeX{}, and causes
some confusion to those who misunderstand it.

In order for \csx{includeonly} to work, \csx{include} makes a separate
\extension{aux} file for each included file, and makes a `checkpoint' of
important parameters (such as page, figure, table and footnote
numbers).  As a direct result, it \emph{must} clear the current page
both before and after the \csx{include} command.  (The requirement
derives from the difficulties of % ! line break
\begin{hyperversion}
  \Qref*{observing page numbers}{Q-wrongpn}.)
\end{hyperversion}
\begin{flatversion}
  observing page numbers~--- see \Qref{}{Q-wrongpn}.)
\end{flatversion}
What's more, this mechanism doesn't work if a \csx{include} command
appears in a file that was \csx{include}d itself: \LaTeX{} diagnoses
this as an error.

So, we can now answer the two commonest questions about \csx{include}:
\begin{itemize}
\item Why does \LaTeX{} throw a page before and after \csx{include}
  commands?

  Answer: because it has to.  If you don't like it, replace the
  \csx{include} command with \csx{input}~--- you won't be able to use
  \csx{includeonly} any more, but you probably don't need it anyway, so
  don't worry.
\begin{htmlversion}

\end{htmlversion}
\item Why can't I nest \csx{include}d files?~--- I always used to be
  able to under \LaTeXo{}.

  Answer: in fact, you couldn't, even under \LaTeXo{}, but the failure
  wasn't diagnosed.  However, since you were happy with the behaviour
  under \LaTeXo{}, replace the \csx{include} commands with \csx{input}
  commands (with \csx{clearpage} as appropriate).
\end{itemize}


\Question[Q-paraparam]{Why does it ignore paragraph parameters?}

When \TeX{} is laying out text, it doesn't work from word to word, or
from line to line; the smallest complete unit it formats is the
paragraph.  The paragraph is laid down in a buffer, as it appears, and
isn't touched further until the end-paragraph marker is processed.
It's at this point that the paragraph parameters have effect; and it's
because of this sequence that one often makes mistakes that lead to
the paragraph parameters not doing what one would have hoped (or
expected).

Consider the following sequence of \LaTeX{}:
\begin{quote}
\begin{verbatim}
{\raggedright % declaration for ragged text
Here's text to be ranged left in our output,
but it's the only such paragraph, so we now
end the group.}

Here's more that needn't be ragged...
\end{verbatim}
\end{quote}
\TeX{} will open a group, and impose the ragged-setting parameters within
that group; it will then save a couple of sentences of text and
close the group (thus restoring the previous value of the
parameters that \csx{raggedright} set).  Then \TeX{} encounters a blank
line, which it knows to treat as a \csx{par} token, so it typesets the
two sentences; but because the enclosing group has now been closed,
the parameter settings have been lost, and the paragraph will be
typeset normally.

The solution is simple: close the paragraph inside the group, so that
the setting parameters remain in place.  An appropriate way of doing
that is to replace the last three lines above with:
\begin{quote}
\begin{verbatim}
end the group.\par}
Here's more that needn't be ragged...
\end{verbatim}
\end{quote}
In this way, the paragraph is completed while \csx{raggedright}'s
parameters are still in force within the enclosing group.

Another alternative is to define an environment that does the
appropriate job for you.  For the above example, \LaTeX{} already
defines an appropriate one:
\begin{quote}
\begin{verbatim}
\begin{flushleft}
Here's text to be ranged left...
\end{flushleft}
\end{verbatim}
\end{quote}

In fact, there are a number of parameters for which \TeX{} only
maintains one value per paragraph.  A tiresome one is the set of upper
case/lower case translations, which (oddly enough) constrains
hyphenation of mutilingual texts.  Another that regularly creates
confusion is \Qref*{\csx{baselineskip}}{Q-baselinepar}.

\Question[Q-casechange]{Case-changing oddities}

\TeX{} provides two primitive commands \csx{uppercase} and
\csx{lowercase} to change the case of text; they're not much used, but
are capable creating confusion.

The two commands do not expand the text that is their parameter~---
the result of \cmdinvoke{uppercase}{abc} is `\texttt{ABC}', but
\cmdinvoke{uppercase}{\csx{abc}} is always `\csx{abc}', whatever the
meaning of \csx{abc}.  The commands are simply interpreting a table of
equivalences between upper- and lowercase characters.
They have (for example) no mathematical sense, and
\begin{quote}
\begin{verbatim}
\uppercase{About $y=f(x)$}
\end{verbatim}
\end{quote}
will produce
\begin{quote}
\begin{verbatim}
ABOUT $Y=F(X)$
\end{verbatim}
\end{quote}
which is probably not what is wanted.

In addition, \csx{uppercase} and \csx{lowercase} do not deal very well
with non-American characters, for example
\cmdinvoke{uppercase}{\csx{ae}} is the same as \csx{ae}.

\LaTeX{} provides commands \csx{MakeUppercase} and \csx{MakeLowercase}
which fixes the latter problem.  These commands are used in the
standard classes to produce upper case running heads for chapters
and sections.

Unfortunately \csx{MakeUppercase} and \csx{MakeLowercase} do not solve
the other problems with \csx{uppercase}, so for example a section
title containing \cmdinvoke{begin}{tabular} \dots{}
\cmdinvoke{end}{tabular} will produce a running head containing
\cmdinvoke{begin}{TABULAR}.  The simplest solution to this problem is
using a user-defined command, for example: 
\begin{quote}
\begin{verbatim}
\newcommand{\mytable}{\begin{tabular}...
  \end{tabular}}
\section{A section title \protect\mytable{}
  with a table}
\end{verbatim}
\end{quote}
Note that \csx{mytable} has to be protected, otherwise it will be
expanded and made upper case; you can achieve the same result by
declaring it with \csx{DeclareRobustCommand}, in which case the
\csx{protect} won't be necessary.

David Carlisle's \Package{textcase} package
addresses many of these problems in a transparent way.  It defines
commands \csx{MakeTextUppercase} and \csx{MakeTextLowercase} which do
upper- or lowercase, with the fancier features of the \LaTeX{}
standard \csx{Make*}-commands but without the problems
mentioned above.  Load the package with
\cmdinvoke{usepackage}[overload]{textcase}, and it will redefine the \LaTeX{}
commands (\emph{not} the \TeX{} primitive commands \csx{uppercase} and
\csx{lowercase}), so that section headings and the like don't produce
broken page headings.
\begin{ctanrefs}
\item[textcase.sty]\CTANref{textcase}
\end{ctanrefs}

\Question[Q-splitfoot]{Why does \LaTeX{} split footnotes across pages?}

\LaTeX{} splits footnotes when it can think of nothing better to do.
Typically, when this happens, the footnote mark is at the bottom of
the page, and the complete footnote would overfill the page.  \LaTeX{}
could try to salvage this problem by making the page short of both the
footnote and the line with the footnote mark, but its priorities told
it that splitting the footnote would be preferable.

As always, the best solution is to change your text so that the
problem doesn't occur in the first place.  Consider whether the text
that bears the footnote could move earlier in the current page, or on
to the next page.

If this isn't possible, you might want to change \LaTeX{}'s perception
of its priorities: they're controlled by
\csx{interfootnotelinepenalty}~--- the larger it is, the less willing
\LaTeX{} is to split footnotes.

Setting
\begin{quote}
\begin{verbatim}
\interfootnotelinepenalty=10000
\end{verbatim}
\end{quote}
inhibits split footnotes altogether, which will cause `\texttt{Underfull}
\csx{vbox}' messages unless you also specify \csx{raggedbottom}.  The
default value of the penalty is \texttt{100}, which is rather mild.

An alternative technique is to juggle with the actual size of the
pages.  \csx{enlargethispage} changes the size of the current page by
its argument (for example, you might say
\cmdinvoke{enlargethispage}{\csx{baselineskip}} to add a single line
to the page, but you can use any ordinary \TeX{} length such as
\texttt{15mm} or \texttt{-20pt} as argument).  Reducing the size of
the current page could force the offending text to the next page;
increasing the size of the page may allow the footnote to be included
in its entirety.  It may be necessary to change the size of more than
one page.

The \Package{fnbreak} package detects (and generates warnings about)
split footnotes.
\begin{ctanrefs}
\item[fnbreak.sty]\CTANref{fnbreak}
\end{ctanrefs}

\Question[Q-marginparside]{Getting \csx{marginpar} on the right side}

In an ideal world, marginal notes would be in ``analogous'' places on
every page: notes on an even-side page would be in the left margin,
while those on an odd-side page would be in the right margin.  A
moment's thought shows that a marginal note on the left needs to be
typeset differently from a marginal note on the right.  The \LaTeX{}
\csx{marginpar} command therefore takes two arguments in a
\texttt{twoside} documents: % beware line break
\cmdinvoke*{marginpar}[left text]{right text}.  \LaTeX{} uses the
``obvious'' test to
get the \csx{marginpar}s in the correct margin, but a booby-trap arises
because \TeX{} runs its page maker asynchronously.  If a
\csx{marginpar} is processed while page \ensuremath{n} is being built, but
doesn't get used until page \ensuremath{n}+1, then the \csx{marginpar} will turn
up on the wrong side of the page.  This is an instance of a general
problem: see
% beware line break
``\Qref*{finding if you're on an odd or an even page}{Q-oddpage}''.

The solution to the problem is for \LaTeX{} to `remember' which side
of the page each \csx{marginpar} \emph{should} be on.  The
\Package{mparhack} package does this, using label-like marks stored in
the \extension{aux} file; the \Class{memoir} class does likewise.
\begin{ctanrefs}
\item[memoir.cls]\CTANref{memoir}
\item[mparhack.sty]\CTANref{mparhack}
\end{ctanrefs}

\Question[Q-misschar]{Where have my characters gone?}

You've typed some apparently reasonable text and processed it, but the
result contains no sign of some of the characters you typed.  A likely
reason is that the font you selected just doesn't have a
representation for the character in question.

For example, if I type ``that will be \pounds{}44.00'' into an ordinary
\AllTeX{} document, or if I select the font \texttt{rsfs10} (which contains
uppercase letters only) and type pretty much anything, the \pounds{}
sign, or any lowercase letters or digits will not appear in the
output.  There's no actual error message, either: you have to read the
log file, where you'll find cryptic little messages like
\begin{quote}
\begin{wideversion}
\begin{verbatim}
Missing character: There is no ^^a3 in font cmr10!
Missing character: There is no 3 in font rsfs10!
\end{verbatim} 
\end{wideversion}
\begin{narrowversion}
\begin{verbatim}
Missing character:
           There is no ^^a3 in font cmr10!
Missing character:
             There is no 3 in font rsfs10!
\end{verbatim} 
\end{narrowversion}
\end{quote}
(the former demonstrating my \TeX{}'s unwillingness to deal in characters
which have the eighth bit set, while the \texttt{rsfs10} example shows that
\TeX{} will log the actual character in error, if it thinks it's
possible).

Somewhat more understandable are the diagnostics you may get from
\Package{dvips} when using the \acro{OT}1 and \acro{T}1 versions of
fonts that were supplied in Adobe standard encoding:
\begin{quote}
\begin{verbatim}
dvips: Warning: missing glyph `Delta'
\end{verbatim}
\end{quote}
The process that generates the metrics for using the fonts generates
an instruction to \Package{dvips} to produce these diagnostics, so
that their non-appearance in the printed output is less surprising
than it might be.  Quite a few glyphs provided in Knuth's text
encodings and in the Cork encoding are not available in the Adobe
fonts.  In these cases, there \emph{is} a typeset sign of the
character: \ProgName{dvips} produces a black rectangle of whatever
size the concocted font file has specified.

\Question[Q-rerun]{``Rerun'' messages won't go away}

The \LaTeX{} message ``Rerun to get crossreferences right'' is
supposed to warn the user that the job needs to be processed again,
since labels seem to have changed since the previous run.  (\LaTeX{}
compares the labels it has created this time round with what it found
from the previous run when it started; it does this comparison at
\cmdinvoke{end}{document}.)

Sometimes, the message won't go away: however often you reprocess your
document, \LaTeX{} still tells you that ``Label(s) may have
changed''.  This can sometimes be caused by a broken package: both
\Package{footmisc} (with the \pkgoption{perpage} option) and \Package{hyperref}
have been known to give trouble, in the past: if you are using either,
check you have the latest version, and upgrade if possible.

However, there \emph{is} a rare occasion when this error can happen
as a result of pathological structure of the document itself.  Suppose
you have pages numbered in roman, and you add a reference to a label
on page ``ix'' (9).  The presence of the reference pushes the thing
referred to onto page ``x'' (10), but since that's a shorter reference
the label moves back to page ``ix'' at the next run.  Such a sequence
can obviously not terminate.

The only solution to this problem is to make a small change to your
document (something as small as adding or deleting a comma will often
be enough).
\begin{ctanrefs}
\item[footmisc.sty]\CTANref{footmisc}
\item[hyperref.sty]\CTANref{hyperref}
\end{ctanrefs}

\Question[Q-xspace]{Commands gobble following space}

People are forever surprised that simple commands gobble the space
after them: this is just the way it is.  The effect arises from the
way \TeX{} works, and Lamport describes a solution (place a pair of braces
after a command's invocation) in the description of \LaTeX{} syntax.
Thus the requirement is in effect part of the definition of \LaTeX{}.

These \acro{FAQ}s,
for example, is written in \latex{} for production of a web site.  The
HTML code is generated by a script that \emph{requires} a pair of
braces, to make a null argument, as in:
\begin{quote}
  \cmdinvoke{fred}{\relax} % the \relax prevents {} being gobbled
                           % in html production (sigh)
                           % (we needn't tell them about _that_ ;-)
\end{quote}
for almost all macro invocations, regardless
of whether the following space is required: however, these \acro{FAQ}s
should not itself be regarded as a model of \latex{} style.

Many users find all those braces become very tedious very
quickly, and would really rather not type them all.

An alternative structure, that doesn't violate the design of \LaTeX{},
is to say \csx{fred}\csx{ }~--- the \csx{ } command is ``self
terminating'' (like \texttt{\bsbs }) and you don't need braces after
\emph{it}.  Thus one can reduce to one the number of extra characters
one needs to type.

If even that one character is too many, the package \Package{xspace}
defines a command \csx{xspace} that guesses whether there should have
been a space after it, and if so introduces that space.  So
% beware line wrap
``\texttt{fred\csx{xspace} jim}'' produces ``fred jim'', while
``\texttt{fred\csx{xspace}.\@ jim}'' produces ``fred. jim''.  Which
usage would of course be completely pointless; but you can incorporate
\csx{xspace} in your own macros:
\begin{quote}
\begin{wideversion}
\begin{verbatim}
\usepackage{xspace}
...
\newcommand{\restenergy}{\ensuremath{mc^2}\xspace}
...
and we find \restenergy available to us...
\end{verbatim}
\end{wideversion}
\begin{narrowversion}
\begin{verbatim}
\usepackage{xspace}
...
\newcommand{\restenergy}%
           {\ensuremath{mc^2}\xspace}
...
and we find \restenergy available to us...
\end{verbatim}
\end{narrowversion}
\end{quote}
The \csx{xspace} command must be the last thing in your macro
definition (as in the example); it's not completely foolproof, but it
copes with most obvious situations in running text.

The \Package{xspace} package doesn't save you anything if you use it in
a macro that appears only once or twice within your document, and it
is not totally foolproof.  (The original author of the package wrote
it because he had been bitten by lost spaces.  He no longer recommends
its use, simply because of the possibility of error.)

In any case, be
careful with usage of \csx{xspace}~--- it changes your input syntax,
which can be confusing, notably to a collaborating author
(particularly if you create some commands which use it and some which
don't).  No command built into \LaTeX{} or into any
``standard'' class or package will use \csx{xspace}.
\begin{ctanrefs}
\item[xspace.sty]Distributed as part of \CTANref{2etools}[xspace]
\end{ctanrefs}
\LastEdit{2013-11-26}

\Question[Q-overfull]{\AllTeX{} makes overfull lines}

When \TeX{} is building a paragraph, it can make several attempts to
get the line-breaking right; on each attempt it runs the same
algorithm, but gives it different parameters.  You can affect the way
\TeX{}'s line breaking works by adjusting the parameters: this answer
deals with the ``tolerance'' and stretchability parameters.  The other
vital `parameter' is the set of hyphenations to be applied: see
``\Qref*[question]{my words aren't being hyphenated}{Q-nohyph}''
(and the questions it references) for advice.

If you're getting an undesired ``overfull box'', what has happened is
that \TeX{} has given up: the parameters you gave it don't allow it to
produce a result that \emph{doesn't} overfill.  In this circumstance,
Knuth decided the best thing to do was to produce a warning, and to
allow the user to solve the problem.  (The alternative, silently to go
beyond the envelope of ``good taste'' defined for this run of \TeX{},
would be distasteful to any discerning typographer.)  The user can
almost always address the problem by rewriting the text that's
provoking the problem~--- but that's not always possible, and in some
cases it's impossible to solve the problem without adjusting the
parameters.  This answer discusses the approaches one might take to
resolution of the problem, on the assumption that you've got the
hyphenation correct.

The simplest case is where a `small' word fails to break at the end of
a line; pushing the entire word to a new line isn't going to make much
difference, but it might make things just bad enough that \TeX{} won't
do it by default.  In such a case on can \emph{try} the \LaTeX{}
\csx{linebreak} command: it may solve the problem, and if it does, it
will save an awful lot of fiddling.  Otherwise, one needs to adjust
parameters: to do that we need to recap the details of \TeX{}'s line
breaking mechanisms.

\TeX{}'s first attempt at breaking lines is performed without even
trying hyphenation: \TeX{} sets its ``tolerance'' of line breaking
oddities to the internal value \csx{pretolerance}, and sees what
happens.  If it can't get an acceptable break, \TeX{} adds the
hyphenation points allowed by the current patterns, and tries again
using the internal \csx{tolerance} value.  If this pass also fails, and
the internal \csx{emergencystretch} value is positive, \TeX{} will try
a pass that allows \csx{emergencystretch} worth of extra stretchability
to the spaces in each line.

In principle, therefore, there are three parameters (other than
hyphenation) that you can change: \csx{pretolerance}, \csx{tolerance}
and \csx{emergencystretch}.  Both the \texttt{tolerance} values are
simple numbers, and should be set by \TeX{} primitive count
assignment~--- for example
\begin{quote}
\begin{verbatim}
\pretolerance=150
\end{verbatim}
\end{quote}
For both, an ``infinite'' tolerance is represented by the value
\texttt{10}\nothtml{\,}\texttt{000}, but infinite tolerance is rarely
appropriate, since it can lead to very bad line breaks indeed.

\csx{emergencystretch} is a \TeX{}-internal `dimen' register, and can
be set as normal for dimens in \plaintex{}; in \LaTeX{}, use
\csx{setlength}~--- for example:
\begin{quote}
\begin{verbatim}
\setlength{\emergencystretch}{3em}
\end{verbatim}
\end{quote}

The choice of method has time implications~--- each of the
passes takes time, so adding a pass (by changing
\csx{emergencystretch}) is less desirable than suppressing one (by
changing \csx{pretolerance}).  However, it's unusual nowadays to find a
computer that's slow enough that the extra passes are really
troublesome.

In practice, \csx{pretolerance} is rarely used other than to manipulate
the use of hyphenation; \plaintex{} and \LaTeX{} both set its value
to \texttt{100}.  To suppress the first scan of paragraphs, set
\csx{pretolerance} to \texttt{-1}.

\csx{tolerance} is often a good method for adjusting spacing;
\plaintex{} and \LaTeX{} both set its value to \texttt{200}.  \LaTeX{}'s
\csx{sloppy} command sets it to \texttt{9999}, as does the
\environment{sloppypar} environment.  This value is the largest
available, this side of infinity, and can allow pretty poor-looking
breaks (this author rarely uses \csx{sloppy} ``bare'', though he does
occasionally use \environment{sloppypar}~--- that way, the change of
\csx{tolerance} is confined to the environment).  More satisfactory is
to make small changes to \csx{tolerance}, incrementally, and then to look to
see how the change affects the result; very small increases can often
do what's necessary.  Remember that \csx{tolerance} is a paragraph
parameter, so you need to ensure it's actually applied~--- see
``\Qref*[question]{ignoring paragraph parameters}{Q-paraparam}''.
\LaTeX{} users could use an environment like:
\begin{quote}
\begin{verbatim}
\newenvironment{tolerant}[1]{%
  \par\tolerance=#1\relax
}{%
  \par
}
\end{verbatim}
\end{quote}
enclosing entire paragraphs (or set of paragraphs) in it.

The value of \csx{emergencystretch} is added to the assumed
stretchability of each line of a paragraph, in a further run of the
paragraph formatter in case that the paragraph can't be made to look
right any other way.  (The extra scan happens if
\csx{emergencystretch\textgreater0pt}~--- if it's zero or negative, no gain
could be had from rerunning the paragraph setter.)  The example above
set it to \texttt{3em}; the Computer Modern fonts ordinarily fit three
space skips to the \texttt{em}, so the change would allow anything up
to the equivalent of nine extra spaces in each line.  In a line with
lots of spaces, this could be reasonable, but with (say) only three
spaces on the line, each could stretch to four times its natural
width.  It is therefore clear that \csx{emergencystretch} needs to be
treated with a degree of caution.

More subtle (but more tricky to manage) are the microtypographic
extensions provided by \PDFTeX{}.  Since \PDFTeX{} is the default
`engine' for \LaTeX{} and \CONTeXT{} work in all distributions,
nowadays, the extensions are available to all.  There are two
extensions, margin kerning and font expansion; margin kerning only
affects the visual effect of the typeset page, and has little effect
on the ability of the paragraph setter to ``get things right''.
Font expansion works like a subtler version of the trick that
\csx{emergencystretch} plays: \PDFTeX{} `knows' that your current font
may be stretched (or shrunk) to a certain extent, and will do that
``on the fly'' to optimise the setting of a paragraph.  This is a
powerful tool in the armoury of the typesetter.

As mentioned above, the microtypographic extensions are tricky beasts
to control; however, the \Package{microtype} package relieves the user
of the tedious work of specifying how to perform margin adjustments
and how much to scale each font~\dots{}\@ for the fonts the package
knows about; it's a good tool, and users who can take on the
specification of adjustments for yet more fonts are always welcome.
\begin{ctanrefs}
\item[microtype.sty]\CTANref{microtype}
\end{ctanrefs}

\Question[Q-exscale]{Maths symbols don't scale up}

By default, the ``large'' maths symbols stay at the same size
regardless of the font size of the text of the document.  There's good
reason for this: the \FontName{cmex} fonts aren't really designed to
scale, so that \TeX{}'s maths placement algorithms don't perform as
well as they might when the fonts are scaled.

However, this behaviour confounds user expectations, and can lead to
slightly odd-looking documents.  If you want the fonts to scale,
despite the warning above, use the \Package{exscale} package~--- just
loading it is enough.
%%
%% (Note: if you are using bitmap versions of the \FontName{cmex} fonts,
%% you will find extra bitmaps are generated.  The extended sizes are not
%% ordinarily generated for any other purpose.)
\begin{ctanrefs}
\item[exscale.sty]Part of the \LaTeX{} distribution.
\end{ctanrefs}

\Question[Q-linespread]{Why doesn't \csx{linespread} work?}

The command \cmdinvoke*{linespread}{factor} is supposed to multiply
the current \csx{baselineskip} by \meta{factor}; but, to all
appearances, it doesn't.

In fact, the command is equivalent to
\cmdinvoke{renewcommand}{\csx{baselinestretch}}{factor}: written that
way, it somehow feels less surprising that the effect isn't immediate.
The \csx{baselinestretch} factor is only used when a font is selected;
a mere change of \csx{baselinestretch} doesn't change the font, any
more than does the command
\cmdinvoke*{fontsize}{size}{baselineskip}~--- you have to follow
either command with \csx{selectfont}.  So:
\begin{quote}
\begin{verbatim}
\fontsize{10}{12}%
\selectfont
\end{verbatim}
\end{quote}
or:
\begin{quote}
\begin{verbatim}
\linespread{1.2}%
\selectfont
\end{verbatim}
\end{quote}
Of course, a package such as \Package{setspace}, whose job is to
manage the baseline, will deal with all this stuff~--- see
``\Qref*[question]{managing double-spaced documents}{Q-linespace}''.  If
you want to avoid \Package{setspace}, beware the behaviour of
linespread changes within a paragraph: read % ! line break
``\Qref*[question]{\csx{baselineskip} is a paragraph parameter}{Q-baselinepar}''.
\begin{ctanrefs}
\item[setspace.sty]\CTANref{setspace}
\end{ctanrefs}

\Question[Q-baselinepar]{Only one \csx{baselineskip} per paragraph}

The \csx{baselineskip}, which determines the space between lines, is
not (as one might hope) a property of a line, but of a paragraph.  As
a result, in a \texttt{10pt} (nominal) document (with a default
\csx{baselineskip} of \texttt{12pt}), a single character with a larger
size, as:
\begin{quote}
\begin{verbatim}
{\Huge A}
\end{verbatim}
\end{quote}
will be squashed into the paragraph: \TeX{} will make sure it doesn't
scrape up against the line above, but won't give it ``room to
breathe'', as it does the text at standard size; that is, its size
(\texttt{24.88pt}) is taken account of, but its \csx{baselineskip}
(\texttt{30pt}) isn't.  This problem may be solved by a \emph{strut}:
the name comes from movable metal typography, and refers to a spacer
that held the boxes (that contained the metal character shapes) apart.
Every time you change font size, \LaTeX{} redefines the command
\csx{strut} to provide the equivalent of a metal-type strut for the
size chosen.  So for the example above, we would type
\begin{quote}
\begin{verbatim}
Paragraph text ...
   {\Huge A\strut}
   ... paragraph continues ...
\end{verbatim}
\end{quote}
This technique \emph{only} works for such very short intrusions; if
you need several lines, you should convert your intrusion into a
\environment{quote} environment, since it's not possible to provide a
\csx{strut} command for every line of the intrusion, in a sensible
way, so proceed by:
\begin{quote}
\begin{verbatim}
\begin{quote}
  \Huge A LENGTHY TEXT ...
  SHOUTING AT THE READER!
\end{quote}
\end{verbatim}
\end{quote}

The contrary case:
\begin{quote}
\begin{verbatim}
Paragraph text ...
{\footnotesize Extended interjection ...
   ... into the paragraph.}
      ... paragraph continues ...
\end{verbatim}
\end{quote}
will look wrong, since the \texttt{8pt} interjection will
end up set on the \texttt{12pt} \csx{baselineskip} of the paragraph,
rather than its preferred \texttt{8.5pt}.  A \csx{strut} here is no
help: there is no such thing as a ``negative strut'', that draws lines
together, so once more, one falls back on the \environment{quote} to
separate the interjection:
\begin{quote}
\begin{verbatim}
Paragraph text ...
\begin{quote}
  \footnotesize Extended interjection ...
  ... into the paragraph.
\end{quote}
... paragraph continues ...
\end{verbatim}
\end{quote}

The same effect is at work when we have something like:
\begin{quote}
\begin{verbatim}
Paragraph text ...
  ... paragraph body ends.
{\footnotesize Comment on the paragraph.}

Next paragraph starts...
\end{verbatim}
\end{quote}
which will set the body of the first paragraph on the constricted
\csx{baselineskip} of the \csx{footnotesize} comment.  Solve this
problem by ending the initial paragraph before starting the comment:
\begin{quote}
\begin{verbatim}
Paragraph text ...
  ... paragraph body ends.
\par\nothtml{\noindent}
{\footnotesize Comment on the paragraph.}

Next paragraph starts...
\end{verbatim}
\end{quote}
(We suggest \csx{noindent} to make the comment look as if it is part
of the paragraph it discusses; omit \csx{noindent} if that is inappropriate.)

A variation of the previous issue arises from a paragraph whose size
is different from those around it:
\begin{quote}
\begin{verbatim}
{\Large (Extended) IMPORTANT DETAILS ...}

Main body of text...
\end{verbatim}
\end{quote}
Again, the problem is solved by ending the paragraph in the same group
as the text with a different size:
\begin{quote}
\begin{verbatim}
{\Large (Extended) IMPORTANT DETAILS ...\par}

Main body of text...
\end{verbatim}
\end{quote}

\Question[Q-tocloftwrong]{Numbers too large in table of contents, etc.}

\keywords{memoir table-of-contents spacing}
\LaTeX{} constructs the table of contents, list of figures, tables,
and similar tables, on the basis of a layout specified in the class.
As a result, they do \emph{not} react to the sizes of things in them,
as they would if a \environment{tabular} environment (or something
similar) was used.

This arrangement can provoke problems, most commonly with deep section
nesting or very large page numbers: the numbers in question just don't
fit in the space allowed for them in the class.

A separate answer discusses % ! line break
\nothtml{re-designing the tables ---} % ! line break
\Qref{re-designing the tables}{Q-tocloft}\nothtml{ ---}
and techniques from that answer may be employed to make the numbers
fit:
\begin{quote}
\begin{verbatim}
\setlength\cftsectionnumwidth{4em}
\end{verbatim}
\end{quote}

The same command may be employed in documents typeset with the
\Class{memoir} package (by the same author as \Package{tocloft}).

\Class{Memoir} has another mechanism for the job:
\cmdinvoke{cftsetindents}{\meta{kind}}{indent}{numwidth}.  Here
\emph{kind} is \texttt{chapter}, \texttt{section}, or whatever; the
\emph{indent} specifies the `margin' before the entry starts; and the
\emph{width} is of the box into which the number is typeset (so needs
to be wide enough for the largest number, with the necessary spacing
to separate it from what comes after it in the line.
\begin{ctanrefs}
\item[memoir.cls]\CTANref{memoir}
\item[tocloft.sty]\CTANref{tocloft}
\end{ctanrefs}
\LastEdit{2013-08-20}

\Question[Q-gutter]{Why is the inside margin so narrow?}

If you give the standard classes the \pkgoption{twoside} option, the
class sets the margins narrow on the left of odd-numbered pages, and
on the right of even-numbered pages.  This is often thought to look
odd, but it is quite right.

The idea is that the typographic urge for symmetry should also apply
to margins: if you lay an even numbered page to the left of an
odd-numbered one, you will see that you've three equal chunks of
un-printed paper: the left margin of the even page, the right margin
of the odd page, and the two abutting margins together.

This is all very fine in the abstract, but in practical book(let)
production it only works ``sometimes''.

If your booklet is produced on double-width paper and stapled, the
effect will be good; if your book(let) is produced using a so-called
``perfect'' binding, the effect will again be good.

However, almost any ``quality'' book-binder will need some of your
paper to grab hold of, and a book bound in such a way won't exhibit
the treasured symmetry unless you've done something about the margin
settings.

The packages recommended in % ! line break
``\Qref*{setting up margins}{Q-marginpkgs}'' mostly have provision for
a ``binding offset'' or a ``binding correction''~--- search for
``binding'' in the manuals (\Package{vmargin} doesn't help, here).

If you're doing the job by hand (see % ! line break
\Qref[question]{manual margin setup}{Q-marginmanual}), the trick is to
calculate your page and margin dimensions as normal, and then:
\begin{itemize}
\item subtract the binding offset from \csx{evensidemargin}, and
\item add the binding offset to \csx{oddsidemargin}.
\end{itemize}
which can be achieved by:
\begin{quote}
\begin{verbatim}
\addtolength{\evensidemargin}{-offset}
\addtolength{\oddsidemargin}{offset}
\end{verbatim}
\end{quote}
(substituting something sensible like ``\texttt{5mm}'' for
``\texttt{offset}'', above).

The above may not be the best you can do: you may well choose to
change the \csx{textwidth} in the presence of the binding offset; but
the changes do work for constant \csx{textwidth}.

\subsection{Why shouldn't I?}

\Question[Q-t1enc]{Why use \Package{fontenc} rather than \Package{t1enc}?}

In the very earliest days of \LaTeXe{}, the only way to use the
\acro{T}1 encoding was \Package{t1enc}; with the summer 1994
``production'' release, the \Package{fontenc} package appeared, and
provided comprehensive support for use of the encoding.

Nevertheless, the \Package{t1enc} package remains (as part of the
\LaTeXo{} compatibility code), but it does very little: it merely
selects font encoding \acro{T}1, and leaves to the user the business
of generating the character codes required.

Generating such character codes could be a simple matter, \emph{if}
the \acro{T}1 encoding matched any widely-supported encoding standard,
since in that case, one might expect one's keyboard to generate the
character codes.  However, the \acro{T}1 encoding is a mix of several
standard encodings, and includes code points in areas of the table
which standard encodings specifically exclude, so no \acro{T}1
keyboards have been (or ever will be) manufactured.

By contrast, the \Package{fontenc} package generates the \acro{T}1
code points from ordinary \LaTeX{} commands (e.g., it generates the
\texttt{\'e} character codepoint from the command \csx{'}\texttt{e}).
So, unless you have program-generated \acro{T}1 input (which is almost
inconceivable), use \cmdinvoke{usepackage}[T1]{fontenc} rather than
\cmdinvoke{usepackage}{t1enc}.

\Question[Q-why-inp-font]{Why bother with \Package{inputenc} and \Package{fontenc}?}

The standard input encoding for Western Europe (pending the arrival of
Unicode) is \acro{ISO}~8859--1 (commonly known by the standard's
subtitle `Latin-1').  Latin-1 is remarkably close, in the codepoints
it covers, to the \AllTeX{} \acro{T}1 encoding.

In this circumstance, why should one bother with \Package{inputenc}
and \Package{fontenc}?  Since they're pretty exactly mirroring each
other, one could do away with both, and use just \Package{t1enc},
despite its \Qref*{shortcomings}{Q-t1enc}.

One doesn't do this for a variety of small reasons:
\begin{description}
\item[Confusion] You've been happily working in this mode, and for
  some reason find you're to switch to writing in German: the effect
  of using ``\texttt{\ss }'' is somewhat startling, since \acro{T}1
  and Latin-1 treat the codepoint differently.
\item[Compatibility] You find yourself needing to work with a
  colleague in Eastern Europe: their keyboard is likely to be set to
  produce Latin-2, so that the simple mapping doesn't work.
\item[Traditional \LaTeX{}] You lapse and write something like
  \cmdinvoke{'}{e} rather than typing \texttt{\'e}; only \Package{fontenc}
  has the means to convert this \LaTeX{} sequence into the \acro{T}1
  character, so an \csx{accent} primitive slips through into the
  output, and hyphenation is in danger.
\end{description}
The \Package{inputenc}--\Package{fontenc} combination seems slow and
cumbersome, but it's safe.

\Question[Q-eqnarray]{Why not use \environment{eqnarray}?}

The environment \environment{eqnarray} is attractive for the
occasional user of mathematics in \LaTeX{} documents: it seems to
allow aligned systems of equations.  Indeed it \emph{does} supply such
things, but it makes a serious mess of spacing.  In the system:
\begin{quote}
\begin{verbatim}
\begin{eqnarray}
  a & = & b + c \\
  x & = & y - z
\end{eqnarray}
\end{verbatim}
\end{quote}
the spacing around the ``='' signs is \emph{not} that defined in the
metrics for the font from which the glyph comes~--- it's
\csx{arraycolsep}, which may be set to some very odd value for reasons
associated with real arrays elsewhere in the document.

The user is far better served by the \AMSLaTeX{} bundle, which
provides an \environment{align} environment, which is designed with
the needs of mathematicians in mind (as opposed to the convenience of
\LaTeX{} programmers).  For this simple case (\environment{align} and
other \AMSLaTeX{} alignment environments are capable of far greater
things), code as:
\begin{quote}
\begin{verbatim}
\begin{align}
  a & = b + c \\
  x & = y - z
\end{align}
\end{verbatim}
\end{quote}
The matter is discussed in more detail in a % ! line break
\href{http://tug.org/pracjourn/2006-4/madsen/madsen.pdf}{Prac\TeX{} journal paper}
by Lars Madsen; Stefan Kottwitz offers a % ! line break
\href{http://texblog.net/latex-archive/maths/eqnarray-align-environment/}{\tex{} blog entry}
which includes screen shots of the output, convincingly demonstrating
the problem.
\begin{ctanrefs}
\item[AMSLaTeX]\CTANref{amslatex}
\end{ctanrefs}

\Question[Q-dolldoll]{Why use \csx{[}\,\dots{}\csx{]} in place of \texttt{\$\$}\,\dots{}\,\texttt{\$\$}?}

\LaTeX{} defines inline- and display-maths commands, apparently
duplicating the \TeX{} primitive maths sequences which surround maths
commands with single (or pairs of) dollar signs.

In fact, \LaTeX{}'s inline maths grouping, % !line break
\csx{(}\texttt{ ... }\csx{)}, has (almost) exactly the same effect as the
\TeX{} primitive version \texttt{\$ ... \$}.  (The exception:
the \LaTeX{} version checks to ensure you don't put \csx{(} and
\csx{)} the wrong way round; this does occasionally detect errors\dots{}.)

Since this is the case, one often finds \LaTeX{} users, who have some
experience of using \plaintex{}, merely assuming that \LaTeX{}'s
display maths grouping \csx{[}\texttt{ ... }\csx{]} may be replaced by
the \TeX{} primitive display maths \texttt{\$\$ ... \$\$}.

Unfortunately, the assumption is wrong: some \LaTeX{} code needs to
patch display maths, it can only do so by patching \csx{[} and \csx{]}
(or their equivalents).  Most obviously, the class option \pkgoption{fleqn}
simply does not work for equations coded using % ! line break
\texttt{\$\$ ... \$\$}, whether you're using the standard classes
alone, or using package \Package{amsmath}.  Also, the \csx{[} and
\csx{]} construct has code for rationalising vertical spacing in some
extreme cases; that code is not provided \texttt{\$\$ ... \$\$}, so if
you use the \plaintex{} version, you may occasionally observe
inconsistent vertical spacing.  Similar behaviour can bite if you are
writing a \emph{proof}; placing the ``\acro{QED} symbol'' doesn't work
if it is in \texttt{\$\$}-displayed maths.

There are more subtle effects (especially with package
\Package{amsmath}), and the simple rule is ``use % ! line break
\csx{[}\texttt{ ... }\csx{]} (at least) whenever displayed maths is
needed in \LaTeX{}''.

(Note that the sequence \csx{[}\texttt{ ... }\csx{]} is duplicated by
the \environment{displaymath} environment, which can be said to ``look
nicer'', and actually \emph{describes} what's being done.)
\LastEdit{2013-06-05}

\Question[Q-2letterfontcmd]{What's wrong with \csx{bf}, \csx{it}, etc.?}

The font-selection commands of \LaTeXo{} were \csx{rm}, \csx{sf},
\csx{tt}, \csx{it}, \csx{sl}, \csx{em} and \csx{bf}; they were modal
commands, so you used them as:
\begin{quote}
\begin{verbatim}
{\bf Fred} was {\it here\/}.
\end{verbatim}
\end{quote}
with the font change enclosed in a group, so as to limit its effect;
note the italic correction command \csx{/} that was necessary at the
end of a section in italics.

At the release of \LaTeXe{} in summer 1994, these simple commands were
deprecated, but recognising that their use is deeply embedded in the
brains of \LaTeX{} users, the commands themselves remain in \LaTeX{},
\emph{with their \LaTeXo{} semantics}.  Those semantics were part of
the reason they were deprecated: each \csx{\emph{xx}} overrides
any other font settings, keeping only the size.  So, for example,
\begin{quote}
\begin{verbatim}
{\bf\it Here we are again\/}
\end{verbatim}
\end{quote}
ignores \csx{bf} and produces text in italic, medium weight (and the
italic correction has a real effect), whereas
\begin{quote}
\begin{verbatim}
{\it\bf happy as can be\/}
\end{verbatim}
\end{quote}
ignores \csx{it} and produces upright text at bold weight (and the
italic correction has nothing to do).  The same holds if you mix
\LaTeXe{} font selections with the old style commands:
\begin{quote}
\begin{verbatim}
\textbf{\tt all good friends}
\end{verbatim}
\end{quote}
ignores the \csx{textbf} that encloses the text, and produces
typewriter text at medium weight.

So why are these commands deprecated?~--- it is because of confusions
such as that in the last example.  The alternative (\LaTeXe{})
commands are discussed in the rest of this answer.

\LaTeXe{}'s font commands come in two forms: modal commands and
text-block commands.  The default set of modal commands offers weights
\csx{mdseries} and \csx{bfseries}, shapes \csx{upshape},
\csx{itshape}, \csx{scshape} and \csx{slshape}, and families
\csx{rmfamily}, \csx{sffamily} and \csx{ttfamily}.  A font selection
requires a family, a shape and a series (as well as a size, of
course).  A few examples
\begin{quote}
\begin{narrowversion}
\begin{verbatim}
{\bfseries\ttfamily
    and jolly good company!}
\end{verbatim}
\end{narrowversion}
\begin{wideversion}
\begin{verbatim}
{\bfseries\ttfamily and jolly good company!}
\end{verbatim}
\end{wideversion}
\end{quote}
produces bold typewriter text (but note the lack of a % ! line break, big time 
\begin{narrowversion} % non hyper version
  bold typewriter font~--- \Qref{}{Q-bold-extras}~---
\end{narrowversion}
\begin{wideversion}
  \Qref{bold typewriter font}{Q-bold-extras}
\end{wideversion}
in the default Computer Modern fonts), or
\begin{quote}
\begin{narrowversion}
\begin{verbatim}
{\slshape\sffamily
    Never mind the weather\/}
\end{verbatim}
\end{narrowversion}
\begin{wideversion}
\begin{verbatim}
{\slshape\sffamily Never mind the weather\/}
\end{verbatim}
\end{wideversion}
\end{quote}
(note the italic correction needed on slanted fonts, too).

\LaTeXe{}'s text block commands take the first two letters of the
modal commands, and form a \csx{text}\emph{\texttt{xx}} command from
them.  Thus \csx{bfseries} becomes \cmdinvoke*{textbf}{text},
\csx{itshape} becomes \cmdinvoke*{textit}{text}, and \csx{ttfamily}
becomes \cmdinvoke*{texttt}{text}.  Block commands may be nested, as:
\begin{quote}
\begin{verbatim}
\textit{\textbf{Never mind the rain}}
\end{verbatim}
\end{quote}
to produce bold italic text (note that the block commands supply
italic corrections where necessary), and they be nested with the
\LaTeXe{} modal commands, too:
\begin{quote}
\begin{narrowversion}
\begin{verbatim}
\texttt{\bfseries
    So long as we're together}
\end{verbatim}
\end{narrowversion}
\begin{wideversion}
\begin{verbatim}
\texttt{\bfseries So long as we're together}
\end{verbatim}
\end{wideversion}
\end{quote}
for bold typewriter, or
\begin{quote}
\begin{narrowversion}
\begin{verbatim}
{\slshape\textbf{%
    Whoops!  she goes again}\/}
\end{verbatim}
\end{narrowversion}
\begin{wideversion}
\begin{verbatim}
{\slshape \textbf{Whoops!  she goes again}\/}
\end{verbatim}
\end{wideversion}
\end{quote}
for a bold slanted instance of the current family (note the italic
correction applied at the end of the modal command group, again).

The new commands (as noted above) override commands of the same type.
In almost all cases, this merely excludes ludicrous ideas such as
``upright slanted'' fonts, or ``teletype roman'' fonts.  There are a
couple of immediate oddities, though.  The first is the conflict
between \csx{itshape} (or \csx{slshape}) and \csx{scshape}: while many
claim that an italic small-caps font is typographically unsound, such
fonts do exist.  Daniel Taupin's \Package{smallcap} package enables
use of the instances in the \Qref*{\acro{EC} fonts}{Q-ECfonts}, and
similar techniques could be brought to bear on many other font sets.
The second is the conflict between \csx{upshape} and \csx{itshape}:
Knuth actually offers an upright-italic font which \LaTeX{} uses for
the ``\pounds{}'' symbol in the default font set.  The combination is
sufficiently weird that, while there's a defined font shape, no
default \LaTeX{} commands exist; to use the shape, the (eccentric) user
needs \LaTeX{}'s simplest font selection commands:
\begin{quote}
\begin{narrowversion}
\begin{verbatim}
{\fontshape{ui}\selectfont
    Tra la la, di dee}
\end{verbatim}
\end{narrowversion}
\begin{wideversion}
\begin{verbatim}
{\fontshape{ui}\selectfont Tra la la, di dee}
\end{verbatim}
\end{wideversion}
\end{quote}
\begin{ctanrefs}
\item[smallcap.sty]\CTANref{smallcap}
\end{ctanrefs}

\Question[Q-newfont*]{What's wrong with \csx{newfont}?}

If all else fails, you \emph{can} specify a font using the \LaTeX{}
\csx{newfont} command.  The font so specified doesn't fit into the
\LaTeX{} font selection mechanism, but the technique can be tempting
under several circumstances.  The command is merely the thinnest of
wrappers around the \csx{font} primitive, and doesn't really fit with
\LaTeX{} at all.  A simple, but really rather funny, example of the
problems it poses, may be seen in:
\begin{quote}
\begin{verbatim}
\documentclass[10pt]{article}
\begin{document}
\newfont{\myfont}{cmr17 scaled 2000}
\myfont
\LaTeX
\end{document}
\end{verbatim}
\end{quote}
(the reader is encouraged to try this).  The ``A'' of \csx{LaTeX} pretty
much disappears: \LaTeX{} chooses the size on the ``A'' according to
\emph{its} idea of the font size (10pt), but positions it according to
the dimensions of ``\csx{myfont}'', which is more than three times
that size.

Another ``\csx{myfont}'' example arises from an entirely different
source.  The mini-document:
\begin{quote}
\begin{verbatim}
\documentclass{article}
\begin{document}
\newfont{\myfont}{ecrm1000}
{\myfont voil\`a}
\end{document}
\end{verbatim}
\end{quote}
gives you ``German low double quotes'' (under the ``a'') in place of
the grave accent.  This happens because \FontName{ecrm1000} is in a
different \Qref*{font encoding}{Q-whatenc} than \LaTeX{} is
expecting~--- if you use the \LaTeX{} \Package{fontenc} package to
select the \acro{EC} fonts, all these tiresome encoding issues are
solved for you, behind the scenes.

There does however remain a circumstance when you will be tempted to
use \csx{newfont}~--- viz., to get a font size that doesn't fall into
the Knuth standard set of sizes: \LaTeX{} (by default) won't allow you
to use such a size.  Don't despair: see the answer % ! line break
``\Qref*{arbitrary font sizes}{Q-fontsize}''.


