diff options
author | Karl Berry <karl@freefriends.org> | 2021-07-19 20:15:07 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-07-19 20:15:07 +0000 |
commit | 8e5b8d42fd285921dde3b5fa0a45034f98dba2d1 (patch) | |
tree | 75918d0205c8711ceeb614a73250813d16280e2a /Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex | |
parent | ef21a6a342dc9620b74140da085c526371b579f5 (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.tex | 348 |
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 |