summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex')
-rw-r--r--Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex417
1 files changed, 161 insertions, 256 deletions
diff --git a/Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex b/Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex
index 9b0e082b144..e987539cb0b 100644
--- a/Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex
+++ b/Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex
@@ -4,10 +4,10 @@
%%
%% The original source files were:
%%
-%% spath3.dtx (with options: `calligraphy')
+%% spath3_code.dtx (with options: `calligraphy')
%% ----------------------------------------------------------------
%% spath3 --- Functions for manipulating PGF soft paths
-%% E-mail: stacey@math.ntnu.no
+%% E-mail: loopspace@mathforge.org
%% Released under the LaTeX Project Public License v1.3c or later
%% See http://www.latex-project.org/lppl.txt
%% ----------------------------------------------------------------
@@ -17,10 +17,24 @@
\tl_new:N \l__cal_tmpa_tl
\tl_new:N \l__cal_tmpb_tl
+\tl_new:N \l__cal_tmp_path_tl
+\tl_new:N \l__cal_tmp_rpath_tl
+\tl_new:N \l__cal_tmp_rpathb_tl
+\tl_new:N \l__cal_tmp_patha_tl
+
+\seq_new:N \l__cal_tmpa_seq
+
\int_new:N \l__cal_tmpa_int
\int_new:N \l__cal_tmpb_int
-\int_new:N \l__cal_path_component_int
-\int_new:N \l__cal_label_int
+\int_new:N \g__cal_path_component_int
+\int_new:N \g__cal_label_int
+
+\fp_new:N \l__cal_tmpa_fp
+\fp_new:N \l__cal_tmpb_fp
+\fp_new:N \l__cal_tmpc_fp
+\fp_new:N \l__cal_tmpd_fp
+\fp_new:N \l__cal_tmpe_fp
+
\dim_new:N \l__cal_tmpa_dim
\dim_new:N \l__cal_tmpb_dim
\dim_new:N \l__cal_tmpc_dim
@@ -29,10 +43,12 @@
\dim_new:N \l__cal_tmpf_dim
\dim_new:N \l__cal_tmpg_dim
\dim_new:N \l__cal_tmph_dim
+
\bool_new:N \l__cal_annotate_bool
\bool_new:N \l__cal_taper_start_bool
\bool_new:N \l__cal_taper_end_bool
\bool_new:N \l__cal_taperable_bool
+
\dim_new:N \l__cal_taper_width_dim
\dim_new:N \l__cal_line_width_dim
@@ -40,27 +56,35 @@
\bool_set_true:N \l__cal_taper_end_bool
\cs_generate_variant:Nn \tl_put_right:Nn {Nv}
+
+\msg_new:nnn { calligraphy } { undefined pen } { The~ pen~ "#1"~ is~ not~ defined. }
\tikzset{
define~pen/.code={
\tikzset{pen~name=#1}
\pgf@relevantforpicturesizefalse
\tikz@addmode{
\pgfsyssoftpath@getcurrentpath\l__cal_tmpa_tl
- \MakeSPathList{calligraphy pen \pgfkeysvalueof{/tikz/pen~name}}{\l__cal_tmpa_tl}
- \SPathListPrepare{calligraphy pen \pgfkeysvalueof{/tikz/pen~name}}
+ \spath_components_to_seq:NV \l__cal_tmpa_seq \l__cal_tmpa_tl
+ \seq_gclear_new:c {g__cal_pen_\pgfkeysvalueof{/tikz/pen~name}_seq}
+ \seq_gset_eq:cN {g__cal_pen_\pgfkeysvalueof{/tikz/pen~name}_seq} \l__cal_tmpa_seq
\pgfusepath{discard}%
}
},
define~pen/.default={default},
use~pen/.code={
\tikzset{pen~name=#1}
- \int_gzero:N \l__cal_path_component_int
+ \int_gzero:N \g__cal_path_component_int
\cs_set_eq:NN \pgfpathmoveto \cal_moveto:n
\tikz@addmode{
\pgfsyssoftpath@getcurrentpath\l__cal_tmpa_tl
- \MakeSPathList{calligraphy path}{\l__cal_tmpa_tl}
- \SPathListPrepare{calligraphy path}
- \CalligraphyPathCreate{calligraphy path}{\pgfkeysvalueof{/tikz/pen~name}}
+ \spath_components_to_seq:NV \l__cal_tmpa_seq \l__cal_tmpa_tl
+ \tl_if_exist:cTF {g__cal_pen_\pgfkeysvalueof{/tikz/pen~name}_seq}
+ {
+ \cal_path_create:Nc \l__cal_tmpa_seq {g__cal_pen_\pgfkeysvalueof{/tikz/pen~name}_seq}
+ }
+ {
+ \msg_warning:nnx { calligraphy } { undefined pen } { \pgfkeysvalueof{/tikz/pen~name} }
+ }
}
},
use~pen/.default={default},
@@ -132,8 +156,8 @@
\tl_set:cn {l__cal_stroke_style_#1} {#2}
},
this~stroke~style/.code={
- \tl_clear_new:c {l__cal_stroke_inline_style_ \int_use:N \l__cal_path_component_int}
- \tl_set:cn {l__cal_stroke_inline_style_ \int_use:N \l__cal_path_component_int} {#1}
+ \tl_clear_new:c {l__cal_stroke_inline_style_ \int_use:N \g__cal_path_component_int}
+ \tl_set:cn {l__cal_stroke_inline_style_ \int_use:N \g__cal_path_component_int} {#1}
},
annotate/.style={
annotate~if,
@@ -151,12 +175,13 @@
}
},
annotate~reset/.code={
- \int_gzero:N \l__cal_label_int
+ \int_gzero:N \g__cal_label_int
},
annotation~style/.initial={draw,->},
annotation~shift/.initial={(0,1ex)},
every~annotation~node/.initial={anchor=south~west},
annotation~node~style/.code~2~args={
+ \tl_clear_new:c {l__cal_annotation_style_ #1 _tl}
\tl_set:cn {l__cal_annotation_style_ #1 _tl}{#2}
},
tl~use:N/.code={
@@ -179,7 +204,7 @@
{
\pgfkeyssetvalue{\pgfkeyscurrentpath}{#1}
}
- }
+ },
}
\NewDocumentCommand \pen { O{} }
{
@@ -195,100 +220,99 @@
{
\path[use~ pen,every~ calligraphy/.try,#1]
}
-\NewDocumentCommand \CalligraphyPathCreate { m m }
+\cs_new_protected_nopar:Npn \cal_path_create:NN #1#2
{
\int_zero:N \l__cal_tmpa_int
- \tl_map_inline:cn {l__spath_list_#1}
+ \seq_map_inline:Nn #1
{
- \int_incr:N \l__cal_tmpa_int
- \int_zero:N \l__cal_tmpb_int
- \tl_map_inline:cn {l__spath_list_calligraphy pen #2}
+ \int_compare:nT {\tl_count:n {##1} > 3}
{
- \int_incr:N \l__cal_tmpb_int
- \group_begin:
- \pgfsys@beginscope
-
- \cal_apply_style:c {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
- \cal_apply_style:c {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
- \cal_apply_style:c {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
-
- \spath_clone:nn {##1} {calligraphy temp path}
- \__spath_get:nnN {####1} {initial point} \l__cal_tmpa_tl
- \spath_translate:nV {calligraphy temp path} \l__cal_tmpa_tl
+ \int_incr:N \l__cal_tmpa_int
+ \int_zero:N \l__cal_tmpb_int
- \__spath_get:nnN {####1} {length} \l__cal_tmpa_tl
+ \tl_set:Nn \l__cal_tmp_path_tl {##1}
+ \spath_open:N \l__cal_tmp_path_tl
+ \spath_reverse:NV \l__cal_tmp_rpath_tl \l__cal_tmp_path_tl
- \int_compare:nTF {\l__cal_tmpa_tl = 1}
+ \seq_map_inline:Nn #2
{
- \cal_at_least_three:n {calligraphy temp path}
-
- \spath_protocol_path:n {calligraphy temp path}
+ \int_incr:N \l__cal_tmpb_int
+ \group_begin:
+ \pgfsys@beginscope
+ \cal_apply_style:c {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
+ \cal_apply_style:c {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
+ \cal_apply_style:c {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
+
+ \spath_initialpoint:Nn \l__cal_tmpa_tl {####1}
+ \tl_set_eq:NN \l__cal_tmp_patha_tl \l__cal_tmp_path_tl
+ \spath_translate:NV \l__cal_tmp_patha_tl \l__cal_tmpa_tl
+
+ \int_compare:nTF {\tl_count:n {####1} == 3}
+ {
+ \cal_at_least_three:N \l__cal_tmp_patha_tl
+ \spath_protocol_path:V \l__cal_tmp_patha_tl
- \__spath_get:nnN {calligraphy temp path} {path} \l__cal_tmpa_tl
+ \tikz@options
+ \dim_set:Nn \l__cal_line_width_dim {\pgflinewidth}
+ \cal_maybe_taper:N \l__cal_tmp_patha_tl
+ }
+ {
+ \spath_weld:Nn \l__cal_tmp_patha_tl {####1}
+ \spath_weld:NV \l__cal_tmp_patha_tl \l__cal_tmp_rpath_tl
+ \spath_reverse:Nn \l__cal_tmp_rpathb_tl {####1}
+ \spath_weld:NV \l__cal_tmp_patha_tl \l__cal_tmp_rpathb_tl
+
+ \tl_clear:N \l__cal_tmpa_tl
+ \tl_set:Nn \l__cal_tmpa_tl {fill=\pgfkeysvalueof{/tikz/pen~colour},draw=none}
+ \tl_if_exist:cT {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
+ {
+ \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
+ }
+ \tl_if_exist:cT {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
+ {
+ \tl_put_right:Nn \l__cal_tmpa_tl {,}
+ \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
+ }
+ \tl_if_exist:cT {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
+ {
+ \tl_put_right:Nn \l__cal_tmpa_tl {,}
+ \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
+ }
+ \spath_tikz_path:VV \l__cal_tmpa_tl \l__cal_tmp_patha_tl
- \tikz@options
- \dim_set:Nn \l__cal_line_width_dim {\pgflinewidth}
- \cal_maybe_taper:N \l__cal_tmpa_tl
+ }
+ \pgfsys@endscope
+ \group_end:
}
+
+ \bool_if:NT \l__cal_annotate_bool
{
+ \seq_get_right:NN #2 \l__cal_tmpa_tl
+ \spath_finalpoint:NV \l__cal_tmpa_tl \l__cal_tmpa_tl
+ \spath_translate:NV \l__cal_tmp_path_tl \l__cal_tmpa_tl
+ \tikz@scan@one@point\pgfutil@firstofone\pgfkeysvalueof{/tikz/annotation~shift}
- \spath_weld:nn {calligraphy temp path} {####1}
- \spath_reverse:n {##1}
- \spath_reverse:n {####1}
- \spath_weld:nn {calligraphy temp path} {##1}
- \spath_weld:nn {calligraphy temp path} {####1}
- \spath_reverse:n {##1}
- \spath_reverse:n {####1}
-
- \tl_clear:N \l__cal_tmpa_tl
- \tl_set:Nn \l__cal_tmpa_tl {fill=\pgfkeysvalueof{/tikz/pen~colour},draw=none}
- \tl_if_exist:cT {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
- {
- \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_stroke_style_ \int_use:N \l__cal_tmpa_int}
- }
- \tl_if_exist:cT {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
- {
- \tl_put_right:Nn \l__cal_tmpa_tl {,}
- \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_stroke_inline_style_ \int_use:N \l__cal_tmpa_int}
- }
- \tl_if_exist:cT {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
- {
- \tl_put_right:Nn \l__cal_tmpa_tl {,}
- \tl_put_right:Nv \l__cal_tmpa_tl {l__cal_nib_style_ \int_use:N \l__cal_tmpb_int}
- }
- \spath_tikz_path:Vn \l__cal_tmpa_tl {calligraphy temp path}
+ \spath_translate:Nnn \l__cal_tmp_path_tl {\pgf@x} {\pgf@y}
+ \pgfkeysgetvalue{/tikz/annotation~style}{\l__cal_tmpa_tl}
+ \spath_tikz_path:VV \l__cal_tmpa_tl \l__cal_tmp_path_tl
+
+ \spath_finalpoint:NV \l__cal_tmpa_tl \l__cal_tmp_path_tl
+
+ \exp_last_unbraced:NV \pgfqpoint \l__cal_tmpa_tl
+ \begin{scope}[reset~ cm]
+ \node[every~annotation~node/.try,tl~use:c = {l__cal_annotation_style_ \int_use:N \l__cal_tmpa_int _tl}] at (\pgf@x,\pgf@y) {\int_use:N \l__cal_tmpa_int};
+ \end{scope}
}
- \pgfsys@endscope
- \group_end:
- }
- \bool_if:NT \l__cal_annotate_bool
- {
- \spath_clone:nn {##1} {calligraphy temp path}
- \tl_set_eq:Nc \l_tmpa_tl {l__spath_list_calligraphy pen #2}
- \tl_reverse:N \l_tmpa_tl
- \tl_set:Nx \l_tmpa_tl {\tl_head:N \l_tmpa_tl}
- \spath_generate_finalpoint:V \l_tmpa_tl
- \spath_get:VnN \l_tmpa_tl {final point} \l_tmpa_tl
- \spath_translate:nV {calligraphy temp path} \l_tmpa_tl
- \tikz@scan@one@point\pgfutil@firstofone\pgfkeysvalueof{/tikz/annotation~shift}
- \spath_translate:nnn {calligraphy temp path} {\pgf@x} {\pgf@y}
-
- \pgfkeysgetvalue{/tikz/annotation~style}{\l_tmpa_tl}
- \spath_tikz_path:Vn \l_tmpa_tl {calligraphy temp path}
- \spath_get:nnN {calligraphy temp path} {final point} \l_tmpa_tl
- \exp_last_unbraced:NV \pgfqpoint \l_tmpa_tl
- \begin{scope}[reset~ cm]
- \node[every~annotation~node/.try,tl~use:c = {l__cal_annotation_style_ \int_use:N \l__cal_tmpa_int _tl}] at (\pgf@x,\pgf@y) {\int_use:N \l__cal_tmpa_int};
- \end{scope}
}
}
}
+\cs_generate_variant:Nn \cal_path_create:NN {Nc}
\cs_new_eq:NN \cal_orig_moveto:n \pgfpathmoveto
\cs_new_nopar:Npn \cal_moveto:n #1
{
- \int_gincr:N \l__cal_path_component_int
+ \int_gincr:N \g__cal_path_component_int
\cal_orig_moveto:n {#1}
}
\cs_new_nopar:Npn \cal_apply_style:N #1
@@ -298,154 +322,32 @@
}
}
\cs_generate_variant:Nn \cal_apply_style:N {c}
-\cs_new_nopar:Npn \cal_at_least_three:n #1
+\cs_new_protected_nopar:Npn \cal_at_least_three:Nn #1#2
{
- \spath_get:nnN {#1} {real length} \l__cal_tmpa_tl
+ \spath_reallength:Nn \l__cal_tmpa_int {#2}
\tl_clear:N \l__cal_tmpb_tl
- \int_compare:nTF {\l__cal_tmpa_tl = 1}
+ \tl_set:Nn \l__cal_tmpb_tl {#2}
+ \int_compare:nTF {\l__cal_tmpa_int = 1}
{
- \spath_get:nnN {#1} {path} \l__cal_tmpa_tl
- \spath_map_segment_inline:Nn \l__cal_tmpa_tl
- {
- \tl_case:NnF ##1 {
- \g__spath_lineto_tl {
- \cal_split_line_in_three:NN \l__cal_tmpb_tl ##2
- }
- \g__spath_curvetoa_tl {
- \cal_split_curve_in_three:NN \l__cal_tmpb_tl ##2
- }
- }
- {
- \tl_put_right:NV \l__cal_tmpb_tl ##2
- }
- }
- \spath_put:nnV {#1} {path} \l__cal_tmpb_tl
+ \spath_split_at:Nn \l__cal_tmpb_tl {2/3}
+ \spath_split_at:Nn \l__cal_tmpb_tl {1/2}
}
{
- \int_compare:nT {\l__cal_tmpa_tl = 2}
+ \int_compare:nT {\l__cal_tmpa_int = 2}
{
- \spath_get:nnN {#1} {path} \l__cal_tmpa_tl
- \spath_map_segment_inline:Nn \l__cal_tmpa_tl
- {
- \tl_case:NnF ##1 {
- \g__spath_lineto_tl {
- \cal_split_line_in_two:NN \l__cal_tmpb_tl ##2
- }
- \g__spath_curvetoa_tl {
- \cal_split_curve_in_two:NN \l__cal_tmpb_tl ##2
- }
- }
- {
- \tl_put_right:NV \l__cal_tmpb_tl ##2
- }
- }
- \spath_put:nnV {#1} {path} \l__cal_tmpb_tl
+ \spath_split_at:Nn \l__cal_tmpb_tl {1.5}
+ \spath_split_at:Nn \l__cal_tmpb_tl {.5}
}
}
+ \tl_set_eq:NN #1 \l__cal_tmpb_tl
}
-\cs_new_nopar:Npn \cal_split_line_in_two:NN #1#2
+\cs_generate_variant:Nn \cal_at_least_three:Nn {NV}
+\cs_new_protected_nopar:Npn \cal_at_least_three:N #1
{
- \tl_set_eq:NN \l__cal_tmpc_tl #2
-
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \dim_set:Nn \l__cal_tmpa_dim {\tl_head:N \l__cal_tmpc_tl}
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \dim_set:Nn \l__cal_tmpb_dim {\tl_head:N \l__cal_tmpc_tl}
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \dim_set:Nn \l__cal_tmpc_dim {\tl_head:N \l__cal_tmpc_tl}
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
- \dim_set:Nn \l__cal_tmpd_dim {\tl_head:N \l__cal_tmpc_tl}
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \tl_put_right:NV #1 \g__spath_lineto_tl
-
- \tl_put_right:Nx #1 {
- {\dim_eval:n {(\l__cal_tmpa_dim + \l__cal_tmpc_dim)/2}}
- {\dim_eval:n {(\l__cal_tmpb_dim + \l__cal_tmpd_dim)/2}}
- }
-
- \tl_put_right:NV #1 \g__spath_lineto_tl
- \tl_put_right:Nx #1 {
- {\dim_use:N \l__cal_tmpc_dim}
- {\dim_use:N \l__cal_tmpd_dim}
- }
+ \cal_at_least_three:NV #1#1
}
-\cs_new_nopar:Npn \cal_split_line_in_three:NN #1#2
-{
- \tl_set_eq:NN \l__cal_tmpc_tl #2
-
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \dim_set:Nn \l__cal_tmpa_dim {\tl_head:N \l__cal_tmpc_tl}
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \dim_set:Nn \l__cal_tmpb_dim {\tl_head:N \l__cal_tmpc_tl}
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \dim_set:Nn \l__cal_tmpc_dim {\tl_head:N \l__cal_tmpc_tl}
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
- \dim_set:Nn \l__cal_tmpd_dim {\tl_head:N \l__cal_tmpc_tl}
- \tl_set:Nx \l__cal_tmpc_tl {\tl_tail:N \l__cal_tmpc_tl}
-
- \tl_put_right:NV #1 \g__spath_lineto_tl
-
- \tl_put_right:Nx #1 {
- {\dim_eval:n {(2\l__cal_tmpa_dim + \l__cal_tmpc_dim)/3}}
- {\dim_eval:n {(2\l__cal_tmpb_dim + \l__cal_tmpd_dim)/3}}
- }
-
- \tl_put_right:NV #1 \g__spath_lineto_tl
-
- \tl_put_right:Nx #1 {
- {\dim_eval:n {(\l__cal_tmpa_dim + 2\l__cal_tmpc_dim)/3}}
- {\dim_eval:n {(\l__cal_tmpb_dim + 2\l__cal_tmpd_dim)/3}}
- }
-
- \tl_put_right:NV #1 \g__spath_lineto_tl
- \tl_put_right:Nx #1 {
- {\dim_use:N \l__cal_tmpc_dim}
- {\dim_use:N \l__cal_tmpd_dim}
- }
-}
-\cs_new_nopar:Npn \cal_split_curve_in_two:NN #1#2
-{
- \spath_split_curve:nVNN {.5} #2 \l_tmpa_tl \l_tmpb_tl
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
- \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
- \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
- \tl_put_right:NV #1 \l_tmpa_tl
- \tl_put_right:NV #1 \l_tmpb_tl
-}
-\cs_new_nopar:Npn \cal_split_curve_in_three:NN #1#2
-{
- \spath_split_curve:nVNN {1/3} #2 \l_tmpa_tl \l_tmpb_tl
-
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_put_right:NV #1 \l_tmpa_tl
-
- \spath_split_curve:nVNN {.5} \l_tmpb_tl \l_tmpa_tl \l_tmpb_tl
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_set:Nx \l_tmpa_tl {\tl_tail:N \l_tmpa_tl}
- \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
- \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
- \tl_set:Nx \l_tmpb_tl {\tl_tail:N \l_tmpb_tl}
- \tl_put_right:NV #1 \l_tmpa_tl
- \tl_put_right:NV #1 \l_tmpb_tl
-}
-\cs_new_nopar:Npn \cal_maybe_taper:N #1
+\cs_generate_variant:Nn \cal_at_least_three:N {c}
+\cs_new_protected_nopar:Npn \cal_maybe_taper:N #1
{
\tl_set_eq:NN \l__cal_tmpa_tl #1
@@ -458,7 +360,7 @@
\tl_case:NnF \l__cal_tmpb_tl
{
- \g__spath_lineto_tl
+ \c_spath_lineto_tl
{
\bool_set_true:N \l__cal_taperable_bool
@@ -472,9 +374,9 @@
{
\tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl}
}
- \tl_put_left:NV \l__cal_tmpa_tl \g__spath_moveto_tl
+ \tl_put_left:NV \l__cal_tmpa_tl \c_spath_moveto_tl
}
- \g__spath_curvetoa_tl
+ \c_spath_curvetoa_tl
{
\bool_set_true:N \l__cal_taperable_bool
\dim_set:Nn \l__cal_tmpc_dim {\tl_item:Nn \l__cal_tmpa_tl {5}}
@@ -487,7 +389,7 @@
{
\tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl}
}
- \tl_put_left:NV \l__cal_tmpa_tl \g__spath_moveto_tl
+ \tl_put_left:NV \l__cal_tmpa_tl \c_spath_moveto_tl
}
}
{
@@ -510,7 +412,7 @@
\tl_case:NnF \l__cal_tmpb_tl
{
- \g__spath_lineto_tl
+ \c_spath_lineto_tl
{
\bool_set_true:N \l__cal_taperable_bool
@@ -527,7 +429,7 @@
}
\tl_reverse:N \l__cal_tmpa_tl
}
- \g__spath_curveto_tl
+ \c_spath_curveto_tl
{
\bool_set_true:N \l__cal_taperable_bool
\dim_set:Nn \l__cal_tmpc_dim {\tl_item:Nn \l__cal_tmpa_tl {-5}}
@@ -560,10 +462,10 @@
\pgfusepath{stroke}
}
-\cs_new_nopar:Npn \__cal_taper_aux:
+\cs_new_protected_nopar:Npn \__cal_taper_aux:
{
\tl_clear:N \l__cal_tmpb_tl
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_moveto_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_moveto_tl
\fp_set:Nn \l__cal_tmpa_fp
{
@@ -603,7 +505,7 @@
{\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetoa_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetoa_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -611,7 +513,7 @@
{\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpd_dim}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetob_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetob_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -619,7 +521,7 @@
{\dim_eval:n { \fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmpf_dim}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curveto_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curveto_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -627,7 +529,7 @@
{\dim_eval:n { \fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetoa_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetoa_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -635,7 +537,7 @@
{\dim_eval:n { \fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim + \fp_to_dim:n {1.32* \l__cal_tmpc_fp}}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetob_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetob_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -643,7 +545,7 @@
{\dim_eval:n { -\fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim + \fp_to_dim:n {1.32 * \l__cal_tmpc_fp}}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curveto_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curveto_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -651,7 +553,7 @@
{\dim_eval:n { -\fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetoa_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetoa_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -659,7 +561,7 @@
{\dim_eval:n { -\fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmpf_dim}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetob_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetob_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -667,7 +569,7 @@
{\dim_eval:n { -\fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpd_dim}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curveto_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curveto_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -675,7 +577,7 @@
{\dim_eval:n { -\fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetoa_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetoa_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -683,7 +585,7 @@
{\dim_eval:n { -\fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim - \fp_to_dim:n {1.32* \l__cal_tmpa_fp}}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curvetob_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetob_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -691,7 +593,7 @@
{\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim - \fp_to_dim:n {1.32 * \l__cal_tmpa_fp}}}
}
- \tl_put_right:NV \l__cal_tmpb_tl \g__spath_curveto_tl
+ \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curveto_tl
\tl_put_right:Nx \l__cal_tmpb_tl
{
@@ -704,8 +606,14 @@
\pgfusepath{fill}
}
\tl_set:Nn \l__cal_tmpa_tl {\pgfsyssoftpath@movetotoken{0pt}{0pt}}
-\MakeSPathList{calligraphy pen copperplate}{\l__cal_tmpa_tl}
-\SPathListPrepare{calligraphy pen copperplate}
+\spath_components_to_seq:NV \l__cal_tmpa_seq \l__cal_tmpa_tl
+\seq_gclear_new:N \g__cal_pen_copperplate_seq
+\seq_gset_eq:NN \g__cal_pen_copperplate_seq \l__cal_tmpa_seq
+\DeclareDocumentCommand \CopperplatePath { m }
+{
+ \spath_components_to_seq:NV \l__cal_tmpa_seq #1
+ \cal_path_create:NN \l__cal_tmpa_seq \g__cal_pen_copperplate_seq
+}
\ExplSyntaxOff
\expandafter\ifx\csname pgfdeclaredecoration\endcsname\relax
\else
@@ -745,9 +653,7 @@
taper
}%
\pgfsyssoftpath@getcurrentpath\cal@tmp@path
- \MakeSPathList{calligraphy path}{\cal@tmp@path}%
- \SPathListPrepare{calligraphy path}%
- \CalligraphyPathCreate{calligraphy path}{copperplate}%
+ \CopperplatePath{\cal@tmp@path}
}
\state{final}{}
}
@@ -774,9 +680,7 @@
taper
}%
\pgfsyssoftpath@getcurrentpath\cal@tmp@path
- \MakeSPathList{calligraphy path}{\cal@tmp@path}%
- \SPathListPrepare{calligraphy path}%
- \CalligraphyPathCreate{calligraphy path}{copperplate}%
+ \CopperplatePath{\cal@tmp@path}
}
\state{final}{}%
}
@@ -798,15 +702,13 @@
taper
}%
\pgfsyssoftpath@getcurrentpath\cal@tmp@path
- \MakeSPathList{calligraphy path}{\cal@tmp@path}%
- \SPathListPrepare{calligraphy path}%
- \CalligraphyPathCreate{calligraphy path}{copperplate}%
+ \CopperplatePath{\cal@tmp@path}
}
\state{final}{}%
}
\fi
%%
-%% Copyright (C) 2011-2019 by Andrew Stacey <stacey@math.ntnu.no>
+%% Copyright (C) 2011-2019 by Andrew Stacey <loopspace@mathforge.org>
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License (LPPL), either
@@ -821,13 +723,16 @@
%% This work consists of the files spath3.dtx
%% calligraphy_doc.tex
%% knots_doc.tex
+%% spath3.tex
%% and the derived files spath3.ins,
%% spath3_code.pdf,
%% spath3.sty,
%% tikzlibrarycalligraphy.code.tex
%% tikzlibraryknots.code.tex
+%% tikzlibraryspath3.code.tex
%% calligraphy.pdf
%% knots.pdf
+%% spath3.pdf
%% README
%%
%%