
Ich möchte Querverweise für Abschnitte als Symbole erstellen, aber nachdem ich die angegebene Beschreibung verwendet habe, erhalte ich eine Fehlermeldung, dass das verwendete Tastaturzeichen in der Eingabekodierung „utf8“ nicht definiert ist. Was könnte der Ausweg sein?
Antwort1
Wenn Sie versuchen, mit dem Paket einen UTF-8-kodierten Test in LaTeX (mit einer zugrunde liegenden Standard-TeX-Engine) zu setzen, inputenc
geschieht Folgendes:
- LaTeX analysiert ein UTF-8-Zeichen, indem es die richtige Anzahl von 8-Bit-Zeichen einliest. Dies können eins oder mehrere sein, je nachdem, welches Zeichen sich im Dokument befindet.
- Dadurch erhält LaTeX ein Unicode-Zeichen mit einer bestimmten Unicode-Nummer (nach einigen Berechnungen), sagen wir
00A1
- Jetzt versucht LaTeX, dieses Zeichen zu setzen. Dazu muss jedoch eine Schriftart (geladen) vorhanden sein, die tatsächlich die Glyphe enthält, die das Unicode-Zeichen darstellt, und ...
- LaTeX muss diese Tatsache kennen.
- LaTeX erfährt dies durch eine ziemlich große Anzahl von Deklarationen der Form:
\DeclareUnicodeCharacter{00A1}{\textexclamdown}
. - Dadurch wird die Unicode-Nummer in eine interne LaTeX-Zeichendarstellung (LICR) übersetzt.
- Dies wäre jedoch nicht sehr hilfreich, wenn es keine Glyphe gibt, mit der dieses Zeichen gedruckt werden kann. Daher
inputenc
richtet das Paket nur die Unicode-Zeichen ein, für die Schriftarten geladen sind, die diese enthalten. - Wenn Sie beispielsweise
T1
codierte Schriftarten über laden\usepackage[T1]{fontenc}
, lädt LaTeX intern alle in der Datei definierten Deklarationent1enc.dfu
. (Für jede etablierte LaTeX-Schriftcodierung gibt es eine entsprechende.dfu
Datei.) - Unicode deckt jedoch eine große Anzahl von Zeichen ab. Wenn Sie also zufällig ein Zeichen in Ihr Dokument einfügen, das keiner von LaTeX verwendeten Schriftkodierung entspricht, erhalten Sie die Fehlermeldung, dass dieses Unicode-Zeichen nicht eingerichtet ist.
Was kann also getan werden, um dieses Problem für ein bestimmtes Dokument zu beheben?
- Der erste Schritt besteht darin, die Unicode-Nummer für das Zeichen zu ermitteln, die LaTeX nicht kennt (diese sollte in der Fehlermeldung erscheinen).
- Der zweite, etwas kompliziertere Schritt besteht darin, herauszufinden, ob es eine TeX-Schriftart gibt, die dieses Zeichen tatsächlich enthält, und welche Kodierung diese Schriftart hat. Hier gibt es keinen guten Rat, aber es gibt einige Dokumente, die die Standard-LaTeX-Schriftkodierungen beschreiben.
- Alternativ kann man versuchen , dem Dokument zumindest die Kodierungen und hinzuzufügen,
T1
da dies das Problem möglicherweise löst (wenn es sich um ein relativ häufiges „westliches“ Zeichen handelt).TS1
- es ist auch möglich, dass Sie das Zeichen „vortäuschen“ können. Wenn Sie beispielsweise eine Art Bindestrich haben (von denen es in Unicode mehrere verschiedene gibt) und Ihr Editor einen hinzufügt, der LaTeX nicht bekannt ist, können Sie eine
\DeclareUnicodeCharacter
Deklaration mit dem zweiten Argument hinzufügen, die ein vorhandenes Ersatzzeichen enthält.
Ansonsten besteht die einzige Lösung, fürchte ich, darin, ein anderes Zeichen zu verwenden oder eine TeX-basierte Engine einzusetzen, die vollständig Unicode-fähig ist und nativ auf Unicode-Schriftarten mit großen Zeichensätzen zugreifen kann.
Eine ausführlichere Dokumentation hierzu finden Sie im dokumentierten Quellcode: utf8ienc.pdf
Dieser liegt entweder in der LaTeX-Distribution vor oder kann aus der .dtx
Datei generiert werden.
Antwort2
Ich hatte das gleiche Problem, als ein Freund ein Buch über lateinische Poesie setzen wollte und dabei Vokale mit Längenmarkierungen wie ō und ŏ direkt verwenden wollte (langaUndkurz).
Der Trick, den ich gefunden habe, ist in einem Paket verpackt,newunicodechar
.
Sprichwort
\usepackage{newunicodechar}
\newunicodechar{ō}{\={o}}
\newunicodechar{ŏ}{\u{o}}
ist genau das gleiche wie
\DeclareUnicodeCharacter{014D}{\={o}}
\DeclareUnicodeCharacter{014F}{\u{o}}
erspart Ihnen aber die Mühe, die Unicode-Tabelle durchsuchen zu müssen.
Natürlich muss sichergestellt werden, dass der Inhalt des Ersetzungstextes tatsächlich von den geladenen Schriftarten wiedergegeben werden kann, was beispielsweise bei einer „Absatzmarke“ der Fall sein kann.
Siehe auchMakro, um ein Zeichen als Argument zu verwenden, es zu aktivieren und es dann mit \def zu versehen.
Die Verwendung dieses Pakets hat noch einen weiteren Vorteil. Angenommen, Sie möchten für die Verarbeitung des Dokuments auf XeLaTeX oder LuaLaTeX umsteigen. Dann kann ein Zeichen wie