summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex')
-rw-r--r--Master/texmf-dist/tex/latex/tikzmark/tikzlibrarytikzmark.code.tex438
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'.