blob: b454d61c711d95768287c9f9350fee5a6fcd1a4d (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
% !TeX root = ./examples/tikzlings.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% This is the main part of the TikZlings package
% A package to bring cute little animals and other beings into tikz
% Maintained by samcarter
%
% Project repository and bug tracker:
% https://github.com/samcarter/tikzlings
%
% Released under the LaTeX Project Public License v1.3c or later
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesPackage{tikzlings}[2022/04/21 version v0.9 Collection of packages to draw animals and other beings in TikZ]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% List of all TikZlings
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{tikzlings-list}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% load sub-packages
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{tikz}
% from https://chat.stackexchange.com/transcript/message/56515698#56515698
\ExplSyntaxOn
\cs_new_protected:Npn \tikzlings_load_packages:N #1 {
\clist_map_inline:Nn #1 {
\exp_args:Nx \RequirePackage {
tikzlings- \__tikzlings_after_slash:w ##1 / / \s_stop
}
}
}
\cs_new:Npn \__tikzlings_after_slash:w #1 / #2 / #3 \s_stop { \tl_trim_spaces:n {#2} }
\cs_new_eq:NN \tikzling@loadpackages \tikzlings_load_packages:N
\ExplSyntaxOff
\tikzling@loadpackages\tikzling@list
\RequirePackage{tikzlings-addons}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Drawing a random tikzling
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\RequirePackage{expl3}
\ExplSyntaxOn
\ifdefined\sys_rand_seed:
\pgfmathsetseed {\sys_rand_seed:}
\else
\ifdefined\pdfrandomseed % pdflatex
\else
\ifdefined\randomseed
\let\pdfrandomseed\randomseed % post TL19 xelatex and lualatex
\else
\let\pdfrandomseed\time % pre TL19 xelatex
\fi
\fi
\pgfmathsetseed{\number\pdfrandomseed}
\fi
% from https://chat.stackexchange.com/transcript/message/56516469#56516469
% To be able to x-expand \iterateTikzlings, it has to be expandable, so no 'protected'. Also \clist_map_inline:Nn is not expandable, so we have to use \clist_map_function:NN instead.
\cs_new:Npn \tikzlings_iterate:N #1 {
\clist_map_function:NN #1 \__tikzlings_braced_items:n
}
% \__tikzlings_braced_items:n will receive each clist item, then:
\cs_new:Npn \__tikzlings_braced_items:n #1 {
{ % leave an open brace
% we don't want the x-expansion to expand the tikzling command, so we prevent expansion with \exp_not:c. The 'c' variant is used so it builds a csname from its argument, before preventing the expansion: and the argument is what's before the '/'
\exp_not:c {
\__tikzlings_before_slash:w #1 / \s_stop
}
} % leave a close brace
}
\cs_new:Npn \__tikzlings_before_slash:w #1 / #2 \s_stop {
\tl_trim_spaces:n {#1} % make sure there are no spaces around the string
}
\cs_new_eq:NN \tikzling@iteraterandom \tikzlings_iterate:N
\cs_new_eq:NN \ExpArgsNnx \exp_args:Nnx
\ExplSyntaxOff
\ExpArgsNnx\pgfmathdeclarerandomlist{tikzlings}{\tikzling@iteraterandom\tikzling@list}
\newcommand{\tikzling}[1][]{%
\pgfmathrandomitem{\tikzling@random}{tikzlings}%
\tikzling@random[#1]
}
|