## A (simple) LaTeX Example Environment

This week again, a little LaTeX. As you know, I’m putting the finishing touches to a manuscript I’ve been working on for a little bit more than a year now. Those “finishing touches” always start simple, then end up asking for quite a bit more LaTeX programming that I’d like.

This week, I worked quite a bit to repair my “example” environment that include example number, extra margin, and a different colored box around the text. This helps locate and distinguish examples from normal text. But my first version had little problems. Like equations centered not on the example text but still relative to the whole page. Bummer. Let’s see how I fixed all that.

In my first version of the environment, I used mdframed to create the shaded box and merely set \leftskip to indent the paragraphs. This works properly with text, but not with figures and equations that remain centered relative to the page. Reading more carefully the mdframed documentation, I discovered that I could use the inner margins to constrain not only the text but also the figures and equations.

You will need the following packages to implement my solution:

\usepackage{calc}
\usepackage{tabto}
\usepackage{tikz}
\usepackage[framemethod=tikz]{mdframed} % for colored backgrounds
\newcommand{\halmos}{$\square$} % makes a box at the end


And these definitions:

\newlength{\framedinnerleftmargin}
\newlength{\framedinnertopmargin}
\newlength{\framedreversedinnerleftmargin}
\setlength{\framedinnerleftmargin}{\widthof{Theoreme 10.10.10}+2em}
\setlength{\framedreversedinnerleftmargin}{\widthof{Theoreme 10.10.10}+1em}
\setlength{\framedinnertopmargin}{1em}

% first argument: label in upper left corner,
% second argument: background color
\newenvironment{boxedtext}[2]{\begin{mdframed}[%
hidealllines=true,%
backgroundcolor=#2,%
innertopmargin=\framedinnertopmargin,%
innerleftmargin=\framedinnerleftmargin,%
innerrightmargin=1em%
]%
\tabto{-\framedreversedinnerleftmargin}\textbf{#1}\tabto*{0em}%
}% begin code
{\hskip 0pt\\\hspace*{\fill}\halmos{}\end{mdframed}\vspace{1em}} % end code

\newenvironment{summary}[0]{\begin{center}\begin{minipage}[c]{\summarywidth}\begin{spacing}{0.9}\footnotesize} % begin code
{\end{spacing}\end{minipage}\end{center}} % end code


This solution assumes that the widest label is “theoreme 10.10.10”, and everything is measured according to this. So basically what this does is to create a box with an inner left margin wide enough to accommodate the longest label, and constrain the rest of the text in what’s left of the page.

That merely creates a box, with a given label and background color. That’s still not quite enough just yet. I wanted example numbers to increment, follow section numberings, etc. For this, you will need to create and use a counter:

\newcounter{example}

% optional! if you want it to start at zero
% with every new chapter/section/etc.
\numberwithin{example}{section}

\newenvironment{example}[0]
{\refstepcounter{example}\vspace{1em plus 1em}\begin{boxedtext}{Exemple \theexample.}{blue!7}}%\setlength{\parskip}{0em}}
{\end{boxedtext}\vspace{-1em plus 1em}}

\newenvironment{example*}[0]
{\vspace{1em plus 1em}\begin{boxedtext}{Exemple.}{blue!7}}
{\end{boxedtext}\vspace{-1em plus 1em}}


The example* environment does what you expect: an non-numbered example.

*
* *

The nice thing about mdframed versus, say, minipage, is that it splits more or less gracefully across pages: