diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex | 438 |
1 files changed, 331 insertions, 107 deletions
diff --git a/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex b/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex index 8db5f2e37b3..92f8b76435d 100644 --- a/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex +++ b/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex @@ -12,9 +12,10 @@ %% See http://www.latex-project.org/lppl.txt %% ---------------------------------------------------------------- %% + \ProvidesFile{tikzlibrarytikzmark.code.tex}[% - 2021/02/16 - v1.10 + 2022/08/24 + v1.15 TikZ library for marking positions in a document] \RequirePackage{expl3, l3keys2e, xparse} \tikzset{% @@ -127,6 +128,61 @@ }, tikzmark prefix/.initial=,% tikzmark suffix/.initial=,% + tikzmark clear ixes/.style={ + tikzmark prefix={}, + tikzmark suffix={} + }, + scope anchor location/.initial={(0,0)}, + scope anchor location/.default=@auto, + pic anchor/.style={ + scope anchor location={#1}, + next pic/.append style={ + adjust scope position, + } + }, + scope anchor/.style={ + scope anchor location={#1}, + adjust scope position, + }, + adjust scope position/.code={% + \pgfutil@ifundefined{tikz@fig@name}% + {\let\tikz@fig@name=\pgfutil@empty}{}% + \tikz@resetexpandcount% + \tikz@fig@mustbenamed + \pgfkeysgetvalue{/tikz/scope anchor location}\tkzmk@anchor + \ifx\tkzmk@anchor\tikz@auto@text + \tikzset{local bounding box/.expanded=\tikz@fig@name}% + \def\tkzmk@anchor{(\tikz@fig@name.\tikz@anchor)}% + \fi + \tikz@scan@one@point + \pgfutil@firstofone(pic cs:\tikz@fig@name-origin)\relax + \pgf@xa=\pgf@x + \pgf@ya=\pgf@y + \tikz@scan@one@point + \pgfutil@firstofone(pic cs:\tikz@fig@name-anchor)\relax + \advance\pgf@xa by -\pgf@x + \advance\pgf@ya by -\pgf@y + \tikzset{ + shift={(\the\pgf@xa,\the\pgf@ya)}, + execute at end scope={% + \tikzmark{\tikz@fig@name-origin}{(0,0)}% + \tikzmark{\tikz@fig@name-anchor}{\tkzmk@anchor}% + } + } + }, + every pic/.append style={ + next pic/.try, + next pic/.style={} + }, + save pic bounding box/.code={ + \tikz@fig@mustbenamed + \tikzset{local bounding box/.expanded=\tikz@fig@name} + }, + surround pic/.style={ + next pic/.append style={ + save pic bounding box + } + }, } \def\tikzmark@pp@name#1{% \csname pgfk@/tikz/tikzmark prefix\endcsname% @@ -141,9 +197,20 @@ \def\savepicturepage#1#2{% \expandafter\gdef\csname save@pg@#1\endcsname{#2}% } +\def\@tikzmarkalias#1#2{% + \@ifundefined{save@pt@#2}{}{% + \pgf@node@gnamelet{save@pt@#1}{save@pt@#2}% + \pgf@node@gnamelet{save@pt@#1@offset}{save@pt@#2@offset}% + \protected@write\pgfutil@auxout{}{% + \string\savepointas% + {#1}{\csname save@pt@#2\endcsname}% + \expandafter\expandafter\expandafter + \@gobble\csname save@pt@#2@offset\endcsname + }% + }% +} \def\tikzmarkalias#1#2{% - \pgf@node@gnamelet{save@pt@#1}{save@pt@#2}% - \pgf@node@gnamelet{save@pt@#1@offset}{save@pt@#2@offset}% + \@tikzmarkalias{\tikzmark@pp@name{#1}}{\tikzmark@pp@name{#2}}% } \def\tmk@labeldef#1,#2\@nil{% \edef\tmk@label{\tikzmark@pp@name{#1}}% @@ -157,7 +224,8 @@ \tmk@labeldef#1,(0pt,0pt)\@nil \fi \@ifundefined{save@pt@\tmk@label}{% - \tikz@scan@one@point\pgfutil@firstofone\tmk@def + \expandafter\tikz@scan@one@point + \expandafter\pgfutil@firstofone\tmk@def\relax }{% \pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}% \save@orig@pic% @@ -205,7 +273,9 @@ } \def\tikzmark@inside#1#2{% \tikzset{remember picture}% + \tikz@resetexpandcount% \tikz@scan@one@point\pgfutil@firstofone#2\relax + \pgf@pos@transform{\pgf@x}{\pgf@y}% \protected@write\pgfutil@auxout{}{% \string\savepointas% {\tikzmark@pp@name{#1}}{\pgfpictureid}{\the\pgf@x}{\the\pgf@y}}% @@ -224,18 +294,22 @@ \tikzmark@next% } \newcommand\pgfmark[1]{% - \bgroup - \global\advance\pgf@picture@serial@count by1\relax% - \edef\pgfpictureid{pgfid\the\pgf@picture@serial@count}% - \pgfsys@markposition{\pgfpictureid}% - \edef\pgf@temp{% - \noexpand\write\noexpand\pgfutil@auxout{% - \string\savepicturepage{\pgfpictureid}{\noexpand\arabic{page}}}}% - \pgf@temp - \protected@write\pgfutil@auxout{}{% - \string\savepointas{\tikzmark@pp@name{#1}}{\pgfpictureid}{0pt}{0pt}}% - \egroup - } + \bgroup + \global\advance\pgf@picture@serial@count by1\relax% + \edef\pgfpictureid{pgfid\the\pgf@picture@serial@count}% + \pgfsys@markposition{\pgfpictureid}% + \edef\pgf@temp{% + \noexpand\write\noexpand\pgfutil@auxout{% + \string\savepicturepage + {\pgfpictureid}{\noexpand\arabic{page}}% + }% + }% + \pgf@temp + \protected@write\pgfutil@auxout{}{% + \string\savepointas + {\tikzmark@pp@name{#1}}{\pgfpictureid}{0pt}{0pt}}% + \egroup +} \@ifclassloaded{beamer}{ \renewcommand<>{\tikzmark@outside}[2][]{% \only#3{\beameroriginal{\tikzmark@outside}[{#1}]{#2}}% @@ -272,7 +346,9 @@ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{% \tikzmark@false }{% - \@ifundefined{save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname}{% + \@ifundefined{save@pg@% + \csname save@pt@\tikzmark@pp@name{#1}\endcsname% + }{% \tikzmark@false }{% \ifnum\csname save@pg@% @@ -290,7 +366,9 @@ \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{% \tikzmark@false }{% - \@ifundefined{save@pg@\csname save@pt@\tikzmark@pp@name{#1}\endcsname}{% + \@ifundefined{save@pg@% + \csname save@pt@\tikzmark@pp@name{#1}\endcsname% + }{% \tikzmark@false }{% \ifnum\csname save@pg@% @@ -308,8 +386,7 @@ \begingroup \pgfmark{#2}% \setbox\pgfnodeparttextbox=\hbox\bgroup #3\egroup - \def\tikz@fig@name{#2}% - \tikzset{every subnode/.try,#1}% + \tikzset{every subnode/.try,#1,name=#2}% \pgfpointorigin \tikz@scan@one@point\pgfutil@firstofone(pic cs:#2)\relax \advance\pgf@x by .5\wd\pgfnodeparttextbox @@ -329,24 +406,30 @@ \pgf@x=-\pgf@x% \pgf@y=-\pgf@y% }% - \expandafter\pgfsavepgf@process\csname pgf@sh@sa@\tikz@fig@name\endcsname{% + \expandafter\pgfsavepgf@process + \csname pgf@sh@sa@\tikz@fig@name\endcsname{% \pgf@sh@reanchor{rectangle}{center}% FIXME : this is double work! }% % Save the saved points and the transformation matrix \edef\pgf@node@name{\tikz@fig@name}% \ifx\pgf@node@name\pgfutil@empty% \else% - \expandafter\xdef\csname pgf@sh@ns@\pgf@node@name\endcsname{rectangle}% + \expandafter\xdef + \csname pgf@sh@ns@\pgf@node@name\endcsname{rectangle}% \edef\pgf@sh@@temp{% - \noexpand\gdef\expandafter\noexpand\csname pgf@sh@np@\pgf@node@name\endcsname}% + \noexpand\gdef\expandafter + \noexpand\csname pgf@sh@np@\pgf@node@name\endcsname}% \expandafter\pgf@sh@@temp\expandafter{% \pgf@sh@savedpoints}% \edef\pgf@sh@@temp{% - \noexpand\gdef\expandafter\noexpand\csname pgf@sh@ma@\pgf@node@name\endcsname}% MW + \noexpand\gdef\expandafter + \noexpand\csname pgf@sh@ma@\pgf@node@name\endcsname}% MW \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@savedmacros}% MW \pgfgettransform\pgf@temp - \expandafter\xdef\csname pgf@sh@nt@\pgf@node@name\endcsname{\pgf@temp}% - \expandafter\xdef\csname pgf@sh@pi@\pgf@node@name\endcsname{\pgfpictureid}% + \expandafter\xdef + \csname pgf@sh@nt@\pgf@node@name\endcsname{\pgf@temp}% + \expandafter\xdef + \csname pgf@sh@pi@\pgf@node@name\endcsname{\pgfpictureid}% \fi% }% \egroup @@ -369,31 +452,34 @@ \def\tzmk@prfx{pgf@sys@pdf@mark@pos@pgfid}% \edef\tzmk@pic{\tzmk@prfx\the\pgf@picture@serial@count} \expandafter\ifx\csname\tzmk@pic\endcsname\relax - \edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-1\relax}% + \edef\tzmk@pic% + {\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-1\relax}% \expandafter\ifx\csname\tzmk@pic\endcsname\relax -\edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-2\relax}% + \edef\tzmk@pic% + {\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-2\relax}% \expandafter\ifx\csname\tzmk@pic\endcsname\relax -\edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-3\relax}% + \edef\tzmk@pic% + {\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-3\relax}% \expandafter\ifx\csname\tzmk@pic\endcsname\relax - \pgfutil@ifundefined{pgf@sh@ns@#2}{% - \pgfnodealias{#2}{#2-t}% - \tikzmarkalias{#2}{#2-t}% + \pgfutil@ifundefined{pgf@sh@ns@\tikz@pp@name{#2}}{% + \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-t}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-t}}% }{}% \else - \pgfnodealias{#2}{#2-d}% - \tikzmarkalias{#2}{#2-d}% + \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-d}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-d}}% \fi \else - \pgfnodealias{#2}{#2-t}% - \tikzmarkalias{#2}{#2-t}% + \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-t}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-t}}% \fi \else - \pgfnodealias{#2}{#2-s}% - \tikzmarkalias{#2}{#2-s}% + \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-s}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-s}}% \fi \else - \pgfnodealias{#2}{#2-ss}% - \tikzmarkalias{#2}{#2-ss}% + \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-ss}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-ss}}% \fi \else \subnode@{#1}{#2}{#3}% @@ -436,74 +522,153 @@ \def\tzmk@prfx{pgf@sys@pdf@mark@pos@pgfid}% \edef\tzmk@pic{\tzmk@prfx\the\pgf@picture@serial@count}% \expandafter\ifx\csname\tzmk@pic\endcsname\relax - \edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-1\relax}% + \edef\tzmk@pic% + {\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-1\relax}% \expandafter\ifx\csname\tzmk@pic\endcsname\relax -\edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-2\relax}% + \edef\tzmk@pic% + {\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-2\relax}% \expandafter\ifx\csname\tzmk@pic\endcsname\relax -\edef\tzmk@pic{\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-3\relax}% + \edef\tzmk@pic% + {\tzmk@prfx\the\numexpr\the\pgf@picture@serial@count-3\relax}% \expandafter\ifx\csname\tzmk@pic\endcsname\relax \pgfutil@ifundefined{pgf@sh@ns@\tikz@pp@name{#2}}{% \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-t}}% - \tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-t}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-t}}% }{}% \else \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-d}}% - \tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-d}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-d}}% \fi \else \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-t}}% - \tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-t}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-t}}% \fi \else \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-s}}% - \tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-s}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-s}}% \fi \else \pgfnodealias{\tikz@pp@name{#2}}{\tikz@pp@name{#2-ss}}% - \tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-ss}}% + \@tikzmarkalias{\tikzmark@pp@name{#2}}{\tikzmark@pp@name{#2-ss}}% \fi \else \tikzmarknode@{#1}{#2}{#3}% \fi } +\def\tikzmark@box#1#2{% + \begingroup + \pgfmark{#1}% + \let\pgfnodeparttextbox=#2% + \edef\pgfpictureid{pgfid\the\pgf@picture@serial@count}% + \def\tikz@fig@name{#1}% + \pgfpointorigin + \advance\pgf@x by .5\wd\pgfnodeparttextbox + \advance\pgf@y by .5\ht\pgfnodeparttextbox + \advance\pgf@y by -.5\dp\pgfnodeparttextbox + \pgftransformshift{}% + \setbox\@tempboxa=\hbox\bgroup + {% + \tikzset{ + inner sep=0pt, + minimum size=0pt, + outer sep=0pt, + anchor=base + }% + \let\pgf@sh@savedmacros=\pgfutil@empty% MW + \let\pgf@sh@savedpoints=\pgfutil@empty + \def\pgf@sm@shape@name{rectangle}% CJ % TT added prefix! + \pgf@sh@s@rectangle + \pgf@sh@savedpoints + \pgf@sh@savedmacros% MW + \pgftransformshift{% + \pgf@sh@reanchor{rectangle}{center}% + \pgf@x=-\pgf@x + \pgf@y=-\pgf@y + }% + \expandafter\pgfsavepgf@process + \csname pgf@sh@sa@\tikz@fig@name\endcsname{% + \pgf@sh@reanchor{rectangle}{center}% FIXME : this is double work! + }% + % Save the saved points and the transformation matrix + \edef\pgf@node@name{\tikz@fig@name}% + \ifx\pgf@node@name\pgfutil@empty + \else + \expandafter\xdef + \csname pgf@sh@ns@\pgf@node@name\endcsname{rectangle}% + \edef\pgf@sh@@temp{% + \noexpand\gdef\expandafter + \noexpand\csname pgf@sh@np@\pgf@node@name\endcsname}% + \expandafter\pgf@sh@@temp\expandafter{% + \pgf@sh@savedpoints}% + \edef\pgf@sh@@temp{% + \noexpand\gdef\expandafter + \noexpand\csname pgf@sh@ma@\pgf@node@name\endcsname}% MW + \expandafter\pgf@sh@@temp\expandafter{\pgf@sh@savedmacros}% MW + \pgfgettransform\pgf@temp + \expandafter\xdef + \csname pgf@sh@nt@\pgf@node@name\endcsname{\pgf@temp}% + \expandafter\xdef + \csname pgf@sh@pi@\pgf@node@name\endcsname{\pgfpictureid}% + \fi + }% + \egroup + \endgroup + \box#2% +} \def\usetikzmarklibrary{% \pgfutil@ifnextchar[{\use@tikzmarklibrary}{\use@@tikzmarklibrary}% }%} \def\use@tikzmarklibrary[#1]{\use@@tikzmarklibrary{#1}} \def\use@@tikzmarklibrary#1{% - \edef\pgf@list{#1}% - \pgfutil@for\pgf@temp:=\pgf@list\do{% - \expandafter\pgfkeys@spdef\expandafter\pgf@temp\expandafter{\pgf@temp}% + \edef\pgf@list{#1}% + \pgfutil@for\pgf@temp:=\pgf@list\do{% + \expandafter\pgfkeys@spdef + \expandafter\pgf@temp\expandafter{\pgf@temp}% \ifx\pgf@temp\pgfutil@empty \else - \expandafter\ifx\csname tikzmark@library@\pgf@temp @loaded\endcsname\relax% + \expandafter\ifx + \csname tikzmark@library@\pgf@temp @loaded\endcsname\relax% \expandafter\global\expandafter\let% - \csname tikzmark@library@\pgf@temp @loaded\endcsname=\pgfutil@empty% - \expandafter\edef\csname tikzmark@library@#1@atcode\endcsname{\the\catcode`\@} - \expandafter\edef\csname tikzmark@library@#1@barcode\endcsname{\the\catcode`\|} + \csname tikzmark@library@\pgf@temp @loaded\endcsname + =\pgfutil@empty% + \expandafter\edef + \csname tikzmark@library@#1@atcode\endcsname{\the\catcode`\@} + \expandafter\edef + \csname tikzmark@library@#1@barcode\endcsname{\the\catcode`\|} \catcode`\@=11 \catcode`\|=12 \pgfutil@InputIfFileExists{tikzmarklibrary\pgf@temp.code.tex}{}{ - \PackageError{tikzmark}{I did not find the tikzmark extras library '\pgf@temp'.}{} - }% + \PackageError{tikzmark}{ + I did not find the tikzmark extras library '\pgf@temp'.}{} + }% \catcode`\@=\csname tikzmark@library@#1@atcode\endcsname \catcode`\|=\csname tikzmark@library@#1@barcode\endcsname \fi% \fi }% } - \ExplSyntaxOn +\cs_new_protected:Nn \tikzmark_tl_put_right_braced:Nn + { + \tl_put_right:Nn #1 { { #2 } } + } +\cs_generate_variant:Nn \tikzmark_tl_put_right_braced:Nn { NV, cV, cv, Nx, cx } +\tl_new:N \g__sn_output_tl \prop_new:N \g__sn_prop \tl_new:N \l__sn_tmpa_tl \tl_new:N \l__sn_tmpb_tl \tl_new:N \l__open_bracket_tl \tl_set:Nn \l__open_bracket_tl {[} %] \tl_new:N \l__sn_group_tl -\clist_new:N \l__sn_nodes_clist +\clist_new:N \g__sn_nodes_clist \bool_new:N \l__sn_file_bool \bool_new:N \g__sn_preamble_bool -\bool_set_true:N \g__sn_preamble_bool +\bool_gset_true:N \g__sn_preamble_bool +\keys_define:nn {tikzmark / save nodes} +{ + file .bool_set:N = \l__sn_file_bool, + group .tl_set:N = \l__sn_group_tl, +} \msg_new:nnn {tikzmark} {no file} {File~ "#1"~ doesn't~ exist.} \msg_new:nnn {tikzmark} {loading nodes} {Loading~ nodes~ from~ "#1".} \dim_new:N \l__sn_x_dim @@ -556,67 +721,88 @@ \makeatother \cs_generate_variant:Nn \tikz_scan_point:n {V} \cs_generate_variant:Nn \tikz_scan_point:NNn {NNV} -\cs_new_nopar:Npn \save_nodes:Nn #1#2 +\cs_new_nopar:Npn \__sn_process_node:n #1 { + \group_begin: \tl_clear:N \l__sn_tmpa_tl - \tikz_scan_point:NNn \l__sn_x_dim \l__sn_y_dim {(current~ bounding~ box.center)} + \tikz_scan_point:NNn \l__sn_x_dim \l__sn_y_dim + {(current~ bounding~ box.center)} \dim_set:Nn \l__sn_x_dim {-\l__sn_x_dim} \dim_set:Nn \l__sn_y_dim {-\l__sn_y_dim} \tl_set:Nx \l__sn_centre_tl { {1}{0}{0}{1}{\dim_use:N \l__sn_x_dim}{\dim_use:N \l__sn_y_dim} } - \clist_map_inline:nn {#2} + \tl_if_exist:cT {pgf@sh@ns@#1} { - \tl_if_exist:cT {pgf@sh@ns@##1} + \clist_map_inline:nn {ns,np,ma,pi} { - \clist_map_inline:nn {ns,np,ma,pi} + \tl_put_right:Nn \l__sn_tmpa_tl { - \tl_put_right:Nn \l__sn_tmpa_tl - { - \tl_gset:cn {pgf@sh@####1@ \tikz_set_node_name:n{##1} } - } - \tl_if_exist:cTF {pgf@sh@####1@##1} - { - \tl_put_right:Nx \l__sn_tmpa_tl { - {\exp_not:v {pgf@sh@####1@ \tikz_set_node_name:n {##1}}} - } - } - { - \tl_put_right:Nx \l__sn_tmpa_tl {{}} + \tl_gset:cn {pgf@sh@##1@ \tikz_set_node_name:n{#1} } + } + \tl_if_exist:cTF {pgf@sh@##1@#1} + { + \tl_put_right:Nx \l__sn_tmpa_tl { + {\exp_not:v {pgf@sh@##1@ \tikz_set_node_name:n {#1}}} } } - \tl_put_right:Nn \l__sn_tmpa_tl { - \tl_gset:cn {pgf@sh@nt@ \tikz_set_node_name:n{##1} } + \tl_put_right:Nx \l__sn_tmpa_tl {{}} } - \compose_transformations:NVv \l__sn_tmpb_tl \l__sn_centre_tl {pgf@sh@nt@##1} - \tl_put_right:Nx \l__sn_tmpa_tl {{\exp_not:V \l__sn_tmpb_tl}} - \tl_put_right:Nn \l__sn_tmpa_tl { - \transform_node:Nn \l__sn_transformation_tl { - \tikz_set_node_name:n{##1} - } + } + \tl_put_right:Nn \l__sn_tmpa_tl + { + \tl_gset:cn {pgf@sh@nt@ \tikz_set_node_name:n{#1} } + } + \compose_transformations:NVv + \l__sn_tmpb_tl \l__sn_centre_tl {pgf@sh@nt@#1} + \tl_put_right:Nx \l__sn_tmpa_tl {{\exp_not:V \l__sn_tmpb_tl}} + \tl_put_right:Nn \l__sn_tmpa_tl { + \transform_node:Nn \l__sn_transformation_tl { + \tikz_set_node_name:n{#1} } } } - \tl_set_eq:NN #1 \l__sn_tmpa_tl + \tl_gset_eq:NN \g__sn_output_tl \l__sn_tmpa_tl + \group_end: +} +\cs_new_protected_nopar:Npn \process_node:Nn #1#2 +{ + \__sn_process_node:n {#2} + \tl_set_eq:NN #1 \g__sn_output_tl + \tl_gclear:N \g__sn_output_tl +} +\cs_new_protected_nopar:Npn \process_gnode:Nn #1#2 +{ + \__sn_process_node:n {#2} + \tl_gset_eq:NN #1 \g__sn_output_tl + \tl_gclear:N \g__sn_output_tl } \cs_new_nopar:Npn \save_nodes_to_list:nn #1#2 { - \save_nodes:Nn \l__sn_tmpa_tl {#2} + \tl_clear:N \l__sn_tmpa_tl + \clist_map_inline:nn {#2} + { + \process_node:Nn \l__sn_tmpb_tl {##1} + \tl_put_right:NV \l__sn_tmpa_tl \l__sn_tmpb_tl + } \prop_gput:NnV \g__sn_prop {#1} \l__sn_tmpa_tl } +\cs_generate_variant:Nn \iow_now:Nn {NV} \cs_new_nopar:Npn \save_nodes_to_file:n #1 { - \save_nodes:Nn \l__sn_tmpa_tl {#1} \sn_open_stream: - \iow_now:Nx \g__sn_stream + \clist_map_inline:nn {#1} { - \iow_newline: - \exp_not:V \l__sn_tmpa_tl - \iow_newline: + \process_node:Nn \l__sn_tmpa_tl {##1} + \iow_now:Nx \g__sn_stream + { + \iow_newline: + \exp_not:V \l__sn_tmpa_tl + } } } -\cs_generate_variant:Nn \save_nodes_to_list:nn {VV} +\cs_generate_variant:Nn \save_nodes_to_list:nn {VV, Vn} \cs_generate_variant:Nn \save_nodes_to_file:n {V} \cs_new_nopar:Npn \restore_nodes_from_list:n #1 { @@ -638,6 +824,7 @@ \msg_warning:nnn {tikzmark} {no file} {#1} } } +\cs_generate_variant:Nn \restore_nodes_from_file:n {x} \AtBeginDocument{\bool_gset_false:N \g__sn_preamble_bool} \cs_new_nopar:Npn \compose_transformations:Nnn #1#2#3 @@ -698,7 +885,8 @@ } } } -\cs_generate_variant:Nn \compose_transformations:Nnn {cVv,NVv,NVn,NvV,NnV} +\cs_generate_variant:Nn \compose_transformations:Nnn +{cVv,NVv,NVn,NvV,NnV} \cs_new_nopar:Npn \transform_node:Nn #1#2 { \compose_transformations:cVv {pgf@sh@nt@#2} #1 {pgf@sh@nt@#2} @@ -708,8 +896,12 @@ \tl_set_eq:Nc \l__sn_transformation_tl {pgf@sh@nt@#1} \tikz_scan_point:NNn \l__sn_x_dim \l__sn_y_dim {(#1.center)} - \dim_set:Nn \l__sn_x_dim {\l__sn_x_dim - \tl_item:cn {pgf@sh@nt@#1}{5}} - \dim_set:Nn \l__sn_y_dim {\l__sn_y_dim - \tl_item:cn {pgf@sh@nt@#1}{6}} + \dim_set:Nn \l__sn_x_dim { + \l__sn_x_dim - \tl_item:cn {pgf@sh@nt@#1}{5} + } + \dim_set:Nn \l__sn_y_dim { + \l__sn_y_dim - \tl_item:cn {pgf@sh@nt@#1}{6} + } \compose_transformations:NnV \l__sn_transformation_tl { {1}{0}{0}{1}{\dim_use:N \l__sn_x_dim}{\dim_use:N \l__sn_y_dim} @@ -746,25 +938,32 @@ } }, save~ node/.code={ - \tikz_fig_must_be_named: - \pgfkeysalso{append~ after~ command={ - \pgfextra{ - \clist_gput_right:Nv \l__sn_nodes_clist {tikz@last@fig@name} + \tl_if_eq:nnTF {#1} {\pgfkeysnovalue} + { + \tikz_fig_must_be_named: + \pgfkeysalso{ + append~ after~ command={ + \pgfextra{ + \clist_gput_right:Nv \g__sn_nodes_clist {tikz@last@fig@name} + } } } } + { + \clist_gput_right:Nn \g__sn_nodes_clist {#1} + } }, restore~ nodes~ from~ file/.code={ \bool_if:NTF \g__sn_preamble_bool { - \restore_nodes_from_file:n {#1} + \restore_nodes_from_file:x {#1} } { \tikz_fig_must_be_named: \pgfkeysalso{append~ after~ command={ \pgfextra{ \scope - \split_argument:NNn \tikzset \restore_nodes_from_file:n {#1} + \split_argument:NNn \tikzset \restore_nodes_from_file:x {#1} \endscope } } @@ -803,20 +1002,43 @@ } \cs_new_nopar:Npn \maybe_save_nodes: { - \clist_if_empty:NF \l__sn_nodes_clist + \clist_if_empty:NF \g__sn_nodes_clist { \bool_if:NTF \l__sn_file_bool { - \save_nodes_to_file:V \l__sn_nodes_clist + \save_nodes_to_file:V \g__sn_nodes_clist } { \tl_if_empty:NF \l__sn_group_tl { - \save_nodes_to_list:VV \l__sn_group_tl \l__sn_nodes_clist + \save_nodes_to_list:VV \l__sn_group_tl \g__sn_nodes_clist } } - \clist_gclear:N \l__sn_nodes_clist + \clist_gclear:N \g__sn_nodes_clist + } +} +\DeclareDocumentCommand \SaveNode { o m } +{ + \group_begin: + \IfNoValueF {#1} + { + \keys_set:nn {tikzmark / save nodes} + { + file=false, + group=#1 + } + } + \bool_if:NTF \l__sn_file_bool + { + \save_nodes_to_file:n {#2} + } + { + \tl_if_empty:NF \l__sn_group_tl + { + \save_nodes_to_list:Vn \l__sn_group_tl {#2} + } } + \group_end: } \ExplSyntaxOff %% @@ -837,6 +1059,8 @@ %% tikzmark.pdf, %% tikzlibrarytikzmark.code.tex, and %% tikzmarklibrarylistings.code.tex +%% tikzmarklibraryhighlighting.code.tex +%% tikzmarklibraryams.code.tex %% %% %% End of file `tikzlibrarytikzmark.code.tex'. |