%% %% This is file `tikzlibrarycalligraphy.code.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% spath3_code.dtx (with options: `calligraphy') %% ---------------------------------------------------------------- %% spath3 --- Functions for manipulating PGF soft paths %% E-mail: Andrew Stacey %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% ---------------------------------------------------------------- %% \RequirePackage{spath3} \ExplSyntaxOn \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 \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 \dim_new:N \l__cal_tmpd_dim \dim_new:N \l__cal_tmpe_dim \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 \bool_set_true:N \l__cal_taper_start_bool \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 \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 \g__cal_path_component_int \cs_set_eq:NN \pgfpathmoveto \cal_moveto:n \tikz@addmode{ \pgfsyssoftpath@getcurrentpath\l__cal_tmpa_tl \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}, pen~name/.initial={default}, copperplate/.style={pen~name=copperplate}, pen~colour/.initial={black}, weight/.is~choice, weight/heavy/.style={ line~width=\pgfkeysvalueof{/tikz/heavy~line~width}, taper~width=\pgfkeysvalueof{/tikz/light~line~width}, }, weight/light/.style={ line~width=\pgfkeysvalueof{/tikz/light~line~width}, taper~width=0pt, }, heavy/.style={ weight=heavy }, light/.style={ weight=light }, heavy~line~width/.initial=2pt, light~line~width/.initial=1pt, taper/.is~choice, taper/.default=both, taper/none/.style={ taper~start=false, taper~end=false, }, taper/both/.style={ taper~start=true, taper~end=true, }, taper/start/.style={ taper~start=true, taper~end=false, }, taper/end/.style={ taper~start=false, taper~end=true, }, taper~start/.code={ \tl_if_eq:nnTF {#1} {true} { \bool_set_true:N \l__cal_taper_start_bool } { \bool_set_false:N \l__cal_taper_start_bool } }, taper~start/.default={true}, taper~end/.code={ \tl_if_eq:nnTF {#1} {true} { \bool_set_true:N \l__cal_taper_end_bool } { \bool_set_false:N \l__cal_taper_end_bool } }, taper~end/.default={true}, taper~width/.code={\dim_set:Nn \l__cal_taper_width_dim {#1}}, nib~style/.code~2~args={ \tl_clear_new:c {l__cal_nib_style_#1} \tl_set:cn {l__cal_nib_style_#1} {#2} }, stroke~style/.code~2~args={ \tl_clear_new:c {l__cal_stroke_style_#1} \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 \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, annotate~reset, annotation~style/.update~value={#1}, }, annotate~if/.default={true}, annotate~if/.code={ \tl_if_eq:nnTF {#1} {true} { \bool_set_true:N \l__cal_annotate_bool } { \bool_set_false:N \l__cal_annotate_bool } }, annotate~reset/.code={ \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={ \exp_args:NV \pgfkeysalso #1 }, tl~use:c/.code={ \tl_if_exist:cT {#1} { \exp_args:Nv \pgfkeysalso {#1} } }, /handlers/.update~style/.code={ \tl_if_eq:nnF {#1} {\pgfkeysnovalue} { \pgfkeys{\pgfkeyscurrentpath/.code=\pgfkeysalso{#1}} } }, /handlers/.update~value/.code={ \tl_if_eq:nnF {#1} {\pgfkeysnovalue} { \pgfkeyssetvalue{\pgfkeyscurrentpath}{#1} } }, } \NewDocumentCommand \pen { O{} } { \path[define~ pen,every~ calligraphy~ pen/.try,#1] } \NewDocumentCommand \definepen { O{} } { \tikz \path[define~ pen,every~ calligraphy~ pen/.try,#1] } \NewDocumentCommand \calligraphy { O{} } { \path[use~ pen,every~ calligraphy/.try,#1] } \cs_new_protected_nopar:Npn \cal_path_create:NN #1#2 { \int_zero:N \l__cal_tmpa_int \seq_map_inline:Nn #1 { \int_compare:nT {\tl_count:n {##1} > 3} { \int_incr:N \l__cal_tmpa_int \int_zero:N \l__cal_tmpb_int \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 \seq_map_inline:Nn #2 { \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 \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 } \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_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} } } } } \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 \g__cal_path_component_int \cal_orig_moveto:n {#1} } \cs_new_nopar:Npn \cal_apply_style:N #1 { \tl_if_exist:NT #1 { \exp_args:NV \tikzset #1 } } \cs_generate_variant:Nn \cal_apply_style:N {c} \cs_new_protected_nopar:Npn \cal_at_least_three:Nn #1#2 { \spath_reallength:Nn \l__cal_tmpa_int {#2} \tl_clear:N \l__cal_tmpb_tl \tl_set:Nn \l__cal_tmpb_tl {#2} \int_compare:nTF {\l__cal_tmpa_int = 1} { \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_int = 2} { \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_generate_variant:Nn \cal_at_least_three:Nn {NV} \cs_new_protected_nopar:Npn \cal_at_least_three:N #1 { \cal_at_least_three:NV #1#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 \bool_if:NT \l__cal_taper_start_bool { \dim_set:Nn \l__cal_tmpa_dim {\tl_item:Nn \l__cal_tmpa_tl {2}} \dim_set:Nn \l__cal_tmpb_dim {\tl_item:Nn \l__cal_tmpa_tl {3}} \tl_set:Nx \l__cal_tmpb_tl {\tl_item:Nn \l__cal_tmpa_tl {4}} \token_case_meaning:NnF \l__cal_tmpb_tl { \c_spath_lineto_tl { \bool_set_true:N \l__cal_taperable_bool \dim_set:Nn \l__cal_tmpg_dim {\tl_item:Nn \l__cal_tmpa_tl {5}} \dim_set:Nn \l__cal_tmph_dim {\tl_item:Nn \l__cal_tmpa_tl {6}} \dim_set:Nn \l__cal_tmpc_dim {(2\l__cal_tmpa_dim + \l__cal_tmpg_dim)/3} \dim_set:Nn \l__cal_tmpd_dim {(2\l__cal_tmpb_dim + \l__cal_tmph_dim)/3} \dim_set:Nn \l__cal_tmpe_dim {(\l__cal_tmpa_dim + 2\l__cal_tmpg_dim)/3} \dim_set:Nn \l__cal_tmpf_dim {(\l__cal_tmpb_dim + 2\l__cal_tmph_dim)/3} \prg_replicate:nn {4} { \tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl} } \tl_put_left:NV \l__cal_tmpa_tl \c_spath_moveto_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}} \dim_set:Nn \l__cal_tmpd_dim {\tl_item:Nn \l__cal_tmpa_tl {6}} \dim_set:Nn \l__cal_tmpe_dim {\tl_item:Nn \l__cal_tmpa_tl {8}} \dim_set:Nn \l__cal_tmpf_dim {\tl_item:Nn \l__cal_tmpa_tl {9}} \dim_set:Nn \l__cal_tmpg_dim {\tl_item:Nn \l__cal_tmpa_tl {11}} \dim_set:Nn \l__cal_tmph_dim {\tl_item:Nn \l__cal_tmpa_tl {12}} \prg_replicate:nn {10} { \tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl} } \tl_put_left:NV \l__cal_tmpa_tl \c_spath_moveto_tl } } { \bool_set_false:N \l__cal_taperable_bool } \bool_if:NT \l__cal_taperable_bool { \__cal_taper_aux: } } \bool_if:NT \l__cal_taper_end_bool { \dim_set:Nn \l__cal_tmpa_dim {\tl_item:Nn \l__cal_tmpa_tl {-2}} \dim_set:Nn \l__cal_tmpb_dim {\tl_item:Nn \l__cal_tmpa_tl {-1}} \tl_set:Nx \l__cal_tmpb_tl {\tl_item:Nn \l__cal_tmpa_tl {-3}} \token_case_meaning:NnF \l__cal_tmpb_tl { \c_spath_lineto_tl { \bool_set_true:N \l__cal_taperable_bool \dim_set:Nn \l__cal_tmpg_dim {\tl_item:Nn \l__cal_tmpa_tl {-5}} \dim_set:Nn \l__cal_tmph_dim {\tl_item:Nn \l__cal_tmpa_tl {-4}} \dim_set:Nn \l__cal_tmpc_dim {(2\l__cal_tmpa_dim + \l__cal_tmpg_dim)/3} \dim_set:Nn \l__cal_tmpd_dim {(2\l__cal_tmpb_dim + \l__cal_tmph_dim)/3} \dim_set:Nn \l__cal_tmpe_dim {(\l__cal_tmpa_dim + 2\l__cal_tmpg_dim)/3} \dim_set:Nn \l__cal_tmpf_dim {(\l__cal_tmpb_dim + 2\l__cal_tmph_dim)/3} \tl_reverse:N \l__cal_tmpa_tl \prg_replicate:nn {3} { \tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl} } \tl_reverse:N \l__cal_tmpa_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}} \dim_set:Nn \l__cal_tmpd_dim {\tl_item:Nn \l__cal_tmpa_tl {-4}} \dim_set:Nn \l__cal_tmpe_dim {\tl_item:Nn \l__cal_tmpa_tl {-8}} \dim_set:Nn \l__cal_tmpf_dim {\tl_item:Nn \l__cal_tmpa_tl {-7}} \dim_set:Nn \l__cal_tmpg_dim {\tl_item:Nn \l__cal_tmpa_tl {-11}} \dim_set:Nn \l__cal_tmph_dim {\tl_item:Nn \l__cal_tmpa_tl {-10}} \tl_reverse:N \l__cal_tmpa_tl \prg_replicate:nn {9} { \tl_set:Nx \l__cal_tmpa_tl {\tl_tail:N \l__cal_tmpa_tl} } \tl_reverse:N \l__cal_tmpa_tl } } { \bool_set_false:N \l__cal_taperable_bool } \bool_if:NT \l__cal_taperable_bool { \__cal_taper_aux: } } \pgfsyssoftpath@setcurrentpath\l__cal_tmpa_tl \pgfsetstrokecolor{\pgfkeysvalueof{/tikz/pen~colour}} \pgfusepath{stroke} } \cs_new_protected_nopar:Npn \__cal_taper_aux: { \tl_clear:N \l__cal_tmpb_tl \tl_put_right:NV \l__cal_tmpb_tl \c_spath_moveto_tl \fp_set:Nn \l__cal_tmpa_fp { \l__cal_tmpd_dim - \l__cal_tmpb_dim } \fp_set:Nn \l__cal_tmpb_fp { \l__cal_tmpa_dim - \l__cal_tmpc_dim } \fp_set:Nn \l__cal_tmpe_fp { (\l__cal_tmpa_fp^2 + \l__cal_tmpb_fp^2)^.5 } \fp_set:Nn \l__cal_tmpa_fp { .5*\l__cal_taper_width_dim * \l__cal_tmpa_fp / \l__cal_tmpe_fp } \fp_set:Nn \l__cal_tmpb_fp { .5*\l__cal_taper_width_dim * \l__cal_tmpb_fp / \l__cal_tmpe_fp } \fp_set:Nn \l__cal_tmpc_fp { \l__cal_tmph_dim - \l__cal_tmpf_dim } \fp_set:Nn \l__cal_tmpd_fp { \l__cal_tmpe_dim - \l__cal_tmpg_dim } \fp_set:Nn \l__cal_tmpe_fp { (\l__cal_tmpc_fp^2 + \l__cal_tmpd_fp^2)^.5 } \fp_set:Nn \l__cal_tmpc_fp { .5*\l__cal_line_width_dim * \l__cal_tmpc_fp / \l__cal_tmpe_fp } \fp_set:Nn \l__cal_tmpd_fp { .5*\l__cal_line_width_dim * \l__cal_tmpd_fp / \l__cal_tmpe_fp } \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { \fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim}} {\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim}} } \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetoa_tl \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { \fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpc_dim}} {\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpd_dim}} } \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetob_tl \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { \fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpe_dim}} {\dim_eval:n { \fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmpf_dim}} } \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curveto_tl \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { \fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpg_dim}} {\dim_eval:n { \fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim}} } \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetoa_tl \tl_put_right:Nx \l__cal_tmpb_tl { { \dim_eval:n { \fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpg_dim - \fp_to_dim:n{ 1.32 * \l__cal_tmpd_fp } } } { \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 \c_spath_curvetob_tl \tl_put_right:Nx \l__cal_tmpb_tl { { \dim_eval:n { -\fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpg_dim - \fp_to_dim:n {1.32 * \l__cal_tmpd_fp } } } { \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 \c_spath_curveto_tl \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpg_dim}} {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmph_dim}} } \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetoa_tl \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpc_fp + \l__cal_tmpe_dim}} {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpd_fp + \l__cal_tmpf_dim}} } \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetob_tl \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpc_dim}} {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpd_dim}} } \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curveto_tl \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim}} {\dim_eval:n { -\fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim}} } \tl_put_right:NV \l__cal_tmpb_tl \c_spath_curvetoa_tl \tl_put_right:Nx \l__cal_tmpb_tl { { \dim_eval:n { -\fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim + \fp_to_dim:n{ 1.32 * \l__cal_tmpb_fp} } } { \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 \c_spath_curvetob_tl \tl_put_right:Nx \l__cal_tmpb_tl { { \dim_eval:n { \fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim + \fp_to_dim:n {1.32 * \l__cal_tmpb_fp} } } { \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 \c_spath_curveto_tl \tl_put_right:Nx \l__cal_tmpb_tl { {\dim_eval:n { \fp_to_dim:N \l__cal_tmpa_fp + \l__cal_tmpa_dim}} {\dim_eval:n { \fp_to_dim:N \l__cal_tmpb_fp + \l__cal_tmpb_dim}} } \pgfsyssoftpath@setcurrentpath\l__cal_tmpb_tl \pgfsetfillcolor{\pgfkeysvalueof{/tikz/pen~colour}} \pgfusepath{fill} } \tl_set:Nn \l__cal_tmpa_tl {\pgfsyssoftpath@movetotoken{0pt}{0pt}} \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 \pgfdeclaredecoration{calligraphic brace}{brace}% {% \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final]% {% \pgfsyssoftpath@setcurrentpath{\pgfutil@empty}% \pgfpathmoveto{\pgfpointorigin}% \pgfpathcurveto% {% \pgfqpoint% {.15\pgfdecorationsegmentamplitude}% {.3\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {.5\pgfdecorationsegmentamplitude}% {.5\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {\pgfdecorationsegmentamplitude}% {.5\pgfdecorationsegmentamplitude}% }% {% \pgftransformxshift% {+\pgfdecorationsegmentaspect\pgfdecoratedremainingdistance}% \pgfpathlineto% {% \pgfqpoint% {-\pgfdecorationsegmentamplitude}% {.5\pgfdecorationsegmentamplitude}% }% \pgfpathcurveto {% \pgfqpoint% {-.5\pgfdecorationsegmentamplitude}% {.5\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {-.15\pgfdecorationsegmentamplitude}% {.7\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {0\pgfdecorationsegmentamplitude}% {1\pgfdecorationsegmentamplitude}% }% \pgfpathmoveto% {% \pgfqpoint% {0\pgfdecorationsegmentamplitude}% {1\pgfdecorationsegmentamplitude}% }% \pgfpathcurveto% {% \pgfqpoint% {.15\pgfdecorationsegmentamplitude}% {.7\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {.5\pgfdecorationsegmentamplitude}% {.5\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {\pgfdecorationsegmentamplitude}% {.5\pgfdecorationsegmentamplitude}% }% }% {% \pgftransformxshift{+\pgfdecoratedremainingdistance}% \pgfpathlineto% {% \pgfqpoint% {-\pgfdecorationsegmentamplitude}% {.5\pgfdecorationsegmentamplitude}% }% \pgfpathcurveto% {% \pgfqpoint% {-.5\pgfdecorationsegmentamplitude}% {.5\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {-.15\pgfdecorationsegmentamplitude}% {.3\pgfdecorationsegmentamplitude}% }% {\pgfqpoint{0pt}{0pt}}% }% \tikzset{% taper width=.5\pgflinewidth,% taper% }%% \pgfsyssoftpath@getcurrentpath\cal@tmp@path% \CopperplatePath{\cal@tmp@path}% }% \state{final}{}% }% \pgfdeclaredecoration{calligraphic straight parenthesis}{brace} { \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final]% {% \pgfsyssoftpath@setcurrentpath{\pgfutil@empty}% \pgfpathmoveto{\pgfpointorigin}% \pgfpathcurveto% {% \pgfqpoint% {.76604\pgfdecorationsegmentamplitude}% {.64279\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {2.3333\pgfdecorationsegmentamplitude}% {\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {3.3333\pgfdecorationsegmentamplitude}% {\pgfdecorationsegmentamplitude}% }% {% \pgftransformxshift{+\pgfdecoratedremainingdistance}% \pgfpathlineto% {% \pgfqpoint% {-3.3333\pgfdecorationsegmentamplitude}% {\pgfdecorationsegmentamplitude}% }% \pgfpathcurveto% {% \pgfqpoint% {-2.3333\pgfdecorationsegmentamplitude}% {\pgfdecorationsegmentamplitude}% }% {% \pgfqpoint% {-.76604\pgfdecorationsegmentamplitude}% {.64279\pgfdecorationsegmentamplitude}% }% {\pgfqpoint{0pt}{0pt}}% }% \tikzset{% taper width=.5\pgflinewidth,% taper% }% \pgfsyssoftpath@getcurrentpath\cal@tmp@path% \CopperplatePath{\cal@tmp@path}% }% \state{final}{}% } \pgfdeclaredecoration{calligraphic curved parenthesis}{brace} { \state{brace}[width=+\pgfdecoratedremainingdistance,next state=final]% {% \pgfsyssoftpath@setcurrentpath{\pgfutil@empty}% \pgfpathmoveto{\pgfpointorigin}% \pgf@xa=\pgfdecoratedremainingdistance\relax% \advance\pgf@xa by -1.5890\pgfdecorationsegmentamplitude\relax% \edef\cgrphy@xa{\the\pgf@xa}% \pgfpathcurveto% {% \pgfqpoint% {1.5890\pgfdecorationsegmentamplitude}% {1.3333\pgfdecorationsegmentamplitude}% }% {\pgfqpoint{\cgrphy@xa}{1.3333\pgfdecorationsegmentamplitude}}% {\pgfqpoint{\pgfdecoratedremainingdistance}{0pt}}% \tikzset{% taper width=.5\pgflinewidth,% taper% }% \pgfsyssoftpath@getcurrentpath\cal@tmp@path% \CopperplatePath{\cal@tmp@path}% }% \state{final}{}% } \fi %% %% Copyright (C) 2011-2024 by Andrew Stacey %% %% 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 %% %% This work is "maintained" (as per LPPL maintenance status) by %% Andrew Stacey. %% %% This work consists of the files spath3_code.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.txt %% %% %% End of file `tikzlibrarycalligraphy.code.tex'.