summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/ducksay
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-09-21 21:06:08 +0000
committerKarl Berry <karl@freefriends.org>2018-09-21 21:06:08 +0000
commit0972697fc4429b971f75335c69d8a71b9999097e (patch)
tree6a2c508754362eee8c4e9be2f255da6f58d67529 /Master/texmf-dist/doc/latex/ducksay
parentc240d190fee85a0d263ff59264eaf1d7c5cdbdab (diff)
ducksay (21sep18)
git-svn-id: svn://tug.org/texlive/trunk@48720 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/ducksay')
-rw-r--r--Master/texmf-dist/doc/latex/ducksay/README.md5
-rw-r--r--Master/texmf-dist/doc/latex/ducksay/ducksay.animals.tex309
-rw-r--r--Master/texmf-dist/doc/latex/ducksay/ducksay.code.v1.tex159
-rw-r--r--Master/texmf-dist/doc/latex/ducksay/ducksay.code.v2.tex509
-rw-r--r--Master/texmf-dist/doc/latex/ducksay/ducksay.hd0
-rw-r--r--Master/texmf-dist/doc/latex/ducksay/ducksay.pdfbin227151 -> 483002 bytes
-rw-r--r--Master/texmf-dist/doc/latex/ducksay/ducksay.tex240
7 files changed, 980 insertions, 242 deletions
diff --git a/Master/texmf-dist/doc/latex/ducksay/README.md b/Master/texmf-dist/doc/latex/ducksay/README.md
index f1b338ddfc8..b498e2762d8 100644
--- a/Master/texmf-dist/doc/latex/ducksay/README.md
+++ b/Master/texmf-dist/doc/latex/ducksay/README.md
@@ -3,7 +3,7 @@ ducksay: cowsay for LaTeX
This package is distributed under the terms of GPLv3 or later, or the LPPL 1.3c
or later, which ever license fits your needs the best.
-Copyright (C) 2017 by Jonathan P. Spratte
+Copyright (C) 2017-2018 by Jonathan P. Spratte
The package draws ASCII art of animals saying a specified message. The following
macros are available:
@@ -17,4 +17,5 @@ macros are available:
`<ascii-art>` should be delimited either by matching braces or by the same
symbol and is read verbatim.
-Multi-line messages are supported but need to be manually created using `\\`.
+Multi-line messages are now fully supported. The package comes with two
+versions, choosable with the `version` key.
diff --git a/Master/texmf-dist/doc/latex/ducksay/ducksay.animals.tex b/Master/texmf-dist/doc/latex/ducksay/ducksay.animals.tex
new file mode 100644
index 00000000000..ce5cc6cbdb1
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ducksay/ducksay.animals.tex
@@ -0,0 +1,309 @@
+%%
+%% This is file `ducksay.animals.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ducksay.dtx (with options: `animals')
+%%
+%% --------------------------------------------------------------
+%% ducksay -- cowsay for LaTeX
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% --------------------------------------------------------------
+%%
+%% Copyright (C) 2017-2018 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
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% Alternatively you can use this work under the terms of the GNU General Public
+%% Licensce (GPL), version 3 or later, except that you might not redistribute it
+%% under the same name if you change its functionality. Choose which of these
+%% licenses fits your needs the best.
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the file ducksay.dtx
+%% and the derived files ducksay.pdf
+%% ducksay.sty
+%% ducksay.code.v1.tex
+%% ducksay.code.v2.tex and
+%% ducksay.animals.tex.
+%%
+\AddAnimal{duck}%>>>
+{ \
+ \ __
+ >(' )
+ )/
+ /(
+ / `----/
+ \ ~=- /
+ ~^~^~^~^~^~^~^}%<<<
+\AddAnimal{small-duck}%>>>
+{ \
+ \
+ >()_
+ (__)__ _}%<<<
+\AddAnimal{duck-family}%>>>
+{ \
+ \ __
+ >(' )
+ )/
+ /(
+ / `----/ -()_ >()_
+ __\__~=-_/__ _(__)__(__)__ _}%<<<
+\AddAnimal{cow}%>>>
+{ \ ^__^
+ \ (oo)\_______
+ (__)\ )\/\
+ ||----w |
+ || ||}%<<<
+\AddAnimal{head-in}%>>>
+{ \
+ \ ^__^ /
+ (oo)\_______/ ________
+ (__)\ )=( ___|_ \____
+ ||----w | \ \ \____ |
+ || || || ||}%<<<
+\AddAnimal{sodomized}%>>>
+{ \ _
+ \ (_)
+ ^__^ / \
+ (oo)\_____/_\ \
+ (__)\ ) /
+ ||----w ((
+ || ||>>}%<<<
+\AddAnimal{tux}%>>>
+{ \
+ \ .--.
+ |o_o |
+ |\_/ |
+ // \ \
+ (| | )
+ /'\_ _/`\
+ \___)=(___/}%<<<
+\AddAnimal{pig}%>>>
++ \ _//| .-~~~-.
+ \ _/oo } }-@
+ ('')_ } |
+ `--'| { }--{ }
+ //_/ /_/+%<<<
+\AddAnimal{frog}%>>>
+{ \
+ \ (.)_(.)
+ _ ( _ ) _
+ / \/`-----'\/ \
+ __\ ( ( ) ) /__
+ ) /\ \._./ /\ (
+ )_/ /|\ /|\ \_(}%<<<
+\AddAnimal{snowman}%>>>
+{ \
+ \_[_]_
+ (")
+ >-( : )-<
+ (__:__)}%<<<
+\AddAnimal{hedgehog}%>>>
+{ \ .\|//||\||.
+ \ |/\/||/|//|/|
+ /. `|/\\|/||/||
+ o__,_|//|/||\||'}%<<<
+\AddAnimal{kangaroo}%>>>
+{ \
+ \ _,' ___
+ <__\__/ \
+ \_ / _\
+ \,\ / \\
+ // \\
+ ,/' `\_,}%<<<
+\AddAnimal{rabbit}%>>>
+{ \ / \`\ __
+ \ | \ `\ /`/ \
+ \ \_/`\ \-"-/` /\ \
+ | | \ |
+ (d b) \_/
+ / \
+ ,".|.'.\_/.'.|.",
+ / /\' _|_ '/\ \
+ | / '-`"`-' \ |
+ | | | |
+ | \ \ / / |
+ \ \ \ / / /
+ `"`\ : /'"`
+ `""`""`}%<<<
+\AddAnimal{bunny}%>>>
+{ \
+ \ /
+ /\ /
+ ( )
+ .( o ).}%<<<
+\AddAnimal{small-rabbit}%>>>
+{ \
+ \ _//
+ (')---.
+ _/-_( )o}%<<<
+\AddAnimal{dragon}%>>>
+{ \ / \ //\
+ \ |\___/| / \// \\
+ \ /0 0 \__ / // | \ \
+ / / \/_/ // | \ \
+ @_^_@'/ \/_ // | \ \
+ //_^_/ \/_ // | \ \
+ ( //) | \/// | \ \
+ ( / /) _|_ / ) // | \ _\
+ ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-.
+ (( / / )) ,-{ _ `-.|.-~-. .~ `.
+ (( // / )) '/\ / ~-. _ .-~ .-~^-. \
+ (( /// )) `. { } / \ \
+ (( / )) .----~-.\ \-' .~ \ `. \^-.
+ ///.----..> \ _ -~ `. ^-` ^-_
+ ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~
+ /.-~}%<<<
+\AddAnimal{dog}%>>>
+{ \ __
+ \ .-'\/\
+ "\ '------.
+ ___/ ( .'_____
+ '-----'"""'------"""""'}%<<<
+\AddAnimal{squirrel}%>>>
+{ \ ,;:;;,
+ \ , ;;;;;
+ .=', ;:;;:,
+ /_', "=. ';:;:;
+ @=:__, \,;:;:'
+ _(\.= ;:;;'
+ `"_( _/="`
+ `"'``}%<<<
+\AddAnimal{snail}%>>>
+{ \
+ \ .-""-.
+ oo ; .-. :
+ \\__..-: '.__.')._
+ "-._.._'.__.-'_.."}%<<<
+\AddAnimal{unicorn}%>>>
+{ \
+ \ /((((((\\\\
+ ---====((((((((((\\\\\
+ (( \\\\\\\
+ ( (* _/ \\\\\\\
+ \ / \ \\\\\\_ __,,__
+ | | | </ "------"" ((\\\\
+ o_| / / \ \\\\ \\\\\\\
+ | ._ ( \ \\\\\\\\\\\\\\\\
+ | / / / \\\\\\\ \\
+ .______/\/ / / / \\\
+ / __.____/ _/ ___----( /\
+ / / / ________/:______,---' \ / \_
+ / / \ \ \ \ \_ \
+ ( < \ \ > / \ \
+ \/ \\_ / / > )
+ \_| / / / /
+ _// _//
+ /_| /_|}%<<<
+\AddAnimal{whale}%>>>
+{ \ |-.
+ \ .-""-._ \ \.--|
+ \ / `-..__) ,-'
+ | . /
+ \--.__, .__.,'
+ `-.___'._\_.'}%<<<
+\AddAnimal{yoda}%>>>
+{ \
+ \ ____
+ \ _.' : `._
+ .-.'`. ; .'`.-.
+ __ / : ___\ ; /___ ; \ __
+ ,'_ ""--.:__;".-.";: :".-.":__;.--"" _`,
+ :' `.t""--.. '<@.`;_ ',@>` ..--""j.' `;
+ `:-.._J '-.-'L__ `-- ' L_..-;'
+ "-.__ ; .-" "-. : __.-"
+ L ' /.------.\ ' J
+ "-. "--" .-"
+ __.l"-:_JL_;-";.__
+ .-j/'.; ;"""" / .'\"-.
+ .' /:`. : : /.".''; `.
+ .-" / ;`.". : ."." : "-.
+ .+"-. : : ".".". ."." ;-._ \
+ ; \ `.; ; . "."-"." : : "+. ;
+ : ; ; ; . ."." ; : ; : \:
+ ; : ; : / / / , ;: ; :
+: \ ; : ; ; / : , : ; / ::
+; ; : ; : ; ; ; ; : ;:
+: : ; : ;. ; ' : : ; : ;
+;\ : ; : . , ; ; ; ;
+: `."-; : ; . ; : ; / ;
+ ; -: ; : , , ; : .-" :
+ :\ \ : ; , : \.-" :
+ ;`. \ ; : . , ;.'_..-- / ;
+ : "-. "-: ; , :/." .' :
+ \ \ : : ;/ __ :
+ \ .-`.\ /t-"" ":-+. :
+ `. .-" `l __/ /`. : ; ; \ ;
+ \ .-" .-"-.-" .' .'j \ / ;/
+ \ / .-" /. .'.' ;_:' ;
+ :-""-.`./-.' / `.___.'
+ \ `t ._ /
+ "-.t-._:'}%<<<
+\AddAnimal{yoda-head}%>>>
+{ \
+ \ ____
+ \ _.' : `._
+ .-.'`. ; .'`.-.
+ __ / : ___\ ; /___ ; \ __
+ ,'_ ""--.:__;".-.";: :".-.":__;.--"" _`,
+ :' `.t""--.. '<@.`;_ ',@>` ..--""j.' `;
+ `:-.._J '-.-'L__ `-- ' L_..-;'
+ "-.__ ; .-" "-. : __.-"
+ L ' /.------.\ ' J
+ "-. "--" .-"
+ __.l"-:_JL_;-";.__
+ .-j/'.; ;"""" / .'\"-.
+ .' /:`. : : /.".''; `.
+ .-" / ;`.". : ."." : "-.
+ .+"-. : : ".".". ."." ;-._ \}%<<<
+\AddAnimal{small-yoda}%>>>
+{ \
+ \
+ __.-._
+ '-._"7'
+ /'.-c
+ | /T
+ _)_/LI}%<<<
+\AddAnimal{r2d2}%>>>
+{ \
+ \ ,-----.
+ ,'_/_|_\_`.
+ /<<::8[O]::>\
+ _|-----------|_
+ | | ====-=- | |
+ | | -=-==== | |
+ \ | ::::|()|| /
+ | | ....|()|| |
+ | |_________| |
+ | |\_______/| |
+ / \ / \ / \
+ `---' `---' `---'}%<<<
+\AddAnimal{vader}%>>>
+{ \ _.-'~~~~~~`-._
+ \ / || \
+ / || \
+ | || |
+ | _______||_______ |
+ |/ ----- \/ ----- \|
+ / ( ) ( ) \
+ / \ ----- () ----- / \
+ / \ /||\ / \
+ / \ /||||\ / \
+ / \ /||||||\ / \
+/_ \O========O/ _\
+ `--...__|`-._ _.-'|__...--'
+ | `' |}%<<<
+%%
+%%
+%% End of file `ducksay.animals.tex'.
diff --git a/Master/texmf-dist/doc/latex/ducksay/ducksay.code.v1.tex b/Master/texmf-dist/doc/latex/ducksay/ducksay.code.v1.tex
new file mode 100644
index 00000000000..b34e6d42784
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ducksay/ducksay.code.v1.tex
@@ -0,0 +1,159 @@
+%%
+%% This is file `ducksay.code.v1.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ducksay.dtx (with options: `code.v1')
+%%
+%% --------------------------------------------------------------
+%% ducksay -- cowsay for LaTeX
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% --------------------------------------------------------------
+%%
+%% Copyright (C) 2017-2018 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
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% Alternatively you can use this work under the terms of the GNU General Public
+%% Licensce (GPL), version 3 or later, except that you might not redistribute it
+%% under the same name if you change its functionality. Choose which of these
+%% licenses fits your needs the best.
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the file ducksay.dtx
+%% and the derived files ducksay.pdf
+%% ducksay.sty
+%% ducksay.code.v1.tex
+%% ducksay.code.v2.tex and
+%% ducksay.animals.tex.
+%%
+\cs_new:Npn \ducksay_longest_line:n #1
+ {
+ \int_incr:N \l_ducksay_msg_height_int
+ \exp_args:NNx \tl_set:Nn \l_ducksay_tmpa_tl { #1 }
+ \regex_replace_all:nnN { \s } { \c { space } } \l_ducksay_tmpa_tl
+ \int_set:Nn \l_ducksay_msg_width_int
+ {
+ \int_max:nn
+ { \l_ducksay_msg_width_int } { \tl_count:N \l_ducksay_tmpa_tl }
+ }
+ }
+\cs_new:Npn \ducksay_open_bubble:
+ {
+ \begin{tabular}{@{}l@{}}
+ \null\\
+ \int_compare:nNnTF { \l_ducksay_msg_height_int } = { 1 } { ( }
+ {
+ /
+ \int_step_inline:nnn
+ { 3 } { \l_ducksay_msg_height_int } { \\\kern-0.2em| }
+ \\\detokenize{\ }
+ }
+ \\[-1ex]\null
+ \end{tabular}
+ \begin{tabular}{@{}l@{}}
+ _\\
+ \int_step_inline:nnn { 2 } { \l_ducksay_msg_height_int } { \\ } \\[-1ex]
+ \mbox { - }
+ \end{tabular}
+ }
+\cs_new:Npn \ducksay_close_bubble:
+ {
+ \begin{tabular}{@{}l@{}}
+ _\\
+ \int_step_inline:nnn { 2 } { \l_ducksay_msg_height_int } { \\ } \\[-1ex]
+ { - }
+ \end{tabular}
+ \begin{tabular}{@{}r@{}}
+ \null\\
+ \int_compare:nNnTF { \l_ducksay_msg_height_int } = { 1 }
+ { ) }
+ {
+ \detokenize {\ }
+ \int_step_inline:nnn
+ { 3 } { \l_ducksay_msg_height_int } { \\|\kern-0.2em }
+ \\/
+ }
+ \\[-1ex]\null
+ \end{tabular}
+ }
+\cs_new:Npn \ducksay_print_msg:nn #1 #2
+ {
+ \begin{tabular}{@{} #2 @{}}
+ \int_step_inline:nn { \l_ducksay_msg_width_int } { _ } \\
+ #1\\[-1ex]
+ \int_step_inline:nn { \l_ducksay_msg_width_int } { { - } }
+ \end{tabular}
+ }
+\cs_generate_variant:Nn \ducksay_print_msg:nn { nV }
+\cs_new:Npn \ducksay_print:nn #1 #2
+ {
+ \int_compare:nNnTF { \l_ducksay_msg_width_int } < { 0 }
+ {
+ \int_zero:N \l_ducksay_msg_height_int
+ \seq_set_split:Nnn \l_ducksay_msg_lines_seq { \\ } { #1 }
+ \seq_map_function:NN \l_ducksay_msg_lines_seq \ducksay_longest_line:n
+ }
+ {
+ \int_compare:nNnT { \l_ducksay_msg_height_int } < { 0 }
+ {
+ \regex_count:nnN { \c { \\ } } { #1 } \l_ducksay_msg_height_int
+ \int_incr:N \l_ducksay_msg_height_int
+ }
+ }
+ \group_begin:
+ \frenchspacing
+ \verbatim@font
+ \@noligs
+ \begin{tabular}[\l_ducksay_align_tl]{@{}#2@{}}
+ \l_ducksay_bubble_tl
+ \begin{tabular}{@{}l@{}}
+ \ducksay_open_bubble:
+ \ducksay_print_msg:nV { #1 } \l_ducksay_msg_align_tl
+ \ducksay_close_bubble:
+ \end{tabular}\\
+ \l_ducksay_body_tl
+ \begin{tabular}{@{}l@{}}
+ \l_ducksay_animal_tl
+ \end{tabular}
+ \end{tabular}
+ \group_end:
+ }
+\cs_generate_variant:Nn \ducksay_print:nn { nV }
+\cs_new:Npn \ducksay_prepare_say_and_think:n #1
+ {
+ \int_set:Nn \l_ducksay_msg_width_int { -\c_max_int }
+ \int_set:Nn \l_ducksay_msg_height_int { -\c_max_int }
+ \keys_set:nn { ducksay } { #1 }
+ \tl_if_empty:NT \l_ducksay_animal_tl
+ { \keys_set:nn { ducksay } { default_animal } }
+ }
+\NewDocumentCommand \ducksay { O{} m }
+ {
+ \group_begin:
+ \tl_set:Nn \l_ducksay_say_or_think_tl { say }
+ \ducksay_prepare_say_and_think:n { #1 }
+ \ducksay_print:nV { #2 } \l_ducksay_rel_align_tl
+ \group_end:
+ }
+\NewDocumentCommand \duckthink { O{} m }
+ {
+ \group_begin:
+ \tl_set:Nn \l_ducksay_say_or_think_tl { think }
+ \ducksay_prepare_say_and_think:n { #1 }
+ \ducksay_print:nV { #2 } \l_ducksay_rel_align_tl
+ \group_end:
+ }
+%%
+%%
+%% End of file `ducksay.code.v1.tex'.
diff --git a/Master/texmf-dist/doc/latex/ducksay/ducksay.code.v2.tex b/Master/texmf-dist/doc/latex/ducksay/ducksay.code.v2.tex
new file mode 100644
index 00000000000..df1e7f870b2
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ducksay/ducksay.code.v2.tex
@@ -0,0 +1,509 @@
+%%
+%% This is file `ducksay.code.v2.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ducksay.dtx (with options: `code.v2')
+%%
+%% --------------------------------------------------------------
+%% ducksay -- cowsay for LaTeX
+%% E-mail: jspratte@yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% --------------------------------------------------------------
+%%
+%% Copyright (C) 2017-2018 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
+%% (at your option) any later version. The latest version of this license is in
+%% the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% Alternatively you can use this work under the terms of the GNU General Public
+%% Licensce (GPL), version 3 or later, except that you might not redistribute it
+%% under the same name if you change its functionality. Choose which of these
+%% licenses fits your needs the best.
+%%
+%% This work is "maintained" (as per LPPL maintenance status) by
+%% Jonathan P. Spratte.
+%%
+%% This work consists of the file ducksay.dtx
+%% and the derived files ducksay.pdf
+%% ducksay.sty
+%% ducksay.code.v1.tex
+%% ducksay.code.v2.tex and
+%% ducksay.animals.tex.
+%%
+\RequirePackage{array}
+\msg_new:nnn { ducksay } { justify~unavailable }
+ {
+ Justified~content~is~not~available~for~tabular~argument~mode~without~fixed~
+ width.~`l`~column~is~used~instead.
+ }
+\msg_new:nnn { ducksay } { unknown~message~alignment }
+ {
+ The~specified~message~alignment~`\exp_not:n { #1 }`~is~unknown.~
+ `l`~is~used~as~fallback.
+ }
+\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
+\bool_new:N \l_ducksay_eat_arg_tab_verb_bool
+\bool_new:N \l_ducksay_mirrored_body_bool
+\coffin_new:N \l_ducksay_body_coffin
+\coffin_new:N \l_ducksay_bubble_close_coffin
+\coffin_new:N \l_ducksay_bubble_open_coffin
+\coffin_new:N \l_ducksay_bubble_top_coffin
+\coffin_new:N \l_ducksay_msg_coffin
+\dim_new:N \l_ducksay_hpad_dim
+\dim_new:N \l_ducksay_bubble_bottom_kern_dim
+\dim_new:N \l_ducksay_bubble_top_kern_dim
+\dim_new:N \l_ducksay_msg_width_dim
+\keys_define:nn { ducksay }
+ {
+ ,arg .choice:
+ ,arg / box .code:n = \bool_set_true:N \l_ducksay_eat_arg_box_bool
+ ,arg / tab .code:n =
+ {
+ \bool_set_false:N \l_ducksay_eat_arg_box_bool
+ \bool_set_false:N \l_ducksay_eat_arg_tab_verb_bool
+ }
+ ,arg / tab* .code:n =
+ {
+ \bool_set_false:N \l_ducksay_eat_arg_box_bool
+ \bool_set_true:N \l_ducksay_eat_arg_tab_verb_bool
+ }
+ ,arg .initial:n = tab
+ ,wd* .dim_set:N = \l_ducksay_msg_width_dim
+ ,wd* .initial:n = -\c_max_dim
+ ,wd* .value_required:n = true
+ ,none .bool_set:N = \l_ducksay_no_body_bool
+ ,body-mirrored .bool_set:N = \l_ducksay_mirrored_body_bool
+ ,ignore-body .bool_set:N = \l_ducksay_ignored_body_bool
+ ,body-x .dim_set:N = \l_ducksay_body_x_offset_dim
+ ,body-x .value_required:n = true
+ ,body-y .dim_set:N = \l_ducksay_body_y_offset_dim
+ ,body-y .value_required:n = true
+ ,body-to-msg .tl_set:N = \l_ducksay_body_to_msg_align_body_tl
+ ,msg-to-body .tl_set:N = \l_ducksay_body_to_msg_align_msg_tl
+ ,body-align .choice:
+ ,body-align / l .meta:n = { body-to-msg = l , msg-to-body = l }
+ ,body-align / c .meta:n = { body-to-msg = hc , msg-to-body = hc }
+ ,body-align / r .meta:n = { body-to-msg = r , msg-to-body = r }
+ ,body-align .initial:n = l
+ ,msg-align .choice:
+ ,msg-align / l .code:n = { \tl_set:Nn \l_ducksay_msg_align_tl { l } }
+ ,msg-align / c .code:n = { \tl_set:Nn \l_ducksay_msg_align_tl { c } }
+ ,msg-align / r .code:n = { \tl_set:Nn \l_ducksay_msg_align_tl { r } }
+ ,msg-align / j .code:n = { \tl_set:Nn \l_ducksay_msg_align_tl { j } }
+ ,msg-align-l .tl_set:N = \l_ducksay_msg_align_l_tl
+ ,msg-align-l .initial:n = \raggedright
+ ,msg-align-c .tl_set:N = \l_ducksay_msg_align_c_tl
+ ,msg-align-c .initial:n = \centering
+ ,msg-align-r .tl_set:N = \l_ducksay_msg_align_r_tl
+ ,msg-align-r .initial:n = \raggedleft
+ ,msg-align-j .tl_set:N = \l_ducksay_msg_align_j_tl
+ ,msg-align-j .initial:n = {}
+ ,out-h .tl_set:N = \l_ducksay_output_h_pole_tl
+ ,out-h .initial:n = l
+ ,out-v .tl_set:N = \l_ducksay_output_v_pole_tl
+ ,out-v .initial:n = vc
+ ,out-x .dim_set:N = \l_ducksay_output_x_offset_dim
+ ,out-x .value_required:n = true
+ ,out-y .dim_set:N = \l_ducksay_output_y_offset_dim
+ ,out-y .value_required:n = true
+ ,t .meta:n = { out-v = t }
+ ,c .meta:n = { out-v = vc }
+ ,b .meta:n = { out-v = b }
+ ,body* .tl_set:N = \l_ducksay_body_fount_tl
+ ,msg* .tl_set:N = \l_ducksay_msg_fount_tl
+ ,bubble* .tl_set:N = \l_ducksay_bubble_fount_tl
+ ,body* .initial:n = \verbatim@font
+ ,msg* .initial:n = \verbatim@font
+ ,bubble* .initial:n = \verbatim@font
+ ,body .code:n = \tl_put_right:Nn \l_ducksay_body_fount_tl { #1 }
+ ,msg .code:n = \tl_put_right:Nn \l_ducksay_msg_fount_tl { #1 }
+ ,bubble .code:n = \tl_put_right:Nn \l_ducksay_bubble_fount_tl { #1 }
+ ,MSG .meta:n = { msg = #1 , bubble = #1 }
+ ,MSG* .meta:n = { msg* = #1 , bubble* = #1 }
+ ,hpad .int_set:N = \l_ducksay_hpad_int
+ ,hpad .initial:n = 2
+ ,hpad .value_required:n = true
+ ,vpad .int_set:N = \l_ducksay_vpad_int
+ ,vpad .value_required:n = true
+ ,col .tl_set:N = \l_ducksay_msg_tabular_column_tl
+ ,bubble-top-kern .tl_set:N = \l_ducksay_bubble_top_kern_tl
+ ,bubble-top-kern .initial:n = { -.5ex }
+ ,bubble-top-kern .value_required:n = true
+ ,bubble-bot-kern .tl_set:N = \l_ducksay_bubble_bottom_kern_tl
+ ,bubble-bot-kern .initial:n = { .2ex }
+ ,bubble-bot-kern .value_required:n = true
+ ,bubble-side-kern .tl_set:N = \l_ducksay_bubble_side_kern_tl
+ ,bubble-side-kern .initial:n = { 0.2em }
+ ,bubble-side-kern .value_required:n = true
+ ,bubble-delim-top .tl_set:N = \l_ducksay_bubble_delim_top_tl
+ ,bubble-delim-left-1 .tl_set:N = \l_ducksay_bubble_delim_left_a_tl
+ ,bubble-delim-left-2 .tl_set:N = \l_ducksay_bubble_delim_left_b_tl
+ ,bubble-delim-left-3 .tl_set:N = \l_ducksay_bubble_delim_left_c_tl
+ ,bubble-delim-left-4 .tl_set:N = \l_ducksay_bubble_delim_left_d_tl
+ ,bubble-delim-right-1 .tl_set:N = \l_ducksay_bubble_delim_right_a_tl
+ ,bubble-delim-right-2 .tl_set:N = \l_ducksay_bubble_delim_right_b_tl
+ ,bubble-delim-right-3 .tl_set:N = \l_ducksay_bubble_delim_right_c_tl
+ ,bubble-delim-right-4 .tl_set:N = \l_ducksay_bubble_delim_right_d_tl
+ ,bubble-delim-top .initial:n = { { - } }
+ ,bubble-delim-left-1 .initial:n = (
+ ,bubble-delim-left-2 .initial:n = /
+ ,bubble-delim-left-3 .initial:n = |
+ ,bubble-delim-left-4 .initial:n = \c_backslash_str
+ ,bubble-delim-right-1 .initial:n = )
+ ,bubble-delim-right-2 .initial:n = \c_backslash_str
+ ,bubble-delim-right-3 .initial:n = |
+ ,bubble-delim-right-4 .initial:n = /
+ }
+\cs_new:Npn \ducksay_evaluate_message_alignment_fixed_width_tabular:
+ {
+ \tl_if_empty:NT \l_ducksay_msg_tabular_column_tl
+ {
+ \tl_set:Nx \l_ducksay_msg_tabular_column_tl
+ {
+ >
+ {
+ \str_case:Vn \l_ducksay_msg_align_tl
+ {
+ { l } { \exp_not:N \l_ducksay_msg_align_l_tl }
+ { c } { \exp_not:N \l_ducksay_msg_align_c_tl }
+ { r } { \exp_not:N \l_ducksay_msg_align_r_tl }
+ { j } { \exp_not:N \l_ducksay_msg_align_j_tl }
+ }
+ \exp_not:N \arraybackslash
+ }
+ p { \exp_not:N \l_ducksay_msg_width_dim }
+ }
+ }
+ }
+\cs_new:Npn \ducksay_evaluate_message_alignment_fixed_width_vbox:
+ {
+ \tl_set:Nx \l_ducksay_msg_align_vbox_tl
+ {
+ \str_case:Vn \l_ducksay_msg_align_tl
+ {
+ { l } { \exp_not:N \l_ducksay_msg_align_l_tl }
+ { c } { \exp_not:N \l_ducksay_msg_align_c_tl }
+ { r } { \exp_not:N \l_ducksay_msg_align_r_tl }
+ { j } { \exp_not:N \l_ducksay_msg_align_j_tl }
+ }
+ }
+ }
+\cs_new:Npn \ducksay_calculate_msg_width_from_int:
+ {
+ \hbox_set:Nn \l_ducksay_tmpa_box { \l_ducksay_msg_fount_tl M }
+ \dim_set:Nn \l_ducksay_msg_width_dim
+ { \l_ducksay_msg_width_int \box_wd:N \l_ducksay_tmpa_box }
+ }
+\cs_new:Npn \ducksay_msg_tabular_begin:
+ {
+ \ducksay_msg_tabular_begin_inner:V \l_ducksay_msg_tabular_column_tl
+ }
+\cs_new:Npn \ducksay_msg_tabular_begin_inner:n #1
+ {
+ \begin { tabular } { @{} #1 @{} }
+ }
+\cs_generate_variant:Nn \ducksay_msg_tabular_begin_inner:n { V }
+\cs_new:Npn \ducksay_msg_tabular_end:
+ {
+ \end { tabular }
+ }
+\cs_new:Npn \ducksay_digest_options:n #1
+ {
+ \keys_set:nn { ducksay } { #1 }
+ \tl_if_empty:NT \l_ducksay_animal_tl
+ { \keys_set:nn { ducksay } { default_animal } }
+ \bool_if:NTF \l_ducksay_eat_arg_box_bool
+ {
+ \dim_compare:nNnTF { \l_ducksay_msg_width_dim } < { \c_zero_dim }
+ {
+ \int_compare:nNnTF { \l_ducksay_msg_width_int } < { \c_zero_int }
+ {
+ \cs_set_eq:NN
+ \ducksay_eat_argument:w \ducksay_eat_argument_hbox:w
+ }
+ {
+ \cs_set_eq:NN
+ \ducksay_eat_argument:w \ducksay_eat_argument_vbox:w
+ \ducksay_calculate_msg_width_from_int:
+ }
+ }
+ {
+ \cs_set_eq:NN \ducksay_eat_argument:w \ducksay_eat_argument_vbox:w
+ }
+ }
+ {
+ \dim_compare:nNnTF { \l_ducksay_msg_width_dim } < { \c_zero_dim }
+ {
+ \int_compare:nNnTF { \l_ducksay_msg_width_int } < { \c_zero_int }
+ {
+ \tl_if_empty:NT \l_ducksay_msg_tabular_column_tl
+ {
+ \str_case:Vn \l_ducksay_msg_align_tl
+ {
+ { l }
+ { \tl_set:Nn \l_ducksay_msg_tabular_column_tl { l } }
+ { c }
+ { \tl_set:Nn \l_ducksay_msg_tabular_column_tl { c } }
+ { r }
+ { \tl_set:Nn \l_ducksay_msg_tabular_column_tl { r } }
+ { j } {
+ \msg_error:nn { ducksay } { justify~unavailable }
+ \tl_set:Nn \l_ducksay_msg_tabular_column_tl { l }
+ }
+ }
+ }
+ }
+ {
+ \ducksay_calculate_msg_width_from_int:
+ \ducksay_evaluate_message_alignment_fixed_width_tabular:
+ }
+ }
+ {
+ \ducksay_evaluate_message_alignment_fixed_width_tabular:
+ }
+ \cs_set_eq:NN \ducksay_eat_argument:w \ducksay_eat_argument_tabular:w
+ }
+ }
+\cs_new:Npn \ducksay_set_bubble_top_kern:
+ {
+ \group_begin:
+ \l_ducksay_bubble_fount_tl
+ \exp_args:NNNx
+ \group_end:
+ \dim_set:Nn \l_ducksay_bubble_top_kern_dim
+ { \dim_eval:n { \l_ducksay_bubble_top_kern_tl } }
+ }
+\cs_new:Npn \ducksay_set_bubble_bottom_kern:
+ {
+ \group_begin:
+ \l_ducksay_bubble_fount_tl
+ \exp_args:NNNx
+ \group_end:
+ \dim_set:Nn \l_ducksay_bubble_bottom_kern_dim
+ { \dim_eval:n { \l_ducksay_bubble_bottom_kern_tl } }
+ }
+\cs_new_protected:Npn \ducksay_shipout:
+ {
+ \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_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 }
+ {
+ \l_ducksay_bubble_delim_left_a_tl
+ }
+ {
+ \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
+ }
+ \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 }
+ }
+ \hcoffin_set:Nn \l_ducksay_msg_coffin { \box_use:N \l_ducksay_msg_box }
+ \bool_if:NF \l_ducksay_no_body_bool
+ {
+ \hcoffin_set:Nn \l_ducksay_body_coffin
+ {
+ \frenchspacing
+ \l_ducksay_body_fount_tl
+ \begin{tabular} { @{} l @{} }
+ \l_ducksay_animal_tl
+ \end{tabular}
+ }
+ \bool_if:NT \l_ducksay_mirrored_body_bool
+ {
+ \coffin_scale:Nnn \l_ducksay_body_coffin
+ { -\c_one_int } { \c_one_int }
+ \str_case:Vn \l_ducksay_body_to_msg_align_body_tl
+ {
+ { l } { \tl_set:Nn \l_ducksay_body_to_msg_align_body_tl { r } }
+ { r } { \tl_set:Nn \l_ducksay_body_to_msg_align_body_tl { l } }
+ }
+ }
+ }
+ \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 }
+ \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 }
+ \bool_if:NF \l_ducksay_no_body_bool
+ {
+ \bool_if:NTF \l_ducksay_ignored_body_bool
+ { \coffin_attach:NVnNVnnn }
+ { \coffin_join:NVnNVnnn }
+ \l_ducksay_msg_coffin \l_ducksay_body_to_msg_align_msg_tl { b }
+ \l_ducksay_body_coffin \l_ducksay_body_to_msg_align_body_tl { t }
+ { \l_ducksay_body_x_offset_dim } { \l_ducksay_body_y_offset_dim }
+ }
+ \coffin_typeset:NVVnn \l_ducksay_msg_coffin
+ \l_ducksay_output_h_pole_tl \l_ducksay_output_v_pole_tl
+ { \l_ducksay_output_x_offset_dim } { \l_ducksay_output_y_offset_dim }
+ \group_end:
+ }
+\cs_new:Npn \ducksay_eat_argument_tabular:w
+ {
+ \bool_if:NTF \l_ducksay_eat_arg_tab_verb_bool
+ { \ducksay_eat_argument_tabular_verb:w }
+ { \ducksay_eat_argument_tabular_normal:w }
+ }
+\cs_new:Npn \ducksay_eat_argument_tabular_inner:w #1
+ {
+ \hbox_set:Nn \l_ducksay_msg_box
+ {
+ \l_ducksay_msg_fount_tl
+ \ducksay_msg_tabular_begin:
+ #1
+ \ducksay_msg_tabular_end:
+ }
+ \ducksay_shipout:
+ }
+\NewDocumentCommand \ducksay_eat_argument_tabular_verb:w
+ { >{ \ducksay_process_verb_newline:nnn { ~ } { ~ \par } } +v }
+ { \ducksay_eat_argument_tabular_inner:w { \scantokens { #1 } } }
+\NewDocumentCommand \ducksay_eat_argument_tabular_normal:w { +m }
+ { \ducksay_eat_argument_tabular_inner:w { #1 } }
+\cs_new_protected_nopar:Npn \ducksay_eat_argument_hbox:w
+ {
+ \afterassignment \ducksay_eat_argument_hbox_inner:w
+ \let \l_ducksay_nothing =
+ }
+\cs_new_protected_nopar:Npn \ducksay_eat_argument_hbox_inner:w
+ {
+ \setbox \l_ducksay_msg_box \hbox \c_group_begin_token
+ \group_insert_after:N \ducksay_shipout:
+ \l_ducksay_msg_fount_tl
+ }
+\cs_new_protected_nopar:Npn \ducksay_eat_argument_vbox:w
+ {
+ \ducksay_evaluate_message_alignment_fixed_width_vbox:
+ \afterassignment \ducksay_eat_argument_vbox_inner:w
+ \let \l_ducksay_nothing =
+ }
+\cs_new_protected_nopar:Npn \ducksay_eat_argument_vbox_inner:w
+ {
+ \setbox \l_ducksay_msg_box \vbox \c_group_begin_token
+ \hsize \l_ducksay_msg_width_dim
+ \group_insert_after:N \ducksay_shipout:
+ \l_ducksay_msg_fount_tl
+ \l_ducksay_msg_align_vbox_tl
+ \@afterindentfalse
+ \@afterheading
+ }
+\cs_generate_variant:Nn \coffin_join:NnnNnnnn { NVnNVnnn }
+\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { NVnNVnnn }
+\cs_generate_variant:Nn \coffin_typeset:Nnnnn { NVVnn }
+\cs_generate_variant:Nn \tl_if_eq:nnT { VnT }
+\cs_generate_variant:Nn \str_case:nn { Vn }
+\cs_generate_variant:Nn \regex_replace_all:NnN { Nnc }
+\NewDocumentCommand \ducksay { O{} }
+ {
+ \group_begin:
+ \tl_set:Nn \l_ducksay_say_or_think_tl { say }
+ \ducksay_digest_options:n { #1 }
+ \ducksay_eat_argument:w
+ }
+\NewDocumentCommand \duckthink { O{} }
+ {
+ \group_begin:
+ \tl_set:Nn \l_ducksay_say_or_think_tl { think }
+ \ducksay_digest_options:n { #1 }
+ \ducksay_eat_argument:w
+ }
+%%
+%%
+%% End of file `ducksay.code.v2.tex'.
diff --git a/Master/texmf-dist/doc/latex/ducksay/ducksay.hd b/Master/texmf-dist/doc/latex/ducksay/ducksay.hd
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/ducksay/ducksay.hd
diff --git a/Master/texmf-dist/doc/latex/ducksay/ducksay.pdf b/Master/texmf-dist/doc/latex/ducksay/ducksay.pdf
index a7aa86b68b1..cefc599336e 100644
--- a/Master/texmf-dist/doc/latex/ducksay/ducksay.pdf
+++ b/Master/texmf-dist/doc/latex/ducksay/ducksay.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/ducksay/ducksay.tex b/Master/texmf-dist/doc/latex/ducksay/ducksay.tex
deleted file mode 100644
index b03db19e2c0..00000000000
--- a/Master/texmf-dist/doc/latex/ducksay/ducksay.tex
+++ /dev/null
@@ -1,240 +0,0 @@
-%% This package is distributed under the terms of the GPLv3 or later, or the
-%% LPPL 1.3c or later, which ever license fits your needs the best.
-%%
-%% Copyright (C) 2017 by Jonathan P. Spratte
-%%
-%% This file is for documentation only
-\documentclass[a4paper,10pt]{article}
-
-%\usepackage[utf8]{inputenc}
-%\usepackage[T1]{fontenc}
-\usepackage[ligatures]{ducksay}
-\usepackage{multicol}
-\usepackage[colorlinks]{hyperref}
-\usepackage{lmodern}
-
-\makeatletter
-\newcommand*{\availableAnimal}[1]{\@for\cs:=#1\do{%
- \ifx\cs\@empty\else%
- \rlap{\expandafter\ducksay\expandafter[\cs]{\cs}}\hfill\mbox{}\\[1ex]%
- \fi%
-}}
-\makeatother
-\newcommand*{\anml}{\texttt{<animal>}}
-\newcommand*{\msg}{\texttt{<message>}}
-\newenvironment{codedescription}{%
- \parindent=-3em%
- \parskip=1em%
- \par%
-}{}
-
-\begin{document}
-\begin{titlepage}%>>>
- \makeatletter
- \centering
- %\mbox{}\vfill
- \Large
- \ducksay[duck,bubble=\huge,msg-align=c,wd=8]{This is\\ducksay!}\\
- \vfill
- \normalsize
- \hspace*{-2cm}
- \ducksay[cow,bubble=\large]{\ducksay@version}\\
- \small
- \vspace*{-5cm}\hspace*{5cm}
- \ducksay[small-duck,bubble=\normalsize]{But which Version?}
- \mbox{}\hfil
- \vspace{2cm}
- \vfill
- \vfill
- \hspace*{-0cm}
- \large
- \smash{%
- \ducksay[r2d2,bubble=\large]{by Jonathan P. Spratte}}
- \small
- \ducksay[hedgehog,bubble=\normalsize]{Today is \ducksay@date}
- \makeatother
-\end{titlepage}%<<<
-\tableofcontents
-\section{Macros}%>>>
-\marginpar{%
- \rlap{%
- \tiny\ducksay[yoda,bubble=\footnotesize,align=t]{Use those, you might}}}
-The following macros are available:
-
-\begin{codedescription}
-\verb|\ducksay[<options>]{<message>}|\\
- options might include any of the options described in
- \autoref{sec:options}. Prints an \anml\ saying \msg. \msg\ is not read in
- verbatim. Multi-line \msg s are possible using \verb|\\|. \verb|\\| should not
- be inside a macro but at toplevel. Else use the option \texttt{ht}.
-
-\verb|\duckthink[<options>]{<message>}|\\
- options might include any of the options described in
- \autoref{sec:options}. Prints an \anml\ thinking \msg. \msg\ is not read in
- verbatim. It is implemented using regular expressions replacing a \verb|\|
- which is only preceded by \verb|\s*| in the first three lines with \verb|O|
- and \verb|o|. It is therefore slower than \verb|\ducksay|. Multi-line \msg s
- are possible using \verb|\\|. \verb|\\| should not be inside a macro but at
- toplevel. Else use the option \texttt{ht}.
-
-\verb|\DefaultAnimal{<animal>}|\\
- use the \anml\ if none is given in the optional argument to \verb|\ducksay| or
- \verb|\duckthink|. Package default is \texttt{duck}.
-
-\verb|\DucksayOptions{<options>}|\\
- set the defaults to the keys described in \autoref{sec:options}. Don't use an
- \anml\ here, it has no effect.
-
-\verb|\AddAnimal(*){<animal>}<ascii-art>|\\
- adds \anml\ to the known animals. \texttt{<ascii-art>} is multi-line verbatim
- and therefore should be delimited either by matching braces or by anything
- that works for \verb|\verb|. If the star is given \anml\ is the new default.
- One space is added to the begin of \anml\ (compensating the opening symbol).
- For example, snowman is added with:\\[1ex]
- \begin{minipage}{\linewidth}
-\begin{verbatim}
-\AddAnimal{snowman}
-{ \
- \_[_]_
- (")
- >-( : )-<
- (__:__)}
-\end{verbatim}
- \end{minipage}
-\end{codedescription}
-%<<<
-\section{Options}\label{sec:options}%>>>
-{\reversemarginpar\marginpar{%
- \vspace*{-2em}\hspace*{-4em}%
- \tiny%
- \ducksay[hedgehog,bubble=\footnotesize,align=t]{Everyone likes\\options}}}
-The following options are available to \verb|\ducksay|, \verb|\duckthink|, and
-\verb|\DucksayOptions| and if not otherwise specified also as package options:
-
-\begin{codedescription}
-\anml\\
- One of the animals listed in \autoref{sec:animals} or any of the ones added
- with \verb|\AddAnimal|. Not useable as package option.
-
-\texttt{animal=\anml}\\
- a longer alternative to the use of \anml\ if used in \verb|\ducksay| or
- \verb|\duckthink|. If it is used as a package option or in
- \verb|\DucksayOptions| it changes the default animal to \anml.
-
-\texttt{bubble=\#1}\\
- use \texttt{\#1} in a group right before the bubble (for font switches). Might
- be used as a package option but not all control sequences work out of the box
- there.
-
-\texttt{body=\#1}\\
- use \texttt{\#1} in a group right before the body (meaning the \anml). Might
- be used as a package option but not all control sequences work out of the box
- there. E.g., to right-align the \anml\ to the bubble, use \verb|body=\hfill|.
-
-\texttt{align=\#1}\\
- use \texttt{\#1} as the vertical alignment specifier given to the
- \texttt{tabular} which is around the contents of \verb|\ducksay| and
- \verb|\duckthink|.
-
-\texttt{msg-align=\#1}\\
- use \texttt{\#1} for alignment of the rows of multi-line \msg s. It should
- match a \texttt{tabular} column specifier. Default is \texttt{l}. It only
- affects the contents of the speech bubble not the bubble.
-
-\texttt{wd=\#1}\\
- in order to detect the width the \msg\ is expanded. This might not work out
- for some commands (e.g. \verb|\url| from \texttt{hyperref}). If you specify
- the width using \texttt{wd} the \msg\ is not expanded and therefore the
- command \emph{might} work out. \texttt{\#1} should be the character count.
-
-\texttt{ht=\#1}\\
- you might explicitly set the height (the row count) of the \msg. This only has
- an effect if you also specify \texttt{wd}.
-
-\texttt{ligatures=\#1}\\
- this is a \LaTeX3 regular expression which should match every character you
- don't want to form ligatures during \verb|\AddAnimal|. The default expression
- is \verb|[\-<>`]|. Giving no argument (or an empty one) disables the
- replacement, which enhances compilation speed. The formation of ligatures was
- only observed in combination with \verb|\usepackage[T1]{fontenc}| by the
- author of this package. Therefore giving the option \texttt{ligatures} without
- an argument might enhance the compilation speed for you without any
- drawbacks.
-\end{codedescription}
- %<<<
-\section{Defects}%>>>
-{\reversemarginpar\marginpar{%
- \tiny\rlap{\ducksay[frog,bubble=\footnotesize,align=t]{Ohh, no!}}}}
-\begin{itemize}
- \item no automatic line wrapping
-\end{itemize}
-%<<<
-\section{Dependencies}%>>>
-\marginpar{%
- \tiny\rlap{\ducksay[kangaroo,bubble=\footnotesize,align=t]{We rely on you}}}
-The package depends on the two packages \texttt{xparse} and \texttt{l3keys2e}
-and all of their dependencies.
-%<<<
-%\clearpage
-\section{Available Animals}\label{sec:animals}%>>>
-The following animals are provided by this package. I did not create them (but
-altered some), they belong to their original creators.
-\bgroup
-\footnotesize
-\begin{multicols}{2}
-\availableAnimal{%>>>
- ,duck%
- ,small-duck%
- ,duck-family%
- ,small-rabbit%
- ,squirrel%
- ,cow%
- ,tux%
- ,head-in%
- ,pig%
- ,frog%
- ,snowman%
- ,bunny%
- ,dragon%
- ,sodomized%
- ,hedgehog%
- ,kangaroo%
- ,dog%
- ,rabbit%
- ,unicorn%
-}\end{multicols}\begin{multicols}{2}
-\availableAnimal{%
- ,r2d2%
- ,vader%
- ,yoda-head%
- ,small-yoda%
- ,yoda%
-}%<<<
-\end{multicols}
-\egroup
-%<<<
-\section{Miscellaneous}%>>>
-\marginpar{%
- \rlap{\tiny\ducksay[squirrel,bubble=\footnotesize,align=t]{I'd choose WTFPL}}}
-This package is distributed under the terms of the GPLv3 or later, or the LPPL
-1.3c or later, choose which ever license fits your needs the best.
-
-The package is hosted on \url{https://github.com/Skillmon/ltx_ducksay}, you
-might report bugs there.
-%<<<
-\clearpage
-% closing page>>>
-\thispagestyle{empty}
-\bgroup
-\Huge
-\mbox{}\vfill
-\centering
-\makebox[0pt]{\duckthink{Who's gonna use it anyway?}}
-\vfill
-\hfill\smash{\footnotesize\ducksay[small-yoda,wd=49]{hosted at
- \url{https://github.com/Skillmon/ltx_ducksay}}}
-\egroup
-%<<<
-\end{document}
-
-% vim: fdm=marker foldmarker=>>>,<<<