diff options
author | Norbert Preining <preining@logic.at> | 2012-10-13 09:39:42 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2012-10-13 09:39:42 +0000 |
commit | d2e50e76ef7e64efa460c918c4c751262c063476 (patch) | |
tree | 58cbbfdd6baf7d60d38344a470d7ab91d4add134 /Master/texmf-dist/tex/latex/exsheets/exsheets_headings.def | |
parent | e75b4f01a9c31f808000ab47365e040897e7cf23 (diff) |
new latex packages exsheets (12Oct)
git-svn-id: svn://tug.org/texlive/trunk@27953 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/exsheets/exsheets_headings.def')
-rw-r--r-- | Master/texmf-dist/tex/latex/exsheets/exsheets_headings.def | 371 |
1 files changed, 371 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/exsheets/exsheets_headings.def b/Master/texmf-dist/tex/latex/exsheets/exsheets_headings.def new file mode 100644 index 00000000000..c5e9eeebe4d --- /dev/null +++ b/Master/texmf-dist/tex/latex/exsheets/exsheets_headings.def @@ -0,0 +1,371 @@ +% -------------------------------------------------------------------------- +% the EXSHEETS package +% +% Yet another package for the creation of exercise sheets +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://bitbucket.org/cgnieder/exsheets/ +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2011-2012 Clemens Niederberger +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Clemens Niederberger. +% -------------------------------------------------------------------------- +% The exsheets package consists of the files +% - exsheets.sty, exsheets_headings.def, exsheets_headings.cfg, +% exsheets_tasks.def, exsheets_tasks.cfg, exsheets_configurations.cfg, +% - exsheets_en.tex, exsheets_en.pdf, +% - README +% -------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% -------------------------------------------------------------------------- +% HEADINGS FOR QUESTIONS AND SOLUTIONS +% the 6 base coffins: +\ProvidesFile{exsheets_headings.def} + [\exsheets@date\space v\exsheets@version\space ExSheets headings object] + +\coffin_new:N \l__exsheets_heading_main_coffin +\coffin_new:N \l__exsheets_heading_pre_coffin +\coffin_new:N \l__exsheets_heading_post_coffin +\coffin_new:N \l__exsheets_heading_title_coffin +\coffin_new:N \l__exsheets_heading_number_coffin +\coffin_new:N \l__exsheets_heading_points_coffin + +% the object varaibles: +\bool_new:N \l__exsheets_heading_runin_bool +\bool_new:N \l__exsheets_heading_indent_first_bool +\bool_new:N \l__exsheets_heading_toc_reversed_bool + +\dim_new:N \l__exsheets_heading_above_dim +\dim_new:N \l__exsheets_heading_below_dim +\fp_new:N \l__exsheets_heading_scale_fp + +\tl_new:N \l__exsheets_heading_main_tl +\tl_new:N \l__exsheets_heading_pre_code_tl +\tl_new:N \l__exsheets_heading_post_code_tl + +\tl_new:N \l__exsheets_heading_title_format_tl +\tl_new:N \l__exsheets_heading_title_pre_code_tl +\tl_new:N \l__exsheets_heading_title_post_code_tl + +\tl_new:N \l__exsheets_heading_number_format_tl +\tl_new:N \l__exsheets_heading_number_pre_code_tl +\tl_new:N \l__exsheets_heading_number_post_code_tl + +\tl_new:N \l__exsheets_heading_points_format_tl +\tl_new:N \l__exsheets_heading_points_pre_code_tl +\tl_new:N \l__exsheets_heading_points_post_code_tl + +\tl_new:N \l__exsheets_heading_joined_coffins_tl +\tl_new:N \l__exsheets_heading_attached_coffins_tl +\seq_new:N \l__exsheets_heading_joined_coffins_seq +\seq_new:N \l__exsheets_heading_attached_coffins_seq + +% internal object functions: +% the following is shamelessly adapted from the `needspace' package by +% Peter Wilson and Herries Press +\cs_new:Npn \exsheets_needspace:n #1 + { + \group_begin: + \dim_set:Nn \l__exsheets_tmpa_dim { #1 } + \skip_vertical:n { \c_zero_dim + \l__exsheets_tmpa_dim } + \tex_penalty:D -100 + \skip_vertical:n { \c_zero_dim - \l__exsheets_tmpa_dim } + \skip_vertical:N \l__exsheets_tmpa_dim + \tex_penalty:D 9999 + \skip_vertical:n { - \l__exsheets_tmpa_dim } + \skip_vertical:N \c_zero_dim + \group_end: + } + +\AtBeginDocument + { + \cs_if_exist:NF \needspace + { \cs_set_eq:NN \needspace \exsheets_needspace:n } + } + +\cs_generate_variant:Nn \seq_set_split:Nnn { NnV } + +\cs_new:Npn \__exsheets_join:N #1 + { + \seq_map_inline:Nn #1 + { + \tl_if_blank:nF { ##1 } + { \exp_after:wN \__exsheets_join_coffin_sequence:w ##1 } + } + } +\cs_new:Npn \__exsheets_join_coffin_sequence:w #1[#2,#3] #4[#5,#6] (#7,#8) + { \__exsheets_join_coffins:nnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8} } + +\cs_new:Npn \__exsheets_join_coffins:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \coffin_join:cnncnnnn + { l__exsheets_heading_#1_coffin } { #2 } { #3 } + { l__exsheets_heading_#4_coffin } { #5 } { #6 } + { #7 } { #8 } + } +\cs_new:Npn \__exsheets_attach:N #1 + { + \seq_map_inline:Nn #1 + { + \tl_if_blank:nF { ##1 } + { \exp_after:wN \__exsheets_attach_coffin_sequence:w ##1 } + } + } +\cs_new:Npn \__exsheets_attach_coffin_sequence:w #1[#2,#3]#4[#5,#6](#7,#8) + { \__exsheets_attach_coffins:nnnnnnnn {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8} } + +\cs_new:Npn \__exsheets_attach_coffins:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \coffin_attach:cnncnnnn + { l__exsheets_heading_#1_coffin } { #2 } { #3 } + { l__exsheets_heading_#4_coffin } { #5 } { #6 } + { #7 } { #8 } + } + +% the `exsheets-heading' object: +% #1 = title, +% #2 = number, +% #3 = points +% #4 = bonus +\DeclareObjectType { exsheets-heading } { 4 } + +% the `default' template interface: +\DeclareTemplateInterface { exsheets-heading } { default } { 4 } + { + runin : boolean = false , + indent-first : boolean = false , + toc-reversed : boolean = false , + vscale : real = 1 , + above : length = 2pt , + below : length = 2pt , + main : tokenlist = , + pre-code : tokenlist = , + post-code : tokenlist = , + title-format : tokenlist = , + title-pre-code : tokenlist = , + title-post-code : tokenlist = , + number-format : tokenlist = , + number-pre-code : tokenlist = , + number-post-code : tokenlist = , + points-format : tokenlist = , + points-pre-code : tokenlist = , + points-post-code : tokenlist = , + join : tokenlist = , + attach : tokenlist = + } + +% the `default' template code: +\DeclareTemplateCode { exsheets-heading } { default } { 4 } + { + runin = \l__exsheets_heading_runin_bool , + indent-first = \l__exsheets_heading_indent_first_bool , + toc-reversed = \l__exsheets_heading_toc_reversed_bool , + vscale = \l__exsheets_heading_scale_fp , + above = \l__exsheets_heading_above_dim , + below = \l__exsheets_heading_below_dim , + main = \l__exsheets_heading_main_tl , + pre-code = \l__exsheets_heading_pre_code_tl , + post-code = \l__exsheets_heading_post_code_tl , + title-format = \l__exsheets_heading_title_format_tl , + title-pre-code = \l__exsheets_heading_title_pre_code_tl , + title-post-code = \l__exsheets_heading_title_post_code_tl , + number-format = \l__exsheets_heading_number_format_tl , + number-pre-code = \l__exsheets_heading_number_pre_code_tl , + number-post-code = \l__exsheets_heading_number_post_code_tl , + points-format = \l__exsheets_heading_points_format_tl , + points-pre-code = \l__exsheets_heading_points_pre_code_tl , + points-post-code = \l__exsheets_heading_points_post_code_tl , + join = \l__exsheets_heading_joined_coffins_tl , + attach = \l__exsheets_heading_attached_coffins_tl + } + { + \AssignTemplateKeys + \bool_if:nT + { \l__exsheets_questions_totoc_bool && \l__exsheets_inside_question_bool } + { + \phantomsection + \addcontentsline { toc } { \l__exsheets_questions_toclevel_tl } + { + \bool_if:NTF \l__exsheets_heading_toc_reversed_bool + { #2 \ #1 } + { #1\ #2 } + } + } + \bool_if:nT + { \l__exsheets_solutions_totoc_bool && !\l__exsheets_inside_question_bool } + { + \phantomsection + \addcontentsline { toc } { \l__exsheets_solutions_toclevel_tl } + { + \bool_if:NTF \l__exsheets_heading_toc_reversed_bool + { #2 \ #1 } + { #1\ #2 } + } + } + \seq_set_split:NnV \l__exsheets_heading_joined_coffins_seq { ; } + \l__exsheets_heading_joined_coffins_tl + \seq_set_split:NnV \l__exsheets_heading_attached_coffins_seq { ; } + \l__exsheets_heading_attached_coffins_tl + \bool_if:NTF \l__exsheets_heading_runin_bool + { + \hcoffin_set:Nn \l__exsheets_heading_main_coffin + { + \tl_if_blank:VTF \l__exsheets_heading_main_tl + { \tl_use:N \l__exsheets_heading_title_format_tl \strut } + { \tl_use:N \l__exsheets_heading_main_tl } + } + } + { + \hcoffin_set:Nn \l__exsheets_heading_main_coffin + { + \parbox { \linewidth } + { + \tl_if_blank:VTF \l__exsheets_heading_main_tl + { \tl_use:N \l__exsheets_heading_title_format_tl \strut } + { \tl_use:N \l__exsheets_heading_main_tl } + } + } + } + \hcoffin_set:Nn \l__exsheets_heading_pre_coffin + { \tl_use:N \l__exsheets_heading_pre_code_tl } + \hcoffin_set:Nn \l__exsheets_heading_post_coffin + { \tl_use:N \l__exsheets_heading_post_code_tl } + \coffin_join:NnnNnnnn + \l__exsheets_heading_main_coffin { l } { t } + \l__exsheets_heading_pre_coffin { l } { b } { 0pt } { 0pt } + \coffin_join:NnnNnnnn + \l__exsheets_heading_main_coffin { l } { b } + \l__exsheets_heading_post_coffin { l } { t } { 0pt } { 0pt } + \hcoffin_set:Nn \l__exsheets_heading_title_coffin + { + \tl_use:N \l__exsheets_heading_title_format_tl + \strut + \exsheets_questions_debug: + \tl_use:N \l__exsheets_heading_title_pre_code_tl + { \tl_use:N \l__exsheets_heading_title_user_format_tl #1 } + \tl_use:N \l__exsheets_heading_title_post_code_tl + } + \hcoffin_set:Nn \l__exsheets_heading_number_coffin + { + \tl_if_blank:VTF \l__exsheets_heading_number_format_tl + { \tl_use:N \l__exsheets_heading_title_format_tl } + { \tl_use:N \l__exsheets_heading_number_format_tl } + \strut + \tl_use:N \l__exsheets_heading_number_pre_code_tl + { \tl_use:N \l__exsheets_heading_title_user_format_tl #2 } + \tl_use:N \l__exsheets_heading_number_post_code_tl + } + \hcoffin_set:Nn \l__exsheets_heading_points_coffin + { + \bool_if:nF { \fp_compare_p:n { #3 = 0 } && \fp_compare_p:n { #4 = 0 } } + { + \tl_use:N \l__exsheets_heading_points_format_tl + \group_begin: + \tl_use:N \l__exsheets_heading_title_format_tl \strut + \group_end: + \tl_use:N \l__exsheets_heading_points_pre_code_tl + { + % TODO: \l__exsheets_points_separate_bonus_bool beachten + \fp_compare:nF { #3 = 0 } + { + \bool_if:nTF + { + \l__exsheets_points_separate_bonus_bool || + \fp_compare_p:n { #4 = 0 } + } + { \exsheets_print_points:n { #3 } } + { \exsheets_parse_points:n { #3 } } + } + \bool_if:nT { !\fp_compare_p:n { #3 = 0 } && !\fp_compare_p:n { #4 = 0 } } + { ~ } + \fp_compare:nF { #4 = 0 } + { + \tl_use:N \l__exsheets_points_pre_bonus_marker_tl + \bool_if:nTF + { + \l__exsheets_points_separate_bonus_bool || + \fp_compare_p:n { #3 = 0 } + } + { + \exsheets_print_bonus:n { #4 } + \tl_use:N \l__exsheets_points_post_bonus_marker_tl + } + { + \exsheets_parse_bonus:n { #4 } + \tl_use:N \l__exsheets_points_post_bonus_marker_tl + \exsheets_points_name:n { #3 + #4 } + } + } + } + \tl_use:N \l__exsheets_heading_points_post_code_tl + } + } + \bool_if:NF \l__exsheets_heading_runin_bool + { + \coffin_resize:Nnn \l__exsheets_heading_main_coffin { \linewidth } + { + \fp_to_decimal:N \l__exsheets_heading_scale_fp + \coffin_ht:N \l__exsheets_heading_main_coffin + + \l__exsheets_heading_below_dim + } + } + \__exsheets_join:N \l__exsheets_heading_joined_coffins_seq + \__exsheets_attach:N \l__exsheets_heading_attached_coffins_seq + \skip_vertical:N \l__exsheets_heading_above_dim + \exsheets_needspace:n + { + \coffin_ht:N \l__exsheets_heading_main_coffin + + \coffin_dp:N \l__exsheets_heading_main_coffin + + \l__exsheets_heading_below_dim + + \baselineskip + } + \noindent + \coffin_typeset:Nnnnn \l__exsheets_heading_main_coffin + { H } { l } { 0pt }{ 0pt } + \bool_if:NF \l__exsheets_heading_runin_bool + { + \skip_vertical:N \l__exsheets_heading_below_dim + \bool_if:NF \l__exsheets_heading_indent_first_bool { \noindent } + } + } + +% the two basic instances: +% BLOCK: +\DeclareInstance { exsheets-heading } { block } { default } + { + join = { title[r,B] number[l,B] (1ex,0pt) } , + attach = + { + main[l,vc] title[l,vc] (0pt,0pt) ; + main[r,vc] points[l,vc] (\marginparsep,0pt) + } + } + +% RUNIN: +\DeclareInstance { exsheets-heading } { runin } { default } + { + runin = true , + number-post-code = \c_space_tl , + attach = + { main[l,vc] points[l,vc] (\linewidth + \marginparsep,0pt) } , + join = + { + main[r,vc] title[r,vc] (0pt,0pt) ; + main[r,vc] number[l,vc] (1ex,0pt) + } + } + +\tex_endinput:D
\ No newline at end of file |