diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/spath3/tikzlibrarycalligraphy.code.tex | 417 |
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 %% %% |