Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Selbstbezügliches \newcommand

  1. #1
    Registrierter Benutzer Avatar von Phylax
    Registriert seit
    09.06.2008
    Beiträge
    26

    Selbstbezügliches \newcommand

    Servus,

    habe mal den \newcommand-Befehl mit einer Definition getestet, in der er selber nochmals auftaucht:
    Code:
    \newcommand{\test}[1]{\newcommand{#1}{es klappt}}
    dies erlaubt, durch
    Code:
    \test{neuko}
    den neuen Befehl \neuko zu definieren, dessen Ausgabe "es klappt ist". Das war trivial.

    Problematisch wird es, wenn der Befehl \testb, einen Befehl \neukob definieren soll, der eine Variable nehmen kann.
    Code:
    \newcommand{\testb}[1]{\newcommand{#1}[1]{es klappt #1}}
    \testb{\neukob}
    \neukob{noch immer}
    Das funktioniert nicht, offensichtlich weil die Variable #1 auf zwei verschiedenen Ebenen vorkommt.

    Man muss sie verschieden benennen:
    Code:
    \newcommand{\testc}[1]{\newcommand{#1}[2]{es klappt #2}}
    \testc{\neukoc}
    \neukoc{noch immer}
    gibt, wie man erwartet: "es klappt noch immer" aus, wenngleich man dann die (lästige) Fehlermeldung bekommt: "Illegal parameter number in definition of \testc"

    Eine weiterführende Frage zu diesem Thema kommt noch, für den Augenblick belasse ich es bei dieser Information.

    Meinen Respekt allen Profis hier im Forum, die es schaffen, mit dieser Flut an Fragen mitzuhalten.

    Phylax

  2. #2
    Registrierter Benutzer Avatar von Stefan_K
    Registriert seit
    05.04.2007
    Ort
    Hamburg
    Beiträge
    3.534

    \newcommand verschachteln

    Hallo Phylax,

    ganz oben sollte es sicher
    Code:
    \test{\neuko}
    heißen, also mit backslash.

    Im weiteren versuche einmal:
    Code:
    \newcommand{\testb}[1]{\newcommand{#1}[1]{es klappt ##1}}
    Viele Grüße,

    Stefan

  3. #3
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von Phylax Beitrag anzeigen
    gibt, wie man erwartet: "es klappt noch immer" aus, wenngleich man dann die (lästige) Fehlermeldung bekommt: "Illegal parameter number in definition of \testc"
    Code:
    \documentclass{article}
    \makeatletter
    \newcommand\testA[1]{%
      \expandafter\newcommand\expandafter{\csname#1\endcsname}{es klappt A}}
    \newcommand\testB[1]{%
      \expandafter\newcommand\expandafter{\csname#1\endcsname}[1]{es klappt: ##1}}
    \makeatother
    
    \begin{document}
    
    \testA{neukoA} \neukoA
    \testB{BBBBB} \BBBBB{foo}
    
    \end{document}
    
    Herbert

  4. #4
    Registrierter Benutzer Avatar von Phylax
    Registriert seit
    09.06.2008
    Beiträge
    26

    Vielen Dank

    Hier ist jetzt mal ein ganz dickes Dankeschön fällig. Vor allem an voss / Herbert. Dein Beispiel war sehr erhellend und hat mir endlich gezeigt, wie man zwischen dem Makrobefehl und dessen expandierter Form unterscheiden kann. Dieser Unterschied war mir zwar intuitiv klar, ich wusste aber nicht, wie ich ihn angeben konnte.

    Wie Ihr euch denken könnt, war das nicht nur eine Trockenübung und ich habe jetzt meine Layoutvorlage für unsere Zeitschrift fertig.
    http://www.mrunix.de/forums/showthread.php?t=60882

Lesezeichen

Berechtigungen

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