Ich kriege die Fehlermeldung

Open in Online-Editor
! Missing \endcsname inserted.
<to be read again> 
                   \unhbox 
l.3 \newlabel{fig:Möglichkeiten}{{1}{1}}

in diesem Dokument:

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}
\begin{document}
\begin{figure}
\centering
(Bild)
\caption{Darstellung der Möglichkeiten}
\label{fig:Möglichkeiten}
\end{figure}
In Abbildung \ref{fig:Möglichkeiten} können wir sehen, dass \ldots
\end{document}

Wenn ich die Zeile mit inputenc herausnehme, funktioniert es jedoch.

Was ist hier der Fehler?

gefragt 06 Aug '13, 16:20

Student's gravatar image

Student
5807779104
Akzeptiert-Rate: 82%

bearbeitet 21 Jul '15, 07:41

saputello's gravatar image

saputello
11.1k154365

1

Mit pdflatex und inputenc sind Umlaute keine Buchstaben sondern sehen nur so aus wie welche. Eigentlich sind sie Makros. Verwende \label{fig:Moeglichkeiten} . Oder verwende XeLaTeX bzw LuaLaTeX, die echten Unicode Input verarbeiten können (dann ohne inputenc).

(06 Aug '13, 16:31) cgnieder
1

Der gleiche Fehler tritt übrigens auch auf, wenn man Umgebungen wie center mit backslash wie Kommandos schreibt: \begin{\center} ruft das hervor. Nur falls jemand sowas hat und mit google hierauf stößt.

(06 Aug '13, 17:33) stefan ♦♦

Allgemein sind mit dem Paket inputenc alle Umlaute und diverse weitere Sonderzeichen quasi Makros. Bei Verwendung von Option utf8 führt dies beispielsweise dazu, dass in die aux-Datei eben nicht fig:Möglichkeiten als Label geschrieben wird, sondern fig:M\IeC {\"o}glichkeiten. Der Label-Name wird dann auch als Teil von Makronamen benötigt, um auf den Inhalt des Labels zugreifen zu können. Dabei geschehen Expansionen, die für Makronamen nicht erlaubt sind (beispielsweise darf das gemeldete Primitiv \unhbox nicht Teil eines Makronamens sein).

Letztlich erinnert der Fehler wieder einmal daran, dass man als Labelargument eben nicht beliebige Zeichen verwenden kann. Du solltest Dich sprachunabhängig auf Buchstaben und Ziffern beschränken. Bereits Zeichen wie - können problematisch werden, wenn diese von anderen Paketen aktiv gesetzt werden. Da ein aktiver Punkt auch anderweitig zu einem Problem führen kann, kann man jedoch davon ausgehen, das der Punkt meist ebenfalls funktioniert.

Erst mit Verzicht auf inputenc sind Umlaute und andere Sonderzeichen jenseits US-ASCII keine Makros mehr bzw. bestehen nicht mehr aus min. einem aktiven Zeichen. Allerdings benötigt man dann eine TeX-Engine mit nativer UTF8-Unterstützung wie XeTeX oder luaTeX oder muss die Eingabe in der Font-Codierung codieren.

Es gibt allerdings auch mit pdflatex die Möglichkeit, zumindest einige derartige Probleme zu lösen. Dabei muss verhindert werden, dass aktive Zeichen und Befehle expandiert werden:

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}
\newcommand*{\dlabel}[1]{\label{\detokenize{\detokenize{#1}}}}
\makeatletter
\newcommand*{\dref}{\@ifstar {\@dref*}{\@dref{}}}
\newcommand*{\@dref}[2]{\ref#1{\detokenize{#2}}}
\newcommand*{\dpageref}{\@ifstar {\@dpageref*}{\@dpageref{}}}
\newcommand*{\@dpageref}[2]{\pageref#1{\detokenize{#2}}}
\newcommand*{\dautoref}{\@ifstar {\@dautoref*}{\@dautoref{}}}
\newcommand*{\@dautoref}[2]{\autoref#1{\detokenize{#2}}}
\makeatother
\usepackage{hyperref}
\begin{document}
\begin{figure}
\centering
(Bild)
\caption{Darstellung der Möglichkeiten}
\dlabel{fig:Möglichkeiten}
\end{figure}
In Abbildung \dref{fig:Möglichkeiten} können wir sehen, dass \ldots

In Abbildung \dref*{fig:Möglichkeiten} können wir sehen, dass \ldots

In \dautoref{fig:Möglichkeiten} können wir sehen, dass \ldots
\end{document}

Man kann allerdings innerhalb der neuen Befehle dann keine Makros verwenden, die expandiert werden sollten, beispielweise etwas wie

Open in Online-Editor
\documentclass{article}
\usepackage[utf8]{inputenc}
\newcommand*{\dlabel}[1]{\label{\detokenize{\detokenize{#1}}}}
\makeatletter
\newcommand*{\dref}{\@ifstar {\@dref*}{\@dref{}}}
\newcommand*{\@dref}[2]{\ref#1{\detokenize{#2}}}
\newcommand*{\dpageref}{\@ifstar {\@dpageref*}{\@dpageref{}}}
\newcommand*{\@dpageref}[2]{\pageref#1{\detokenize{#2}}}
\newcommand*{\dautoref}{\@ifstar {\@dautoref*}{\@dautoref{}}}
\newcommand*{\@dautoref}[2]{\autoref#1{\detokenize{#2}}}
\makeatother
\newcommand*{\figlabelprefix}{fig:}
\usepackage{hyperref}
\begin{document}
\begin{figure}
\centering
(Bild)
\caption{Darstellung der Möglichkeiten}
\dlabel{\figlabelprefix:Möglichkeiten}% Geht in die Hose.
\end{figure}
In Abbildung \dref{fig:Möglichkeiten} können wir sehen, dass \ldots

In Abbildung \dref*{fig:Möglichkeiten} können wir sehen, dass \ldots

In \dautoref{\figlabelprefix:Möglichkeiten} können wir sehen, dass \ldots
\end{document}
Permanenter link

beantwortet 06 Aug '13, 16:40

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 24 Aug '15, 19:13

@saputello hat ja schon geklärt, dass Umlaute mit inputenc Makros sind und dass das für \labels 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.


Diese Antwort ist von JLDiaz' Post stark inspiriert.

Permanenter link

beantwortet 06 Aug '13, 17:47

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

bearbeitet 06 Aug '13, 19:16

Wobei das Problem nicht auf utf8 als Eingabecodierung beschränkt ist. Ich habe deshalb meine Antwort auch noch ein wenig verallgemeinert.

(06 Aug '13, 18:54) saputello

Stimmt. Vielleicht kann hier utf8 einfach als Beispiel dienen...

(06 Aug '13, 18:55) cgnieder
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×127
×32
×28

gestellte Frage: 06 Aug '13, 16:20

Frage wurde gesehen: 116,277 Mal

zuletzt geändert: 24 Aug '15, 19:13