# Creating a key/option for examwsolns to globally set the default solution width

Following-up this answer, I would like to

1- have a key/option for the package that sets the default width. For example, something like \usepackage[default-width = outer]{examwsolns}

2- understand what userdefinedwidth = \textwidth means as an option passed to the mdframed environment of the wide solution. Shouldn't it mean that the default width is the \textwidth? If yes, why the width of the solutions of the question and the part doesn't respect it?

P.S. the definition of the package examwsolns can be found here.

\documentclass[answers]{exam}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{examwsolns}
\usepackage{xcolor}
\usepackage{lipsum}
\usepackage{tikz}

% Default additional arguments to pass to the 'mdframed' environment
\examwsolnsSetMdFramedDefaultArgs{
skipabove = \baselineskip,
innertopmargin = \baselineskip,
innerbottommargin = \baselineskip,
userdefinedwidth = \textwidth
}

\begin{document}
Here is a full line:
\par\noindent\hrulefill

\begin{wsolution}
Autodetected outer level.
\end{wsolution}

\begin{questions}
\question A question.
\begin{wsolution}
Autodetected question level.
\end{wsolution}

\begin{parts}
\part A part
\begin{wsolution}[][innertopmargin = 2\baselineskip,
innerbottommargin = 2\baselineskip,
backgroundcolor=gray!40,
userdefinedwidth = \textwidth]
Autodetected part level.
\end{wsolution}
\end{parts}
\end{questions}
\end{document}


For your first question, examwsolns version 0.4 and later provide the default-level package option. Its initial value is current, which causes wsolution environments to autodetect the current question level, then indent and choose the width accordingly (same behavior as when the option isn't been used). You can pass any of the following values to this option: current, outer, question, part, subpart, subsubpart. For instance, \usepackage[default-level=outer]{examwsolns}.

The option value may also be changed mid-document, e.g.: \examwsolnsSetup{default-level=part} (this respects TeX's grouping rules). You may use an integer between 0 and 4 in the first argument of wsolution if you want override the default level just for one environment. To manually choose the level for a bunch of consecutive wsolution environments, it's easier to do \examwsolnsSetup{default-level=...} inside a group that contains the environments:

{%
\examwsolnsSetup{default-level=...}%
\begin{wsolution} ... \end{wsolution}
...
\begin{wsolution} ... \end{wsolution}
}


Concerning your second question, when you specify userdefinedwidth, you impose the width of the box, from left border to right border. This does not include indentation, which depends on the question level. Your example appears to work as designed (but your boxes go beyond the right margin due to indentation). Here is a trivial variation with userdefinedwidth = 0.5\textwidth, to make the effect more visible. The last enviromnent isn't affected because it explicitly specifies its own options for the mdframed environment (the second argument of wsolution overrides whatever you gave to \examwsolnsSetMdFramedDefaultArgs).

\documentclass[answers]{exam}
\usepackage[framemethod=tikz]{mdframed}
\usepackage{examwsolns}

% Default additional arguments to pass to the 'mdframed' environment
\examwsolnsSetMdFramedDefaultArgs{
skipabove = \baselineskip,
innertopmargin = \baselineskip,
innerbottommargin = \baselineskip,
userdefinedwidth = 0.5\textwidth
}

\begin{document}
Here is a full line:
\par\noindent\hrulefill

\begin{wsolution}
Autodetected outer level.
\end{wsolution}

\begin{questions}
\question A question.
\begin{wsolution}
Autodetected question level.
\end{wsolution}

\begin{parts}
\part A part
\begin{wsolution}[][innertopmargin = 2\baselineskip,
innerbottommargin = 2\baselineskip,
backgroundcolor=gray!40]
Autodetected part level.
\end{wsolution}
\end{parts}
\end{questions}
\end{document}