Skip to content
Snippets Groups Projects
exemple-env.tex 2.47 KiB
Newer Older
%\usepackage[T1]{fontenc}
%\usepackage[latin9]{inputenc}
%\usepackage{xcolor}
\usepackage{verbatim}

\newlength\sidebar
\newlength\envrule
\newlength\envborder
\setlength\sidebar{1.5mm}
\setlength\envrule{0.4pt}
\setlength\envborder{2.5mm}

\definecolor{exampleborder}{rgb}{0,0,.7}
\definecolor{examplebg}{rgb}{.9,.9,1}
\newsavebox\envbox
\newcounter{example}
\newcounter{defi}
\newenvironment{example}[1][EXAMPLE]{%
  \refstepcounter{example}%
  \SpecialEnv{Example \theexample ~ #1}{exampleborder}{examplebg}{}{}%
}{%
  \endSpecialEnv
}

\definecolor{grammarruleborder}{rgb}{.9,0,0}
\definecolor{grammarrulebg}{rgb}{1,.9,.9}

\newenvironment{grammarrule}[1][]{% Default grammarrule has no title
  \par
  \SpecialEnv{#1}{grammarruleborder}{grammarrulebg}{grammarruleborder}{}%
}{%
  \endSpecialEnv
}

\definecolor{defiborder}{rgb}{.5,0.5,0.9}
\definecolor{defibg}{rgb}{1,.9,0}
\newenvironment{defi}[1][Definition]{
  \par
  \refstepcounter{defi}%
  \SpecialEnv{Definition \thedefi: #1}{defiborder}{defibg}{defiborder}{}%
}{%
  \endSpecialEnv
}





\def\Empty{}

% #1 title (if any)
% #2 sidebar (and title bg) color
% #3 background color
% #4 border color (or null for no border)
% #5 Counter, if any.
\newenvironment{SpecialEnv}[5]{%
  \par
  \def\EnvSideC{#2}% To use later (in end)
  \def\EnvBackgroundC{#3}%
  \def\EnvFrameC{#4}%  
  \flushleft
  \setlength\leftskip{-\sidebar}%
  \addtolength\leftskip{-\envborder}%
  \noindent \nobreak
  % Check if title is null:
  \ifx\delimiter#1\delimiter\else
  % If a title is specified, then typeset it in reverse color
   \colorbox{\EnvSideC}{%
     \hspace{-\leftskip}% usually positive
     \hspace{-\fboxsep}%
     \footnotesize\sffamily\bfseries\textcolor{white}{#1}%
     \hspace{\envborder}}%
   \par\nobreak
   \setlength\parskip{-0.2pt}% Tiny overlap to counter pixel round-off errors
   \nointerlineskip 
  \fi
  % Make side-bar
  \textcolor{\EnvSideC}{\vrule width\sidebar}%
  % collect body in \envbox:
  \begin{lrbox}\envbox 
  \begin{minipage}{\hsize}%
  % insert counter, if any:
  \ifx\delimiter#5\delimiter\else#5.\enspace\fi
  \ignorespaces
}{\par
  \end{minipage}\end{lrbox}%
  % body is collected. Add background color
  \setlength\fboxsep\envborder
  \ifx\EnvFrameC\Empty % no frame
    \colorbox{\EnvBackgroundC}{\usebox\envbox}%
  \else % frame
    \setlength\fboxrule\envrule
    \addtolength\fboxsep{-\envrule}%
    \fcolorbox{\EnvFrameC}{\EnvBackgroundC}{\usebox\envbox}%
  \fi
  \nobreak \hspace{-2\envborder}\null
  \endflushleft
}