diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex | 154 |
1 files changed, 154 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex b/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex new file mode 100644 index 00000000000..323b7bd52f9 --- /dev/null +++ b/Master/texmf-dist/tex/latex/xsim/xsim.blanks.code.tex @@ -0,0 +1,154 @@ +% ---------------------------------------------------------------------------- +% the XSIM package - blanks module +% +% eXercise Sheets IMproved +% +% ---------------------------------------------------------------------------- +% Clemens Niederberger +% Web: https://github.com/cgnieder/xsim +% E-Mail: contact@mychemistry.eu +% ---------------------------------------------------------------------------- +% Copyright 2017 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. +% ---------------------------------------------------------------------------- +% If you have any ideas, questions, suggestions or bugs to report, please +% feel free to contact me. +% ---------------------------------------------------------------------------- +\XSIMmodule{blanks}{add blanks, cloze} + +\bool_new:N \l__xsim_blank_width_bool +\bool_new:N \l__xsim_blank_linespread_bool +\tl_new:N \l__xsim_blank_linespread_tl +\tl_new:N \l__xsim_blank_scale_tl +\dim_new:N \l__xsim_blank_dim +\dim_new:N \l__xsim_blank_line_increment_dim +\dim_new:N \l__xsim_blank_line_minimum_length_dim +\box_new:N \l__xsim_blank_box + +\cs_new_protected:Npn \xsim_write_cloze_blank:n #1 {#1} +\cs_new_protected:Npn \xsim_write_cloze_filled:n #1 {#1} + +\keys_define:nn {xsim/blank} + { + blank-style .code:n = + \cs_set_protected:Npn \xsim_write_cloze_blank:n ##1 {#1} , + blank-style .initial:n = \underline {#1} , + filled-style .code:n = + \cs_set_protected:Npn \xsim_write_cloze_filled:n ##1 {#1} , + filled-style .initial:n = \underline {#1} , + style .meta:n = + { + blank-style = #1 , + filled-style = #1 + } , + scale .tl_set:N = \l__xsim_blank_scale_tl , + scale .initial:n = 1 , + width .code:n = + { + \bool_set_true:N \l__xsim_blank_width_bool + \dim_set:Nn \l__xsim_blank_dim {#1} + } , + linespread .code:n = + \bool_set_true:N \l__xsim_blank_linespread_bool + \tl_set:Nn \l__xsim_blank_linespread_tl {#1} , + linespread .initial:n = 1 , + line-increment .dim_set:N = \l__xsim_blank_line_increment_dim , + line-increment .initial:n = 1pt , + line-minimum-length .dim_set:N = \l__xsim_blank_line_minimum_length_dim , + line-minimum-length .initial:n = 2em + } + +\cs_new_protected:Npn \xsim_blank:n #1 + { + \box_clear:N \l__xsim_blank_box + \mode_if_math:TF + { \hbox_set:Nn \l__xsim_blank_box { $ \m@th \mathpalette{}{#1} $ } } + { \hbox_set:Nn \l__xsim_blank_box {#1} } + \xsim_if_inside_solution:TF + { \xsim_write_cloze_filled:n {#1} } + { + \bool_if:NTF \l__xsim_blank_width_bool + { \__xsim_blank_skip:V \l__xsim_blank_dim } + { \__xsim_blank_skip:n { \box_wd:N \l__xsim_blank_box } } + } + } + +\cs_new_protected:Npn \__xsim_blank_skip:n #1 + { + \bool_if:NTF \l__xsim_blank_width_bool + { \dim_set:Nn \l__xsim_tmpa_dim {#1} } + { + \fp_set:Nn \l__xsim_tmpa_fp + { \dim_to_fp:n {#1} * \l__xsim_blank_scale_tl } + \dim_set:Nn \l__xsim_tmpa_dim { \fp_to_dim:N \l__xsim_tmpa_fp } + } + \dim_compare:nTF + { \l__xsim_tmpa_dim > \l__xsim_blank_line_minimum_length_dim } + { + \mode_if_math:TF + { \xsim_write_cloze_blank:n { \skip_horizontal:N \l__xsim_tmpa_dim } } + { + \dim_do_while:nn { \l__xsim_tmpa_dim > \c_zero_dim } + { + % I wonder what the correct l3 way would be -- if there is + % one, yet: + \tex_hfil:D + \tex_penalty:D \hyphenpenalty + \tex_hfilneg:D + \dim_compare:nTF + { \l__xsim_tmpa_dim < \l__xsim_blank_line_increment_dim } + { \xsim_write_cloze_blank:n { \skip_horizontal:N \l__xsim_tmpa_dim } } + { + \xsim_write_cloze_blank:n + { \skip_horizontal:N \l__xsim_blank_line_increment_dim } + } + \dim_sub:Nn \l__xsim_tmpa_dim { \l__xsim_blank_line_increment_dim } + } + } + } + { \xsim_write_cloze_blank:n { \skip_horizontal:N \l__xsim_tmpa_dim } } + } +\cs_generate_variant:Nn \__xsim_blank_skip:n { V } + +% ---------------------------------------------------------------------------- +\tex_endinput:D + +the following code from Heiko Oberdieck in d.c.t.t served as inspiration +and basis for the \blank command: +https://groups.google.com/d/msg/de.comp.text.tex/fZLwraH04jE/o1RSdFXjGuIJ + +\makeatletter +\newcommand*{\luecke}{% + \begingroup + \setlength{\dimen@}{6cm}% + \ifdim\dimen@>2em % + \underline{\hspace{1em}}% + \advance\dimen@ by -2em\relax + \@whiledim\dimen@>0pt\do{% + \penalty\hyphenpenalty + \ifdim\dimen@<1pt % + \underline{\hspace{\dimen@}}% + \else + \underline{\hspace{1pt}}% + \fi + \advance\dimen@ by -1pt % + }% + \underline{\hspace{1em}}% + \else + \underline{\hspace{\dimen@}}% + \fi + \endgroup + \xspace +} +\makeatother |