[Tex/LaTex] Best way to create colored text boxes

boxescolor

I am retyping some old exams into LaTeX, and I encountered the page below

Old exam

Now with some clever commands, and whatnot I was able to create something almost identical. Though the spacing is a tad off, and my equation is a tad small. I also had to use some hacks and ugly code to produce the result

Does anyone have a better cleaner way to do this ?

Here is almost the exact code I am using for typesetting these exams. Only difference is that all the "junk" in the header is placed i sty. files. So y header contains only 3-5 input files. Here I included everything that is needed to run the code. Some improvements to the code below would be great.

\documentclass[10pt,a4paper]{article}
\usepackage[hmargin=3cm,vmargin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[norsk]{babel}
\usepackage[dvipsnames*,svgnames]{xcolor}
\usepackage{mathtools}
\usepackage{xstring}
\usepackage{xparse}

\newcounter{tittel}
\setcounter{tittel}{0}
\newcounter{problem}
\setcounter{problem}{0}
\newcounter{alternative}
\setcounter{alternative}{0}

\newcounter{navn}[problem]
\renewcommand{\thenavn}{\alph{navn}}
\newcommand{\navn}{\stepcounter{navn}\paragraph*{\thenavn)}}
\setcounter{navn}{0}

\newcommand{\NR}[1]
{ \vspace{5mm} \begin{minipage}[t]{0.051 \textwidth}
 \navn \hspace{0pt}
\end{minipage}
\begin{minipage}[t]{0.949\textwidth}
#1 
\end{minipage}
\vspace{-0.3cm}
}

\newif\iffirstalt

\NewDocumentCommand{\Oppgave}{m o}{%
  \IfNoValueTF{#2}{\setcounter{alternative}{0}\stepcounter{problem}    \firstaltfalse}%
              {\stepcounter{alternative}\iffirstalt\else\stepcounter{problem}    \firstalttrue\fi}
  \section*{Oppgave \arabic{problem}%
             {\normalfont\IfNoValueTF{#2}{}{~Alternative     \Roman{alternative}\ }
                \normalsize (#1 poeng)}%
   \addcontentsline{toc}{section}{Oppgave \arabic{problem} }} 
\vspace{3mm} }

\begin{document}

\Oppgave{5}

En gruppe på $8$ elever besår av like mange gutter som jenter. Vi trekker     tilfeldig ut 8 elever.

\NR{ Hva er sannsynligheten for å trekke ut $2$ gutter og $1$ jente? }

\NR{ Hva er sannsynligheten for å trekke ut minst $1$ jente? }

\begin{center}

  \noindent\fcolorbox{black}{LightSteelBlue}{%
    \parbox[t][3cm][c]{11cm}{ \hspace*{0.25cm} Hypergeometrisk     sannsynlighetsfordeling: $\displaystyle P(X=x)=\dfrac{\binom{m}{k}\binom{n-m}{r-k}}{\binom{n}{r}}$ \\ 
    \hspace*{0.25cm} $m$ elementer i $D$. $n-m$ elementer i $\bar{D}$ \\
   \hspace*{0.25cm} $r$ elementer trekkes tilfeldig. \\
   \hspace*{0.25cm} $X$ er antall elementer som trekkes fra $D$  }%
  }%
   \end{center}

    \end{document}

Below is a minimal example, barely enough to produce the page above.

\documentclass[10pt,a4paper]{article}
\usepackage[hmargin=3cm,vmargin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[norsk]{babel}
\usepackage[dvipsnames*,svgnames]{xcolor}
\usepackage{mathtools}

\begin{document}

\section*{Oppgave 2 \normalsize \normalfont (5 poeng)}

En gruppe på $8$ elever besår av like mange gutter som jenter. Vi trekker     tilfeldig ut 8 elever.

\paragraph*{a)} Hva er sannsynligheten for å trekke ut $2$ gutter og $1$ jente? 

\paragraph*{b)} Hva er sannsynligheten for å trekke ut minst $1$ jente? 

\begin{center}

  \noindent\fcolorbox{black}{LightSteelBlue}{%
    \parbox[t][3cm][c]{11cm}{ \hspace*{0.25cm} Hypergeometrisk     sannsynlighetsfordeling: $\displaystyle P(X=x)=\dfrac{\binom{m}{k}\binom{n-m}{r-k}}{\binom{n}{r}}$ \\ 
    \hspace*{0.25cm} $m$ elementer i $D$. $n-m$ elementer i $\bar{D}$ \\
   \hspace*{0.25cm} $r$ elementer trekkes tilfeldig. \\
   \hspace*{0.25cm} $X$ er antall elementer som trekkes fra $D$  }%
  }%
  \end{center}

\end{document}

Here is how my output looks

My output

Question(s)

  • Is there an easier way, that also looks better for creating the blue box?
  • Are there any smal improvements that could be done to my "long" code?

Best Answer

Here a way to define such a box using adjustbox. See the manual for more options.

\documentclass[10pt,a4paper]{article}
\usepackage[hmargin=3cm,vmargin=2cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage[norsk]{babel}
\usepackage[dvipsnames*,svgnames]{xcolor}
\usepackage{mathtools}
\usepackage{xstring}
\usepackage{xparse}
\usepackage{adjustbox}
\usepackage{varwidth}

\newcounter{tittel}
\setcounter{tittel}{0}
\newcounter{problem}
\setcounter{problem}{0}
\newcounter{alternative}
\setcounter{alternative}{0}

\newcounter{navn}[problem]
\renewcommand{\thenavn}{\alph{navn}}
\newcommand{\navn}{\stepcounter{navn}\paragraph*{\thenavn)}}
\setcounter{navn}{0}

\newcommand{\NR}[1]
{ \vspace{5mm} \begin{minipage}[t]{0.051 \textwidth}
 \navn \hspace{0pt}
\end{minipage}
\begin{minipage}[t]{0.949\textwidth}
#1 
\end{minipage}
\vspace{-0.3cm}
}

\newif\iffirstalt

\NewDocumentCommand{\Oppgave}{m o}{%
  \IfNoValueTF{#2}{\setcounter{alternative}{0}\stepcounter{problem}    \firstaltfalse}%
              {\stepcounter{alternative}\iffirstalt\else\stepcounter{problem}    \firstalttrue\fi}
  \section*{Oppgave \arabic{problem}%
             {\normalfont\IfNoValueTF{#2}{}{~Alternative     \Roman{alternative}\ }
                \normalsize (#1 poeng)}%
   \addcontentsline{toc}{section}{Oppgave \arabic{problem} }} 
\vspace{3mm} }

\newenvironment{bluebox}{%
    \noindent
    \adjustbox{innerenv={varwidth}[c]{0.9\linewidth},margin=\fboxsep+.25cm \fboxsep+.2cm,bgcolor=LightSteelBlue,frame,center}\bgroup
}{%
    \egroup
}

\begin{document}

\Oppgave{5}

En gruppe på $8$ elever besår av like mange gutter som jenter. Vi trekker     tilfeldig ut 8 elever.

\NR{ Hva er sannsynligheten for å trekke ut $2$ gutter og $1$ jente? }

\NR{ Hva er sannsynligheten for å trekke ut minst $1$ jente? }


\begin{bluebox}
   Hypergeometrisk     sannsynlighetsfordeling: $\displaystyle P(X=x)=\dfrac{\binom{m}{k}\binom{n-m}{r-k}}{\binom{n}{r}}$ \\
   $m$ elementer i $D$. $n-m$ elementer i $\bar{D}$ \\
   $r$ elementer trekkes tilfeldig. \\
   $X$ er antall elementer som trekkes fra $D$
\end{bluebox}

\end{document}

Result