6 Anleitung zum Web2c-System

Web2c besteht aus einer Reihe von Programmen, die zusammen ein komplettes TeX-System darstellen. Dazu gehören z. B. TeX selbst, METAFONT, MetaPost, BIBTeX, usw. Die erste Implementierung eines TeX-Systems in der Programmiersprache C stammt von Tomas Rokicki und datiert zurück in das Jahr 1987. Rokicki benutzte als Basis sog. Change-Files unter Unix, die von Howard Trickey und Pavel Curtis entwickelt wurden. Tim Morgan hat dieses System, für das der Name Web-to-C eingeführt wurde, gepflegt. 1990 hat Karl Berry mit Unterstützung Dutzender Helfer die Weiterentwicklung übernommen und 1997 an Olaf Weber weitergegeben. Die neueste Fassung von Web2c ist Version 7.3, die im März 1999 freigegeben wurde. Auf diesem TeX-System basiert die TeX Live CD-ROM.

Web2c 7.2 läuft unter Unix, Windows 3.1, 9x/NT, DOS und auf weiteren Betriebssystemen. Es benutzt die Original-Quelldateien von Donald E. Knuth und weitere in der Sprache web entwickelte Programme als Basis und übersetzt diese in C-Quellcode. Darüberhinaus bietet das System viele Makros und Funktionen zur Nutzung der originalen TeX-Software. Hier eine Liste der grundlegenden Programme eines TeX-Systems:

bibtex
Verwaltung von Bibliographien
dmp
troœ nach MPX Konverter (MetaPost-Bilder)
dvicopy
Umwandlung von virtuellen Zeichensätzen in DVI-Dateien
dvitomp
DVI nach MPX Konverter (MetaPost-Bilder)
dvitype
Textanzeige aus DVI-Dateien
gftodvi
Erzeugung von Prüfdrucken für Zeichensätze
gftopk
Packen von Zeichensätzen
gftype
Textanzeige von Zeichensätzen
makempx
Anzeige von MetaPost-Beschriftungen
mf
Zeichensatzerzeugung
mft
Formatierte Ausgabe von METAFONT-Quellen
mpost
METAFONT-ähnliches Grafikprogramm
mpto
Extrahierung von MetaPost-Beschriftungen
newer
Vergleich von Dateierstellungsdaten
patgen
Erzeugung von Trennmustern
pktogf
Entpacken von Zeichensätzen
pktype
Anzeige gepackter Zeichensätze
pltotf
Umwandlung von Property-Listen in TFM-Dateien
pooltype
Anzeige der Bildschirmtexte eines WEB-Programms
tangle
Konverter web nach Pascal
tex
TeX-Programm
tftopl
Umwandlung TFM-Datei in Property-Liste
vftovp
Virtueller Zeichensatz in Property-Liste
vptovf
Property-Liste in virtuellen Zeichensatz
weave
web-Code als TeX-Dokumentation

Die genaue Funktionsweise und die möglichen Parameter sind der Beschreibung der jeweiligen Pakete bzw. der Web2c-Dokumentation zu entnehmen. Trotzdem wird Ihnen ein Überblick über Zusammenspiel und Funktionsweise der Web2c-Programme sicher helfen, besser mit dem System zurechtzukommen.

Zunächst verstehen alle Programme die grundlegenden Parameter der GNU-Software:

help   
kurzer Hilfstext
verbose
ausführliche Ausgaben zum Programmablauf
version
Ausgabe der Versionsnummer

Die Programme des Web2c-Systems benutzen zum Lokalisieren der benötigten Dateien im Dateisystem die Kpathsea-Bibliothek. Diese Bibliothek optimiert und beschleunigt den Suchprozeß im Dateisystem. Ihre Arbeitsweise wird durch einige Umgebungsvariablen und eine Konfigurationsdatei gesteuert. Web2c kann mehr als einen Dateibaum gleichzeitig verwalten und ermöglicht somit die schon beschriebene TeX Live-Installation unter Verwendung der CD-ROM mit Ablage modifizierter Konfigurationsdateien und zusätzlicher Zeichensätze in einem zweiten Dateibaum. Die Suche nach Dateien wird durch Analyse der Datei ls-R beschleunigt, die in jedem Wurzelverzeichnis eines TeX-Dateibaums vorhanden ist. Sie enthält für jede Datei die genaue Position im Dateibaum relativ zum Wurzelverzeichnis.

6.1 Dateisuche mit der Kpathsea-Bibliothek

Wir beschreiben zunächst den grundlegenden Suchmechanismus der Kpathsea-Bibliothek.

Ein Suchpfad ist eine durch Kommata oder Semicola getrennte Liste von Pfadkomponenten, die üblicherweise Verzeichnisnamen darstellen. Ein Suchpfad kann sich aus vielen Komponenten zusammensetzen. Die Suche nach einer Datei “my-file” über den Suchpfad “.:/dir” bewirkt, daß Kpathsea jede Komponente nacheinander überprüft, also zunächst “./my-file” und dann “/dir/my-file”. Als Ergebnis wird entweder die erste gefundene Datei oder eine Liste aller passenden Dateien geliefert.

Um auf allen Dateisystemen effizient zu arbeiten, verwendet Kpathsea ggf. andere Datei/Verzeichnis-Separatoren als “:” und “/”.

Beim Überprüfen einer Pfadkomponente p überprüft Kpathsea zunächst, ob eine Dateinamen-Datenbank (siehe auch Dateinamen-Datenbank auf Seite 30) für die Pfadkomponente zuständig ist, d. h. beispielsweise steht die Datenbank in einem Verzeichnis, das im Pfad vor der zu überprüfenden Komponente p steht. In diesem Fall wird zur Bestimmung der Position der gesuchten Datei die Datenbank herangezogen.

Nur, wenn keine passende Datenbank existiert, bzw., wenn die Datei nicht in der Datenbank gefunden wird, durchsucht Kpathsea das Dateisystem. Diese zeitaufwendige Suche kann über Spezifikation der Pfadkomponente p mit Präfix “!!” unterbunden werden. Zur Suche generiert Kpathsea eine Liste der Verzeichnisse, die im Pfadelement enthalten sind, und durchsucht jedes dieser Verzeichnisse nach der gesuchten Datei.

Für Dateien kann auch ein Schalter „file must exist“ gesetzt werden (Datei muß vorhanden sein). Wenn dieser Schalter nicht gesetzt ist und beispielsweise über das TeX-Kommando openin eine VF-Datei wie cmr10.vf gelesen werden soll, wäre es falsch, nach dieser Datei zu suchen, weil es sie gar nicht gibt. Speziell für neu installierte VF-Dateien sollten Sie also unbedingt die ls-R-Datenbank aktualisieren, weil die Dateien sonst nicht gelesen werden und kein Fehler erzeugt wird. Dieser Vorgang wiederholt sich für jede Komponente eines Suchpfades: zunächst wird die Datenbank überprüft, danach ggf. das Dateisystem. Wird die Datei gefunden, stoppt die Suche (normalerweise) und der komplette Pfad zur gesuchten Datei wird als Ergebnis zurückgegeben.

Außer Verzeichnisnamen dürfen Pfadkomponenten für Kpathsea folgende Elemente enthalten: (verschachtelte) Vorgaben, Umgebungsvariablen, Werte aus der Konfigurationsdatei, Home-Verzeichnisse von Benutzern und Startverzeichnisse für eine rekursive Suche. Diese Elemente werden vor einer Dateisuche von Kpathsea in gewöhnliche Verzeichnis- oder Dateinamen expandiert. Diese Expansion wird in den folgenden Abschnitten erklärt, und zwar genau in der Reihenfolge, wie die Elemente auch von Kpathsea bearbeitet werden.

Beachten Sie, daß Kpathsea bei absoluten und explizit relativen Komponenten, d. h., die Komponente beginnt mit den Zeichen “/”, “./” oder “../”, nur überprüft, ob die Datei existiert.

6.1.1 Bestandteile von Pfadkomponenten

Ein Suchpfad kann aus vielen verschiedenen Bestandteilen aufgebaut werden. In der Reihenfolge, wie Kpathsea sie auswertet, sind das:

  1. Eine benutzerdefinierte Umgebungsvariable, z.B. TEXINPUTS. Wird der Variablen ein Punkt und ein Programmname nachgestellt, wie beispielsweise bei TEXINPUTS.latex, hat diese Form Vorrang vor den „gewöhnlichen“ Variablen.
  2. Einträge aus programmspezifischen Konfigurationsdateien, beispielsweise eine Zeile “S /a:/b” in der Konfigurationsdatei config.ps zum Programm dvips.
  3. Die Einträge aus der Kpathsea-Konfigurationsdatei texmf.cnf, z. B. “TEXINPUTS=/c:/d” (siehe folgenden Text).
  4. Die Einstellung beim Übersetzen der Programme.

Unter Verwendung der Parameter zur Fehlersuche können Sie diese Werte für einen Suchpfad auch anzeigen lassen. (Siehe dazu den Abschnitt Fehlersuche auf Seite 38.)

6.1.2 Konfigurationsdateien

Die Kpathsea-Bibliothek liest zur Laufzeit die Konfigurationsdateien namens texmf.cnf. Der zugehörige Suchpfad zum Auffinden dieser Konfigurationsdateien steht in der Umgebungsvariablen TEXMFCNF (die Voreinstellung ist texmf/web2c). Kpathsea liest alle Dateien namens texmf.cnf, die es in diesem Suchpfad findet. Die zuerst gelesenen Definitionen haben dabei Vorrang vor nachher gelesenen Werten. Wenn der Suchpfad auf .:$TEXMF steht, überschreiben die Einstellungen in ./texmf.cnf diejenigen in $TEXMF/texmf.cnf.

Im folgenden wird die Syntax der texmf.cnf-Datei angegeben. Konsultieren Sie zum besseren Verständnis beim Lesen die auf der CD-ROM enthaltene Konfigurationsdatei, die ab Seite 46 im Anhang der Anleitung abgedruckt ist.

Der Ausschnitt einer Konfigurationsdatei demonstriert diese Möglichkeiten.


  TEXMF              = {$TEXMFLOCAL;!!$TEXMFMAIN}
  TEXINPUTS.latex    = .;$TEXMF/tex/{latex;generic;}//
  TEXINPUTS.fontinst = .;$TEXMF/tex//;$TEXMF/fonts/afm//
  % e-TeX related files
  TEXINPUTS.elatex   = .;$TEXMF/{etex;tex}/{latex;generic;}//
  TEXINPUTS.etex     = .;$TEXMF/{etex;tex}/{eplain;plain;generic;}//
6.1.3 Expansion von Pfadkomponenten

Kpathsea verwendet in Suchpfaden ähnliche Zeichen und Konstrukte wie Unix-Shells. Als Beispiel wird die Definition ~$USER/{foo,bar}//baz in alle Pfade im Home-Verzeichnis expandiert, die unter den Verzeichnissen foo oder bar liegen und ein Unterverzeichnis oder eine Datei mit dem Namen baz enthalten. Der Expansionsmechanismus wird im folgenden erklärt.

6.1.4 Expansion der Voreinstellungen

Wenn der höchstpriorisierte Suchpfad (siehe „Expansion von Pfadkomponenten“ auf Seite 26) einen zusätzlichen (vorangestellten, nachgestellten oder verdoppelten) Doppelpunkt enthält, wird an dieser Stelle der Suchpfad eingefügt, der als nächstes in der Hierarchie folgt. Auch bei diesem gilt dieselbe Regel. Wenn beispielsweise die Umgebungsvariable


>> setenv TEXINPUTS /home/karl:
gesetzt wird (hier: C-Shell) und in texmf.cnf die Variable TEXINPUTS folgenden Wert erhält

  .:$TEXMF//tex
dann lautet der Suchpfad schließlich:

  /home/karl:.:$TEXMF//tex

Da es sinnlos wäre, denselben Pfad mehrfach einzufügen, wird die Ersetzung nur einmal vorgenommen, und zwar in der Reihenfolge vorne, hinten und Mitte. Mehrfach verdoppelte Doppelpunkte bleiben unverändert.

6.1.5 Expansion geschweifter Klammern

Die Expansion geschweifter Klammern ist zur Definition mehrerer TeX-Hierarchien sehr nützlich. Beispielsweise wird v{a,b}w zu vaw:vbw. Verschachtelungen sind dabei erlaubt. Diese Technik kann dazu benutzt werden, durch Zuweisung an $TEXMF verschiedene TeX-Hierarchien einzuführen. Als Beispiel finden Sie in texmf.cnf folgende Definition (Zeile 29):


    TEXMF = {$HOMETEXMF,$TEXMFLOCAL,!!$VARTEXMF,!!$TEXMFMAIN}

Eine Anwendung wie


    TEXINPUTS = .;$TEXMF/tex//

führt dann dazu, daß erst im aktuellen Verzeichnis gesucht wird, dann der gesamte Dateibaum $HOMETEXMF/tex und $TEXMFLOCAL/tex (auf der Festplatte) und schließlich der gesamte Dateibaum $VARTEXMF/tex sowie $TEXMFMAIN/tex (nur in der Datenbank ls-R) durchsucht wird. Dadurch kann man bequem zwei parallel installierte TeX-Hierarchien durchsuchen, beispielsweise eine unveränderliche auf CD-ROM und eine dynamisch angepaßte auf Festplatte, in der neue Programmversionen und zusätzliche Zeichensätze installiert werden. Durch Verwendung der Variablen $TEXMF in allen Definitionen wird grundsätzlich zuerst der neuere Dateibaum durchsucht.

6.1.6 Expansion von Unterverzeichnissen

Zwei oder mehrere aufeinanderfolgende Vorwärtsschrägstriche in einer Pfadkomponente, die auf einen Verzeichnisnamen d folgen, werden expandiert zu allen Unterverzeichnissen von d. Dieser Vorgang findet rekursiv statt, wobei erst alle Verzeichnisse auf einer Ebene bearbeitet werden, dann deren Unterverzeichnisse, usw. Auf den jeweiligen Ebenen ist es nicht beeinflußbar, in welcher Reihenfolge die Unterverzeichnisse bearbeitet werden.

Wenn nach den Schrägstrichen Namen angegeben werden, dann werden nur Unterverzeichnisse mit passenden Namen in die Suche einbezogen. Beispielsweise wird “/a//b” in die Pfade /a/1/b, /a/2/b, /a/1/1/b usw. expandiert, aber nicht zu /a/b/c oder /a/1. (Jeweils vorausgesetzt, daß die Verzeichnisse existieren.)

Mehrere “//”-Konstruktionen innerhalb einer Pfadkomponente sind zulässig, allerdings nicht am Pfadanfang.

6.1.7 Zusammenfassung der Sonderzeichen

Folgende Zusammenfassung wiederholt alle Sonderzeichen, die in Kpathsea-Konfigurationsdateien auftreten können:

:
Trennzeichen für Pfadkomponenten; als erstes oder letztes Zeichen im Pfad bewirkt es die Expansion der Voreinstellungen.
;
Trennzeichen für Pfadkomponenten für andere Rechnerplattformen als Unix (Verwendung wie :)
$
Expansion von Variableninhalten
~
Home-Verzeichnis eines Benutzers
{...}
Expansion geschweifter Klammern, beispielsweise wird a{1,2}b zu a1b:a2b
//
Expansion von Unterverzeichnissen. Tritt niemals am Anfang einer Pfadkomponente auf.
%
Kommentar
\
Zeilenkonkatenation
!!
Einschränkung der Suche auf ausschließlich die Dateinamen-Datenbank. Das Dateisystem wird nicht durchsucht!

6.2 Dateinamen-Datenbanken

Kpathsea unternimmt etliche Anstrengungen, um den Zugriff auf Festplatte und CD-ROM zur Suche nach Dateien einzuschränken. Auf TeX-Systemen mit vielen Unterverzeichnissen kann die Suche in jedem möglichen Verzeichnis nach einer bestimmten Datei eine lange Zeit in Anspruch nehmen, besonders wenn einige Hundert Zeichensatzverzeichnisse durchforstet werden müssen. Um dieses Problem abzumildern, benutzt Kpathsea eine Art Datenbankdatei namens ls-R, die die Zuordnung von Dateinamen auf Verzeichnisse enthält. Dadurch muß nicht jedesmal die Festplatte durchsucht werden.

Eine zweite Datenbank in der Datei aliases kann eine Zuordnung zwischen den Namen in ls-R und weiteren Namen vornehmen und so beispielsweise hilfreich bei der Umsetzung von „8.3“-Dateinamen (wie sie auf der CD-ROM obligatorisch sind) auf die „echten“, aussagekräftigen Dateinamen zur Seite stehen.

6.2.1 Die ls-R-Datenbank

Wie schon öfters erwähnt, muß die Datenbank der Dateinamen in der Datei ls-R gespeichert sein. Sie sollten eine solche Datenbank für jede TeX-Hierarchie (normalerweise in $TEXMF) Ihres Systems anlegen. Die meisten TeX-Systeme arbeiten nur mit einer Hierarchie. Kpathsea sucht die Datenbanken ls-R über den Pfad TEXMFDBS.

Es wird empfohlen, die Pflege der “ls-R”-Dateien dem mitgelieferten Skript mktexlsr zu überlassen. Dieses Skript wird automatisch von den verschiedenen “mktex...”-Skripten aufgerufen. Das Skript ruft grob gesagt den Befehl


cd /your/texmf/root && ls -LAR ./ >ls-R
auf, falls das ls-Kommando Ihres Rechners eine Ausgabe im richtigen Format liefert. (So wie das GNU ls.) Wenn Sie ganz sichergehen wollen, daß die Datenbank immer auf dem neuesten Stand ist, sollten Sie sie in regelmäßigen Abständen mit Hilfe eines crontab-Eintrags aktualisieren lassen. Dadurch wird nach einer Installation eines Pakets von Hand trotzdem sichergestellt, daß die Datenbank aktuell ist.

Wenn eine Datei nicht über die Datenbank gefunden wird, sucht Kpathsea normalerweise auf der Festplatte weiter. Wenn eine Pfadkomponente mit “!!” beginnt, wird dagegen niemals die Festplatte durchsucht.

6.2.2 kpsewhich: Dateisuche

Mit dem kpsewhich-Programm können Sie unabhängig vom Aufruf irgendeines TeX-Programms nach Dateien in der TeX-Hierarchie suchen (als schnellere Alternative zu einem find-Befehl). Dies wird von den verschiedenen “mktex...”-Skripten bis zum Exzess vorexerziert.


>> kpsewhich option... filename...
Die Optionen werden entweder mit “-” oder mit “--” eingeleitet. Jede eindeutige Abkürzung ist zulässig.

Argumente der Kommandozeile, die keine Optionen darstellen, werden als Dateinamen interpretiert. Für jeden Dateinamen wird der erste passende Pfad gemeldet. Um eine Liste aller passenden Pfade zu erhalten, müssen Sie ein “find”-Kommando absetzen.

Im folgenden werden die wichtigen Optionen beschrieben.

dpi=num
Stellt die Auflösung für die Suche nach Zeichensätzen auf num dpi. Alternativ kann die Option -D (kommt von dvips) benutzt werden. Voreinstellung ist 600.
format=name

Setzt das Format zur Suche auf Name. Per Voreinstellung versucht kpsewhich das Format aus dem Dateinamen zu raten. Bei Formaten ohne zugeordneten Suffix wie den zu MetaPost gehörenden Dateien und den Konfigurationsdateien zu dvips müssen Sie den entsprechenden Namen eingeben, den Sie in der ersten Spalte von Tabelle 1 finden. Diese Tabelle enthält die momentan bekannten Namen, eine Beschreibung und die zugehörigen Environmentvariablen. 1

Tabelle 1: Kpathsea Dateitypen
Name Beschreibung Environment Endung




afm Adobe PostScript Metrikdateien AFMFONTS .afm
base Metafont-Basis MFBASES, TEXMFINI .base
bib BIBTeX-Literaturdatenbank BIBINPUTS, TEXBIB .bib
Pixelbilder von Zeichensätzen GLYPHFONTS, TEXFONTS
bst BIBTeX-Stildateien BSTINPUTS .bst
cnf Konfigurationsdateien TEXMFCNF .cnf
dvips config dvips-Konfigurationsdateien, z. B. config.ps und psfonts.map TEXCONFIG .map
fmt TeX-Format TEXFORMATS, TEXMFINI .fmt, .efmt, .efm
gf METAFONT-Zeichensätze GFFONTS .gf
graphic/figure Encapsulated-PostScript-Dateien TEXPICTS, TEXINPUTS .eps, .epsi
ist makeindex Stil-Dateien TEXINDEXSTYLE, INDEXSTYLE .ist
ls-R Dateinamen-Datenbanken TEXMFDBS
map Zeichensatzzuordnungtabellen TEXFONTMAPS .map
mem MetaPost-Format MPMEMS, TEXMFINI .mem
mf Metafont-Quelldatei MFINPUTS .mf
mfpool Metafont-Bildschirmmeldungen MFPOOL, TEXMFINI .pool
mft MFT-Stildateien MFTINPUTS .mft
verschiedene Zeichensätze MISCFONTS
mp MetaPost-Quelldateien MPINPUTS .mp
mppool MetaPost-Bildschirmmeldungen MPPOOL, TEXMFINI .pool
MetaPost support MetaPost- Hilfsdateien für DMP MPSUPPORT
ocp Omega-Prozeß OCPINPUTS .ocp
ofm Omega-Metrik OFMFONTS, TEXFONTS .ofm, .tfm
opl Omega-Property-Liste OPLFONTS, TEXFONTS .opl
otp Omega-Prozeß OTPINPUTS .otp
ovf Omega virtuelle Zeichensätze OVFFONTS, TEXFONTS .ovf
ovp Omega virtuelle Property-Liste OVPFONTS, TEXFONTS .ovp
pk gepackte Zeichensätze programFONTS wobei (programm z. B. XDVI, usw., PKFONTS, TEXPKS, GLYPHFONTS, TEXFONTS .pk
PostScript header PostScript-Macros TEXPSHEADERS, PSHEADERS .pro, .enc
tex TeX-Quelldatei TEXINPUTS .tex, .cls, .sty, .clo, .def
TeX system documentation Dokumentation zum TeX-System TEXDOCS
TeX system sources TeX-Quellen TEXSOURCES
texpool TeX-Bildschirmmeldungen TEXPOOL, TEXMFINI .pool
tfm TeX-Metrikdateien TFMFONTS, TEXFONTS .tfm
Troff fonts Troff-Zeichensätze für DMP TRFONTS
truetype fonts TrueType-Zeichensätze TTFONTS .ttf, .ttc
type1 fonts Type 1 PostScript-Zeichensätze T1FONTS, T1INPUTS, TEXPSHEADERS, DVIPSHEADERS .pfa, .pfb
type42 fonts Type 42 PostScript-Zeichensätze T42FONTS
vf virtuelle Zeichensätze VFFONTS, TEXFONTS .vf
web2c files Web2c-Hilfsdateien WEB2C
other text files sonstige Textdateien FOOINPUTS
other binary files sonstige Binärdateien FOOINPUTS

Die beiden letzten Einträge in Tabelle 1 sind Spezialfälle, in denen die Pfade bzw. Umgebungsvariablen nach den zugehörigen Programmen benannt sind. Hier wird der Programmname in Großbuchstaben umgewandelt und anschließend die Zeichenkette INPUTS angehängt.

Die Umgebungsvariablen werden in der Konfigurationsdatei texmf.cnf definiert. Nur, wenn Sie explizit eine der Einstellungen ändern wollen, definieren Sie die entsprechenden Variablen über Ihre Shell.

Übrigens können Sie nur eine der beiden Optionen “format” und “path” gleichzeitig angeben.

mode=string

Setzt für das Suchen von Zeichensätzen den Generierungsmodus. Normalerweise werden alle Zeichensätze gemeldet.
must-exist

Versucht in jedem Fall, die Dateien zu finden, auch durch Suchen auf der Festplatte. Normalerweise wird nur die ls-R-Datenbank konsultiert.
path=string

Sucht entlang des angegebenen Pfades statt des Standard-Pfads, der auf Grund der Extension gewählt wird. Alle Expansionen sind zulässig. Bei Verwendung der “path”-Option darf keine “format”-Option angegeben werden.
progname=name

Setzt den Programmnamen für die genauere Variablenspezifikation über “.Programmname”. Voreinstellung ist “kpsewhich”.
show-path=name

Zeigt den Suchpfad für die angegebene Extension. Diese kann entweder als Name (“.pk”, “.vf”, etc.) oder als Zahl (wie bei der “format”-Option) spezifiziert werden.
debug=num

Legt die Stufe für die Fehlersuche fest.
6.2.3 Beispiele

Wir schauen uns nun die Funktionsweise von Kpathsea anhand einiger Beispiele an.


>> kpsewhich  article.cls
/usr/local/texmf/tex/latex/base/article.cls
Wir suchen unter den TeX-Quelldateien nach der Datei article.cls. Nachdem der suffix “.cls” eindeutig ist, müssen wir den Typ „tex“ nicht angeben. Die “TEXMF”-Hierarchie enthält die Datei im Unterverzeichnis tex/latex/base. Ähnlich bereiten die folgenden Beispiele auf Grund eindeutiger Suffixe keine Probleme.

>> kpsewhich array.sty
   /usr/local/texmf/tex/latex/tools/array.sty
>> kpsewhich latin1.def
   /usr/local/texmf/tex/latex/base/latin1.def
>> kpsewhich size10.clo
   /usr/local/texmf/tex/latex/base/size10.clo
>> kpsewhich small2e.tex
   /usr/local/texmf/tex/latex/base/small2e.tex
>> kpsewhich tugboat.bib
   /usr/local/texmf/bibtex/bib/beebe/tugboat.bib

Beim letzten Beispiel handelt es sich um eine BIBTeX-Literaturdatenbank für TUGBoat-Artikel.


>> kpsewhich cmr10.pk
Zeichensatzdateien mit Endung .pk werden von Anzeige- oder Druckaufbereitungsprogrammen wie dvips und xdvi verwendet. Nachdem wir keine “.pk”-Dateien verwenden, sondern die Type 1-Zeichensätze, die auf der CD-ROM enthalten sind, wird auch keine “.pk”-Datei angezeigt.

>> kpsewhich ecrm1000.pk
   /usr/local/texmf/fonts/pk/ljfour/jknappen/ec/ecrm1000.600pk
Für die neuen EC-Zeichensätze liegen noch keine Type1-Umsetzungen vor. Da unser voreingestellter METAFONT-Modus ljfour mit einer Auflösung von 600 dpi ist, finden wir (nachdem er schon einmal gebraucht und automatisch erzeugt wurde) eine entsprechende Instanz dieses Zeichensatzes.

>> kpsewhich -dpi=300 ecrm1000.pk
In diesem Fall interessieren wir uns durch Angabe von --dpi=300 nur für entsprechende Zeichensätze in der Auflösung 300 dpi, wobei keiner gefunden wird. Ein Programm wie dvips oder xdvi würde einen solchen fehlenden Zeichensatz durch Aufruf des Skripts mktexpk mit entsprechenden Parametern automatisch erzeugen.

Als nächstes wenden wir uns den Header- und Konfigurations-Dateien von dvips zu. Zunächst suchen wir nach der Konfiguration für TeX-Unterstützung, dem Prolog tex.pro. Danach suchen wir die allgemeine Konfigurationsdatei (config.ps) und schließlich die PostScript-Zeichensatzzuordnungsdatei psfonts.map. Da der Suffix “.ps” nicht eindeutig ist, müssen wir den gewünschten Typ („dvips config“) für die Datei config.ps spezifizieren.


>> kpsewhich tex.pro
   /usr/local/texmf/dvips/base/tex.pro
>> kpsewhich --format="dvips config" config.ps
   /usr/local/texmf/config/config.ps
>> kpsewhich psfonts.map
   /usr/local/texmf/dvips/base/psfonts.map

Jetzt suchen wir nach den Dateien für den PostScript-Zeichensatz URW Times. Nach dem Namensschema von Karl Berry beginnen die Namen mit „utm“. Zunächst suchen wir die Konfigurationsdatei, die den Namen der Zeichensatzzuordnungsdatei enthält.


>> kpsewhich --format="dvips config" config.utm
/usr/local/texmf/dvips/psnfss/config.utm
Diese Datei enthält folgende Anweisung:

  p +utm.map
Die angegebene Datei utm.map wollen wir als nächstes suchen:

>> kpsewhich --format="dvips config" utm.map
   /usr/local/texmf/dvips/psnfss/utm.map
Diese Zuordnungsdatei wird im Unterverzeichnis urw bei den Hilfsdateien für dvips gefunden. Sie enthält die Dateinamen der Type1-PostScript-Zeichensätze, die für URW Times benutzt werden. Ein kleiner Auszug aus dieser Datei:

  utmb8r  NimbusRomNo9L-Medi    ... <utmb8a.pfb
  utmbi8r NimbusRomNo9L-MediItal... <utmbi8a.pfb
  utmr8r  NimbusRomNo9L-Regu    ... <utmr8a.pfb
  utmri8r NimbusRomNo9L-ReguItal... <utmri8a.pfb
  utmbo8r NimbusRomNo9L-Medi    ... <utmb8a.pfb
  utmro8r NimbusRomNo9L-Regu    ... <utmr8a.pfb
Wenn wir jetzt beispielsweise nach dem Zeichensatz Times Regular (utmr8a.pfb) suchen, finden wir ihn im texmf-Verzeichnis unter den Type1-Zeichensätzen:

>> kpsewhich utmr8a.pfb
   /usr/local/texmf/fonts/type1/urw/utm/utmr8a.pfb

Diese Beispiele sollten deutlich gemacht haben, wie leicht bestimmte Dateien im TeX-Dateibaum gefunden werden können. Dies ist sehr wichtig, wenn Sie den Verdacht haben, daß eine falsche Version einer Datei verwendet wird. Sie lassen sich einfach die verwendete Datei von kpsewhich anzeigen.

6.2.4 Fehlersuche

Manchmal ist wichtig, bis ins Detail nachzuvollziehen, wie ein Programm eine bestimmte Datei findet. Zu diesem Zweck bietet die Kpathsea-Bibliothek verschiedene Stufen für Ausgaben zur Fehlersuche an.

Durch Angabe von -1 setzen Sie alle Stufen gleichzeitig. Für eine effiziente Fehlersuche sollten Sie sich auf die wichtigsten Ausgaben beschränken.

Für dvips gibt es einen ähnlichen Mechanismus zur Erzeugung von Analysemeldungen um herauszufinden, warum bestimmte Dateien geöffnet wurden bzw. wo vielleicht das Problem liegt, wenn Dateien nicht gefunden werden.

Da fast alle Programme die Kpathsea-Bibliothek benutzen, können Sie die gewünschte Stufe auch über die Umgebungsvariable KPATHSEA_DEBUG einstellen, indem Sie einen der Werte oder eine additive Kombination spezifizieren.

Wir betrachten als Beispiel eine kleine LaTeX-Quelldatei namens hello-world.tex mit folgendem Inhalt:


    \documentclass{article}
    \begin{document}
    Hello World!
    \end{document}

Diese Datei verwendet nur einen Zeichensatz, cmr10. Wir sehen uns jetzt einmal genau an, wie dvips die PostScript-Datei erzeugt. (Da wir die Type1-Variante der Computer Modern Roman-Zeichensätze verwenden wollen, haben wir die Option -Pcms verwendet).


>> dvips -d4100 hello-world -Pcms -o
Hier haben wir als Stufe zur Fehlersuche eine Kombination der Stufe 4 von dvips (siehe dvips-Handbuch, texmf/doc/html/dvips/dvips_toc.html). Die Ausgabe sieht in etwa wie Abbildung 4 aus (die Ausgabe ist für besseren Überblick etwas umgestaltet).

  debug:start search(file=texmf.cnf, must_exist=1, find_all=1,
    path=.:/usr/local/bin/texlive:/usr/local/bin:
         /usr/local/bin/texmf/web2c:/usr/local:
         /usr/local/texmf/web2c:/.:/./teTeX/TeX/texmf/web2c:).
  kdebug:start search(file=ls-R, must_exist=1, find_all=1,
    path=~/tex:/usr/local/texmf).
  kdebug:search(ls-R) =>/usr/local/texmf/ls-R
  kdebug:start search(file=aliases, must_exist=1, find_all=1,
    path=~/tex:/usr/local/texmf).
  kdebug:search(aliases) => /usr/local/texmf/aliases
  kdebug:start search(file=config.ps, must_exist=0, find_all=0,
    path=.:~/tex:!!/usr/local/texmf/dvips//).
  kdebug:search(config.ps) => /usr/local/texmf/dvips/config/config.ps
  kdebug:start search(file=/root/.dvipsrc, must_exist=0, find_all=0,
    path=.:~/tex:!!/usr/local/texmf/dvips//).
  search(file=/home/goossens/.dvipsrc, must_exist=1, find_all=0,
    path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//).
  kdebug:search($HOME/.dvipsrc) =>
  kdebug:start search(file=config.cms, must_exist=0, find_all=0,
    path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//).
  kdebug:search(config.cms)
  =>/usr/local/texmf/dvips/cms/config.cms

Abbildung 4: Finding configuration files

  kdebug:start search(file=texc.pro, must\_exist=0, find\_all=0,
    path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
         ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
  kdebug:search(texc.pro) => /usr/local/texmf/dvips/base/texc.pro

Abbildung 5: Finding the prolog file

  kdebug:start search(file=cmr10.tfm, must\_exist=1, find\_all=0,
    path=.:~/tex/fonts/tfm//:!!/usr/local/texmf/fonts/tfm//:
         /var/tex/fonts/tfm//).
  kdebug:search(cmr10.tfm) => /usr/local/texmf/fonts/tfm/public/cm/cmr10.tfm
  kdebug:start search(file=texps.pro, must\_exist=0, find\_all=0,
     ...
  <texps.pro>
  kdebug:start search(file=cmr10.pfb, must\_exist=0, find\_all=0,
    path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
         ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
  kdebug:search(cmr10.pfb) => /usr/local/texmf/fonts/type1/public/cm/cmr10.pfb
  <cmr10.pfb>[1]

Abbildung 6: Finding the font file

Zunächst sucht dvips (bzw. Kpathsea) seine Konfigurationsdateien, nämlich texmf.cnf (das die Pfade der anderen Dateien enthält), dann die Dateinamen-Datenbank ls-R (zur Optimierung der Suche) und die Datei aliases, mit deren Hilfe für eine Datei mehrere Namen vereinbart werden können, z. B. um die kurzen “8.3” DOS-Namen mit aussagefähigen, langen Namen zu assoziieren. Danach wird die allgemeine dvips-Konfigurationsdatei config.ps, anschließend die benutzerspezifische Konfigurationsdatei .dvipsrc (wird hier nicht gefunden) gesucht. Als letztes sucht dvips die Zuordnungsdatei für Computer Modern PostScript-Zeichensätze config.cms (bedingt durch die Option -Pcms beim Aufruf von dvips). Diese Datei enthält die Dateinamen der Listen, die die die die Zuordnung zwischen Dateinamen und Zeichensatznamen herstellen.

>> more /usr/local/texmf/dvips/cms/config.cms
   p +ams.map
   p +cms.map
   p +cmbkm.map
   p +amsbkm.map
dvips versucht, all diese Dateien und zusätzlich die allgemeine Zeichensatzzuordnungstabelle psfonts.map zu laden, die immer konsultiert wird; der letzte Teil von Abschnitt 6.2.3 erklärt diese Tabellen genauer.

Jetzt erfolgt die normale Startmeldung von dvips:


This is dvips 5.78 Copyright 1998 Radical Eye Software (www.radicaleye.com)
Danach wird nach texc.pro gesucht:

kdebug:start search(file=texc.pro, must_exist=0, find_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
       ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
kdebug:search(texc.pro) => /usr/local/texmf/dvips/base/texc.pro
Danach gibt dvips Datum und Uhrzeit aus und meldet den Dateinamen der generierten PostScript-Datei hello-world.ps. Jetzt wird die Zeichensatzdatei cmr10 benötigt, die dvips als „resident“ meldet.

TeX output 1998.02.26:1204' -> hello-world.ps
Defining font () cmr10 at 10.0pt
Font cmr10 <CMR10> is resident.
Es geht weiter mit cmr10.tfm und einigen weiteren Prologdateien, deren Ausgaben wir hier weglassen. Letztlich wird die Type1-Zeichensatzdatei cmr10.pfb gesucht (und gefunden) und in die Ausgabedatei integriert (siehe letzte Zeile).

kdebug:start search(file=cmr10.tfm, must_exist=1, find_all=0,
  path=.:~/tex/fonts/tfm//:!!/usr/local/texmf/fonts/tfm//:
       /var/tex/fonts/tfm//).
kdebug:search(cmr10.tfm) => /usr/local/texmf/fonts/tfm/public/cm/cmr10.tfm
kdebug:start search(file=texps.pro, must_exist=0, find_all=0,
   ...
<texps.pro>
kdebug:start search(file=cmr10.pfb, must_exist=0, find_all=0,
  path=.:~/tex/dvips//:!!/usr/local/texmf/dvips//:
       ~/tex/fonts/type1//:!!/usr/local/texmf/fonts/type1//).
kdebug:search(cmr10.pfb) => /usr/local/texmf/fonts/type1/public/cm/cmr10.pfb
<cmr10.pfb>[1]

6.3 Einstellungen zur Laufzeit

Zu den willkommenen Erweiterungen von Web2c 7.3 zählt die Möglichkeit, zur Laufzeit einige Speichergrößen über die Datei texmf.cnf anpassen zu können (insbesondere die Größe einiger Stacks). Eine ausführliche Liste der veränderbaren Parameter finden Sie in der Datei, die ab Seite 46 in dieser Anleitung abgedruckt ist. Die interessanten Parameter beginnen in Teil 3. Die wichtigsten Werte sind:

main_memory
Arbeitsspeicher für TeX, METAFONT und MetaPost in Worten. Für jede Einstellung muß eine eigene Format-Datei erstellt werden. Allerdings können Sie mehrere Versionen von TeX unter verschiedenen Namen erzeugen und in der Konfigurationsdatei jeweils eigene Einträge vorsehen. Hier gibt es ein Monster-TeX namens „hugetex“. Das normale TeX erhält den Wert in Zeile 357, für hugetex gilt Zeile 432.
extra_mem_bot
Extraspeicher für „große“ TeX-Datenstrukturen wie Boxen, Glue, Breakpoints, usw. Besonders bei Anwendung von PI CTeX sollte dieser Wert erhöht werden.
font_mem_size
Anzahl Worte für Speicherung von Zeichensatzinformationen. Entspricht ungefähr dem Speicherbedarf der gelesenen TFM-Dateien.
hash_extra
Zusätzlicher Platz für Suchlisten. In der Hauptliste können ca. 10000 Einträge verwaltet werden. Bei einem Buch mit vielen Querverweisen reicht dieser Platz unter Umständen nicht aus. In der Datei texmf.cnf (ab Seite 46) sehen Sie für die Programme hugetex und pdflatex, daß jeweils 15000 Worte zusätzlich angefordert werden. (Die Voreinstellung ist 0, wie Sie in Zeile 369 sehen.)

Natürlich sind diese Parameter kein Ersatz für eine wirklich dynamische Speicherverwaltung. Mit der gegenwärtigen Version von TeX ist dieses Konzept aber nur extrem schwer zu implementieren, darum stellt dieses Verfahren eine praktikable Lösung dar.