0

I have created a way to save answers to the exercises and generate them automatically later. Still, savebox doesn't seem to work inside an environment, while working fine inside a command. I'm working on environment odpowiedz and command modpowiedz in this example. The first one doesn't want to save the box, but the second one works just fine.

\documentclass{article}
\usepackage[fontsize=14pt]{fontsize}
\usepackage{amsfonts,amssymb,amsmath,mathtools,bm,amsthm}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english,polish]{babel} 
\usepackage{polski}
\usepackage[unicode]{hyperref}
\usepackage{graphicx,float}
\usepackage{xargs}
\usepackage{pgffor}
\usepackage{ifthen}
\usepackage{environ}
\usepackage{ragged2e}
\usepackage{etoolbox}
\usepackage{pgfkeys}
\usepackage{xparse}

\newcommand\namedbox[2]{% \ifcsname#1\endcsname\else% \expandafter\newsavebox\csname#1\endcsname% \fi% \expandafter\sbox\csname#1\endcsname{#2}} \newcommand\usenamedbox[1]{\expandafter\usebox\csname#1\endcsname}

\newcounter{R}[section] \numberwithin{R}{section} \newcounter{P}[section] \numberwithin{P}{section} \newcounter{S}[section] \numberwithin{S}{section} \newcounter{M}[section] \numberwithin{M}{section} \newcounter{D}[section] \numberwithin{D}{section} \newcounter{odp} \newcounter{sposob}

\setlength\parindent{0pt}

\newcommand{\link}[1]{\textbf{\hyperref[#1]{#1}}}

\newcounter{mylabelcounter} \makeatletter \newcommand{\labelodp}[1]{% \refstepcounter{mylabelcounter}% \immediate\write@auxout{\string\newlabel{#1}{{1}{\thepage}{{\unexpanded{#1}}}{mylabelcounter.\number\value{mylabelcounter}}{}}}} \makeatother

\newenvironmentx{zadanie}[3][2,3]{ \refstepcounter{#1}% \gdef\kod{#1.\csname the#1\endcsname}\par% \minipage[t]{\textwidth}% \label{\kod}\ignorespaces\textbf{\hyperref[O.\kod]{\kod}}\if\relax\detokenize{#2}\relax\else(#2)\fi\if\relax\detokenize{#3}\relax\else(#3p.)\newline\fi} {\endminipage\vspace{1ex}\par}

\NewEnviron{odpowiedz}[1][nod]{ \ifthenelse{\equal{#1}{d}}{% \link{\kod}~\minipage[t]{0.9\textwidth}% \raggedright\setcounter{odp}{0}\setcounter{sposob}{0}% \BODY% \vspace{1ex}\endminipage\}{}% \namedbox{\kod}{% \minipage[t]{0.9\textwidth}% \raggedright\setcounter{odp}{0}\setcounter{sposob}{0}% \BODY% \vspace{1ex}\endminipage}}

\newcommand{\modpowiedz}[1]{\namedbox{\kod}{#1\hspace{1.8em}}}

\newcommand{\wstawodpowiedz}[1]{\leavevmode\labelodp{O.#1}\link{#1}~\usenamedbox{#1}\penalty0} \newcommand{\odpowiedzi}[1]{\foreach \n in {1,...,\arabic{#1}}{\wstawodpowiedz{#1.\thesection.\n}}}

\begin{document} \section{Exercises}

\begin{zadanie}{D} Solve equation $x+1=2$. \end{zadanie} \begin{odpowiedz} $x=1$ \end{odpowiedz}

\begin{zadanie}{D} Solve equation $x+1=3$. \end{zadanie} \modpowiedz{$x=2$}

\subsection{Answers} \odpowiedzi{D} \end{document}

In this example answer D.1.1 is created by odpowiedz and answer D.1.2 by modpowiedz. enter image description here

0 Answers0