texlive[48866] Master/texmf-dist: spectralsequences (9oct18)

commits+karl at tug.org commits+karl at tug.org
Tue Oct 9 22:25:44 CEST 2018


Revision: 48866
          http://tug.org/svn/texlive?view=revision&revision=48866
Author:   karl
Date:     2018-10-09 22:25:43 +0200 (Tue, 09 Oct 2018)
Log Message:
-----------
spectralsequences (9oct18)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/spectralsequences/README.md
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_2.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_3.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_2.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_3.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-tmf_2.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-EO2_3.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-KO.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.tex
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-bo-A1.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.tex
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KF3n.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KZ3.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.tex
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.tex
    trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.pdf
    trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.tex
    trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanualpreamble.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/spectralsequences.sty
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqcheckdefinitions.code.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqdrawing.code.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqforeach.code.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqkeys.code.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqloadstore.code.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmacromakers.code.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmessages.code.tex
    trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqparsers.code.tex

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/spectralsequences/README.md	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/doc/latex/spectralsequences/README.md	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,9 +1,9 @@
 
-spectralsequences v1.2.0
+spectralsequences v1.2.1
 ========================
 Author: Hood Chatham  
 Email: hood at mit.edu  
-Date: 2017-12-10  
+Date: 2018-10-08  
 License: All files have the Latex Project Public License.  
 Description: Print spectral sequence diagrams using pgf/tikz.  
 
@@ -13,8 +13,19 @@
 
 Changelog:
 ==========
-## [1.2.0]
+
+## [1.2.1] (2018-10-08)
+### Fixed:
+- Tick style didn't work, now it does.
+- Orphan edges are consistently oriented correctly now (reported by Eric Peterson).
+- Fixed name class in copypage
+- Fixed incompatibility with new expl3 version (reported by Eric Peterson). The fix amounts to replacing a \cs_new:Npn with a \cs_gset:Npn.
+
 ### Added:
+- \sseqlastlabel
+
+## [1.2.0] (2017-12-10)
+### Added:
 - \replacesource and \replacetarget
 - \copypage
 - "name handler" option

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-tmf_2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-EO2_3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-KO.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1 2017-09-16 2017-09-16
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: example_endofVFoS.tex

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-bo-A1.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -97,7 +97,9 @@
 \begin{sseqdata}[name=tmfmayss,y range={0}{8}, x range={0}{25}, degree={-1}{1},
     classes=fill,
     class labels={below=3pt},differentials=blue,
-    class pattern=linear, classes={ tooltip = {(\xcoord,\ycoord)} }, xscale=0.8,
+    class pattern=linear, classes={ tooltip = {(\xcoord,\ycoord)} },
+    xscale=1.48,
+    yscale=2.2,
     title = {Page \page},
     run off differentials = ->
 ]

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KF3n.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KZ3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1 2017-09-16 2017-09-16
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: example_hatcher.tex

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1 2017-09-16 2017-09-16
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: example_unstable_ASS_SO.tex

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1 2017-09-16 2017-09-16
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: spectralsequencesmanual.tex
@@ -19,8 +19,9 @@
 %  perhaps think about ordering, particularly of "Misc commands" section
 %  tutorial
 %  explain / cross reference examples folder?
+%  \sseqlastlabel is not currently documented.
 %
-\def\version{Version 1.2.0}
+\def\version{Version 1.2.1}
 
 
 \input spectralsequencesmanualpreamble
@@ -167,7 +168,7 @@
 \begin{sseqpage}[ name = class options example,
                   right clip padding = 0.6cm ]
 \classoptions[red](2,1,2) % Only is red on this page!
-\node[ background, text width = 10em ] at (0.3,-2.2)
+\node[ background ] at (0.3,-2.2)
     {\textup{The red class is the problem}};
 \end{sseqpage}
 \end{codeexample}
@@ -1099,7 +1100,7 @@
 \end{commandlist}
 
 \begin{command}{\SseqCopyPage\cmdarg{command}\marg{spectral sequence name}\marg{page}}
-This copies all of the classes and structlines on page |\meta{page}| of the spectral sequence named |\meta{spectral sequence name}|, throwing out differentials and tikz primitives. The resulting |\cmdarg{command}| has syntax as if you had used |\DeclareSseqGroup| with no extra arguments -- that is, it takes an optional options list, which are passed to a scope, and an optional coordinate pair.
+This defines \cmdarg{command} to print all of the classes and structlines on page |\meta{page}| of the spectral sequence named |\meta{spectral sequence name}|, throwing out differentials and tikz primitives. The resulting command has syntax as if you had used |\DeclareSseqGroup| with no extra arguments -- that is, it takes an optional options list, which are passed to a scope, and an optional coordinate pair.
 \end{command}
 
 \subsection{Families}

Modified: trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanualpreamble.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanualpreamble.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanualpreamble.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1 2017-09-16 2017-09-16
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: spectralsequencesmanualpreamble.tex
@@ -452,7 +452,7 @@
 
 
 \hypersetup{
-    pdftitle={The Spectralsequences Package},
+    pdftitle={The Spectral Sequences Package},
     pdfauthor={Hood Chatham},
     pdfsubject={A spectral sequence drawing package build on tikz},
     pdfkeywords={spectral sequences,algebraic topology,homotopy theory,math,tikz,sseq},

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/spectralsequences.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/spectralsequences.sty	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/spectralsequences.sty	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% A package for drawing spectral sequences
@@ -13,21 +13,17 @@
 %  Try catch blocks
 %  Make an argument type for the \d page argument.
 %  deal with xmin, xmax, etc (was there actually a problem we were trying to fix?)
-%  Make xmirror not mirror axes labels
 %
 %  Redo sseqerrortest and set up regression test script as part of build (damn I didn't realize we'd lost anything imporant with that find -d disaster)
 %  Maybe we should add some other regression tests too
 %
 %  Lower priority:
-%   speed up off page edges (uses 10% of the draw time for page 0 of tmfass)
-%   improve \DoUntilOutOfBounds progress check
 %   error messages that should be warnings by default?
-%   should we specify our favorite conditionals library?
 %
 
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{spectralsequences}[2017/12/10 v1.2.0]
+\ProvidesPackage{spectralsequences}[2018/10/08 v1.2.1]
 
 \RequirePackage{tikz}
 \RequirePackage{etoolbox}
@@ -66,6 +62,7 @@
     % These are defined in sseqmain:
     \class\classoptions\replaceclass\replacesource\replacetarget
     \d\doptions\kill\structline\structlineoptions\circleclasses
+    \lastlabel
     % The following are defined in sseqparsers:
     \pgfmathparse\isalive\lastx\lasty\lastclass\savestack\restorestack\pushstack\nameclass\tagclass
     \parsecoordinate\parsedifferential\getdtarget\gettag
@@ -121,7 +118,6 @@
 \newif\ifsseq at error
 
 \newtoks\sseq at temptoks
-\newtoks\sseq at temptoksii
 \newtoks\sseq at scope@toks
 
 \newcount\sseq at thepagecount

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqcheckdefinitions.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqcheckdefinitions.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqcheckdefinitions.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqcheckdefinitions.code.tex

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqdrawing.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqdrawing.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqdrawing.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqdrawing.code.tex
@@ -221,32 +221,33 @@
 % #6 -- xaxisgap
 % #7 -- code
 \def\sseq at tickloop@generic#1#2#3#4#5#6#7{
-    \sseq at tempx=\numexpr % min
+    \sseq at tempcount=\numexpr % min
         \sseq at intdivceiling{#1}{#3} * #3
         -
         \sseq at intdivceiling{#4}{#3} * #3 + #4
     \relax
-    \ifnum\sseq at tempx<#1\relax
-        \advance\sseq at tempx#3\relax
+    \ifnum\sseq at tempcount<#1\relax
+        \advance\sseq at tempcount#3\relax
     \fi
-    \sseq at tempxb=\numexpr#2+1\relax % max
+    \sseq at tempcountb=\numexpr#2+1\relax % max
     \loop
         \bgroup
-        \pgftransformshift{\sseq at qpointxy{\sseq at tempx}{#5}}%
+        \pgftransformshift{\sseq at qpointxy{\sseq at tempcount}{#5}}%
         \pgftransformshift{\pgfqpoint{0pt}{#6}}
         #7
         \egroup
-        \advance\sseq at tempx#3\relax
-    \ifnum\sseq at tempx<\sseq at tempxb\repeat
+        \advance\sseq at tempcount#3\relax
+    \ifnum\sseq at tempcount<\sseq at tempcountb\repeat
 }
 
 
 \def\sseq at drawxticks{%
     \sseq at tickloop@generic{\sseq at xmin}{\sseq at xmax}{\sseq at xtickstep}{\sseq at xtickstepoffset}{\sseq at yaxisorigin}{-\sseq at xaxisgap}{
-        \sseq at xtickstyle
-        \tikz at options
         \pgftransformshift{\pgfqpoint{0pt}{-\sseq at xlabelgap}}
-        \pgftext{\hbox{$\sseq at xtickfn{\the\sseq at tempx}$}}%
+        \pgftransformresetnontranslations
+        %\@xp\tikzset\@xp{\sseq at xtickstyle}
+        %\pgftext{\tikz at options\tikz at textfont\hbox{$\sseq at xtickfn{\the\sseq at tempx}$}}%
+        \@xp\node\@xp[\sseq at xtickstyle]{\hbox{$\sseq at xtickfn{\the\sseq at tempcount}$}};
     }
     \ifnum\sseq at xmajortickstep>\z@
         \sseq at tickloop@generic{\sseq at xmin}{\sseq at xmax}{\sseq at xmajortickstep}{\sseq at xtickstepoffset}{\sseq at yaxisorigin}{-\sseq at xaxisgap}{
@@ -265,11 +266,11 @@
 \def\sseq at drawyticks{%
     \sseq at transform@xymirror
     \sseq at tickloop@generic{\sseq at ymin}{\sseq at ymax}{\sseq at ytickstep}{\sseq at ytickstepoffset}{\sseq at xaxisorigin}{-\sseq at yaxisgap}{
-        \sseq at ytickstyle
-        \tikz at options
         \pgftransformshift{\pgfqpoint{0pt}{-\sseq at ylabelgap}}
         \pgftransformresetnontranslations
-        \pgftext{\hbox{$\sseq at ytickfn{\the\sseq at tempx}$}}%
+        %\@xp\tikzset\@xp{\sseq at ytickstyle}
+        %\pgftext{\tikz at options\tikz at textfont\hbox{$\sseq at ytickfn{\the\sseq at tempx}$}}%
+        \@xp\node\@xp[\sseq at ytickstyle]{\hbox{$\sseq at ytickfn{\the\sseq at tempcount}$}};
     }
     \ifnum\sseq at ymajortickstep>\z@
         \sseq at tickloop@generic{\sseq at ymin}{\sseq at ymax}{\sseq at ymajortickstep}{\sseq at ytickstepoffset}{\sseq at xaxisorigin}{-\sseq at yaxisgap}{
@@ -554,16 +555,6 @@
             { \csname sseq@\sseq at classpattern yoffset#1/#2\endcsname }
     }}
 }
-\def\sseq at class@getparts#1(#2,#3,#4)[#5].{
-    \sseq at seterrorannotation@drawing{#1}{#2}{#3}{#4}{#5}
-    \def\sseq at thisclassname{class.(#2,#3,#4)}
-    \def\sseq at thisnodename{sseq{#2,#3,#4}}
-    \def\sseq at thispos{(#2,#3)}
-    \edef\sseq at thisposnum{\sseq at obj{class.(#2,#3,#4).n}}
-    \def\sseq at thisclassnum{#5}
-    \sseq at tempx=#2\relax
-    \sseq at tempy=#3\relax
-}
 
 \def\sseq at tooltip@wrapper#1#2{%
     \edef\temp{\detokenize\@xpthree{#2}}%
@@ -581,7 +572,36 @@
 }
 }
 
-% #1 -- the name of the node object
+
+% #1 -- "class."
+% (#2,#3,#4) -- the class name x,y,n
+% #5 -- generation
+\def\sseq at class@getparts#1(#2,#3,#4)[#5].{
+    \sseq at seterrorannotation@drawing{#1}{#2}{#3}{#4}{#5}
+    \def\sseq at thisnodename{sseq{#2,#3,#4}}
+    \def\sseq at thispos{(#2,#3)}
+    \edef\sseq at thisposnodeindex{\sseq at obj{class.(#2,#3,#4).n}}
+    \edef\sseq at thispostotalnodes{\sseq at obj{partcoord.(#2,#3).numnodes}}
+    \def\sseq at thisclassnum{#5}
+    \sseq at tempx=#2\relax
+    \sseq at tempy=#3\relax
+}
+
+
+% #1 -- the name of the class object given as (x,y,n)[gen]
+% Mandatory fields:
+%   partcoord.(x,y).numnodes
+%   (x,y,n).num -- number of generations of this class
+%   (x,y,n).n   -- node n of numnodes (needed to allow node position to differ from creation order).
+%   class.page  -- the death page of the class
+% Optional fields:
+%   class.options   -- Options for this class.
+%   class.nodetext  -- The internal text of the node
+%   class.nodetext.options -- options (color, font) to change the nodetext
+%   class.labelnodes -- a list of external labels
+%   class.name & class.showname  -- If there is a name, use it as a label in some way
+%   class.tooltip   -- Make a tooltip. Fails if the user didn't load package with tooltip option
+%   class.needstikz -- Use tikz to draw this node
 % Someday I should document this horrible mess of code here
 \newif\ifsseq at permanentcycle
 \newcount\sseq at totalclassesdrawn
@@ -590,7 +610,13 @@
     \global\advance\sseq at totalclassesdrawn\@ne
     \begingroup
     \sseq at class@getparts#1.
+    % defines:
+    % \sseq at thisnodename  -- name we should give the pdfnode
+    % \sseq at thispos -- (x,y)
+    % \sseq at thispostotalnodes -- total number of nodes at (x,y)
+    % \sseq at thisposnodeindex  -- index of this node
     \sseq at needstikzfalse
+    % Apply first pass styles? TODO: What is this for again?
     \sseq at options@firstpassmode
         \sseq at thesseqstyle
         \sseq at theclassstyle
@@ -606,12 +632,14 @@
         \sseq at obj{#1.needstikz}
 %
     \sseq at outofrangetrue\relax % Mysterious that we need this \relax here...
+    % If we are in range, we'll draw the node, if not we just mark the coordinate.
     \ifnum\sseq at tempx<\sseq at xmaxpp\relax\ifnum\sseq at tempx>\sseq at xminmm\relax\ifnum\sseq at tempy<\sseq at ymaxpp\relax\ifnum\sseq at tempy>\sseq at yminmm\relax
         \sseq at outofrangefalse
         \pgfscope
+        % Finish options setup
         \let\tikz at options\pgfutil at empty
         \let\tikz at alias=\pgfutil at empty
-        \def\pgfkeysdefaultpath{/sseqpages/class/}
+        \def\pgfkeysdefaultpath{/sseqpages/class/}%
         \sseq at options@secondpassmode
             \sseq at thesseqstyle
             \sseq at theclassstyle
@@ -628,15 +656,18 @@
             \def\sseq at collections@featuretype{class}
             \the\sseq at scope@toks
             \sseq at obj{#1.options}
+        % Set up node position coordinate transform
         \pgftransformshift{\pgfqpointxy{\numexpr\sseq at tempx +\sseq at xoffset-\sseq at x\relax}{\numexpr\sseq at tempy + \sseq at yoffset-\sseq at y\relax}}
         \iftikz at fullytransformed\pgfgettransform{\savetransform}\fi
         \pgftransformresetnontranslations
         \sseq at globalrotatetransform
+        % Now the origin is at (x,y). Set up class placement offset.
         \sseq at classplacementtransform
         \sseq at obj@ifdef{#1.offset}{\sseq at obj{#1.offset}}{%
-            \sseq at offset{\sseq at thisposnum}{\sseq at obj{partcoord.\sseq at thispos.numnodes}}%
+            \sseq at offset{\sseq at thisposnodeindex}{\sseq at thispostotalnodes}%
         }%
         \iftikz at fullytransformed\pgfsettransform{\savetransform}\else\pgftransformresetnontranslations\ifsseq at rotatelabels\sseq at globalrotatetransform\fi\fi
+        %
         \tikz at options
         % the value of \sseq at class@showname comes from styles. If there was a local option with showname, it's stored in #1.showname.
         % local value takes priority.
@@ -649,118 +680,129 @@
 	            \sseq at eval{\@nx\sseq at handleclassquotes@inner{\sseq at obj{#1.name}}{\sseq at class@showname}}
 	       }{}
         \fi
+        % Okay now we're ready to make the node
         \ifsseq at needstikz
+            % The options code above put mode information into \tikz at mode which gets wiped by tikz
             \let\sseq at mode\tikz at mode
-            \tikzset{every text node part/.code/.expand once={\sseq at globalrotatetransform\sseq at classnodetextoptions{}}}%
             \sseq at eval{%
-                \@nx\node[/utils/exec={\let\@nx\tikz at mode\@nx\sseq at mode},
-                    /handlers/first char syntax/the character "/.initial=\@nx\sseq at handlequote
-                ] (\sseq at thisnodename) {\unexpanded\@xp{\sseq at classnodetext}}
-                [every text node part/.code={}];
+                \@nx\node[%
+                        every text node part/.code/.expand once={\sseq at globalrotatetransform\sseq at classnodetextoptions{}},%
+                        /utils/exec={\let\@nx\tikz at mode\@nx\sseq at mode}] % Set mode based on outer options
+                  (\sseq at thisnodename) {\unexpanded\@xp{\sseq at classnodetext}};%
             }%
         \else
             \tikz at node@textfont
-            \sseq at setnodetext{\sseq at classnodetext}{\sseq at classnodetextoptions}
+            \sseq at setnodetext{\sseq at classnodetext}{\sseq at classnodetextoptions}%
             \let\tikz at fig@name\sseq at thisnodename
             \pgfmultipartnode{\tikz at shape}{\tikz at anchor}{\tikz at fig@name}{\sseq at drawnode}%
-            \tikz at alias
+            \tikz at alias % makes extra names for this shape
         \fi
-        \sseq at obj{#1.labelnodes}
-        \sseq at classlabelnodes % classlabelnodes comes from show name
-        \sseq at obj@ifdef{#1.tooltip}{
-            \pgfpointanchor{\sseq at thisnodename}{west}
-            \pgf at xa=\pgf at x
-            \pgfpointanchor{\sseq at thisnodename}{south}
-            \pgf at ya=\pgf at y
-%
-            \pgf at process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq at thisnodename}{west}}}{\pgfpointtransformed{\pgfpointanchor{\sseq at thisnodename}{east}}}}
-            \pgf at xb=\pgf at x
-            \pgf at process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq at thisnodename}{south}}}{\pgfpointtransformed{\pgfpointanchor{\sseq at thisnodename}{north}}}}
-            \pgf at yb=\pgf at y
-%
-            \setbox\tikz at tempbox=\hbox{
-                \pgfinterruptpicture
-                \sseqtooltip{\rule{\pgf at xb}{0pt}\rule{0pt}{\pgf at yb}}{\sseq at obj{#1.tooltip}}
-                \endpgfinterruptpicture
-            }
-            {%
-                \pgftransformshift{\pgfqpoint{\pgf at xa}{\pgf at ya}}%
-                \pgfapproximatenonlineartransformation%
-                \pgfqboxsynced{\tikz at tempbox}%
-            }%
-        }{}
+        \sseq at obj{#1.labelnodes}%
+        \sseq at classlabelnodes % classlabelnodes comes from show name (I guess it can't put them into #1.labelnodes? TODO: why?)
+        \sseq at obj@ifdef{#1.tooltip}{\sseq at dotooltip{#1}}{}%
         \endpgfscope
     \fi\fi\fi\fi
+    % If the node is out of range, to save time we don't draw anything. However, structlines etc may depend on the out of range node,
+    % so we mark the coordinate.
     \ifsseq at outofrange
         \sseq at eval{\@nx\pgftransformshift{\@nx\pgfqpointxy{\numexpr\sseq at tempx+\sseq at xoffset-\sseq at x\relax}{\numexpr\sseq at tempy+\sseq at yoffset-\sseq at y\relax}}}%
         \pgftransformresetnontranslations
         \sseq at globalrotatetransform
         \sseq at classplacementtransform
-        \sseq at offset{\sseq at thisposnum}{\sseq at obj{partcoord.\sseq at thispos.numnodes}}
+        \sseq at offset{\sseq at thisposnodeindex}{\sseq at thispostotalnodes}%
         \pgfcoordinate{\sseq at thisnodename}{\pgfpointorigin}%
     \fi
     \endgroup
 }
 
+\def\sseq at dotooltip#1{%
+    \pgfpointanchor{\sseq at thisnodename}{west}%
+    \pgf at xa=\pgf at x
+    \pgfpointanchor{\sseq at thisnodename}{south}%
+    \pgf at ya=\pgf at y
+%
+    \pgf at process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq at thisnodename}{west}}}{\pgfpointtransformed{\pgfpointanchor{\sseq at thisnodename}{east}}}}%
+    \pgf at xb=\pgf at x
+    \pgf at process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq at thisnodename}{south}}}{\pgfpointtransformed{\pgfpointanchor{\sseq at thisnodename}{north}}}}%
+    \pgf at yb=\pgf at y
+%
+    \setbox\tikz at tempbox=\hbox{%
+        \pgfinterruptpicture
+        \sseqtooltip{\rule{\pgf at xb}{0pt}\rule{0pt}{\pgf at yb}}{\sseq at obj{#1.tooltip}}%
+        \endpgfinterruptpicture
+    }
+    {%
+        \pgftransformshift{\pgfqpoint{\pgf at xa}{\pgf at ya}}%
+        \pgfapproximatenonlineartransformation%
+        \pgfqboxsynced{\tikz at tempbox}%
+    }%
+}
+
 % #1 -- label text
 % #2 -- options
+% Make the node textbox.
 \def\sseq at setnodetext#1#2{%
-    \setbox\pgfnodeparttextbox=\hbox{%
-        \pgfscope%
-        #2
-        \tikzset{every text node part/.try}%
-        \ifx\tikz at textopacity\pgfutil at empty%
+    \sseq at ifempty{#1}{% more often than not, the node is empty...
+        \setbox\pgfnodeparttextbox=\hbox{}%
+    }{%
+        \setbox\pgfnodeparttextbox=\hbox{%
+            \pgfscope%
+            #2
+            \tikzset{every text node part/.try}%
+            \ifx\tikz at textopacity\pgfutil at empty%
+            \else%
+             \pgfsetfillopacity{\tikz at textopacity}%
+              \pgfsetstrokeopacity{\tikz at textopacity}%
+            \fi%
+            \pgfinterruptpicture
+          \ifx\tikz at text@width\pgfutil at empty%
+            \tikz at textfont%
+          \else%
+            \begingroup%
+            	\pgfmathsetlength{\pgf at x}{\tikz at text@width}%
+              \pgfutil at minipage[t]{\pgf at x}\leavevmode\hbox{}%
+                \tikz at textfont%
+                \tikz at text@action%
+          \fi%
+            \ifx\tikz at textcolor\pgfutil at empty%
+            \else%
+              \pgfutil at colorlet{.}{\tikz at textcolor}%
+            \fi%
+            \pgfsetcolor{.}%
+              \tikz at atbegin@node%
+              #1%
+              \tikz at atend@node%
+               \ifx\tikz at text@width\pgfutil at empty%
+               \else%
+                  \pgfutil at endminipage%
+                \endgroup%
+              \fi%
+              \endpgfinterruptpicture
+          \endpgfscope%
+        }%
+        \ifx\tikz at text@width\pgfutil at empty%
         \else%
-         \pgfsetfillopacity{\tikz at textopacity}%
-          \pgfsetstrokeopacity{\tikz at textopacity}%
+          \pgfmathsetlength{\pgf at x}{\tikz at text@width}%
+          \wd\pgfnodeparttextbox=\pgf at x%
         \fi%
-        \pgfinterruptpicture
-      \ifx\tikz at text@width\pgfutil at empty%
-        \tikz at textfont%
-      \else%
-        \begingroup%
-        	\pgfmathsetlength{\pgf at x}{\tikz at text@width}%
-          \pgfutil at minipage[t]{\pgf at x}\leavevmode\hbox{}%
-            \tikz at textfont%
-            \tikz at text@action%
-      \fi%
-        \ifx\tikz at textcolor\pgfutil at empty%
+        \ifx\tikz at text@height\pgfutil at empty%
         \else%
-          \pgfutil at colorlet{.}{\tikz at textcolor}%
+          \pgfmathsetlength{\pgf at x}{\tikz at text@height}%
+          \ht\pgfnodeparttextbox=\pgf at x%
         \fi%
-        \pgfsetcolor{.}%
-          \tikz at atbegin@node%
-          #1%
-          \tikz at atend@node%
-           \ifx\tikz at text@width\pgfutil at empty%
-           \else%
-              \pgfutil at endminipage%
-            \endgroup%
-          \fi%
-          \endpgfinterruptpicture
-      \endpgfscope%
-    }%
-    \ifx\tikz at text@width\pgfutil at empty%
-    \else%
-      \pgfmathsetlength{\pgf at x}{\tikz at text@width}%
-      \wd\pgfnodeparttextbox=\pgf at x%
-    \fi%
-    \ifx\tikz at text@height\pgfutil at empty%
-    \else%
-      \pgfmathsetlength{\pgf at x}{\tikz at text@height}%
-      \ht\pgfnodeparttextbox=\pgf at x%
-    \fi%
-    \ifx\tikz at text@depth\pgfutil at empty%
-    \else%
-      \pgfmathsetlength{\pgf at x}{\tikz at text@depth}%
-      \dp\pgfnodeparttextbox=\pgf at x%
-    \fi%
+        \ifx\tikz at text@depth\pgfutil at empty%
+        \else%
+          \pgfmathsetlength{\pgf at x}{\tikz at text@depth}%
+          \dp\pgfnodeparttextbox=\pgf at x%
+        \fi%
+    }
 }
+
+% A small part of the tikz main loop that has been paired down as much as possible for efficiency.
 \def\sseq at drawnode{%
   \pgfutil at tempdima=\pgflinewidth%
   {%
     \tikz at mode%
-    %\iftikz at mode@clip \sseq at error@internal{Clip shouldn't happen here, but this error should be caught earlier}{}\fi %
     \iftikz at mode@draw%
         \iftikz at mode@double%
         % Change line width
@@ -793,27 +835,27 @@
 
 % #1 -- label text
 % #2 -- options
-\def\sseq at drawlabel#1#2{
+\def\sseq at drawlabel#1#2{%
     \bgroup\pgfscope
-    \def\tikz at mode{}
+    \def\tikz at mode{}%
     \let\sseq at tikz@transform at save\tikz at transform
-    \pgfkeyssetvalue{/pgf/inner xsep}{2pt}
-    \pgfkeyssetvalue{/pgf/inner ysep}{2pt}
+    \pgfkeyssetvalue{/pgf/inner xsep}{2pt}%
+    \pgfkeyssetvalue{/pgf/inner ysep}{2pt}%
     \def\tikz at shape{rectangle}
-    \let\tikz at transform\empty % The next line was set up to fix the classlabelstyle glitch
+    \let\tikz at transform\empty % The next line was set up to fix the classlabelstyle glitch (what does this mean?)
     \sseq at options@secondpassmode
     \sseq at thesseqstyle\sseq at thelabelstyle\sseq at theclasslabelstyle#2
     \tikz at options
     \pgftransformreset
-    \pgftransformshift{\tikz at node@at}
+    \pgftransformshift{\tikz at node@at}%
     \tikz at lib@pos at call
     \tikz at transform
     \tikz at mode
     \let\tikz at transform\sseq at tikz@transform at save
-    \sseq at setnodetext{\sseq at labeltextfn{#1}}{}
+    \sseq at setnodetext{\sseq at labeltextfn{#1}}{}%
     \pgfmultipartnode{\tikz at shape}{\tikz at anchor}{label}{\sseq at drawnode}%
     \ifsseq at pin
-        \def\sseq at pinoptions{}
+        \def\sseq at pinoptions{}%
         \let\tikz at options\empty
         \let\tikz at mode\empty
         \sseq at thepinstyle
@@ -821,11 +863,11 @@
         \sseq at pinoptions
         \tikz at options
         \tikz at mode
-        \sseq at drawedge@findsourcetarget{\tikz at fig@name}{}{label}{}
+        \sseq at drawedge@findsourcetarget{\tikz at fig@name}{}{label}{}%
         \pgfpathmoveto{\sseq at sourcecoord}%
         \pgfpathlineto{\sseq at targetcoord}%
         \sseq at eval{\noexpand\pgfusepath{%
-            draw
+            draw,
             \iftikz at mode@fill fill,\fi
             \iftikz at mode@draw draw,\fi
         }}%
@@ -972,6 +1014,7 @@
     \pgfpathlineto{\sseq at targetcoord}%
     \pgfgetpath\thispath
     \pgfusepath{discard}%
+    \pgfintersectionsortbysecondpath
     \pgfintersectionofpaths{\pgfsetpath\sseq at theclippath}{\pgfsetpath\thispath}%
     \ifcase\pgfintersectionsolutions\relax
         % No intersections, but one or both endpoints may be out of range but still in clipping region due to scaling. Add ellipses as appropriate.
@@ -1004,6 +1047,7 @@
 
 \def\sseq at drawedge@handletrickyedge{%
     \ifsseq at draworphanedges
+        \pgfintersectionsortbysecondpath
         \pgfintersectionofpaths{\pgfsetpath\sseq at therangepath}{\pgfsetpath\thispath}%
         \ifnum\pgfintersectionsolutions=\z@
             \sseq at drawedgefalse % don't draw orphan edges that never intersect actual range
@@ -1024,8 +1068,8 @@
 
 
 \def\sseq at drawedge@handleorphan{%
-    \def\sseq at sourcecoord{\pgfpointintersectionsolution{1}}%
-    \def\sseq at targetcoord{\pgfpointintersectionsolution{2}}%
+    \def\sseq at sourcecoord{\pgfpointintersectionsolution{2}}%
+    \def\sseq at targetcoord{\pgfpointintersectionsolution{1}}%
     \edef\temparrowstartspec{\@nx\pgfsetarrowsstart{\csname sseq at runoffarrow@start@\sseq at edgetype @spec\endcsname}}%
     \edef\temparrowendspec{\@nx\pgfsetarrowsend{\csname sseq at runoffarrow@end@\sseq at edgetype @spec\endcsname}}%
     \pgfcoordinate{tempa}{\sseq at sourcecoord}%

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqforeach.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqforeach.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqforeach.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqforeach.code.tex

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqkeys.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqkeys.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqkeys.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqkeys.code.tex
@@ -30,7 +30,6 @@
 \protected\def\sseqset#1{\pgfqkeys{/sseqpages/userstyles}{#1}}
 
 \def\sseq at sseqsetdirectory{/sseqpages/global/default}
-
 \def\sseq at set{\pgfqkeys{/sseqpages}}
 
 %%%
@@ -59,7 +58,7 @@
 % Lots of options mainly do stuff on the drawing run, but still need to warn the sseq setup algorithms that they're around
 % on the first pass. Some only do things on the first pass or only do things on the second pass.
 % For example, shifts: shifts apply a coordinate transform on the second pass, but also need to factor into the coordinates of
-% classes etc which are computed at specification time not at draw time. So xshift=2 increases \sseq at x by 2 on it's first pass and
+% classes etc which are computed at specification time not at draw time. So xshift=2 increases \sseq at x by 2 on its first pass and
 % applies a coordinate transform by 2cm on the second pass.
 
 % normal mode does the firstpass options now and saves the secondpass options in \sseq at savedoptioncode for later use.
@@ -618,7 +617,7 @@
     \pgfutil at in@{--}{#2}\ifpgfutil at in@
         \sseq at getnumrange@range#1#2\sseq at nil
     \else
-        \edef#1{\the\numexpr#2}
+        \sseq at getnumrange@range#1#2--\sseq at infinity\sseq at nil
     \fi
 }
 \def\sseq at getnumrange@range#1#2--#3\sseq at nil{\edef#1{\the\numexpr#2}\@xp\edef\csname\sseq at macroname#1max\endcsname{\the\numexpr#3}}
@@ -1289,19 +1288,24 @@
 }
 
 %%% Define global keys setter
+% Most keys are run twice -- once in the "/sseqpages/global" directory and once in the "/sseqpages/global/default" directory
+% The default "default" behavior is to add the option to the "sseq" style.
+% Keys prefixed by a tilde or using an "ignored" handler are only run in the "/sseqpages/global directory".
 \gdef\sseq at globalkeys#1{%
     \let\sseq at storetilde~%
     \def~{}%
-    \pgfqkeys{/sseqpages/global}{#1}%
-    \sseq at globalkeys@#1,\sseq at nil
+    \pgfqkeys{/sseqpages/global}{#1}% run keys in global directory
+    \sseq at globalkeys@#1,\sseq at nil % handle defaults
     \let~\sseq at storetilde
 }
 
 \def\sseq at globalkeys@#1,{%
     \sseq at tempiftrue
-    \sseq at keys@removehandler{#1}%
-    \ifsseq at tempif
+    \sseq at keys@removehandler{#1}% this sets \sseq at tempif to be false if it has an ignored handler
+    % It also sets \sseq at temp to be the key.
+    \ifsseq at tempif % If not ignored handler
         \pgfkeys{/sseqpages/\sseq at temp/.sseq @ global only}%
+        % Check if no previous default behavior is defined, and if not, define it to pass key to sseqs.
         \pgfkeysifdefined{/sseqpages/global/default/\sseq at temp/. at cmd}{}{%
             \pgfkeys{/sseqpages/global/default/\sseq at temp/.ecode={\@nx\pgfkeysalso{sseqs={\sseq at temp}}}}%
         }%
@@ -1313,6 +1317,7 @@
     \sseq at globalkeys@next
 }
 
+% iterate over keys, throwing away empty keys and ones that start with ~.
 \def\sseq at globalkeys@next{%
     \@ifnextchar\sseq at nil{\@gobble}{%
         \@ifnextchar~{\sseq at globalkeys@eatentry}{%
@@ -1323,6 +1328,7 @@
     }%
 }
 
+% Handlers to ignore for
 \def\sseq at keys@ignorehandlers{%
     \\{value forbidden}\\{value required}\\{default}%\\{sseq store in}\\{sseq is if}%
     \\{sseq default code}\\{sseq default code 2 args}%
@@ -1386,7 +1392,7 @@
             \sseq at thepagecount=\sseq at thepage\relax
             \let\page\sseq at thepage
             \edef\sseq at thepagemm{\the\numexpr\sseq at thepagecount-1\relax}
-            \ifx\sseq at thepagemax\undefined
+            \ifx\sseq at thepagemax\sseq at infinity
                 \edef\sseq at thepagemaxpp{\the\numexpr\sseq at thepagecount+1\relax}
             \else
                 \ifnum\sseq at thepagemax=\z@

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqloadstore.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqloadstore.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqloadstore.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqloadstore.code.tex
@@ -91,7 +91,8 @@
 \def\sseq at obj@ifundef#1{\@ifundefined{\sseq at obj@fullname{#1}}}
 \def\sseq at obj@ifdef#1#2#3{\@ifundefined{\sseq at obj@fullname{#1}}{#3}{#2}}
 \def\sseq at obj@useifdef at else#1#2{\@ifundefined{\sseq at obj@fullname{#1}}{#2}{\sseq at obj{#1}}}
-\def\sseq at obj@inc#1{\bgroup\sseq at tempcount\sseq at obj{#1}\relax\advance\sseq at tempcount\@ne\sseq at obj@xdef{#1}{\the\sseq at tempcount}\egroup}
+\def\sseq at obj@inccheckdef#1{\sseq at obj@ifundef{#1}{\sseq at obj@gdef{#1}{1}}{\sseq at obj@inc{#1}}}
+\def\sseq at obj@inc#1{\sseq at obj@xdef{#1}{\the\numexpr\sseq at obj{#1}+1}}
 \def\sseq at obj@gaddto#1{\sseq at obj@ifundef{#1}{\sseq at obj@gdef{#1}}{\@xptwo\sseq at g@addto at macro\sseq at obj{#1}}}
 \def\sseq at obj@xaddto#1{\sseq at obj@ifundef{#1}{\sseq at obj@xdef{#1}}{\@xptwo\sseq at x@addto at macro\sseq at obj{#1}}}
 \def\sseq at obj@xoaddto#1{\sseq at obj@ifundef{#1}{\sseq at obj@xodef{#1}}{\@xp\sseq at g@addto at macro\csname \sseq at obj@fullname{#1}\@xp\endcsname\@xp}}

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmacromakers.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmacromakers.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmacromakers.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqmacromakers.code.tex
@@ -179,6 +179,9 @@
 }
 \let\begingroupa\begingroup
 \let\begingroupb\begingroup
+\newtoks\sseq at macro@setthiscall at toks
+\newtoks\sseq at macro@defaultarggetters at toks
+
 \cs_new_protected:Npn\DeclareSseqCommand#1#2#3{%
     \cs_if_exist:cTF { sseq @ builtin @ \cs_to_str:N #1 } {\sseq at error@x{wont-override-system-macro}{\string#1}\sseq at break} {}
     \cs_if_free:cT { sseq @ usermacro @ \cs_to_str:N #1 } {
@@ -200,18 +203,18 @@
     % You might think we could skip this patching, and it's probably possible.
     % However, this is responsible for turning the #'s of catcode other into #'s of catcode arg. I don't have as good of a way to do that.
     % Also, this allows me to use \sseq at parseargspec after defining the command, so I don't have to run any error checking inside of it
-    % because if the argspec is invalid, \DeclareDocumentCommand will let me know.\sseq at temptoks
+    % because if the argspec is invalid, \DeclareDocumentCommand will let me know.
     \cs_if_exist:cTF{ sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start \c_space_tl code }{
         \patchcmd:cnfnn{ sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start \c_space_tl code }{\endgroup{}}{
             \@xp\endgroup
             \@xp\begingroupa
-            \the\sseq at temptoks
+            \the\sseq at macro@setthiscall at toks
         }{}{\sseq at error@x{usermacro-failed-patch}{\string#1}}
         \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start \c_space_tl code } { sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start \c_space_tl code}
     }{
         \pretocmd:cfnn{ sseq @ usermacro @ \cs_to_str:N #1 @@unique@@ start }{
             \@xp\begingroupb
-            \the\sseq at temptoks
+            \the\sseq at macro@setthiscall at toks
         }{}{\sseq at error@x{usermacro-failed-patch}{\string#1}}
     }
     \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #1 } { sseq @ usermacro @ \cs_to_str:N #1 }
@@ -257,7 +260,7 @@
     \ifsseq at error
         \@xp\sseq at break
     \fi
-    \sseq at temptoks\@xp{\sseq at SseqGroup@argspec} % This gets added to the command by DeclareSseqCommand
+    \sseq at macro@setthiscall at toks\@xp{\sseq at SseqGroup@argspec} % This gets added to the command by DeclareSseqCommand
     #1#2{od()}{%
         %can't use \sseq at atbeginusermacro@msgsetup until next spot b/c don't know what the whole call looks like yet
         \IfNoValueTF{##1}{\def\sseq at options{}}{\def\sseq at options{##1}}%
@@ -267,20 +270,19 @@
             \sseqnewgroup at splitcoord##2\sseq at nil
         }%
         \csname sseq @ usermacro @ \sseq at macroname #2 @ helper \@xp\endcsname\@gobbletwo % This gobble eats the endgroup added by sseqDeclareDocumentCommand
-    }%
-
+    }
     \sseq at parseargspec@newgroup{#2}{#3}%
     % You might think we could skip this patching, and it's probably possible.
     % However, this is responsible for turning the #'s of catcode other into #'s of catcode arg. I don't have as good of a way to do that.
     \cs_if_exist:cTF{ sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code }{
         \pretocmd:cfnn { sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code }{
-            \the\sseq at temptoks
+            \the\sseq at macro@setthiscall at toks
         }{}{\sseq at error@x{usermacro-failed-patch}{\string#1}}
         % globalize definition:
         \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code } { sseq @ usermacro @ \cs_to_str:N #2 @ helper \c_space_tl code }
     }{
         \pretocmd:cfnn { sseq @ usermacro @ \cs_to_str:N #2 @ helper }{
-            \the\sseq at temptoks
+            \the\sseq at macro@setthiscall at toks
         }{}{\sseq at error@x{usermacro-failed-patch}{\string#1}}
     }
     \cs_gset_eq:cc { sseq @ usermacro @ \cs_to_str:N #2 @ helper } { sseq @ usermacro @ \cs_to_str:N #2 @ helper } % globalize definition
@@ -310,7 +312,7 @@
 \bgroup\catcode`\#=12\relax
     \gdef\sseq at SseqGroup@argspec{
         \sseq at eval{\global\sseq at groupargspectoks{\IfNoValueF{#1}{\unexpanded{[#1]}}\IfNoValueF{#2}{\unexpanded{(#2)}}}}
-        \@gobbletwo
+        \@gobbletwo % What does this \@gobbletwo do?
     }
     \gdef\sseq at thearg{#\the\sseq at tempcount}
 \egroup
@@ -317,13 +319,13 @@
 
 
 % When there are arguments with default values (O, D, R, G), we need to put them into temporary macros to compare them and see if they are the default value
-% that's what temptoksii is for.
+% that's what \sseq at macro@defaultarggetters at toks is for.
 \def\sseq at parseargspec#1#2{%
     \sseq at tempcount=\z@
     \sseq at temptoks{\@nx#1}% Holds the stuff that goes in \esetthiscall (so most stuff)
-    \sseq at temptoksii{}
+    \sseq at macro@defaultarggetters at toks{}
     \sseq at parseargspec@#2\sseq at nil
-    \sseq at eval{\sseq at temptoks{\the\sseq at temptoksii\@nx\sseq at usermacro@esetthiscall{\the\sseq at temptoks}}}
+    \sseq at eval{\sseq at macro@setthiscall at toks{\the\sseq at macro@defaultarggetters at toks\@nx\sseq at usermacro@esetthiscall{\the\sseq at temptoks}}}
 }
 
 % For NewGroup:
@@ -331,12 +333,11 @@
 \def\sseq at parseargspec@newgroup#1#2{%
     \sseq at tempcount=\z@
     \sseq at temptoks{}
-    \sseq at temptoksii{}%
+    \sseq at macro@defaultarggetters at toks{}%
     \sseq at parseargspec@#2\sseq at nil
-    % What's the second temptoks for?
     \sseq at eval{
-        \sseq at temptoks{
-            \the\sseq at temptoksii
+        \sseq at macro@setthiscall at toks{
+            \the\sseq at macro@defaultarggetters at toks
             \@nx\sseq at esetthiscall{
                 \@nx\@nx\@nx#1
                 \@nx\the\sseq at groupargspectoks
@@ -375,7 +376,7 @@
 }
 
 \def\sseq at parseargspec@setargdefault#1{%
-    \sseq at e@addto at toks\sseq at temptoksii{%
+    \sseq at e@addto at toks\sseq at macro@defaultarggetters at toks{%
         \def\@xp\@nx\csname sseq at parseargspec@temparg\@alph\sseq at tempcount\endcsname{\sseq at thearg}%
         \def\@xp\@nx\csname sseq at parseargspec@tempdefault\@alph\sseq at tempcount\endcsname{\unexpanded{#1}}%
     }

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqmain.code.tex
@@ -32,15 +32,15 @@
 \def\sseqdata{\@ifnextchar[{\sseqdata@}{\sseqdata@[]}}%}
 
 \def\sseqdata@[#1]{%
-    \edef\sseq at restorefont{\font at name}
+    \edef\sseq at restorefont{\font at name}%
     \selectfont\nullfont % Avoid space hazards!
 
-    \def\par{}
+    \def\par{}%
 %
     \ifx\pgfpictureid\@undefined\else %Uh-oh, we're inside tikz.
         \sseq at error@n{env-inside-tikz}{sseqdata}\@xp\sseq at breakdataenv
     \fi
-    \ifsseq at inprogress % Uh-oh, we're already in a sseq environment. This is not good.
+    \ifsseq at inprogress % Uh-oh, we're already in a sseq environment.
         \sseq at error@n{env-inside-sseq}{sseqdata}\@xp\sseq at breakdataenv
     \fi
     \sseq at inprogresstrue
@@ -63,11 +63,11 @@
     \sseq at installmacros
     \sseq at installmsghooks
     \sseq at install@xparse at Uarggrabber
-    % The behavior of xmax and xmin is very particular, so it's best not to mess with them. 
+    % 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 at ifpgfmathexpr will break in 
+    % 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 at ifpgfmathexpr will break in
     % \sseq at tikzprimitives@coords at notaclass@handle at .
     \def\xmin{\protect\sseq at xmin}\def\xmax{\protect\sseq at xmax}
     \def\ymin{\protect\sseq at ymin}\def\ymax{\protect\sseq at ymax}
@@ -108,11 +108,11 @@
 }
 
 % Just store all the settings
-\def\endsseqdata{
+\def\endsseqdata{%
     \let\sseq at error@setup\sseq at error@setup at noinfo
-    \sseq at checkend{sseqdata}
+    \sseq at checkend{sseqdata}%
     \sseq at savedpaths@add{\endgroup} % prevent some of the two-pass user macros horrors
-    \xdef\sseq at restorestyles{\sseq at stylelist}
+    \xdef\sseq at restorestyles{\sseq at stylelist}%
     \sseq at storecmds
     \ignorespacesafterend
     \sseq at breakpoint
@@ -121,9 +121,9 @@
 \def\sseqpage{\@ifnextchar[{\sseqpage@}{\sseqpage@[]}} %]
 
 \def\sseqpage@[#1]{%
-    \edef\sseq at restorefont{\font at name}
+    \edef\sseq at restorefont{\font at name}%
     \selectfont\nullfont % Avoid space hazards!
-    \def\par{}
+    \def\par{}%
 %
     \ifx\pgfpictureid\@undefined\else %Uh-oh, we're inside tikz.
         \sseq at error@n{env-inside-tikz}{sseqpage}\@xp\sseq at breakpageenv
@@ -355,7 +355,7 @@
 
 % Shorthand for sseqpage with empty body
 \def\printpage[#1]{%
-    \begin{sseqpage}[#1]
+    \begin{sseqpage}[#1]%
     \end{sseqpage}%
 }
 
@@ -381,8 +381,8 @@
     \sseq at savedpaths
     \sseq at g@addto at macro#1{\endgroup}
     \endgroup
-    \@xp\let\csname\sseq at macroname#1 code\endcsname\sseq at copymacro
-    \DeclareSseqGroup #1 {} { \csname\sseq at macroname#1 code\endcsname }
+    \@xp\let\csname\sseq at macroname#1 copiedcode\endcsname\sseq at copymacro
+    \DeclareSseqGroup #1 {} { \csname\sseq at macroname#1 copiedcode\endcsname }
     \let\sseq at savedpaths\sseq at savedpaths@save
 }
 
@@ -478,6 +478,59 @@
 
 \protected\def\sseq at xcoord{}\protected\def\sseq at ycoord{}
 
+
+%%% "Quick" commands for "compiled" code.
+\def\sseq at qclass(#1,#2){
+    \sseq at obj@inccheckdef{partcoord.(#1,#2).numnodes}
+    \edef\tempn{\sseq at obj{partcoord.(#1,#2).numnodes}}
+    \edef\classname{class.(#1,#2,\tempn)}
+    \sseq at obj@xdef{\classname.n}{\tempn}
+    \sseq at obj@xdef{\classname.num}{0}
+    \sseq at obj@xdef{\classname[0].page}{\sseq at infinity}
+    \sseq at savedpaths@addclass{class.(#1,#2,\tempn)}
+}
+\def\sseq at qclassnamed(#1,#2)#3{
+    \sseq at qclass(#1,#2)
+    \def\sseq at class@name{#3}
+    \sseq at obj@xdef{\classname[0].name}{\sseq at class@name}
+    \sseq at obj@xdef{class.namedclass.\detokenize\@xp{\sseq at class@name}}{#1,#2,\tempn}
+}
+
+\def\sseq at qdnamed#1(#2)(#3){\sseq at eval{\@nx\sseq at qd#1(\sseq at obj{class.namedclass.\detokenize{#2}})(\sseq at obj{class.namedclass.\detokenize{#3}})}}
+\def\sseq at qd#1(#2,#3,#4)(#5,#6,#7){
+    \bgroup
+    \def\sseq at dname{d.#1(#2,#3,#4)(#5,#6,#7)}
+    \def\source{(#2,#3,#4)}
+    \def\target{(#5,#6,#7)}
+    \sseq at obj@gdef{\sseq at dname.page}{#1}
+    \sseq at obj@gdef{\sseq at dname.source}{(#2,#3,#4)}
+    \sseq at obj@gdef{\sseq at dname.target}{(#5,#6,#7)}
+    \sseq at d@setpageminrec{class.\source}{#1}{source}%  automatically handles \sseq at cleanup@obj
+    \sseq at d@setpageminrec{class.\target}{#1}{target}
+    \sseq at savedpaths@adddifferential{\sseq at dname}
+    \egroup
+}
+
+\def\sseq at qstructlinenamed(#1)(#2){\sseq at eval{\@nx\sseq at qstructline(\sseq at obj{class.namedclass.\detokenize{#1}})(\sseq at obj{class.namedclass.\detokenize{#2}})}}
+\def\sseq at qstructline(#1,#2,#3)(#4,#5,#6){
+    \def\source{(#1,#2,#3)}
+    \def\target{(#4,#5,#6)}
+    \sseq at obj@xdef{structline.\source\target.num}{0}
+    \def\sseq at pagemin{0}
+    \edef\sseq at structlinename{structline.\source\target[\sseq at obj{structline.\source\target.num}]}
+    \sseq at cleanup@obj{\sseq at structlinename.page}
+    \sseq at obj@xdef{\sseq at structlinename.page}{\sseq at infinity}
+    \sseq at obj@xdef{\sseq at structlinename.pagemin}{\sseq at pagemin}
+    \sseq at obj@xdef{\sseq at structlinename.source}{\source}
+    \sseq at obj@xdef{\sseq at structlinename.target}{\target}
+    \sseq at class@adddependence{class.\source}{\sseq at structlinename}% If the source or target is already dead, this will set structlinename.page
+    \sseq at class@adddependence{class.\target}{\sseq at structlinename}
+    \sseq at savedpaths@addstructline{structline.\source\target}
+    %\sseq at cleanup@obj{\sseq at structlinename.options}
+    %\sseq at obj@xdef{\sseq at structlinename.options}{\ifsseq at needstikz\@nx\sseq at needstikztrue\fi\unexpanded\@xp{\sseq at savedoptioncode}}
+}
+
+
 %%%%%
 %%
 %% The main commands
@@ -930,7 +983,7 @@
     \egroup
 }
 
-% #1 -- class
+% #1 -- object
 % #2 -- page
 % If there is a class #1 drawn on page #2, set \sseq at gen to be the generation of that class, otherwise set \sseq at gen to be -1.
 \def\sseq at obj@pagetogen#1#2{
@@ -1021,20 +1074,20 @@
 
 \def\sseq at d@main#1#2#3#4#5{%
     \sseq at options@firstpassmode
-    \def\sseq at edgetype{differential}
+    \def\sseq at edgetype{differential}%
     \the\sseq at sseqstyle
     \the\sseq at edgestyle
     \the\sseq at differentialstyle
     \the\sseq at scope@toks
     \sseq at options@normalmode
-    \IfNoValueF{#2}{
+    \IfNoValueF{#2}{%
         \sseq at processoptions{differential}{#2}% Outputs result into \sseq at savedoptioncode
-    }
+    }%
     \sseq at xsetthiscall{\@xp\string\csname#1\endcsname\IfNoValueF{#2}{\unexpanded{[#2]}}\unexpanded{#3}\IfNoValueF{#4}{\unexpanded{(#4)}}\IfNoValueF{#5}{\unexpanded{(#5)}}}%
     \sseq at ifintexpr{#3}{%
         \sseq at tempcount=\numexpr#3\relax % this is a convenient way to get rid of spaces because #3 has to be a number
     }{%
-        \sseq at error@n{d-invalid-page}{#3}\sseq at break%
+        \sseq at error@n{d-invalid-page}{#3}\sseq at break
     }%
     \sseq at eval{\@nx\sseq at dparsecoord{\the\sseq at tempcount}{\IfNoValueTF{#4}{\lastclass0}{\unexpanded{#4}}}{\unexpanded{#5}}}
     \sseq at eval{\unexpanded{\csname sseq at d@#1\endcsname{#2}}{\the\sseq at tempcount}}%
@@ -1196,7 +1249,7 @@
     \bgroup
     \sseq at eval{
         \@nx\sseq at drawedge\sseq at obj{#1.source}\sseq at obj{#1.target}{differential}{%
-            \@xptwo\@nx\sseq at obj{#1.options}
+            \@nx\sseq at obj{#1.options}
         }
     }
     \egroup
@@ -1295,7 +1348,7 @@
     \endgroup
 }
 \def\sseq at structline@structline{
-    \@ifundefined{sseq at structline@pagemax}{}{\sseq at error{structline-no-page-max}}% could be warning
+    \@ifundefined{sseq at structline@pagemax}{}{\ifnum\sseq at structline@pagemax=\sseq at infinity\else \sseq at error{structline-no-page-max}\fi}% could be warning
     \ifnum\sseq at pagemin<\sseq at obj{class.\source[\sseq at obj{class.\source.num}].page}\relax\else
         \sseq at error{structline-stillborn}
         \sseq at breakfi
@@ -1551,6 +1604,7 @@
 }
 \let\sseq at processlabels\sseq at processlabels@default
 
+\let\sseqlastlabel\empty
 % I can't remember why we need to defer this. If at some point I figure this out, I should explain why here and in the definition of \class...
 \def\sseq at handleclassquotes@inner#1#2{%
     \begingroup\pgfscope
@@ -1562,6 +1616,7 @@
     \sseq at theclasslabelstyle
     \the\sseq at scope@toks
     \sseq at options@normalmode
+    \gdef\sseqlastlabel{#2}    
     \sseq at processoptions{class/label}{#2}%
     \sseq at classlabel@handler{#1}% labeltextfn is a private handler for transformations, sseq at classlabel@handler is exposed via "class label handler"
     \ifsseq at classlabel
@@ -1570,7 +1625,7 @@
         \sseq at x@addto at macro\sseq at classlabelnodes{%
             \@nx\sseq at drawlabel{%
                 \sseq at maybemathswitch\unexpanded\@xp{\result}\sseq at maybemathswitch}%
-                {% This is setup to prevent a bug where \classoptions and class label style don't work correctly together
+                {% This is set up to prevent a bug where \classoptions and class label style don't work correctly together
                     \the\sseq at sseqstyle\@nx\the\sseq at sseqstyle@page
                     \the\sseq at labelstyle\@nx\the\sseq at labelstyle@page
                     \the\sseq at classlabelstyle\@nx\the\sseq at classlabelstyle@page

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmessages.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmessages.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqmessages.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1 2017-09-16 2017-09-16
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqmessages.code.tex

Modified: trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqparsers.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqparsers.code.tex	2018-10-09 00:18:10 UTC (rev 48865)
+++ trunk/Master/texmf-dist/tex/latex/spectralsequences/sseqparsers.code.tex	2018-10-09 20:25:43 UTC (rev 48866)
@@ -1,8 +1,8 @@
 %%
-%% Package: spectralsequences v1.2.0 2017-09-16 2017-09-16
+%% Package: spectralsequences v1.2.1 2017-09-16 2017-09-16
 %% Author: Hood Chatham
 %% Email: hood at mit.edu
-%% Date: 2017-12-10
+%% Date: 2018-10-08
 %% License: Latex Project Public License
 %%
 %% File: sseqparsers.code.tex
@@ -40,7 +40,7 @@
 
 
 %%% ifpgfmathexpr
-% #1 -- expresion to test
+% #1 -- expression to test
 % #2 -- true case
 % #3 -- false case
 % This tests true if \pgfmathparse{#1} throws an error or not. Luckily, \pgfmathparse pipes its errors through \pgfmath at error so this is easy.



More information about the tex-live-commits mailing list