Newsgroup: it.comp.software.tex
Titolo: Problemi con environment personalizzato

Salve a tutti,
ho un problema con un nuovo environment che vorrei utilizzare per 
rappresentare degli esempi.
Per abbellire il tutto ho deciso di utilizzate il pacchetto TKIZ (dato 
che lavoro con pdflatex).
All'atto della compilazione rilevo un errore apparentemente dovuto ad 
una arrata chiusura dell'environment. Ma quello che non riesco a capire 
ï¿œ il mancato passaggio di un parametro, nella fattispecie, il titolo 
dell'esempio.
Questo ï¿œ il codice utilizzato:
% part of preamble
\usepackage{tikz}               % pgf-tikz advanced graphics tools
\usetikzlibrary{arrows,shapes,backgrounds}    % pgf-tikz libraries
%
\newcounter{Examplecount}
\setcounter{Examplecount}{0}
\newenvironment{example}[1]%
{% This is the begin code
\stepcounter{Examplecount} % increase example number
\tikzstyle{mybox} = [draw=gray, fill=gray!10, very thick,%
      rectangle, rounded corners, inner sep=10pt, inner ysep=20pt]%
\tikzstyle{fancytitle} =[fill=red, text=white, rectangle, rounded corners]
  \begin{tikzpicture}
  \node [mybox] (box){%
      \begin{minipage}{0.85\textwidth}
}}
{{\end{minipage}};
\node[fancytitle, right=10pt] at (box.north west) {\bf\small Esempio 
\arabic{Examplecount}: #1}; %example title
\end{tikzpicture}%
}
\begin{document}
\begin{example}[Questo ï¿œ un esempio]
Lorem ipsum dolor sit amet consectetuer velit Vestibulum Fusce elit 
vitae. Vestibulum wisi sem at dui habitant Vivamus Nulla Curabitur a 
orci. Elit natoque sem semper vitae pede nisl Pellentesque neque libero 
elit. Wisi mauris et nulla gravida elit Curabitur Mauris enim congue 
semper.
\end{example}
\end{document}
Questi sono gli errori mostrati all'atto della compilazione:
Extra }, or forgotten \endgroup. \begin{example}[ (followed by: Questo 
ï¿œ un esempio])	test.tex	/main	line 45	Texlipse Build Error
Illegal parameter number in definition of \endexample. } (followed 
by: )	main.tex	/main	line 416	Texlipse Build Error
Missing } inserted. \end{example} (followed by: )	main.tex	/main	line 
50	Texlipse Build Error
You can't use `macro parameter character #' in restricted horizontal 
mode. \end{example} (followed by: )	main.tex	/main	line 50	Texlipse 
Build Error
Grazie in anticipo a tutti

 Grazie in anticipo a tutti
Non � che la riga
{{\end{minipage}}
sia sbagliata? Io direi che dovrebbe essere
{\end{minipage}
Ciao
Enrico


Ciao, grazie per la risposta.
Effettivamente sembrerebbe non corretta ma la prima parentesi graffa 
dovrebbe aprire la "coda" dell'environment e l'ultima quella prima del 
punto e virgola, per intenderci, dovrebbe chiudere il "box" tkiz...
O forse sbaglio?
Purtroppo con la modifica suggerita aumentano gli errori riscontrati.
Ho modificato comunque il codice, dato che ignoravo che gli eventuali 
argomenti aggiuntivi ([]) andassero richiamati solo nella "testa". 
Dunque ho utilizzato un \sbox per salvare il contenuto del titolo e 
specificarlo poi in "coda". Almeno il problema del titolo � risolto...
\newcounter{Examplecount}
\setcounter{Examplecount}{0}
\newsavebox{\Exampletitle}
\newenvironment{example}[1]%
{% This is the begin code
\stepcounter{Examplecount} % increase example number
\sbox\Exampletitle{\bf\color{white}\emph{#1}}
  \begin{tikzpicture}
     \node [draw=gray, fill=gray!10, very thick,%
      rectangle, rounded corners, inner sep=10pt, inner ysep=20pt] (box){%
      \begin{minipage}{0.85\textwidth}%
}}
{{\end{minipage}};
\node[fill=gray, text=white, rectangle, rounded corners, right=10pt] at 
(box.north west) {\bf\small Esempio \arabic{Examplecount}: 
\usebox{\Exampletitle}}; %example title
\end{tikzpicture}%
}
Adesso gli errori sono:
Extra }, or forgotten \endgroup. \begin{example}{Questo un esempio} 
(followed by: )	test.tex	/main	line 45	Texlipse Build Error


 wrote:

� tutto sbagliato: non puoi cominciare l'argomento di \node
nel begin code e terminarlo nell'end code. Se vuoi raccogliere
testo da mettere poi nell'argomento di \node c'� l'ambiente
lrbox:
\newcounter{Examplecount}
\newsavebox{\Examplebox}
\newenvironment{example}[1]
  {\refstepcounter{Examplecount}% increase example number
   \newcommand\Exampletitle{#1}%
   \begin{lrbox}{\Examplebox}
   \begin{minipage}{0.85\textwidth}
  }
  {\end{minipage}\end{lrbox}%
   \begin{tikzpicture}
     \node [draw=gray, fill=gray!10, very thick, rectangle, 
       rounded corners, inner sep=10pt, inner ysep=20pt] (box){%
       \usebox{\Examplebox}};
     \node[fill=gray, text=white, rectangle, rounded corners, 
       right=10pt] at (box.north west) {%
       \bfseries\small Esempio \theExamplecount: 
       \color{white}\Exampletitle}; %example title
   \end{tikzpicture}%
  }
Meglio usare \theExamplecount che \arabic{Examplecount}; se per
caso volessi cambiare la rappresentazione del numero ti basterebbe
ridefinire \theExamplecount dopo aver definito il contatore. Ogni
nuovo contatore � inizializzato a 0.
Il modo pi� comodo per portare l'argomento nell'end code � di
definire nel begin code una macro che lo contenga.
Ciao
Enrico

 Enrico
...mi inchino.
Grazie per il supporto, avrei sbattuto la testa ancora per molto...;-)
Avevo intuito l'impossibilit� di andare avanti con un environment con un 
evidente sbilanciamento delle parentesi ma non trovavo una via di uscita...
Approfitto della competenza e della disponibilit� per un altro aspetto 
legato all'environment in questione: se volessi gestire il salto pagina 
come dovrei comportarmi? In altri termini, attualmente, se il testo 
contenuto nell'environment supera lo spazio verticale utile invade 
ineorabilmente quello di competenza del footer.
Sarebbe attuabile l'integrazione dell'environment in un altro che 
prevede lo "spanning" su pi� pagine come "listings" o analoghi?
Obbligato ancora per i lumi.
-jospic

 scrive:

Con questo tipo di oggetti non ha molto senso "andare su pi� pagine".
Pensare di realizzarlo in LaTeX fa tremare le vene dei polsi. :)
Ciao
Enrico