% $Id: faq-install.tex,v 1.5 2009/09/01 06:53:22 rf10 Exp rf10 $

\section{Installing \AllTeX{} files}

\Question[Q-installthings]{Installing things on a \AllTeX{} system}
\AliasQuestion{Q-instpackages}

Installing (or replacing) things on your \AllTeX{} system has the
potential to be rather complicated; the following questions attempt to
provide a step-by-step approach, starting from the point where you've
decided what it is that you want to install:
\begin{itemize}
\item You must \Qref*{find the file you need}{Q-install-find};
\item If you are going to install a \LaTeX{} package, you may need to
  \Qref*{unpack the distributed files}{Q-install-unpack};
\item It may be necessary to % ! line break
  \Qref*{generate some documentation to read}{Q-install-doc};
\item You need to % ! line break
  \Qref*{decide where to install the files}{Q-install-where};
\item You must now \Qref*{install the files}{Q-inst-wlcf}; and
  finally
\item You may need to \Qref*{tidy up}{Q-inst-tidy} after the installation.
\end{itemize}

\Question[Q-install-find]{Finding packages to install}

How did you learn about the package?

If the information came from these \acro{FAQ}s, you should already
have a link to the file (there are lists at the end of each answer):
\begin{narrowversion}
  make a browser link from \URL{http://mirror.ctan.org/} and the text
  in the list; if the link returns a directory listing, you can
  generally retrieve the whole directory by appending the link with
  \extension{zip}
\end{narrowversion}
\begin{wideversion}
  click on one of the links associated with the package, and you can
  get the package (which may be one file or several).
% need searate wording for pdfversion and htmlversion, here
\end{wideversion}

If you heard about the file somewhere else, it's possible that the
source told you where to look; if not, try the \acro{CTAN} searching
facilities, such as \URL{http://www.tex.ac.uk/search/}.  That (rather
simple) search engine can return data from a search of the CTAN
catalogue (which covers most useful packages), or data from a search
of the names of files on the archive.

Packages come in a variety of different styles of distribution; the
very simplest will actually offer just \File{package.sty}~--- in this
case, just download the file and % ! line break
\Qref*{get on with installation}{Q-inst-wlcf}.

Normally, though, you will want \File{foo.sty} but that file is distributed
in a \LaTeX{} documented source file \File{foo.dtx}; thus you should
search just for \emph{foo}~--- \File{foo.sty} won't be visible
anywhere on the archive or in the catalogue.

Since most packages are distributed in this
\extension{dtx}/\extension{ins} way, they usually occupy their own
directory on the archive.  Even if that directory contains other
packages, you should download everything in the directory: as often as
not, packages grouped in this way depend on each other, so that you
really \emph{need} the other ones.

Having acquired the package distribution, % ! line break
``\Qref*{unpacking \LaTeX{} packages}{Q-install-unpack}'' outlines
your next step.

\Question[Q-install-unpack]{Unpacking \LaTeX{} packages}

As discussed \Qref*{elsewhere}{Q-dtx}, the `ordinary' way to
distribute a \LaTeX{} package is as a pair of files \File{package.dtx}
and \File{package.ins}.  If you've acquired such a pair, you simply
process \File{package.ins} with \LaTeX{}, and the files will appear,
ready for installation.

Other sorts of provision should ordinarily be accompanied by a
\File{README} file, telling you what to do; we list a few example
configurations.

Sometimes, a directory comes with a bunch of \extension{dtx} files, but
fewer (often only one) \extension{ins} files (\LaTeX{} itself comes
looking like this).  If there is more than one \extension{ins} file,
and in the absence of any instruction in the \File{README} file, simply
process the \extension{ins} file(s) one by one.

If you're missing the \File{package.ins} altogether, you need to play
around until something works.  Some \extension{dtx} files are
``self-extracting''~--- they do without an \extension{ins} file, and once
you've processed the \File{package.dtx}, \File{package.sty} has
automagically appeared.  Various other oddities may appear, but the
archivists aim to have \File{README} file in every package, which
should document anything out of the ordinary with the distribution.

\Question[Q-install-doc]{Generating package documentation}

We are faced with a range of ``normal'' provision, as well as several
oddities.  One should note that documentation of many packages is
available on \acro{CTAN}, without the need of any further effort by
the user~--- such documentation can usually be browsed \emph{in situ}.

However, if you find a package that does not offer documentation on
the archive, or if you need the documentation in some other format
than the archive offers, you can usually generate the documentation
yourself from what you download from the archive.

The standard mechanism, for \LaTeX{} packages, is simply to run
\LaTeX{} on the \File{package.dtx} file, as you would any ordinary
\LaTeX{} file (i.e., repeatedly until the warnings go away).

A variant is that the unpacking process provides a file
\File{package.drv}; if such a thing appears, process it in preference
to the \File{package.dtx} (it seems that when the documented \LaTeX{}
source mechanism was first discussed, the \File{.drv} mechanism was
suggested, but it's not widely used nowadays).

Sometimes, the \LaTeX{} run will complain that it can't find
\File{package.ind} (the code line index) and/or \File{package.gls}
(the list of change records, not as you might imagine, a glossary).
Both types of file are processed with special \ProgName{makeindex}
style files; appropriate commands are:
\begin{quote}
\begin{verbatim}
makeindex -s gind package
makeindex -s gglo -o package.gls package.glo
\end{verbatim}
\end{quote}
This author finds that the second (the change record) is generally of
limited utility when reading package documentation; it is, however,
valuable if you're part of the package development team.  If you don't
feel you need it, just leave out that step

Another common (and reasonable) trick performed by package authors is
to provide a separate file \File{package-doc.tex} or even simply
\File{manual.tex}; if the file \File{package.dtx} doesn't help, simply
look around for such alternatives.  The files are treated in the same
way as any ``ordinary'' \LaTeX{} file.

\Question[Q-inst-wlcf]{Installing files ``where \AllTeX{} can find them''}
\AliasQuestion{Q-wherefiles}

In the past, package documentation used always to tell you to put your
files ``where \LaTeX{} can find them''; this was always unhelpful~---
if you knew where that \emph{was}, you didn't need telling, but if you
\emph{didn't} know, you were completely stuck.

It was from this issue that the whole idea of the \acro{TDS} sprang;
``where to put'' questions now come down to ``where's the \acro{TDS}
tree?''.

We therefore answer the question by considering:
\begin{itemize}
\item \Qref*{what tree to use}{Q-what-TDS}, and
\item \Qref*{where in the tree to put the files}{Q-install-where}.
\end{itemize}

Once we know the answer to both questions, and we've created any
directories that are needed, we simply copy files to their rightful
location.

This has done what the old requirement specified: \LaTeX{} (or
whatever) \emph{can} (in principle) find the files.  However, in order
that the software \emph{will} find the files, we need to update an
index file.

On a \miktex{} system, open the window
  \texttt{Start}\arrowhyph{}%
  \texttt{All Programs}\arrowhyph{}%
  \texttt{\miktex{} \meta{version}}\arrowhyph{}%
  \texttt{Settings},
and click on \texttt{Refresh FNDB}.
The job may also be done in a command window, using the command:
\begin{quote}
\begin{verbatim}
initexmf --update-fndb
\end{verbatim}
\end{quote}
The % ! line break
\href{http://docs.miktex.org/manual/initexmf.html}{\miktex{} documentation}
gives further details about \texttt{initexmf}.

On a te\TeX{} or \texlive{}-based system, use the command
\texttt{texhash} (or if that's not available, \texttt{mktexlsr}~---
they ought to be different names for the same program).

Having done all this, the new package will be available for use.

\Question[Q-what-TDS]{Which tree to use}

In almost all cases, new material that you install should go into the
``local'' tree of your \AllTeX{} installation.  (A discussion of
reasons \emph{not} to use the local tree appears below.)

On a Unix(-alike) system, using te\TeX{} or \texlive{}, the root
directory will be named something like \path{/usr/share/texmf-local/}
or \path{/usr/local/share/texmf/}
You can ask such a system where it believes a local tree should be:
\begin{quote}
\begin{verbatim}
kpsewhich -expand-var "\$TEXMFLOCAL"
\end{verbatim}
\end{quote}
the output being the actual path, for example (on the workstation the
author is using today):
\begin{quote}
\begin{verbatim}
/usr/local/share/texmf
\end{verbatim}
\end{quote}

In a \miktex{} installation, the location will in fact typically be
something you specified yourself when you installed \miktex{} in the
first place, but you may find you need to create one.  The \miktex{}
``Settings'' window (%
  \texttt{Start}\arrowhyph{}%
  \texttt{Programs}\arrowhyph{}%
  \texttt{\miktex{}}\arrowhyph{}%
  \texttt{Settings})
has a tab ``\texttt{Roots}''; that tab gives a list of current
\acro{TDS} roots (they're typically not called
\texttt{texmf}-anything).  If there's not one there with
``\texttt{local}'' in its name, create an appropriate one (see below),
and register it using the window's
``\texttt{Add}'' button.

The % ! line break
\href{http://docs.miktex.org/faq/maintenance.html}{\miktex{} \acro{FAQ}}
suggests that you should create % ! line break
``\texttt{C:\textbackslash Local TeX Files}'', which is good if you
manage your own machine, but often not even possible in corporate, or
similar, environments~--- in such situations, the user may have no
control over the hard disc of the computer, at all.

So the real criterion is that your local tree should be somewhere that
\emph{you}, rather than the system, control.  Restrictive systems often
provide a ``home directory'' for each user, mounted as a network
drive; this is a natural home for the user's local tree.  Other (often
academic) environments assume the user is going to provide a memory
stick, and will assign it a defined drive letter~--- another good
candidate location.  Note that the semantics of such a tree are
indistinguishable from those of a % ! line break
\Qref*{``home'' \acro{TEXMF} tree}{Q-privinst}.

There are circumstances when you might not wish to use the `local' tree:
\begin{itemize}
\item if the package, or whatever, is ``personal'' (for example,
  something commercial that has been licensed to you alone, or
  something you're developing yourself), it should go in your
  \Qref*{``home'' \acro{TEXMF} tree}{Q-privinst};
\item if you \emph{know} that the package you are installing is a
  replacement for the copy on the \acro{TEXMF} tree of your \AllTeX{}
  distribution, you should replace the existing copy in the
  \acro{TEXMF} tree.
\end{itemize}
The reason one would put things on a local tree is to avoid their
disappearance if the system is upgraded (or otherwise re-installed).

The reason one might place upgrades the distribution's main tree is to
avoid confusion.  Suppose you were to place the file on the local
tree, and then install a new version of the distribution~--- you might
have an effect like:
\begin{itemize}
\item distribution comes with package version \ensuremath{n};
\item you install package version \ensuremath{n+1} on the local tree; and
\item the updated distribution provides package version \ensuremath{n+2}.
\end{itemize}
In such a situation, you will find yourself using version
\ensuremath{n+1} (from the local tree) \emph{after} the new
distribution has been installed.

If you install in the local tree, the only way to avoid such problems
is to carefully purge the local tree when installing a new
distribution.  This is tedious, if you're maintaining a large
installation.

\Question[Q-install-where]{Where to install packages}

We assume here that you have decided what tree to put your files in,
after reading % ! line break
``\Qref*{choosing a \acro{TDS} tree}{Q-what-TDS}''.  We will therefore
write \texttt{\$TEXMF} for it, and you need to substitute the tree
you decided on.

The basic idea is to imitate the directory structure in your
existing tree(s). Here are some examples of where various sorts of
files should go:
\begin{quote}
\begin{verbatim}
.sty, .cls or .fd: $TEXMF/tex/<format>/<package>/
.mf:   $TEXMF/fonts/source/<supplier>/<font>/
.tfm:  $TEXMF/fonts/tfm/<supplier>/<font>/
.vf:   $TEXMF/fonts/vf/<supplier>/<font>/
.afm:  $TEXMF/fonts/afm/<supplier>/<font>/
.pfb:  $TEXMF/fonts/type1/<supplier>/<font>/
.ttf:  $TEXMF/fonts/truetype/<supplier>/<font>/
.otf:  $TEXMF/fonts/opentype/<supplier>/<font>/
.pool, .fmt, .base or .mem: $TEXMF/web2c
\end{verbatim}
\end{quote}
and for modern systems (those distributed in 2005 or later, using \acro{TDS}
v1.1 layouts):
\begin{quote}
\begin{verbatim}
.map:  $TEXMF/fonts/map/<syntax>/<bundle>/
.enc:  $TEXMF/fonts/enc/<syntax>/<bundle>/
\end{verbatim}
\end{quote}
(Map and encoding files went to directories under
\File{$TEXMF/dvips/}, in earlier distributions.)

In the lists above \meta{format} identifies the format the macros
are designed for~--- it can be things such as \texttt{plain},
\texttt{generic} (i.e., any format), \texttt{latex} or
\texttt{context} (or several less common formats).

For fonts, \meta{font} refers to the font family (such as \texttt{cm}
for Knuth's Computer Modern, \texttt{times} for Adobe's Times Roman).
The supplier is usually obvious~--- the supplier
``public'' is commonly used for free fonts.

The \meta{syntax} (for \extension{map} and \extension{enc} files) is a
categorisation based on the way the files are written; candidates are
names of programs such as \ProgName{dvips} or \ProgName{pdftex}.

``Straight'' \AllTeX{} input can take other forms than the
\extension{sty}, \extension{cls} or \extension{fd} listed above, too
(apart from the `obvious' \extension{tex}).  Examples are (the
obvious) \extension{tex}, \extension{lfd} for \Package{babel} language
definitions, \extension{sto} and \extension{clo} for package and class
options, \extension{cfg} for configuration information,
\extension{def} for variants (such as the types of devices
\Package{graphics} drives).  The \File{README} of the package should
tell you of any others, though sometimes that information is printed
when the package's \Qref*{comments are stripped}{Q-install-unpack}.
All of these files should live together with the main package files.

Note that \meta{font} may stand for a single font or an entire family:
for example, files for all of Knuth's Computer Modern fonts are to be
found in \texttt{.../public/cm}, with various prefixes as appropriate.

The font ``supplier'' \emph{public} is a sort of hold-all for
``free fonts produced for use with \AllTeX{}'': as well as Knuth's
fonts, \emph{public}'s directory holds fonts designed by others
(originally, but no longer exclusively, in \MF{}).

Documentation for each package should all go, undifferentiated, into a
directory on the \path{doc/} subtree of the \acro{TDS}.  The layout of
the subtree is slightly different: \path{doc/latex} hosts all
\LaTeX{} documentation directories, but more fundamental things are
covered, e.g., by \path{doc/etex} or \path{doc/xetex}.

\Question[Q-inst-tidy]{Tidying up after installation}

There's not usually a lot to do after you've completed the steps
above~--- indeed, if you're merely installed files direct from the
archive, or whatever, there will be precisely nothing left, by way of
debris.

Things you might care to clean up are:
\begin{itemize}
\item the archive file, if you retrieved your data from the archive
  as a \extension{zip} file, or the like;
\item the \extension{dtx} and \extension{ins} files, if you chose not
  to install them with the documentation; and
\item the \extension{aux}, \extension{log}, \extension{idx}, etc.,
  from building the documentation.
\end{itemize}
A simple way of achieving all this is to download to a working
directory that was created for the purpose, and then to delete that
directory and all its contents after you've finished installing.

\Question[Q-inst-scut]{Shortcuts to installing files}
\AliasQuestion{Q-inst-miktex}

There are circumstances in which most of the fuss of installation can
be bypassed:
\begin{itemize}
\item If you are a \miktex{} user, the 
\begin{wideversion}
  \Qref{\miktex{} package management system}{Q-inst-miktex*}
  can usually help;
\end{wideversion}
\begin{narrowversion}
  \miktex{} package management system can usually help
  (\Qref{}{Q-inst-miktex*});
\end{narrowversion}
\item The package you want may already exist as a \acro{ZIP} file
\begin{wideversion}
  formatted for \Qref{direct installation}{Q-inst-tds-zip}.
\end{wideversion}
\begin{narrowversion}
  formatted for direct installation (\Qref{}{Q-inst-tds-zip}).
\end{narrowversion}
\end{itemize}

\Question[Q-inst-miktex*]{Installation using \miktex{} package manager}

Packages for use with \miktex{} are maintained very efficiently by the
project managers (new packages and updates on \acro{CTAN} ordinarily
make their way to the \miktex{} package repository within a week).
Thus it makes sense for the \miktex{} user to take advantage of the
system rather than grinding through the steps of installation.

\miktex{} maintains a database of packages it ``knows about'',
together with (coded) installation instructions that enable it to
install the packages with minimal user intervention; you can update
the database over the internet.

If \miktex{} does know about a package you need installed, it's worth
using the system:
first, open the \miktex{} packages window: click on
  \texttt{Start}\arrowhyph{}%
  \texttt{Programs}\arrowhyph{}%
  \texttt{MiKTeX}\arrowhyph{}%
  \texttt{MiKTeX Options}, and select the
  \texttt{Packages} tab.
  
On the tab, there is an Explorer-style display of packages.
Right-click on the root of the tree, ``\texttt{MiKTeX Packages}'',
and select ``\texttt{Search}'': enter the name of the package you're
interested in, and press the ``\texttt{Search}'' button.  If
\miktex{} knows about your package, it will open up the tree to show
you a tick box for your package: check that box.

If you prefer a command-line utility, there's \ProgName{mpm}.  Open a
command shell, and type:
\begin{quote}
\begin{verbatim}
mpm --install=<package>
\end{verbatim}
\end{quote}
(which of course assumes you know the name by which \miktex{} refers to
your package).

\Question[Q-inst-tds-zip]{Installing using ready-built \acro{ZIP} files}

Installing packages, as they (``traditionally'') appear on
\acro{CTAN}, involves:
\begin{itemize}
\item identifying where to put the various files on an \acro{TDS}
  tree,
\item installing them, and
\item a few housekeeping operations.
\end{itemize}
Most people, for most packages, find the first two steps onerous, the
last being easy (unless it is forgotten!).

Ready-built \acro{ZIP} files~--- also known as % ! line break
\Qref*{\acro{TDS}-\acro{ZIP} files}{Q-tds-zip}~--- are designed to lighten
the load of performing the first two steps of installation: they
contain all the files that are that's to be installed for a given
package, in their ``correct'' locations in a % ! line break
\Qref*{\acro{TDS} tree}{Q-tds}.

To install such a file on a Unix system (we assume that you'll install
into the local \acro{TEXMF} tree, at \texttt{\$TEXMFLOCAL}):
\begin{quote}
\begin{verbatim}
cd $TEXMFLOCAL
unzip $package.tds.zip
\end{verbatim}
\end{quote}

On a Windows system that is modern enough that it has a built-in
\acro{ZIP} unpacker, simply double-click on the file, and browse to
where it's to be unpacked.  (We trust that those using earlier
versions of Windows will already have experience of using
\ProgName{WinZIP} or the like.)

Having unpacked the \extension{zip} archive, in most cases the only
remaining chore is to update the file indexes~--- as in % ! line break
\Qref*{normal installation instructions}{Q-inst-wlcf}.  However, if
the package provides a font, you also need to enable the font's map,
which is discussed in % ! line break
``\Qref*{Installing a Type~1 font}{Q-instt1font}''

\Question[Q-tempinst]{``Temporary'' installation of \AllTeX{} files}

Operating systems and applications need to know where to find files:
many files that they need are ``just named''~--- the user doesn't
necessarily know \emph{where} they are, but knows to ask for them.
The commonest case, of course, is the commands whose names you type to
a shell (yes, even Windows' ``\MSDOS{} prompt'') are using a shell to read what
you type: many of the commands simply involve loading and executing a
file, and the \texttt{PATH} variable tells the shell where to find those files.

Modern \TeX{} implementations come with a bunch of search paths
built in to them.  In most circumstances these paths are adequate, but
one sometimes needs to extend them to pick up files in strange
places: for example, we may wish to try a new bundle of packages
before \Qref*{installing them `properly'}{Q-installthings}.  To do
this, we need to change the relevant path as \TeX{} perceives it.
However, we don't want to throw away \TeX{}'s built-in path (all of a
sudden, \TeX{} won't know how to deal with all sorts of things).

To \emph{extend} a \TeX{} path, we define an operating system
environment variable in `path format', but leaving a gap which \TeX{}
will fill with its built-in value for the path.  The commonest case is
that we want to place our extension in front of the path, so that our
new things will be chosen in preference, so we leave our `gap to be
filled' at the end of the environment variable.  The syntax is simple
(though it depends which shell you're actually using): so on a
Unix-like system, using the \ProgName{bash} shell, the job might be
done like:
\begin{verbatim}
  export TEXINPUTS=/tmp:
\end{verbatim}
while in a Windows system, within a \MSDOS{} window, it would be:
\begin{verbatim}
  set TEXINPUTS=C:/temp;
\end{verbatim}
In either case, we're asking \TeX{} to load files from the root disc
temporary files directory; in the Unix case, the ``empty slot'' is
designated by putting the path separator `|:|' on its own at the end
of the line, while in the Windows case, the technique is the same, but
the path separator is `|;|'.

Note that in either sort of system, the change will only affect
instances of \TeX{} that are started from the shell where the
environment variable was set.  If you run \TeX{} from another window,
it will use the original input path.  To make a change of input path
that will ``stick'' for all windows, set the environment variable in
your login script or profile (or whatever) in a Unix system and log
out and in again, or in \File{autoexec.bat} in a Windows system, and
reboot the system.

While all of the above has talked about where \TeX{} finds its macro
files, it's applicable to pretty much any sort of file any
\TeX{}-related program reads~--- there are lots of these paths, and of
their corresponding environment variables.  In a
\ProgName{web2c}-based system, the copious annotations in the
\File{texmf.cnf} system configuration file help you to learn which
path names correspond to which type of file.

\Question[Q-privinst]{``Private'' installations of files}

It sometimes happens that you need a new version of some macro package
or font, but that the machine you use is maintained by someone who's
unwilling to update and won't give you privileges to do the job
yourself.  A \Qref*{``temporary'' installation}{Q-tempinst} is
sometimes the correct approach, but if there's the slightest chance
that the installation will be needed on more than one project,
temporary installations aren't right.

In circumstances where you have plenty of quota on backed-up media, or
adequate local scratch space, the correct approach is to create a
private installation of \AllTeX{} which includes the new stuff you
need; this is the ideal, but is not generally possible.

So, since you can't install into the public \texttt{texmf} tree, you
have to install into a \File{texmf} tree of your own; fortunately, the
\acro{TDS} standard allows for this, and modern distributions allow
you to do it.  The most modern distributions refer to the tree as
\texttt{\$TEXMFHOME}, but it used to be called \texttt{\$HOMETEXMF};
so to check that your \TeX{} system does indeed support the mechanism
you should start with
\begin{verbatim}
kpsewhich -expand-var "\$TEXMFHOME"
\end{verbatim}

If you can confirm that the technique does indeed work, install your
new package (or whatever) in the \Qref*{correct place}{Q-install-where}
in a tree based on \File{$HOME/texmf}, and generate an index of that
tree
\begin{quote}
\begin{verbatim}
texhash $HOME/texmf
\end{verbatim}
\end{quote}
(the argument specifies which tree you are indexing: it's necessary
since you don't, by hypothesis, have access to the main tree, and
\ProgName{texhash} without the argument would try to write the main
tree.

There are two wrinkles to this simple formula: first, the installation
you're using may \emph{not} define a home TEXMF directory, and second,
there may be some obstruction to using \File{$HOME/texmf} as the
default name.  In either case, a good solution is to have your own
\File{texmf.cnf}~--- an idea that sounds more frightening that it
actually is.  The installation's existing file may be located with the
command:
\begin{quote}
\begin{verbatim}
kpsewhich texmf.cnf
\end{verbatim}
\end{quote}
Take a copy of the file and put it into a directory of your own; this
could be any directory, but an obvious choice is the \File{web2c}
directory of the tree you want to create, i.e.,
\File{$HOME/texmf/web2c} or the like.  Make an environment variable to
point to this directory:
\begin{quote}
\begin{verbatim}
TEXMFCNF=$HOME/texmf/web2c
export TEXMFCNF
\end{verbatim}
\end{quote}
(for a Bourne shell style system), or
\begin{quote}
\begin{verbatim}
setenv TEXMFCNF $HOME/texmf/web2c
\end{verbatim}
\end{quote}
(for a C-shell style system).  Now edit the copy of \File{texmf.cnf}

There will be a line in the existing file that defines the tree where
everything searches; the simplest form of the line is:
\begin{quote}
\begin{verbatim}
TEXMF = !!$TEXMFMAIN
\end{verbatim}
\end{quote}
but, there are likely to be several alternative settings behind
comment markers (``\texttt{\textpercent}''), and the person who 
installed your system may have left them there.  Whatever, you need to
modify the line that's in effect: change the above to three lines:
\begin{quote}
\begin{verbatim}
HOMETEXMF = $HOME/texmf
TEXMF = {$HOMETEXMF,!!$TEXMFMAIN}
% TEXMF = !!$TEXMFMAIN
\end{verbatim}
\end{quote}
the important point being that \texttt{\$HOMETEXMF} must come before
whatever was there before, inside the braces.  For example, if the
original was
\begin{quote}
\begin{verbatim}
TEXMF = {!!$LOCALTEXMF,!!$TEXMFMAIN}
\end{verbatim}
\end{quote}
it should be converted to:
\begin{quote}
\begin{narrowversion}
\begin{verbatim}
HOMETEXMF = $HOME/texmf
TEXMF = {$HOMETEXMF,!!$LOCALTEXMF,
                     !!$TEXMFMAIN}
% TEXMF = {!!$LOCALTEXMF,!!$TEXMFMAIN}
\end{verbatim}
{\small Note that the \texttt{TEXMF} line is only wrapped to make it
  fit in the column; there should be no line break or space between
  the final comma on the line and the \texttt{!!} on the next line.\par
}%
\end{narrowversion}
\begin{wideversion}
\begin{verbatim}
HOMETEXMF = $HOME/texmf
TEXMF = {$HOMETEXMF,!!$LOCALTEXMF,!!$TEXMFMAIN}
% TEXMF = {!!$LOCALTEXMF,!!$TEXMFMAIN}
\end{verbatim}
\end{wideversion}
\end{quote}
(retaining the original, as a comment, is merely an aide-memoir in
case you need to make another change, later).  The \texttt{!!} signs
tell the file-searching library that it should insist on a
\ProgName{texhash}-ed directory tree; if you can count on yourself
remembering to run \ProgName{texhash} on your new tree every time you
change it, then it's worth adding the marks to your tree:
\begin{quote}
\begin{narrowversion}
\begin{verbatim}
TEXMF = {!!$HOMETEXMF,!!$LOCALTEXMF,
                       !!$TEXMFMAIN}
\end{verbatim}
{\small Note that the line is only wrapped to make it
  fit in the column; there should be no line break or space between
  the final comma on the line and the \texttt{!!} on the next line.\par
}%
\end{narrowversion}
\begin{wideversion}
\begin{verbatim}
TEXMF = {!!$HOMETEXMF,!!$LOCALTEXMF,!!$TEXMFMAIN}
\end{verbatim}
\end{wideversion}
\end{quote}
as this will make \AllTeX{} find its files marginally faster.

Having made all these changes, \AllTeX{} should ``just use'' files in
your new tree, in preference to anything in the main tree~--- you can
use it for updates to packages in the main tree, as well as for
installing new versions of things.

\Question[Q-instfont]{Installing a new font}

Fonts are really ``just another package'', and so should be installed
in the same sort of way as packages.  However, fonts tend to be more
complicated than the average package, and as a result it's sometimes
difficult to see the overall structure.

Font files may appear in any of a large number of different formats;
each format has a different function in a \TeX{} system, and each is
stored in a directory its own sub-tree in the installation's
\acro{TDS} tree; all these sub-trees have the directory
\File{$TEXMF/fonts} as their root.  A sequence of answers%
\nothtml{, below,} describes the installation of fonts\latexhtml{.}{:}
\begin{htmlversion}
follow the list through the ``next question'' links at the bottom of
this answer to view them all.
\end{htmlversion}
Other answers discuss specific font families~--- for example,
% ! line break
``\Qref*{using the concrete fonts}{Q-concrete}''.

\Question[Q-instmffont]{Installing a font provided as \MF{} source}

Metafont fonts are (by comparison with other sorts of font) rather
pleasingly simple.  Nowadays, they are mostly distributed just as the
\MF{} source, since modern \TeX{} distributions are able to produce
everything the user needs ``on the fly''; however, if the distribution
\emph{does} include \acro{TFM} files, install them too, since they
save a little time and don't occupy much disc space.  Always distrust
distributions of \acro{PK} font bitmap files: there's no way of
learning from them what printer they were generated for, and naming
schemes under different operating systems are another source of
confusion.

``\Qref*{Where to install files}{Q-install-where}''
specifies where the files should go.

Further confusion is introduced by font families whose authors devise rules
for automatic generation of \MF{} sources for generating fonts at
particular sizes; the installation has to know about the rules, as
otherwise it cannot generate font files.

\Question[Q-instprinterfont]{Installing a \PS{} printer built-in font}

There is a ``standard'' set of fonts that has appeared in every \PS{}
printer since the second generation of the type.  These fonts
(8~families of four text fonts each, and three special-purpose fonts)
are of course widely used, because of their simple availability.  The
set consists of:
\begin{itemize}
\item \FontName{Times} family (4 fonts)
\item \FontName{Palatino} family (4 fonts)
\item \FontName{New} \FontName{Century} \FontName{Schoolbook} family (4 fonts)
\item \FontName{Bookman} family (4 fonts)
\item \FontName{Helvetica} family (4 fonts)
\item \FontName{Avant} \FontName{Garde} (4 fonts)
\item \FontName{Courier} family (4 fonts)
\item \FontName{Utopia} family (4 fonts)
\item Zapf \FontName{Chancery} (1 font)
\item Zapf \FontName{Dingbats} (1 font)
\item \FontName{Symbol} (1 font)
\end{itemize}
All these fonts are supported, for \LaTeX{} users, by the
\Package{psnfss} set of metrics and support files in the file
\File{lw35nfss.zip} on \acro{CTAN}.  Almost any remotely modern \TeX{}
system will have some version of \Package{psnfss} installed, but
users should note that the most recent version has much improved
coverage of maths with \FontName{Times} (see package
\Package{mathptmx}) and with \FontName{Palatino} (see package
\Package{mathpazo}, as well as a more reliable set of font metrics.

The archive \File{lw35nfss.zip} is laid out according to the
\acro{TDS}, so in principle, installation consists simply of
``unzipping'' the file at the root of a \path{texmf} tree.

Documentation of the \Package{psnfss} bundle is provided in
\File{psnfss2e.pdf} in the distribution.
\begin{ctanrefs}
\item[mathpazo.sty]Part of the \Package{psnfss} bundle
\item[mathptmx.sty]Part of the \Package{psnfss} bundle
\item[psnfss \nothtml{\rmfamily}bundle]\CTANref{psnfss}
\end{ctanrefs}

\Question[Q-prept1font]{Preparing a Type~1 font}

The process of installing a Type~1 font set is rather convoluted, and
we will deal with it in two chunks: first (in the present answer)
preparing the font for installation, and second % ! line break
\Qref*{installing a Type~1 font}{Q-instt1font}).

Many fonts are supplied in \AllTeX{} ready form: such fonts need no
preparation, and may be installed immediately.

However, if you purchase a font from a Type foundry (either direct or
via one of the web stores), you are likely to need to `prepare' it for
use with \AllTeX{}.  The rest of this answer discusses this preparation.
\begin{itemize}
\item Acquire the font.  A very small set of Type~1 fonts is installed
  in most \PS{} printers you will encounter.  For those few (whose use
  is covered by the basic \acro{PSNFSS} package), you don't need the
  Type~1 font itself, to be able to print using the font.

  For all the myriad other Type~1 fonts, to be able to print using
  the font you need the Type~1 file itself.  Some of these are
  available for free (they've either been donated to the public
  domain, or were developed as part of a free software project), but
  the vast majority are commercial products, requiring you to spend
  real money.
\item Acquire the fonts' \acro{AFM} files.  \acro{AFM} files contain
  information from the font foundry, about the sizes of the characters
  in the font, and how they fit together.  One measure of the quality
  of a font-supplier is that they provide the \acro{AFM} files by
  default: if the files are not available, you are unlikely to be able
  to use the font with \AllTeX{}.
\item Rename the \acro{AFM} files and the Type~1 files to match the
  \Qref*{Berry font naming scheme}{Q-fontname}.
\item Generate \TeX{} metric files from the \acro{AFM} files.  The
  commonest tool for this task is \Package{fontinst}; the package
  documentation helps, but other guides are available (see below).
  The simplest possible script to pass to \Package{fontinst} is:
  \begin{quote}
\begin{verbatim}
\latinfamily{xyz}{}
\bye
\end{verbatim}
  \end{quote}
  where \texttt{xyz} is the Berry name of the font family.  This
  simple script is adequate for most purposes: its output covers the
  font family in both \acro{T}1 and \acro{OT}1 font encodings.  Nevertheless,
  with fancier fonts, more elaborate things are possible with
  \Package{fontinst}: see its documentation for details.

  \Package{Fontinst} also generates map files, and \LaTeX{} font
  definition (\extension{fd}) files.
\end{itemize}
Having traversed this list, you have a set of font files ready for
installation.
\begin{ctanrefs}
\item[fontinst.sty]\CTANref{fontinst}
\item[\nothtml{\rmfamily}Type 1 installation guide]\CTANref{T1instguide}
\end{ctanrefs}


\Question[Q-instt1font]{Installing a Type~1 font}

Once you have a prepared Type~1 font, either direct from \acro{CTAN}
or the like, or having \Qref*{`prepared' it yourself}{Q-prept1font},
you can get on with installation.

The procedure is merely an extension of that for packages, etc., so
much of what follows will be familiar:
\begin{itemize}
\item Install the files, in your local \texttt{texmf} tree (the advice
  about installing non-standard things applies here, too).  The
  following list gives reasonable destinations for the various files
  related to a font family \meta{fname}:
\begin{verbatim}
.pfb,
.pfa  .../fonts/type1/<foundry>/<fname>
.tfm  .../fonts/tfm/<foundry>/<fname>
.vf   .../fonts/vf/<foundry>/<fname>
.sty,
.fd   .../tex/latex/<fname>
.map  .../fonts/map/dvips/<foundry>
\end{verbatim}
  but if you are lucky, you will be starting from a distribution from
  \acro{CTAN} and there is a corresponding \extension{tds.zip} file:
  using the \acro{TDS}-file saves the bother of deciding where to put
  your files in the \acro{TDS} tree.
\item Regenerate the file indexes (as described in
  \Qref[question]{package installation}{Q-inst-wlcf}).
\item Update the \ProgName{dvips}, \PDFTeX{} and other maps:
  \begin{itemize}
  \item On any current \texlive{}-based system, or a te\TeX{} v3.0
    system, execute the command
    \begin{quote}
\begin{verbatim}
updmap-sys --enable Map <fname>.map
\end{verbatim}
    \end{quote}
    as root.  (Do \emph{not} use plain \ProgName{updmap}: it's a
    potent source of confusion, setting up different map sets
    for different users.)
  \item On a current \miktex{} system, update the system file
    \File{updmap.cfg}, using the shell command
    \begin{quote}
\begin{verbatim}
initexmf --edit-config-file updmap
\end{verbatim}
    \end{quote}
    adding a line at the end:
    \begin{quote}
\begin{verbatim}
Map <fname>.map
\end{verbatim}
    \end{quote}
    for each font family \meta{fname} you are adding to the system.
    Now generate revised maps with the shell command
    \begin{quote}
\begin{verbatim}
initexmf --mkmaps
\end{verbatim}
    \end{quote}
    This, and other matters, are described in \miktex{} % beware line break
    \href{http://docs.miktex.org/manual/advanced.html}{``advanced'' documentation}.
  \end{itemize}
\end{itemize}
Both processes (preparing and installing a font) are very well (and
thoroughly) described in Philipp Lehman's guide to font installation,
which may be found on \acro{CTAN}.
\begin{ctanrefs}
\item[fontinst.sty]\CTANref{fontinst}
\item[\nothtml{\rmfamily}Type 1 installation guide]\CTANref{T1instguide}
\end{ctanrefs}

\Question[Q-inst1cm]{Installing the Type~1 versions of the CM~fonts}

This is a specialised case of \Qref*{installing a font}{Q-instfont},
but it is almost never necessary~--- it's inconceivable that any (even
remotely) recent system will \emph{not} have the fonts already
installed.  You can confirm this (near-inevitable) fact by trying the
fonts.  On a system that uses \ProgName{dvips} (almost all do), try
the sequence:
\begin{quote}
\begin{verbatim}
  latex sample2e
  dvips -o sample2e.ps sample2e
\end{verbatim}
\end{quote}
at a ``command prompt'' (\ProgName{shell}, in a Unix-style system,
``\acro{DOS} box'' in a Windows system).

If the command works at all, the console output of the command will
include a sequence of Type~1 font file names, listed as
\texttt{<cmr10.pfb>} and so on; this is \ProgName{dvips} telling you
it's copying information from the Type~1 font, and you need do no
more.

If the test has failed, you need to install your own set of the fonts;
the distribution (including all the fonts the \acro{AMS} designed and
produced themselves) is now described as \Package{amsfonts}.  The
bundle contains metric and map files~--- all you need to
\Qref*{install the fonts}{Q-instt1font}.

\begin{ctanrefs}
\item[AMS and CM fonts, in Type 1 format]\CTANref{amsfonts}
\end{ctanrefs}


