Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Umlaufe in \def

  1. #1
    Banned
    Registriert seit
    18.05.2009
    Beiträge
    112

    Umlaufe in \def

    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:
    Code:
    \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:
    Code:
        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?
    Geändert von Tux (28-07-2011 um 14:35 Uhr) Grund: typo

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    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:

    Code:
    \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:

    Code:
    \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.

  3. #3
    Banned
    Registriert seit
    18.05.2009
    Beiträge
    112
    Achso! Danke für die schnelle Antwort, das war mir so noch nicht klar :-)

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •