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:
- 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.
- Einträge aus programmspezifischen Konfigurationsdateien, beispielsweise eine Zeile “S /a:/b”
in der Konfigurationsdatei config.ps zum Programm dvips.
- Die Einträge aus der Kpathsea-Konfigurationsdatei texmf.cnf, z. B. “TEXINPUTS=/c:/d” (siehe
folgenden Text).
- 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.
- Kommentare beginnen mit einem %“ Kommentare beginnen mit einem “%” und erstrecken sich bis
zum Zeilenende.
- Leerzeilen werden überlesen.
- Ein \-Zeichen am Zeilenende faßt die aktuelle mit der folgenden Zeile zusammen. Leerraum in der
Folgezeile wird nicht überlesen.
- Jede andere Zeile muß folgenden Aufbau haben:
Variable[.Programmname] [=] Wert
wobei das =“-Zeichen und umgebender Leerraum weggelassen werden dürfen.
- Der Name von Variable darf alle Zeichen enthalten außer Leerraum, “=” und “.”. Am besten
verwenden Sie ausschließlich die Zeichen “A-Za-z_”.
- Wenn das Suffix .Programmname angegeben wird, gilt die Variable nur für das entsprechende
Programm Programmname oder Programmname.exe. Auf diese Weise können beispielsweise
verschiedene TeX-Formate mit unterschiedlichen Suchpfaden arbeiten.
- Wert darf alle Zeichen außer % und @ enthalten. Die Einschränkung der Werte auf bestimmte Programme
über ein Suffix ist nicht zulässig. Ein “;”-Zeichen in Wert wird unter Unix in ein “:”-Zeichen
umgewandelt. Dadurch ist die Verwendung der gleichen Konfigurationsdateien für Unix und
DOS/Windows-Systeme möglich.
- Die Definitionen werden komplett eingelesen, bevor eine Expansion stattfindet. Dadurch können Sie
Variablen vor Ihrer Definition schon benutzen.
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
dann lautet der Suchpfad schließlich:
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 | -Prozeß | OCPINPUTS | .ocp |
ofm | -Metrik | OFMFONTS,
TEXFONTS | .ofm,
.tfm |
opl | -Property-Liste | OPLFONTS,
TEXFONTS | .opl |
otp | -Prozeß | OTPINPUTS | .otp |
ovf |
virtuelle
Zeichensätze | OVFFONTS,
TEXFONTS | .ovf |
ovp |
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.
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: 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.
- stat-Aufrufe (Überprüfung, ob Datei existiert); mit einer aktuellen ls-R-Datenbank sollten Sie
fast keine Ausgaben erhalten.
- Zugriffe auf Suchlisten (wie ls-R-Datenbank, Zuordnungsdateien (.map), Konfigurationsdateien)
- Öffnen und Schließen von Dateien
- Ausgabe der voreingestellten Pfade für Extensionen
- Verzeichnisliste für jede Pfadkomponente (nur bei Festplattenzugriff)
- Suchaktionen nach Dateien
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.