Globale Aufhebung von Ligaturen

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


hajoe

Globale Aufhebung von Ligaturen

Beitrag 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!

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag 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.

Beinschuss
Forum-Meister
Forum-Meister
Beiträge: 808
Registriert: Di 2. Okt 2012, 21:42
Wohnort: NRW

Beitrag 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

hajoe

Beitrag 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

Beinschuss
Forum-Meister
Forum-Meister
Beiträge: 808
Registriert: Di 2. Okt 2012, 21:42
Wohnort: NRW

Beitrag 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

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4300
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag 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.

Antworten