PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "TeX capacity exceeded" bei renewcommand



cima
06-06-2012, 11:08
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:



\newcommand{\myCMD}[3][old]{
#1 #2 #3
}

\let\myCMDorg\myCMD

\renewcommand{\myCMD}[3][new]{
\myCMDorg[#1]{#2}{#3} add this
}


Danke

u_fischer
06-06-2012, 11:16
Warum gibst du kein vollständiges Beispiel zum Testen? Sollen wir deine Schnipsel ergänzen?

rstuby
06-06-2012, 11:22
Ja, wir brauchen ein MB, denn die Definition alleine bringt den Fehler nicht:


\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}

cima
06-06-2012, 13:18
tatsächlich

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




\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}

rstuby
06-06-2012, 13:25
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...

esdd
06-06-2012, 14:47
Hallo,

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



\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

cima
06-06-2012, 15:10
Tausend Dank, genau diesen Hinweis habe ich gesucht!