diff options
Diffstat (limited to 'Master/texmf-dist/doc/generic/tds/tds.tex')
-rw-r--r-- | Master/texmf-dist/doc/generic/tds/tds.tex | 1585 |
1 files changed, 1585 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/generic/tds/tds.tex b/Master/texmf-dist/doc/generic/tds/tds.tex new file mode 100644 index 00000000000..55c1b4ddcc3 --- /dev/null +++ b/Master/texmf-dist/doc/generic/tds/tds.tex @@ -0,0 +1,1585 @@ +%&latex +% $Id: tds.tex,v 1.43 2004/06/23 17:24:42 karl Exp $ +\NeedsTeXFormat{LaTeX2e} % compatibility with 2.09 is too painful +\documentclass{tdsguide} + +\tdsVersion{1.1} + +\title{A Directory Structure for \TeX{} Files} +\author{TUG Working Group on a \TeX{} Directory Structure (TWG-TDS)} + +\begin{document} + +\maketitle + +\begin{legalnotice} + +Copyright {\copyright} 1994, 1995, 1996, 1997, 1998, 1999, 2003, 2004 +\TeX{} Users Group. + +Permission to use, copy, and distribute this document \emphasis{without +modification} for any purpose and without fee is hereby granted, +provided that this notice appears in all copies. It is provided ``as +is'' without expressed or implied warranty. + +Permission is granted to copy and distribute modified versions of this +document under the conditions for verbatim copying, provided that the +modifications are clearly marked and the document is not represented as +the official one. + +This document is available on any \abbr{ctan} host +(see Appendix~\ref{sec:Related references}). +Please send questions or suggestions by email to +\email|tds@tug.org|. We welcome all comments. This is version +\the\tdsVersion. + +\end{legalnotice} + + +\tableofcontents + + +\newpage +\section{Introduction} + +\TeX{} is a powerful, flexible typesetting system used by many people +around the world. It is extremely portable and runs on virtually all +operating systems. One unfortunate side effect of \TeX{}'s flexibility, +however, is that there has been no single ``right'' way to install it. +This has resulted in many sites having different installed arrangements. + +The primary purpose of this document is to describe a standard \TeX{} +Directory Structure (\abbr{TDS}): a directory hierarchy for macros, +fonts, and the other implementation-independent \TeX{} system files. As +a matter of practicality, this document also suggests ways to +incorporate the rest of the \TeX{} files into a single structure. The +\abbr{TDS} has been designed to work on all modern systems. In +particular, the Technical Working Group (\abbr{TWG}) believes it is usable +under Mac\abbr{OS}, \abbr{ms-dos}, \abbr{os/2}, Unix, \abbr{vms}, and +Windows \abbr{nt}\@. We hope that administrators and developers of both +free and commercial \TeX{} implementations will adopt this standard. + +This document is intended both for the \TeX{} system administrator at a +site and for people preparing \TeX{} distributions---everything from a +complete runnable system to a single macro or style file. It may also +help \TeX{} users find their way around systems organized this way. It +is not a tutorial: we necessarily assume knowledge of the many parts of +a working \TeX{} system. If you are unfamiliar with any of the programs +or file formats we refer to, consult the references in +Appendix~\ref{sec:Related references}. + + +\subsection{History} + +Version 1.0 of the \abbr{TDS} was released in February 2003. + +Version 1.1 was released in June 2004, with the following non-editorial +changes: + +\begin{itemize-squeeze} +\item Inputs for \TeX{} extensions included under \path|tex|, instead + of in their own top-level directories (Section~\ref{sec:Extensions}) +\item New top-level directory \path|scripts| (Section~\ref{sec:Scripts}). +\item New subdirectories \path|lig|, \path|opentype|, + \path|truetype|, and \path|type3| under \path|fonts| + (Section~\ref{sec:Fonts}). +\item \path|enc|, \path|lig|, and \path|map| all use + \replaceable{syntax}\path|/|\replaceable{package} subdirectories + (Section~\ref{sec:Fonts}). +\item \path|pfm| files specified to go under \path|type1|, and + \path|inf| files under \path|afm| (Section~\ref{sec:Fonts}). +\end{itemize-squeeze} + + +\subsection{The role of the \abbr{TDS}} + +The role of the \abbr{TDS} is to stabilize the organization of +\TeX{}-related software packages that are installed and in use, possibly +on multiple platforms simultaneously. + +At first glance, it may seem that the Comprehensive \TeX{} Archive +Network (\abbr{ctan}) fulfills at least part of this role, but this is +not the case. The role of \abbr{ctan} is to simplify archiving and +distribution, not installation and use. + +In fact, the roles of the \abbr{TDS} and \abbr{ctan} are frequently in +conflict, as we will see. For distribution, many different types of +files must be combined into a single unit; for use, it is traditional to +segregate files (even similar files) from a single package into +separate, occasionally distant, directories. + + +\subsection{Conventions} + +In this document, ``\path|/|'' is used to separate filename components; +for example, \path|texmf/fonts|. This is the Unix convention but the +ideas are in no way Unix-specific. + +In this document, ``\TeX{}'' generally means the \TeX{} system, including +\MF{}, \abbr{DVI} drivers, utilities, etc., not just the \TeX{} +program itself. + +The word ``package'' in this document has its usual meaning: a set of +related files distributed, installed, and maintained as a unit. This is +\emphasis{not} a \LaTeXe{} package, which is a style file supplementing +a document class. + +We use the following typographic conventions: + +\begin{description} + +\item[\literal{literal}] Literal text such as \literal{filename} is +typeset in typewriter type. + +\item[\replaceable{replaceable}] Replaceable text such as +\replaceable{package}, identifying a class of things, is typeset in +italics inside angle brackets. + +\end{description} + + +\section{General} + +This section describes common properties throughout the \abbr{TDS} tree. + +\subsection{Subdirectory searching} +\label{sec:Subdirectory searching} + +Older \TeX{} installations store large numbers of related files in single +directories, for example, all \path|TFM| files and\slash or all \TeX{} +input files. + +This monolithic arrangement hinders maintenance of a \TeX{} system: it +is difficult to determine what files are used by what packages, what +files need to be updated when a new version is installed, or what files +should be deleted if a package is removed. It is also a source of error +if two or more packages happen to have input files with the same name. + +Therefore, the \abbr{TWG} felt each package should be in a separate +directory. But we recognized that explicitly listing all directories to +be searched would be unbearable. A site may wish to install dozens of +packages. Aside from anything else, listing that many directories would +produce search paths many thousands of characters long, overflowing the +available space on some systems. + +Also, if all directories are explicitly listed, installing or removing a +new package would mean changing a path as well as installing or removing +the actual files. This would be a time-consuming and error-prone +operation, even with implementations that provide some way to specify +the directories to search at runtime. On systems without runtime +configuration, it would require recompiling software, an intolerable +burden. + +As a result, the \abbr{TWG} concluded that a comprehensive \abbr{TDS} +requires implementations to support some form of implicit subdirectory +searching. More precisely, implementations must make it possible to +specify that \TeX{}, \MF{}, and their companion utilities search in both +a specified directory and recursively through all subdirectories of that +directory when looking for an input file. Other forms of subdirectory +searching, for example recursive-to-one-level searches, may also be +provided. We encourage implementors to provide subdirectory searching +at the option of the installer and user for all paths. + +The \abbr{TDS} does not specify a syntax for specifying recursive +searching, but we encourage implementors to provide interoperability +(see Section~\ref{sec:More on subdirectory searching}). + + +\subsection{Rooting the tree} +\label{sec:Rooting the tree} + +In this document, we shall designate the root \abbr{TDS} directory by +`\texmf{}' (for ``\TeX{} and \MF{}''). We recommend using that name +where possible, but the actual name of the directory is up to the +installer. On \abbr{pc} networks, for example, this could map to a +logical drive specification such as \path|T:|. + +Similarly, the location of this directory on the system is +site-dependent. It may be at the root of the file system; on Unix +systems, \path|/usr/local/share|, \path|/usr/local|, +\path|/usr/local/lib|, and \path|/opt| are common choices. + +The name \texmf{} was chosen for several reasons: it reflects the fact +that the directory contains files pertaining to an entire \TeX{} system +(including \MF{}, \MP{}, \BibTeX{}, etc.), not just \TeX{} itself; and it +is descriptive of a generic installation rather than a particular +implementation. + +A site may choose to have more than one \abbr{TDS} hierarchy installed +(for example, when installing an upgrade). This is perfectly legitimate. + + +\subsection{Local additions} +\label{sec:Local additions} + +The \abbr{TDS} cannot specify precisely when a package is or is not a +``local addition''. Each site must determine this according to its own +conventions. At the two extremes, one site might wish to consider +``nonlocal'' all files not acquired as part of the installed \TeX{} +distribution; another site might consider ``local'' only those files +that were actually developed at the local site and not distributed +elsewhere. + +We recognize two common methods for local additions to a distributed +\texmf{} tree. Both have their place; in fact, some sites employ +both simultaneously: + +\begin{enumerate} + +\item A completely separate tree which is a \abbr{TDS} structure +itself; for example, \path|/usr/local/umbtex| at the University of +Massachusetts at Boston. This is another example of the multiple +\texmf{} hierarchies mentioned in the previous section. + +\item A directory named `\path|local|' at any appropriate level, for +example, in the \replaceable{format}, \replaceable{package}, and +\replaceable{supplier} directories discussed in the following sections. +The \abbr{TDS} reserves the directory name \path|local| for this +purpose. + +We recommend using \path|local| for site-adapted configuration files, +such as \path|language.dat| for the Babel package or \path|graphics.cfg| +for the graphics package. Unmodified configuration files from a package +should remain in the package directory. The intent is to separate +locally modified or created files from distribution files, to ease +installing new releases. + +\end{enumerate} + +One common case of local additions is dynamically generated files, e.g., +\abbr{PK} fonts by the \path|mktexpk| script (which originated in +\application{Dvips} as \path|MakeTeXPK|). A site may store the +generated files directly in any of: +\begin{itemize-squeeze} +\item their standard location in the main \abbr{TDS} tree (if it can be +made globally writable); + +\item an alternative location in the main \abbr{TDS} tree (for +example, under \path|texmf/fonts/tmp|); + +\item a second complete \abbr{TDS} tree (as outlined above); + +\item any other convenient directory (perhaps under +\path|/var|, for example \path|/var/spool/fonts|). + +\end{itemize-squeeze} + +No one solution will be appropriate for all sites. + + +\subsection{Duplicate filenames} +\label{sec:Duplicate filenames} + +Different files by the same name may exist in a \abbr{TDS} tree. The +\abbr{TDS} generally leaves unspecified which of two files by the same +name in a search path will be found, so generally the only way to +reliably find a given file is for it to have a unique name. However, +the \abbr{TDS} requires implementations to support the following +exceptions: + +\begin{itemize} + +\item Names of \TeX{} input files must be unique within each first-level +subdirectory of \path|texmf/tex| and \path|texmf/tex/generic|, but not +within all of \path|texmf/tex|; i.e., different \TeX{} formats may have +files by the same name. (Section~\ref{sec:Macros} discusses this +further.) Thus, no single format-independent path specification, such +as a recursive search beginning at \path|texmf/tex| specifying no other +directories, suffices. So implementations must provide format-dependent +path specifications, for example via wrapper scripts or configuration +files. + +\item Many font files will have the same name (e.g., \path|cmr10.pk|), +as discussed in Section~\ref{sec:Valid font bitmaps}. Implementations +must distinguish these files by mode and resolution. + +\end{itemize} + +All implementations we know of already have these capabilities. + +One place where duplicate names are likely to occur is not an exception: + +\begin{itemize} + +\item Names of \MF{} input files (as opposed to bitmaps) must be unique +within all of \path|texmf/fonts|. In practice, this is a problem with +some variants of Computer Modern which contain slightly modified files +named \path|punct.mf|, \path|romanl.mf|, and so on. We believe the only +feasible solution is to rename the derivative files to be +unique. + +\end{itemize} + + +\section{Top-level directories} +\label{sec:Top-level directories} + +The directories under the \texmf{} root identify the major components of +a \TeX{} system (see Section~\ref{sec:Summary} for a summary). A site +may omit any unneeded directories. + +Although the \abbr{TDS} by its nature can specify precise locations only +for implementation-independent files, we recognize that installers may +well wish to place other files under \texmf{} to simplify administration +of the \TeX{} tree, especially if it is maintained by someone other than +the system administrator. Therefore, additional top-level directories +may be present. + +The top-level directories specified by the \abbr{TDS} are: + +\begin{description} +\item[\path|tex|] +for \TeX{} files (Section~\ref{sec:Macros}). + +\item[\path|fonts|] +for font-related files (Section~\ref{sec:Fonts}). + +\item[\path|metafont|] +for \MF{} files which are not fonts (Section~\ref{sec:Non-font MF files}). + +\item[\path|metapost|] +for \MP{} files (Section~\ref{sec:MetaPost}). + +\item[\path|bibtex|] +for \BibTeX{} files (Section~\ref{sec:BibTeX}). + +\item[\path|scripts|] +for platform-independent executables (Section~\ref{sec:Scripts}). + +\item[\path|doc|] +for user documentation (Section~\ref{sec:Documentation}). + +\item[\path|source|] for sources. This includes both traditional +program sources (for example, \application{Web2C} sources go in +\path|texmf/source/web2c|) and, e.g., \LaTeX{} \path|dtx| sources (which +go in \path|texmf/source/latex|). The \abbr{TDS} leaves unspecified any +structure under \path|source|. + +\path|source| is intended for files which are not needed at runtime by +any \TeX{} program; it should not be included in any search path. For +example, \path|plain.tex| does not belong under \path|texmf/source|, +even though it is a ``source file'' in the sense of not being derived +from another file. (It goes in \path|texmf/tex/plain/base|, as explained +in Section~\ref{sec:Macros}). + +\item[\replaceable{implementation}] for implementations (examples: +\path|emtex|, \path|vtex|, \path|web2c|), to be used for whatever +purpose deemed suitable by the implementor or \TeX{} administrator. +That is, files that cannot be shared between implementations, such as +pool files (\path|tex.pool|) and memory dump files (\path|plain.fmt|) go +here, in addition to implementation-wide configuration files. See +Section~\ref{sec:Example implementation-specific trees} for examples of +real \replaceable{implementation} trees. + +Such implementation-specific configuration files should \emphasis{not} +be located using the main \TeX{} input search path (e.g., +\path|TEXINPUTS|). This must be reserved for files actually read by a +\TeX{} engine. See Section~\ref{sec:Extensions}. + +\item[\replaceable{program}] for program-specific input and +configuration files for any \TeX{}-related programs (examples: +\path|mft|, \path|dvips|). In fact, the \path|tex|, \path|metafont|, +\path|metapost|, and \path|bibtex| items above may all be seen as +instances of this case. + +\end{description} + + +\subsection{Macros} +\label{sec:Macros} + +\TeX{} macro files shall be stored in separate directories, segregated +by \TeX{} format and package name (we use `format' in its traditional +\TeX{} sense to mean a usefully \path|\dump|-able package): +\begin{ttdisplay} +texmf/tex/\replaceable{format}/\replaceable{package}/ +\end{ttdisplay} + +\begin{description} + +\item[\replaceable{format}] is a format name (examples: \path|amstex|, +\path|latex|, \path|plain|, \path|texinfo|). + +The \abbr{TDS} allows distributions that can be used as either formats or +packages (e.g., Texinfo, Eplain) to be stored at either level, at the +option of the format author or \TeX{} administrator. We recommend that +packages used as formats at a particular site be stored at the +\replaceable{format} level: by adjusting the \TeX{} inputs search path, +it will be straightforward to use them as macro packages under another +format, whereas placing them in another tree completely obscures their +use as a format. + +The \abbr{TDS} reserves the following \replaceable{format} names: + +\begin{itemize} + +\item \path|generic|, for input files that are useful across a wide +range of formats (examples: \path|null.tex|, \path|path.sty|). +Generally, this means any format that uses the category codes of Plain +\TeX{} and does not rely on any particular format. This is in contrast +to those files which are useful only with Plain \TeX{} (which go under +\path|texmf/tex/plain|), e.g., \path|testfont.tex| and \path|plain.tex| +itself. + +\item \path|local|, for local additions. See Section~\ref{sec:Local +additions}. + +\end{itemize} + +Thus, for almost every format, it is necessary to search at least the +\replaceable{format} directory and then the \path|generic| directory (in +that order). Other directories may need to be searched as well, +depending on the format. When using \AMSTeX{}, for example, the +\path|amstex|, \path|plain|, and \path|generic| directories should be +searched, because \AMSTeX{} is compatible with Plain. + +\item[\replaceable{package}] is a \TeX{} package name (examples: +\path|babel|, \path|texdraw|). + +In the case where a format consists of only a single file and has no +auxiliary packages, that file can simply be placed in the +\replaceable{format} directory, instead of +\replaceable{format}\path|/base|. For example, Texinfo may go in +\path|texmf/tex/texinfo/texinfo.tex|, not +\path|texmf/tex/texinfo/base/texinfo.tex|. + +The \abbr{TDS} reserves the following \replaceable{package} names: + +\begin{itemize} + +\item \path|base|, for the base distribution of each format, +including files used by \iniTeX{} when dumping format files. For +example, in the standard \LaTeX{} distribution, the \path|ltx| files +created during the build process. Another example: the \path|.ini| +driver files for formats used by \TeX{} Live and other distributions. + +\item \path|hyphen|, for hyphenation patterns, including the original +American English \path|hyphen.tex|. These are typically used only by +\iniTeX{}. In most situations, this directory need exist only under the +\literal{generic} format. + +\item \path|images|, for image input files, such as Encapsulated +PostScript figures. Although it is somewhat non-intuitive for these to +be under a directory named ``\path|tex|'', \TeX{} needs to read these +files to glean bounding box or other information. A mechanism for +sharing image inputs between \TeX{} and other typesetting programs +(e.g., Interleaf, FrameMaker) is beyond the scope of the +\abbr{TDS}\@. In most situations, this directory need exist only under +the \literal{generic} format. + +\item \path|local|, for local additions and configuration files. See +Section~\ref{sec:Local additions}. + +\item \path|misc|, for packages that consist of a single file. An +administrator or package maintainer may create directories for +single-file packages at their discretion, instead of using \path|misc|. + +\end{itemize} + +\end{description} + + +\subsubsection{Extensions} +\label{sec:Extensions} + +\TeX{} has spawned many companion and successor programs (``engines''), +such as \abbr{PDF}\TeX{}, Omega, and others. The \abbr{TDS} specifies +that the input files for such programs (using a \TeX{}-like syntax) be +placed within the top-level \path|tex| directory, either at the top +level or within a format subdirectory, even though the original \TeX{} +program may not be able to read them. For example: + +\begin{ttdisplay} +texmf/tex/aleph +texmf/tex/enctex +\end{ttdisplay} + +This is a change from \abbr{TDS}~1.0, which specified top-level +\replaceable{extension} directories for each such program. We felt the +new approach is preferable, because: + +\begin{itemize} + +\item Authors of relevant packages typically make their code detect the +engine being used, and issue error messages or adapt to circumstances +appropriately. Furthermore, as a package matures, it may support +multiple engines. Thus, a package could conceivably be placed in any of +several top-level directories, at different times. Putting all packages +under the top-level \path|tex| directory provides a stable location over +time. + +\item Users need to be able to switch between engines, and configuring +different search paths for each engine is difficult and error-prone. + +\end{itemize} + +Thus, in practice, having different top-level directories caused +difficulties for everyone involved---users, package authors, site +administrators, and system distributors. + +Please contrast this approach with the \replaceable{implementation} +top-level subdirectory (Section~\ref{sec:Top-level directories}), which +is to be used for configuration files that (presumably) do not use +\TeX{} syntax and in any case should not be found along the main \TeX{} +input search path. + + +\subsection{Fonts} +\label{sec:Fonts} + +Font files are stored in separate directories, segregated by file type, +and then (in most cases) font supplier and typeface. \abbr{PK} and +\abbr{GF} files need additional structure, as detailed in the next +section. + +\begin{ttdisplay} +texmf/fonts/\replaceable{type}/\replaceable{supplier}/\replaceable{typeface}/ +texmf/fonts/enc,lig,map/\replaceable{subpath}/ +\end{ttdisplay} + +\begin{description} + +\item[\replaceable{type}] is the type of font file. The \abbr{TDS} +reserves the following \replaceable{type} names for common \TeX{} file +types: + +\begin{itemize-squeeze} +\item \path|afm|, for Adobe font metrics, and \path|inf| files. +\item \path|gf|, for generic font bitmap files. +\item \path|opentype|, for OpenType fonts. +\item \path|pk|, for packed bitmap files. +\item \path|source|, for font sources (\MF{} files, property lists, etc.). +\item \path|tfm|, for \TeX{} font metric files. +\item \path|truetype|, for TrueType fonts. +\item \path|type1|, for PostScript Type 1 fonts (in \path|pfa|, + \path|pfb|, or any other format), and \path|pfm| files. +\item \path|type3|, for PostScript Type 3 fonts. +\item \path|vf|, for virtual fonts. +\end{itemize-squeeze} + +The \abbr{TDS} also reserves the names \path|enc|, \path|lig|, and +\path|map| for font encoding, ligature, and mapping files, respectively. +All of these directories are structured the same way, with +\replaceable{syntax} subdirectories, and then \replaceable{package} +subsubdirectories. Each of these file types is intended to be searched +along its own recursively-searched path. The names of the actual files +must be unique within their subtree, as usual. Examples: +\begin{ttdisplay} +fonts/map/dvipdfm/updmap/dvipdfm.map +fonts/map/dvips/lm/lm.map +fonts/enc/dvips/base/8r.enc +\end{ttdisplay} + +The Fontname and Dvips packages have more examples of the \path|enc| and +\path|map| types. The \path|afm2pl| program uses \path|lig| files. + +\path|pfm| files are included in the \path|type1| directory, instead of +being given their own directory, for two reasons: 1)~a \path|.pfm| file +is always an adjunct to a given \path|.pfb| file; 2)~they must be +installed from the same directory for Windows programs other than \TeX{} +to use them. + +\path|inf| files are included in the \path|afm| directory, since +an \path|inf| and \path|afm| file can be used to generate a \path|pfm|. +(Unfortunately, Adobe Type Manager and perhaps other software requires +that the \path|pfb| be in the same directory as \path|afm| and +\path|inf| for installation.) + +As usual, a site may omit any of these directories that are unnecessary. +\path|gf| is a particularly likely candidate for omission. + +\item[\replaceable{supplier}] is a name identifying font source +(examples: \path|adobe|, \path|ams|, \path|public|). The \abbr{TDS} +reserves the following \replaceable{supplier} names: + +\begin{itemize} + +\item \path|ams|, for the American Mathematical Society's \AmS{}-fonts +collection. + +\item \path|local|, for local additions. See Section~\ref{sec:Local additions}. + +\item \path|public|, for freely redistributable fonts where the supplier +neither (1)~requested their own directory (e.g., \path|ams|), nor +(2)~also made proprietary fonts (e.g., \path|adobe|). It does not +contain all extant freely distributable fonts, nor are all files therein +necessarily strictly public domain. + +\item \path|tmp|, for dynamically-generated fonts, as is traditional on +some systems. It may be omitted if unnecessary, as usual. + +\end{itemize} + + +\item[\replaceable{typeface}] is the name of a typeface family +(examples: \path|cm|, \path|euler|, \path|times|). The \abbr{TDS} +reserves the following \replaceable{typeface} names: + +\begin{itemize} + +\item \path|cm| (within \path|public|), for the 75 fonts defined in +\citetitle{Computers and Typesetting, Volume~E}. + +\item \path|latex| (within \path|public|), for those fonts distributed +with \LaTeX{} in the base distribution. + +\item \path|local|, for local additions. See Section~\ref{sec:Local additions}. + +\end{itemize} + +\end{description} + +Some concrete examples: +\begin{ttdisplay} +texmf/fonts/source/public/pandora/pnr10.mf +texmf/fonts/tfm/public/cm/cmr10.tfm +texmf/fonts/type1/adobe/utopia/putr.pfa +\end{ttdisplay} + +For complete supplier and typeface name lists, consult +\citetitle{Filenames for \TeX{} fonts} (see Appendix~\ref{sec:Related +references}). + +\subsubsection{Font bitmaps} + +Font bitmap files require two characteristics in addition to the above +to be uniquely identifiable: (1)~the type of device (i.e., mode) for +which the font was created; (2)~the resolution of the bitmap. + +Following common practice, the \abbr{TDS} segregates fonts with +different device types into separate directories. See \path|modes.mf| +in Appendix~\ref{sec:Related references} for recommended mode names. + +Some printers operate at more than one resolution (e.g., at 300\,dpi and +600\,dpi), but each such resolution will necessarily have a different +mode name. Nothing further is needed, since implicit in the \TeX{} +system is the assumption of a single target resolution. + +Two naming strategies are commonly used to identify the resolution of +bitmap font files. On systems that allow long filenames (and in the +original \MF{} program itself), the resolution is included in the +filename (e.g., \path|cmr10.300pk|). On systems which do not support +long filenames, fonts are generally segregated into directories by +resolution (e.g., \path|dpi300/cmr10.pk|). + +Because the \abbr{TDS} cannot require long filenames, we must use the +latter scheme for naming fonts. So we have two more subdirectory +levels under \path|pk| and \path|gf|: + +\begin{ttdisplay} +texmf/fonts/pk/\replaceable{mode}/\replaceable{supplier}/\replaceable{typeface}/dpi\replaceable{nnn}/ +texmf/fonts/gf/\replaceable{mode}/\replaceable{supplier}/\replaceable{typeface}/dpi\replaceable{nnn}/ +\end{ttdisplay} + +\begin{description} + +\item[\replaceable{mode}] is a name which identifies the device type +(examples: \path|cx|, \path|ljfour|, \path|modeless|). Usually, this is +the name of the \MF{} mode used to build the \abbr{PK} file. For fonts +rendered as bitmaps by a program that does not distinguish between +different output devices, the \replaceable{mode} name shall be simply +\path|modeless|. The \replaceable{mode} level shall not be omitted, +even if only a single mode happens to be in use. + +\item[\path|dpi|\replaceable{nnn}] specifies the resolution of the font +(examples: \path|dpi300|, \path|dpi329|). `\literal{dpi}' stands for +dots per inch, i.e., pixels per inch. We recognize that pixels per +millimeter is used in many parts of the world, but dpi is too +traditional in the \TeX{} world to consider changing now. + +The integer \replaceable{nnn} is to be calculated as if using \MF{} +arithmetic and then rounded; i.e., it is the integer \MF{} uses in its +output \path|gf| filename. We recognize small differences in the +resolution are a common cause of frustration among users, however, and +recommend implementors follow the level~0 \abbr{DVI} driver standard +(see Appendix~\ref{sec:Related references}) in bitmap font searches by +allowing a fuzz of $\pm0.2$\% (with a minimum of $1$) in the +\replaceable{dpi}. + +\end{description} + +Implementations may provide extensions to the basic naming scheme, such +as long filenames (as in the original \MF{}) and font library files (as +in em\TeX{}'s \path|.fli| files), provided that the basic scheme is also +supported. + +\subsubsection{Valid font bitmaps} +\label{sec:Valid font bitmaps} + +The \abbr{TWG} recognizes that the use of short filenames has many +disadvantages. The most vexing is that it results in the creation of +dozens of different files with the same name. At a typical site, +\path|cmr10.pk| will be the filename for Computer Modern Roman 10\,pt at +5--10 magnifications for 2--3 modes. (Section~\ref{sec:Duplicate +filenames} discusses duplicate filenames in general.) + +To minimize this problem, we strongly recommend that \abbr{PK} files +contain enough information to identify precisely how they were created: +at least the mode, base resolution, and magnification used to create the +font. + +This information is easy to supply: a simple addition to the local modes +used for building the fonts with \MF{} will automatically provide the +required information. If you have been using a local modes file derived +from (or that is simply) \path|modes.mf| (see Appendix~\ref{sec:Related +references}), the required information is already in your \abbr{PK} +files. If not, a simple addition based on the code found in +\path|modes.mf| can be made to your local modes file and the \abbr{PK} +files rebuilt. + + +\subsection{Non-font \MF{} files} +\label{sec:Non-font MF files} + +Most \MF{} input files are font programs or parts of font programs and +are thus covered by the previous section. However, a few non-font input +files do exist. Such files shall be stored in: + +\begin{ttdisplay} +texmf/metafont/\replaceable{package}/ +\end{ttdisplay} + +\replaceable{package} is the name of a +\MF{} package (for example, \path|mfpic|). + +The \abbr{TDS} reserves the following \replaceable{package} names: + +\begin{itemize} + +\item \path|base|, for the standard \MF{} macro files as described in +\citetitle{The \MF{}book}, such as \path|plain.mf| and \path|expr.mf|. + +\item \path|local|, for local additions. See Section~\ref{sec:Local additions}. + +\item \path|misc|, for \MF{} packages consisting of only a single file +(for example, \path|modes.mf|). An administrator or package maintainer +may create directories for single-file packages at their discretion, +instead of using \path|misc|. + +\end{itemize} + + +\subsection{\MP{}} +\label{sec:MetaPost} + +\MP{} is a picture-drawing language developed by John Hobby, derived +from Knuth's \MF{}. Its primary purpose is to output Encapsulated \PS{} +instead of bitmaps. + +\MP{} input files and the support files for \MP{}-related utilities +shall be stored in: + +\begin{ttdisplay} +texmf/metapost/\replaceable{package}/ +\end{ttdisplay} + +\replaceable{package} is the name of a \MP{} package. At the present +writing none exist, but the \abbr{TWG} thought it prudent to leave room +for contributed packages that might be written in the future. + +The \abbr{TDS} reserves the following \replaceable{package} names: + +\begin{itemize} + +\item \path|base|, for the standard \MP{} macro files, such as +\path|plain.mp|, \path|mfplain.mp|, \path|boxes.mp|, and +\path|graph.mp|. This includes files used by \iniMP{} when dumping mem +files containing preloaded macro definitions. + +\item \path|local|, for local additions. See Section~\ref{sec:Local +additions}. + +\item \path|misc|, for \MP{} packages consisting of only a single file. +An administrator or package maintainer may create directories for +single-file packages at their discretion, instead of using \path|misc|. + +\item \path|support|, for additional input files required by \MP{} +utility programs, including a font map, a character adjustment table, +and a subdirectory containing low-level \MP{} programs for rendering +some special characters. + +\end{itemize} + + +\subsection{\BibTeX{}} +\label{sec:BibTeX} + +\BibTeX{}-related files shall be stored in: + +\begin{ttdisplay} +texmf/bibtex/bib/\replaceable{package}/ +texmf/bibtex/bst/\replaceable{package}/ +\end{ttdisplay} + +The \path|bib| directory is for \BibTeX{} database (\path|.bib|) files, +the \path|bst| directory for style (\path|.bst|) files. + +\replaceable{package} is the name of a \BibTeX{} package. The +\abbr{TDS} reserves the following \replaceable{package} names (the same +names are reserved under both \path|bib| and \path|bst|): + +\begin{itemize} + +\item \path|base|, for the standard \BibTeX{} databases and styles, such +as \path|xampl.bib|, \path|plain.bst|. + +\item \path|local|, for local additions. See Section~\ref{sec:Local +additions}. + +\item \path|misc|, for \BibTeX{} packages consisting of only a single +file. An administrator or package maintainer may create directories for +single-file packages at their discretion, instead of using \path|misc|. + +\end{itemize} + + +\subsection{Scripts} +\label{sec:Scripts} + +The top-level \path|scripts| directory is for platform-independent +executables, such as Perl, Python, and shell scripts, and Java class +files. Subdirectories under \path|scripts| are package names. This +eases creating distributions, by providing a common place for such +platform-independent programs. + +The intent is not for all such directories to be added to a user's +command search path, which would be quite impractical. Rather, these +executables are primarily for the benefit of wrapper scripts in whatever +executable directory a distribution may provide (which is not specified +by the \abbr{TDS}). + +Truly auxiliary scripts which are invoked directly by other programs, +rather than wrapper scripts, may also be placed here. That is, +\path|scripts| also serves as a platform-independent analog of the +standard Unix \path|libexec| directory. + +We recommend using extensions specifying the language (such as +\path|.pl|, \path|.py|, \path|.sh|) on these files, to help uniquely +identify the name. Since the intent of the \abbr{TDS} is for programs +in \path|scripts| not to be invoked directly by users, this poses no +inconvenience. + +For example, in the \TeX{} Live distribution, the Con\TeX{}t user-level +program \path|texexec| can exist as a small wrapper script in each +\path|bin/|\replaceable{platform}\path|/texexec| (which is outside the +\path|texmf| tree), which merely finds and calls +\path|texmf/scripts/context/perl/texexec.pl|. + +Examples: +\begin{ttdisplay} +scripts/context/perl/texexec.pl +scripts/context/ruby/examplex.rb +scripts/thumbpdf/thumbpdf.pl +\end{ttdisplay} + +The \abbr{TDS} does not specify a location for platform-dependent +binary executables, whether auxiliary or user-level. + + +\subsection{Documentation} +\label{sec:Documentation} + +Most packages come with some form of documentation: user manuals, +example files, programming guides, etc. In addition, many independent +files not part of any macro or other package have been created to +describe various aspects of the \TeX{} system. + +The \abbr{TDS} specifies that these additional documentation files shall +be stored in a structure that parallels to some extent the +\path|fonts| and \path|tex| directories, as follows: + +\begin{ttdisplay} +texmf/doc/\replaceable{category}/... +\end{ttdisplay} + +\replaceable{category} identifies the general topic of documentation +that resides below it; for example, a \TeX{} format name (\path|latex|), +program name (\path|bibtex|, \path|tex|), language (\path|french|, +\path|german|), a file format (\path|info|, \path|man|), or other system +components (\path|web|, \path|fonts|). + +One possible arrangement is to organize \path|doc| by language, with all +the other category types below that. This helps users find +documentation in the language(s) in which they are fluent. Neither this +nor any other particular arrangement is required, however. + +Within each \replaceable{category} tree for a \TeX{} format, the +directory \path|base| is reserved for base documentation distributed by +the format's maintainers. + +The \abbr{TDS} reserves the following category names: + +\begin{itemize} + +\item \path|general|, for standalone documents not specific to any +particular program (for example, Joachim Schrod's \citetitle{Components +of \TeX{}}). + +\item \path|help|, for meta-information, such as \abbr{faq}'s, +the \TeX{} Catalogue, etc. + +\item \path|info|, for processed Texinfo documents. (Info files, like +anything else, may also be stored outside the \abbr{TDS}, at the +installer's option.) + +\item \path|local|, for local additions. See Section~\ref{sec:Local +additions}. + +\end{itemize} + +The \path|doc| directory is intended for implementation-independent and +operating system-independent documentation +files. Implementation-dependent files are best stored elsewhere, as +provided for by the implementation and/or \TeX{} administrator (for +example, \abbr{VMS} help files under \path|texmf/vms/help|). + +The documentation directories may contain \TeX{} sources, \abbr{DVI} +files, \PS{} files, text files, example input files, or any other useful +documentation format(s). + +See Section~\ref{sec:Documentation tree summary} for a summary. + + +\newpage +\section{Summary} +\label{sec:Summary} + +A skeleton of a \abbr{TDS} \texmf{} directory tree. This is not to +imply these are the only entries allowed. For example, \path|local| may +occur at any level. + +\begin{tdsSummary} + bibtex/ \BibTeX{} input files + . bib/ \BibTeX{} databases + . . base/ base distribution (e.g., \path|xampl.bib|) + . . misc/ single-file databases + . <package>/ name of a package + . bst/ \BibTeX{} style files + . . base/ base distribution (e.g., \path|plain.bst|, \path|acm.bst|) + . . misc/ single-file styles + . <package>/ name of a package + doc/ see Section~\ref{sec:Documentation} and the summary below + fonts/ font-related files + . <type>/ file type (e.g., \path|pk|) + . . <mode>/ type of output device (for \path|pk| and \path|gf| only) + . . . <supplier>/ name of a font supplier (e.g., \path|public|) + . . . . <typeface>/ name of a typeface (e.g., \path|cm|) + . . . . . dpi<nnn>/ font resolution (for \path|pk| and \path|gf| only) + <implementation>/ \TeX{} implementations, by name (e.g., \path|emtex|) + local/ files created or modified at the local site + metafont/ \MF{} (non-font) input files + . base/ base distribution (e.g., \path|plain.mf|) + . misc/ single-file packages (e.g., \path|modes.mf|) + . <package>/ name of a package (e.g., \path|mfpic|) + metapost/ \MP{} input and support files + . base/ base distribution (e.g., \path|plain.mp|) + . misc/ single-file packages + . <package>/ name of a package + . support/ support files for \MP{}-related utilities + mft/ \path|MFT| inputs (e.g., \path|plain.mft|) + <program>/ \TeX{}-related programs, by name (e.g., \path|dvips|) + source/ program source code by name (e.g., \path|latex|, \path|web2c|) + tex/ \TeX{} input files + . <engine>/ name of an engine (e.g., \path|aleph|); can also be lower + . <format>/ name of a format (e.g., \path|plain|) + . . base/ base distribution for format (e.g., \path|plain.tex|) + . . misc/ single-file packages (e.g., \path|webmac.tex|) + . . local/ local additions to or local configuration files for \replaceable{format} + . . <package>/ name of a package (e.g., \path|graphics|, \path|mfnfss|) + . generic/ format-independent packages + . . hyphen/ hyphenation patterns (e.g., \path|hyphen.tex|) + . . images/ image input files (e.g., Encapsulated PostScript) + . . misc/ single-file format-independent packages (e.g., \path|null.tex|). + . . <package>/ name of a package (e.g., \path|babel|) +\end{tdsSummary} + + +\newpage +\subsection{Documentation tree summary} +\label{sec:Documentation tree summary} + +An example skeleton of a \abbr{TDS} directory tree under +\path|texmf/doc|. This is not to imply these are the only entries +allowed, or that this structure must be followed precisely for the +entries listed. + +As mentioned, the \path|texmf/doc| tree may be organized by language, so +that all documentation in French, say, is in a \path|french| +subdirectory. In that case, the example structure here would be in a +given language directory. + +\begin{tdsSummary} + ams/ + . amsfonts/ \path|amsfonts.faq|, \path|amfndoc| + . amslatex/ \path|amslatex.faq|, \path|amsldoc| + . amstex/ \path|amsguide|, \path|joyerr| + bibtex/ \BibTeX{} + . base/ \path|btxdoc.tex| + fonts/ + . fontname/ \citetitle{Filenames for \TeX{} fonts} + . oldgerm/ \path|corkpapr| + <format>/ name of a \TeX{} format (e.g., \path|generic|, \path|latex|) + . base/ for the base distribution + . misc/ for contributed single-file package documentation + . <package>/ for \emphasis{package} + general/ across programs, generalities + . errata/ \path|errata|, \path|errata[1-8]| + . texcomp/ \citetitle{Components of \TeX{}} + help/ meta-information + . ctan/ info about \abbr{ctan} mirror sites + . faq/ \abbr{faq}s of \path|comp.text.tex|, etc. + info/ \abbr{gnu} Info files, made from Texinfo sources + latex/ example of \replaceable{format} + . base/ \path|ltnews*|, \path|*guide|, etc. + . graphics/ \path|grfguide| + local/ site-specific documentation + man/ Unix man pages + <program>/ \TeX{}-related programs, by name (examples follow) + metafont/ \path|mfbook.tex|, \path|metafont-for-beginners|, etc. + metapost/ \path|mpman|, \path|manfig|, etc. + tex/ \path|texbook.tex|, \citetitle{A Gentle Introduction to \TeX{}}, etc. + web/ \path|webman|, \path|cwebman| +\end{tdsSummary} + + +\newpage +\appendix + +\section{Unspecified pieces} + +The \abbr{TDS} cannot address the following aspects of a functioning +\TeX{} system: + +\begin{enumerate} + +\item The location of executable programs: this is too site-dependent +even to recommend a location, let alone require one. A site may place +executables outside the \texmf{} tree altogether (e.g., +\path|/usr/local/bin|), in a platform-dependent directory within +\texmf{}, or elsewhere. + +\item Upgrading packages when new releases are made: we could find no +way of introducing version specifiers into \texmf{} that would do more +good than harm, or that would be practical for even a plurality of +installations. + +\item The location of implementation-specific files (e.g., \TeX{} +\path|.fmt| files): by their nature, these must be left to the +implementor or \TeX{} maintainer. See Section~\ref{sec:Example +implementation-specific trees}. + +\item Precisely when a package or file should be considered ``local'', +and where such local files are installed. See Section~\ref{sec:Local +additions} for more discussion. + +\end{enumerate} + + +\subsection{Portable filenames} +\label{sec:Portable filenames} + +The \abbr{TDS} cannot require any particular restriction on filenames in +the tree, since the names of many existing \TeX{} files conform to no +standard scheme. For the benefit of people who wish to make a portable +\TeX{} distribution or installation, however, we outline here the +necessary restrictions. The \abbr{TDS} specifications themselves are +compatible with these. + +\abbr{ISO}-9660 is the only universally acceptable file system format +for \abbr{CD-ROM}s. A subset thereof meets the stringent limitations of +all operating systems in use today. It specifies the following: + +\begin{itemize-squeeze} + +\item File and directory names, not including any directory path or +extension part, may not exceed eight characters. + +\item Filenames may have a single extension. Extensions may not exceed +three characters. Directory names may not have an extension. + +\item Names and extensions may consist of \emphasis{only} the characters +\literal{A}--\literal{Z}, \literal{0}--\literal{9}, and underscore. +Lowercase letters are excluded. + +\item A period separates the filename from the extension and is always +present, even if the name or extension is missing (e.g., +\path|FILENAME.| or \path|.EXT|). + +\item A version number, ranging from 1--32767, is appended to the file +extension, separated by a semicolon (e.g., \path|FILENAME.EXT;1|). + +\item Only eight directory levels are allowed, including the top-level +(mounted) directory (see Section~\ref{sec:Rooting the tree}). Thus, the +deepest valid \abbr{ISO}-9660 path is: +\begin{ttdisplay} +texmf/L2/L3/L4/L5/L6/L7/L8/FOO.BAR;1 +1 2 3 4 5 6 7 8 +\end{ttdisplay} +The deepest \abbr{TDS} path needs only seven levels: +\begin{ttdisplay} +texmf/fonts/pk/cx/public/cm/dpi300/cmr10.pk +1 2 3 4 5 6 7 +\end{ttdisplay} + +\end{itemize-squeeze} + +Some systems display a modified format of \abbr{ISO}-9660 names, +mapping alphabetic characters to lowercase, removing version numbers and +trailing periods, etc. + +Before the December 1996 release, \LaTeX{} used mixed-case names for +font descriptor files. Fortunately, it never relied on case alone to +distinguish among the files. Nowadays, it uses only monocase names. + +\section{Implementation issues} + +We believe that the \abbr{TDS} can bring a great deal of order to the +current anarchic state of many \TeX{} installations. In addition, by +providing a common frame of reference, it will ease the burden of +documenting administrative tasks. Finally, it is a necessary part of +any reasonable system of true ``drop-in'' distribution packages for +\TeX{}. + + +\subsection{Adoption of the \abbr{TDS}} + +[This section is retained for historical purposes; the \abbr{TDS} +is now quite firmly entrenched in most \TeX{} distributions.] + +We recognize that adoption of the \abbr{TDS} will not be immediate or +universal. Most \TeX{} administrators will not be inclined to make the +final switch until: + +\begin{itemize-squeeze} +\item Clear and demonstrable benefits can be shown for the \abbr{TDS}. +\item \abbr{TDS}-compliant versions of all key programs are available +in ported, well-tested forms. +\item A ``settling'' period has taken place, to flush out problems. The +public release of the first draft of this document was the first step in +this process. +\end{itemize-squeeze} + +Consequently, most of the first trials of the \abbr{TDS} will be made by +members of the \abbr{TDS} committee and/or developers of \TeX{}-related +software. This has already taken place during the course of our +deliberations (see Appendix~\ref{sec:Related references} for a sample +tree available electronically). They will certainly result in the +production of a substantial number of \abbr{TDS}-compliant packages. +Indeed, the \application{te\TeX{}} and \application{\TeX{} Live} +distributions are \abbr{TDS}-compliant and in use now at many sites. + +Once installable forms of key \abbr{TDS}-compliant packages are more +widespread, some \TeX{} administrators will set up \abbr{TDS}-compliant +trees, possibly in parallel to existing production directories. This +testing will likely flush out problems that were not obvious in the +confined settings of the developers' sites; for example, it should help +to resolve system and package dependencies, package interdependencies, and +other details not addressed by this \abbr{TDS} version. + +After most of the dust has settled, hopefully even conservative \TeX{} +administrators will begin to adopt the \abbr{TDS}. Eventually, most +\TeX{} sites will have adopted the common structure, and most packages +will be readily available in \abbr{TDS}-compliant form. + +We believe that this process will occur relatively quickly. The +\abbr{TDS} committee spans a wide range of interests in the \TeX{} +community. Consequently, we believe that most of the key issues +involved in defining a workable \abbr{TDS} definition have been covered, +often in detail. \TeX{} developers have been consulted about +implementation issues, and have been trying out the \abbr{TDS} +arrangement. Thus, we hope for few surprises as implementations mature. + +Finally, there are several (current or prospective) publishers of \TeX{} +\abbr{CD-ROM}s. These publishers are highly motivated to work out +details of \abbr{TDS} implementation, and their products will provide +inexpensive and convenient ways for experimentally-minded \TeX{} +administrators to experiment with the \abbr{TDS}. + + +\subsection{More on subdirectory searching} +\label{sec:More on subdirectory searching} + +Recursive subdirectory searching is the ability to specify a search not +only of a specified directory \replaceable{d}, but recursively of all +directories below \replaceable{d}. + +Since the \abbr{TDS} specifies precise locations for most files, with no +extra levels of subdirectories allowed, true recursive searching is not +actually required for a \abbr{TDS}-compliant implementation. We do, +however, strongly recommend recursive searching as the most +user-friendly and natural approach to the problem, rather than +convoluted methods to specify paths without recursion. + +This feature is already supported by many implementations of \TeX{} and +companion utilities, for example \abbr{DECUS} \TeX{} for \abbr{VMS}, +\application{Dvips(k)}, \application{em\TeX{}} (and its drivers), +\application{PubliC \TeX{}}, \application{Web2C}, \application{Xdvi(k)}, +and \application{Y\&Y\TeX{}}. The Kpathsea library is a reusable +implementation of subdirectory searching for \TeX{}, used in a number of +the above programs. + +Even if your \TeX{} implementation does not directly support +subdirectory searching, you may find it useful to adopt the structure if +you do not use many fonts or packages. For instance, if you only use +Computer Modern and \abbr{ams} fonts, it would be feasible to store them +in the \abbr{TDS} layout and list the directories individually in +configuration files or environment variables. + +The \abbr{TWG} recognizes that subdirectory searching places an extra +burden on the system and may be the source of performance bottlenecks, +particularly on slower machines. Nevertheless, we feel that +subdirectory searching is imperative for a well-organized \abbr{TDS}, +for the reasons stated in Section~\ref{sec:Subdirectory searching}. +Implementors are encouraged to provide enhancements to the basic +principle of subdirectory searching to avoid performance problems, e.g., +the use of a filename cache (this can be as simple as a recursive +directory listing) that is consulted before disk searching begins. If a +match is found in the database, subdirectory searching is not required, +and performance is thus independent of the number of subdirectories +present on the system. + +Different implementations specify subdirectory searching differently. +In the interest of typographic clarity, the examples here do not use the +\replaceable{replaceable} font. + +\begin{description-squeeze} + +\item[\application{Dvips}:] via a separate +\systemitem{ENVIRONVAR}{TEXFONTS\_SUBDIR} environment variable. + +\item[\application{em\TeX{}}:] \path|t:\subdir!!|; \path|t:\subdir!| for +a single level of searching. + +\item[\application{Kpathsea}:] \path|texmf/subdir//| + +\item[\abbr{VMS}:] \path|texmf:[subdir...]| + +\item[\application{Xdvi} (patchlevel 20):] \path|texmf/subdir/**|; +\path|texmf/subdir/*| for a single level of searching. Version 20.50 +and above support the \path|//| notation. + +\item[\application{Y\&Y \TeX{}}:] \path|t:/subdir//| or +\path|t:\subdir\\|. + +\end{description-squeeze} + + +\subsection{Example implementation-specific trees} +\label{sec:Example implementation-specific trees} + +The \abbr{TDS} cannot specify a precise location for +implementation-specific files, such as \path|texmf/ini|, because a site +may have multiple \TeX{} implementations. + +Nevertheless, for informative purposes, we provide here the default +locations for some implementations. Please contact us with additions or +corrections. These paths are not definitive, may not match anything at +your site, and may change without warning. + +We recommend all implementations have default search paths that start +with the current directory (e.g., `\path|.|'). Allowing users to +include the parent directory (e.g., `\path|..|') is also helpful. + + +\subsubsection{AmiWeb2c 2.0} + +(Email \email|scherer@physik.rwth-aachen.de| to contact the maintainer +of this implementation.) + +AmiWeb2c 2 is compatible with Web2c 7 to the greatest possible +extent, so only the very few differences are described in this +section. Detailed information about the basic concepts is given in +the section for Web2c 7 below. + +Thanks to the \path|SELFAUTO| mechanism of Kpathsea 3.0 no specific +location for the installation of AmiWeb2c is required as long as the +general structure of the distribution is preserved. + +In addition to Kpathsea's \path|//| notation recursive path search may +also be started by \replaceable{DEVICE}\path|:/|, e.g., \path|TeXMF:/| +will scan this specific device completely. + +Binaries coming with the AmiWeb2c distribution are installed in the +directory \path|bin/amiweb2c/| outside the common \abbr{TDS} tree +\path|share/texmf/|. In addition to the set of AmiWeb2c binaries +you will find two subdirectories \path|local/| and \path|pastex/| +with auxiliary programs. + +A stripped version of the Pas\TeX{} system (used by kind permission of +Georg He\ss{}mann) is coming with AmiWeb2c, pre-installed in its own +\path|share/texmf/amiweb2c/pastex/| directory. If you want to use +Pas\TeX{} you have to \path|assign| the name \path|TeX:| to this place. + +Documentation files in AmigaGuide format should be stored at +\path|doc/guide/| similar to \path|doc/info/|. + + +\subsubsection{Public \abbr{DECUS} \TeX{}} + +If another \abbr{VMS} implementation besides Public \abbr{DECUS} \TeX{} +appears, the top level implementation directory name will be modified to +something more specific (e.g., \path|vms_decus|). + +\begin{tdsSummary} + texmf/ + . vms/ \abbr{VMS} implementation specific files + . . exe/ end-user commands + . . . common/ command procedures, command definition files, etc. + . . . axp/ binary executables for Alpha \abbr{AXP} + . . . vax/ binary executables for \abbr{VAX} + . . formats/ pool files, formats, bases + . . help/ \abbr{VMS} help library, and miscellaneous help sources + . . mgr/ command procedures, programs, docs, etc., for system management +\end{tdsSummary} + + +\subsubsection{Web2c 7} + +All implementation-dependent \TeX{} system files (\path|.pool|, +\path|.fmt|, \path|.base|, \path|.mem|) are stored by default directly +in \path|texmf/web2c|. The configuration file \path|texmf.cnf| and +various subsidiary \path|MakeTeX...| scripts used as subroutines are +also stored there. + +Non-\TeX{} specific files are stored following the \abbr{GNU} coding +standards. Given a root directory \replaceable{prefix} +(\path|/usr/local| by default), we have default locations as follows: + +\begin{tdsSummary} + <prefix>/ installation root (\path|/usr/local| by default) + . bin/ executables + . man/ man pages + . info/ info files + . lib/ libraries (\path|libkpathsea.*|) + . share/ architecture-independent files + . . texmf/ \abbr{TDS} root + . . . web2c/ implementation-dependent files (\path|.pool|, \path|.fmt|, \path|texmf.cnf|, etc.) +\end{tdsSummary} + +See \url|http://www.gnu.org/prep/standards_toc.html| for the +rationale behind and descriptions of this arrangement. A site may of +course override these defaults; for example, it may put everything under +a single directory such as \path|/usr/local/texmf|. + + +\section{Is there a better way?} + +Defining the \abbr{TDS} required many compromises. Both the overall +structure and the details of the individual directories were arrived at +by finding common ground among many opinions. The driving forces were +feasibility (in terms of what could technically be done and what could +reasonably be expected from developers) and regularity (files grouped +together in an arrangement that ``made sense''). + +Some interesting ideas could not be applied due to implementations +lacking the necessary support: + +\begin{itemize} + +\item Path searching control at the \TeX{} level. If documents could +restrict subdirectory searching to a subdirectory via some portable +syntax in file names, restrictions on uniqueness of filenames could be +relaxed considerably (with the cooperation of the formats), and the +\TeX{} search path would not need to depend on the format. + +\item Multiple logical \texmf{} trees. For example, a site might have +one (read-only) location for stable files, and a different (writable) +location for dynamically-created fonts or other files. It would be +reasonable for two such trees to be logically merged when searching. +See Michael Downes' article in the references for how this can work in +practice with Web2C. + +\end{itemize} + +\subsection{Macro structure} + +The \abbr{TWG} settled on the +\replaceable{format}\path|/|\replaceable{package} arrangement after long +discussion about how best to arrange the files. + +The primary alternative to this arrangement was a scheme which reversed +the order of these directories: +\replaceable{package}\path|/|\replaceable{format}. This reversed +arrangement has a strong appeal: it keeps all of the files related to a +particular package in a single place. The arrangement actually adopted +tends to spread files out into two or three places (macros, +documentation, and fonts, for example, are spread into different +sections of the tree right at the top level). + +Nevertheless, the \replaceable{format}\path|/|\replaceable{package} +structure won for a couple of reasons: + +\begin{itemize-squeeze} +\item It is closer to current practice; in fact, several members of the +\abbr{TWG} have already implemented the \abbr{TDS} hierarchy. The +alternative is not in use at any known site, and the \abbr{TWG} felt it +wrong to mandate something with which there is no practical experience. + +\item The alternative arrangement increases the number of top-level +directories, so the files that must be found using subdirectory +searching are spread out in a wide, shallow tree. This could have a +profound impact on the efficiency of subdirectory searching. + +\end{itemize-squeeze} + + +\subsection{Font structure} + +The \abbr{TWG} struggled more with the font directory structure than +anything else. This is not surprising; the need to use the proliferation +of PostScript fonts with \TeX{} is what made the previous arrangement +with all files in a single directory untenable, and therefore what +initiated the \abbr{TDS} effort. + + +\subsubsection{Font file type location} + +We considered the supplier-first arrangement in use at many sites: + +\begin{ttdisplay} +texmf/fonts/\replaceable{supplier}/\replaceable{typeface}/\replaceable{type}/ +\end{ttdisplay} + +This improves the maintainability of the font tree, since all files +comprising a given typeface are in one place, but unless all the +programs that search this tree employ some form of caching, there are +serious performance concerns. For example, in order to find a +\path|TFM| file, the simplest implementation would require \TeX{} to +search through all the directories that contain \abbr{PK} files in all +modes and at all resolutions. + +In the end, a poll of developers revealed considerable resistance to +implementing sufficient caching mechanisms, so this arrangement was +abandoned. The \abbr{TDS} arrangement allows the search tree to be +restricted to the correct type of file, at least. Concerns about +efficiency remain, but there seems to be no more we can do without +abandoning subdirectory searching entirely. + +We also considered segregating all font-related files strictly by file +type, so that \MF{} sources would be in a directory +\path|texmf/fonts/mf|, property list files in \path|texmf/fonts/pl|, the +various forms of Type~1 fonts separated, and so on. Although more +blindly consistent, we felt that the drawback of more complicated path +constructions outweighed this. The \abbr{TDS} merges file types +(\path|mf| and \path|pl| under \path|source|, \path|pfa| and \path|pfb| +and \path|gsf| under \path|type1|) where we felt this was beneficial. + + +\subsubsection{Mode and resolution location} + +We considered having the \path|mode| at the bottom of the font tree: +\begin{ttdisplay} +texmf/fonts/pk/\replaceable{supplier}/\replaceable{typeface}/\replaceable{mode}/\replaceable{dpi}/ +\end{ttdisplay} + +In this case, however, it is difficult to limit subdirectory searching +to the mode required for a particular device. + +We then considered moving the \path|dpi|\replaceable{nnn} up to below +the mode: +\begin{ttdisplay} +texmf/fonts/pk/\replaceable{mode}/\replaceable{dpi}/\replaceable{supplier}/\replaceable{typeface}/ +\end{ttdisplay} + +But then it is not feasible to omit the \path|dpi|\replaceable{nnn} +level altogether on systems which can and do choose to use long +filenames. + + +\subsubsection{Modeless bitmaps} + +The \abbr{TDS} specifies using a single directory \path|modeless/| as +the mode name for those utilities which generate bitmaps, e.g., +\path|texmf/fonts/modeless/times/|. This has the considerable advantage +of not requiring each such directory name to be listed in a search path. + +An alternative was to use the utility name below which all such +directories could be gathered. That has the advantage of separating, +say, \path|gsftopk|-generated bitmaps from \path|ps2pk|-generated ones. +However, we decided this was not necessary; most sites will use only one +program for the purpose. Also, \abbr{PK} and \abbr{GF} fonts generally +identify their creator in the font comment following the \path|PK_ID| +byte. + +We are making an implicit assumption that \MF{} is the only program +producing mode-dependent bitmaps. If this becomes false we could add an +abbreviation for the program to mode names, as in \path|mfcx| vs.\ +\path|xyzcx| for a hypothetical program \application{Xyz}, or we could +at that time add an additional program name level uniformly to the tree. +It seemed more important to concisely represent the current situation +than to worry about hypothetical possibilities that may never~happen. + + +\subsection{Documentation structure} + +We considered placing additional documentation files in the same +directory as the source files for the packages, but we felt that users +should be able to find documentation separately from sources, since most +users have no interest in sources. + +We hope that a separate, but parallel, structure for documentation would +(1)~keep the documentation together and (2)~make it as straightforward +as possible for users to find the particular documentation they were +after. + + +\section{Related references} +\label{sec:Related references} + +This appendix gives pointers to related files and other documents. For +\abbr{CTAN} references, we use \path|http://www.ctan.org| as the +top-level domain only to make the links be live in this document. See +\url|http://www.ctan.org/tex-archive/CTAN.sites| for a complete list of +\abbr{ctan} sites; there are mirrors worldwide. + +\begin{itemize-squeeze} + +\item This document, in many formats (tex, dvi, info, pdf):\\ \hspace*{1em} +\url|http://tug.org/tds/| + +\item The \abbr{TDS} mailing list archives:\\ \hspace*{1em} +\url|http://tug.org/mail-archives/twg-tds/| + +\item The level~0 \abbr{DVI} driver standard:\\ \hspace*{1em} +\url|http://www.ctan.org/tex-archive/dviware/driv-standard/level-0/| + +\item \citetitle{Filenames for \TeX{} fonts}, with lists of recommended +supplier and typeface names:\\ \hspace*{1em} +\url|http://tug.org/fontname/| + +\item \abbr{ISO}-9660 \abbr{CD-ROM} file system standard:\\ \hspace*{1em} +\url|http://www.iso.ch/cate/cat.html| + +\item \citetitle{Components of \TeX{}}, a paper by Joachim +Schrod:\\ \hspace*{1em} +\url|http://www.ctan.org/tex-archive/documentation/components-of-TeX/| + +\item \citetitle{Managing Multiple TDS trees}, an article by Michael +Downes:\\ \hspace*{1em} +\url|http://tug.org/TUGboat/Articles/tb22-3/tb72downes.pdf| + +\item A complete set of \MF{} modes:\\ \hspace*{1em} +\url|http://www.ctan.org/tex-archive/fonts/modes/modes.mf| + +\item A large collection of \BibTeX{} databases and styles:\\ \hspace*{1em} +\url|ftp://ftp.math.utah.edu/pub/tex/bib/| + +\end{itemize-squeeze} + + +\section{Contributors} + +The \abbr{TWG} has had no physical meetings; electronic mail was the +communication medium. + +Sebastian Rahtz is the \TeX{} Users Group Technical Council liaison. +Norman Walsh was the original committee chair. Karl Berry is the +current editor. + +The list of contributors has grown too large to fairly include, as some +would surely be inadvertently omitted. Please consider the archives of +the \email|tds@tug.org| and \email|tex-live@tug.org| mailing lists as +the record of contributions. + + +\end{document} |