texlive[64655] Master/texmf-dist: ducksay (8oct22)

commits+karl at tug.org commits+karl at tug.org
Sat Oct 8 22:05:44 CEST 2022


Revision: 64655
          http://tug.org/svn/texlive?view=revision&revision=64655
Author:   karl
Date:     2022-10-08 22:05:44 +0200 (Sat, 08 Oct 2022)
Log Message:
-----------
ducksay (8oct22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/ducksay/README.md
    trunk/Master/texmf-dist/doc/latex/ducksay/ducksay.pdf
    trunk/Master/texmf-dist/source/latex/ducksay/ducksay.dtx
    trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.animals.tex
    trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.code.v1.tex
    trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.code.v2.tex
    trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.sty

Modified: trunk/Master/texmf-dist/doc/latex/ducksay/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/ducksay/README.md	2022-10-08 20:04:35 UTC (rev 64654)
+++ trunk/Master/texmf-dist/doc/latex/ducksay/README.md	2022-10-08 20:05:44 UTC (rev 64655)
@@ -9,7 +9,7 @@
 This work is "maintained" (as per LPPL maintenance status) by
   Jonathan P. Spratte.
 
-Copyright (C) 2017-2020 by Jonathan P. Spratte
+Copyright (C) 2017-2022 by Jonathan P. Spratte
 
 The package draws ASCII art of animals saying a specified message. The following
 macros are available:

Modified: trunk/Master/texmf-dist/doc/latex/ducksay/ducksay.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/ducksay/ducksay.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/ducksay/ducksay.dtx	2022-10-08 20:04:35 UTC (rev 64654)
+++ trunk/Master/texmf-dist/source/latex/ducksay/ducksay.dtx	2022-10-08 20:05:44 UTC (rev 64655)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% File: ducksay.dtx Copyright (C) 2017-2020 Jonathan P. Spratte
+% File: ducksay.dtx Copyright (C) 2017-2022 Jonathan P. Spratte
 %
 % This work  may be  distributed and/or  modified under  the conditions  of the
 % LaTeX Project Public License (LPPL),  either version 1.3c  of this license or
@@ -27,7 +27,7 @@
 See http://www.latex-project.org/lppl.txt
 --------------------------------------------------------------
 
-Copyright (C) 2017-2020 Jonathan P. Spratte
+Copyright (C) 2017-2022 Jonathan P. Spratte
 
 This  work may be  distributed and/or  modified under  the conditions  of the
 LaTeX Project Public License (LPPL),  either version 1.3c  of this license or
@@ -202,8 +202,8 @@
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{xparse,l3keys2e}
 
-\def\ducksay at version{2.5a}
-\def\ducksay at date{2020-10-29}
+\def\ducksay at version{2.6}
+\def\ducksay at date{2022-10-08}
 
 \ProvidesExplPackage
   {ducksay}           {\ducksay at date}
@@ -954,8 +954,11 @@
 %   {%
 %     \tiny
 %     \hfill
-%     \ducksay[sheep,MSG=\footnotesize,msg-align=c]
-%       {I'm woolly,\\I'm fluffy,\\and I'm all new!}
+%     \ducksay[platypus,MSG=\footnotesize,msg-align=c]
+%       {Quack?}\\
+%     \hspace*{1cm}%
+%     \ducksay[small-horse,MSG=\footnotesize,msg-align=c,body-mirrored]
+%       {Neigh, we're new!}
 %   }
 % The following animals are provided by this package. I did not create them (but
 % altered some), they belong to their original creators.
@@ -980,7 +983,9 @@
 %   ,dragon^^A
 %   ,sodomized^^A
 %   ,hedgehog^^A
+%   ,platypus^^A
 %   ,kangaroo^^A
+%   ,small-horse^^A
 %   ,dog^^A
 %   ,sheep^^A
 %   ,rabbit^^A
@@ -1638,6 +1643,8 @@
   }
 \msg_new:nnn { ducksay } { v1-key-only }
   { The~`\l_keys_key_tl`~key~is~only~available~for~`version=1`. }
+\msg_new:nnn { ducksay } { zero-baselineskip }
+  { Current~ baselineskip~ is~ 0pt. }
 %    \end{macrocode}
 %^^A=<<
 %
@@ -2006,138 +2013,175 @@
 % \begin{macro}[internal]{\ducksay_make_body_bigger:}^^A>>=
 %    \begin{macrocode}
 \cs_new:Npn \ducksay_make_body_bigger:
-  {
-    \int_step_function:nN \l_ducksay_body_bigger_int
-      \ducksay_make_body_bigger_aux:n
-  }
+  { \prg_replicate:nn \l_ducksay_body_bigger_int \\ }
 %    \end{macrocode}
 % \end{macro}^^A=<<
 %
-% \begin{macro}[internal]{\ducksay_make_body_bigger_aux:n}^^A>>=
+% \begin{macro}[internal]{\ducksay_baselineskip:}^^A>>=
+%   This is an overly cautious way to get the current baselineskip. Inside of
+%   \env{tabular} the baselineskip is 0pt, so we fall back to
+%   \cs[no-index]{normalbaselineskip}, or issue an error and fall back to some
+%   arbitrary value not producing an error if that one is also 0pt.
 %    \begin{macrocode}
-\cs_new:Npn \ducksay_make_body_bigger_aux:n #1
+\cs_new_protected_nopar:Npn \ducksay_baselineskip:
   {
-    \\
+    \the\dimexpr
+      \ifdim \baselineskip = \c_zero_dim
+        \ifdim \normalbaselineskip = \c_zero_dim
+          \msg_expandable_error:nn { ducksay } { zero-baselineskip } { 12pt }
+          12pt
+        \else
+          \normalbaselineskip
+        \fi
+      \else
+        \baselineskip
+      \fi
+    \relax
   }
 %    \end{macrocode}
 % \end{macro}^^A=<<
 %
-% \begin{macro}[internal]{\ducksay_shipout:}^^A>>=
+% \begin{macro}[internal]{\ducksay_measure_msg:}^^A>>=
 %    \begin{macrocode}
-\cs_new_protected:Npn \ducksay_shipout:
+\cs_new_protected_nopar:Npn \ducksay_measure_msg:
   {
-    \hcoffin_set:Nn \l_ducksay_msg_coffin { \box_use:N \l_ducksay_msg_box }
-    \bool_if:NF \l_ducksay_no_bubble_bool
+    \hbox_set:Nn \l_ducksay_tmpa_box
+      { \l_ducksay_bubble_fount_tl \l_ducksay_bubble_delim_top_tl }
+    \int_set:Nn \l_ducksay_msg_width_int
       {
-        \hbox_set:Nn \l_ducksay_tmpa_box
-          { \l_ducksay_bubble_fount_tl \l_ducksay_bubble_delim_top_tl }
-        \int_set:Nn \l_ducksay_msg_width_int
+        \fp_eval:n
           {
+            ceil
+              ( \box_wd:N \l_ducksay_msg_box / \box_wd:N \l_ducksay_tmpa_box )
+          }
+      }
+    \group_begin:
+    \l_ducksay_bubble_fount_tl
+    \exp_args:NNNx
+    \group_end:
+    \int_set:Nn \l_ducksay_msg_height_int
+      {
+        \int_max:nn
+          {
             \fp_eval:n
               {
                 ceil
                   (
-                    \box_wd:N \l_ducksay_msg_box / \box_wd:N \l_ducksay_tmpa_box
+                    (
+                      \box_ht:N \l_ducksay_msg_box
+                      + \box_dp:N \l_ducksay_msg_box
+                    )
+                    / ( \arraystretch * \ducksay_baselineskip: )
                   )
               }
+            + \l_ducksay_vpad_int
           }
-        \group_begin:
+          { \l_ducksay_msg_height_int }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}^^A=<<
+%
+% \begin{macro}[internal]{\ducksay_set_bubble_coffins:}^^A>>=
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \ducksay_set_bubble_coffins:
+  {
+    \hcoffin_set:Nn \l_ducksay_bubble_open_coffin
+      {
         \l_ducksay_bubble_fount_tl
-        \exp_args:NNNx
-        \group_end:
-        \int_set:Nn \l_ducksay_msg_height_int
-          {
-            \int_max:nn
-              {
-                \fp_eval:n
-                  {
-                    ceil
-                      (
-                        (
-                          \box_ht:N \l_ducksay_msg_box
-                          + \box_dp:N \l_ducksay_msg_box
-                        )
-                        / ( \arraystretch * \baselineskip )
-                      )
-                  }
-                + \l_ducksay_vpad_int
-              }
-              { \l_ducksay_msg_height_int }
-          }
-        \hcoffin_set:Nn \l_ducksay_bubble_open_coffin
-          {
-            \l_ducksay_bubble_fount_tl
-            \begin{tabular}{@{}l@{}}
-              \int_compare:nNnTF { \l_ducksay_msg_height_int } = { \c_one_int }
+        \begin{tabular}{@{}l@{}}
+          \int_compare:nNnTF { \l_ducksay_msg_height_int } = { \c_one_int }
+            {
+              \l_ducksay_bubble_delim_left_a_tl
+            }
+            {
+              \l_ducksay_bubble_delim_left_b_tl\\
+              \int_step_inline:nnn
+                { 3 } { \l_ducksay_msg_height_int }
                 {
-                  \l_ducksay_bubble_delim_left_a_tl
+                  \kern-\l_ducksay_bubble_side_kern_tl
+                  \l_ducksay_bubble_delim_left_c_tl
+                  \\
                 }
+              \l_ducksay_bubble_delim_left_d_tl
+            }
+        \end{tabular}
+      }
+    \hcoffin_set:Nn \l_ducksay_bubble_close_coffin
+      {
+        \l_ducksay_bubble_fount_tl
+        \begin{tabular}{@{}r@{}}
+          \int_compare:nNnTF { \l_ducksay_msg_height_int } = { \c_one_int }
+            {
+              \l_ducksay_bubble_delim_right_a_tl
+            }
+            {
+              \l_ducksay_bubble_delim_right_b_tl \\
+              \int_step_inline:nnn
+                { 3 } { \l_ducksay_msg_height_int }
                 {
-                  \l_ducksay_bubble_delim_left_b_tl\\
-                  \int_step_inline:nnn
-                    { 3 } { \l_ducksay_msg_height_int }
-                    {
-                      \kern-\l_ducksay_bubble_side_kern_tl
-                      \l_ducksay_bubble_delim_left_c_tl
-                      \\
-                    }
-                  \l_ducksay_bubble_delim_left_d_tl
+                  \l_ducksay_bubble_delim_right_c_tl
+                  \kern-\l_ducksay_bubble_side_kern_tl
+                  \\
                 }
-            \end{tabular}
-          }
-        \hcoffin_set:Nn \l_ducksay_bubble_close_coffin
-          {
-            \l_ducksay_bubble_fount_tl
-            \begin{tabular}{@{}r@{}}
-              \int_compare:nNnTF { \l_ducksay_msg_height_int } = { \c_one_int }
-                {
-                  \l_ducksay_bubble_delim_right_a_tl
-                }
-                {
-                  \l_ducksay_bubble_delim_right_b_tl \\
-                  \int_step_inline:nnn
-                    { 3 } { \l_ducksay_msg_height_int }
-                    {
-                      \l_ducksay_bubble_delim_right_c_tl
-                      \kern-\l_ducksay_bubble_side_kern_tl
-                      \\
-                    }
-                  \l_ducksay_bubble_delim_right_d_tl
-                }
-            \end{tabular}
-          }
-        \hcoffin_set:Nn \l_ducksay_bubble_top_coffin
-          {
-            \l_ducksay_bubble_fount_tl
-            \int_step_inline:nn
-              { \l_ducksay_msg_width_int + \l_ducksay_hpad_int }
-              { \l_ducksay_bubble_delim_top_tl }
-          }
-        \dim_set:Nn \l_ducksay_hpad_dim
-          {
-            (
-              \coffin_wd:N \l_ducksay_bubble_top_coffin
-              - \coffin_wd:N \l_ducksay_msg_coffin
-            ) / 2
-          }
-        \coffin_join:NnnNnnnn
-          \l_ducksay_msg_coffin         { l } { vc }
-          \l_ducksay_bubble_open_coffin { r } { vc }
-          { - \l_ducksay_hpad_dim } { \c_zero_dim }
-        \coffin_join:NnnNnnnn
-          \l_ducksay_msg_coffin          { r } { vc }
-          \l_ducksay_bubble_close_coffin { l } { vc }
-          { \l_ducksay_hpad_dim } { \c_zero_dim }
+              \l_ducksay_bubble_delim_right_d_tl
+            }
+        \end{tabular}
+      }
+    \hcoffin_set:Nn \l_ducksay_bubble_top_coffin
+      {
+        \l_ducksay_bubble_fount_tl
+        \int_step_inline:nn
+          { \l_ducksay_msg_width_int + \l_ducksay_hpad_int }
+          { \l_ducksay_bubble_delim_top_tl }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}^^A=<<
+%
+% \begin{macro}[internal]{\ducksay_join_bubble_to_msg_coffin:}^^A>>=
+%    \begin{macrocode}
+\cs_new_protected_nopar:Npn \ducksay_join_bubble_to_msg_coffin:
+  {
+    \dim_set:Nn \l_ducksay_hpad_dim
+      {
+        (
+          \coffin_wd:N \l_ducksay_bubble_top_coffin
+          - \coffin_wd:N \l_ducksay_msg_coffin
+        ) / 2
+      }
+    \coffin_join:NnnNnnnn
+      \l_ducksay_msg_coffin         { l } { vc }
+      \l_ducksay_bubble_open_coffin { r } { vc }
+      { - \l_ducksay_hpad_dim } { \c_zero_dim }
+    \coffin_join:NnnNnnnn
+      \l_ducksay_msg_coffin          { r } { vc }
+      \l_ducksay_bubble_close_coffin { l } { vc }
+      { \l_ducksay_hpad_dim } { \c_zero_dim }
+    \coffin_join:NnnNnnnn
+      \l_ducksay_msg_coffin        { hc } { t }
+      \l_ducksay_bubble_top_coffin { hc } { b }
+      { \c_zero_dim } { \l_ducksay_bubble_top_kern_dim }
+    \coffin_join:NnnNnnnn
+      \l_ducksay_msg_coffin        { hc } { b }
+      \l_ducksay_bubble_top_coffin { hc } { t }
+      { \c_zero_dim } { \l_ducksay_bubble_bottom_kern_dim }
+  }
+%    \end{macrocode}
+% \end{macro}^^A=<<
+%
+% \begin{macro}[internal]{\ducksay_shipout:}^^A>>=
+%    \begin{macrocode}
+\cs_new_protected:Npn \ducksay_shipout:
+  {
+    \hcoffin_set:Nn \l_ducksay_msg_coffin { \box_use:N \l_ducksay_msg_box }
+    \bool_if:NF \l_ducksay_no_bubble_bool
+      {
+        \ducksay_measure_msg:
+        \ducksay_set_bubble_coffins:
         \ducksay_set_bubble_top_kern:
         \ducksay_set_bubble_bottom_kern:
-        \coffin_join:NnnNnnnn
-          \l_ducksay_msg_coffin        { hc } { t }
-          \l_ducksay_bubble_top_coffin { hc } { b }
-          { \c_zero_dim } { \l_ducksay_bubble_top_kern_dim }
-        \coffin_join:NnnNnnnn
-          \l_ducksay_msg_coffin        { hc } { b }
-          \l_ducksay_bubble_top_coffin { hc } { t }
-          { \c_zero_dim } { \l_ducksay_bubble_bottom_kern_dim }
+        \ducksay_join_bubble_to_msg_coffin:
       }
     \bool_if:NF \l_ducksay_no_body_bool
       {
@@ -2714,6 +2758,20 @@
            (,   ,)    ,)
             `-_,---_,-'
               ||   ||}
+%^^A based on joe schmuck (http://www.ascii-art.de/ascii/pqr/platypus.txt)
+\AddAnimal[tail-symbol=s]{platypus}
+|  s          _.-^~~^^`~-,,,~~''```~-''``~'``~,
+    s ______,'  -o  :. _    .      ;     ,'`,  `.
+     (      -\.._,.;;'._,(   }    _`_-_,,    `, `,
+      ``~~~~~~'   ((/'(((____/~~'(,(,___>      `~'|
+\AddAnimal[tail-symbol=s]{small-horse}
+{  s   _,_
+    s /._ \\
+     /_/ |_\\ _ __
+         /  \\    \\
+         \ _ __ _ /||
+         | |   | | ||
+         | |   | |}
 %</animals>
 %    \end{macrocode}^^A=<<
 %^^A%^^A https://www.asciiart.eu/mythology/fairies

Modified: trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.animals.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.animals.tex	2022-10-08 20:04:35 UTC (rev 64654)
+++ trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.animals.tex	2022-10-08 20:05:44 UTC (rev 64655)
@@ -13,7 +13,7 @@
 %% See http://www.latex-project.org/lppl.txt
 %% --------------------------------------------------------------
 %% 
-%% Copyright (C) 2017-2020 Jonathan P. Spratte
+%% Copyright (C) 2017-2022 Jonathan P. Spratte
 %% 
 %% This  work may be  distributed and/or  modified under  the conditions  of the
 %% LaTeX Project Public License (LPPL),  either version 1.3c  of this license or
@@ -422,6 +422,19 @@
            (,   ,)    ,)
             `-_,---_,-'
               ||   ||}
+\AddAnimal[tail-symbol=s]{platypus}
+|  s          _.-^~~^^`~-,,,~~''```~-''``~'``~,
+    s ______,'  -o  :. _    .      ;     ,'`,  `.
+     (      -\.._,.;;'._,(   }    _`_-_,,    `, `,
+      ``~~~~~~'   ((/'(((____/~~'(,(,___>      `~'|
+\AddAnimal[tail-symbol=s]{small-horse}
+{  s   _,_
+    s /._ \\
+     /_/ |_\\ _ __
+         /  \\    \\
+         \ _ __ _ /||
+         | |   | | ||
+         | |   | |}
 %% 
 %%
 %% End of file `ducksay.animals.tex'.

Modified: trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.code.v1.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.code.v1.tex	2022-10-08 20:04:35 UTC (rev 64654)
+++ trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.code.v1.tex	2022-10-08 20:05:44 UTC (rev 64655)
@@ -13,7 +13,7 @@
 %% See http://www.latex-project.org/lppl.txt
 %% --------------------------------------------------------------
 %% 
-%% Copyright (C) 2017-2020 Jonathan P. Spratte
+%% Copyright (C) 2017-2022 Jonathan P. Spratte
 %% 
 %% This  work may be  distributed and/or  modified under  the conditions  of the
 %% LaTeX Project Public License (LPPL),  either version 1.3c  of this license or

Modified: trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.code.v2.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.code.v2.tex	2022-10-08 20:04:35 UTC (rev 64654)
+++ trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.code.v2.tex	2022-10-08 20:05:44 UTC (rev 64655)
@@ -13,7 +13,7 @@
 %% See http://www.latex-project.org/lppl.txt
 %% --------------------------------------------------------------
 %% 
-%% Copyright (C) 2017-2020 Jonathan P. Spratte
+%% Copyright (C) 2017-2022 Jonathan P. Spratte
 %% 
 %% This  work may be  distributed and/or  modified under  the conditions  of the
 %% LaTeX Project Public License (LPPL),  either version 1.3c  of this license or
@@ -47,6 +47,8 @@
   }
 \msg_new:nnn { ducksay } { v1-key-only }
   { The~`\l_keys_key_tl`~key~is~only~available~for~`version=1`. }
+\msg_new:nnn { ducksay } { zero-baselineskip }
+  { Current~ baselineskip~ is~ 0pt. }
 \tl_new:N \l_ducksay_msg_align_vbox_tl
 \box_new:N \l_ducksay_msg_box
 \bool_new:N \l_ducksay_eat_arg_box_bool
@@ -316,128 +318,146 @@
       { \dim_eval:n { \l_ducksay_bubble_bottom_kern_tl } }
   }
 \cs_new:Npn \ducksay_make_body_bigger:
+  { \prg_replicate:nn \l_ducksay_body_bigger_int \\ }
+\cs_new_protected_nopar:Npn \ducksay_baselineskip:
   {
-    \int_step_function:nN \l_ducksay_body_bigger_int
-      \ducksay_make_body_bigger_aux:n
+    \the\dimexpr
+      \ifdim \baselineskip = \c_zero_dim
+        \ifdim \normalbaselineskip = \c_zero_dim
+          \msg_expandable_error:nn { ducksay } { zero-baselineskip } { 12pt }
+          12pt
+        \else
+          \normalbaselineskip
+        \fi
+      \else
+        \baselineskip
+      \fi
+    \relax
   }
-\cs_new:Npn \ducksay_make_body_bigger_aux:n #1
+\cs_new_protected_nopar:Npn \ducksay_measure_msg:
   {
-    \\
-  }
-\cs_new_protected:Npn \ducksay_shipout:
-  {
-    \hcoffin_set:Nn \l_ducksay_msg_coffin { \box_use:N \l_ducksay_msg_box }
-    \bool_if:NF \l_ducksay_no_bubble_bool
+    \hbox_set:Nn \l_ducksay_tmpa_box
+      { \l_ducksay_bubble_fount_tl \l_ducksay_bubble_delim_top_tl }
+    \int_set:Nn \l_ducksay_msg_width_int
       {
-        \hbox_set:Nn \l_ducksay_tmpa_box
-          { \l_ducksay_bubble_fount_tl \l_ducksay_bubble_delim_top_tl }
-        \int_set:Nn \l_ducksay_msg_width_int
+        \fp_eval:n
           {
+            ceil
+              ( \box_wd:N \l_ducksay_msg_box / \box_wd:N \l_ducksay_tmpa_box )
+          }
+      }
+    \group_begin:
+    \l_ducksay_bubble_fount_tl
+    \exp_args:NNNx
+    \group_end:
+    \int_set:Nn \l_ducksay_msg_height_int
+      {
+        \int_max:nn
+          {
             \fp_eval:n
               {
                 ceil
                   (
-                    \box_wd:N \l_ducksay_msg_box / \box_wd:N \l_ducksay_tmpa_box
+                    (
+                      \box_ht:N \l_ducksay_msg_box
+                      + \box_dp:N \l_ducksay_msg_box
+                    )
+                    / ( \arraystretch * \ducksay_baselineskip: )
                   )
               }
+            + \l_ducksay_vpad_int
           }
-        \group_begin:
+          { \l_ducksay_msg_height_int }
+      }
+  }
+\cs_new_protected_nopar:Npn \ducksay_set_bubble_coffins:
+  {
+    \hcoffin_set:Nn \l_ducksay_bubble_open_coffin
+      {
         \l_ducksay_bubble_fount_tl
-        \exp_args:NNNx
-        \group_end:
-        \int_set:Nn \l_ducksay_msg_height_int
-          {
-            \int_max:nn
-              {
-                \fp_eval:n
-                  {
-                    ceil
-                      (
-                        (
-                          \box_ht:N \l_ducksay_msg_box
-                          + \box_dp:N \l_ducksay_msg_box
-                        )
-                        / ( \arraystretch * \baselineskip )
-                      )
-                  }
-                + \l_ducksay_vpad_int
-              }
-              { \l_ducksay_msg_height_int }
-          }
-        \hcoffin_set:Nn \l_ducksay_bubble_open_coffin
-          {
-            \l_ducksay_bubble_fount_tl
-            \begin{tabular}{@{}l@{}}
-              \int_compare:nNnTF { \l_ducksay_msg_height_int } = { \c_one_int }
+        \begin{tabular}{@{}l@{}}
+          \int_compare:nNnTF { \l_ducksay_msg_height_int } = { \c_one_int }
+            {
+              \l_ducksay_bubble_delim_left_a_tl
+            }
+            {
+              \l_ducksay_bubble_delim_left_b_tl\\
+              \int_step_inline:nnn
+                { 3 } { \l_ducksay_msg_height_int }
                 {
-                  \l_ducksay_bubble_delim_left_a_tl
+                  \kern-\l_ducksay_bubble_side_kern_tl
+                  \l_ducksay_bubble_delim_left_c_tl
+                  \\
                 }
+              \l_ducksay_bubble_delim_left_d_tl
+            }
+        \end{tabular}
+      }
+    \hcoffin_set:Nn \l_ducksay_bubble_close_coffin
+      {
+        \l_ducksay_bubble_fount_tl
+        \begin{tabular}{@{}r@{}}
+          \int_compare:nNnTF { \l_ducksay_msg_height_int } = { \c_one_int }
+            {
+              \l_ducksay_bubble_delim_right_a_tl
+            }
+            {
+              \l_ducksay_bubble_delim_right_b_tl \\
+              \int_step_inline:nnn
+                { 3 } { \l_ducksay_msg_height_int }
                 {
-                  \l_ducksay_bubble_delim_left_b_tl\\
-                  \int_step_inline:nnn
-                    { 3 } { \l_ducksay_msg_height_int }
-                    {
-                      \kern-\l_ducksay_bubble_side_kern_tl
-                      \l_ducksay_bubble_delim_left_c_tl
-                      \\
-                    }
-                  \l_ducksay_bubble_delim_left_d_tl
+                  \l_ducksay_bubble_delim_right_c_tl
+                  \kern-\l_ducksay_bubble_side_kern_tl
+                  \\
                 }
-            \end{tabular}
-          }
-        \hcoffin_set:Nn \l_ducksay_bubble_close_coffin
-          {
-            \l_ducksay_bubble_fount_tl
-            \begin{tabular}{@{}r@{}}
-              \int_compare:nNnTF { \l_ducksay_msg_height_int } = { \c_one_int }
-                {
-                  \l_ducksay_bubble_delim_right_a_tl
-                }
-                {
-                  \l_ducksay_bubble_delim_right_b_tl \\
-                  \int_step_inline:nnn
-                    { 3 } { \l_ducksay_msg_height_int }
-                    {
-                      \l_ducksay_bubble_delim_right_c_tl
-                      \kern-\l_ducksay_bubble_side_kern_tl
-                      \\
-                    }
-                  \l_ducksay_bubble_delim_right_d_tl
-                }
-            \end{tabular}
-          }
-        \hcoffin_set:Nn \l_ducksay_bubble_top_coffin
-          {
-            \l_ducksay_bubble_fount_tl
-            \int_step_inline:nn
-              { \l_ducksay_msg_width_int + \l_ducksay_hpad_int }
-              { \l_ducksay_bubble_delim_top_tl }
-          }
-        \dim_set:Nn \l_ducksay_hpad_dim
-          {
-            (
-              \coffin_wd:N \l_ducksay_bubble_top_coffin
-              - \coffin_wd:N \l_ducksay_msg_coffin
-            ) / 2
-          }
-        \coffin_join:NnnNnnnn
-          \l_ducksay_msg_coffin         { l } { vc }
-          \l_ducksay_bubble_open_coffin { r } { vc }
-          { - \l_ducksay_hpad_dim } { \c_zero_dim }
-        \coffin_join:NnnNnnnn
-          \l_ducksay_msg_coffin          { r } { vc }
-          \l_ducksay_bubble_close_coffin { l } { vc }
-          { \l_ducksay_hpad_dim } { \c_zero_dim }
+              \l_ducksay_bubble_delim_right_d_tl
+            }
+        \end{tabular}
+      }
+    \hcoffin_set:Nn \l_ducksay_bubble_top_coffin
+      {
+        \l_ducksay_bubble_fount_tl
+        \int_step_inline:nn
+          { \l_ducksay_msg_width_int + \l_ducksay_hpad_int }
+          { \l_ducksay_bubble_delim_top_tl }
+      }
+  }
+\cs_new_protected_nopar:Npn \ducksay_join_bubble_to_msg_coffin:
+  {
+    \dim_set:Nn \l_ducksay_hpad_dim
+      {
+        (
+          \coffin_wd:N \l_ducksay_bubble_top_coffin
+          - \coffin_wd:N \l_ducksay_msg_coffin
+        ) / 2
+      }
+    \coffin_join:NnnNnnnn
+      \l_ducksay_msg_coffin         { l } { vc }
+      \l_ducksay_bubble_open_coffin { r } { vc }
+      { - \l_ducksay_hpad_dim } { \c_zero_dim }
+    \coffin_join:NnnNnnnn
+      \l_ducksay_msg_coffin          { r } { vc }
+      \l_ducksay_bubble_close_coffin { l } { vc }
+      { \l_ducksay_hpad_dim } { \c_zero_dim }
+    \coffin_join:NnnNnnnn
+      \l_ducksay_msg_coffin        { hc } { t }
+      \l_ducksay_bubble_top_coffin { hc } { b }
+      { \c_zero_dim } { \l_ducksay_bubble_top_kern_dim }
+    \coffin_join:NnnNnnnn
+      \l_ducksay_msg_coffin        { hc } { b }
+      \l_ducksay_bubble_top_coffin { hc } { t }
+      { \c_zero_dim } { \l_ducksay_bubble_bottom_kern_dim }
+  }
+\cs_new_protected:Npn \ducksay_shipout:
+  {
+    \hcoffin_set:Nn \l_ducksay_msg_coffin { \box_use:N \l_ducksay_msg_box }
+    \bool_if:NF \l_ducksay_no_bubble_bool
+      {
+        \ducksay_measure_msg:
+        \ducksay_set_bubble_coffins:
         \ducksay_set_bubble_top_kern:
         \ducksay_set_bubble_bottom_kern:
-        \coffin_join:NnnNnnnn
-          \l_ducksay_msg_coffin        { hc } { t }
-          \l_ducksay_bubble_top_coffin { hc } { b }
-          { \c_zero_dim } { \l_ducksay_bubble_top_kern_dim }
-        \coffin_join:NnnNnnnn
-          \l_ducksay_msg_coffin        { hc } { b }
-          \l_ducksay_bubble_top_coffin { hc } { t }
-          { \c_zero_dim } { \l_ducksay_bubble_bottom_kern_dim }
+        \ducksay_join_bubble_to_msg_coffin:
       }
     \bool_if:NF \l_ducksay_no_body_bool
       {

Modified: trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.sty	2022-10-08 20:04:35 UTC (rev 64654)
+++ trunk/Master/texmf-dist/tex/latex/ducksay/ducksay.sty	2022-10-08 20:05:44 UTC (rev 64655)
@@ -13,7 +13,7 @@
 %% See http://www.latex-project.org/lppl.txt
 %% --------------------------------------------------------------
 %% 
-%% Copyright (C) 2017-2020 Jonathan P. Spratte
+%% Copyright (C) 2017-2022 Jonathan P. Spratte
 %% 
 %% This  work may be  distributed and/or  modified under  the conditions  of the
 %% LaTeX Project Public License (LPPL),  either version 1.3c  of this license or
@@ -35,8 +35,8 @@
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{xparse,l3keys2e}
 
-\def\ducksay at version{2.5a}
-\def\ducksay at date{2020-10-29}
+\def\ducksay at version{2.6}
+\def\ducksay at date{2022-10-08}
 
 \ProvidesExplPackage
   {ducksay}           {\ducksay at date}



More information about the tex-live-commits mailing list.