%% %% This is file `tikzlibrarytikzmark.code.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% tikzmark.dtx (with options: `tikzlibrary') %% ---------------------------------------------------------------- %% tikzmark --- remembering absolute positioning with TikZ. %% E-mail: loopspace@mathforge.org %% Released under the LaTeX Project Public License v1.3c or later %% See http://www.latex-project.org/lppl.txt %% ---------------------------------------------------------------- %% \RequirePackage{expl3, l3keys2e, xparse} \tikzset{% remember picture with id/.style={% remember picture, overlay, save picture id=#1, }, every picture/.append style={% execute at end picture={% \ifpgfrememberpicturepositiononpage% \edef\pgf@temp{% \noexpand\write\noexpand\pgfutil@auxout{% \string\savepicturepage% {\pgfpictureid}{\noexpand\arabic{page}}% }% }% \pgf@temp \fi% }, }, save picture id/.code={% \protected@write\pgfutil@auxout{}{% \string\savepointas% {\tikzmark@pp@name{#1}}{\pgfpictureid}{0pt}{0pt}}% }, if picture id/.code args={#1#2#3}{% \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{% \pgfkeysalso{#3}% }{ \pgfkeysalso{#2}% } }, next page/.is choice, next page vector/.initial={\pgfqpoint{0pt}{0pt}}, next page/below/.style={% next page vector={\pgfqpoint{0pt}{-\the\paperheight}}% }, next page/above/.style={% next page vector={\pgfqpoint{0pt}{\the\paperheight}}% }, next page/left/.style={% next page vector={\pgfqpoint{-\the\paperwidth}{0pt}}% }, next page/right/.style={% next page vector={\pgfqpoint{\the\paperwidth}{0pt}}% }, next page/ignore/.style={% next page vector={\pgfqpoint{0pt}{0pt}}% }, tikzmark prefix/.initial=,% tikzmark suffix/.initial=,% } \def\tikzmark@pp@name#1{% \csname pgfk@/tikz/tikzmark prefix\endcsname% #1% \csname pgfk@/tikz/tikzmark suffix\endcsname% }% \def\savepointas#1#2#3#4{% \expandafter\gdef\csname save@pt@#1\endcsname{#2}% \expandafter\gdef\csname save@pt@#1@offset\endcsname% {\pgfqpoint{#3}{#4}}% } \def\savepicturepage#1#2{% \expandafter\gdef\csname save@pg@#1\endcsname{#2}% } \def\tmk@labeldef#1,#2\@nil{% \edef\tmk@label{\tikzmark@pp@name{#1}}% \def\tmk@def{#2}% } \tikzdeclarecoordinatesystem{pic}{% \pgfutil@in@,{#1}% \ifpgfutil@in@% \tmk@labeldef#1\@nil \else \tmk@labeldef#1,(0pt,0pt)\@nil \fi \@ifundefined{save@pt@\tmk@label}{% \tikz@scan@one@point\pgfutil@firstofone\tmk@def }{% \pgfsys@getposition{\csname save@pt@\tmk@label\endcsname}% \save@orig@pic% \pgfsys@getposition{\pgfpictureid}\save@this@pic% \pgf@process{\pgfpointorigin\save@this@pic}% \pgf@xa=\pgf@x \pgf@ya=\pgf@y \pgf@process{\pgfpointorigin\save@orig@pic}% \advance\pgf@x by -\pgf@xa \advance\pgf@y by -\pgf@ya \pgf@xa=\pgf@x \pgf@ya=\pgf@y \pgf@process% {\pgfpointorigin\csname save@pt@\tmk@label @offset\endcsname}% \advance\pgf@xa by \pgf@x \advance\pgf@ya by \pgf@y \@ifundefined{save@pg@\csname save@pt@\tmk@label\endcsname}{}{% \@ifundefined{save@pg@\pgfpictureid}{}{% \pgfkeysvalueof{/tikz/next page vector}% \advance \pgf@xa by % \csname save@pg@\csname save@pt@\tmk@label\endcsname\endcsname\pgf@x\relax \advance \pgf@ya by % \csname save@pg@\csname save@pt@\tmk@label\endcsname\endcsname\pgf@y\relax \advance \pgf@xa by % -\csname save@pg@\pgfpictureid\endcsname\pgf@x\relax \advance \pgf@ya by % -\csname save@pg@\pgfpictureid\endcsname\pgf@y\relax }% }% \pgf@x=\pgf@xa \pgf@y=\pgf@ya \pgftransforminvert \pgf@pos@transform{\pgf@x}{\pgf@y}% }% } \newcommand\tikzmark@outside[2][]{% \tikz[remember picture with id=#2]{#1}% } \def\tikzmark@inside#1#2{% \tikzset{remember picture}% \tikz@scan@one@point\pgfutil@firstofone#2\relax \protected@write\pgfutil@auxout{}{% \string\savepointas{\tikzmark@pp@name{#1}}{\pgfpictureid}{\the\pgf@x}{\the\pgf@y}}% } \def\tikzmark{% \ifx\pgfpictureid\@undefined \let\tikzmark@next=\tikzmark@outside \else \let\tikzmark@next=\tikzmark@inside \fi \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 } \@ifclassloaded{beamer}{ \renewcommand<>{\tikzmark@outside}[2][]{% \only#3{\beameroriginal{\tikzmark@outside}[{#1}]{#2}}% } \renewcommand<>{\tikzmark@inside}[2]{% \only#3{\beameroriginal{\tikzmark@inside}{#1}{#2}}% } }{} \@ifclassloaded{beamer}{ \renewcommand<>{\pgfmark}[1]{\only#2{\beameroriginal{\pgfmark}{#1}}} }{} \@ifclassloaded{beamer}{ \tikzset{ tikzmark suffix=-\the\beamer@slideinframe } }{} \newcommand\iftikzmark[3]{% \@ifundefined{save@pt@\tikzmark@pp@name{#1}}{% #3% }{% #2% }% }% \newcommand\subnode[3][]{% \begingroup \pgfmark{#2}% \setbox\pgfnodeparttextbox=\hbox\bgroup #3\egroup \def\tikz@shape{rectangle}% \def\tikz@anchor{center}% \def\tikz@fig@name{#2}% \tikzset{every subnode/.try,#1}% \pgfpointorigin \tikz@scan@one@point\pgfutil@firstofone(pic cs:#2)\relax \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 \pgfutil@ifundefined{pgf@sh@s@\tikz@shape}% {\PackageError{pgf}{Unknown shape ``\tikz@shape''}{}}% {% {% \let\pgf@sh@savedmacros=\pgfutil@empty% MW \let\pgf@sh@savedpoints=\pgfutil@empty% \def\pgf@sm@shape@name{\tikz@shape}% CJ % TT added prefix! \csname pgf@sh@s@\tikz@shape\endcsname% \pgf@sh@savedpoints% \pgf@sh@savedmacros% MW \pgftransformshift{% \pgf@sh@reanchor{\tikz@shape}{\tikz@anchor}% \pgf@x=-\pgf@x% \pgf@y=-\pgf@y% }% \expandafter\pgfsavepgf@process\csname pgf@sh@sa@\tikz@fig@name\endcsname{% \pgf@sh@reanchor{\tikz@shape}{\tikz@anchor}% 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{\tikz@shape}% \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 \box\pgfnodeparttextbox \endgroup } \def\tikzmarknode@#1#2#3{% \tikz[% remember picture, baseline=(#2.base), save picture id={#2}, every tikzmarknode picture/.try ] { \node[ anchor=base, inner sep=0pt, name={#2}, node contents={#3}, every tikzmarknode/.try, #1 ]}% } \newcommand\tikzmarknode[3][]{% \ifmmode \mathchoice{% \tikzmarknode@{#1}{#2-d}{\(\displaystyle #3\)}% }{% \tikzmarknode@{#1}{#2-t}{\(\textstyle #3\)}% }{% \tikzmarknode@{#1}{#2-s}{\(\scriptstyle #3\)}% }{% \tikzmarknode@{#1}{#2-ss}{\(\scriptscriptstyle #3\)}% }% \let\pgf@nodecallback\pgfutil@gobble \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}% \expandafter\ifx\csname\tzmk@pic\endcsname\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}% \expandafter\ifx\csname\tzmk@pic\endcsname\relax \pgfnodealias{#2}{#2-t}% %% Fallback \else \pgfnodealias{#2}{#2-d}% \fi \else \pgfnodealias{#2}{#2-t}% \fi \else \pgfnodealias{#2}{#2-s}% \fi \else \pgfnodealias{#2}{#2-ss}% \fi \else \tikzmarknode@{#1}{#2}{#3}% \fi } \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}% \ifx\pgf@temp\pgfutil@empty \else \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`\|} \catcode`\@=11 \catcode`\|=12 \pgfutil@InputIfFileExists{tikzmarklibrary\pgf@temp.code.tex}{}{ \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 \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 \bool_new:N \l__sn_file_bool \dim_new:N \l__sn_x_dim \dim_new:N \l__sn_y_dim \dim_new:N \l__sn_xa_dim \dim_new:N \l__sn_ya_dim \tl_new:N \l__sn_centre_tl \tl_new:N \l__sn_transformation_tl \tl_set:Nn \l__sn_transformation_tl {{1}{0}{0}{1}{0pt}{0pt}} \iow_new:N \g__sn_stream \bool_new:N \g__sn_stream_bool \tl_new:N \g__sn_filename_tl \tl_set:Nx \g__sn_filename_tl {\c_sys_jobname_str} \cs_new_nopar:Npn \sn_open_stream: { \bool_if:NF \g__sn_stream_bool { \iow_open:Nn \g__sn_stream {\tl_use:N \g__sn_filename_tl .nodes} \bool_gset_true:N \g__sn_stream_bool } } \AtEndDocument { \ExplSyntaxOn \bool_if:NT \g__sn_stream_bool { \iow_close:N \g__sn_stream } \ExplSyntaxOff } \makeatletter \cs_set_eq:NN \tikz_set_node_name:n \tikz@pp@name \cs_set_eq:NN \tikz_fig_must_be_named: \tikz@fig@mustbenamed \cs_new_nopar:Npn \tikz_scan_point:n #1 { \tikz@scan@one@point\pgfutil@firstofone#1\relax } \cs_new_nopar:Npn \tikz_scan_point:NNn #1#2#3 { \tikz@scan@one@point\pgfutil@firstofone#3\relax \dim_set_eq:NN #1 \pgf@x \dim_set_eq:NN #2 \pgf@y } \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 { \tl_clear:N \l__sn_tmpa_tl \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} { \clist_map_inline:nn {ns,np,ma,pi} { \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_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 } \cs_new_nopar:Npn \save_nodes_to_list:nn #1#2 { \save_nodes:Nn \l__sn_tmpa_tl {#2} \prop_gput:NnV \g__sn_prop {#1} \l__sn_tmpa_tl } \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 { \iow_newline: \exp_not:V \l__sn_tmpa_tl \iow_newline: } } \cs_generate_variant:Nn \save_nodes_to_list:nn {VV} \cs_generate_variant:Nn \save_nodes_to_file:n {V} \cs_new_nopar:Npn \restore_nodes_from_list:n #1 { \prop_get:NnNT \g__sn_prop {#1} \l__sn_tmpa_tl { \tl_use:N \l__sn_tmpa_tl } } \cs_new_nopar:Npn \restore_nodes_from_file:n #1 { \file_if_exist:nT {#1.nodes} { \ExplSyntaxOn \file_input:n {#1.nodes} \ExplSyntaxOff } } \cs_new_nopar:Npn \compose_transformations:Nnn #1#2#3 { \tl_gset:Nx #1 { {\fp_eval:n { \tl_item:nn {#2} {1} * \tl_item:nn {#3} {1} + \tl_item:nn {#2} {3} * \tl_item:nn {#3} {2} } } {\fp_eval:n { \tl_item:nn {#2} {2} * \tl_item:nn {#3} {1} + \tl_item:nn {#2} {4} * \tl_item:nn {#3} {2} } } {\fp_eval:n { \tl_item:nn {#2} {1} * \tl_item:nn {#3} {3} + \tl_item:nn {#2} {3} * \tl_item:nn {#3} {4} } } {\fp_eval:n { \tl_item:nn {#2} {2} * \tl_item:nn {#3} {3} + \tl_item:nn {#2} {4} * \tl_item:nn {#3} {4} } } {\fp_to_dim:n { \tl_item:nn {#2} {1} * \tl_item:nn {#3} {5} + \tl_item:nn {#2} {3} * \tl_item:nn {#3} {6} + \tl_item:nn {#2} {5} } } {\fp_to_dim:n { \tl_item:nn {#2} {2} * \tl_item:nn {#3} {5} + \tl_item:nn {#2} {4} * \tl_item:nn {#3} {6} + \tl_item:nn {#2} {6} } } } } \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} } \cs_new_nopar:Npn \set_transform_from_node:n #1 { \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}} \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} } \l__sn_transformation_tl } \cs_generate_variant:Nn \set_transform_from_node:n {v} \tikzset{ set~ saved~ nodes~ file~ name/.code={ \tl_gset:Nx \g__sn_filename_tl {#1} }, transform~ saved~ nodes/.code={ \set_transform_from_node:v {tikz@last@fig@name} }, set~ node~ group/.code={ \tl_set:Nn \l__sn_group_tl {#1} \pgfkeysalso{ execute~ at~ end~ scope={ \maybe_save_nodes: } } }, save~ nodes~ to~ file/.code={ \tl_if_eq:nnTF {#1}{false} { \bool_set_false:N \l__sn_file_bool } { \bool_set_true:N \l__sn_file_bool } \pgfkeysalso{ execute~ at~ end~ scope={ \maybe_save_nodes: } } }, 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} } } } }, restore~ nodes~ from~ file/.code={ \tikz_fig_must_be_named: \pgfkeysalso{append~ after~ command={ \pgfextra{ \scope \split_argument:NNn \tikzset \restore_nodes_from_file:n {#1} \endscope } } } }, restore~ nodes~ from~ list/.code={ \tikz_fig_must_be_named: \pgfkeysalso{append~ after~ command={ \pgfextra{ \scope \split_argument:NNn \tikzset \restore_nodes_from_list:n {#1} \endscope } } } } } \cs_generate_variant:Nn \clist_gput_right:Nn {Nv} \cs_new_nopar:Npn \split_argument:NNn #1#2#3 { \tl_set:Nx \l__sn_tmpa_tl {\tl_head:n {#3}} \tl_if_eq:NNTF \l__sn_tmpa_tl \l__open_bracket_tl { \split_argument_aux:NNp #1#2#3 } { #2 {#3} } } \cs_new_nopar:Npn \split_argument_aux:NNp #1#2[#3]#4 { #1 {#3} #2 {#4} } \cs_new_nopar:Npn \maybe_save_nodes: { \clist_if_empty:NF \l__sn_nodes_clist { \bool_if:NTF \l__sn_file_bool { \save_nodes_to_file:V \l__sn_nodes_clist } { \tl_if_empty:NF \l__sn_group_tl { \save_nodes_to_list:VV \l__sn_group_tl \l__sn_nodes_clist } } \clist_gclear:N \l__sn_nodes_clist } } \ExplSyntaxOff %% %% Copyright (C) 2011-2018 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 file tikzmark.dtx %% and the derived files tikzmark.ins, %% tikzmark.pdf, %% tikzlibrarytikzmark.code.tex, and %% tikzmarklibrarylistings.code.tex %% %% %% End of file `tikzlibrarytikzmark.code.tex'.