% $Id: faq-t-g-wr.tex,v 1.12 2011/10/16 22:59:45 rf10 Exp rf10 $

\section{Things are Going Wrong\dots{}}

\subsection{Getting things to fit}
\Question[Q-enlarge]{Enlarging \TeX{}}

The \TeX{} error message `capacity exceeded' covers a multitude of
problems.  What has been exhausted is listed in brackets after the
error message itself, as in:
\begin{quote}
\begin{verbatim}
! TeX capacity exceeded, sorry
...              [main memory size=263001].
\end{verbatim}
\end{quote}
Most of the time this error can be fixed
\emph{without} enlarging \TeX{}. The most common causes are unmatched braces,
extra-long lines, and poorly-written macros. Extra-long lines are
often introduced when files are transferred incorrectly between
operating systems, and line-endings are not preserved properly (the
tell-tale sign of an extra-long line error is the complaint
that the `|buf_size|' has overflowed).

If you really need to extend your \TeX{}'s capacity, the proper method
depends on your installation.  There is no need (with modern \TeX{}
implementations) to change the defaults in Knuth's \acro{WEB} source;
but if you do need to do so, use a change file to modify the values set in
module 11, recompile your \TeX{} and regenerate all format files.

Modern implementations allow the sizes of the various bits of \TeX{}'s
memory to be changed semi-dynamically.  Some (such as em\TeX{}) allow
the memory parameters to be changed in command-line switches when
\TeX{} is started; most frequently, a configuration file is read which
specifies the size of the memory.  On \ProgName{web2c}-based systems,
this file is called \File{texmf.cnf}: see the documentation that comes
with the distribution for other implementations.  Almost invariably,
after such a change, the format files need to be regenerated after
changing the memory parameters.

\Question[Q-usepictex]{Why can't I load \PiCTeX{}?}

\PiCTeX{} is a resource hog; fortunately, most modern \TeX{}
implementations offer generous amounts of space, and most modern
computers are pretty fast, so users aren't too badly affected by its
performance.

However, \PiCTeX{} has the further unfortunate tendency to fill up
\TeX{}'s fixed-size arrays~--- notably the array of 256 `dimension'
registers.  This is a particular problem when you're using
\File{pictex.sty} with \LaTeX{} and some other packages that also need
dimension registers.  When this happens, you will see the \TeX{} error
message:
\begin{quote}
\begin{verbatim}
! No room for a new \dimen.
\end{verbatim}
\end{quote}
There is nothing that can directly be done about this error: you
can't extend the number of available \csx{dimen} registers without
extending \TeX{} itself.
\begin{wideversion} % hyper
  \Qref{\eTeX{}}{Q-etex} and \Qref{Omega}{Q-omegaleph} both do this, as
  does \Qref{MicroPress Inc's V\TeX{}}{Q-commercial}.
\end{wideversion}
\begin{narrowversion}
  \eTeX{} and \ensuremath{\Omega}~--- \Qref[see questions]{}{Q-etex}
  \Qref[and]{}{Q-omegaleph} respectively~--- both do this, as does
  MicroPress Inc's V\TeX{}~--- \Qref{}{Q-commercial}.
\end{narrowversion}

It's actually quite practical (with most modern distributions) to use
\eTeX{}'s extended register set: use package \Package{etex} (which
comes with \eTeX{} distributions) and the allocation mechanism is
altered to cope with the larger register set: \PiCTeX{} will now load.

If you're in some situation where you can't use \eTeX{}, you need to change
\PiCTeX{}; unfortunately \PiCTeX{}'s author is no longer active in the
\TeX{} world, so one must resort to patching.  There are two solutions
available.

The \CONTeXT{} module \File{m-pictex.tex} (for \plaintex{} and
variants) or the corresponding \LaTeX{} \Package{m-pictex} package provide
an ingenious solution to the problem based on hacking the code of
\csx{newdimen} itself.

Alternatively, Andreas Schrell's \Package{pictexwd} and related
packages replace \PiCTeX{} with a version that uses 33 fewer
\csx{dimen} registers; so use \Package{pictexwd} in place of
\Package{pictex} (either as a \LaTeX{} package, or as a file to read
into \plaintex{}).

And how does one use \PiCTeX{} anyway, given that the
manual is so \Qref*{hard to come by}{Q-docpictex}?
Fortunately for us all, the \ProgName{MathsPic}
system may be used to translate a somewhat different language into
\PiCTeX{} commands; and the \ProgName{MathsPic} manual is free (and
part of the distribution).  \ProgName{MathsPic} is available either as
a \ProgName{Basic} program for \acro{DOS}, or as a \ProgName{Perl}
program for other systems (including Windows, nowadays).
\begin{ctanrefs}
\item[etex.sty]\CTANref{etex-pkg}
\item[m-pictex.sty]Distributed as part of \CTANref{context-tmf}
\item[m-pictex.tex]Distributed as part of \CTANref{context-tmf}
\item[MathsPic]\CTANref{mathspic}
\item[pictexwd.sty]Distributed as part of \CTANref{pictex-addon}[pictexwd]
\end{ctanrefs}

\subsection{Making things stay where you want them}

\Question[Q-floats]{Moving tables and figures in \LaTeX{}}

Tables and figures have a tendency to surprise, by \emph{floating}
away from where they were specified to appear.  This is in fact
perfectly ordinary document design; any professional typesetting
package will float figures and tables to where they'll fit without
violating the certain typographic rules.  Even if you use the
placement specifier~''\texttt{h}'' (for `here'), the figure or table
will not be 
printed `here' if doing so would break the rules; the rules themselves
are pretty simple, and are given on page~198, section~C.9 of the
\LaTeX{} manual.  In the worst case, \LaTeX{}'s rules can cause the
floating items to pile up to the extent that you get an error message
saying ``\Qref*{Too many unprocessed floats}{Q-tmupfl}''.
What follows is a simple checklist of things to do to solve these
problems (the checklist talks throughout about figures, but applies
equally well to tables, or to ``non-standard'' floats defined by the
\Package{float} or other packages).
\begin{itemize}
\item Do your figures need to float at all?  If not, look at the
  recommendations for ``\Qref*{non-floating floats}{Q-figurehere}''
\item Are the placement parameters on your figures right?  The
  default (``\texttt{tbp}'') is usually satisfactory, but you can
  reasonably change it (for example, to add an ``\texttt{h}'').
  Whatever you do, \emph{don't} 
  omit the ``\texttt{p}'': doing so could cause \LaTeX{} to believe that if you
  can't have your figure \emph{here}, you don't want it
  \emph{anywhere}.  (\LaTeX{} does try to avoid being confused in
  this way\dots{})
\item \LaTeX{}'s own float placement parameters could be preventing
  placements that seem entirely ``reasonable'' to you~--- they're
  notoriously rather conservative.  To encourage \LaTeX{} not to move
  your figure, you may need to loosen its demands.  (The most important
  ones are the ratio of text to float on a given page, but it's
  sensible to have a fixed set that changes the whole lot, to meet
  every eventuality.)
\begin{verbatim}
\renewcommand{\topfraction}{.85}
\renewcommand{\bottomfraction}{.7}
\renewcommand{\textfraction}{.15}
\renewcommand{\floatpagefraction}{.66}
\renewcommand{\dbltopfraction}{.66}
\renewcommand{\dblfloatpagefraction}{.66}
\setcounter{topnumber}{9}
\setcounter{bottomnumber}{9}
\setcounter{totalnumber}{20}
\setcounter{dbltopnumber}{9}
\end{verbatim}
  The meanings of these
  parameters are described on pages~199--200, section~C.9 of the
  \LaTeX{} manual.
\item Are there places in your document where you could `naturally'
  put a \csx{clearpage} command?  If so, do: the backlog of floats is
  cleared after a \csx{clearpage}.  (Note that the \csx{chapter}
  command in the standard \Class{book} and \Class{report} classes
  implicitly executes \csx{clearpage}, so your floats can't wander past
  the end of a chapter.)
\item Try the \Package{placeins} package: it defines a
  \csx{FloatBarrier} command beyond which floats may not pass.  A
  package option allows you to declare that floats may not pass a
  \csx{section} command, but you can place \csx{FloatBarrier}s wherever
  you choose.
\item If you are bothered by floats appearing at the top of the page
  (before they are specified in your text), try the \Package{flafter}
  package, which avoids this problem by insisting that floats should
  always appear after their definition.
\item Have a look at the \LaTeXe{} \Package{afterpage} package.
  Its documentation gives as an example the idea
  of putting \csx{clearpage} \emph{after} the current page (where it
  will clear the backlog, but not cause an ugly gap in your text), but
  also admits that the package is somewhat fragile.  Use it as a last
  resort if the other possibilities below don't help.
\item If you would actually \emph{like} great blocks of floats at the
  end of each of your chapters, try the \Package{morefloats} package;
  this allows you to increase the number of floating inserts that \LaTeX{}
  can handle at one time (from its original value of~18, in
  \LaTeXe{}).  Note that, even with \etex{}'s greater supply of
  registers, there is still a modest limit on the total number of
  floating inserts (\etex{} increases the total number of registers
  available, but inserts don't work if they are constructed from
  registers in the extended range).

  Caveat: if you are using \Package{etex} to increase the number of
  registers available, you need to ``reserve'' some inserts for
  \Package{morefloats}: something like:
  \begin{quote}
\begin{verbatim}
\usepackage{etex}
\reserveinserts{18}
\usepackage{morefloats}
\end{verbatim}
  \end{quote}
\item If you actually \emph{wanted} all your figures to float to the
  end (\emph{e.g}., for submitting a draft copy of a paper), don't
  rely on \LaTeX{}'s mechanism: get the \Package{endfloat} package to do
  the job for you.
\end{itemize}
\begin{ctanrefs}
\item[afterpage.sty]Distributed as part of \CTANref{2etools}[afterpage]
\item[endfloat.sty]\CTANref{endfloat}
\item[etex.sty]\CTANref{etex-pkg}
\item[flafter.sty]Part of the \LaTeX{} distribution
\item[float.sty]\CTANref{float}
\item[morefloats.sty]\CTANref{morefloats}
\item[placeins.sty]\CTANref{placeins}
\end{ctanrefs}

\Question[Q-underline]{Underlined text won't break}

Knuth made no provision for underlining text: he took the view that
underlining is not a typesetting operation, but rather one that
provides emphasis on typewriters, which typically offer but one
typeface.  The corresponding technique in typeset text is to switch
from upright to italic text (or vice-versa): the \LaTeX{} command
\csx{emph} does just that to its argument.

Nevertheless, typographically illiterate people (such as those that
specify double-spaced
\nothtml{thesis styles~--- }\Qref{thesis styles}{Q-linespace})
continue to require underlining of us, so \LaTeX{} as distributed
defines an \csx{underline} command that applies the mathematical
`underbar' operation to text.  This technique is not entirely
satisfactory, however: the text gets stuck into a box, and won't break
at line end.

Two packages are available that solve this problem.  The
\Package{ulem} package redefines the
\csx{emph} command to underline its argument; the underlined text thus
produced behaves as ordinary emphasised text, and will break over the
end of a line.  (The package is capable of other peculiar effects,
too: read its documentation.)
The \Package{soul} package defines an \csx{ul} command (after which the
package is, in part, named) that underlines running text.

Beware of \Package{ulem}'s default behaviour, which is to convert the
\csx{emph} command into an underlining command; this can be avoided by
loading the package with:
\begin{quote}
\begin{verbatim}
\usepackage[normalem]{ulem}
\end{verbatim}
\end{quote}
\begin{ctanrefs}
\item[ulem.sty]\CTANref{ulem}
\item[soul.sty]\CTANref{soul}
\end{ctanrefs}

\Question[Q-widows]{Controlling widows and orphans}

Widows (the last line of a paragraph at the start of a page) and
orphans (the first line of paragraph at the end of a page) interrupt
the reader's flow, and are generally considered ``bad form'';
\AllTeX{} takes some precautions to avoid them, but completely
automatic prevention is often impossible.  If you are typesetting your
own text, consider whether you can bring yourself to change the
wording slightly so that the page break will fall differently.

The \AllTeX{} page maker, when forming a page, takes account of variables
\csx{widowpenalty} and \csx{clubpenalty} (which relates to orphans!).
These penalties are usually set to the moderate value of \texttt{150}; this
offers mild discouragement of bad breaks.  You can increase the values
by saying (for example) \csx{widowpenalty}\texttt{=500}; however, vertical
lists (such as pages are made of) typically have rather little
stretchability or shrinkability, so if the page maker has to balance
the effect of stretching the unstretchable and being penalised, the
penalty will seldom win.  Therefore, for typical layouts, there are
only two sensible settings for the penalties: finite (150 or 500, it
doesn't matter which) to allow widows and orphans, and infinite (10000
or greater) to forbid them.

The problem can be avoided by allowing the pagemaker to run pages
short, by using the \csx{raggedbottom} directive; however, many
publishers insist on the default \csx{flushbottom}; it is seldom
acceptable to introduce stretchability into the vertical list, except
at points (such as section headings) where the document design
explicitly permits it.

Once you've exhausted the automatic measures, and have a final draft
you want to ``polish'', you should proceed to manual measures.  To
get rid of an orphan is simple: precede the paragraph with
\csx{clearpage} and the paragraph can't start in the wrong place.

Getting rid of a widow can be more tricky.  Options are
\begin{itemize}
\item If the previous page contains a long paragraph with a short last
  line, it may be possible to set it `tight': write
  \csx{looseness}\texttt{=-1} immediately after the last word of the
  paragraph.
\item If that doesn't work, adjusting the page size, using
  \cmdinvoke{enlargethispage}{\csx{baselineskip}} to `add a line' to
  the page, which may have the effect of getting the whole paragraph
  on one page.
\item Reducing the size of the page by
  \cmdinvoke{enlargethispage}{-\csx{baselineskip}} may produce a
  (more-or-less) acceptable ``two-line widow''.
\end{itemize}
Note that \csx{looseness}\texttt{=1} (which should increase the line
length by one) seldom has the right effect~--- the looser paragraph
typically has a one-word final line, which doesn't look much better
than the original widow.

\subsection{Things have ``gone away''}

\Question[Q-oldfontnames]{Old \LaTeX{} font references such as \csx{tenrm}}

\LaTeXo{} defined a large set of commands for access to the fonts
that it had built in to itself.  For example, various flavours of
|cmr| could be found as \csx{fivrm}, \csx{sixrm}, \csx{sevrm},
\csx{egtrm}, \csx{ninrm}, \csx{tenrm}, \csx{elvrm}, \csx{twlrm},
\csx{frtnrm}, \csx{svtnrm}, \csx{twtyrm} and \csx{twfvrm}.
These commands were never documented, but certain packages
nevertheless used them to achieve effects they needed.

Since the commands weren't public, they weren't included in \LaTeXe{};
to use the unconverted \LaTeXo{} packages under \LaTeXe{}, you need
also to include the \Package{rawfonts} package (which is part of the
\LaTeXe{} distribution).

\Question[Q-misssymb]{Missing symbol commands}

You're processing an old document, and some symbol commands such as
\csx{Box} and \csx{lhd} appear no longer to exist.  These commands were
present in the core of \LaTeXo{}, but are not in current \LaTeX{}.
They are available in the \Package{latexsym} package (which is part of
the \LaTeX{} distribution), and in the \Package{amsfonts} package
(which is part of the \acro{AMS} distribution, and requires \acro{AMS}
symbol fonts).
\begin{ctanrefs}
\item[AMS fonts]\CTANref{amsfonts}
\end{ctanrefs}

\Question[Q-msxy]{Where are the \texttt{msx} and \texttt{msy} fonts?}

The \FontName{msx} and \FontName{msy} fonts were designed by the
American Mathematical Society in the very early days of \TeX{}, for
use in typesetting papers for mathematical journals.  They were
designed using the `old' \MF{}, which wasn't portable and is no longer
available; for a long time they were only available in 300dpi versions
which only imperfectly matched modern printers.  The \acro{AMS} has
now redesigned the fonts, using the current version of \MF{}, and the
new versions are called the \FontName{msa} and \FontName{msb}
families.

Nevertheless, \FontName{msx} and \FontName{msy} continue to turn up to
plague us.  There are, of course, still sites that haven't got around
to upgrading; but, even if everyone upgraded, there would still be the
problem of old documents that specify them.

If you have a \extension{tex} source that requests \FontName{msx} and
\FontName{msy}, the best technique is to edit it so that it requests
\FontName{msa} and \FontName{msb} (you only need to change the single
letter in the font names).

If you have a \acro{DVI} file that requests the fonts, there is a package
of \Qref*{virtual fonts}{Q-virtualfonts} to map the old to the new series.
\begin{ctanrefs}
\item[msa and msb fonts]Distributed as part of \CTANref{amsfonts}
\item[virtual font set]\CTANref{msx2msa}
\end{ctanrefs}

%%%???%%% spell-checked to here....zzzyx

\Question[Q-amfonts]{Where are the \texttt{am} fonts?}

One \emph{still} occasionally comes across a request for the \FontName{am}
series of fonts.  The initials stood for `Almost [Computer] Modern',
and they were the predecessors of the Computer Modern fonts that we
all know and love (or hate)%
\begin{footnoteenv}
  The fonts acquired their label `Almost' following the realisation
  that their first implementation in \MF{}79 still wasn't quite right;
  Knuth's original intention had been that they were the final answer.
\end{footnoteenv}.
There's not a lot one can do with these
fonts; they are (as their name implies) almost (but not quite) the
same as the \FontName{cm} series; if you're faced with a document that requests
them, the only reasonable approach is to edit the document to replace
\FontName{am*} font names with \FontName{cm*}.

The appearance of \acro{DVI} files that request them is sufficiently
rare that no-one has undertaken the mammoth task of creating a
translation of them by means of virtual fonts.

You therefore have to fool the system into using \FontName{cm*} fonts
where the original author specified \FontName{am*}.

One option is the font substitutions that many
\acro{DVI} drivers provide via their configuration file~---
specify that every \FontName{am} font should be replaced by its
corresponding \FontName{cm} font.

Alternatively, one may try \acro{DVI} editing~--- packages
\Package{dtl} (\acro{DVI} Text Language) and \Package{dviasm}
(\acro{DVI} assembler) can both provide round trips from \acro{DVI} to
text and back to \acro{DVI}.  One therefore edits font names
(throughout the text representation of the file) in the middle of that
round trip.

The \acro{DTL} text is pretty straightforward, for this purpose:
fontnames are in single quotes at the end of lines, so:
\begin{quote}
  \texttt{dv2dt -o} \meta{doc.txt} \meta{doc.dvi}\\
  (\emph{edit the \extension{txt} file})\\
  \texttt{dt2dv -o} \meta{edited.dvi} \meta{edited.txt}
\end{quote}
(you have to compile the \acro{C} programs for this).

\ProgName{Dviasm} is a \ProgName{Python} script; its output has font
names in a section near the start of the document, and then dotted
about through the body, so:
\begin{quote}
  \texttt{python dviasm.py -o} \meta{doc.txt} \meta{doc.dvi}\\
  (\emph{edit the \extension{txt} file})\\
  \texttt{python dviasm.py -o} \meta{edited.dvi} \meta{edited.txt}
\end{quote}
Both routes seem acceptable ways forward; it is a matter of taste
which any particular user may choose (it's not likely that it will be
necessary very often...).
\begin{ctanrefs}
\item[dviasm.py]\CTANref{dviasm}
\item[dtl]\CTANref{dtl}
\end{ctanrefs}

\Question[Q-initex]{What's happened to \ProgName{initex}?}

In the beginning, \AllTeX{} was stretching the capacity of every
system it was ported to, so there was a premium on reducing the size
of executables.  One way of doing this was to have a separate
executable, \ProgName{initex}, that had things in it that aren't
needed in ordinary document runs~--- notably \csx{patterns} (which
builds hyphenation tables), and \csx{dump} (which writes out a format).

On modern systems, the size of this code is insignificant in
comparison to the memory available, and maintaining separate programs
has been found sufficiently error-prone that free Unix-style system
distributions have abolished \ProgName{initex} and its friends and
relations such as \ProgName{inipdftex} in favour of a single
executable (that is, just \ProgName{tex} or \ProgName{pdftex}) that
will ``do what \ProgName{initex} (or whatever) used to do'' if it
detects the command option ``\texttt{-ini}''.

The change happened with the advent of te\TeX{} version
3.0, which appeared at the beginning of 2005.  At that time,
\texlive{} was following te\TeX{}, so that year's \texlive{}
distribution would also have dropped \ProgName{initex}.

It would appear that the equation is somewhat different for the
\miktex{} developers, since that system continues to offer an
\ProgName{initex} executable.
