% teTeX main documentation file
% tetex by Thomas Esser
% this file maintained by Craig Bateman

\documentclass[12pt,a4paper]{article}
\usepackage{anysize,mflogo,xspace,texnames}

\newcommand{\teTeX}{\textrm{te}\TeX\xspace}
\newcommand{\Linux}{\textrm{Linu}\textsf{X}\xspace}
% \newcommand{\MF}{\textlogo{Metafont}\xspace}
\newcommand{\smiley}{\texttt{ :-)}\xspace}

\title{The \teTeX{} Guide --- Installation and Maintenance}
\author{Thomas Esser, Dirk Hillbrecht, Craig Bateman}
\date{June 1996}

\begin{document}

\maketitle

\begin{abstract}

  This documentation describes the main features of the
  \teTeX distribution, a \TeX{}/\LaTeX{} distribution
  that includes \TeX{}, \LaTeXe{}, \MF{} and many further
  programs as dvips, xdvi, \BibTeX{}, etc.

  \teTeX{} wants to make \TeX{}ing from within Unix as easy as
  possible, and takes full advantage of the efficient and highly
  customizable Kpathsea-library from Karl Berry.

\end{abstract}

\tableofcontents

\newpage

\section{Introduction}
\label{sec:int}

Welcome to the documentation of
\teTeX{}, a \TeX{} distribution for UNIX-like platforms.
\teTeX{} was mainly set up by Thomas Esser, {\tt
  te@informatik.uni-hannover.de}, whose work heavily bases on Karl
Berry's {\tt Kpathsea}-library, his {\tt web2c}-package and the
associated packages as {\tt dvipsk} etc.

Furthermore, there is me. As Thomas had so much trouble with the
binaries, the fonts, the directory-organisation, and the additional
script files, not to mention the fonts, the directory-organisation,
the binaries and of course all of those nifty little additional
scripts\dots Oh, it seems as if I repeat myself\dots As it is, I
offered to write a little documentation and do some beta-testing
of his package.

So here we are now. If you find anything about the programs
themselves, Thomas is the right address to tell.  If you want to make
any remarks on the documentation, esp. this file, bother me: Dirk
Hillbrecht, {\tt dh@informatik.uni-hannover.de}.

\subsection{Features}
\label{ssec:fea}

OK. What is it now, this remarkable new \TeX{}? What makes it so
different from other \TeX{}s? Well, in the first place, it was
assembled within approximately half a year, thinking about this topic
and that feature, testing this and that program, finding one and
another bug, having great ideas of a perfect directory tree --- and
throwing them away again\dots So you see, this \TeX{} has been done
with a lot of attention and passion. We really think it to be superiour
to most other \TeX{} implementations.

\medskip

Furthermore, there are the following highlights:

\begin{itemize}

\item Multiplatform usability. \teTeX{} is known to run on the following
platforms: 

\begin{itemize}
\item Linux on Intel, Alpha and PowerPC platforms;
\item SGI Irix 5.3, 6.2
\item SunOS 4.1.3 on SPARC
\item Solaris 2.4, 2.5 on SPARC
\item FreeBSD 2.1.5 on Intel
\item NetBSD 1.2 on Intel
\item Ultrix 4.3, 4.4 on Mips
\item IBM RS6000 AIX 3.2.5, 4.1.4, 4.2.0
\item PowerPC AIX 3.2.5, 4.1.4
\item Digital Unix 3.2, 4.0
\item NEXTSTEP (NeXT,Intel,HP-PA,SPARC)
\item Convex C-110, C-210
\item HP-PA/HP-UX 9.xx, 10.xx
\item HP 400/HP-UX 9.xx
\end{itemize}

Other platforms are planned for the future.

\item Fully compile-time independent. \teTeX{} can be
  installed in any directory in your system. You even do not
  need to set any environment variables. The binaries will
  find themselves automatically once they are called.  Of
  course, you can set environment variables to change or
  enlarge your search paths.
  
\item Installation and maintenance utilities for the whole
  package make these difficult topics much easier,
  especially for inexperienced users.
  
\item Very fast file searching using all features of the
  {\tt Kpathsea}-library v2.6 (even within the web2c
  package).
  
\item The {\tt kpsetool} as a run time interface to all the
  search paths of the \teTeX{} programs.
  
\item Ready-to-use font families: cm, dc, charter,
  oldgerman, ams, pandora, adobe and some special ones.
  
\item Ability to cope with the whole bunch of standard
  PostScript$^{\textrm{TM}}$ fonts \emph{even usable with the
    normal {\tt xdvi}-viewer}.
  
\item Latest version of \LaTeXe{} (1995/06/01), including
  the \emph{official} {\tt amstex} package version 1.2 for
  \LaTeXe{} (formerly known as \AmSLaTeX{}).
  
\item Lots and lots of really useful documentation in {\tt
    texmf/doc}, even made accessible through WWW-Browsers
  like Netscape (or Mosaic).

\end{itemize}

\subsection{Series and Locations}
\label{ssec:pac}

The \teTeX distribution is split into two series: The
\emph{Base Series} and the \emph{Goodies Series}. These
series themselves are split up again into several
packages ({\tt .tgz}-files) that contain all the
system-independent files.

\smallskip

The \emph{Base Series} contains everything that is needed to
handle the common \TeX{}-stuff: compile a source, preview
the document, convert it into PostScript and print it. If
you know how to embed this into your favourite editor and
can print PostScript files (e.g. via GhostScript), you will
not need more than this series.

The \emph{Goodies Series} brings some useful things to you
such as some more dvi-drivers,
lots of documentation, and many additional fonts. When
having these both series you have everything for a complete
\TeX{}-Development-System.  Not bad, is it?

Having these two you can do --- nothing. As mentioned, these
series do not contain any system-dependent files, like e.g.
binaries.

But some people want even more! The \emph{Source Series}
brings you all the sources needed to compile the
\teTeX{}-binaries yourself.  Having this one, you may even
try to convert \teTeX{} to another platform --- as we do.
\emph{You will not need the Source Series for normal \TeX{}
  work.}

\subsection{Related software and Requirements}
\label{ssec:req}

There are some programs not included in \teTeX{}, but which
are quite useful indeed:

\begin{itemize}
  
\item X11: Without the graphical environment you will not be
  able to preview your documents (as long as you do not
  install an SVGA-based dvi-previewer on your own).
  Fortunately, X11 is available on most UNIX platforms. The
  {\tt virtex} and {\tt xdvi} programs need dynamic X11
  libraries. As both XFree86-3.1 and XFree-2.X are in common
  use, these two binaries come in two versions: One is
  dynamically linked against the X11R6 libraries (from
  XFree86-3.1) and the other one against the old X11R5
  libraries from XFree86-2.X.
  
\item GhostScript: \teTeX{} uses GhostScript for everything
  concerning the Post\-Script fonts and for general printing
  (not using a special dvi driver) on a non-PostScript
  printer. This program is also part of every larger
  \Linux{}-distribution and should be available, too.

\end{itemize}

Of course you will need some disk space too. These are:
approx. 10 MB for the \emph{Base series}, approx. 15 MB for
the full \emph{Goodies series} and 13 MB for the full
\emph{Source series} (and an additional 10 MB if you actually
want to compile them).

In addition, you will need approx. 5 - 20 MB for pk fonts,
depending on
\begin{itemize}
\item the resolution of your printer
\item how much the fonts in your documents vary
\item how much you use \teTeX
\end{itemize}

Last not least, your printer(s) must be up and running.

With \teTeX{} you have several possibilities to print your {\tt
  dvi}-files:

\begin{itemize}
\item With {\tt dvips} directly to a PostScript printer. You
  need to know the logical name of your printer (= the name
  used by {\tt lpr} or {\tt lp} or whatever your printer
  access program is) and the \MF{}-mode (the resolution will
  automatically be calculated during the configuration
  process).
\item With {\tt dvips} to a non-PostScript printer. This
  requires some configuration of your
  \verb|/etc/printcap|-file, because a so-called \emph{input
    filter} needs to convert the PostScript input into an
  output understood by your printer. For most printers, this
  can be done with GhostScript (type {\tt gs -help} to get a
  list of printers supported by your version of
  GhostScript). The setup of such an input filter (and even
  much more) can easily be done with the {\tt
    apsfilter}-program which is available from the German site {\tt
    ftp-i2.informatik.rwth-aachen.de} in the directory {\tt
    /pub/Linux/pak/APSfilter} (see the
  Linux-Software-Map for mirror sites).
\item With a specific printer driver such as {\tt dvilj4}.
  The driver knows what kind of output the printer
  understands. In general, you only need the logical name of
  the printer.
\end{itemize}


\subsection{\teTeX{} for em\TeX{}-Users}
\label{ssec:tet}

For many people working with \TeX{} on a PC \TeX{} is equal
with em\TeX{}, the best-known and widest spread \TeX{}
distribution. Its binaries are OS/2 only indeed\footnote{It
  will run under DOS also, but it is not any fun
  there\dots}, so it is not usable under \Linux{}. But
\teTeX{} might be kind of a replacement for it under
\Linux{}: Like em\TeX{}, this should be an easy-to-use-\TeX{}
that can be installed by the average user and is fast and
convenient. Below, there are the most important changes
between em\TeX{} and \teTeX{}:

\begin{itemize}
  
\item \teTeX{} does not need any environment variables to
  run as long as you keep the given directory structure (but
  you can use environment variables to make \teTeX{} search
  your private input directories, e.g. {\tt setenv TEXINPUTS
    \~{}/TeX//:} will make \TeX{} search your private macros
  below the {\tt TeX}-directory in your home directory and
  then the standard locations).
  
  You can use the {\tt kpsepath}-program to display the
  run-time paths.
  
\item Although both \teTeX and em\TeX{} are fast (em\TeX{} is
  only fast when you can use the protected mode binaries on
  a 386 or higher), it is a major advantage of \teTeX to run
  in a real multitasking environment: you can continue
  editing your text while the previewer is running and your
  document is being processed by \TeX{}.

\item You can obtain all the sources of \teTeX --- there are no secrets.
\end{itemize}

\section{Installation}
\label{sec:ins}

The way you install \teTeX depends on what version and
source media you have. If you get \teTeX as part of a \Linux
distribution, just install it the same way you do for other
packages of your distribution.

If you get \teTeX as a stand-alone package, there are two ways to
install: from sources or using precompiled binaries. See the file 
{\tt INSTALL.src} or {\tt INSTALL.bin}, respectively, for
instructions. The binary installation is nothing more than unpacking
the archives and running texconfig. The compilation of the sources can
be done with a {\tt make world} from the top-level directory. But, you
will need recent versions of {\tt gcc}, {\tt flex} and {\tt GNU make}
for the compilation.

\subsection{{\tt texconfig}}
\label{ssec:tex}

After the installation program has copied all files to their
final locations it calls a program called {\tt texconfig}
that allows you to configure \teTeX{} to fit your local
needs.

\section{Using and maintaining te\TeX}
\label{sec:using}

\subsection{The directory structure --- Where are my files?}
\label{ssec:locs}

\teTeX{} comes with a very clearly structured directory tree
which is described in the following:

In the first order, we distinguish between site-dependent
programs such as {\tt xdvi}, {\tt dvips} or {\tt dvicopy},
which have their files in {\tt bin, man, info} subdirectories of 
{\tt \$TETEXDIR}.

The site independent \TeX files are installed below the directory
\verb|$TEXMF|, which defaults to {\tt \$TETEXDIR/texmf}.  \verb|texmf|
stands for ``\TeX{} and more'' and is often spoken as ``\TeX{} and
friends''.

Here we find inputs for \TeX{}, \MF{}, \BibTeX{} and all the
sources and metrics of the fonts.

The organisation follows the ``TeX Directory Standard'' (TDS) to a
large extent. See file {\tt \$TEXMF/doc/help/tds.dvi} for more
information about the TDS.

\subsection{The input file database}
\label{ssec:the}

As you perhaps have already noticed, \teTeX{} is fast. Very
fast.  Quite extraordinarily fast. This is due to a fantastic
feature of the {\tt Kpathsea}-library: The
\emph{input file database}. This is not much more than the
output of a simple {\tt ls -LAR}-command, running over the
\verb|$TEXMF|-directory tree. The \TeX{} programs can read
this database once at the beginning of their run (which is a
fast operation), store it in a hash table and then look up
any needed file in this database rather than searching the
whole directory tree on the disk (which is --- due to the
so-called {\tt stat}-operation --- very time-consuming).

The database can be found in the \verb|$TEXMF|-directory and
is called almost like the command to produce it: {\tt ls-R}
and it can be maintained through three different programs:

\begin{enumerate}
\item {\tt texhash}. The {\tt texhash} program builds the
  database from scratch by scanning the whole {\tt
    texmf}-directory-tree and putting the output of the {\tt
    ls}-command into the (newly created) {\tt ls-R}-file.
  
\item {\tt append\_db}. This little shell-script is
  especially for the case that a new font has been created
  and therefore should be entered into the database. {\tt
    append\_db} gets the font's file name and its location
  and creates then an {\tt ls -LR}-like entry for this one
  font at the end of the {\tt ls-R}-file.
\end{enumerate}

What can one do with these scripts now and where are the
pitfalls in their use?

For the following, assume a system, where are two users,
{\tt adm} and {\tt foo}. Both are non-priviledged, but {\tt
  adm} installed \teTeX{} and {\tt foo} uses it.

While the installation, {\tt adm} ran {\tt texhash} (automatically
during installation). So the {\tt ls-R}-file is his. Now
{\tt foo} comes, compiles a file and previews it. Therefore one or
more fonts are created and stored --- and have to be appended to {\tt
  ls-R}. This is done by {\tt foo} and therefore with his privileges
--- and these include assurently not to write into {\tt adm}'s
files!

So, we have a problem. There are new files on the disk that
are not listed in the database. Each lookup of one of these
files will cause time-consuming search operations on the
disk, or -- if disk searching is disabled (i.e. when the
path component is prefixed by !!)  -- it might happen that
those files are not found or that MakeTeXPK or MakeTeXTFM
are accidently called.

In the following we give some hints how to avoid such
problems:

\begin{enumerate}
  
\item Make {\tt ls-R} world-writeable. This is the easiest
  solution, and should be safe enough for most sites.
  \teTeX{} is installed this way when it comes out of the
  box.
  
\item Create a new group {\tt tex} and make {\tt ls-R}
  writable for this group. Then, rename {\tt append\_db} to
  {\tt append\_db.sh} and call the renamed shell-script from
  a small set-GID programm (written in C) with the name {\tt
    append\_db}.
  
  This will give you some more security (sa ls-R no longer
  needs to be world-writable), but it requires some more
  administration whilst the installation (esp. {\tt root}'s
  privileges to make the {\tt tex}-group), so \teTeX{} does
  \emph{not} install itself like this in the first place.
\end{enumerate}

In any case, you need to run {\tt texhash} after installing
new styles or fonts below \verb|$TEXMF|. %$

For additional information about the library and file
searching in \teTeX{}, see the documentation in the {\tt
  Kpathsea}-package.

\subsection{Adding new fonts}
\label{ssec:adf}

\teTeX comes with many fonts included. But perhaps you need
more fonts, e.g. your firm specific name font. The question
is: Where to put it?

The following table shows where to put the font related
files, depending on their type. In general, this type is
given by the extension of the filename:\medskip

\begin{tabular}{|c|c|}
\hline
{\rmfamily file} & to \\ \hline
.fd & \$TEXMF/tex/latex/{\it package}\\
.mf & \$TEXMF/fonts/source/{\it source}/{\it typeface} \\
.tfm & \$TEXMF/fonts/tfm/{\it source}/{\it typeface} \\
.afm, .vf, \dots & \$TEXMF/fonts/\{afm,vf,...\}/{\it source}/{\it typeface}\\
.pfa, .pfb & \$TEXMF/fonts/type1/{\it source}/{\it typeface} \\
.*pk & \$TEXMF/fonts/pk/{\it source}/{\it typeface}/{\it mf-mode} \\
\hline
\end{tabular}\medskip

{\tt \$TEXMF} is the directory given in the installation
process to put the site-independent stuff. To get the
run-time value of {\tt \$TEXMF} you can run {\tt kpsexpand
  '\$TEXMF'}.

{\it source} is the name of the font distributor, such as
\AmS, Bitstream, Adobe, or {\tt public} for freely
distributable fonts.  {\it typeface} is the name of the font
family, e.g.\ Computer Modern {\tt cm}.

\subsection{A note on X support for \MF}

If \MF{} does not support seem to support the X window
system, your virmf binary is compiled without support for
the X window system. If there exists a virmf.X binary, that
one has the missing X support you need. The easiest way to
use it is to change the symbolic link \texttt{mf $\to$
  virmf}. Example:
\begin{verbatim}
cd /usr/local/teTeX/bin/i386-linux
rm mf
ln -s virmf.X mf
\end{verbatim}

\subsection{Adding new system-wide styles}
\label{ssec:ads}

A new style should be put below {\ttfamily \$TEXMF/tex/{\it
    format}/{\it package}} for all formats (e.g. plain,
latex, eplain).

To avoid {\it package} directories containing only a single
style file, use {\tt misc} directory for these instead.

Examples:

\begin{verbatim}
$TEXMF/tex/ams/amssym.tex
$TEXMF/latex/graphics/epsfig.sty
$TEXMF/latex/misc/anysize.sty
\end{verbatim}

The documentation for styles is held separately in the
directories below {\ttfamily \$TEXMF/doc}.

\subsection{User-dependent configuration}
\label{ssec:use}

On a site with lots of users, all these users may have their
own style files that are not to be copied into the common
\teTeX{} tree. There are several possibilities to make these
files visible for the \TeX{} programs:

\begin{itemize}
\item The {\ttfamily .sty}-file can be copied into the
  current directory.  This directory is searched by default.
  Of course, this is only sensible if the style is very
  proprietary and for just a single \TeX{} source.
  
\item Every user can change the {\ttfamily TEXINPUTS}
  environment variable. Anyway, they should ensure that \teTeX
  's own paths are searched, too. This can be done by putting
  a colon in the beginning or at the end of the path or a
  doubled colon in the middle. Such an empty path component
  will be replaced by the default path.
  
  Typical settings for \emph{csh} and \emph{tcsh} could be
  
  \verb|setenv TEXINPUTS :~/TeX/mystyles|
  
  or for \emph{bash} or \emph{sh}:
  
  \verb|export TEXINPUTS=~/TeX/mystyles:|
  
\item At least, the \TeX -Administrator himself can take care of the
  user's style files by putting something like \verb|...:~/TeX//| into
  the {\ttfamily TEXINPUTS}-statement in the {\ttfamily texmf.cnf}
  file in \teTeX{}'s base directory. The two slashes mean to search
  recursively in all subdirectories.
\end{itemize}


%\subsection{Conforming the Linux Filesystem Standard}

%The Linux Filesystem Standard claims, that {\tt /usr} should be
%mountable read-only. This does not work with the standard \teTeX{}
%installation since \teTeX{} writes its fonts below {\tt
%  /usr/.../tex/\$TEXMF/fonts}. This behaviour can be changed indeed, so
%that the fonts are stored below e.g. {\tt /var/tex/fonts} Do the
%following for this:

%\begin{itemize}
%\item change the {\tt MTPK\_DESTROOT} variable in {\tt texmf.cnf} to {\tt /var/tex/fonts}.

%\item Create the directories {\tt \${}MTPK\_DESTROOT/public/cm/pk}, {\tt \${}MKPK\_DESTROOT/public/dc/pk} and so on
%  (in fact, copy the whole directory structure below {\tt \${}TETEXDIR/\$TEXMF/fonts} that has something to do
%  with the {\tt .pk}-files) and make a {\tt chmod 1777} on all these directories.

%\item Enlarge the following search paths in {\tt texmf.cnf} as follows

%\verb|setenv PKFONTS ':$MTPK_DESTROOT//pk/$MAKETEX_MODE'|

%\verb|setenv TFMFONTS ':$MTPK_DESTROOT//tfm'|
%\end{itemize}

\subsection{Fonts again: Creation on suspicion, import, export}
\label{ssec:fon}

When you start working with \teTeX{}, you have no {\tt
  .pk}-files.  This is due to the fact that every
resolution needs its own {\tt .pk}-files (they contain the
pixel information about the letters).  So it would not be of
any use to you if \teTeX{} came with precalculated fonts
for an Epson Stylus (360 dpi) whilst you have a HP Laserjet
IV (and need therefore fonts with 600 dpi resolution).
\teTeX{} calculates these files ``on demand'', that means if
and only if they are needed.

Nevertheless it is quite annoying to wait for the first
documents created with the \teTeX -series several minutes,
because of \MF{} calculating the needed fonts. Fortunately,
there are some possible ways to shorten this time (perhaps
down to 0):

\begin{enumerate}
  
\item Calculate a large bunch of fonts just on suspicion.
  You just start {\tt allcm -m {\it
      mode}} or {\tt allec -m {\it mode}} --- and go away.
  Depending on the power of your computer these programs
  will work several minutes, hours or days to calculate all
  fonts \LaTeX{} will need of the Computer Modern or ec-fonts
  for the given {\tt mode}.  On the one hand this might be
  an overkill, filling lots of your disk space with useless
  fonts (useless for you, because none of your documents use
  them), but on the other hand it is sure that there are no
  fonts missing to show almost any document immediately.
  
\item Calculate all the fonts needed to show the documents
  existing on your system. This may be of interest for you
  if you have a large number of documents and bought a new
  printer with a different resolution. Just run the {\tt
    allneeded} script. This script will search the given
  directories for {\tt .dvi}-files and run them through {\tt
    dvips} and (optionally) {\tt dvired} (with the
  PostScript output sent to {\tt /dev/null} \smiley). The
  nice side-effect of this operation is that the {\tt dvips}
  will call {\tt MakeTeXPK} to create the needed fonts, and
  the result of this is, that all the {\tt .dvi}-files on
  your system are processable without delay --- as long as
  you do not produce new ones that use different fonts, of
  course \smiley .
  
\item Import font files from a different \TeX -Installation.  This can
  be done through the program {\tt fontimport}. We even provide a
  possibility to exchange fonts between \teTeX{} and \TeX{}
  implementations using short filenames ({\tt dpi300/cmr10.pk} instead
  of {\tt cmr10.300pk}), just call {\tt fontimport} or {\tt fontexport
    -d}. For details, refer to {\tt fontimport(1)} and {\tt
    fontexport(1)}.
\end{enumerate}

%\section{Usage}
%\label{sec:use}

%So, it's done! When you are here reading, you have installed \teTeX{} properly and want to know what to do now, won't you? The 

%\subsection{Common \TeX{}-runs}
%\label{ssec:com}

%\subsection{Using the {\tt kpsetools}}
%\label{ssec:kps}

%\section{Embedding in other programs}
%\label{sec:emb}

%\subsection{emacs \& auctex --- The Dynamic Duo}
%\label{ssec:ema}

%\subsection{ispell}

%\subsection{Useful aliases}

\end{document}
% Ende des Quelltextes geschrieben von Dirk Hillbrecht, 09/94
