Die meisten Autoren berühren eine .vf-Datei nie von Hand. Sobald Sie jedoch Schriften bauen oder einbinden, brauchen Sie drei mächtige Werkzeuge: die virtuelle Schrift, die eine logische Schrift auf reale Schriften abbildet, die JFM (Japanese Font Metric), die CJK-Glyphenbreiten und Interpunktionabstände beschreibt, und die Glyphentabellen-Werkzeuge, die zeigen, was eine Schrift tatsächlich enthält. Diese Seite behandelt solche Low-Level-Dienstprogramme für Schriftentwickler und erfahrene Nutzer.
Virtuelle Schriften — eine logische Schrift auf reale abbilden
Eine virtuelle Schrift (.vf) ist eine Schicht, die die eine logische Schrift, die TeX sieht, auf tatsächliche Glyphen und Low-Level-Satzoperationen abbildet. Mit den Worten der TeX FAQ sind virtuelle Schriften „a means of collecting bits and pieces together to make the glyphs of a font“; diese Teile stammen aus anderen Schriften, Linien und Satzbefehlen mit Positionsinformationen. Dadurch können Sie die Zeichenreihenfolge neu zuordnen, mehrere Schriften zu einer kombinieren, Kapitälchen simulieren oder die Bestandteile einer Mathe-Schrift zu einer einzigen Schrift bündeln.
Der Mechanismus teilt die Arbeit in zwei Teile. TeX selbst braucht nur die Abmessungen: Breite, Höhe, Tiefe. Diese liest es aus der zugehörigen .tfm (TeX Font Metric). Wie jedes Glyph *tatsächlich gezeichnet* wird, also welches Glyph welcher realen Schrift um wie viel verschoben wird, steht in der .vf, und diese liest der DVI-Treiber (dvips, dvipdfmx). Eine virtuelle Schrift ist also immer ein Paar: .tfm plus .vf. TeX positioniert alles anhand der .tfm; der Treiber expandiert die .vf und leitet das Ergebnis an reale Schriften weiter.
Da die binäre .vf nicht für Menschen gedacht ist, gibt es eine menschenlesbare Textform, die .vpl (Virtual Property List). Sie ist als verschachtelte „property list“ geschrieben und eignet sich, um Schriftdetails von Hand festzulegen und zu prüfen. Zwei Programme konvertieren zwischen den Formen, und beide gehören zu jeder TeX-Distribution (vptovf und vftovp aus den fontware-Werkzeugen):
vptovf—.vpl(Text) →.vf+.tfm(binär). Backt eine handgeschriebene oder bearbeitete virtuelle Schriftbeschreibung in die Form, die TeX und der Treiber verwenden können.vftovp—.vf+.tfm(binär) →.vpl(Text). Wandelt eine vorhandene virtuelle Schrift zurück in menschenlesbare Form, damit Sie ihren Inhalt prüfen oder bearbeiten können.
Die Argumentreihenfolge lohnt sich zu merken. vftovp nimmt virtuelle Schrift, Metrik, Ausgabe; vptovf nimmt Beschreibung, virtuelle Schrift, Metrik. Erweiterungen können bei beiden weggelassen werden; .vf / .tfm / .vpl werden ergänzt. Um eine vorhandene virtuelle Schrift zu zerlegen, zum Beispiel:
# 仮想フォントを人間可読の VPL に戻して中身を見る
# Turn a virtual font back into a readable VPL to inspect it
vftovp font.vf font.tfm font.vpl
# 編集後、VPL から .vf と .tfm を作り直す
# After editing, rebuild the .vf and .tfm from the VPL
vptovf font.vpl font.vf font.tfmLegen Sie die erzeugte .tfm im texmf-Baum unter .../fonts/tfm/<supplier>/ und die .vf unter .../fonts/vf/<supplier>/ ab, aktualisieren Sie die Dateinamendatenbank mit mktexlsr, und danach können Sie sie mit kpsewhich font.vf finden. Für die heutige Erzeugung virtueller Schriften aus PostScript-Schriften verwendet man häufiger fontinst, statt eine .vpl von Hand zu schreiben. In der Praxis ist eine virtuelle Schrift eher etwas, das Sie aus der Ausgabe solcher Werkzeuge lesen und feinabstimmen, als etwas, das Sie von Grund auf verfassen.
JFM — die Japanese Font Metric
Japanischer Satz braucht Informationen, die eine westliche .tfm nicht liefern kann. Kanji und Kana sitzen standardmäßig in einem quadratischen (vollbreiten) Kasten, und der Abstand zwischen ihnen ist kein Wortzwischenraum wie im westlichen Text; stattdessen öffnen oder schließen sich Zwischenräume nur um Interpunktion (Klammern und Satzzeichen). Diese Struktur ist die JFM (Japanese Font Metric). pTeX und upTeX verwenden eine binäre JFM-Datei ähnlich einer .tfm; LuaTeX-ja beschreibt dieselbe Rolle als Lua-Tabelle.
Der wichtigste Unterschied zu einer westlichen TFM ist, dass eine JFM Zeichen zu „character classes“ gruppiert. Wie das LuaTeX-ja-Handbuch festlegt, ist jede Länge in einer JFM eine Gleitkommazahl in Designgrößeneinheiten, bezogen auf zw (volle Breite) und zh (volle Höhe, height + depth); jede Klasse trägt dann ihre eigenen Werte für width, height, depth und italic (italic correction). Klasse 0 existiert immer und enthält die große Mehrheit japanischer Zeichen, die keiner anderen Klasse angehören. Interpunktion und Ähnliches kommen in eigene Klassen, und eine Tabelle mit glue/kern, der zwischen einer Klasse und einer anderen eingefügt wird, erzeugt die Abstände um Satzzeichen und Klammern.
In der pTeX-Familie wird JAglue, also der Abstand zwischen zwei japanischen Zeichen sowie zwischen einem japanischen Zeichen und westlichem Text, beim Setzen automatisch eingefügt. Die JFM bestimmt den Abstand zwischen Klassen; zwischen nicht klassifizierten japanischen Zeichen wird das Standard-kanjiskip verwendet, an einer japanisch/westlichen Grenze xkanjiskip. Letzteres ist neben *kinsoku* (den Regeln, die bestimmte Zeichen am Zeilenanfang oder -ende verbieten) zentral für das Erscheinungsbild japanischen Satzes. Eine LuaTeX-ja-JFM-Datei ist ein Lua-Skript, das einmal luatexja.jfont.define_jfm{ ... } aufruft, mit einem Gerüst wie diesem:
-- LuaTeX-ja の JFM(抜粋)。寸法はすべてデザインサイズ単位
-- A LuaTeX-ja JFM (excerpt); all lengths are in design-size units
luatexja.jfont.define_jfm {
version = 3,
dir = 'yoko', -- 横組み / horizontal
zw = 1.0, zh = 1.0, -- 全角の幅・高さ / full-width, full-height
[0] = { -- 文字クラス 0:大多数の漢字・仮名 / class 0: most kanji & kana
chars = { '漢' },
width = 1.0, height = 0.88, depth = 0.12, italic = 0.0,
},
[1] = { -- 句点など別クラス / a class for stops, etc.
chars = { '。', '、' },
width = 0.5, height = 0.88, depth = 0.12, italic = 0.0,
},
}LuaTeX-ja liefert Standard-JFMs für verschiedene Zwecke mit. jfm-ujis.lua ist der Standard, basierend auf der in upTeX verwendeten Metrik upnmlminr-h.tfm (die meisten Zeichen quadratisch); jfm-jis.lua entspricht dem in pTeX weit verbreiteten jis.tfm (Zeichen tendieren zu horizontalen Rechtecken); jfm-min.lua entspricht pTeX’ Standard min10.tfm. In einer Schriftdefinition wählen Sie eines mit jfm=, etwa \jfont\F=HaranoAjiMincho-Regular:jfm=ujis. Die binären JFMs der pTeX-Familie lassen sich derweil mit ppltotf und ptftopl in Text und zurück konvertieren, den japanischen Gegenstücken zu den westlichen pltotf und tftopl für pl/tfm.
Anzeigen, was eine Schrift enthält — fonttable und nfssfont
Um zu sehen, welche Glyphen eine Schrift tatsächlich enthält, drucken Sie eine Glyphentabelle (Schrifttabelle). Der einfache Weg innerhalb eines Dokuments ist das Paket fonttable, dessen zentraler Befehl \fonttable{<font>} eine Tabelle aller Glyphen der genannten Schrift setzt. Das Argument ist der Name der Schrift, genauer ihrer .tfm: cmr10 für Computer Modern Roman, pzdr für Zapf Dingbats und so weiter.
\documentclass{article}
\usepackage{fonttable}
\begin{document}
% フォント名(.tfm)を渡すと全字形の表が出る
% Pass a font (.tfm) name to get a table of every glyph
\fonttable{cmr10}
% NFSS の 4 属性で指定する版(エンコーディング/ファミリ/シリーズ/シェイプ)
% The NFSS-attribute version (encoding/family/series/shape)
\xfonttable{T1}{cmr}{m}{n}
\end{document}Wenn Sie über die vier NFSS-Attribute angeben möchten, verwenden Sie \xfonttable{<encoding>}{<family>}{<series>}{<shape>} (zum Beispiel \xfonttable{T1}{cmr}{m}{n}). Den Tabellenbereich können Sie mit \fontrange{<low>}{<high>} auf 16-Glyphen-Blöcke eingrenzen, bis maximal 256 Glyphen. Und \fonttext{<font>} setzt Beispieltext in der Schrift statt eines Glyphenrasters, was praktisch ist, um das tatsächliche Aussehen zu beurteilen.
Dieses fonttable ist eine Paket-Neuverpackung der klassischen Werkzeuge nfssfont.tex und testfont.tex, die mit TeX geliefert werden (ein großer Teil des Paketcodes ist eine bearbeitete Version von nfssfont.tex, und seine Glyphentest-Befehle implementieren Knuths testfont.tex neu). Die klassischen Werkzeuge laufen *interaktiv*: Sie starten mit tex nfssfont, geben einen Schriftnamen ein (etwa cmr10), drucken mit \table die Tabelle, wechseln mit \init zu einer anderen Schrift und beenden mit \bye.
# 古典的な対話ツール:起動 → フォント名 → \table → \bye
# The classic interactive tool: launch, name the font, \table, \bye
tex nfssfont
# Name of font to test = cmr10
# *\table
# *\byeVerwandt damit zeigt \showfont die Identität der aktuellen Schrift im Log an, nämlich ihre fünf NFSS-Attribute: encoding, family, series, shape und size. Wenn Sie das Ladeverhalten von Schriften selbst verfolgen möchten, ist das Paket tracefnt nützlich. Um schließlich herauszufinden, was auf Ihrem System installiert ist und von wo Dateien gelesen werden, sind updmap, das die Font-Maps verwaltet, und kpsewhich, das den tatsächlichen Ort einer Datei findet (z. B. kpsewhich cmr10.tfm), die Startpunkte.