8 Anleitung zum Web2C-System

Web2C besteht aus einer Reihe von Programmen, die zusammen ein komplettes TeX-System darstellen. Dazu gehören natürlich TeX, 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 vieler Helfer die Weiterentwicklung übernommen und 1997 an Olaf Weber weitergegeben. Bei der Produktion dieser DVD und CD-ROM wurde die Version 7.5.2 von Web2C benutzt.

Web2C 7.5 läuft unter Unix, Windows 3.1, Windows9x/ME/NT/2000/XP, 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 Basisprogramme eines TeX-Systems:

bibtex
Verwaltung von Bibliographien
dmp
troff-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üfausgaben für Zeichensätze
gftopk
Packen von Zeichensätzen
gftype
Anzeige von Zeichensätzen als ASCII-Graphik
makempx
Anzeige von MetaPost-Beschriftungen
mf
Zeichensatzerzeugung
mft
Formatierte Ausgabe von METAFONT-Quellen
mpost
METAFONT-ähnliches Grafikprogramm
mpto
Extrahieren 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 einer .tfm-Datei in eine Property-Liste
vftovp
Umwandlung eines virtuellen Zeichensatzes in eine Property-Liste
vptovf
Umwandlung einer Property-Liste in einen 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 beim 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 Suchprozess im Dateisystem. Ihre Arbeitsweise wird durch einige Umgebungsvariablen und eine Konfigurationsdatei gesteuert. Web2C 7.5 kann mehr als einen Dateibaum gleichzeitig verwalten und ermöglicht somit die schon beschriebene TeXLive-Installation unter Verwendung der CD-ROM oder DVD mit Ablage modifizierter Konfigurationsdateien und zusätzlicher Zeichensätze in einem zweiten Dateibaum. Die Suche nach Dateien wird durch die 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.

8.1 Dateisuche mit der Kpathsea-Bibliothek

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

Ein Suchpfad ist eine durch Kommata oder Semikola 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, dass 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 69) 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 oder 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 erzeugt 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 muss 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 Dateinamen-Datenbank (ls-R) 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, dass Kpathsea bei absoluten und explizit relativen Komponenten, d. h. die Komponente beginnt mit den Zeichen »/«, »./« oder »../«, nur überprüft, ob die Datei existiert.

8.1.1 Bestandteile von Pfadkomponenten

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

  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 zum Programm dvips eine Zeile »S /a:/b« in der Konfigurationsdatei config.ps.
  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 76.)

8.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 später 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 oder DVD enthaltene Konfigurationsdatei.

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;}//

8.1.3 Expansion von Pfadkomponenten

Kpathsea verwendet in Suchpfaden ähnliche Zeichen und Konstrukte wie Unix-Shells. Beispielsweise wird die Definition ~$USER/{foo,bar}//baz in alle Unterverzeichnisse von foo und bar unterhalb vom Home-Verzeichnis von $USER expandiert, die eine Datei oder Unterverzeichnis namens baz enthalten. Der Expansionsmechanismus wird im Folgenden erklärt.

8.1.4 Expansion der Voreinstellungen

Wenn der Suchpfad mit der höchsten Priorität (siehe hierzu »Bestandteile von Pfadkomponenten« auf Seite 64) 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.

8.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 75):


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

Eine Anwendung wie


    TEXINPUTS = .;$TEXMF/tex//

führt dann dazu, dass 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/DVD und eine dynamisch angepasste auf Festplatte, in der neue Programmversionen und zusätzliche Zeichensätze installiert werden. Durch die Verwendung der Variablen $TEXMF in allen Definitionen wird grundsätzlich zuerst der neuere Dateibaum durchsucht.

8.1.6 Expansion von Unterverzeichnissen

Zwei oder mehrere aufeinanderfolgende Schrä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 nicht beeinflussbar, 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, dass die Verzeichnisse existieren.)

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

8.1.7 Zusammenfassung der Sonderzeichen

Folgende Zusammenfassung wiederholt alle Sonderzeichen, die in den 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
\
Konkatenation mit Folgezeilen
!!
Einschränkung der Suche auf ausschließlich die Dateinamen-Datenbank. Das Dateisystem wird nicht durchsucht!

8.2 Dateinamen-Datenbanken

Kpathsea unternimmt etliche Anstrengungen, um den Zugriff auf Festplatte und CD/DVD zur Suche nach Dateien zu reduzieren. 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 muss 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 »DOS8.3«-Dateinamen auf die »echten«, aussagekräftigen Dateinamen zur Seite stehen.

8.2.1 Die ls-R-Datenbank

Wie schon öfters erwähnt, muss 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, dass 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, dass 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.

8.2.2 kpsewhich: Dateisuche

Mit dem Programm kpsewhich können Sie unabhängig vom Aufruf irgendeines TeX-Programms nach Dateien in der TeX-Hierarchie suchen (als schnellere Alternative zu dem Befehl find). 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 das Kommando »find« absetzen.

Im Folgenden werden die wichtigen Optionen beschrieben.

--dpi=num
Stellt die Auflösung für die Suche nach Zeichensätzen (nur .gf oder .pk) 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 über den Dateinamen zu erschließen. Bei Formaten ohne zugeordnete Endung 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 5 finden. Diese Tabelle enthält die momentan bekannten Namen, eine Beschreibung und die zugehörigen Umgebungsvariablen.11

Name

Beschreibung
Umgebungsvariable
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-Prozess

OCPINPUTS

.ocp

ofm

Omega-Metrik

OFMFONTS, TEXFONTS

.ofm, .tfm

opl

Omega-Property-Liste

OPLFONTS, TEXFONTS

.opl

otp

Omega-Prozess

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-Makros

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

Tabelle 5: Kpathsea-Dateitypen

Die beiden letzten Einträge in Tabelle 5 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. Definieren Sie die entsprechenden Variablen über Ihre Shell nur dann, wenn Sie eine der Einstellungen zur Laufzeit ändern wollen.

Übrigens können Sie nur eine der beiden Optionen »--format« und »--path« gleichzeitig angeben.

--mode=string

Setzt für die Zeichensatzsuche den Generierungsmodus (betrifft nur .gf- oder .pk-Dateien). Normalerweise werden alle Zeichensätze gemeldet.
--must-exist

Es wird versucht, die Dateien notfalls durch eine Suche auf der Festplatte zu finden. Normalerweise wird nur die ls-R-Datenbank konsultiert.
--path=string

Sucht entlang des angegebenen Pfades statt des Standardpfads, der auf Grund der Endung gewählt wird. Alle Expansionen sind zulässig. Bei Verwendung der Option »--path« darf nicht Option »--format« 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 Endung. Diese kann entweder als Endung (».pk«, ».vf«, usw.) oder als Name (wie bei der Option »--format«) spezifiziert werden.
--debug=num

Legt den Umfang für die Fehlersuche fest.

8.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. Da die Namensendung ».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 Endungen 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 Namensendung .pk werden von Anzeige- oder Druckaufbereitungsprogrammen wie dvips und xdvi verwendet. Nachdem wir keine .pk-Dateien verwenden, sondern die PostScript Type-1-Zeichensätze, die auf der CD/DVD 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 Type-1-Umsetzungen vor. Da unser voreingestellter METAFONT-Modus ljfour eine Auflösung von 600 dpi besitzt, finden wir (nachdem er schon einmal gebraucht und automatisch erzeugt wurde) eine entsprechende Instanz dieses Zeichensatzes.

> kpsewhich -dpi=300 ecrm1000.pk
Durch die Angabe von --dpi=300 interessieren wir uns nur für Zeichensätze in der Auflösung 300 dpi. Es wurde keiner gefunden. Programme wie dvips oder xdvi lassen einen solchen fehlenden Zeichensatz durch den 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 die Endung ».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 Type-1-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 Type-1-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, dass eine falsche Version einer Datei verwendet wird. Sie lassen sich einfach die verwendete Datei von kpsewhich anzeigen.

8.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 den Umfang der Fehlersuche an.

Durch die 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 Type-1-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 7 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 7: Suche nach Konfigurationsdateien
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 8: Suche nach Prologdateien
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 9: Suche nach Fontdateien

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 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 diese Dateien und zusätzlich die allgemeine Zeichensatzzuordnungstabelle psfonts.map zu laden, die immer konsultiert wird; der letzte Teil von Abschnitt 8.2.3 erklärt diese Tabellen genauer.

Jetzt erfolgt die normale Startmeldung von dvips:


dvips(k) 5.94a
kpathsea version
Copyright (C) 2003 Radical Eye Software.
...
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 erzeugten 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 Type-1-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]

8.3 Einstellungen zur Laufzeit

Zu den willkommenen Erweiterungen von Web2C 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 texmf.cnf. Die wichtigsten Werte sind:

main_memory
Arbeitsspeicher für TeX, METAFONT und MetaPost in Worten. Für jede Einstellung muss 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«.
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 finden Sie für die Programme hugetex und pdflatex, dass jeweils 15000 Worte zusätzlich angefordert werden. (Die Voreinstellung ist 0, wie Sie in Zeile 474 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.