diff options
author | Karl Berry <karl@freefriends.org> | 2018-03-15 22:06:50 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-03-15 22:06:50 +0000 |
commit | 097c112c554e8f27feadd8c546c4cf0de0489644 (patch) | |
tree | 493eea33d1e2c04dd19a7debba8dafcbbb3f8d34 /Master/texmf-dist | |
parent | 0ee0025f07d63b22f3b16b17f8942c29c30188e9 (diff) |
duckuments (15mar18)
git-svn-id: svn://tug.org/texlive/trunk@46973 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r-- | Master/texmf-dist/doc/latex/duckuments/README.md | 5 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/duckuments/duckuments.hd | 0 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/duckuments/duckuments.pdf | bin | 467406 -> 473595 bytes | |||
-rw-r--r-- | Master/texmf-dist/source/latex/duckuments/duckuments.dtx | 192 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/duckuments/duckuments.sty | 150 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf | bin | 217654 -> 478693 bytes |
6 files changed, 318 insertions, 29 deletions
diff --git a/Master/texmf-dist/doc/latex/duckuments/README.md b/Master/texmf-dist/doc/latex/duckuments/README.md index 5dce990d1da..4a26d605e46 100644 --- a/Master/texmf-dist/doc/latex/duckuments/README.md +++ b/Master/texmf-dist/doc/latex/duckuments/README.md @@ -21,7 +21,7 @@ macros are available: - `\duckenumerate` - `\ducklist{enumerate}` - `\duckdescription` - `\ducklist{description}` - `\duckumentsCreateExampleFile` - - `\duckumentsDrawRandomDucks` + - `\duckumentsDrawRandomDucks[count]` It also provides `example-image-duck.pdf` which contains several pages of random `tikzduck`s. Also `\includegraphics` is patched so one can use @@ -29,4 +29,5 @@ It also provides `example-image-duck.pdf` which contains several pages of random `example-image-duck.pdf`. The behaviour of `\includegraphics` shouldn't be altered for other files. -**Attention: At the moment, the package only works with pdfTeX and LuaTeX.** +**Attention: + At the moment, the package only works with pdfTeX, LuaTeX, and XeTeX.** diff --git a/Master/texmf-dist/doc/latex/duckuments/duckuments.hd b/Master/texmf-dist/doc/latex/duckuments/duckuments.hd deleted file mode 100644 index e69de29bb2d..00000000000 --- a/Master/texmf-dist/doc/latex/duckuments/duckuments.hd +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/duckuments/duckuments.pdf b/Master/texmf-dist/doc/latex/duckuments/duckuments.pdf Binary files differindex 35fb8c3836e..1647d1ce190 100644 --- a/Master/texmf-dist/doc/latex/duckuments/duckuments.pdf +++ b/Master/texmf-dist/doc/latex/duckuments/duckuments.pdf diff --git a/Master/texmf-dist/source/latex/duckuments/duckuments.dtx b/Master/texmf-dist/source/latex/duckuments/duckuments.dtx index 484cba20771..2dc63666343 100644 --- a/Master/texmf-dist/source/latex/duckuments/duckuments.dtx +++ b/Master/texmf-dist/source/latex/duckuments/duckuments.dtx @@ -63,6 +63,7 @@ and the derived files duckuments.pdf, %<*driver> \ProvidesFile{duckuments.dtx}[2018/03/13 minimal working duckuments] \documentclass{l3doc} +\usepackage{duckuments} \usepackage{enumitem} \newenvironment{options} {\begin{description}[style=nextline,font=\normalfont\ttfamily]} @@ -84,8 +85,8 @@ and the derived files duckuments.pdf, %</eid> % %<*pkg> -\def\duckuments@version{v0.1} -\def\duckuments@date{2018/03/13} +\def\duckuments@version{v0.2} +\def\duckuments@date{2018/03/14} \ProvidesExplPackage {duckuments} {\duckuments@date} {\duckuments@version} {minimal working duckuments} @@ -94,7 +95,9 @@ and the derived files duckuments.pdf, % % \title{The \pkg{duckuments} package} % \author{Jonathan P. Spratte\thanks{E-mail: jspratte@yahoo.de}} -% \date{Released 2018/03/13} +% \makeatletter +% \date{version \duckuments@version, released \duckuments@date} +% \makeatother % \maketitle % \tableofcontents % @@ -118,7 +121,7 @@ and the derived files duckuments.pdf, % once. The sources are hosted on % \href{https://github.com/Skillmon/ltx_duckuments}{github}. % -% \textbf{The package does currently only work on \pdfTeX\ and \LuaTeX}. +% \textbf{The package does currently only work on \pdfTeX, \LuaTeX, and \XeTeX}. % % \section{Duckumentation} % @@ -181,10 +184,13 @@ and the derived files duckuments.pdf, % \end{function} % % \begin{function}{\duckumentsDrawRandomDucks} -% Draws \cs{duckuments@randoms} random \pkg{tikzducks} using -% \pkg{Ti\textit{k}Z}. Note that \pkg{duckuments} doesn't load -% \pkg{Ti\textit{k}Z}, this macro is for the use in -% \file{example-image-duck.tex}. +% \begin{syntax} +% \cs{duckumentsDrawRandomDucks}\oarg{count} +% \end{syntax} +% Draws \meta{count} random \pkg{tikzducks} using +% \pkg{Ti\textit{k}Z}. \meta{count} defaults to \cs{duckuments@randoms}. +% Note that \pkg{duckuments} doesn't load \pkg{Ti\textit{k}Z}, this macro is +% for the use in \file{example-image-duck.tex}. % \end{function} % % \subsection{Patches} @@ -195,6 +201,12 @@ and the derived files duckuments.pdf, % of that document is used. There shouldn't be any change in behaviour if other % files are used. % +% The random page is chosen with |\int_random:nn| in \pdfTeX\ and \LuaTeX. If +% \XeTeX\ is used, the package implements a RC4 pseudo-random generating +% algorithm which is seeded using the current time and jobname. The generator +% can produce only numbers between $1$ and $256$ and is biased if $256$ is not a +% multiple of the page count of \file{example-image-duck.pdf}. +% % The patch is done so that one can use \pkg{tikzducks} ducks without the need % of loading \pkg{tikz} in a minimal working duckument as example images. % @@ -234,12 +246,17 @@ and the derived files duckuments.pdf, % % Check which engine is used. % \begin{macrocode} -\bool_if:nF { \sys_if_engine_luatex_p: || \sys_if_engine_pdftex_p: } - { %>>> +\bool_if:nF + { + \sys_if_engine_luatex_p: + || \sys_if_engine_pdftex_p: + || \sys_if_engine_xetex_p: + } + {%>>> \msg_new:nnnn { duckuments } { incompatible } { - The~duckuments~package~is~currently~only~compatible~with~pdfTeX~and~ - LuaTeX! + The~duckuments~package~is~currently~only~compatible~with~pdfTeX,~ + LuaTeX,~and~XeTeX! } { Sorry~for~that. @@ -248,7 +265,6 @@ and the derived files duckuments.pdf, \endinput }%<<< % \end{macrocode} -% % Check whether \file{example-image-duck.pdf} exists. % \begin{macrocode} \file_if_exist:nF { example-image-duck.pdf } @@ -284,7 +300,7 @@ and the derived files duckuments.pdf, % \begin{variable}{\duckuments@randoms} % Stores the number of random ducks in \file{example-image-duck.pdf}. % \begin{macrocode} -\newcommand*\duckuments@randoms{100} +\newcommand*\duckuments@randoms{128} % \end{macrocode} % \end{variable} % @@ -327,6 +343,146 @@ and the derived files duckuments.pdf, % \end{macrocode} % \end{variable} % +% \begin{variable}{\c_duckuments_example_pages_int} +% \begin{macrocode} +\str_if_eq:VnF \c_sys_jobname_str { example-image-duck } +{\file_if_exist:nTF { example-image-duck.pdf } + { + \sys_if_engine_pdftex:T + { + \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 } +% \end{macrocode} +% For \XeTeX\ we need a bit more code in order to get random numbers. The +% following is an implementation of RC4. First declare some variables: +% \begin{macrocode} + \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 } +% \end{macrocode} +% Initialize the S array: +% \begin{macrocode} + \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 + { + \int_gset:Nn #1 { \int_mod:nn { #1 + #2 } { #3 } } + } + \cs_generate_variant:Nn \duckuments_gadd_mod:Nnn { Nxn } + \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 } + { + \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 } + } + \int_gzero:N \g_duckuments_RCiv_i_int + \int_gzero:N \g_duckuments_RCiv_j_int +% \end{macrocode} +% Provide a function which gets the next random number and sets +% |\duckuments_random_page:| to it. +% \begin{macrocode} + \cs_new:Nn \duckuments_get_random_page: + { + \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 } + } + \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 } + } +% \end{macrocode} +% \end{variable} +% +% % \subsection{Options and Configurations} % \begin{macrocode} \keys_define:nn { duckuments } @@ -468,9 +624,9 @@ and the derived files duckuments.pdf, % % \begin{macro}{\duckumentsDrawRandomDucks} % \begin{macrocode} -\newcommand*\duckumentsDrawRandomDucks +\newcommand*\duckumentsDrawRandomDucks[1][\duckuments@randoms] {%>>> - \foreach\x in {1,2,...,\duckuments@randoms} + \foreach\x in {1,2,...,#1} {\begin{tikzpicture} \draw[black,fill=gray!50] (0,0) rectangle (6,4); \draw[gray,thin] (0,0) -- (6,4); @@ -567,8 +723,10 @@ and the derived files duckuments.pdf, { \regex_match:NnTF \c_duckuments_regex { ##3 } { + \duckuments_get_random_page: \duckuments@includegraphicsBAK##1 - [page=\int_rand:nn{1}{\duckuments@randoms},##2] { ##3 } + [page=\duckuments_random_page:,##2] + { ##3 } } { \duckuments@includegraphicsBAK##1[##2]{##3} diff --git a/Master/texmf-dist/tex/latex/duckuments/duckuments.sty b/Master/texmf-dist/tex/latex/duckuments/duckuments.sty index a18d45c81a1..52ad43ad908 100644 --- a/Master/texmf-dist/tex/latex/duckuments/duckuments.sty +++ b/Master/texmf-dist/tex/latex/duckuments/duckuments.sty @@ -31,17 +31,22 @@ %% example-image-duck.tex %% \RequirePackage{xparse,letltxmacro,l3keys2e} -\def\duckuments@version{v0.1} -\def\duckuments@date{2018/03/13} +\def\duckuments@version{v0.2} +\def\duckuments@date{2018/03/14} \ProvidesExplPackage {duckuments} {\duckuments@date} {\duckuments@version} {minimal working duckuments} -\bool_if:nF { \sys_if_engine_luatex_p: || \sys_if_engine_pdftex_p: } - { %>>> +\bool_if:nF + { + \sys_if_engine_luatex_p: + || \sys_if_engine_pdftex_p: + || \sys_if_engine_xetex_p: + } + {%>>> \msg_new:nnnn { duckuments } { incompatible } { - The~duckuments~package~is~currently~only~compatible~with~pdfTeX~and~ - LuaTeX! + The~duckuments~package~is~currently~only~compatible~with~pdfTeX,~ + LuaTeX,~and~XeTeX! } { Sorry~for~that. @@ -71,13 +76,136 @@ } } }%<<< -\newcommand*\duckuments@randoms{100} +\newcommand*\duckuments@randoms{128} \bool_new:N \l_duckuments_immediate_bool \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 { example-image-duck|example-image-duck.pdf } +\str_if_eq:VnF \c_sys_jobname_str { example-image-duck } +{\file_if_exist:nTF { example-image-duck.pdf } + { + \sys_if_engine_pdftex:T + { + \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 + { + \int_gset:Nn #1 { \int_mod:nn { #1 + #2 } { #3 } } + } + \cs_generate_variant:Nn \duckuments_gadd_mod:Nnn { Nxn } + \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 } + { + \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 } + } + \int_gzero:N \g_duckuments_RCiv_i_int + \int_gzero:N \g_duckuments_RCiv_j_int + \cs_new:Nn \duckuments_get_random_page: + { + \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 } + } + \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 } + } \keys_define:nn { duckuments } {%>>> ,toc .bool_set:N = \l_duckuments_toc_bool @@ -170,9 +298,9 @@ { \end{document} } \iow_close:N \duckuments_example_file_iow }%<<< -\newcommand*\duckumentsDrawRandomDucks +\newcommand*\duckumentsDrawRandomDucks[1][\duckuments@randoms] {%>>> - \foreach\x in {1,2,...,\duckuments@randoms} + \foreach\x in {1,2,...,#1} {\begin{tikzpicture} \draw[black,fill=gray!50] (0,0) rectangle (6,4); \draw[gray,thin] (0,0) -- (6,4); @@ -233,8 +361,10 @@ { \regex_match:NnTF \c_duckuments_regex { ##3 } { + \duckuments_get_random_page: \duckuments@includegraphicsBAK##1 - [page=\int_rand:nn{1}{\duckuments@randoms},##2] { ##3 } + [page=\duckuments_random_page:,##2] + { ##3 } } { \duckuments@includegraphicsBAK##1[##2]{##3} diff --git a/Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf b/Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf Binary files differindex 8e7e2e2bb1f..d602328399f 100644 --- a/Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf +++ b/Master/texmf-dist/tex/latex/duckuments/example-image-duck.pdf |