Newsgroup: it.comp.software.tex
Titolo: environment "sovrapposti"

Ciao,
dopo qualche tempo ritorno ad usare \LaTeX, come via "intermedia" tra 
python-sphinx e pdf. Per questo ho modificato il writer latex di sphinx 
in accordo con le richieste della ditta. Al momento ho per� un problema 
con due ambienti sovrapposti/innestati, topic e Verbatim.
 
L'ambiente topic, definito da me, � praticamente un 'framed box' con una 
riga verticale verde sulla sinistra, mentre il secondo ha solo uno 
sfondo grigio.
 
Il mio problema � che quando un Verbatim appare all'interno di un topic, 
appare non il suo sfondo grigio, ma una seconda riga verticale verde, 
affiancata ed interna alla prima. Io vorrei far s� che lo sfondo grigio 
del Verbatim si veda lo stesso e che la seconda linea verde non appaia. 
Ho provato anche una soluzione basata su tikz, ma il risultato � 
esattamente lo stesso: credo quindi di affrontare il problema dal punto 
di vista sbagliato.
 
Trovate un esempio minimo in fondo. Spero che Enrico non sussulti sulla 
sedia... :-)
 
Qualcuno ha un suggerimento?
Grazie in anticipo!
Stefano
 
\documentclass{article}
\usepackage{framed,fancyvrb,color,hyperref}
 
%verde di titoli ecc
\definecolor{TitleColor}{RGB}{118,177,0}
 
% sfondo Verbatim, grigio 50%.
\definecolor{VerbatimColor}{RGB}{204,204,204}
 
%%%%% topic
\newenvironment{topic}{%
   \def\FrameCommand{%
     \hspace{1pt}%
     {\color{TitleColor}\vrule width 2pt}%
     \setlength{\fboxrule}{0pt}%
     \fbox%
   }%
   \MakeFramed{\advance\hsize-\width\FrameRestore}%
   \noindent\hspace{-4.55pt}% disable indenting first paragraph
   }
   {%
     \vspace{2pt}\endMakeFramed%
}
%%%%%
\let\OriginalVerbatim=\Verbatim
\let\endOriginalVerbatim=\endVerbatim
 
\newlength\distancetoright
\def\mycolorbox#1{%
   \setlength\distancetoright{\linewidth}%
   \setlength\fboxrule{0pt}
%  \advance\distancetoright -\@totalleftmargin %
   \fcolorbox{VerbatimColor}{VerbatimColor}{%
   \begin{minipage}{\distancetoright}%
     #1
   \end{minipage}%
   }%
}
\def\FrameCommand{\mycolorbox}
 
%%%%% Verbatim
\renewcommand{\Verbatim}[1][1]{%
   % list starts new par, but we don't want it to be set apart vertically
   \bgroup\parskip=0pt%
   \smallskip%
   % The list environement is needed to control perfectly the vertical
   % space.
   \list{}{%
   \setlength\parskip{0pt}%
   \setlength\itemsep{0ex}%
   \setlength\topsep{0ex}%
   \setlength\partopsep{0pt}%
   \setlength\leftmargin{0pt}%
   }%
   \item\MakeFramed {\FrameRestore}%
      \small%
     \OriginalVerbatim[#1]%
}
\renewcommand{\endVerbatim}{%
     \endOriginalVerbatim%
   \endMakeFramed%
   \endlist%
   % close group to restore \parskip
   \egroup%
}
 
\begin{document}
\begin{topic}
\textbf{Sample}
 
foo
 
\begin{Verbatim}[commandchars=\\\{\}]
bar
bar
\end{Verbatim}
 
foo
 
\end{topic}
 
\begin{Verbatim}[commandchars=\\\{\}]
fubar
\end{Verbatim}
 
 
\end{document}
 
 
PS: si, lo so che � buona norma fornire un esempio minimale, ma non 
riesco ad isolare i "pezzi" di codice giusto... ci lavorero' (se trovo 
il tempo) domani.

 sfondo grigio.
 
Userei senza esitazione mdframed:
 
\documentclass{article}
\usepackage{mdframed,fancyvrb,color,hyperref}
 
%verde di titoli ecc
\definecolor{TitleColor}{RGB}{118,177,0}
 
% sfondo Verbatim, grigio 50%.
\definecolor{VerbatimColor}{RGB}{204,204,204}
 
%%%%% topic
\newenvironment{topic}
 {\begin{mdframed}
   [topline=false,
    bottomline=false,
    rightline=false,
    leftline=true,
    linewidth=2,
    linecolor=TitleColor,
    rightmargin=0pt,
    innerrightmargin=0pt,
    innertopmargin=0pt,
    innerbottommargin=0pt,
    innerleftmargin=2pt]
 }
 {\end{mdframed}}
 
\let\OriginalVerbatim=\Verbatim
\let\endOriginalVerbatim=\endVerbatim
 
\renewcommand{\Verbatim}[1][]{%
  \par\addvspace{1ex}
  \mdframed
    [backgroundcolor=VerbatimColor,
     hidealllines=true,
     skipbelow=1ex,
     innertopmargin=.2ex,
     innerbottommargin=.2ex,
     leftmargin=0pt]
  \OriginalVerbatim[#1]%
}
\renewcommand{\endVerbatim}{%
   \endOriginalVerbatim
   \endmdframed
}
 
\begin{document}
\begin{topic}
\textbf{Sample}
 
foo
 
\begin{Verbatim}[commandchars=\\\{\}]
bar
bar
\end{Verbatim}
 
foo
 
\end{topic}
 
\begin{Verbatim}[commandchars=\\\{\}]
fubar
\end{Verbatim}
 
 
\end{document}
 
Ciao
Enrico

 Enrico
Non conoscevo il pacchetto mdframed, ma fa perfettamente il suo lavoro!
 
Grazie Enrico, se non ci fossi tu... :-)
Stefano