Anzeige:
Ergebnis 1 bis 4 von 4

Thema: MakeUppercase in \newcommand mit \ifthenelse

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.06.2012
    Beiträge
    8

    MakeUppercase in \newcommand mit \ifthenelse

    Hallo an alle,

    folgender Code:

    Code:
    \documentclass{book}
    
    
    \usepackage{xifthen}
    \usepackage{xparse}
    \usepackage[pdftex]{hyperref}
    \usepackage{amsmath}
    \usepackage[ngerman]{babel}
    \usepackage[T1]{fontenc}
    \usepackage[latin1]{inputenc}
    
    \begin{document}
    
    \MakeUppercase{\ifthenelse{\isin{a}{a}}{x}{y}}
    
    \end{document}
    Das führt bei mir zu einer "TeX capacity exceeded"-Ausnahmefehler, was ich teilweise auch nachvollziehen kann.

    Mein echtes Dokument ist natürlich viel komplexer und ich arbeite mit "newcommand". Im Endeffekt brauche ich in einem Kommando, das eine Zeichenkette in uppercase umwandelt:

    Code:
    \newcommand{ ... \MakeUppercase{#1} ... }
    Das Problem ist, dass #1 in speziellen Fällen eben zu

    Code:
    \ifthenelse{\isin{a}{a}}{x}{y}
    wird. Was ich bräucht wäre vermutlich irgendwas wie

    Code:
    \MakeUppercase{\bitte_latex_löse_argument_erst_einmal_auf{#1}}
    Gibt es sowas? Ich habe viel gegoogelt und auch Sachen mit "expand"-Thematik gefunden, aber eher Sachen, die in Zusammenhang mit "\def" funktionieren.

    Danke und Gruß!

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    \ifthen ist nicht expandierbar und da \Makeuppercase intern ein \edef ausführt, wird es so nicht gehen. Du brauchst einen anderen Test, z.B. aus l3regex:

    Code:
    \documentclass{book}
    \usepackage{l3regex}
    
    \begin{document}
    \ExplSyntaxOn
    \MakeUppercase{\regex_match:nnTF { lu } { blub } { wahr } { falsch }}
    \quad
    \MakeUppercase{\regex_match:nnTF { la } { blub } { wahr } { falsch }}
    \ExplSyntaxOff
    \end{document}

  3. #3
    Registrierter Benutzer
    Registriert seit
    06.06.2012
    Beiträge
    8
    Danke für die neue Idee. Ein positiver Effekt ist außerdem, dass ich jetzt weiß, wie ich auch noch reguläre Ausdrücke verwenden kann.

    Ansonsten habe ich vorhin weiterprobiert und doch eine Möglichkeit gefunden, allerdings mit dem "verpönten" \uppercase:

    Code:
    \uppercase{\expandafter{\ifthenelse{\isin{a}{a}}{x}{y}}}
    Bisher scheint es genauso zu funktionieren, wie ich mir das wünsche. Ich traue dem Frieden aber nicht ganz...

  4. #4
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Zitat Zitat von ubunter Beitrag anzeigen
    Ansonsten habe ich vorhin weiterprobiert und doch eine Möglichkeit gefunden, allerdings mit dem "verpönten" \uppercase:

    Code:
    \uppercase{\expandafter{\ifthenelse{\isin{a}{a}}{x}{y}}}
    Bisher scheint es genauso zu funktionieren, wie ich mir das wünsche. Ich traue dem Frieden aber nicht ganz...
    Du brauchst das \expandafter hier nicht, (es tut auch nicht das, was du wahrscheinlich hoffst).

    Der wesentliche Unterschied zwischen \uppercase und \Makeuppercase ist, dass \uppercase Befehle ignoriert und keine speziellen Dinge wie ß->SS kennt. Es tauscht einfach alle Buchstaben (inklusiver der mit aktiven catcode wie den Umlauten, wenn du inputenc lädst) durch den durch den \uccode bestimmten Großbuchstaben aus. Insbesondere wird es deine Testbedingungen verändern:

    Code:
    \documentclass{book}
    \usepackage[T1]{fontenc}
    
    \usepackage[latin1]{inputenc}
    \usepackage{ifthen}
    \begin{document}
    \def\foo{Hallo}
    
    \MakeUppercase{\foo, schöne Grüße}
    
    \uppercase{\foo, schöne Grüße}
    
    \uppercase\expandafter{\foo, schöne Grüße}
    
    a=a:
    \ifthenelse{\equal{a}{a}}{wahr}{falsch}
    \uppercase{\expandafter{\ifthenelse{\equal{a}{a}}{wahr}{falsch}}}
    \uppercase{\ifthenelse{\equal{a}{a}}{wahr}{falsch}}
    
    A=a:
    \ifthenelse{\equal{A}{a}}{wahr}{falsch}
    \uppercase{\expandafter{\ifthenelse{\equal{A}{a}}{wahr}{falsch}}}
    \uppercase{\ifthenelse{\equal{A}{a}}{wahr}{falsch}}
    \end{document}

    Grundsätzlich würde ich dir raten, dass mit dem Uppercase (wie auch immer) zu überdenken. Wenn deine Schrift es hergibt, würde ich eher Kapitälchen nutzen.

Lesezeichen

Berechtigungen

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