Newsgroup: it.comp.software.tex
Titolo: Problema indice pagine nuovo environment

Salve a tutti,
ho creato un nuovo ambiente per esempi.
\begin{example}[Titolo dell esempio]
bla bla bla....
\end{example}
Segue il codice per definirlo nel preambolo:
%------------------------------------
\newcommand{\listofexamplename}{Elenco degli esempi}
\newlistof[chapter]{example}{exp}{\listofexamplename}
\newsavebox{\Examplebox}
\newenvironment{example}[1][]%
   {\refstepcounter{example}% increase example number
         %
     	% \phantomsection
 
\addcontentsline{exp}{example}{\protect\numberline{\theexample}\hspace{1.0em}#1}%
	%
    \newcommand\Exampletitle{#1}%
    \begin{lrbox}{\Examplebox}
    \begin{minipage}{.94\textwidth}}
   {\end{minipage}\end{lrbox}%
     \noindent\small
    \tikzset{external/export next=false}
    \begin{tikzpicture}
      \node [draw=gray, fill=gray!10, 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) {%
        $\blacktriangleright$ \bfseries\small Esempio \theexample:
        \color{white}\Exampletitle};  %\normalsize}; %example title
    \end{tikzpicture}%
   }
%------------------------------------
Il problema è che nell'indice, lista degli esempi, per alcuni di essi è 
errato il numero di pagina di riferimento.
Ho notato che gli esempi affetti da errore di pagina sono quelli 
immediatamente successivi a pagine non completamente "riempite" dal 
flusso di testo.
Probabilmente basterebbe spostare il comando \addcontentsline 
inserendolo più "a valle" (nella definizione dell'environment). Ho varie 
possibilità, senza molto ragionamento, ma ottengo degli errori di 
compilazione in quanto l'uso di \minipage e di \tikz rende il tutto un 
pò complicato...almeno per me.
Qualche suggerimento?
Grazie in anticipo.
-jospic

 scrive:

Aggiungerei un
  \par\addvspace{\topsep}
all'inizio della parte "begin", prima di tutto, e anche in fondo
alla parte "end". Il comando \addcontentsline deve ovviamente andare
dopo il \noindent.
\newenvironment{example}[1][]%
  {\par\addvspace{\topsep}
   \newcommand\Exampletitle{#1}%
   \begin{lrbox}{\Examplebox}
   \begin{minipage}{.94\textwidth}}
  {\end{minipage}\end{lrbox}%
   \noindent\small
   \refstepcounter{example}% increase example number
   \addcontentsline{exp}{example}{%
     \protect\numberline{\theexample}\hspace{1.0em}#1}%
   \tikzset{external/export next=false}
   \begin{tikzpicture}
     \node [draw=gray, fill=gray!10, 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) {%
       $\blacktriangleright$ \bfseries\small Esempio \theexample:
       \color{white}\Exampletitle};  %\normalsize}; %example title
   \end{tikzpicture}%
   \par\addvspace{\topsep}
  }
Non ti serve \phantomsection, perché il \refstepcounter
definisce già il necessario punto di ancoraggio.
Ciao
Enrico

Grazie per la risposta.
Purtroppo il problema persiste in quanto la variabile #1, relativa al 
comando \addcontentsline viene vista come carattere speciale e dunque si 
ottengono i seguenti messaggi:
-You can't use `macro parameter character #' in horizontal mode
-Illegal parameter number in definition
Naturalmente pensare di inserire \#1 sarebbe inutile dato che verrebbe 
visto come stringa di testo.
Come se ne esce?
Grazie per la collaborazione.


 Come se ne esce?
Scusa, non ci avevo fatto caso. Devi ovviamente sostituire #1 nella
parte "end" con \Exampletitle che è definito appositamente per quello.
Ciao
Enrico

Grazie, perfetto!
Quando si dice "...perdersi in un bicchier d'acqua!"
-jospic



scusate se mi intrometto.
Visto che l'oggetto "example" crea, nel caso di esempi lunghi, problemi 
di posizionamento e quindi spazi verticali a volte troppo grandi 
(sgradevoli direi), non sarebbe invece il caso di renderlo come oggetto 
flottante?
-- 
Pandozy vede tutto
     _   _
   O'|,=,/'O
     (0 0)
ooO--(_)--Ooo

 scrive:

Questo lo lascio come facile esercizio a jospic. :)
Ciao
Enrico

Effettivamente il problema degli esempi "lunghi" mi ha assillato non 
poco. La questione primaria, anche come oggetto flottante, è sicuramente 
la gestione del salto pagina.
Nel mio caso ho scelto una soluzione che farà orridire molti, nonostante 
ci sia probabilmente una soluzione più elegante; ho previsto, infatti, 
anche un environment example* che non avendo etichette viene utilizzato 
come continuazione di quello contenuto nella pagina precedente...lo so 
non è il massimo.
-jospic



vorra' quindi dire che mi ci allenero' un po io... :-)
