summaryrefslogtreecommitdiff
path: root/texmf-dist/tex/latex/eqexam/eqexam.sty
diff options
context:
space:
mode:
Diffstat (limited to 'texmf-dist/tex/latex/eqexam/eqexam.sty')
-rw-r--r--texmf-dist/tex/latex/eqexam/eqexam.sty229
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