Sie sind hier

Das "ß"-Symbol im LinuxLibertine Font austauschen

Hallo LaTeX- Gemeinde,

beim Verfassen meiner Latex Dokumente verwende ich die Schriftschnitte LinuxLibertine und LinuxBiolinum die mir eigentlich auch sehr gut gefallen.
Das "eigentlich" bezieht sich auf eine Winzigkeit, die mir leider doch immer wieder störend ins Auge fällt: Es handelt sich hierbei um die verwendete "ß"-Variante.

Vor ca. einem Jahr wurde in einem anderen Forum das gleiche Anliegen folgendermaßen formuliert (ich bin also gar nicht ganz allein mit diesem Wunsch):

"Jetzt besitzen beide Schriften zwei verschiedene Varianten für das "ß" (scharfes s). Zum einen unter der Kodierungsnummer 0xdf die sog. "Sulzbacher Form" - wie in "Times New Roman" - zum anderen unter der Kodierung 0xe04c als Ligatur - wie in "Arial". Standardmäßig wird also die "Sulzbacher Form" verwendet; ich möchte aber die Ligatur-Form verwenden."

Die angegebenen Kodierungsnummern beziehen sich zwar auf XeTex, das grundsätzliche Anliegen ist aber das gleiche.

Die damaligen Lösungsvorschläge haben mir leider nicht weitergeholfen. Darum frage ich hier im Forum noch einmal ob es überhaupt eine realisitsche Chance gibt das Austauschen der beiden "ß"-Zeichen umzusetzen oder ob ich mich besser mit der standardmäßigen Variante anfreunden sollte.

Falls aber jemand eine Idee hätte, wie man dieses Problem auf einfache, für einen reinen Latex-Anwender verständliche Weise lösen könnte, wäre ich Euch super dankbar!

Ganz liebe Grüße,
Joha

forum: 
Bild von Markus Kohm

Für XeLaTeX wurde die Lösung ja bereits früher von Ulrike Fischer skizziert. Mir ist nicht klar, ob die Frage genau darauf abzieht. Trotzdem folgen nun noch einmal Details dazu:

Du musst die Mapping-Datei tex-text.map in Dein Arbeitsverzeichnis kopieren, editieren und um ein Mapping für das U+00DF nach U+E04C ergänzen. Ich habe das hie rmal beispielhaft gemacht:

; TECkit mapping for TeX input conventions <-> Unicode characters
; This is a variation of tex-text.map. The only change is replacement of
; U+00DF (LATIN SMALL LETTER SHARP S) by U+E04C from private area. This may be
; used to, e.g., map Linux Libertine's ligature sharp-s to the normal sharp-s.
 
LHSName	"TeX+sz-text"
RHSName	"UNICODE"
 
pass(Unicode)
 
; ligatures from Knuth's original CMR fonts
U+002D U+002D			<>	U+2013	; -- -> en dash
U+002D U+002D U+002D	<>	U+2014	; --- -> em dash
 
U+0027			<>	U+2019	; ' -> right single quote
U+0027 U+0027	<>	U+201D	; '' -> right double quote
U+0022			 >	U+201D	; " -> right double quote
 
U+0060			<>	U+2018	; ` -> left single quote
U+0060 U+0060	<>	U+201C	; `` -> left double quote
 
U+0021 U+0060	<>	U+00A1	; !` -> inverted exclam
U+003F U+0060	<>	U+00BF	; ?` -> inverted question
 
; additions supported in T1 encoding
U+002C U+002C	<>	U+201E	; ,, -> DOUBLE LOW-9 QUOTATION MARK
U+003C U+003C	<>	U+00AB	; << -> LEFT POINTING GUILLEMET
U+003E U+003E	<>	U+00BB	; >> -> RIGHT POINTING GUILLEMET
 
; MJK: map U+00DF (LATIN SMALL LETTER SHARP S) to U+E04C from private area
U+00DF			<>	U+E04C	; ' -> right single quote

Die Datei speicherst Du dann beispielsweise als tex+sz-text.map und ruft dann den TECkit-Compiler auf. Bei TeX  2011 geht das beispielsweise so:

teckit_compile tex+sz-text.map

Als Ergebnis erhältst Du tex+sz-text.tex. Jetzt musst Du dieses neue Mapping natürlich auch noch verwenden. Für Libertine ginge das beispielsweise so:

%&xelatex
% ACHTUNG! Funktioniert nur mit xelatex!!!
\documentclass{article}
\usepackage[libertine={Mapping=tex+sz-text}]{libertineotf}% mit neuem Mapping
%\usepackage{libertineotf}% mit Standard-Mapping
 
\begin{document}
\Huge äöüß
\end{document}

Wenn Du dieses neue Mapping öfter verwenden möchtest, wäre es natürlich unpraktisch die Dateien tex+sz-text.map und tex+sz-text.tec jedes Mal ins Arbeitsverzeichnis des neuen Dokuments zu kopieren, damit fontspec und XeLaTeX diese finden. In dem Fall solltest Du die Dateien im lokalen oder privaten TEXMF-Baum installieren. Für den lokalen TEXMF-Baum geht das beispielsweise so:

mkdir -p `kpsewhich -var-value=TEXMFLOCAL`/fonts/misc/xetex/fontmapping/extra
cp tex+sz-text.map tex+sz-text.tec `kpsewhich -var-value=TEXMFLOCAL`/fonts/misc/xetex/fontmapping/extra

Für den lokalen TEXMF-Baum sind übrigens häufig root-Rechte erforderlich. Diese erreicht man ggf. indem man bei beiden Zeilen sudo voranstellt. Je nach Linux-Distribution wird man dann zur Eingabe des root-Passwortes aufgefordert oder auch nicht.

Für den privaten TEXMF-Baum braucht man natürlich keine root-Rechte. Hier genügt

mkdir -p `kpsewhich -var-value=TEXMFHOME`/fonts/misc/xetex/fontmapping/extra
cp tex+sz-text.map tex+sz-text.tec `kpsewhich -var-value=TEXMFHOME`/fonts/misc/xetex/fontmapping/extra

ohne sudo immer.

In beiden Fällen wird in der Regel kein Aufruf von texhash benötigt, da sowohl der lokale als auch der private Baum bei einer Original-TeX-Live-Installation immer komplett durchsucht wird.

Funktioniert die Installation wie erklärt nicht, bleibt als Notlösung immer die map- und die tec-Datei ins Arbeitsverzeichnis des Dokuments zu kopieren.

Ich betone hier noch einmal, dass diese Lösung nur für XeLaTeX funktioniert. Mit LuaLaTeX unterstützt fontspec bisher keine Mappings. Deshalb geht es dort (zumindest auf diese Weise) nicht. Für PDFLaTeX gibt es (wegen fehlender Voraussetzungen) ohnehin kein fontspec. Damit fällt dort diese Lösung ebenfalls flach. Man müsste für PDFLaTeX vermutlich einen Encoding-Vektor, also eine enc-Datei, erstellen oder einen virtuellen Font. Beides habe ich seit Jahren nicht mehr gemacht und würde es auch keinem normalen Anwender zumuten wollen (auch wenn es mit Hilfe von fontinstall und ein paar Tagen Zeit für Einarbeitung und Experimente durchaus machbar ist). Ich empfehle in diesem Fall die Verwendung von XeLaTeX.

Bild von Markus Kohm

Ich möchte noch erwähnen, dass die skizzierte Lösung natürlich auch unter Windows, sowohl für TeX Live als auch bei MiKTeX verwendet wird. Unter Windows existieren lediglich die Befehle für das Anlegen von Verzeichnissen bzw. das Kopieren von Dateien so nicht. Hier muss das entsprechende Verzeichnis (mit allen Eltern) im lokalen/privaten TEXMF-Baum ggf. über den Explorer angelegt und können die Dateien auch über diesen kopiert werden, falls man nicht vorsorglich ohnehin bereits MSYS installiert hat, um für solche Arbeiten genau wie unter Linux/Unix arbeiten zu können.

Den TEXMF-Baum kann man für TeX Live unter Windows wie gezeigt mit

kpsewhich -var-value=TEXMFLOCAL

bzw.

kpsewhich -var-value=TEXMFHOME

ermitteln.

Für MiKTeX verwendet man hingegen den Einstellungsdialog von MiKTeX, der normalerweise über das Startmenü (AFAIR Start→Alle Programme→MiKTeX→Options) zu erreichen ist. Falls dort noch kein lokaler/privater Baum existiert, kann man auch einen neuen anlegen. Näheres zur Installation eigener Erweiterungen ist der MiKTeX-Anleitung zu entnehmen. Bei MiKTeX muss im Gegensatz zu TeX Live in jedem Fall ein Refresh der Filename Database durchgeführt werden. Auch dies wird in der MiKTeX-Anleitung behandelt. Wie das alles mit der neuen Oberfläche von Windows 8 werden wird, darf man mich nicht fragen. Ich beabsichtige nicht, auf dem Desktop eine TouchPad-Oberfläche zu verwenden.

Unter OS X wird normalerweise mit MacTeX ein von TeX Live abgeleitetes TeX verwendet. Dieses kann AFAIK von einer Console aus, wie TeX Live administriert werden.

Erstmal vorneweg: Vielen herzlichen Dank für diese ausführliche Antwort! Die Hilfe die hier gegeben wird ist absolut außergewöhnlich. Ich hoffe diese in der ein oder anderen Form irgendwann ebenfalls weitergeben zu können.

Nun aber zum eigentlichen Kommentar:
Die Antwort hat den Kern meines Anliegens genau getroffen. Mein urspüngliches Ansinnen war es zwar den Austausch des "ß" in PDFLatex umzusetzen. Ich werde nun aber der Empfehlung folgen und versuchen auf XeTeX umzusteigen.

Der damals skizzierten Lösung von Ulrike Fischer konnte ich mangels Verständniss leider nicht folgen, was mich zur erneuten Frage veranlasste.

Sobald ich mich ausführlich an dem beschriebenen Weg versucht habe werde ich nochmal ein (dann hoffentlich) positives Feedback geben :-)

Noch einmal einen ganz großen Dank!
Joha

Nachdem ich auf Grund einer fehlerhaften(?) Miktex-Installation etwas länger für den Umstieg auf XeLateX gebraucht habe konnte ich nun endlich den beschriebenen Lösungsweg nachvollziehen.

Auch ich als Laie konnte die einzelnen Schritte einwandfrei reproduzieren und die Lösung funktionert toll. Nochmal vielen herzlichen Dank für die Ausführungen!

Die einzigen, wenigen Wehrmutstropfen die mir nach etwas Ausprobieren aufgefallen sind, sind die folgenden:

1. Anscheinend gibt es kein alternatives "ß" für den fetten Schriftsatz bei der Biolinum. Bei mir erscheint jedenfalls ein Box-Symbol.

2. Wenn man Text in Kapitälchen setzen möchte wird anstelle des "ß" ebenfalls das alternative "ß" gesetzt (entsprechend der mapping Datei). In diesem Fall würde aber ein anderes Symbol benötigt: 0x1E9E. Wie im Normalfall die Unterscheidung zwischen der Normalen- und der Kapitälchenform funktioniert ist mir leider nicht bekannt.

3. Falls jemand aus dem erzeugten PDF-File Text kopieren will, wird das "ß" nicht mehr als solches erkannt (es wird ja auch ein anderer Uni-Code verwendet).

\documentclass{scrartcl}
 
\usepackage{polyglossia}
\setdefaultlanguage{german}
 
\setsansfont[Mapping = tex+sz-text]{Linux Biolinum O}
\setromanfont[Mapping = tex+sz-text]{Linux Libertine O}
 
 
\begin{document}
 
\noindent\rmfamily
\textbf{Serif font}\\\\ 
Test: Straße\\
\textit{Test: Straße}\\
\textbf{Test: Straße}\\
\textsc{Test: Straße}\\[10mm]
 
\noindent\sffamily
\textbf{Sans serif font}\\\\ 
Test: Straße\\
\textit{Test: Straße}\\
\textbf{Test: Straße}\\
\textsc{Test: Straße}
 
\end{document}

Ansonsten klappt alles super :)

Bild von Markus Kohm

Ich vermute fast, dass man für unterschiedliche Schnitte auch unterschiedliche Mappings verwenden kann. Das Paket fontspec bietet jedenfalls unzählige Möglichkeiten. Falls Du in der Anleitung nicht fündig wirst, empfehle ich in einem passenden Forum gezielt danach zu fragen. Ob es hier im Forum einen fontspec-Experten gibt, ist mir nicht bekannt. Das ist dann jedenfalls keine Typographie-Frage mehr, sondern wäre hier off-topic.

Comments for "Das &quot;ß&quot;-Symbol im LinuxLibertine Font austauschen" abonnieren