summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-07-19 20:15:07 +0000
committerKarl Berry <karl@freefriends.org>2021-07-19 20:15:07 +0000
commit8e5b8d42fd285921dde3b5fa0a45034f98dba2d1 (patch)
tree75918d0205c8711ceeb614a73250813d16280e2a /Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
parentef21a6a342dc9620b74140da085c526371b579f5 (diff)
spectralsequences (19jul21)
git-svn-id: svn://tug.org/texlive/trunk@59992 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.tex348
1 files changed, 307 insertions, 41 deletions
diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
index d9429f2215f..6456f99b4b5 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.2.2
+%% Package: spectralsequences v1.3.0 2021-07-18
%% Author: Hood Chatham
%% Email: hood@mit.edu
-%% Date: 2019-02-18
+%% Date: 2021-07-18
%% License: Latex Project Public License
%%
%% File: sseqmain.code.tex
@@ -103,9 +103,10 @@
\@xp\@nx\csname pgfk@/sseqpages/global/{\sseq@currentoptionpath} options/.@cmd\endcsname
}
\sseq@savedpaths@xadd{\@nx\sseq@style@object{\sseq@stylelist}}
- \sseq@savedpaths@add{\begingroup} % prevent some of the two-pass user macros horrors
+ \sseq@savedpaths@add{\begingroup\sseq@startcontentmarker} % prevent some of the two-pass user macros horrors
\let\sseq@error@setup\sseq@error@setup@withinfo
}
+\let\sseq@startcontentmarker\relax
% Just store all the settings
\def\endsseqdata{%
@@ -152,6 +153,8 @@
\gdef\sseq@pagecleanup{}% For undoing local option settings
%
\def\sseq@thepage{0}% page defaults to 0
+ \def\thepage{\sseq@printpageas}
+ \def\page{\sseq@printnum@inftytosymbol{\sseq@thepage}}
\sseq@thepagecount=\z@
\pgfqkeys{/sseqpages/global/name only}{#1}% Get the name
\sseq@tempiftrue
@@ -240,26 +243,66 @@
\@xp\sseq@break
\fi
%
- \sseq@tempdimen = \dimexpr \textwidth -\sseq@clip@padding@right - \sseq@xaxis@end@extend - \sseq@xaxis@start@extend - \sseq@yaxisgap \relax
- \sseq@tempcount = \numexpr \sseq@tempdimen /\sseq@xscalecm \relax
- \ifnum \numexpr\sseq@xmax-\sseq@xmin + 1 > \sseq@tempcount
- \pgfmathparse{\sseq@tempdimen/1cm/(\sseq@xmax-\sseq@xmin+1)}
- \sseq@error@xxxx{range-overflow}{x}
- {from \sseq@xmin\space to \sseq@xmax\space (xmax - xmin = \the\numexpr\sseq@xmax-\sseq@xmin)}
- {\the\sseq@tempcount}% max x range
- {\pgfmathresult}% max xscale
- %\@xp\sseq@break
- \fi
+ \sseq@setlayoutparameters
+ \ifsseq@rangecheck
+ % Calculate available space
+
+ % We might need to know the dimensions of the tick marks in order to calculate "margin" size.
+ \bgroup
+ \@xp\tikzset\@xp{\sseq@xtickstyle}
+ \pgfmathparse{height("\sseq@xmin") + depth("\sseq@xmin")}
+ \edef\sseq@xlabelheight{\pgfmathresult pt}
+ \sseq@smuggle@macro\sseq@xlabelheight
+ \egroup
+ \bgroup
+ \@xp\tikzset\@xp{\sseq@ytickstyle}
+ \pgfmathparse{max(width("\sseq@ymax"), width("\sseq@ymin"))}
+ \edef\sseq@maxylabelwidth{\pgfmathresult pt}
+ \sseq@smuggle@macro\sseq@maxylabelwidth
+ \egroup
+
+ % "totaldirmargin" isn't really quite margin: it's the distance between
+ % the bounding box (xmin, ymin) -- (xmax, ymax) and the bounding box of
+ % the resulting figure.
%
- \sseq@tempdimen = \dimexpr \textheight - \sseq@clip@padding@top - \sseq@yaxis@end@extend - \sseq@yaxis@start@extend - \sseq@xaxisgap \relax
- \sseq@tempcount = \numexpr \sseq@tempdimen /\sseq@yscalecm \relax
- \ifnum \numexpr\sseq@ymax-\sseq@ymin +1 > \sseq@tempcount
- \pgfmathparse{\sseq@tempdimen/1cm/(\sseq@ymax-\sseq@ymin+1)}
- \sseq@error@xxxx{range-overflow}{y}
- {from \sseq@ymin\space to \sseq@ymax\space (ymax - ymin = \the\numexpr\sseq@ymax-\sseq@ymin)}
- {\the\sseq@tempcount}% max x range
- {\pgfmathresult}% max xscale
- \@xp\sseq@break
+ % By subtracting the "margin" distance from the page width / height, we
+ % get the amount of space available for the content.
+ \sseq@tempxdimen = \dimexpr \linewidth - \sseq@totalhorizontalmargin@yborder - 0.1pt
+ \sseq@tempydimen = \dimexpr \textheight - \sseq@totalverticalmargin@xborder - 0.1pt
+%
+ \ifsseq@rangecheck@sideways
+ % Swap availability measurements
+ \sseq@tempdimen=\sseq@tempxdimen
+ \sseq@tempxdimen=\sseq@tempydimen
+ \sseq@tempydimen=\sseq@tempdimen
+ \fi
+%
+ % \showthe\dimexpr\dimexpr \sseq@tempxdimen - \sseq@xscale cm * (\sseq@xmax-\sseq@xmin)\relax
+ % Compare space available to range * scale.
+ \ifdim \sseq@tempxdimen < \dimexpr \sseq@xscale cm * (\sseq@xmax-\sseq@xmin)\relax
+ % this will divide by zero if somehow we overflow the space on page
+ % while the range is 0. Hopefully no one will ever manage that.
+ \pgfmathparse{\sseq@tempxdimen/1cm/(\sseq@xmax-\sseq@xmin)} % max x range
+ \sseq@tempx = \numexpr \sseq@tempxdimen /\sseq@xscalecm \relax % max xscale
+ \sseq@error@xxxx{range-overflow}{x}
+ {from \sseq@xmin\space to \sseq@xmax\space (xmax - xmin = \the\numexpr\sseq@xmax-\sseq@xmin)}
+ {\the\sseq@tempx}% max x range
+ {\pgfmathresult}% max xscale
+ %\@xp\sseq@break
+ \fi
+%
+ \relax % Not sure why we need this...
+%
+ % \showthe\dimexpr\dimexpr \sseq@tempydimen - \sseq@yscale cm * (\sseq@ymax-\sseq@ymin)\relax
+ \ifdim \sseq@tempydimen < \dimexpr \sseq@yscale cm * (\sseq@ymax-\sseq@ymin)\relax
+ \sseq@tempy = \numexpr \sseq@tempydimen /\sseq@yscalecm \relax % max y range
+ \pgfmathparse{\sseq@tempydimen/1cm/(\sseq@ymax-\sseq@ymin)} % max yscale
+ \sseq@error@xxxx{range-overflow}{y}
+ {from \sseq@ymin\space to \sseq@ymax\space (ymax - ymin = \the\numexpr\sseq@ymax-\sseq@ymin)}
+ {\the\sseq@tempy}% max y range
+ {\pgfmathresult} % max yscale
+ %\@xp\sseq@break
+ \fi
\fi
%
% Really this could be anything between -\sseq@xmin and -\sseq@xmax and it wouldn't matter. We'll split the difference.
@@ -267,13 +310,18 @@
\sseq@yoffset=\numexpr\sseq@intdivceiling{\numexpr-\sseq@ymin-\sseq@ymax\relax}{\numexpr4*\sseq@ygridstep\relax}*(2*\sseq@ygridstep)\relax
%
%
+ \def\sseq@temp{\sseq@novalue}
+ \ifx\sseq@printpageas\sseq@temp
+ \def\sseq@printpageas{Page $2$ (all differentials)}%
+ \fi
+%
+%
\tikzset{
z=0pt,
every path/.style={},
every node/.style={}
}
\let\errmessage\sseq@errmessage@std
- \sseq@setlayoutparameters
\begin{tikzpicture}[/sseqpages/global/{default} options,\ifsseq@hasname/sseqpages/global/{\sseq@thename} options\fi,/sseqpages/global/{this page} options]%
\sseq@sseqstyle@globalpart
\sseq@globaldetonetransform
@@ -290,7 +338,7 @@
% Axes labels only occur once per page, so the cost of typesetting them with tikz doesn't matter ... THANK GOD
\ifx\sseq@title\pgfutil@empty\else
\ifsseq@drawtitle
- \sseq@eval{\@nx\path (0,-\sseq@yoffset) node[
+ \sseq@eval{\@nx\node[
/sseqpages/global/every title,
above=\sseq@topclippadding+5pt
] {\unexpanded\expandafter{\sseq@title}};
@@ -376,6 +424,7 @@
\let\sseq@class@drawnode\sseq@copypage@addclass
\let\sseq@differential@object\@gobble
\let\sseq@structline@draw\sseq@copypage@addstructline
+ \let\sseq@extension@draw\sseq@copypage@addextension
\let\sseq@tikzpath@object\@gobble
\let\sseq@pgfkeysdocommand\@gobbletwo
\sseq@savedpaths
@@ -394,6 +443,10 @@
\sseq@x@addto@macro\sseq@copymacro{\@nx\sseq@structline@copy{\sseq@thename}{#1}}
}
+\def\sseq@copypage@addextension#1{
+ \sseq@x@addto@macro\sseq@copymacro{\@nx\sseq@extension@copy{\sseq@thename}{#1}}
+}
+
%%% Scope
\newcount\sseq@scope@savestackid
@@ -478,6 +531,7 @@
}
+
%%%%%
%%
%% The main commands
@@ -583,7 +637,7 @@
\sseq@obj@xdef{\classname.needstikz}{\sseq@needstikztrue}%
\fi
\@ifundefined{sseq@tempoffset}{}{%
- \tikz@scan@one@point\sseq@setoffset\sseq@tempoffset
+ \@xp\tikz@scan@one@point\@xp\sseq@setoffset\sseq@tempoffset
}%
\ifx\sseq@tooltip\pgfutil@empty\else
\sseq@obj@protectedxdef{\classname.tooltip}{\sseq@tooltip}
@@ -761,7 +815,7 @@
\fi
\@ifundefined{sseq@tempoffset}{}{
\sseq@cleanup@obj{\classname.offset}
- \tikz@scan@one@point\sseq@setoffset\sseq@tempoffset
+ \@xp\tikz@scan@one@point\@xp\sseq@setoffset\sseq@tempoffset
}
\ifnum\sseq@tempcount<\sseq@genmax\repeat
\sseq@breakpoint
@@ -833,6 +887,7 @@
}
\def\sseq@replaceclassmain#1{
+ \sseq@pushstack@\coord
\sseq@options@firstpassmode
\the\sseq@sseqstyle
\the\sseq@classstyle
@@ -844,19 +899,19 @@
\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}]}
+% \ifsseq@keepchanges\else
+% \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
+%
\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{\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
+ %\show\classname
%
\let\partialcoord\coord@partial
\ifx\sseq@class@tag\pgfutil@empty\else
@@ -908,11 +963,44 @@
\ifsseq@needstikz
\sseq@obj@xdef{\classname.needstikz}{\sseq@needstikztrue}
\fi
- \@ifundefined{sseq@tempoffset}{}{\tikz@scan@one@point\sseq@setoffset\sseq@tempoffset}
+ \@ifundefined{sseq@tempoffset}{}{\@xp\tikz@scan@one@point\@xp\sseq@setoffset\sseq@tempoffset}
%
\sseq@breakpoint
\endgroup
}
+
+\sseq@DeclareDocumentCommand\replacestructlines{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}%
+%
+ % TODO: error handling here...
+%
+ \edef\sseq@classnum{\sseq@obj{class.\coord.num}}%
+ \ifnum\sseq@classnum=0\relax
+ \sseq@error@x{replacestructlines-class-not-replaced}{\coordname}\sseq@breakfi
+ \fi
+ \edef\classname{class.\coord[\sseq@classnum]}%
+ %\show\classname
+ \edef\oldclassname{class.\coord[\the\numexpr\sseq@obj{class.\coord.num}-1]}%
+ \sseq@cleanup@obj{\classname.dependencies}%
+ \sseq@obj@gletobj{\classname.dependencies}{\oldclassname.dependencies}%
+ %\sseq@obj@show{\classname.dependencies}
+ \sseq@obj@map{\classname.dependencies}{
+ \sseq@cleanup@obj{##1.page}%
+ \sseq@obj@gletobj{##1.page}{##1.page.old}%
+ }
+ \sseq@breakpoint
+ \endgroup
+}
+
\def\sseq@class@draw@ifpage#1{
\bgroup
\sseq@obj@pagetogen{#1}{\sseq@thepage} % sets \sseq@gen
@@ -1045,6 +1133,14 @@
% #2 -- page
% #3 -- source coordinate
\def\sseq@d@d#1#2{%%
+ \sseq@obj@ifdef{class.\source.hasextension}{
+ \sseq@error@xxx{d-class-has-extension}{source}{\sourcename}{#2}
+ \sseq@break
+ }{}
+ \sseq@obj@ifdef{class.\target.hasextension}{
+ \sseq@error@xxx{d-class-has-extension}{target}{\targetname}{#2}
+ \sseq@break
+ }{}
\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.
@@ -1076,7 +1172,7 @@
\sseq@cleanup@obj{d.#2\source\target.familylist}
\sseq@obj@xoaddto{d.#2\source\target.familylist}{\sseq@familylist}
\sseq@cleanup@obj{d.#2\source\target.options}
- \sseq@obj@xoaddto{d.#2\source\target.options}{\sseq@savedoptioncode}
+ \sseq@obj@xaddto{d.#2\source\target.options}{\ifsseq@needstikz\@nx\sseq@needstikztrue\fi\unexpanded\@xp{\sseq@savedoptioncode}}
}
% Some helper macros:
@@ -1089,6 +1185,8 @@
\sseq@cleanup@obj{#1[\sseq@obj{#1.num}].deathline}
\sseq@d@setpageclass{#1}{#2}{#3}
\sseq@obj@map{#1[\sseq@obj{#1.num}].dependencies}{
+ %\def\temp{##1}\show\temp
+ %\sseq@obj@show{#1[\sseq@obj{#1.num}].dependencies}
\sseq@d@setpagemin{##1}{#2} % automatically handles cleanup
}
}
@@ -1173,6 +1271,8 @@
\ifnum\sseq@obj{#1.page}>#2\relax
\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@cleanup@obj{#1.page.old}
+ \sseq@obj@gletobj{#1.page.old}{#1.page}
\sseq@obj@xdef{#1.page}{#2}
\fi
\fi
@@ -1258,6 +1358,7 @@
}%
\sseq@parsecoord\source{\sourcename}{source of structure line}%
\sseq@parsecoord\target{\targetname}{target of structure line}%
+ % Sort \xsource and \xtarget. This is to ensure that if a person adds
\ifnum\xsource>\xtarget\relax
\sseq@parsedcoords@swap\source\target
\else
@@ -1270,14 +1371,15 @@
\sseq@parsedcoords@swap\source\target
\else
\ifnum\nsource=\ntarget\relax
- \sseq@error{structline-source-target-equal}%
- \@xp\sseq@break\romannumeral-`0
+ \sseq@error@n{edge-source-target-equal}{\structline}%
+ \sseq@fbreak
\fi
\fi
\fi
\fi
\fi
\fi
+ \relax % stop fbreak
\@ifundefined{sseq@structline@page}{%this is repeated in circleclasses
\def\sseq@pagemin{0}
\ifnum\sseq@obj{class.\source.num}>\z@
@@ -1462,6 +1564,152 @@
\def\sseq@structline@draw#1{\sseq@eval{\@nx\sseq@drawedge\sseq@obj{#1.source}\sseq@obj{#1.target}{structline}{\@nx\sseq@obj{#1.options}}}}
+
+\sseq@DeclareDocumentCommand\extension{od()}{%
+ \begingroup
+ \sseq@loadinputline
+ \IfNoValueTF{#2}{
+ \sseq@extension@main{extension}{#1}{#2}{#2}
+ }{
+ \def\next{\sseq@extension@@{extension}{#1}{#2}}%
+ \@xptwo\next\sseq@trimleadingspaces
+ }
+}
+\sseq@DeclareDocumentCommand\extensionoptions{od()}{%
+ \begingroup
+ \sseq@loadinputline
+ \IfNoValueTF{#2}{
+ \sseq@structline@main{extensionoptions}{#1}{#2}{#2}
+ }{
+ \def\next{\sseq@extensionoptions@@{extensionoptions}{#1}{#2}}%
+ \@xptwo\next\sseq@trimleadingspaces
+ }
+}
+
+\sseq@DeclareDocumentCommandAs\sseq@extension@@\extension{mmmd()}{%
+ \sseq@extension@main{#1}{#2}{#3}{#4}
+}
+
+\sseq@DeclareDocumentCommandAs\sseq@extensionoptions@@\extensionoptions{mmmd()}{%
+ \sseq@extension@main{#1}{#2}{#3}{#4}
+}
+
+\def\sseq@extension@main#1#2#3#4{
+ \sseq@xsetthiscall{\string\extension\IfNoValueF{#2}{\unexpanded{[#2]}}\IfNoValueF{#3}{\unexpanded{(#3)}\IfNoValueF{#4}{\unexpanded{(#4)}}}}%
+ \def\sseq@edgetype{structline}
+ \sseq@options@firstpassmode
+ \the\sseq@sseqstyle
+ \the\sseq@edgestyle
+ \the\sseq@structlinestyle
+ \the\sseq@scope@toks
+ \sseq@options@normalmode
+ \IfNoValueF{#2}{%
+ \sseq@processoptions{extension}{#2}% Outputs result into \sseq@savedoptioncode
+ }%
+ \def\sourcename{#3}%
+ \def\targetname{#4}%
+ \IfNoValueTF{#3}{%
+ \def\sourcename{\lastclass1}%
+ \def\targetname{\lastclass}%
+ }{%
+ \IfNoValueT{#4}{%
+ \def\targetname{\lastclass}%
+ }%
+ }%
+ \sseq@parsecoord\source{\sourcename}{source of extension}%
+ \sseq@parsecoord\target{\targetname}{target of extension}%
+ \ifnum\xsource>\xtarget\relax
+ \sseq@parsedcoords@swap\source\target
+ \else
+ \ifnum\xsource=\xtarget\relax
+ \ifnum\ysource>\ytarget\relax
+ \sseq@parsedcoords@swap\source\target
+ \else
+ \ifnum\ysource=\ytarget\relax
+ \ifnum\nsource>\ntarget\relax
+ \sseq@parsedcoords@swap\source\target
+ \else
+ \ifnum\nsource=\ntarget\relax
+ \sseq@error@n{edge-source-target-equal}{\extension}%
+ \sseq@fbreak
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \relax % stop fbreak
+ \csname sseq@extension@#1\endcsname
+ \sseq@breakpoint
+ \endgroup
+}
+\def\sseq@extension@extension{
+ \ifnum\sseq@obj{class.\source[\sseq@obj{class.\source.num}].page}<\sseq@infinity\relax
+ \sseq@error{extension-stillborn}
+ \sseq@breakfi
+ \fi
+ \ifnum\sseq@obj{class.\target[\sseq@obj{class.\target.num}].page}<\sseq@infinity\relax
+ \sseq@error{extension-stillborn}
+ \sseq@breakfi
+ \fi
+ \edef\sseq@extensionname{extension.\source\target}
+ \sseq@obj@ifdef{\sseq@extensionname.source}{%
+ \sseq@error@xx{extension-already-exists}{\sourcename}{\targetname}
+ \sseq@breakfi
+ }{
+ \sseq@savedpaths@addextension{extension.\source\target}
+ }
+ \sseq@cleanup@obj{class.\source.hasextension}
+ \sseq@obj@gdef{class.\source.hasextension}{}
+ \sseq@cleanup@obj{class.\target.hasextension}
+ \sseq@obj@gdef{class.\target.hasextension}{}
+ \sseq@cleanup@obj{\sseq@extensionname.source}
+ \sseq@obj@xdef{\sseq@extensionname.source}{\source}
+ \sseq@obj@xdef{\sseq@extensionname.target}{\target}
+ \sseq@obj@xodef{\sseq@extensionname.familylist}{\sseq@familylist}
+ \sseq@cleanup@obj{\sseq@extensionname.options}
+ \sseq@obj@xdef{\sseq@extensionname.options}{\ifsseq@needstikz\@nx\sseq@needstikztrue\fi\unexpanded\@xp{\sseq@savedoptioncode}}
+}
+\def\sseq@extension@extensionoptions{
+ \edef\sseq@extensionname{extension.\source\target}
+ \sseq@obj@ifundef{\sseq@extensionname.source}{
+ \sseq@error@n{cmdoptions-feature-doesn't-exist}{\extension}
+ \sseq@break
+ }{}
+ \sseq@cleanup@obj{\sseq@extensionname.options}
+ \sseq@cleanup@obj{\sseq@extensionname.familylist}
+ \ifsseq@needstikz
+ \sseq@obj@gaddto{\sseq@extensionname.options}{\sseq@needstikztrue}
+ \fi
+ \sseq@obj@xoaddto{\sseq@extensionname.options}{\sseq@savedoptioncode}
+ \sseq@obj@xoaddto{\sseq@extensionname.familylist}{\sseq@familylist}
+}
+
+\def\sseq@extension@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@extension@extension
+ \endgroup
+}
+
+
+\def\sseq@extension@draw@ifpage#1{
+ \bgroup
+ \ifnum\sseq@thepage=\sseq@infinity\relax
+ \sseq@extension@draw{#1}
+ \fi
+ \egroup
+}
+\def\sseq@extension@draw#1{\sseq@eval{\@nx\sseq@drawedge\sseq@obj{#1.source}\sseq@obj{#1.target}{structline}{\@nx\sseq@obj{#1.options}}}}
+
%% This is a dumb place to put this. It has to be after the differential commands are defined.
\ifsseq@draftmode % Okay, have to dummy out all the main commands.
% Only add tikz background paths to the savedpaths. We need to draw background paths because they might change the bounding box!
@@ -1515,12 +1763,30 @@
\sseq@DeclareDocumentCommand\replacesource{o}{}
\sseq@DeclareDocumentCommand\replacetarget{o}{}
\def\sseq@d@main#1#2#3#4#5{}
- \DeclareDocumentCommand \sseq@DrawIfValidDifferential@@ { d() d() } {}
+ \DeclareDocumentCommand \sseq@DrawIfValidDifferential@ { mmO{} } {
+ \sseq@loadinputline
+ \def\sseq@dtype{d}
+ \def\sseq@trueclause{#1}
+ \def\sseq@falseclause{#2}
+ \sseq@d@grabpage\sseq@DrawIfValidDifferential@@
+ }
+ \DeclareDocumentCommand \sseq@DrawIfValidDifferential@@ { d() d() } {
+ \csname sseq@DrawIfValidDifferential@@handle@truefalse%
+ @@\sseq@trueclause\sseq@falseclause
+ \endcsname
+ }
+ % Have to do something in case it branches. We somewhat arbitrarily always
+ % pretend it branched yes.
+ \def\sseq@DrawIfValidDifferential@@handle@truefalse@@{}
+ \def\sseq@DrawIfValidDifferential@@handle@truefalse@@T{\@firstofone}
+ \def\sseq@DrawIfValidDifferential@@handle@truefalse@@F{\@gobble}
+ \def\sseq@DrawIfValidDifferential@@handle@truefalse@@TF{\@firstoftwo}
+
\sseq@DeclareDocumentCommand\structline{od()d()}{}
\sseq@DeclareDocumentCommand\structlineoptions{od()d()}{}
\sseq@DeclareDocumentCommand\circleclasses{or()r()}{}
\sseq@DeclareDocumentCommand\gettag{mr()}{}
- \endinput
+ \expandafter\endinput
\fi