PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit newcommand



michel
29-10-2007, 19:18
Hi!

Ich möchte gerne Text aus einer verbatim-Umgebung in eine Box mit abgerundeten Ecken einfügen. Das funktioniert auch so weit ganz gut. Wenn ich allerdings daraus ein Kommando mit \newcommand machen will, erhalte ich folgende Fehlermeldung:



! Argument of \@xverbatim has an extra }.
<inserted text>
\par
l.39 }

?


Hier ist mein Minimalbeispiel:


\documentclass{article}

\usepackage{pgf}
\usepackage{tikz}

\newcommand{\roundbox}[1]{\begin{tikzpicture}
\draw node [rounded corners,fill=red!10]
{\begin{minipage}{\textwidth}
#1
\end{minipage}%
};
\end{tikzpicture}
}

\begin{document}

funktioniert:

\roundbox{Hallo}

funktioniert:

\begin{tikzpicture}
\draw node [rounded corners,fill=red!10]
{\begin{minipage}{\textwidth}
\begin{verbatim}
Ein Test
\end{verbatim}
\end{minipage}%
};
\end{tikzpicture}

funktioniert nicht:

\roundbox{
\begin{verbatim}
Ein Test
\end{verbatim}
}

\end{document}


Kann mir jemand sagen, warum das ganze funktioniert, wenn ich den Code ausschreibe, aber nicht, wenn ich es in ein Kommando fassen will? Was läuft hier schief?

Vielen Dank im Voraus!
Michel

localghost
29-10-2007, 19:26
Die verbatim-Umgebung und der \verb-Befehl dürfen nicht als Argument in irgendeinem anderen Befehl benutzt werden.


MfG und einem herzlichen Willkommen an Board
Thorsten

vulcano
29-10-2007, 19:28
Soweit ich das sehe, hast Du in der newcommand-Beschreibung 7 öffnende und 8 schliessende runde Klammern!

michel
29-10-2007, 19:32
Vielen Dank für die Antworten!


Die verbatim-Umgebung und der \verb-Befehl dürfen nicht als Argument in irgendeinem anderen Befehl benutzt werden.
Ja, das stimmt. Deshalb habe ich eine minipage-Umgebung benutzt, welche auch sehr gut funktioniert, solange ich aus dem Code kein Kommando mit \newcommand machen will.


Soweit ich das sehe, hast Du in der newcommand-Beschreibung 7 öffnende und 8 schliessende runde Klammern!
Leider nein, das wäre so einfach gewesen :-) \roundbox{Hallo} funktioniert ja. Trotzdem danke.

Gruß
Michel

michel
29-10-2007, 20:10
Hi!

OK, für alle die auch das gleiche Problem haben wie ich: Ich habe es nun mit einer neuen Umgebung gelöst:



\newenvironment*{rounded}[1]{
\newsavebox\tmpbox
\begin{lrbox}{\tmpbox}\begin{minipage}{#1}
}{\end{minipage}\end{lrbox}
\begin{tikzpicture}
\draw node [rounded corners,fill=red!10] {\usebox{\tmpbox}};
\end{tikzpicture}
}

\begin{rounded}{\textwidth}
\begin{verbatim}
Dies ist eine runde Box
\end{verbatim}
\end{rounded}


Vielen Dank trotzdem für die Antworten!

Gruß
Michel

michel
30-10-2007, 11:51
Hi!

Das ist nun der vollständige, funktionierende Code (ohne Overfull-Hbox-Warnungen) für alle, die es gernde wissen möchten:



\newenvironment*{roundedbox}[1][\textwidth]{%
\ifdefined\roundedboxtmpbox\else%
\newsavebox{\roundedboxtmpbox}%
\fi%
\ifdefined\roundedboxsep\else%
\newlength{\roundedboxsep}%
\fi%
\ifdefined\roundedboxwidth\else%
\newlength{\roundedboxwidth}%
\fi%
\setlength{\roundedboxsep}{1.7ex}%
\setlength{\roundedboxwidth}{#1}%
\addtolength{\roundedboxwidth}{-2\roundedboxsep}%
\begin{lrbox}{\roundedboxtmpbox}\begin{minipage}{\ roundedboxwidth}%
}{\end{minipage}\end{lrbox}%
\noindent%
\begin{tikzpicture}%
\draw node [rounded corners,fill=red!10,inner sep=\roundedboxsep]%
{\usebox{\roundedboxtmpbox}};%
\end{tikzpicture}%
}


Es werden die Pakete pgf und tikz benötigt.

Gruß
Michel