7 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. Die letzte Fassung von Web2c ist die Version 7.3 vom März 1999. Bei der Produktion
dieser CD-ROM wurde eine Vorversion des neuen Release’ mit einige Updates benutzt; sie trägt die
Versionskennung 7.3.7.
Web2c 7.3 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
- 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ü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.3 kann
mehr als einen Dateibaum gleichzeitig verwalten und ermöglicht somit die schon beschriebene
TeXLive-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 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.
7.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 67) 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.
7.1.1 Bestandteile von Pfadkomponenten
Ein Suchpfad kann aus vielen verschiedenen Bestandteilen aufgebaut werden. Dies sind in der Reihenfolge, wie
Kpathsea sie auswertet:
- 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 zum Programm
dvips eine Zeile „S /a:/b“ in der Konfigurationsdatei config.ps.
- 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 75.)
7.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-ROM enthaltene Konfigurationsdatei, die ab Seite 85 im Anhang dieser Anleitung
abgedruckt ist.
- Kommentare beginnen mit einem „%“ und erstrecken sich bis zum Zeilenende.
- Leerzeilen werden überlesen.
- Ein „\“ am Zeilenende fasst die aktuelle mit der folgenden Zeile zusammen. Leerraum in der
Folgezeile wird nicht überlesen.
- Sonstige Zeilen haben den folgenden Aufbau:
Variable[.Programmname] [=] Wert
Das „=“-Zeichen und umgebender Leerraum darf entfallen.
- Der Name von Variable kann alle Zeichen außer Leerzeichen, „=“ und „.“ enthalten. Verwenden Sie
am besten nur 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 „;“ in Wert wird unter Unix in „:“ 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 die
Variable schon vor Ihrer Definition referieren.
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;}//
7.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.
7.1.4 Expansion der Voreinstellungen
Wenn der Suchpfad mit der höchsten Priorität (siehe hierzu „Bestandteile von Pfadkomponenten“ auf Seite 63)
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.
7.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-ROM 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.
7.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.
7.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!
7.2 Dateinamen-Datenbanken
Kpathsea unternimmt etliche Anstrengungen, um den Zugriff auf Festplatte und CD-ROM 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 „8.3“-Dateinamen (wie
sie auf der CD-ROM obligatorisch sind) auf die „echten“, aussagekräftigen Dateinamen zur Seite
stehen.
7.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.
7.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 ønd). 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 „ønd“ 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 1 finden. Diese Tabelle enthält die
momentan bekannten Namen, eine Beschreibung und die zugehörigen Umgebungsvariablen.11
Tabelle 1: | Kpathsea-Dateitypen |
|
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 |
-Prozess
|
OCPINPUTS |
.ocp |
ofm |
-Metrik
|
OFMFONTS,
TEXFONTS |
.ofm,
.tfm |
opl |
-Property-Liste
|
OPLFONTS,
TEXFONTS |
.opl |
otp |
-Prozess
|
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-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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
- 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. 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.
7.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.
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-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 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: 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.
7.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.
- 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 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 10 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 10: | 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 11: | 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 12: | 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 7.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 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]
7.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, die ab Seite 85 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
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 (ab Seite 85) sehen 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.