summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-03-20 22:00:14 +0000
committerKarl Berry <karl@freefriends.org>2018-03-20 22:00:14 +0000
commit00836951ad52eaf65a14bf820b8b5147c87cd02f (patch)
tree6939e9c909f00de70efdd681b7795242a2d76b76 /Master/texmf-dist/tex
parent52a178cb066231efe1cb28de129fef9df3ad0d71 (diff)
duckuments (20mar18)
git-svn-id: svn://tug.org/texlive/trunk@47048 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/duckuments/duckuments.sty413
-rw-r--r--Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdfbin478693 -> 270243 bytes
2 files changed, 291 insertions, 122 deletions
diff --git a/Master/texmf-dist/tex/latex/duckuments/duckuments.sty b/Master/texmf-dist/tex/latex/duckuments/duckuments.sty
index 52ad43ad908..1e3d18eed81 100644
--- a/Master/texmf-dist/tex/latex/duckuments/duckuments.sty
+++ b/Master/texmf-dist/tex/latex/duckuments/duckuments.sty
@@ -31,8 +31,8 @@
%% example-image-duck.tex
%%
\RequirePackage{xparse,letltxmacro,l3keys2e}
-\def\duckuments@version{v0.2}
-\def\duckuments@date{2018/03/14}
+\def\duckuments@version{v0.3}
+\def\duckuments@date{2018/03/19}
\ProvidesExplPackage
{duckuments} {\duckuments@date}
{\duckuments@version} {minimal working duckuments}
@@ -81,153 +81,110 @@
\bool_new:N \l_duckuments_toc_bool
\bool_new:N \l_duckuments_math_inline_bool
\bool_new:N \l_duckuments_math_display_bool
-\regex_const:Nn \c_duckuments_regex
+\bool_new:N \l_duckuments_blindduck_pars_bool
+\seq_new:N \l_duckuments_range_seq
+\int_new:N \g_duckuments_blindduck_start_int
+\int_gset:Nn \g_duckuments_blindduck_start_int { \c_one }
+\int_new:N \g_duckuments_blindduck_end_int
+\regex_const:Nn \c_duckuments_example_regex
{ example-image-duck|example-image-duck.pdf }
+\regex_const:Nn \c_duckuments_range_regex { (\d+|\d+-|-\d+|\d+-\d+|-) }
+\int_const:Nn \c_duckuments_blindduck_pars_int { \c_five }
\str_if_eq:VnF \c_sys_jobname_str { example-image-duck }
-{\file_if_exist:nTF { example-image-duck.pdf }
{
- \sys_if_engine_pdftex:T
+ \file_if_exist:nTF { example-image-duck.pdf }
{
- \pdfximage{example-image-duck.pdf}
- \int_const:Nn \c_duckuments_example_pages_int
- { \the\pdflastximagepages }
- }
- \sys_if_engine_luatex:T
- {
- \saveimageresource{example-image-duck.pdf}
- \int_const:Nn \c_duckuments_example_pages_int
- { \lastsavedimageresourcepages }
- }
- \sys_if_engine_xetex:TF
- {
- \int_set:Nn \l_tmpa_int { \XeTeXpdfpagecount "example-image-duck.pdf" }
- \int_const:Nn \c_duckuments_example_pages_int { \l_tmpa_int }
- \int_new:N \g_duckuments_RCiv_i_int
- \int_new:N \g_duckuments_RCiv_j_int
- \int_new:N \g_duckuments_RCiv_keylength_int
- \int_new:N \g_duckuments_tmpa_int
- \int_const:Nn \c_duckuments_RCiv_Slength_int { 256 }
- \tl_new:N \l_duckuments_tmpa_tl
- \tl_new:N \l_duckuments_tmpb_tl
- \cs_generate_variant:Nn \prop_gput:Nnn { Nxx }
- \cs_generate_variant:Nn \prop_get:NnN { NxN }
- \prop_new:N \g_duckuments_RCiv_S_prop
- \int_step_inline:nnnn { 0 } { 1 } { 255 }
- {
- \prop_gput:Nnn \g_duckuments_RCiv_S_prop { #1 } { #1 }
- }
- \prop_new:N \g_duckuments_RCiv_key_prop
- \prop_gput:Nnx \g_duckuments_RCiv_key_prop
- { 0 } { \int_use:N \c_sys_minute_int }
- \prop_gput:Nnx \g_duckuments_RCiv_key_prop
- { 1 } { \c_sys_hour_int }
- \prop_gput:Nnx \g_duckuments_RCiv_key_prop
- { 2 } { \c_sys_day_int }
- \prop_gput:Nnx \g_duckuments_RCiv_key_prop
- { 3 } { \c_sys_month_int }
- \prop_gput:Nnx \g_duckuments_RCiv_key_prop
- { 4 } { \int_eval:n { \int_mod:nn { \c_sys_year_int } { 256 } } }
- \int_gset:Nn \g_duckuments_RCiv_keylength_int { 5 }
- \str_map_inline:Nn \c_sys_jobname_str
- {
- \prop_gput:Nxx \g_duckuments_RCiv_key_prop
- { \int_use:N \g_duckuments_RCiv_keylength_int }
- { \int_from_alph:n { #1 } }
- \int_gadd:Nn \g_duckuments_RCiv_keylength_int { 1 }
- }
- \cs_new:Nn \duckuments_swap_prop_entries:Nnn
- {
- \prop_get:NnN #1 { #2 } \l_duckuments_tmpa_tl
- \prop_get:NnN #1 { #3 } \l_duckuments_tmpb_tl
- \prop_gput:Nnx #1 { #2 } { \l_duckuments_tmpb_tl }
- \prop_gput:Nnx #1 { #3 } { \l_duckuments_tmpa_tl }
- }
- \cs_generate_variant:Nn \duckuments_swap_prop_entries:Nnn { Nxx }
- \cs_new:Nn \duckuments_gadd_mod:Nnn
+ \sys_if_engine_pdftex:T
{
- \int_gset:Nn #1 { \int_mod:nn { #1 + #2 } { #3 } }
+ \pdfximage{example-image-duck.pdf}
+ \int_const:Nn \c_duckuments_example_pages_int
+ { \the\pdflastximagepages }
}
- \cs_generate_variant:Nn \duckuments_gadd_mod:Nnn { Nxn }
- \cs_new:Nn \duckuments_gadd_mod_Slength:Nn
+ \sys_if_engine_luatex:T
{
- \duckuments_gadd_mod:Nnn #1
- { #2 } { \c_duckuments_RCiv_Slength_int }
- }
- \int_step_inline:nnnn { 0 } { 1 } { 255 }
- {
- \prop_get:NnN \g_duckuments_RCiv_S_prop { #1 } \l_duckuments_tmpa_tl
- \int_gset:Nn \g_duckuments_tmpa_int
- {
- \int_mod:nn
- { #1 }
- { \g_duckuments_RCiv_keylength_int }
- }
- \prop_get:NxN \g_duckuments_RCiv_key_prop
- { \int_use:N \g_duckuments_tmpa_int } \l_duckuments_tmpb_tl
- \duckuments_gadd_mod_Slength:Nn \g_duckuments_RCiv_j_int
- { \l_duckuments_tmpa_tl + \l_duckuments_tmpb_tl }
- \duckuments_swap_prop_entries:Nxx \g_duckuments_RCiv_S_prop
- { #1 } { \int_use:N \g_duckuments_RCiv_j_int }
+ \saveimageresource{example-image-duck.pdf}
+ \int_const:Nn \c_duckuments_example_pages_int
+ { \lastsavedimageresourcepages }
}
- \int_gzero:N \g_duckuments_RCiv_i_int
- \int_gzero:N \g_duckuments_RCiv_j_int
- \cs_new:Nn \duckuments_get_random_page:
+ \sys_if_engine_xetex:T
{
- \duckuments_gadd_mod_Slength:Nn \g_duckuments_RCiv_i_int { \c_one }
- \prop_get:NxN \g_duckuments_RCiv_S_prop
- { \int_use:N \g_duckuments_RCiv_i_int } \l_duckuments_tmpa_tl
- \duckuments_gadd_mod_Slength:Nn \g_duckuments_RCiv_j_int
- { \l_duckuments_tmpa_tl }
- \duckuments_swap_prop_entries:Nxx \g_duckuments_RCiv_S_prop
- { \int_use:N \g_duckuments_RCiv_i_int }
- { \int_use:N \g_duckuments_RCiv_j_int }
- \int_gset:Nn \g_duckuments_tmpa_int { \l_duckuments_tmpa_tl }
- \duckuments_gadd_mod_Slength:Nn \g_duckuments_tmpa_int
- { \l_duckuments_tmpb_tl }
- \prop_get:NxN \g_duckuments_RCiv_S_prop
- { \int_use:N \g_duckuments_tmpa_int } \l_duckuments_tmpa_tl
- \int_gset:Nn \g_duckuments_tmpa_int
- {
- \int_mod:nn
- { \l_duckuments_tmpa_tl } { \c_duckuments_example_pages_int }
- + \c_one
- }
- \cs_set:Nx \duckuments_random_page:
- { \int_use:N \g_duckuments_tmpa_int }
+ \group_begin:
+ \int_gset:Nn \l_tmpa_int
+ { \XeTeXpdfpagecount "example-image-duck.pdf" }
+ \int_const:Nn \c_duckuments_example_pages_int { \l_tmpa_int }
+ \group_end:
}
- \cs_new:Nn \duckuments_random_page: { 1 }
- }
- {
- \cs_new:Nn \duckuments_get_random_page: {}
- \cs_new:Nn \duckuments_random_page:
- { \int_rand:nn { 1 } { \c_duckuments_example_pages_int } }
}
- }}
+ }
+ { \int_const:Nn \c_duckuments_example_pages_int { 1 } }
+\msg_new:nnnn { duckuments } { option~unknown }
+ {
+ Unknown~option~'#1'~for~package~duckuments.
+ }
+ {
+ \ ~__________________________________\\
+ \ (Quack!~Nothing~here,~sorry.~Quack!)\\
+ \ ~""""""""""""""""""""""""""""""""""\\
+ \ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\string\ \\
+ \ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~>()_\\
+ \ \ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~(__)__
+ }
+\msg_new:nnnn { duckuments } { out~of~range }
+ {
+ You~requested~element~#3~out~of~the~range~#1~to~#2~of~array~'#4'.\\
+ I'll~just~use~element~#1~for~you.
+ }
{
- \int_const:Nn \c_duckuments_example_pages_int { 1 }
+ \ ~__________________________________\\
+ \ (Quack!~Nothing~here,~sorry.~Quack!)\\
+ \ ~""""""""""""""""""""""""""""""""""\\
+ \ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\string\ \\
+ \ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~>()_\\
+ \ \ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~\ ~(__)__
}
+\cs_new:Nn \duckuments_patch_see_duckumentation:
+ {%>>>
+ \cs_set:Nn \msg_see_documentation_text:n
+ {
+ \\\\
+ See~the~\str_if_eq:nnTF { ##1 } { LaTeX } { LaTeX3~documentation }
+ {
+ \str_if_eq:nnTF { ##1 } { duckuments } { duckumentation }
+ { ##1~documentation }
+ }~for~further~information.
+ }
+ }%<<<
+\duckuments_patch_see_duckumentation:
\keys_define:nn { duckuments }
{%>>>
- ,toc .bool_set:N = \l_duckuments_toc_bool
- ,toc .default:n = true
+ ,immediate .bool_set:N = \l_duckuments_immediate_bool
+ ,immediate .default:n = true
+ ,full .code:n =
+ \duckuments_blindduck_range_test:n { 1-\c_duckuments_blindduck_pars_int }
,maths .choice:
,maths / both .code:n =
{
\bool_set_true:N \l_duckuments_math_inline_bool
\bool_set_true:N \l_duckuments_math_display_bool
}
+ ,maths / display .code:n = \bool_set_true:N \l_duckuments_math_display_bool
+ ,maths / inline .code:n = \bool_set_true:N \l_duckuments_math_inline_bool
,maths / none .code:n =
{
\bool_set_false:N \l_duckuments_math_inline_bool
\bool_set_false:N \l_duckuments_math_display_bool
}
- ,maths / inline .code:n = \bool_set_true:N \l_duckuments_math_inline_bool
- ,maths / display .code:n = \bool_set_true:N \l_duckuments_math_display_bool
,maths .default:n = both
- ,immediate .bool_set:N = \l_duckuments_immediate_bool
- ,immediate .default:n = true
+ ,toc .bool_set:N = \l_duckuments_toc_bool
+ ,toc .default:n = true
+ ,unknown .code:n =
+ { \msg_error:nnx { duckuments } { option~unknown } { \l_keys_key_tl } }
}%<<<
\ProcessKeysOptions { duckuments }
+\keys_define:nn { duckuments }
+ {%>>>
+ unknown .code:n = \duckuments_blindduck_range_test:V \l_keys_key_tl
+ }%<<<
\bool_if:NTF \l_duckuments_immediate_bool
{ \AtEndOfPackage { \duckuments_patch_includegraphics: } }
{ \AtBeginDocument { \duckuments_patch_includegraphics: } }
@@ -253,6 +210,7 @@
\group_begin:
\keys_set:nn { duckuments } { #1 }
\duckuments@blindduck@text
+ \bool_if:NT \l_duckuments_blindduck_pars_bool { \par }
\group_end:
}%<<<
\NewDocumentCommand \ducklist {s m}
@@ -359,7 +317,7 @@
\RenewDocumentCommand \includegraphics
{ >{\duckuments_starred:n}s O{} m }
{
- \regex_match:NnTF \c_duckuments_regex { ##3 }
+ \regex_match:NnTF \c_duckuments_example_regex { ##3 }
{
\duckuments_get_random_page:
\duckuments@includegraphicsBAK##1
@@ -372,14 +330,198 @@
}
}
}%<<<
+\cs_new_protected:Nn \duckuments_blindduck_range_test:n
+ {%>>>
+ \regex_match:NnTF \c_duckuments_range_regex { #1 }
+ {
+ \seq_set_split:Nnn \l_duckuments_range_seq { - } { #1 }
+ \int_compare:nNnTF { 1 } = { \seq_count:N \l_duckuments_range_seq }
+ {
+ \cs_set:Npn \duckuments@blindduck@text
+ {
+ \duckuments_blindduck_single_par:n { #1 }
+ \int_gset:Nn \g_duckuments_blindduck_start_int { #1 + \c_one }
+ }
+ }
+ {
+ \bool_set_true:N \l_duckuments_blindduck_pars_bool
+ \exp_args:Nx
+ \tl_if_empty:nF { \seq_item:Nn \l_duckuments_range_seq { \c_one } }
+ {
+ \int_gset:Nn \g_duckuments_blindduck_start_int
+ { \seq_item:Nn \l_duckuments_range_seq { \c_one } }
+ }
+ \exp_args:Nx
+ \tl_if_empty:nTF { \seq_item:Nn \l_duckuments_range_seq { \c_two } }
+ {
+ \int_gset_eq:NN
+ \g_duckuments_blindduck_end_int
+ \g_duckuments_blindduck_start_int
+ }
+ {
+ \int_set:Nn \g_duckuments_blindduck_end_int
+ { \seq_item:Nn \l_duckuments_range_seq { \c_two } }
+ }
+ \duckuments_blindduck_set_text:xx
+ { \int_use:N \g_duckuments_blindduck_start_int }
+ { \int_use:N \g_duckuments_blindduck_end_int }
+ }
+ }
+ {
+ \group_begin:
+ \exp_args:NnnV
+ \msg_error:nnn { duckuments } { option~unknown } \l_keys_key_tl
+ \group_end:
+ }
+ }%<<<
+\cs_generate_variant:Nn \duckuments_blindduck_range_test:n { V }
+\cs_new:Nn \duckuments_blindduck_set_text:nn
+ {%>>>
+ \def \duckuments@blindduck@text
+ {
+ \int_step_function:nnnN { #1 } { \c_one } { #2 }
+ \duckuments_blindduck_par_loop:n
+ \int_gset:Nn \g_duckuments_blindduck_start_int { #2 + \c_one }
+ }
+ }%<<<
+\cs_generate_variant:Nn \duckuments_blindduck_set_text:nn { xx }
+\cs_new:Nn \duckuments_blindduck_single_par:n
+ {%>>>
+ \bool_if:nTF
+ {
+ \int_compare_p:nNn { #1 } > { \c_duckuments_blindduck_pars_int }
+ || \int_compare_p:nNn { #1 } < { \c_one }
+ }
+ {
+ \msg_error:nnxxxx { duckuments } { out~of~range }
+ { 1 } { \int_use:N \c_duckuments_blindduck_pars_int } { #1 }
+ { blindduck~paragraphs }
+ \duckuments@blindduck@text@i
+ }
+ {
+ \use:c { duckuments@blindduck@text@ \int_to_roman:n { #1 } }
+ }
+ }%<<<
+\cs_new:Nn \duckuments_blindduck_par_loop:n
+ {%>>>
+ \duckuments_blindduck_single_par:n { #1 }
+ \par
+ }%<<<
\cs_new_protected:Nn \duckuments_starred:n
{%>>>
\IfBooleanTF { #1 }
{ \def\ProcessedArgument{*} }
{ \def\ProcessedArgument{} }
}%<<<
+\sys_if_engine_xetex:TF
+ {
+ \int_new:N \g_duckuments_RCiv_i_int
+ \int_new:N \g_duckuments_RCiv_j_int
+ \int_new:N \g_duckuments_RCiv_keylength_int
+ \int_new:N \g_duckuments_tmpa_int
+ \int_const:Nn \c_duckuments_RCiv_Slength_int { 256 }
+ \tl_new:N \l_duckuments_tmpa_tl
+ \tl_new:N \l_duckuments_tmpb_tl
+ \cs_new_protected_nopar:Nn \duckuments_RCiv_S_new:n
+ { \int_new:c { g_duckuments_RCiv_S_ \int_eval:n { #1 } _int } }
+ \cs_new_protected_nopar:Nn \duckuments_RCiv_S_set:nn
+ { \int_gset:cn { g_duckuments_RCiv_S_ \int_eval:n { #1 } _int } { #2 } }
+ \cs_new_nopar:Nn \duckuments_RCiv_S_get:n
+ { \int_use:c { g_duckuments_RCiv_S_ \int_eval:n { #1 } _int } }
+ \cs_new_protected_nopar:Nn \duckuments_RCiv_key_new:n
+ { \int_new:c { g_duckuments_RCiv_key_ \int_eval:n { #1 } _int } }
+ \cs_new_protected_nopar:Nn \duckuments_RCiv_key_set:nn
+ { \int_gset:cn { g_duckuments_RCiv_key_ \int_eval:n { #1 } _int } { #2 } }
+ \cs_new_nopar:Nn \duckuments_RCiv_key_get:n
+ { \int_use:c { g_duckuments_RCiv_key_ \int_eval:n { #1 } _int } }
+ \int_step_inline:nnnn { 0 } { 1 } { 255 }
+ {
+ \duckuments_RCiv_S_new:n { #1 }
+ \duckuments_RCiv_S_set:nn { #1 } { #1 }
+ }
+ \int_step_inline:nnnn { 0 } { 1 } { 4 }
+ { \duckuments_RCiv_key_new:n { #1 } }
+ \duckuments_RCiv_key_set:nn { 0 } { \c_sys_minute_int }
+ \duckuments_RCiv_key_set:nn { 1 } { \c_sys_hour_int }
+ \duckuments_RCiv_key_set:nn { 2 } { \c_sys_day_int }
+ \duckuments_RCiv_key_set:nn { 3 } { \c_sys_month_int }
+ \duckuments_RCiv_key_set:nn { 4 }
+ { \int_mod:nn { \c_sys_year_int } { \c_duckuments_RCiv_Slength_int } }
+ \int_gset:Nn \g_duckuments_RCiv_keylength_int { 5 }
+ \str_map_inline:Nn \c_sys_jobname_str
+ {
+ \duckuments_RCiv_key_new:n { \g_duckuments_RCiv_keylength_int }
+ \duckuments_RCiv_key_set:nn
+ { \g_duckuments_RCiv_keylength_int }
+ { \int_from_alph:n { #1 } }
+ \int_gincr:N \g_duckuments_RCiv_keylength_int
+ }
+ \cs_new_protected_nopar:Nn \duckuments_swap_S_entries:nn
+ {
+ \int_set_eq:Nc
+ \g_duckuments_tmpa_int
+ { g_duckuments_RCiv_S_ \int_eval:n { #1 } _int }
+ \int_set_eq:cc
+ { g_duckuments_RCiv_S_ \int_eval:n { #1 } _int }
+ { g_duckuments_RCiv_S_ \int_eval:n { #2 } _int }
+ \int_set_eq:cN
+ { g_duckuments_RCiv_S_ \int_eval:n { #2 } _int }
+ \g_duckuments_tmpa_int
+ }
+ \int_gset:Nn \g_duckuments_RCiv_keylength_int { 5 }
+ \cs_new:Nn \duckuments_gadd_mod:Nnn
+ { \int_gset:Nn #1 { \int_mod:nn { #1 + ( #2 ) } { #3 } } }
+ \cs_new:Nn \duckuments_gadd_mod_Slength:Nn
+ {
+ \duckuments_gadd_mod:Nnn #1
+ { #2 } { \c_duckuments_RCiv_Slength_int }
+ }
+ \int_step_inline:nnnn { 0 } { 1 } { 255 }
+ {
+ \int_gset:Nn \g_duckuments_tmpa_int
+ { \int_mod:nn { #1 } { \g_duckuments_RCiv_keylength_int } }
+ \duckuments_gadd_mod_Slength:Nn \g_duckuments_RCiv_j_int
+ {
+ \duckuments_RCiv_S_get:n { #1 }
+ + \duckuments_RCiv_key_get:n { \g_duckuments_tmpa_int }
+ }
+ \duckuments_swap_S_entries:nn { #1 } { \g_duckuments_RCiv_j_int }
+ }
+ \int_gzero:N \g_duckuments_RCiv_i_int
+ \int_gzero:N \g_duckuments_RCiv_j_int
+ \cs_new_protected_nopar:Nn \duckuments_get_random_page:
+ {
+ \duckuments_gadd_mod_Slength:Nn \g_duckuments_RCiv_i_int { \c_one }
+ \duckuments_gadd_mod_Slength:Nn \g_duckuments_RCiv_j_int
+ { \duckuments_RCiv_S_get:n { \g_duckuments_RCiv_i_int } }
+ \duckuments_swap_S_entries:nn
+ { \g_duckuments_RCiv_i_int }
+ { \g_duckuments_RCiv_j_int }
+ \int_gset:Nn \g_duckuments_tmpa_int
+ { \duckuments_RCiv_S_get:n { \g_duckuments_RCiv_i_int } }
+ \duckuments_gadd_mod_Slength:Nn \g_duckuments_tmpa_int
+ { \duckuments_RCiv_S_get:n { \g_duckuments_RCiv_j_int } }
+ \cs_set:Nx \duckuments_random_page:
+ {
+ \int_eval:n
+ {
+ \int_mod:nn
+ { \duckuments_RCiv_S_get:n { \g_duckuments_tmpa_int } }
+ { \c_duckuments_example_pages_int }
+ + \c_one
+ }
+ }
+ }
+ \cs_new:Nn \duckuments_random_page: { 1 }
+ }
+ {
+ \cs_new:Nn \duckuments_get_random_page: {}
+ \cs_new:Nn \duckuments_random_page:
+ { \int_rand:nn { 1 } { \c_duckuments_example_pages_int } }
+ }
\ExplSyntaxOff
-\newcommand*\duckuments@blindduck@text
+\newcommand*\duckuments@blindduck@text{\duckuments@blindduck@text@i}
+\newcommand*\duckuments@blindduck@text@i
{%>>>
There once was a very smart but sadly blind duck. When it was still a small
duckling it was renowned for its good vision. But sadly as the duck grew
@@ -393,6 +535,33 @@
\duckuments@enquote{Go, find me the best eye ducktor there is. He shall
heal me from my disease!}%
}%<<<
+\newcommand*\duckuments@blindduck@text@ii
+ {%>>>
+ \duckuments@enquote{But my duck, how are you supposed to manage your daily
+ routines without my visual guidance}, replied the underduckling. The smart
+ duck's face turned grim in anger. \duckuments@enquote{You dare to talk
+ back?} The underduckling blushed ashamed. How could he have objections
+ after his duck gave strict orders? The underduckling was so embarrassed
+ about his own behaviour he had to solve an equation.%
+ }%<<<
+\newcommand*\duckuments@blindduck@text@iii
+ {%>>>
+ After the equation was solved and the underduckling prepared his leave for
+ the next day it fell asleep in a shaky mood. It did not know what the
+ journey had prepared for him and if he was prepared enough for it. His sleep
+ was restless. The dreams he had that night were not calm and bright as they
+ used to be for an innocent underduckling.%
+ }%<<<
+\newcommand*\duckuments@blindduck@text@iv
+ {%>>>
+ Before the first sunlight the underduckling woke. He didn't have the feeling
+ of being well rested. But nonetheless he knew that this was the day he
+ should leave. Except saying goodbye to his beloved ones there was nothing
+ holding him back. His duck had sent him on the most important mission a five
+ weeks old inexperienced underduckling was ever sent. He bid farewell to his
+ mother, all his brothers and sisters, and finally from his duck. The bag was
+ shouldered, the boots were tied, the underduckling left.%
+ }%<<<
\newcommand*\duckuments@headings@text[1]
{A friendly duck at level #1 \duckuments@headings@level{#1}}
\newcommand*\ducklists@content
diff --git a/Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf b/Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf
index d602328399f..8b3fa4d07a7 100644
--- a/Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf
+++ b/Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf
Binary files differ