diff options
Diffstat (limited to 'texmf-dist/tex/latex/eqexam/eqexam.sty')
-rw-r--r-- | texmf-dist/tex/latex/eqexam/eqexam.sty | 229 |
1 files changed, 161 insertions, 68 deletions
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 |