Anzeige:
Ergebnis 1 bis 7 von 7

Thema: "TeX capacity exceeded" bei renewcommand

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

    "TeX capacity exceeded" bei renewcommand

    Hi
    Ich habe folgendes Problem: ich versuche einen vorhandenen Befehl zu erweitern. Dabei kommt der Fehler "TeX capacity exceeded" sobald der Befehl optionale Argumente hat. hier der Code:

    Code:
    \newcommand{\myCMD}[3][old]{
      #1 #2 #3
    }
    
    \let\myCMDorg\myCMD
    
    \renewcommand{\myCMD}[3][new]{
      \myCMDorg[#1]{#2}{#3} add this
    }
    Danke

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Warum gibst du kein vollständiges Beispiel zum Testen? Sollen wir deine Schnipsel ergänzen?

  3. #3
    Registrierter Benutzer
    Registriert seit
    06.03.2010
    Ort
    St. Petersburg, Russland
    Beiträge
    2.468
    Ja, wir brauchen ein MB, denn die Definition alleine bringt den Fehler nicht:

    Code:
    \documentclass{scrreprt}
    \makeatletter
    \newcommand{\myCMD}[3][old]{
      #1 #2 #3
    }
    
    \let\myCMDorg\myCMD
    
    \renewcommand{\myCMD}[3][new]{
      \myCMDorg[#1]{#2}{#3} add this
    }
    \makeatother
    \begin{document}
    text text
    \end{document}

  4. #4
    Registrierter Benutzer
    Registriert seit
    06.06.2012
    Beiträge
    5
    tatsächlich

    es ist der Aufruf, der dann zum Fehler führt! Warum?
    und wieso das "makeatletter" ein "@" muss doch gar nicht geparsed werden?


    Code:
    \documentclass{scrreprt}
    
    \makeatletter
    \newcommand{\myCMD}[3][old]{
      #1 #2 #3
    }
    
    \let\myCMDorg\myCMD
    
    \renewcommand{\myCMD}[3][new]{
      \myCMDorg[#1]{#2}{#3} add this
    }
    \makeatother
    
    \begin{document}
    text text
    
    \myCMD{q}{w}
    
    \end{document}

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.03.2010
    Ort
    St. Petersburg, Russland
    Beiträge
    2.468
    Ja stimmt, jetzt sehe ich den Fehler auch. Leider habe ich zu wenig Ahnung, um ihn zu beheben.
    Ich weiß nicht, ob das makeatletter hier nötig ist, ich tue bei mir immer die newcommand- und renewcommand- Sachen mit in diesen Teil. Dachte irgendwie, das müsste so sein, weil da intern ein @ vorkommen könnte. Geschadet hat es noch nicht...

  6. #6
    Registrierter Benutzer
    Registriert seit
    21.08.2009
    Beiträge
    496
    Hallo,

    \let macht Probleme, wenn das Makro ein optionales Argument besitzt. Das Paket letltxmacro kann helfen.

    Code:
    \documentclass{scrreprt}
    
    \usepackage{letltxmacro}
    
    \newcommand{\myCMD}[3][old]{
      #1 #2 #3
    }
    
    \LetLtxMacro{\myCMDorg}{\myCMD}
    
    \renewcommand{\myCMD}[3][new]{
      \myCMDorg[#1]{#2}{#3} add this
    }
    
    \begin{document}
    text text
    
    \myCMD{q}{w}
    
    \end{document}
    Gruß
    Elke

  7. #7
    Registrierter Benutzer
    Registriert seit
    06.06.2012
    Beiträge
    5
    Tausend Dank, genau diesen Hinweis habe ich gesucht!

Stichworte

Lesezeichen

Berechtigungen

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