From 0e06b454144b2b566f5889836e1605d9cade581a Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 24 Oct 2012 23:27:10 +0000 Subject: exsheets (24oct12) git-svn-id: svn://tug.org/texlive/trunk@28067 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/exsheets/cntformats.sty | 4 +- Master/texmf-dist/tex/latex/exsheets/exsheets.sty | 145 +++++++++++++++++++-- .../texmf-dist/tex/latex/exsheets/translations.sty | 4 +- 3 files changed, 135 insertions(+), 18 deletions(-) (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/exsheets/cntformats.sty b/Master/texmf-dist/tex/latex/exsheets/cntformats.sty index 41e4cef75d3..df81ccb7c1b 100644 --- a/Master/texmf-dist/tex/latex/exsheets/cntformats.sty +++ b/Master/texmf-dist/tex/latex/exsheets/cntformats.sty @@ -29,8 +29,8 @@ % If you have any ideas, questions, suggestions or bugs to report, please % feel free to contact me. % -------------------------------------------------------------------------- -\def\cntfmts@date{2012/10/08} -\def\cntfmts@version{v0.2b} +\def\cntfmts@date{2012/10/23} +\def\cntfmts@version{v0.3} \ProvidesPackage{cntformats}[\cntfmts@date\space \cntfmts@version\space A different way to read counters.] \RequirePackage{etoolbox,xparse} diff --git a/Master/texmf-dist/tex/latex/exsheets/exsheets.sty b/Master/texmf-dist/tex/latex/exsheets/exsheets.sty index db748f1baf5..54c803127f2 100644 --- a/Master/texmf-dist/tex/latex/exsheets/exsheets.sty +++ b/Master/texmf-dist/tex/latex/exsheets/exsheets.sty @@ -31,8 +31,8 @@ % If you have any ideas, questions, suggestions or bugs to report, please % feel free to contact me. % ---------------------------------------------------------------------------- -\def\exsheets@date{2012/10/08} -\def\exsheets@version{0.2b} +\def\exsheets@date{2012/10/23} +\def\exsheets@version{0.3} \RequirePackage { expl3 , xparse } \ProvidesExplPackage @@ -800,6 +800,13 @@ \int_new:N \g__exsheets_questions_id_int \int_gzero:N \g__exsheets_questions_id_int +\cs_new:Npn \IfInsideQuestionTF + { \bool_if:NTF \l__exsheets_inside_question_bool } +\cs_new:Npn \IfInsideQuestionT + { \bool_if:NT \l__exsheets_inside_question_bool } +\cs_new:Npn \IfInsideQuestionF + { \bool_if:NF \l__exsheets_inside_question_bool } + \NewEnviron { __exsheets_questions_internal: } { \cspreto { BODY } { \ifhmode \vspace*{0pt} \fi } @@ -822,6 +829,8 @@ } \prop_new:N \g__exsheets_questions_id_prop +\prop_new:N \g__exsheets_questions_used_prop +\int_new:N \g__exsheets_questions_used_int \tl_new:N \l__exsheets_questions_id_tl \tl_new:N \g__exsheets_questions_current_id_tl @@ -845,7 +854,7 @@ \cs_new:Npn \__exsheets_read_points:n #1 { \__exsheets_read_points:w #1++ \q_stop } -\NewDocumentEnvironment { question } { og } +\NewDocumentEnvironment { __exsheets_question: } { gg } { \bool_set_true:N \l__exsheets_inside_question_bool \bool_if:NT \l__exsheets_questions_use_bool @@ -871,6 +880,13 @@ \prop_gput:NVV \g__exsheets_questions_id_prop \g__exsheets_questions_id_int \g__exsheets_questions_id_int + \bool_if:NT \l__exsheets_questions_use_bool + { + \prop_gput:NVV \g__exsheets_questions_used_prop + \g__exsheets_questions_id_int + \g__exsheets_questions_id_int + \int_gincr:N \g__exsheets_questions_used_int + } \tl_gset:Nx \g__exsheets_questions_current_id_tl { \int_use:N \g__exsheets_questions_id_int } } @@ -878,6 +894,13 @@ \prop_gput:NVV \g__exsheets_questions_id_prop \l__exsheets_questions_id_tl \g__exsheets_questions_id_int + \bool_if:NT \l__exsheets_questions_use_bool + { + \prop_gput:NVV \g__exsheets_questions_used_prop + \l__exsheets_questions_id_tl + \g__exsheets_questions_id_int + \int_gincr:N \g__exsheets_questions_used_int + } \tl_gset:Nx \g__exsheets_questions_current_id_tl { \tl_use:N \l__exsheets_questions_id_tl } } @@ -1142,6 +1165,23 @@ { \prop_get:cn { g__exsheets_question_property_#1_prop } { #2 } } } +\int_new:N \g__exsheets_tmpa_int +\cs_new:Npn \ForEachQuestion #1 + { + \int_gzero:N \g__exsheets_tmpa_int + \prop_map_inline:Nn \g__exsheets_questions_used_prop + { \int_gincr:N \g__exsheets_tmpa_int #1 } + } + +\cs_new:Npn \iflastquestion + { + \int_compare:nTF + { \g__exsheets_questions_used_int = \g__exsheets_tmpa_int } + } + +\cs_new:Npn \numberofquestions + { \int_use:N \g__exsheets_questions_used_int } + % ---------------------------------------------------------------------------- % debug-Info: \bool_new:N \l__exsheets_questions_debug_bool @@ -1396,7 +1436,7 @@ \cs_generate_variant:Nn \prop_gput:Nnn { Nff,Nfx,Nfn,Nxx } \cs_generate_variant:Nn \__exsheets_save_solution:n { V } -\NewEnviron { __exsheets_solution_int: } +\NewEnviron { __exsheets_solution_internal: } { \bool_if:nT { \g__exsheets_questions_use_bool && \l__exsheets_solutions_use_bool } { @@ -1408,7 +1448,7 @@ \bool_new:N \l__exsheets_inside_solution_bool \bool_set_false:N \l__exsheets_inside_solution_bool -\NewDocumentEnvironment { solution } { o } +\NewDocumentEnvironment { __exsheets_solution: } { g } { \__exsheets_solutions_use_classes: \__exsheets_solutions_use_topics: @@ -1419,9 +1459,9 @@ \bool_set_true:N \l__exsheets_inside_solution_bool \IfNoValueF { #1 } { \keys_set:nn { exsheets / solution } { #1 } } } - \__exsheets_solution_int: + \__exsheets_solution_internal: } - { \end__exsheets_solution_int: } + { \end__exsheets_solution_internal: } \bool_new:N \l__exsheets_solutions_runin_bool \bool_set_false:N \l__exsheets_solutions_runin_bool @@ -1479,8 +1519,8 @@ \cs_if_exist:cTF { r@#1 } { \__exsheets_ref_aux:n { #1 } } { + 1\relax \protect\G@refundefinedtrue - 1 \@latex@warning{exlabel `#1' on page \thepage \space undefined}% } } @@ -1797,6 +1837,38 @@ skip-below .dim_set:N = \l__exsheets_solutions_skip_below_dim } +% ---------------------------------------------------------------------------- +% create question/solution pairs +\cs_new:Npn \__exsheets_new_qu_sol_pair:nnnn #1#2#3#4 + { + \NewDocumentEnvironment { #1 } { O{}G{} } + { \__exsheets_question: {#2,##1} {##2} } + { \end__exsheets_question: } + \NewDocumentEnvironment { #3 } { O{} } + { \__exsheets_solution: {#4,##1} } + { \end__exsheets_solution: } + } + +\cs_new:Npn \__exsheets_renew_qu_sol_pair:nnnn #1#2#3#4 + { + \RenewDocumentEnvironment { #1 } { O{}G{} } + { \__exsheets_question: {#2,##1} {##2} } + { \end__exsheets_question: } + \RenewDocumentEnvironment { #3 } { O{} } + { \__exsheets_solution: {#4,##1} } + { \end__exsheets_solution: } + } + +\NewDocumentCommand \NewQuSolPair { mO{}mO{} } + { \__exsheets_new_qu_sol_pair:nnnn { #1 } { #2 } { #3 } { #4 } } +\@onlypreamble\NewQuSolPair + +\NewDocumentCommand \RenewQuSolPair { mO{}mO{} } + { \__exsheets_renew_qu_sol_pair:nnnn { #1 } { #2 } { #3 } { #4 } } +\@onlypreamble\RenewQuSolPair + +\NewQuSolPair { question } { solution } + % ---------------------------------------------------------------------------- % the `tasks' list \input { exsheets_tasks.def } @@ -1810,10 +1882,13 @@ % the \blank{} command \RequirePackage { ulem } \normalem \dim_new:N \l__exsheets_blank_dim +\tl_new:N \l__exsheets_blank_linespread_tl +\tl_set:Nn \l__exsheets_blank_linespread_tl { 1 } \box_new:N \l__exsheets_blank_box \bool_new:N \l__exsheets_blank_width_bool +\bool_new:N \l__exsheets_blank_linespread_bool -\cs_new_nopar:Npn \exsheets_write_blank:n #1 { #1 } +\cs_new:Npn \exsheets_write_blank:n #1 { #1 } \cs_set_eq:NN \exsheets_write_blank:n \uline \keys_define:nn { exsheets / blank } @@ -1833,14 +1908,28 @@ { \bool_set_true:N \l__exsheets_blank_width_bool \dim_set:Nn \l__exsheets_blank_dim { #1 } - } + } , + linespread .code:n = + \bool_set_true:N \l__exsheets_blank_linespread_bool + \tl_set:Nn \l__exsheets_blank_linespread_tl { #1 } } -\NewDocumentCommand \blank { o m } +\NewDocumentCommand \blank { som } { \group_begin: - \IfNoValueF { #1 } { \keys_set:nn { exsheets / blank } { #1 } } - \exsheets_blank:n { #2 } + \IfNoValueF { #2 } { \keys_set:nn { exsheets / blank } { #2 } } + \mode_if_horizontal:TF + { \exsheets_blank:n { #3 } } + { + \IfBooleanF { #1 } { \noindent } + \exsheets_blank:n { #3 } + \IfBooleanF { #1 } + { + \bool_if:NT \l__exsheets_blank_linespread_bool + { \linespread { \l__exsheets_blank_linespread_tl } \selectfont } + \par + } + } \group_end: } @@ -1906,6 +1995,30 @@ % } % \makeatother +% ---------------------------------------------------------------------------- +% \examspace +% insert space for a student to answer a question +\cs_new:Npn \__exsheets_examspace:nn #1#2 + { + \par \tex_penalty:D -100 \scan_stop: + \group_begin: + \dim_set:Nn \l_tmpa_dim { #2 } + \dim_set:Nn \l_tmpb_dim { \pagegoal - \pagetotal } + \dim_compare:nTF { \l_tmpa_dim > \l_tmpb_dim } + { + \vfil \break + \IfBooleanF { #1 } + { + \dim_sub:Nn \l_tmpa_dim { \l_tmpb_dim } + \vspace* { \l_tmpa_dim } + } + } + { \vspace* { #2 } } + \group_end: + } +\NewDocumentCommand \examspace { sm } + { \__exsheets_examspace:nn { #1 } { #2 } } + % ---------------------------------------------------------------------------- % SETUP \NewDocumentCommand \SetupExSheets { o m } @@ -2040,6 +2153,10 @@ HISTORY: update - upload to CTAN +2012/10/23 v0.3 - bugfix in \exref + - new: \NewQuSolPair, \RenewQuSolPair, \examspace + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % TODO: -- points/decimal-marker, points/frac (?), points/format (?,im interface) \ No newline at end of file +- points/decimal-marker, points/frac (?), points/format (?,im interface) +- grading table? Should not be necessary...? Access via meta-data diff --git a/Master/texmf-dist/tex/latex/exsheets/translations.sty b/Master/texmf-dist/tex/latex/exsheets/translations.sty index 208bc7295c1..feb1ff1d369 100644 --- a/Master/texmf-dist/tex/latex/exsheets/translations.sty +++ b/Master/texmf-dist/tex/latex/exsheets/translations.sty @@ -29,8 +29,8 @@ % If you have any ideas, questions, suggestions or bugs to report, please % feel free to contact me. % -------------------------------------------------------------------------- -\def\@trnslt@date{2012/10/08} -\def\@trnslt@version{v0.2b} +\def\@trnslt@date{2012/10/23} +\def\@trnslt@version{v0.3} \ProvidesPackage{translations}[\@trnslt@date\space \@trnslt@version\space a simple translator] \RequirePackage{etoolbox} -- cgit v1.2.3