summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-12-11 22:22:32 +0000
committerKarl Berry <karl@freefriends.org>2017-12-11 22:22:32 +0000
commit6fde3f8617ebf837a452f38c9d715f70d93e71e2 (patch)
treef637acf3d4a2d49678365051571447c863125827 /Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
parent960b935b05197800b547ee84fec81fe2248daadf (diff)
spectralsequences (11dec17)
git-svn-id: svn://tug.org/texlive/trunk@46038 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex')
-rw-r--r--Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex262
1 files changed, 200 insertions, 62 deletions
diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
index d33fcf15c67..d69b28d2041 100644
--- a/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
+++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
@@ -1,8 +1,8 @@
%%
-%% Package: spectralsequences v1.1.1 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
%% Author: Hood Chatham
%% Email: hood@mit.edu
-%% Date: 2017-09-16
+%% Date: 2017-12-10
%% License: Latex Project Public License
%%
%% File: sseqmain.code.tex
@@ -63,6 +63,12 @@
\sseq@installmacros
\sseq@installmsghooks
\sseq@install@xparse@Uarggrabber
+ % The behavior of xmax and xmin is very particular, so it's best not to mess with them.
+ % In particular, they shouldn't be expanded until printing no matter what, but we don't want
+ % \pgfmathparse to barf on them. \pgfmathparse really doesn't like engine protected macros,
+ % so in no case should this be engine protected. (Wish we could test an argument for the presence
+ % of engine protected macros). If we try to do that, \sseq@ifpgfmathexpr will break in
+ % \sseq@tikzprimitives@coords@notaclass@handle@.
\def\xmin{\protect\sseq@xmin}\def\xmax{\protect\sseq@xmax}
\def\ymin{\protect\sseq@ymin}\def\ymax{\protect\sseq@ymax}
%
@@ -96,7 +102,7 @@
\global\let\@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
\@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
}
- \sseq@savedpaths@xadd{\sseq@stylelist}
+ \sseq@savedpaths@xadd{\@nx\sseq@style@object{\sseq@stylelist}}
\sseq@savedpaths@add{\begingroup} % prevent some of the two-pass user macros horrors
\let\sseq@error@setup\sseq@error@setup@withinfo
}
@@ -218,6 +224,10 @@
%
\ifx\sseq@xmin\sseq@infinity\sseq@error{no-range}\def\sseq@xmin{0}\def\sseq@xmax{0}\@xp\sseq@break\fi % could be warning
\ifx\sseq@ymin\sseq@infinity\sseq@error{no-range}\def\sseq@ymin{0}\def\sseq@ymax{0}\@xp\sseq@break\fi
+ \let\xmin\sseq@xmin
+ \let\xmax\sseq@xmax
+ \let\ymin\sseq@ymin
+ \let\ymax\sseq@ymax
%
\ifnum\numexpr\sseq@xmax-\sseq@xmin\relax>\numexpr\maxdimen/\dimexpr1pt\relax-1\relax
\sseq@error@xx{range-super-overflow}{x}
@@ -266,7 +276,6 @@
\sseq@setlayoutparameters
\begin{tikzpicture}[/sseqpages/global/{default} options,\ifsseq@hasname/sseqpages/global/{\sseq@thename} options\fi,/sseqpages/global/{this page} options]%
\sseq@sseqstyle@globalpart
- %\pgftransformreset
\sseq@globaldetonetransform
\sseq@globalscaletransform
%
@@ -315,7 +324,6 @@
\ifsseq@mathnodes
\tikzset{execute at begin node=$,execute at end node=$}%
\fi
- %\let\sseq@error@setup\sseq@error@setup@withinfo
%
\begingroup
\sseq@savedbackgroundpaths
@@ -324,10 +332,10 @@
\sseq@useclip
%
\ifsseq@drawdifferentials\else
- \let\sseq@differential@draw@ifpage\@gobble
+ \let\sseq@differential@object\@gobble
\fi
\ifsseq@drawstructlines\else
- \let\sseq@structline@draw@ifpage\@gobble
+ \let\sseq@structline@object\@gobble
\fi
%
\sseq@usesavedpaths
@@ -351,12 +359,48 @@
\end{sseqpage}%
}
+
+\def\SseqCopyPage#1#2#3{
+ \begingroup
+ \def#1{\begingroup}
+ \global\let\sseq@copymacro\empty
+ \def\sseq@thename{#2}
+ \global\let\sseq@savedpaths@save\sseq@savedpaths
+ \sseq@storelist@get\sseq@savedpaths
+ \def\sseq@thepage{#3}
+ \sseq@thepagecount=#3\relax
+ \def\sseq@beginscope@object{\sseq@g@addto@macro#1{\sseq@savedpaths@add{\sseq@beginscope@object}}}
+ \def\sseq@endscope@object{\sseq@g@addto@macro#1{\sseq@savedpaths@add{\sseq@endscope@object}}}
+ \def\sseq@scope@object##1{\sseq@g@addto@macro#1{\sseq@savedpaths@add{\sseq@scope@object{##1}}}}
+ \def\sseq@style@object##1{\sseq@g@addto@macro#1{\sseq@savedpaths@add{\sseq@style@object{##1}}}}
+ \let\sseq@class@drawnode\sseq@copypage@addclass
+ \let\sseq@differential@object\@gobble
+ \let\sseq@structline@draw\sseq@copypage@addstructline
+ \let\sseq@tikzpath@object\@gobble
+ \let\sseq@pgfkeysdocommand\@gobbletwo
+ \sseq@savedpaths
+ \sseq@g@addto@macro#1{\endgroup}
+ \endgroup
+ \@xp\let\csname\sseq@macroname#1 code\endcsname\sseq@copymacro
+ \DeclareSseqGroup #1 {} { \csname\sseq@macroname#1 code\endcsname }
+ \let\sseq@savedpaths\sseq@savedpaths@save
+}
+
+\def\sseq@copypage@addclass#1{
+ \sseq@x@addto@macro\sseq@copymacro{\@nx\sseq@class@copy{\sseq@thename}{#1}}
+}
+
+\def\sseq@copypage@addstructline#1{
+ \sseq@x@addto@macro\sseq@copymacro{\@nx\sseq@structline@copy{\sseq@thename}{#1}}
+}
+
+
%%% Scope
\newcount\sseq@scope@savestackid
\def\sseq@scope@secondpasstoks{}
\def\sseq@scope{\@ifnextchar[{\sseq@scope@}{\sseq@scope@[]}}%]
\def\sseq@scope@[#1]{%
- \sseq@scope@savedpaths@add{\begin{scope}}%
+ \sseq@scope@savedpaths@add{\sseq@beginscope@object}%
% This is a funky hack to fix a problem with shifts. On tmfass, if we don't handle shifts specially, we actually put so much stuff into
% this \sseq@scope@secondpasstoks macro that we exceed TeX's upper bound for the maximum total macro memory. Or something like that -- I don't understand the error,
% but it definitely only depends on how much stuff there is overall and on there being lots of scopes, not on any particular part of the diagram.
@@ -364,12 +408,12 @@
\let\sseq@options@scopeshiftsecondpass\sseq@scope@savedpaths@add
\sseq@processoptions{scope}{#1}% outputs into \sseq@savedoptioncode
\edef\sseq@scope@secondpasstoks{\unexpanded\@xp{\sseq@scope@secondpasstoks}\unexpanded\@xp{\sseq@savedoptioncode}}
- \sseq@eval{\@nx\sseq@scope@savedpaths@add{\sseq@scope@toks{\unexpanded\@xp{\sseq@scope@secondpasstoks}}}}%
+ \sseq@eval{\@nx\sseq@scope@savedpaths@add{\@nx\sseq@scope@object{\sseq@scope@toks{\unexpanded\@xp{\sseq@scope@secondpasstoks}}}}}%
%\advance\sseq@scope@savestackid\@ne
%\sseq@savestack@name{scope@save\the\sseq@scope@savestackid}
}
\def\sseq@endscope{%
- \sseq@scope@savedpaths@add{\end{scope}}
+ \sseq@scope@savedpaths@add{\sseq@endscope@object}
%\sseq@restorestack@name{scope@save\the\sseq@scope@savestackid
}
@@ -411,11 +455,11 @@
\sseq@obj@xdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\nodenum}%
\fi
\ifx\sseq@class@name\pgfutil@empty\else
- \sseq@cleanup@obj{class.\classname.name}
- \sseq@cleanup@obj{class.namedclass.\sseq@class@name}
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
\sseq@namehandler
- \sseq@obj@xdef{class.\classname.name}{\sseq@class@name}
- \sseq@obj@xdef{class.namedclass.\sseq@class@name}{\coordnopar}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
\fi
\sseq@breakpoint
\endgroup
@@ -463,7 +507,14 @@
\sseq@breakfi
\fi
%%%% No more breaks after this point
+
+ \sseq@processlabels % This sets up the label nodes, now that we know the position of the class (I think that's what we needed?)
+ \sseq@class@main % We segment off the main part of the class so that we can call it separately from the copy method
+ \sseq@breakpoint
+ \endgroup
+}
%
+\def\sseq@class@main{
\ifx\sseq@classinsert\empty
% by default, just insert to the right of previous classes
\edef\sseq@classinsert{\nodenum}
@@ -483,7 +534,6 @@
\fi
\fi
%
- \sseq@processlabels % This sets up the label nodes, now that we know the position of the class (I think that's what we needed?)
%
\sseq@xminmax{\xcoord}{\ycoord}%
\sseq@yminmax{\xcoord}{\ycoord}%
@@ -500,14 +550,10 @@
\sseq@obj@xdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\nodenum}%
\fi
\ifx\sseq@class@name\pgfutil@empty\else
- \sseq@cleanup@obj{class.\classname.name}
- \sseq@cleanup@obj{class.namedclass.\sseq@class@name}
- \sseq@namehandler
- \sseq@obj@xdef{class.\classname.name}{\sseq@class@name}
- \sseq@obj@xdef{class.namedclass.\sseq@class@name}{\coordnopar}
- \fi
- \ifcsname sseq@class@showname\endcsname
- \sseq@eval{\@nx\sseq@handleclassquotes{\sseq@obj{class.\classname.name}}{\sseq@class@showname}}
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
\fi
\sseq@pushstack@\coord
%
@@ -530,6 +576,9 @@
\ifx\sseq@classlabelnodes\pgfutil@empty\else
\sseq@obj@xodef{\classname.labelnodes}{\sseq@classlabelnodes}%
\fi
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@xodef{\classname.showname}{\sseq@class@showname}
+ \fi
\ifsseq@needstikz
\sseq@obj@xdef{\classname.needstikz}{\sseq@needstikztrue}%
\fi
@@ -541,11 +590,36 @@
\fi
%
\sseq@savedpaths@addclass{class.\coord}%
- \sseq@breakpoint
- \endgroup
}
\def\sseq@setoffset#1{\sseq@obj@gdef{\classname.offset}{\pgftransformshift{#1}}}
+\def\sseq@copy@nameprefix{}
+
+\def\sseq@class@copy#1#2{
+ \begingroup
+ \let\sseq@thename@saved\sseq@thename
+ \def\sseq@thename{#1}
+ \sseq@lettoobj\sseq@familylist{#2.familylist}
+ \sseq@lettoobj\sseq@savedoptioncode{#2.options}
+ \sseq@lettoobj\sseq@classnodetext{#2.nodetext}
+ \sseq@lettoobj\sseq@classnodetextoptions{#2.nodetext.options}
+ \sseq@lettoobj\sseq@classlabelnodes{#2.labelnodes}
+ \sseq@obj@ifdef{#2.showname}{\sseq@lettoobj\sseq@class@showname{#2.showname}}{}
+ \sseq@lettoobj\sseq@class@name{#2.name}
+ \edef\sseq@class@name{\unexpanded\@xp{\sseq@copy@nameprefix}\unexpanded\@xp{\sseq@class@name}}
+ \sseq@obj{#2.needstikz}
+ \sseq@lettoobj\sseq@tooltip{#2.tooltip}
+ \sseq@class@getparts#2.
+ \sseq@quieterror{class-tag-already-defined}
+ \edef\sseq@class@tag{copiedfrom\sseq@thisposnum}
+ \let\sseq@thename\sseq@thename@saved
+ \sseq@eval{\@nx\sseq@cparsecoord{\the\sseq@tempx,\the\sseq@tempy}}
+ \let\sseq@pushstack@\@gobble
+ \sseq@class@main
+ \endgroup
+}
+
+
% This is for use with "insert" key. Add one to offset index of each class later than the one currently being inserted
% Takes the partial coordinate "x,y" in #1, and the position that the new class is being inserted into in \sseq@classinsert.
\def\sseq@class@adjustclasses#1{
@@ -643,14 +717,13 @@
\sseq@obj@xdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\sseq@index}%
\fi
\ifx\sseq@class@name\pgfutil@empty\else
- \sseq@obj@ifdef{class.\classname.name}{
- \sseq@error@nn{classoptions-class-already-named}{\coord}{\sseq@obj{class.\classname.name}}%could be warning
+ \sseq@obj@ifdef{\classname.name}{
+ \sseq@error@nn{classoptions-class-already-named}{\coord}{\sseq@obj{\classname.name}}%could be warning
}{}
- \sseq@cleanup@obj{class.\classname.name}
- \sseq@cleanup@obj{class.namedclass.\sseq@class@name}
- \sseq@namehandler
- \sseq@obj@xdef{class.\classname.name}{\sseq@class@name}
- \sseq@obj@xdef{class.namedclass.\sseq@class@name}{\coordnopar}
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
\fi
\sseq@tempcount=\sseq@gen\relax
\advance\sseq@tempcount\m@ne
@@ -679,6 +752,9 @@
\sseq@cleanup@obj{\classname.labelnodes}
\sseq@classoptions@obj@addto@withpagerange{\classname.labelnodes}{\sseq@classlabelnodes}
\fi
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@xodef{\classname.showname}{\sseq@class@showname}
+ \fi
\ifx\sseq@familylist\pgfutil@empty\else
\sseq@cleanup@obj{\classname.familylist}
\sseq@classoptions@obj@addto@withpagerange{\classname.familylist}{\sseq@familylist}
@@ -725,10 +801,38 @@
\sseq@smuggle@macro\sseq@gen
\egroup
}
+
\sseq@DeclareDocumentCommand\replaceclass{od()}{%
\begingroup
\sseq@loadinputline
\sseq@xsetthiscall{\string\replaceclass\IfNoValueF{#1}{[\unexpanded{#1}]}\unexpanded{(#2)}}
+%
+ \IfNoValueTF{#2}{
+ \def\sseq@coord{\lastclass0}
+ }{
+ \def\sseq@coord{#2}
+ }
+ \sseq@parsecoord\coord{\sseq@coord}{coordinate passed to \string\replaceclass}%
+ \sseq@replaceclassmain{#1}
+}
+
+\sseq@DeclareDocumentCommand\replacesource{o}{
+ \begingroup
+ \sseq@loadinputline
+ \sseq@xsetthiscall{\string\replacesource\IfNoValueF{#1}{[\unexpanded{#1}]}}
+ \sseq@parsedcoord@restore{\coord}{lastsource}
+ \sseq@replaceclassmain{#1}
+}
+
+\sseq@DeclareDocumentCommand\replacetarget{o}{
+ \begingroup
+ \sseq@loadinputline
+ \sseq@xsetthiscall{\string\replacetarget\IfNoValueF{#1}{[\unexpanded{#1}]}}
+ \sseq@parsedcoord@restore{\coord}{lasttarget}
+ \sseq@replaceclassmain{#1}
+}
+
+\def\sseq@replaceclassmain#1{
\sseq@options@firstpassmode
\the\sseq@sseqstyle
\the\sseq@classstyle
@@ -737,24 +841,23 @@
\IfNoValueF{#1}{%
\sseq@processoptions{class}{#1}% Outputs result into \sseq@savedoptioncode
}%
-%
- \IfNoValueTF{#2}{
- \def\sseq@coord{\lastclass0}
- }{
- \def\sseq@coord{#2}
- }
- \sseq@parsecoord\coord{\sseq@coord}{\string\classoptions}%
\sseq@processlabels
-%
\sseq@obj@ifundef{class.\coord.num}{\sseq@error@x{replaceclass-no-class}{\coordname}\sseq@break}{}
\sseq@ifdead\coord{}{\sseq@error@x{replaceclass-not-dead-yet}{\coordname}\sseq@break}
+%
+ \edef\oldclassname{class.\coord[\sseq@obj{class.\coord.num}]}
+ \sseq@cleanup@obj{class.\coord.num}
+ \sseq@obj@inc{class.\coord.num}
+ \edef\classname{class.\coord[\sseq@obj{class.\coord.num}]}
+%
\ifsseq@keepchanges\else
- \ifnum\the\numexpr\sseq@obj{class.\coord[\sseq@obj{class.\coord.num}].page}<\sseq@thepagecount\else
- \edef\sseq@temp{\sseq@obj{class.\coord[\sseq@obj{class.\coord.num}].page}}
+ \ifnum\the\numexpr\sseq@obj{\oldclassname.page}<\sseq@thepagecount\else
+ \edef\sseq@temp{\sseq@obj{\oldclassname.page}}
\sseq@error@xxx{replaceclass-no-effect-on-this-page}{\coord}{\sseq@temp}{\the\numexpr\sseq@temp+\@ne}% warning
\sseq@breakfifi
\fi
\fi
+%
\let\partialcoord\coord@partial
\ifx\sseq@class@tag\pgfutil@empty\else
\sseq@obj@ifdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{%
@@ -763,18 +866,20 @@
\sseq@cleanup@obj{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}%
\sseq@obj@xdef{partcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\nodenum}%
\fi
- \ifx\sseq@class@name\pgfutil@empty\else
- \sseq@cleanup@obj{class.\classname.name}
- \sseq@cleanup@obj{class.namedclass.\sseq@class@name}
- \sseq@namehandler
- \sseq@obj@xdef{class.\classname.name}{\sseq@class@name}
- \sseq@obj@xdef{class.namedclass.\sseq@class@name}{\coordnopar}
- \fi
- \ifcsname sseq@class@showname\endcsname
- \sseq@eval{\@nx\sseq@handleclassquotes{\sseq@obj{class.\classname.name}}{\sseq@class@showname}}
+ \ifx\sseq@class@name\pgfutil@empty
+ \sseq@obj@ifdef{\oldclassname.name}{
+ \sseq@lettoobj\sseq@class@name{\oldclassname.name}
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
+ }{}
+ \else
+ \sseq@cleanup@obj{\classname.name}
+ \sseq@cleanup@obj{class.namedclass.\detokenize\@xp{\sseq@class@name}}
+ \sseq@obj@xdef{\classname.name}{\sseq@class@name}
+ \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{\coordnopar}
\fi
- \sseq@cleanup@obj{class.\coord.num}
- \sseq@obj@inc{class.\coord.num}
\let\partialcoord\coord@partial
\ifx\sseq@class@tag\pgfutil@empty\else
\sseq@obj@ifdef{partialcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{%
@@ -782,8 +887,10 @@
}{}%
\sseq@obj@xdef{partialcoord.(\partialcoord).tag.\sseq@class@tagprefix\sseq@class@tag}{\nodenum}%
\fi
- \edef\classname{class.\coord[\sseq@obj{class.\coord.num}]}
%
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@xodef{\classname.showname}{\sseq@class@showname}
+ \fi
\sseq@obj@xodef{\classname.familylist}{\sseq@familylist}
\sseq@obj@xdef{\classname.page}{\sseq@infinity}
\sseq@obj@xodef{\classname.options}{\sseq@savedoptioncode}
@@ -794,6 +901,9 @@
\sseq@obj@xodef{\classname.nodetext.options}{\sseq@classnodetextoptions}
\fi
\sseq@obj@xodef{\classname.labelnodes}{\sseq@classlabelnodes}
+ \ifcsname sseq@class@showname\endcsname
+ \sseq@obj@xodef{\classname.showname}{\sseq@class@showname}
+ \fi
\sseq@obj@gdef{\classname.dependencies}{}
\ifsseq@needstikz
\sseq@obj@xdef{\classname.needstikz}{\sseq@needstikztrue}
@@ -819,6 +929,7 @@
\fi
\egroup
}
+
% #1 -- class
% #2 -- page
% If there is a class #1 drawn on page #2, set \sseq@gen to be the generation of that class, otherwise set \sseq@gen to be -1.
@@ -856,6 +967,8 @@
\sseq@DeclareDocumentCommandAs\sseq@kill@\kill {d()} {
\sseq@xsetthiscall{\string\kill\unexpanded\@xp{\sseq@dpage}\IfNoValueF{#1}{(#1)}}%
\sseq@parsecoord\coordinate{\IfNoValueTF{#1}{\lastclass}{#1}}{}%
+ \sseq@parsedcoord@save{lastsource}{\coordinate}
+ \sseq@parsedcoord@save{lasttarget}{\coordinate}
\sseq@ifintexpr{\sseq@dpage}{%
\sseq@tempcount=\numexpr\sseq@dpage\relax % this is a convenient way to get rid of spaces because #3 has to be a number
}{%
@@ -934,6 +1047,8 @@
\def\sseq@d@d#1#2{%%
\sseq@d@setpageminrec{class.\source}{#2}{source}% automatically handles \sseq@cleanup@obj
\sseq@d@setpageminrec{class.\target}{#2}{target}
+ %%% This is the last point we might break, so now the differential is good.
+ %%% Note that we can break inside \sseq@d@setpageclass inside \sseq@d@setpageminrec
%
\ifsseq@drawdifferential % TODO: probably should get rid of invisible now that we have \kill...
\sseq@obj@xodef{d.#2\source\target.familylist}{\sseq@familylist}
@@ -1017,7 +1132,7 @@
\fi
\fi
\sseq@obj@xdef{\sseq@classgenname.page}{#2}
- \sseq@obj@xdef{\sseq@classgenname.deathinfo}{#3 of differential \sseq@thiscall\space on page #2}
+ \sseq@obj@xdef{\sseq@classgenname.deathinfo}{#3 of differential \sseq@thiscall\ on page #2}
\bgroup
\def\foreach{\@nx\@nx\@nx\foreach}
\protected\def\\{}
@@ -1033,7 +1148,7 @@
\ifx\sseq@restofstacktrace\pgfutil@empty\else\sseq@tempiftrue\fi
\sseq@obj@xdef{\sseq@classgenname.deathstacktrace}{%
\ifsseq@tempif
- \unexpanded{\\\\}Stack trace for differential \sseq@thiscall\ that killed #3:\unexpanded{\\}%
+ \unexpanded{\\\\}Stack trace for differential \@nx\unexpanded{\sseq@thiscall} that killed #3:\unexpanded{\\}%
\ifx\sseq@temp\sseq@empty\else\unexpanded{\ \ \ }\@nx\sseq@stack@unexpanded{\unexpanded\@xp{\the\sseq@foreachcall}}\fi
\unexpanded\@xp{\sseq@restofstacktrace}%
\fi
@@ -1056,8 +1171,10 @@
\def\sseq@d@setpagemin#1#2{
\ifnum\sseq@obj{#1.page}>#2\relax
- \sseq@cleanup@obj{#1.page}
- \sseq@obj@xdef{#1.page}{#2}
+ \ifnum\sseq@obj{#1.pagemin}>#2\relax\else % prevent a d1 from getting rid of a structline that was supposed to start on page 5
+ \sseq@cleanup@obj{#1.page}
+ \sseq@obj@xdef{#1.page}{#2}
+ \fi
\fi
}
\def\sseq@differential@draw@ifpage#1{
@@ -1262,6 +1379,27 @@
\sseq@obj@xoaddto{\sseq@structlinename.familylist}{\sseq@familylist}
\ifnum\sseq@tempcount<\sseq@genmax\repeat
}
+
+\def\sseq@structline@copy#1#2{
+ \begingroup
+ \sseq@structline@copy@decomposename#2
+ \let\sseq@thename@saved\sseq@thename
+ \def\sseq@pagemin{0}
+ \sseq@parsecoord\source{\sourcename}{source of structure line}%
+ \sseq@parsecoord\target{\targetname}{target of structure line}
+ \def\sseq@thename{#1}
+ \sseq@lettoobj\sseq@familylist{#2.familylist}
+ \sseq@lettoobj\sseq@savedoptioncode{#2.options}
+ \let\sseq@thename\sseq@thename@saved
+ \sseq@structline@structline
+ \endgroup
+}
+
+\def\sseq@structline@copy@decomposename#1.(#2,#3,#4)(#5,#6,#7){
+ \def\sourcename{#2,#3,copiedfrom#4}
+ \def\targetname{#5,#6,copiedfrom#7}
+}
+
\def\sseq@structline@getgen#1{
\bgroup
\sseq@tempcount=\sseq@obj{structline.\source\target.num}\relax
@@ -1366,7 +1504,7 @@
\sseq@obj@xodef{\circleclassobjname.tikzprimoptions}{\sseq@keysfortikzprim}
\sseq@obj@xdef{\circleclassobjname.fitnodes}{\@nx\tikz@lib@fit{(sseq{\coordanopar})(sseq{\coordbnopar})\sseq@fitalso}}
%\edef\temp{\@nx\sseq@circleclass@draw{\coorda@internalname}{\coordb@internalname}{\unexpanded\@xp{\sseq@savedoptioncode}}}
- \sseq@savedpaths@xadd{\@nx\sseq@circleclass@draw@ifpage{\circleclassobjname}{\coordanopar}{\coordbnopar}}
+ \sseq@savedpaths@xadd{\@nx\sseq@circleclass@object{\circleclassobjname}{\coordanopar}{\coordbnopar}}
\sseq@obj@xdef{\circleclassobjname.page}{\sseq@pagemax}
\sseq@obj@xdef{\circleclassobjname.pagemin}{\sseq@pagemin}
\@ifundefined{sseq@fit@pagemax}{
@@ -1425,13 +1563,13 @@
\the\sseq@scope@toks
\sseq@options@normalmode
\sseq@processoptions{class/label}{#2}%
- \sseq@classlabeltextfn{#1}% labeltextfn is a private handler, classlabeltextfn is exposed via "class label handler"
+ \sseq@classlabel@handler{#1}% labeltextfn is a private handler for transformations, sseq@classlabel@handler is exposed via "class label handler"
\ifsseq@classlabel
\sseq@options@firstpassmode
\the\sseq@outerclasslabelstyle
\sseq@x@addto@macro\sseq@classlabelnodes{%
\@nx\sseq@drawlabel{%
- \sseq@maybemathswitch\unexpanded\@xp{\processedlabel}\sseq@maybemathswitch}%
+ \sseq@maybemathswitch\unexpanded\@xp{\result}\sseq@maybemathswitch}%
{% This is setup to prevent a bug where \classoptions and class label style don't work correctly together
\the\sseq@sseqstyle\@nx\the\sseq@sseqstyle@page
\the\sseq@labelstyle\@nx\the\sseq@labelstyle@page
@@ -1449,7 +1587,7 @@
\the\sseq@innerclasslabelstyle
\sseq@options@normalmode
\sseq@protectedeval{\@nx\pgfqkeys{/sseqpages/class/label}{#2}}%
- \sseq@protected@xdef\sseq@classnodetext{\sseq@maybemathswitch\processedlabel\sseq@maybemathswitch}%
+ \sseq@protected@xdef\sseq@classnodetext{\sseq@maybemathswitch\result\sseq@maybemathswitch}%
\xdef\sseq@classnodetextoptions{%
%\unexpanded{\def\pgfkeysdefaultpath{/sseqpages/class/node texts/}}%
\sseq@thelabelstyle\sseq@theclasslabelstyle\sseq@theinnerclasslabelstyle