PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Umlaufe in \def



Tux
28-07-2011, 14:32
EDIT: -.- denkt euch im Titel stände "Umlaute"...

Hi Forum,

ich bin über ein komisches Verhalten von (La)TeX gestolpert, das ich mir nicht erklären konnte. Es hat mit der Definition von Befehlen über \def zu tun, in denen Umlaute vorkommen. Vielleicht weiß ja einer von euch, was hier passiert:

Minimalbeispiel:


\documentclass{article}
\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}

\edef\lalolu{lalolu}
\edef\lälölü{lälölü}

First call:\\
\lalolu\\
\lälölü

Second call:\\
\csname lalolu\endcsname\\
\csname lälölü\endcsname

\expandafter\edef\csname\lalolu\endcsname{\lalolu}
\expandafter\edef\csname\lälölü\endcsname{\lälölü}

Third call:\\
\lalolu\\
\lälölü

Fourth call:\\
\csname lalolu\endcsname\\
\csname lälölü\endcsname

\end{document}


Ausgabe:


First call:
lalolu
lälölü
Second call:
lalolu
<= warum ist diese Zeile leer?
Third call:
lalolu
lälölü
Fourth call:
lalolu
lälölu


Das Problem tritt auf, wenn ich über \csname lälölü\endcsname mein definiertes Kommando aufrufe. Die Ausgabe bleibt einfach leer. Definiere ich es aber erneut (und übergebe einen String, der in einem Kommando gespeichert wurde und expandiert wird), funktioniert es.

Die Frage bleibt... warum? :confused:

u_fischer
28-07-2011, 15:20
Wenn du utf8 + inputenc benutzt, ist ä kein Buchstabe, sondern besteht aus zwei Bytes, von dem der erste \catcode=\active hat, also ein Befehl ist. ä kann daher nicht in Befehlsnamen verwendet werden, und mit \def\lä definierst du nicht den Befehl "lä", sondern den Befehl \l und erklärst, dass dieser immer von der "Stopmarke" ä gefolgt werden muss. Wenn du zwei derartiger Befehle definierst, gibt es Fehler:


\documentclass{article}
\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}

\edef\lä{lälölü}
\edef\lö{lälölü}

\lö
\lä\\ %Fehler
\lö
\end{document}


\csname lälölü\endcsname ist daher undefiniert. Erst mit der \expandafter +\csname...\endcsname-Konstruktion definierst du den Befehl überhaupt.

Ich kann dir aber nur dringend raten, Umlaute in Befehlen bei (pdf)latex zu vermeiden. Schon wenn die Definition ein simples \relax enthält, fliegt es dir um die Ohren:


\documentclass{article}
\usepackage{ngerman}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\begin{document}
\def^^c3{\relax}
\expandafter\def\csname ä\endcsname{blub}
\end{document}


Sicher sind Umlaute nur mit xetex + luatex.

Tux
28-07-2011, 15:39
Achso! Danke für die schnelle Antwort, das war mir so noch nicht klar :-)