6

I am trying to write a simple environment for the solutions of assessments I give. The code below defines such an environment:

 \newenvironment{answerenv}[1][Answer]{% Sets the default "Answer" but can be changed to be reused.
   \vskip1.5\baselineskip
   \MakeFramed {\FrameRestore}
   \noindent\tikz\node[inner sep=1ex, draw=black!20,fill=white,
          anchor=west, overlay] at (0em, 2em) {\normalcolor\sffamily#1};}%
 {\endMakeFramed}

 \newcommand{\answer}[1]{% This is to avoid typing then environment over and over
        {\color{red}%
        \begin{answerenv}
        {#1}
        \end{answerenv}
        }}

This is how I implement the code above:

 \documentclass[letterpaper]{article}
 \usepackage[top=1.5cm,bottom=1.5cm,left=1.5cm,right=1.5cm]{geometry}
 \usepackage{amsmath,amssymb,enumitem}
 \usepackage[dvipsnames]{xcolor}
 \usepackage{framed,tikz}
 \parindent0pt
 \newenvironment{answerenv}[1][Answer]{%
 \vskip1.5\baselineskip
\MakeFramed {\FrameRestore}
\noindent\tikz\node[inner sep=1ex, draw=black!20,fill=white, anchor=west, overlay] at (0em, 2em) {\color{black}\sffamily#1};}%
 {\endMakeFramed}
 \newcommand{\answer}[1]{%
        {\color{red}%
        \begin{answerenv}
        {#1}
        \end{answerenv}
        }}
 \begin{document}
    \begin{enumerate}
    \item Is $5x\left(x^{-\frac{1}{2}}yz^3\right)^2$ equal to $5y^2z^6$?
          \answer{Let us simplify $5x\left(x^{-\frac{1}{2}}yz^3\right)^2$ and verify whether or not it is equal to $5y^2z^6$. Thus,
          \begin{align*}
          5x\left(x^{-\frac{1}{2}}yz^3\right)^2&=5x\left(x^{-1}y^2z^6\right)\\
                                               &=5y^2z^6
          \end{align*}
          Hence, $5x\left(x^{-\frac{1}{2}}yz^3\right)^2=5y^2z^6$
          }
    \item Solve $2x+3=-2(4-7x)-2$.
          \answer{
          \begin{align*}
          2x+3&=-2(4-7x)-2\\
          2x+3&=-8+14x-2\\
          14x-2x&=3+8+2\\
          12x&=13\\
          x&=\frac{13}{12}
          \end{align*}}
    \item Is division commutative? Support your conclusion with an example.
          \answer{If division is commutative then this means that \[a\div b=b\div a\] is true. It will suffice to say that \[4=8\div 2\neq 2\div 8=0.25\].}
    \item Is 1 prime or composite?
          \answer{1 is neither prime nor composite. If it were prime then it would have only two distinct factors, one and itself, which does not have. To be composite would mean to have more than two factors and thus does not satisfy any of the above. }
    \end{enumerate}
 \end{document} 

This is the output:enter image description here

As you can see there are several problems:

  1. In the first item the word Answer is more or less where I would want it but you can still see the red frame. I would want the box containing the word Answer to be centered vertically with the frame line.

  2. The red frame is not indented with the enumerate environment. Note I would like the content in the environment to be indented as shown below.

  3. Inconsistency of the environment.

The below is what I intend to achieve:

enter image description here

5
  • 1
    Are you stuck with framed or would an mdframed solution also work for you? Mar 9, 2012 at 16:34
  • @PeterGrill Would it matter? I sincerely don't mind mdframed. But if it can be done using either or it would help understanding the advanced features of both packages.
    – azetina
    Mar 9, 2012 at 16:42
  • @azetina: In my opinion the package framed is more robust. The package mdframed is growing from version to version :-(. An other difference is the bottom/top line. mdframed doesn't draw a bottom/top line at splitted frames. Mar 9, 2012 at 17:11
  • @PeterGrill Could you recreate what @MarkS.Everitt provided but with the framed package?
    – azetina
    Mar 9, 2012 at 19:26
  • @azetina: Sorry, don't know the framed package, I have been using mdframed. Mar 9, 2012 at 19:55

2 Answers 2

5

Here's a quick and dirty solution with mdframed

\documentclass{article}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{lipsum}


\global\mdfdefinestyle{redbox}{%
linewidth=2pt,
linecolor=red,
innertopmargin=1.2\baselineskip,
skipabove={\dimexpr0.5\baselineskip+\topskip\relax},
needspace=2\baselineskip,
frametitlefont=\sffamily\bfseries,
frametitlefontcolor=black,
fontcolor=red,
innerleftmargin=1em,
leftmargin=-1em,
innerrightmargin=1em,
rightmargin=-1em,
innerbottommargin=1em
}
\makeatletter
\renewrobustcmd\mdfcreateextratikz{\node[black,fill=white,xshift=1cm] at (P-|O) {\mdf@frametitlefont{Answer}};}
\makeatother

\begin{document}

\lipsum[3]
\begin{mdframed}[style=redbox]
\lipsum[2]
\end{mdframed}

\end{document}

enter image description here

9
  • You can use \color{\mdf@frametitlefontcolor}. The benefit you can use the option frametitlefontcolor. Maybe also for draw=\mdf@frametitlefontcolor Mar 9, 2012 at 17:06
  • It doesn't like draw=\mdf@frametitlefontcolor with the title node though.
    – qubyte
    Mar 9, 2012 at 17:12
  • This wasn't any constraint. Please don't understand it wrong. It's only a suggestion. Mar 9, 2012 at 17:14
  • 2
    @azetina: I am the author of mdframed not framed ;-) Mar 9, 2012 at 17:23
  • 1
    If ou mean that you want the width of the text in the box to be the same as the width of the text outside the box, then you can set the margins. See the updated answer.
    – qubyte
    Mar 10, 2012 at 4:54
3

An example using tcolorbox for framed boxes.

\documentclass{article}
\usepackage{amsmath}
\usepackage[most]{tcolorbox}

\newtcolorbox{myanswer}[1][]{%
    enhanced, title=Answer, colframe=red, 
    colback=white, sharp corners, colupper=red,
    fonttitle=\ttfamily,coltitle=black,
    attach boxed title to top left = {xshift=5mm,yshift=-2.5mm} ,
    boxed title style={size=small, colframe=gray, sharp corners,colback=white},
    #1}

\begin{document}

\begin{enumerate}
\item Is $5x\left(x^{-\frac{1}{2}}yz^3\right)^2$ equal to $5y^2z^6$?

\begin{myanswer}
Let us simplify $5x\left(x^{-\frac{1}{2}}yz^3\right)^2$ and verify whether or not is equal to $5y^2z^6$. Thus,
\[\begin{split}5x\left(x^{-\frac{1}{2}}yz^3\right)^2 & = 5x(x^{-1}y^2z^6)\\
& = 5y^2z^6\end{split}\]
Hence, $5x\left(x^{-\frac{1}{2}}yz^3\right)^2 = 5y^2z^6$
\end{myanswer}
\end{enumerate}

\end{document}

enter image description here

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .