% Requires Acrobat \documentclass{article} \usepackage{amstext} \usepackage[designi]{web} \usepackage{exerquiz}[2019/10/11] \efsave\eq@@EndQuizButtonActions\as\eq@@EndQuizButtonActionsDefSave \usepackage[ordinary]{thorshammer} \thQzHeaderL{PWD Quiz} \thQzHeaderCQ{Quiz 1} \efsave\eq@@EndQuizButtonActions\as\eq@@EndQuizButtonActionsThorSave %\previewOn\pmpvOn \renewcommand\eqQuizPointsMsg{% "\eqptScore\space"+ptScore+" \eqOutOf\space"+nPointTotal} \let\app\textsf \let\pkg\textsf \let\env\texttt \let\opt\texttt \let\uif\textsf \execJSOn \useBeginQuizButton[\CA{Begin}] \useEndQuizButton[\CA{End}] % If the students have Acrobat, they can see the pin number % if they know how. \efsave\CorrBtnActionsJS\as\CorrBtnActionsJSSave \begin{defineJS*}[\makeesc\@]{\CorrBtnActionsPwdJS} var resp=app.response({ cQuestion: "Enter the PIN number", cTitle: "View Answers", bPassword: true }); var _resp=Collab.hashString(resp); if (_resp==_PinCode) { correctQuiz("@eqBaseName",@thequestionno); if (typeof correctSumryTbl == "function") correctSumryTbl("@eqBaseName",@thequestionno); } \end{defineJS*} \DeclareQuiz{qz} \def\PIN{5243} % PIN number, change as desired \begin{insDLJS}{pin}{Pin Code} var _PinCode = "02JRVZdRgYgCA-Rtje8VkD"; \end{insDLJS} \parindent0pt \parskip6pt \begin{document} \noindent\textbf{Goal:} Make the \uif{Correct} button password protected.\medskip \noindent\textbf{Discussion:} This demo file uses a \emph{hash string} to encode the password for the instructor to correct the quiz, it avoids the use of \app{Adobe Acrobat} by getting the hash string from the PDF \texttt{get-hash-string}. Copy the hash string generated from \texttt{get-hash-string} as the value of the JavaScript variable \texttt{\_PinCode} in the \textsf{insDLJS} environment seen in this source file for this document. Then, compile this document and distribute. %Delay the correction of this next quiz by expanding the new command %\verb|\pwdCorrBtnJS|. \newpage \section{Quiz with PIN to correct} % require students to answer all questions \renewcommand\minQuizResp{highThreshold} % 1 For the quiz below, the \uif{Correct} button has an encrypted password. The password appears in parentheses for the convenience of the casual reader. % use password version of \CorrButton action \efrestore\CorrBtnActionsJS\from\CorrBtnActionsPwdJS \begin{quiz*}{\currQuiz} Solve each \begin{questions} \item The sum of 1 and 1 is\dots \begin{answers}{5} \bChoices \Ans0 0\eAns \Ans0 1\eAns \Ans1 2\eAns \Ans0 3\eAns \Ans0 4\eAns \eChoices \end{answers} \item $9+8=\RespBoxMath{17}{1}{.0001}{[0,1]}\cgBdry\CorrAnsButton{17}$ \end{questions} \end{quiz*}\quad\PointsField{\currQuiz}\olBdry\CorrButton{\currQuiz} (PIN: \PIN)\vcgBdry \AnswerField{\currQuiz} \newpage \section{Quiz without PIN to correct} Now we try to create an ordinary \pkg{exerquiz} quiz without password protection. % restore \eq@@EndQuizButtonActions from its default defn \efrestore\eq@@EndQuizButtonActions\from\eq@@EndQuizButtonActionsDefSave % restore \CorrBtnActionsJS from \CorrBtnActionsJSSave \efrestore\CorrBtnActionsJS\from\CorrBtnActionsJSSave \renewcommand\minQuizResp{lowThreshold} \begin{quiz*}{qz2} Solve each \begin{questions} \item The sum of 1 and 1 is\dots \begin{answers}{5} \bChoices \Ans0 0\eAns \Ans0 1\eAns \Ans1 2\eAns \Ans0 3\eAns \Ans0 4\eAns \eChoices \end{answers} \item $9+8=\RespBoxMath{17}{1}{.0001}{[0,1]}\cgBdry\CorrAnsButton{17}$ \end{questions} \end{quiz*}\quad\PointsField{\currQuiz}\olBdry\CorrButton{\currQuiz}\vcgBdry \AnswerField{\currQuiz} \newpage \section{Another quiz with PIN to correct} It is possible to have a different PIN number for this quiz (multiple PINs in one document), but I see no need for this. \DeclareQuiz{qz3} % restore \eq@@EndQuizButtonActions from \eq@@EndQuizButtonActionsThorSave \efrestore\eq@@EndQuizButtonActions\from\eq@@EndQuizButtonActionsThorSave % restore password protection for Correct button \efrestore\CorrBtnActionsJS\from\CorrBtnActionsPwdJS % require students to answer all questions \renewcommand\minQuizResp{highThreshold} \begin{quiz*}{qz3} Solve each \begin{questions} \item The sum of 1 and 1 is\dots \begin{answers}{5} \bChoices \Ans0 0\eAns \Ans0 1\eAns \Ans1 2\eAns \Ans0 3\eAns \Ans0 4\eAns \eChoices \end{answers} \item $9+8=\RespBoxMath{17}{1}{.0001}{[0,1]}\cgBdry\CorrAnsButton{17}$ \end{questions} \end{quiz*}\quad\PointsField{\currQuiz}\olBdry\CorrButton{\currQuiz} (PIN: \PIN)\vcgBdry \AnswerField{\currQuiz} \end{document}