From 29458b25776677bea7ac847f20cda7161a9d816b Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 May 2020 14:00:54 +0900 Subject: eqexam 20200528 --- texmf-dist/tex/latex/eqexam/aebrandom.def | 2 +- texmf-dist/tex/latex/eqexam/eqexam.def | 27 ++-- texmf-dist/tex/latex/eqexam/eqexam.sty | 229 +++++++++++++++++++++--------- 3 files changed, 180 insertions(+), 78 deletions(-) (limited to 'texmf-dist/tex/latex/eqexam') diff --git a/texmf-dist/tex/latex/eqexam/aebrandom.def b/texmf-dist/tex/latex/eqexam/aebrandom.def index 2906805a..f2952e46 100644 --- a/texmf-dist/tex/latex/eqexam/aebrandom.def +++ b/texmf-dist/tex/latex/eqexam/aebrandom.def @@ -18,7 +18,7 @@ %% License, or (at your option) any later version. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ProvidesFile{aebrandom.def} - [2020/01/01 v8.5.8 % + [2020/03/14 v8.5.10 % Exerquiz support for randomization (dps)] \@ifundefined{nextrandom}{\input{random.tex}}{} \def\nextrandom{\begingroup diff --git a/texmf-dist/tex/latex/eqexam/eqexam.def b/texmf-dist/tex/latex/eqexam/eqexam.def index 53d9fc0f..0d865559 100644 --- a/texmf-dist/tex/latex/eqexam/eqexam.def +++ b/texmf-dist/tex/latex/eqexam/eqexam.def @@ -7,7 +7,7 @@ %% exerquiz.dtx (with options: `eqexam') %% \ProvidesFile{eqexam.def} - [2020/01/01 v8.5.8 % + [2020/03/14 v8.5.10 % Exerquiz support file for eqexam (dps)] \let\eq@YES=y \let\eq@NO=n \let\eq@One=1 \let\eq@Zero=0 @@ -257,6 +257,7 @@ {\if\exerstar*\def\eq@next{\@exercise}\else \def\eq@next{\exercise@@}\fi\eq@next}% }{\eq@postexerciseHook\endexerhook\par + \global\let\insE@rlyAtQues\@empty \global\eq@exerciseheadingtrue\removelastskip\eq@exerskip} \def\exercise@[#1]{\edef\eq@arg{#1}% \if\eq@arg h\def\currhideopt{h}% @@ -304,7 +305,8 @@ \newcommand\exerSolnHeader[3]{% \prior@exerSolnHeaderHook \ifeqforpaper\else\webnewpage\fi\markright{#1}%\par\noindent% - #3% + \priorexlabelheader + #3\global\let\priorexlabelheader\relax \solnhspace } \let\solnItemMngt\relax @@ -363,7 +365,8 @@ \fi \eq@initializeContAnnot \ifeq@exerciseheading - \prior@questionsHook\marginparpriorhook\noindent\eqexheader@wrapper + \prior@questionsHook + \insE@rlyAtQues\marginparpriorhook\noindent\eqexheader@wrapper \afterlabelhskip\marginparafterhook\gEx@CommonCmd \eq@setPrbSolnAftrIndnt\ignorespaces\fi} \newif\ifterminexchanged \terminexchangedfalse % dps cq @@ -374,6 +377,7 @@ \def\makeExSolnsLocalOn{\makeExSlLocaltrue} \def\makeExSolnsLocalOff{\makeExSlLocalfalse} \let\eqMrkSoln\@gobble +\let\priorexlabelheader\relax \def\eqExerSolnHeaderSngl{% \ifmakeExSlLocal\protect\begingroup^^J\fi \ifx\eqMrkCpyArg\@empty\else @@ -677,7 +681,7 @@ \endsolnexerhook\penalty0\relax} \let\eq@exerstarEnv\relax \newenvironment{exercise*}{\def\eq@exerstarEnv{*}\exercise} -{\endexercise} +{\global\let\insE@rlyAtQues\@empty\endexercise} \def\exerwparts@cols{0} \let\topofpartshook\relax \let\@listiiredefined\eq@NO @@ -730,6 +734,7 @@ \let\eqp@rtc@lcm@rk\relax \let\eq@insertContAnnot\relax \def\eq@item@common{\eq@insertContAnnot\eqp@rtc@lcm@rk + \global\let\probInMinip@ge\relax \def\currhideopt{x}\eq@hidesolutionfalse\eq@nolinkfalse \@ifnextchar[{\@ckhide}{\eq@item}} \newcommand{\partsitemsep}[1]{{% @@ -762,6 +767,7 @@ \eq@item@latex\eq@optArg\exlisttabheaderafterhook} \newif\ifwithinparts \let\ex@listtabheader@fterhook\@empty +\let\probInMinip@ge\relax \newenvironment{exercise@parts@list}{% \settowidth{\eq@tmplength}{\parts@indent}% \edef\widthOfParts{\the\eq@tmplength}% @@ -817,9 +823,11 @@ {\eq@item@latex\ex@listtabheader@fterhook \exlisttabheaderafterhook}}% \def\eqthisenv{parts}\withinpartstrue - \def\item{\ifx\@currenvir\eqthisenv + \def\item{\ifx\probInMinip@ge\relax + \ifx\@currenvir\eqthisenv \def\eq@next{\eq@item@common}\else \def\eq@next{\eq@item}\fi + \else\def\eq@next{\eq@item@common}\fi \eq@next}% }}{\endlist\global\let\leadinitem\leadinitem@external \post@parts@hook\belowpartshook} @@ -1055,9 +1063,8 @@ \newcommand{\exerSolnInput} {% \@ifundefined{eqe@IWO}{}{\ifsolutionsAtEnd - \eqe@IWO\@auxout{\string\expandafter\string\gdef - \string\csname\space eqExamQuesLastPage\string\endcsname - {\arabic{page}}}\fi}\let\webnewpage\relax + \eqe@IWO\@auxout{\string\csarg\string\gdef + {eqExamQuesLastPage}{\arabic{page}}}\fi}\let\webnewpage\relax \ifsolutionsonly\else \bgroup\OKToWriteExamDatatrue \writeT@ExSolns{\string\endinput}\egroup @@ -1086,6 +1093,7 @@ \exerSolnInput } \newcommand{\prior@questionsHook}{} +\let\insE@rlyAtQues\@empty \let\qMark@Hook\@empty \let\aebtitleQuiz\@empty \newcommand{\post@questionsHook}{} @@ -1125,7 +1133,8 @@ \toks@=\expandafter\expandafter\expandafter{#1}\expandafter \xdef\csname quesOpts\@quesctr\endcsname{\the\toks@}% \edef\tempexp{\noexpand\setkeys{props@ques}{\the\toks@}}\tempexp - \list{\qMark@Hook\prior@questionsHook\gdef\eqPTs{1}% + \list{\qMark@Hook\prior@questionsHook + \insE@rlyAtQues\gdef\eqPTs{1}% \global\let\eqQT\eq@na% {\@tempcnta=0 \let\@thispr@b\@empty \@whilenum\@tempcnta<\@eqquestiondepth\do{\advance\@tempcnta\@ne diff --git a/texmf-dist/tex/latex/eqexam/eqexam.sty b/texmf-dist/tex/latex/eqexam/eqexam.sty index 18ef5a68..92f13ee9 100644 --- a/texmf-dist/tex/latex/eqexam/eqexam.sty +++ b/texmf-dist/tex/latex/eqexam/eqexam.sty @@ -19,8 +19,8 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{eqexam} - [2020/01/06 v5.1.8 An Exam Construction Package (dps)] -\def\eqexamdefReq{2020/01/01} + [2020/03/14 v5.1.10 An Exam Construction Package (dps)] +\def\eqexamdefReq{2020/03/14} \RequirePackage{ifpdf}[2006/02/20] \RequirePackage{ifxetex}[2006/08/21] \usepackage{xkeyval} @@ -135,7 +135,7 @@ \def\eqe@auto@chk@drivers{\ifpdf\ExecuteOptionsX{pdftex}\else \ifxetex\ExecuteOptionsX{xetex}\fi\fi} \newif\ifeqeonline \eqeonlinefalse -\DeclareOptionX{online}{\eqe@auto@chk@drivers +\DeclareOptionX{online}{\eqe@auto@chk@drivers\displayworkareafalse \let\eq@online\eqe@YES\eqeonlinetrue\ExecuteOptionsX{links}} \DeclareOptionX{pdf}{\eqe@auto@chk@drivers\let\load@web\eqe@YES} \DeclareOptionX{links}{\eqe@auto@chk@drivers @@ -257,6 +257,7 @@ \newif\ifeq@proofing \eq@proofingfalse \newif\ifeq@nolink \eq@nolinkfalse \@ifundefined{ifpreview}{\newif\ifpreview \previewfalse}{} +\def\previewOn{\previewtrue}\def\previewOff{\previewfalse} \newif\ifeqforpaper \eqforpaperfalse \def\eqe@csarg#1#2{\expandafter#1\csname#2\endcsname} \@for\eqe@tmp@i:={},i,ii,iii,iv,v,vi\do{\eqe@csarg @@ -315,8 +316,10 @@ \ifx\eqeAEFormatting\@empty\else \eqe@IWO\quiz@solns{\string\eqeAEFormatting}\fi \fi + \protect\cqqsfalse } -\def\writeWithSolDocTrue{\writeT@SolnFile{\protect\withinsoldoctrue}} +\def\writeWithSolDocTrue{\writeT@SolnFile{% + \protect\withinsoldoctrue\protect\cqqsfalse}} \newcommand{\setSolnMargins}[1]{\setlength\eqemargin{#1}\ignorespaces} \def\altSetSolnMargins#1{\def\alt@SetSolnMargins{#1}} \let\alt@SetSolnMargins\@empty @@ -345,6 +348,7 @@ \fi\fi } \def\csarg#1#2{\expandafter#1\csname#2\endcsname} +\let\w@csarg\csarg \def\saveIFEQE#1{\def\ARG{#1ifSave}% \expandafter\csarg\expandafter \let\expandafter\ARG\csname#1\if#1true\else false\fi\endcsname} @@ -422,7 +426,7 @@ \RequirePackage{pifont} \RequirePackage{array} \RequirePackage{verbatim} -\@ifundefined{dlcomment}{\typeout{!! defining dlcomment}% +\@ifundefined{dlcomment}{%\typeout{!! defining dlcomment}% \let\dlcomment\comment \let\enddlcomment\endcomment \let\eqSavedComment\dlcomment @@ -504,6 +508,7 @@ \let\marginpoints\eqrightmarginbox} \def\PointsOnBothSides{\def\@reportpoints{3}\relax \let\marginpoints\eqbothmargins} +\let\PointsOnBoth\PointsOnBothSides \newif\ifeqe@nopoints \eqe@nopointsfalse \def\NoPoints{\if\isInExamEnv\eqe@NO \eqe@nopointstrue\def\@reporttotals{0}\let\totalsbox=\hfil @@ -1091,8 +1096,12 @@ \Ans@proofing{\RadioFieldSize}% \eq@hspanner\ignorespaces } -\def\optsMlTextField#1{\def\eqe@optsmltf{#1}} +\def\optsMlTxtFld#1{\def\eqe@optsmltf{#1}} \let\eqe@optsmltf\@empty +\def\eqeLW{\linewidth} +\def\wdthMlTxtFld#1{\setlength\eqetmplengtha{#1}% + \edef\eqeLW{\the\eqetmplengtha}} +\def\resetFldWdth{\gdef\eqeLW{\linewidth}}% \def\eqExamPriorVspace#1{% \edef\fieldName{% \if\probstar*eqexam.\curr@quiz.% @@ -1102,7 +1111,7 @@ \fi }% \nobreak\noindent\textField[\BC{}\presets{\eqe@optsmltf} - \Ff\FfMultiline]{\fieldName}{\linewidth}{#1}\@gobble + \Ff\FfMultiline]{\fieldName}{\eqeLW}{#1}\resetFldWdth\@gobble } \@ifpackageloaded{exerquiz}{% \let\Ans@sq@l\eqExam@Ans@sq@l @@ -1249,8 +1258,7 @@ {\let\@getsecondOf\@secondoffive}% \@ifundefined{r@#1}{% \csarg\gdef{nRefii@#1}{0}}{% - \expandafter\xdef\csname nRefii@#1\endcsname - {\expandafter\expandafter\expandafter + \csarg\xdef{nRefii@#1}{\expandafter\expandafter\expandafter \@getsecondOf\csname r@#1\endcsname}% }% } @@ -1579,22 +1587,26 @@ new Array("pointsgiven.\curr@quiz.page\thepage"));}}] {\fieldName}{\widthtpboxes}{15pt}% } -\ifx\use@email y +\ifx\use@email\eqe@YES \let\insertPointsBoxPDF\@insertPointsBoxPDF \let\insertTotalsBoxPDF\@insertTotalsBoxPDF \else \let\insertPointsBoxPDF\@empty \let\insertTotalsBoxPDF\@empty \fi -\newcommand{\eqrightmarginbox}[2]{\makebox[0pt][l]{% - \setlength\tabcolsep{0pt}% - \setlength{\@tempdima}{\textwidth-\eqemargin+\marginparsep}% - \hspace*{\@tempdima}% - \raisebox{-.5\height}[0pt][0pt]{% - \marginboxdesign[\insertPointsBoxPDF]% - {\marginpointsboxtext{#1}{#2}}% - }\hfil - }% +\newcommand{\eqrightmarginbox}[2]{% + \makebox[0pt][l]{% + \ifx\probInMinip@ge\relax + \let\eq@TW\textwidth\else + \let\eq@TW\eqTWSave\fi + \setlength\tabcolsep{0pt}% + \setlength{\@tempdima}{\eq@TW-\eqemargin+\marginparsep}% + \hspace*{\@tempdima}% + \raisebox{-.5\height}[0pt][0pt] + {\marginboxdesign[\insertPointsBoxPDF]% + {\marginpointsboxtext{#1}{#2}}% + }\hfil + }\let\probInMinip@ge\relax } \newcommand{\eqeomarginboxright}[2]{\makebox[0pt][l]{% \setlength\tabcolsep{0pt}% @@ -1904,6 +1916,8 @@ \newenvironment{@ssSolution}[1][\ss@Argii]% {% \def\eqe@argi{#1}\ifx\eqe@argi\@empty\else + \setlength{\@tempdima}{\ss@Argii}% chng + \edef\ss@Argii{\the\@tempdima}% \let\soln@keys@nLines\@empty \edef\panelheight{\the\panelheight}% \edef\panelwidth{\the\panelwidth}% @@ -1977,12 +1991,12 @@ \string\setlength{\string\panelwidth}{\ss@Argiii}% \string\def\string\eqedepth {\ifeq@nosolutions\ss@Argii\else\ss@Argii\fi}C}}}% - {\lccode`C=`\%\lowercase{\eqe@IW{% - \string\strut\string\noindent% - \string\hbox\space to\string\linewidth\bgroup^^J% - \eqe@lPanel\string\minipage[b][\string\eqedepth][t]% - {\string\linewidth\eqe@subleftgutter% - -\string\panelwidth-\string\panelgap}C + {\lccode`C=`\%\lowercase{\eqe@IW{\string\vskip2pt + \string\noindent\string\hskip\string\eqemargin + \string\hbox\space to\string\linewidth\bgroup^^J% + \eqe@lPanel\string\minipage[b][\string\eqedepth][t]% + {\string\linewidth\eqe@subleftgutter% + -\string\panelwidth-\string\panelgap}C }}}% \ifeq@solutionsafter \noindent\strut\hbox to\linewidth\bgroup @@ -2113,31 +2127,60 @@ } \def\tb@insmargmark{\ifisinstred\ifismarginans \insMidMarg{\mark{}}\fi\fi} -\def\eqe@adjForSepRule{\if\eq@parttotals\eqe@YES +\def\eqe@adjForSepRule{\ifx\eq@parttotals\eqe@YES \eq@pointboxtotalheight\halfHtPtBox\relax \advance\eq@pointboxtotalheight\dpPtBox\relax \advance\eq@pointboxtotalheight\pointsmarginparpush \vspace*{\eq@pointboxtotalheight}\fi} \def\eqe@afterexamsepcode{% - \if\eq@parttotals\eqe@YES - \@actionsAtPageBreak{\global\let\@spacetobreak1}% - {\global\let\@spacetobreak0}% - \ifx\@spacetobreak0\relax - \bgroup\@tempdima=\pagetotal - \advance\@tempdima\eq@pointboxtotalheight - \ifdim\@tempdima>\pagegoal\aftergroup\newpage - \else\ifnum\arabic{eq@count}>0\relax - \removelastskip\vskip6pt\kern0pt - \if\@reportpoints\eqe@One\else\@checkSpacing{0}\fi - \textcolor{\endexamtotal@color}% - {\eqeomarginbox{\arabic{eq@count}}{0}}\fi - \ifx\eqx@separationrule\eqe@YES - \separationrule\eqe@adjForSepRule\fi - \fi\egroup + \ifx\eq@parttotals\eqe@YES + \@actionsAtPageBreak{\global\let\@spacetobreak\eqe@One}% + {\global\let\@spacetobreak\eqe@Zero}% + \ifx\@spacetobreak\eqe@One + \bgroup\@tempdima=\pagetotal + \advance\@tempdima\eq@pointboxtotalheight + \ifdim\@tempdima>\pagegoal\aftergroup\newpage + \else + \ifnum\arabic{eq@count}>\z@ + \removelastskip\vskip6pt\kern0pt + \ifx\@reportpoints\eqe@One\else\@checkSpacing{0}\fi + \def\@emitPartTotalsBox{\textcolor{\endexamtotal@color}% + {\eqeomarginbox{\arabic{eq@count}}{0}}}% + \insertContent\@emitPartTotalsBox + \fi + \ifx\eqx@separationrule\eqe@YES + \def\@emitSepRule{\separationrule\eqe@adjForSepRule}% + \insertContent\@emitSepRule \fi - \else\ifx\eqx@separationrule\eqe@YES - \separationrule\eqe@adjForSepRule\fi + \fi\egroup + \else + \ifnum\arabic{eq@count}>\z@ + \ifx\@reportpoints\eqe@One\else\@checkSpacing{0}\fi + \def\@emitPartTotalsBox{\textcolor{\endexamtotal@color}% + {\eqeomarginbox{\arabic{eq@count}}{0}}}% + \insertContent\@emitPartTotalsBox + \fi + \ifx\eqx@separationrule\eqe@YES + \def\@emitSepRule{\separationrule\eqe@adjForSepRule}% + \insertContent\@emitSepRule + \else + \eqe@adjForSepRule + \fi \fi + \else + \ifx\eqx@separationrule\eqe@YES + \def\@emitSepRule{\separationrule\bigskip}% + \insertContent\@emitSepRule\fi + \fi +} +\def\insertContent#1{% + \@ifundefined{NextAfter\currExamName} + {#1} + {\edef\x{% + \numFirstPageOfExam{\@nameuse{NextAfter\currExamName}}}% + \edef\y{\numLastPageOfExam{\currExamName}}% + \ifnum\x=\y\relax#1\fi + }% } \def\examenddef {% @@ -2211,36 +2254,52 @@ \def\RecordThisExamOff{\DoNotRecordThisExamtrue} % dpsf02 \def\bIFFalseWrtSolns{\writeT@SolnFile{\protect\iffalse^^J}} \def\eIFFalseWrtSolns{\writeT@SolnFile{\protect\fi^^J}} +\let\currExamName\@empty +\let\prevExamName\@empty +\let\nextExamName\@empty \newenvironment{exam}[2][] {% - \ifDoNotRecordThisExam % dpsf02 + \xdef\eqTWSave{\the\textwidth}% + \ifDoNotRecordThisExam \expandafter\bIFFalseWrtSolns\fi - \makeRoomForProb{\@fvsizeskip\textheight}{0}% - \let\isInExamEnv\eqe@YES - \stepcounter{eq@numparts}% - \def\eqexamargii{#2}\ifx\eqexamargii\@empty - \edef\eqexamargii{\autoExamName}\fi - \xdef\thisexamlabel{\eqexamargii}\xdef\curr@quiz{\eqexamargii}% - \def\eqexamargi{#1}\ifx\eqexamargi\@empty - \edef\eqexamargi{\eqexamargii}\fi - \expandafter\gdef\expandafter\thisUFexamlabel - \expandafter{\eqexamargi}% - \edef\eq@tmp{\the\partNames\string\\{\eqexamargii}}% - \global\partNames=\expandafter{\eq@tmp}% - \csarg\ifx{NumberOfParts}\relax\else -\ifx\eqeWrtExamTitleToSolns\eqe@YES - \ifnum\nNumberOfP@rts=1\relax\else - \def\eqe@argi{#1}\ifx\eqe@argi\@empty - \eqe@writetoSolns{\eqexamargii}\eqe@writetoAux{\string - \csarg\string\gdef{userFriendly\eqexamargii}{\eqexamargii}} + \makeRoomForProb{\@fvsizeskip\textheight}{0}% + \ifx\currExamName\@empty % chng + \xdef\currExamName{#2}\else + \xdef\prevExamName{\currExamName}% + \eqe@IWO\@auxout{\string\csarg\string + \gdef{NextAfter\prevExamName}{#2}}% + \xdef\currExamName{#2}% + \eqe@IWO\@auxout{\string\csarg\string + \gdef{PrevTo\currExamName}{\prevExamName}}% + \fi + \let\isInExamEnv\eqe@YES + \stepcounter{eq@numparts}% + \def\eqexamargii{#2}\ifx\eqexamargii\@empty + \edef\eqexamargii{\autoExamName}\fi + \xdef\thisexamlabel{\eqexamargii}\xdef\curr@quiz{\eqexamargii}% + \def\eqexamargi{#1}\ifx\eqexamargi\@empty + \edef\eqexamargi{\eqexamargii}\fi + \expandafter\gdef\expandafter\thisUFexamlabel + \expandafter{\eqexamargi}% + \edef\eq@tmp{\the\partNames\string\\{\eqexamargii}}% + \global\partNames=\expandafter{\eq@tmp}% + \csarg\ifx{NumberOfParts}\relax\else + \ifx\eqeWrtExamTitleToSolns\eqe@YES + \ifnum\nNumberOfP@rts=1\relax + \else + \def\eqe@argi{#1}% + \ifx\eqe@argi\@empty + \eqe@writetoSolns{\eqexamargii}\eqe@writetoAux{\string + \csarg\string\gdef{userFriendly\eqexamargii}{\eqexamargii}} \else - \eqe@writetoSolns{#1}\eqe@writetoAux{\string - \csarg\string\gdef{userFriendly#2}{#1}} + \eqe@writetoSolns{#1}\eqe@writetoAux{\string + \csarg\string\gdef{userFriendly#2}{#1}}% \fi - \fi\fi -\fi - \exambegdef - \edef\temp@Exp{\noexpand\shortquiz\sqstar[\eqexamargii]}\temp@Exp + \fi + \fi + \fi + \exambegdef + \edef\temp@Exp{\noexpand\shortquiz\sqstar[\eqexamargii]}\temp@Exp }{% \examenddef \vskip\eqeques@parsep\relax\kern0pt %dps88 @@ -3447,6 +3506,40 @@ \ifeqfortextbook\else \if@bypasseqexamheading\else \pagestyle{eqExamheadings}\fi\fi +\def\probInMinipage{% + \ifanswerkey + \ifkeepdeclaredvspacing + \global\let\w@sKeyOn\eqe@YES + \vspacewithkeyOff + \else + \global\let\w@sKeyOn\eqe@NO + \fi + \fi + \let\probInMinip@ge\eqTWSave\noindent} +\let\probInMinip@ge\relax +\newenvironment{vadjForSolnInBx}[1]{% + \setlength\@tempdima{#1}% + \setbox\z@\vbox\bgroup\hsize\@tempdima +}{% + \egroup + \ifanswerkey + \ifx\w@sKeyOn\eqe@YES + \global\vspacewithkeyOn\fi + \setlength{\@tempdima}{\ht\z@+\dp\z@}% + \setlength{\@tempdima}{\sameVspace-\@tempdima}% + \par\vspace{\@tempdima}\fi + \setbox\z@\box\voidb@x +} +\def\bProbInsert#1{\def\@rgi{#1}\ifx\@rgi\@empty + \global\let\insE@rlyAtQues\@empty\else + \gdef\insE@rlyAtQues{\begingroup#1}\fi} +\def\bItemInsert#1{\begingroup#1\noindent\ignorespaces} +\def\eProbInsert{\par\endgroup\@restorepar\par} +\newcommand{\probInsertSoln}[2][]{\writeToSolnFile{#1% + \protect\def\protect + \priorexlabelheader{\protect#2\protect\noindent +}}} +\def\RESTOREPAR{\let\par\@@par} \ifeqfortextbook \AtBeginDocument{\tb@soln@choice \ifeqwritetomargins\chkmarginboxwidth -- cgit v1.2.3