\documentclass[DIV=8, pagesize=auto]{scrartcl}

\usepackage{fixltx2e}
\usepackage{etex}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{array}
\usepackage{booktabs}
\usepackage{microtype}
\usepackage[unicode=true]{hyperref}

\newcommand*{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}
\newcommand*{\pkg}[1]{\textsf{#1}}
\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
\makeatletter
\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
\makeatother
\newcommand*{\env}[1]{\texttt{#1}}
\newcommand*{\opt}[1]{\texttt{#1}}
\newcommand*{\meta}[1]{\textlangle\textsl{#1}\textrangle}
\newcommand*{\marg}[1]{\texttt{\{}\meta{#1}\texttt{\}}}

\addtokomafont{title}{\rmfamily}

\title{The \pkg{framed} package\thanks{This manual corresponds to \pkg{framed}~v0.96, dated~2011/10/22.}}
\author{Donald Arseneau  (\mail{asnd@triumf.ca})}
\date{2012/05/31}


\begin{document}

\maketitle

\noindent
Create framed, shaded, or differently highlighted regions that can 
break across pages.  The environments defined are

\medskip
\noindent
\begin{tabular}{@{}>{\ttfamily}l@{~~--~~}l@{}}
  framed    & ordinary frame box (\cmd{\fbox}) with edge at margin     \\
  oframed   & framed with open top/bottom at page breaks               \\
  shaded    & shaded background (\cmd{\colorbox}) bleeding into margin \\
  shaded*   & shaded background (\cmd{\colorbox}) with edge at margin  \\
  snugshade & shaded with tight fit around text (esp. in lists)        \\
  snugshade*& like snugshade with shading edge at margin               \\
  leftbar   & thick vertical line in left margin                       \\
  titled-frame & frame with title-bar; template for others
\end{tabular}
\medskip

\noindent
to be used like
%
\begin{verbatim}
    \begin{framed}
      copious text
    \end{framed}
\end{verbatim}


But the more general purpose of this package is to facilitate the
definition of new environments that take multi-line material,
wrap it with some non-breakable formatting (some kind of box or
decoration) and allow page breaks in the material.  Such environments
are defined to declare (or use) \cmd{\FrameCommand} for applying the boxy 
decoration, and \cmd{\MakeFramed}\marg{settings} \ldots\ \cmd{\endMakeFramed} 
wrapped around the main text (environment body).

The ``\env{framed}'' environment uses \cmd{\fbox}, by default, as its \cmd{\FrameCommand} 
with the additional settings \verb+\fboxrule=\FrameRule+ and \verb+\fboxsep=\FrameSep+.
You can change these lengths (using \cmd{\setlength}) and you can change 
the definition of \cmd{\FrameCommand} to use much fancier boxes.

In fact, the ``\env{shaded}'' environment just redefines \cmd{\FrameCommand} to be
\verb+\colorbox{shadecolor}+ (and you have to define the color ``\texttt{shadecolor}'':
\verb+\definecolor{shadecolor}...+).

Although the intention is for other packages to define the varieties
of decoration, a command \cmd{\OpenFbox} is defined for frames with open 
tops or bottoms, and used for the ``\env{oframed}'' environment.  This 
facility is based on a more complex and capable command \cmd{\CustomFBox} which can
be used for a wider range of frame styles.  One such style of a title-bar
frame with continuation marks is provided as an example.  It is used by
the ``\env{titled-frame}'' environment.  To make use of \env{titled-frame} in your
document, or the \cmd{\TitleBarFrame} command in your own environment
definitions, you must define the colors \texttt{TFFrameColor} (for the frame)
and a contrasting \texttt{TFTitleColor} (for the title text).

A page break is allowed, and even encouraged, before the \env{framed}
and other environments.  If you want to attach some text (a box title) to the
frame, then the text should be inserted by \cmd{\FrameCommand} so it cannot
be separated from the body. 

The contents of the framed regions are restricted: 
Floats, footnotes, marginpars and head-line entries will be lost.
(Some of these may be handled in a later version.)
This package will not work with the page breaking of \pkg{multicol.sty},
or other systems that perform column-balancing.

The \env{MakeFramed} environment does the work.  Its ``\meta{settings}'' argument
should contain any adjustments to the text width (via a setting of \cmd{\hsize}).
Here, the parameter \cmd{\width} gives the measured extra width
added by the frame, so a common setting is ``\verb+\advance\hsize-\width+''
which reduces the width of the text just enough that the outer edge
of the frame aligns with the margins.  The ``\meta{settings}'' should also
include a `restore' command -- \cmd{\@parboxrestore} or \cmd{\FrameRestore}
or something similar; for instance, the snugshade environment uses
settings to eliminate list indents and vertical space, but uses
\cmd{\hspace} in its \cmd{\FrameCommand} to reproduce the list margin ouside the
shading.

There are actually four variants of \cmd{\FrameCommand} to allow different
formatting for each part of an environment broken over pages.  Unbroken
text is adorned by \cmd{\FrameCommand}, whereas split text first uses 
\cmd{\FirstFrameCommand}, possibly followed by \cmd{\MidFrameCommand}, and
finishing with \cmd{\LastFrameCommand}.  The default definitions for 
these three just invokes \cmd{\FrameCommand}, so that all portions are
framed the same way.  See the \env{oframe} environment for use of distinct
First/Mid/Last frames.

\section*{Expert commands:}

\begin{itemize}
\item \cmd{\MakeFramed}, \cmd{\endMakeFramed}: the ``\env{MakeFramed}'' environment
\item \cmd{\FrameCommand}: command to draw the frame around its argument
\item \cmd{\FirstFrameCommand}: the frame for the first part of a split environment
\item \cmd{\LastFrameCommand}: frame for the last portion
\item \cmd{\MidFrameCommand}: for any intermediate segments
\item \cmd{\FrameRestore}: restore some text settings, but fewer than \cmd{\@parbox\-restore}
\item \cmd{\FrameRule}: length register; \cmd{\fboxrule} for default ``\env{framed}''.
\item \cmd{\FrameSep}: length register; \cmd{\fboxsep} for default ``\env{framed}''.
\item \cmd{\FrameHeightAdjust}: macro; height of frame above baseline at top of page
\item \cmd{\OuterFrameSep}: vertical space before and after the framed env.; defaults to \cmd{\topsep}
\end{itemize}

\medskip
This is still a `pre-production' version because I can think of many
features/improvements that should be made. Also, a detailed manual needs
to be written.  Nevertheless, starting with version~0.5 it should be bug-free.


\section*{ToDo:}

\begin{itemize}
\item Test more varieties of list 
\item Improve and correct documentation
\item Propagation of \cmd{\marks}
\item Handle footnotes (how??) floats (?) and marginpars.
\item Stretchability modification.
\end{itemize}

\end{document}
