Seite 1 von 1
Globale Aufhebung von Ligaturen
Verfasst: Fr 26. Apr 2013, 12:22
von hajoe
Ich muss in Latex leider einen speziellen Windows-TTF-Font verwenden, den ich mühevoll eingebunden habe, dem aber bestimmte Ligaturen fehlen, z.B. "fi" Die Ligaturen werden dann zu Löchern im Text, z.B. Raf_nerie statt Raffinerie. Jetzt könnte man jedesmal Raff"|inerie schreiben, aber das ist unpraktisch.
Kann man innerhalb einer Umgebung, in der der Font verwendet wird, bestimmte Ligaturen generell unterdrücken?
Danke!
Verfasst: Fr 26. Apr 2013, 12:27
von u_fischer
Ja, z.B. mit microtype. Aber eine korrekt installierte Schrift versucht nicht Ligaturen zu benutzen, die gar nicht da sind. Wenn das passiert, ist die tfm-Datei fehlerhaft erstellt worden und sollte besser korrigiert werden.
Verfasst: Fr 26. Apr 2013, 15:30
von Beinschuss
Evtl. könnte es sich lohnen, xetex oder luatex zu nutzen, die mit otf- und ttf-Fonts gut umgehen können und diesen Font dann über fontspec einzubinden. Ohne Minimalbeispiel ist mal es mal wieder schwer zu erraten, wie Du vorgehst.
Helmut
Verfasst: Sa 4. Mai 2013, 21:33
von hajoe
Hallo Ulrike und Helmut,
danke für Eure Antworten. Da bin ich ja an wahre Experten geraten, vielleicht könnt Ihr mir weiterhelfen. Ich probiers mal:
Das System ist ein MinGW, daheim solls auch mit Linux laufen. Es gibt ttf-Fonts mit Corporate-Identity-Fonts (Firmenname durch xxxxx ersetzt), die ich zu benutzen habe...
Ich habe folgendes Skript laufen lassen - ich weiß, es lässt sich perfektionieren, aber es tut erstmal seinen Zweck:
rm ttfonts.map
ttf2tfm xxxxxPReg.ttf -q -T T1-WGL4.enc -v ecxxxxx.vpl recxxxxx.tfm >> ttfonts.map
ttf2tfm xxxxxPIta.ttf -q -T T1-WGL4.enc -v ecxxxxxi.vpl recxxxxxi.tfm >> ttfonts.map
ttf2tfm xxxxxPMed.ttf -q -T T1-WGL4.enc -v ecxxxxxbd.vpl recxxxxxbd.tfm >> ttfonts.map
ttf2tfm xxxxxPMed.ttf -q -T T1-WGL4.enc -s .167 -v ecxxxxxbi.vpl recxxxxxbi.tfm >> ttfonts.map
ttf2tfm xxxxxPReg.ttf -q -T T1-WGL4.enc -s .167 -v ecxxxxxo.vpl recxxxxxo.tfm >> ttfonts.map
ttf2tfm xxxxxPMed.ttf -q -T T1-WGL4.enc -s .167 -v ecxxxxxbdo.vpl recxxxxxbdo.tfm >> ttfonts.map
vptovf ecxxxxx.vpl ecxxxxx.vf ecxxxxx.tfm
vptovf ecxxxxxi.vpl ecxxxxxi.vf ecxxxxxi.tfm
vptovf ecxxxxxbd.vpl ecxxxxxbd.vf ecxxxxxbd.tfm
vptovf ecxxxxxbi.vpl ecxxxxxbi.vf ecxxxxxbi.tfm
vptovf ecxxxxxo.vpl ecxxxxxo.vf ecxxxxxo.tfm
vptovf ecxxxxxbdo.vpl ecxxxxxbdo.vf ecxxxxxbdo.tfm
rm -f *.vpl
TEXMF="/c/Program Files/MiKTeX 2.9"
# Editiere $TEXMF/ttf2tfm/base/ttfonts.map und hänge ttfonts.map an,
# sofern nicht schon geschehen
cp T1-WGL4.enc "$TEXMF/pdftex/base/"
mkdir -p "$TEXMF/fonts/vf/xxxxx/"
cp *.vf "$TEXMF/fonts/vf/xxxxx/"
mkdir -p "$TEXMF/fonts/tfm/xxxxx/"
cp ec*.tfm "$TEXMF/fonts/tfm/xxxxx/"
mkdir -p "$TEXMF/fonts/truetype/xxxxx"
cp *.ttf "$TEXMF/fonts/truetype/xxxxx"
Dann probiere ich eine LaTeX-Datei aus:
\documentclass{article}
\usepackage{german}
\begin{document}
\usefont{T1}{xxxxx}{m}{n}
Test, ist das der xxxxx-Font? Ligaturtest: Raffinerie
\end{document}
Zuerst fliegt pdflatex raus:
Running miktex-makemf.exe...
miktex-makemf: The recxxxxx source file could not be found.
Running ttf2pk.exe...
Running ttf2pk.exe...
ttf2pk: ERROR: Cannot find tfm file.
miktex-makepk: PK font recxxxxx could not be created.
!pdfTeX error: c:\Program Files\MiKTeX 2.9\miktex\bin\pdflatex.exe (file recxxx
xx): Font recxxxxx at 600 not found
==> Fatal error occurred, no output PDF file produced!
Wenn ich dann aber den Font von Hand erstelle mit
> ttf2pk -q -n recxxxxx 600
ttf2pk: WARNING: Cannot map character `compwordmark'.
ttf2pk: WARNING: Cannot map character `perthousandzero'.
ttf2pk: WARNING: Cannot map character `dotlessj'.
ttf2pk: WARNING: Cannot map character `ff'.
ttf2pk: WARNING: Cannot map character `ffi'.
ttf2pk: WARNING: Cannot map character `ffl'.
ttf2pk: WARNING: Cannot map character `visualspace'.
ttf2pk: WARNING: Cannot map character `Germandbls'.
läuft nachher auch das pdflatex und die pdf-Ausgabe sieht gut aus - mit einer Ausnahme: Die Ligatur fehlt und wird durch ein Kästchen ersetzt. Da steht dann also das Wort "Raf_nerie". Wahrscheinlich sollten mich die Warnungen auch stören. Wenn ich eine andere Schriftgröße verwende, ignoriert pdflatex das und verwendet stattdessen den bekannten handerzeugten Font, es ändern sich nur die Buchstabenabstände.
Jetzt die entscheidende Frage: Was mache ich falsch? Was muss ich tun, dass die fehlenden pk-Fonts automatisch erzeugt werden? Was stimmt mit den Ligaturen nicht?
Ganz herzlichen Dank!!
Grüße, hajoe
Verfasst: Sa 4. Mai 2013, 22:41
von Beinschuss
Du irrst Dich: Ich bin kein Experte, wenn es um ttf-Fonts unter pdflatex geht. Das war mir immer zu kompliziert. Aber seit es fontspec gibt, ist das viel einfacher. Man muss das Dokument dann aber mit xetex oder luatex kompilieren. Was passiert denn, wenn Du dieses Minimalbeispiel mit xe-/luatex kompilierst?
\documentclass{scrartcl}
\usepackage{fontspec}
\setmainfont[Scale=1,Mapping=tex-text,Ligatures={Common}]{DeinSpezialfont}
\begin{document}
Test, ist das der xxxxx-Font? Ligaturtest: Raffinerie
\end{document}
Und dann die unterschiedlichen Einstellungen für die Ligaturen durchtestest (s. Anleitung zu fontspec). Löst das Dein Problem vielleicht?
Viele Grüße
Helmut
Verfasst: So 5. Mai 2013, 12:11
von u_fischer
Du solltest lokale Dateien nicht in den Hauptbaum von miktex kopieren, benutze einen lokalen texmf-Baum. Du darfst nicht vergessen die FNDB zu aktualisieren.
Wenn du pdflatex (mit pdf-Output) benutzt, solltest du ttf2pk nicht benötigen. pdflatex kann ttf-Schriften direkt laden. Du musst aber dafür sorgen, dass pdflatex die map-Datei nutzt, z.B. mit \pdfmapfile{=ttfonts.map}.
Die "Cannot map character"-Meldungen bedeuten, dass entweder die Schrift die Glyphen gar nicht hat, oder non-Standardnamen benutzt. Je nachdem muss man die tfm oder die enc-Datei nachbearbeiten.
Wenn die Schrift älter ist, kann es sein, dass auch xelatex nicht völlig zufriedenstellende Ergebnisse liefert. Evtl wäre es dann sinnvoll (wenn die Lizenz es zulässt) die Schrift in type1 oder otf umzuwandeln und ggfs zu korrigieren.