Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

06 Aug '13, 19:16

cgnieder's gravatar image

cgnieder
22.1k253463

@saputello hat ja schon geklärt, dass Umlaute mit `inputenc` Makros sind und dass das für `\label`s ein Problem ist. Ich möchte deshalb ein wenig Hintergrund zu `inputenc` liefern, was hoffentlich klärt, wieso `ö` ein Makro ist. ---------- Als Beispiel soll Unicode-Eingabekodierung dienen: pdfTeX hat keine Ahnung von Unicode! Für TeX ist 1 Byte _ein_ Zeichen als Input. Unicode-Zeichen sind aber Multibyte-Zeichen aus einem bis vier Bytes. Wenn man `\usepackage[utf8]{inputenc}` lädt, scheint Unicode-Input doch aber zu funktionieren? `inputenc` ist ein cleverer Versuch, TeX dazu zu überreden, Multibyte-Zeichen als Input zu akzeptieren. Ein ASCII-Zeichen benötigt lediglich ein Byte, bei diesen ist für TeX dann auch alles klar. Der Binärcode dieser Zeichen hat die Form `0xxxxxxx`, d.h., das erste Bit ist eine Null. Das Unicode-Zeichen `ö` ist aber beispielsweise mit zwei Bytes kodiert, `11000011` und `10110110`. Beide fangen mit einer 1 an, der Markierung, die utf8 verwendet, um anzuzeigen, dass es sich um ein Multibyte-Zeichen handelt. Für TeX sind diese zwei Bytes jetzt aber _zwei_ Zeichen mit den Hexadezimal-Codes `"C3` und `"b6` (`"` ist der Hexadezimal-Präfix für TeX). `inputenc` macht jetzt mehr oder weniger folgendes: es macht das Zeichen mit Code `"C3` aktiv und definiert den Befehl, der damit assoziert ist, dergestalt, dass wenn das Zeichen `"b6` folgt, der TeX-Befehl `\"{o}` verwendet wird. Für `ö` passsiert das in `utf8enc.dfu` mit der Zeile (`ö` hat den _Unicode Code Point_ `U+00F6`): \DeclareUnicodeCharacter{00F6}{\"o} ---------- XeTeX und LuaTeX lesen Zeichen bis 32 Bit und übersetzen sie zum entprechenden _Unicode Code Point_, was effektiv bedeutet, dass sie hier tatsächlich als _ein_ Zeichen von TeX wahrgenommen werden. ---------- <sub>Diese Antwort ist von [JLDiaz' Post][1] stark inspiriert.</sub> [1]: http://tex.stackexchange.com/a/86300/5049
Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

06 Aug '13, 17:56

cgnieder's gravatar image

cgnieder
22.1k253463

@saputello hat ja schon geklärt, wo im konkreten Fall das dass Umlaute mit `inputenc` Makros sind und dass das für `\label`s ein Problem liegt und was die beste Lösung ist. Ich möchte deshalb ein wenig Hintergrund zu `inputenc` liefern, was hoffentlich klärt, was hier passiert. wieso `ö` ein Makro ist. ---------- pdfTeX hat keine Ahnung von Unicode! Für TeX ist 1 Byte _ein_ Zeichen als Input. Unicode-Zeichen sind aber Multibyte-Zeichen aus einem bis vier Bytes. Wenn man `\usepackage[utf8]{inputenc}` lädt, scheint Unicode-Input doch aber zu funktionieren? `inputenc` ist ein cleverer Versuch, TeX dazu zu überreden, Multibyte-Zeichen als Input zu akzeptieren. Ein ASCII-Zeichen benötigt lediglich ein Byte, bei diesen ist für TeX dann auch alles klar. Der Binärcode dieser Zeichen hat die Form `0xxxxxxx`, d.h., das erste Bit ist eine Null. Das Unicode-Zeichen `ö` ist aber beispielsweise mit zwei Bytes kodiert, `11000011` und `10110110`. Beide fangen mit einer 1 an, der Markierung, die utf8 verwendet, um anzuzeigen, dass es sich um ein Multibyte-Zeichen handelt. Für TeX sind diese zwei Bytes jetzt aber _zwei_ Zeichen mit den Hexadezimal-Codes `"C3` und `"b6` (`"` ist der Hexadezimal-Präfix für TeX). `inputenc` macht jetzt mehr oder weniger folgendes: es macht das Zeichen mit Code `"C3` aktiv und definiert den Befehl, der damit assoziert ist, dergestalt, dass wenn das Zeichen `"b6` folgt, der TeX-Befehl `\"{o}` verwendet wird. Für `ö` passsiert das in `utf8enc.dfu` mit der Zeile (`ö` hat den _Unicode Code Point_ `U+00F6`): \DeclareUnicodeCharacter{00F6}{\"o} ---------- XeTeX und LuaTeX lesen Zeichen bis 32 Bit und übersetzen sie zum entprechenden _Unicode Code Point_, was effektiv bedeutet, dass sie hier tatsächlich als _ein_ Zeichen von TeX wahrgenommen werden. ---------- <sub>Diese Antwort ist von [JLDiaz' Post][1] stark inspiriert.</sub> [1]: http://tex.stackexchange.com/a/86300/5049
Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

06 Aug '13, 17:47

cgnieder's gravatar image

cgnieder
22.1k253463