diff options
author | Karl Berry <karl@freefriends.org> | 2018-10-09 20:25:43 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2018-10-09 20:25:43 +0000 |
commit | 8fc5f28a8d2570c81ae3e8d4921d9228f39fab80 (patch) | |
tree | a414caa45d604794c3a21d2967d1d5c16c6ea274 | |
parent | 5be2b0e028ea8d5946e8f73aa3ed15f4722d7fae (diff) |
spectralsequences (9oct18)
git-svn-id: svn://tug.org/texlive/trunk@48866 c570f23f-e606-0410-a88d-b1316a301751
32 files changed, 327 insertions, 210 deletions
diff --git a/Master/texmf-dist/doc/latex/spectralsequences/README.md b/Master/texmf-dist/doc/latex/spectralsequences/README.md index dbe5c7242a7..250334c312d 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/README.md +++ b/Master/texmf-dist/doc/latex/spectralsequences/README.md @@ -1,9 +1,9 @@ -spectralsequences v1.2.0 +spectralsequences v1.2.1 ======================== Author: Hood Chatham Email: hood@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,7 +13,18 @@ Email me at hood@mit.edu to submit bug reports, request new features, etc. The c 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 diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_2.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_2.pdf Binary files differindex 04a0a619feb..e702ee7dd82 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_2.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_2.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_3.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_3.pdf Binary files differindex a7723477a85..730e363cdd8 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_3.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/ANSS-S_3.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_2.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_2.pdf Binary files differindex deee907b930..a5292efcb59 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_2.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_2.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_3.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_3.pdf Binary files differindex defbb06e7b4..7e3ff833566 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_3.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-S_3.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-tmf_2.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-tmf_2.pdf Binary files differindex 58794af7ca6..87434a8cdc4 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-tmf_2.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/ASS-tmf_2.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-EO2_3.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-EO2_3.pdf Binary files differindex cb0742f00bf..de7f059a67e 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-EO2_3.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-EO2_3.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-KO.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-KO.pdf Binary files differindex a313d8d47b8..6bf98a727b7 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-KO.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/HFPSS-KO.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.pdf Binary files differindex c757bc301ef..d5cff75b375 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.tex b/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.tex index ef150f693fd..4a34be94e4c 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.tex +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/J_RPinfty.tex @@ -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@mit.edu -%% Date: 2017-12-10 +%% Date: 2018-10-08 %% License: Latex Project Public License %% %% File: example_endofVFoS.tex diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-bo-A1.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-bo-A1.pdf Binary files differindex 03f4e89af6e..f7e8d733b14 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-bo-A1.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-bo-A1.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.pdf Binary files differindex 18074333934..a9e7532a675 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.tex b/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.tex index 51e744ae6d5..2ab7badd614 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.tex +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/MaySS-tmf-A2.tex @@ -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 = -> ] diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KF3n.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KF3n.pdf Binary files differindex 8d79d1095bb..745c5476edf 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KF3n.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KF3n.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KZ3.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KZ3.pdf Binary files differindex f8ce1a4c05b..d71cfeaa763 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KZ3.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/SSS-KZ3.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.pdf Binary files differindex e9ad2e4eb21..43072c438f8 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.tex b/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.tex index 6ff28805bd9..07ae39ed4d2 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.tex +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/hatcher.tex @@ -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@mit.edu -%% Date: 2017-12-10 +%% Date: 2018-10-08 %% License: Latex Project Public License %% %% File: example_hatcher.tex diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.pdf b/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.pdf Binary files differindex 0741ba18156..065073b8f97 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.tex b/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.tex index 524fcca5346..4180f52635c 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.tex +++ b/Master/texmf-dist/doc/latex/spectralsequences/examples/unstable_ASS_SO.tex @@ -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@mit.edu -%% Date: 2017-12-10 +%% Date: 2018-10-08 %% License: Latex Project Public License %% %% File: example_unstable_ASS_SO.tex diff --git a/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.pdf b/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.pdf Binary files differindex 6070eaaa34c..71208ce3fa5 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.pdf +++ b/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.pdf diff --git a/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.tex b/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.tex index 8ebebb4d312..bb4228f2211 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.tex +++ b/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanual.tex @@ -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@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 @@ If there are multiple classes at the coordinate |(x,y)| you may specify which us \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 @@ Here we define a command which takes an options list, a coordinate, and a single \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} diff --git a/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanualpreamble.tex b/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanualpreamble.tex index 02747497e0c..05d0ce06333 100644 --- a/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanualpreamble.tex +++ b/Master/texmf-dist/doc/latex/spectralsequences/manual/spectralsequencesmanualpreamble.tex @@ -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@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}, diff --git a/Master/texmf-dist/tex/latex/spectralsequences/spectralsequences.sty b/Master/texmf-dist/tex/latex/spectralsequences/spectralsequences.sty index 94b16a24f47..64b7c0f3eb1 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/spectralsequences.sty +++ b/Master/texmf-dist/tex/latex/spectralsequences/spectralsequences.sty @@ -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@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@error \newtoks\sseq@temptoks -\newtoks\sseq@temptoksii \newtoks\sseq@scope@toks \newcount\sseq@thepagecount diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqcheckdefinitions.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqcheckdefinitions.code.tex index aba45169816..b672193681f 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/sseqcheckdefinitions.code.tex +++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqcheckdefinitions.code.tex @@ -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@mit.edu -%% Date: 2017-12-10 +%% Date: 2018-10-08 %% License: Latex Project Public License %% %% File: sseqcheckdefinitions.code.tex diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqdrawing.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqdrawing.code.tex index 9ea6d4397fc..bf117b91d95 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/sseqdrawing.code.tex +++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqdrawing.code.tex @@ -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@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@tickloop@generic#1#2#3#4#5#6#7{ - \sseq@tempx=\numexpr % min + \sseq@tempcount=\numexpr % min \sseq@intdivceiling{#1}{#3} * #3 - \sseq@intdivceiling{#4}{#3} * #3 + #4 \relax - \ifnum\sseq@tempx<#1\relax - \advance\sseq@tempx#3\relax + \ifnum\sseq@tempcount<#1\relax + \advance\sseq@tempcount#3\relax \fi - \sseq@tempxb=\numexpr#2+1\relax % max + \sseq@tempcountb=\numexpr#2+1\relax % max \loop \bgroup - \pgftransformshift{\sseq@qpointxy{\sseq@tempx}{#5}}% + \pgftransformshift{\sseq@qpointxy{\sseq@tempcount}{#5}}% \pgftransformshift{\pgfqpoint{0pt}{#6}} #7 \egroup - \advance\sseq@tempx#3\relax - \ifnum\sseq@tempx<\sseq@tempxb\repeat + \advance\sseq@tempcount#3\relax + \ifnum\sseq@tempcount<\sseq@tempcountb\repeat } \def\sseq@drawxticks{% \sseq@tickloop@generic{\sseq@xmin}{\sseq@xmax}{\sseq@xtickstep}{\sseq@xtickstepoffset}{\sseq@yaxisorigin}{-\sseq@xaxisgap}{ - \sseq@xtickstyle - \tikz@options \pgftransformshift{\pgfqpoint{0pt}{-\sseq@xlabelgap}} - \pgftext{\hbox{$\sseq@xtickfn{\the\sseq@tempx}$}}% + \pgftransformresetnontranslations + %\@xp\tikzset\@xp{\sseq@xtickstyle} + %\pgftext{\tikz@options\tikz@textfont\hbox{$\sseq@xtickfn{\the\sseq@tempx}$}}% + \@xp\node\@xp[\sseq@xtickstyle]{\hbox{$\sseq@xtickfn{\the\sseq@tempcount}$}}; } \ifnum\sseq@xmajortickstep>\z@ \sseq@tickloop@generic{\sseq@xmin}{\sseq@xmax}{\sseq@xmajortickstep}{\sseq@xtickstepoffset}{\sseq@yaxisorigin}{-\sseq@xaxisgap}{ @@ -265,11 +266,11 @@ \def\sseq@drawyticks{% \sseq@transform@xymirror \sseq@tickloop@generic{\sseq@ymin}{\sseq@ymax}{\sseq@ytickstep}{\sseq@ytickstepoffset}{\sseq@xaxisorigin}{-\sseq@yaxisgap}{ - \sseq@ytickstyle - \tikz@options \pgftransformshift{\pgfqpoint{0pt}{-\sseq@ylabelgap}} \pgftransformresetnontranslations - \pgftext{\hbox{$\sseq@ytickfn{\the\sseq@tempx}$}}% + %\@xp\tikzset\@xp{\sseq@ytickstyle} + %\pgftext{\tikz@options\tikz@textfont\hbox{$\sseq@ytickfn{\the\sseq@tempx}$}}% + \@xp\node\@xp[\sseq@ytickstyle]{\hbox{$\sseq@ytickfn{\the\sseq@tempcount}$}}; } \ifnum\sseq@ymajortickstep>\z@ \sseq@tickloop@generic{\sseq@ymin}{\sseq@ymax}{\sseq@ymajortickstep}{\sseq@ytickstepoffset}{\sseq@xaxisorigin}{-\sseq@yaxisgap}{ @@ -554,16 +555,6 @@ { \csname sseq@\sseq@classpattern yoffset#1/#2\endcsname } }} } -\def\sseq@class@getparts#1(#2,#3,#4)[#5].{ - \sseq@seterrorannotation@drawing{#1}{#2}{#3}{#4}{#5} - \def\sseq@thisclassname{class.(#2,#3,#4)} - \def\sseq@thisnodename{sseq{#2,#3,#4}} - \def\sseq@thispos{(#2,#3)} - \edef\sseq@thisposnum{\sseq@obj{class.(#2,#3,#4).n}} - \def\sseq@thisclassnum{#5} - \sseq@tempx=#2\relax - \sseq@tempy=#3\relax -} \def\sseq@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@class@getparts#1(#2,#3,#4)[#5].{ + \sseq@seterrorannotation@drawing{#1}{#2}{#3}{#4}{#5} + \def\sseq@thisnodename{sseq{#2,#3,#4}} + \def\sseq@thispos{(#2,#3)} + \edef\sseq@thisposnodeindex{\sseq@obj{class.(#2,#3,#4).n}} + \edef\sseq@thispostotalnodes{\sseq@obj{partcoord.(#2,#3).numnodes}} + \def\sseq@thisclassnum{#5} + \sseq@tempx=#2\relax + \sseq@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@permanentcycle \newcount\sseq@totalclassesdrawn @@ -590,7 +610,13 @@ \global\advance\sseq@totalclassesdrawn\@ne \begingroup \sseq@class@getparts#1. + % defines: + % \sseq@thisnodename -- name we should give the pdfnode + % \sseq@thispos -- (x,y) + % \sseq@thispostotalnodes -- total number of nodes at (x,y) + % \sseq@thisposnodeindex -- index of this node \sseq@needstikzfalse + % Apply first pass styles? TODO: What is this for again? \sseq@options@firstpassmode \sseq@thesseqstyle \sseq@theclassstyle @@ -606,12 +632,14 @@ \sseq@obj{#1.needstikz} % \sseq@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@tempx<\sseq@xmaxpp\relax\ifnum\sseq@tempx>\sseq@xminmm\relax\ifnum\sseq@tempy<\sseq@ymaxpp\relax\ifnum\sseq@tempy>\sseq@yminmm\relax \sseq@outofrangefalse \pgfscope + % Finish options setup \let\tikz@options\pgfutil@empty \let\tikz@alias=\pgfutil@empty - \def\pgfkeysdefaultpath{/sseqpages/class/} + \def\pgfkeysdefaultpath{/sseqpages/class/}% \sseq@options@secondpassmode \sseq@thesseqstyle \sseq@theclassstyle @@ -628,15 +656,18 @@ \def\sseq@collections@featuretype{class} \the\sseq@scope@toks \sseq@obj{#1.options} + % Set up node position coordinate transform \pgftransformshift{\pgfqpointxy{\numexpr\sseq@tempx +\sseq@xoffset-\sseq@x\relax}{\numexpr\sseq@tempy + \sseq@yoffset-\sseq@y\relax}} \iftikz@fullytransformed\pgfgettransform{\savetransform}\fi \pgftransformresetnontranslations \sseq@globalrotatetransform + % Now the origin is at (x,y). Set up class placement offset. \sseq@classplacementtransform \sseq@obj@ifdef{#1.offset}{\sseq@obj{#1.offset}}{% - \sseq@offset{\sseq@thisposnum}{\sseq@obj{partcoord.\sseq@thispos.numnodes}}% + \sseq@offset{\sseq@thisposnodeindex}{\sseq@thispostotalnodes}% }% \iftikz@fullytransformed\pgfsettransform{\savetransform}\else\pgftransformresetnontranslations\ifsseq@rotatelabels\sseq@globalrotatetransform\fi\fi + % \tikz@options % the value of \sseq@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@eval{\@nx\sseq@handleclassquotes@inner{\sseq@obj{#1.name}}{\sseq@class@showname}} }{} \fi + % Okay now we're ready to make the node \ifsseq@needstikz + % The options code above put mode information into \tikz@mode which gets wiped by tikz \let\sseq@mode\tikz@mode - \tikzset{every text node part/.code/.expand once={\sseq@globalrotatetransform\sseq@classnodetextoptions{}}}% \sseq@eval{% - \@nx\node[/utils/exec={\let\@nx\tikz@mode\@nx\sseq@mode}, - /handlers/first char syntax/the character "/.initial=\@nx\sseq@handlequote - ] (\sseq@thisnodename) {\unexpanded\@xp{\sseq@classnodetext}} - [every text node part/.code={}]; + \@nx\node[% + every text node part/.code/.expand once={\sseq@globalrotatetransform\sseq@classnodetextoptions{}},% + /utils/exec={\let\@nx\tikz@mode\@nx\sseq@mode}] % Set mode based on outer options + (\sseq@thisnodename) {\unexpanded\@xp{\sseq@classnodetext}};% }% \else \tikz@node@textfont - \sseq@setnodetext{\sseq@classnodetext}{\sseq@classnodetextoptions} + \sseq@setnodetext{\sseq@classnodetext}{\sseq@classnodetextoptions}% \let\tikz@fig@name\sseq@thisnodename \pgfmultipartnode{\tikz@shape}{\tikz@anchor}{\tikz@fig@name}{\sseq@drawnode}% - \tikz@alias + \tikz@alias % makes extra names for this shape \fi - \sseq@obj{#1.labelnodes} - \sseq@classlabelnodes % classlabelnodes comes from show name - \sseq@obj@ifdef{#1.tooltip}{ - \pgfpointanchor{\sseq@thisnodename}{west} - \pgf@xa=\pgf@x - \pgfpointanchor{\sseq@thisnodename}{south} - \pgf@ya=\pgf@y -% - \pgf@process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{west}}}{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{east}}}} - \pgf@xb=\pgf@x - \pgf@process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{south}}}{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{north}}}} - \pgf@yb=\pgf@y -% - \setbox\tikz@tempbox=\hbox{ - \pgfinterruptpicture - \sseqtooltip{\rule{\pgf@xb}{0pt}\rule{0pt}{\pgf@yb}}{\sseq@obj{#1.tooltip}} - \endpgfinterruptpicture - } - {% - \pgftransformshift{\pgfqpoint{\pgf@xa}{\pgf@ya}}% - \pgfapproximatenonlineartransformation% - \pgfqboxsynced{\tikz@tempbox}% - }% - }{} + \sseq@obj{#1.labelnodes}% + \sseq@classlabelnodes % classlabelnodes comes from show name (I guess it can't put them into #1.labelnodes? TODO: why?) + \sseq@obj@ifdef{#1.tooltip}{\sseq@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@outofrange \sseq@eval{\@nx\pgftransformshift{\@nx\pgfqpointxy{\numexpr\sseq@tempx+\sseq@xoffset-\sseq@x\relax}{\numexpr\sseq@tempy+\sseq@yoffset-\sseq@y\relax}}}% \pgftransformresetnontranslations \sseq@globalrotatetransform \sseq@classplacementtransform - \sseq@offset{\sseq@thisposnum}{\sseq@obj{partcoord.\sseq@thispos.numnodes}} + \sseq@offset{\sseq@thisposnodeindex}{\sseq@thispostotalnodes}% \pgfcoordinate{\sseq@thisnodename}{\pgfpointorigin}% \fi \endgroup } +\def\sseq@dotooltip#1{% + \pgfpointanchor{\sseq@thisnodename}{west}% + \pgf@xa=\pgf@x + \pgfpointanchor{\sseq@thisnodename}{south}% + \pgf@ya=\pgf@y +% + \pgf@process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{west}}}{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{east}}}}% + \pgf@xb=\pgf@x + \pgf@process{\pgfpointdiff{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{south}}}{\pgfpointtransformed{\pgfpointanchor{\sseq@thisnodename}{north}}}}% + \pgf@yb=\pgf@y +% + \setbox\tikz@tempbox=\hbox{% + \pgfinterruptpicture + \sseqtooltip{\rule{\pgf@xb}{0pt}\rule{0pt}{\pgf@yb}}{\sseq@obj{#1.tooltip}}% + \endpgfinterruptpicture + } + {% + \pgftransformshift{\pgfqpoint{\pgf@xa}{\pgf@ya}}% + \pgfapproximatenonlineartransformation% + \pgfqboxsynced{\tikz@tempbox}% + }% +} + % #1 -- label text % #2 -- options +% Make the node textbox. \def\sseq@setnodetext#1#2{% - \setbox\pgfnodeparttextbox=\hbox{% - \pgfscope% - #2 - \tikzset{every text node part/.try}% - \ifx\tikz@textopacity\pgfutil@empty% + \sseq@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@textopacity\pgfutil@empty% + \else% + \pgfsetfillopacity{\tikz@textopacity}% + \pgfsetstrokeopacity{\tikz@textopacity}% + \fi% + \pgfinterruptpicture + \ifx\tikz@text@width\pgfutil@empty% + \tikz@textfont% + \else% + \begingroup% + \pgfmathsetlength{\pgf@x}{\tikz@text@width}% + \pgfutil@minipage[t]{\pgf@x}\leavevmode\hbox{}% + \tikz@textfont% + \tikz@text@action% + \fi% + \ifx\tikz@textcolor\pgfutil@empty% + \else% + \pgfutil@colorlet{.}{\tikz@textcolor}% + \fi% + \pgfsetcolor{.}% + \tikz@atbegin@node% + #1% + \tikz@atend@node% + \ifx\tikz@text@width\pgfutil@empty% + \else% + \pgfutil@endminipage% + \endgroup% + \fi% + \endpgfinterruptpicture + \endpgfscope% + }% + \ifx\tikz@text@width\pgfutil@empty% \else% - \pgfsetfillopacity{\tikz@textopacity}% - \pgfsetstrokeopacity{\tikz@textopacity}% + \pgfmathsetlength{\pgf@x}{\tikz@text@width}% + \wd\pgfnodeparttextbox=\pgf@x% \fi% - \pgfinterruptpicture - \ifx\tikz@text@width\pgfutil@empty% - \tikz@textfont% - \else% - \begingroup% - \pgfmathsetlength{\pgf@x}{\tikz@text@width}% - \pgfutil@minipage[t]{\pgf@x}\leavevmode\hbox{}% - \tikz@textfont% - \tikz@text@action% - \fi% - \ifx\tikz@textcolor\pgfutil@empty% + \ifx\tikz@text@height\pgfutil@empty% \else% - \pgfutil@colorlet{.}{\tikz@textcolor}% + \pgfmathsetlength{\pgf@x}{\tikz@text@height}% + \ht\pgfnodeparttextbox=\pgf@x% \fi% - \pgfsetcolor{.}% - \tikz@atbegin@node% - #1% - \tikz@atend@node% - \ifx\tikz@text@width\pgfutil@empty% - \else% - \pgfutil@endminipage% - \endgroup% - \fi% - \endpgfinterruptpicture - \endpgfscope% - }% - \ifx\tikz@text@width\pgfutil@empty% - \else% - \pgfmathsetlength{\pgf@x}{\tikz@text@width}% - \wd\pgfnodeparttextbox=\pgf@x% - \fi% - \ifx\tikz@text@height\pgfutil@empty% - \else% - \pgfmathsetlength{\pgf@x}{\tikz@text@height}% - \ht\pgfnodeparttextbox=\pgf@x% - \fi% - \ifx\tikz@text@depth\pgfutil@empty% - \else% - \pgfmathsetlength{\pgf@x}{\tikz@text@depth}% - \dp\pgfnodeparttextbox=\pgf@x% - \fi% + \ifx\tikz@text@depth\pgfutil@empty% + \else% + \pgfmathsetlength{\pgf@x}{\tikz@text@depth}% + \dp\pgfnodeparttextbox=\pgf@x% + \fi% + } } + +% A small part of the tikz main loop that has been paired down as much as possible for efficiency. \def\sseq@drawnode{% \pgfutil@tempdima=\pgflinewidth% {% \tikz@mode% - %\iftikz@mode@clip \sseq@error@internal{Clip shouldn't happen here, but this error should be caught earlier}{}\fi % \iftikz@mode@draw% \iftikz@mode@double% % Change line width @@ -793,27 +835,27 @@ % #1 -- label text % #2 -- options -\def\sseq@drawlabel#1#2{ +\def\sseq@drawlabel#1#2{% \bgroup\pgfscope - \def\tikz@mode{} + \def\tikz@mode{}% \let\sseq@tikz@transform@save\tikz@transform - \pgfkeyssetvalue{/pgf/inner xsep}{2pt} - \pgfkeyssetvalue{/pgf/inner ysep}{2pt} + \pgfkeyssetvalue{/pgf/inner xsep}{2pt}% + \pgfkeyssetvalue{/pgf/inner ysep}{2pt}% \def\tikz@shape{rectangle} - \let\tikz@transform\empty % The next line was set up to fix the classlabelstyle glitch + \let\tikz@transform\empty % The next line was set up to fix the classlabelstyle glitch (what does this mean?) \sseq@options@secondpassmode \sseq@thesseqstyle\sseq@thelabelstyle\sseq@theclasslabelstyle#2 \tikz@options \pgftransformreset - \pgftransformshift{\tikz@node@at} + \pgftransformshift{\tikz@node@at}% \tikz@lib@pos@call \tikz@transform \tikz@mode \let\tikz@transform\sseq@tikz@transform@save - \sseq@setnodetext{\sseq@labeltextfn{#1}}{} + \sseq@setnodetext{\sseq@labeltextfn{#1}}{}% \pgfmultipartnode{\tikz@shape}{\tikz@anchor}{label}{\sseq@drawnode}% \ifsseq@pin - \def\sseq@pinoptions{} + \def\sseq@pinoptions{}% \let\tikz@options\empty \let\tikz@mode\empty \sseq@thepinstyle @@ -821,11 +863,11 @@ \sseq@pinoptions \tikz@options \tikz@mode - \sseq@drawedge@findsourcetarget{\tikz@fig@name}{}{label}{} + \sseq@drawedge@findsourcetarget{\tikz@fig@name}{}{label}{}% \pgfpathmoveto{\sseq@sourcecoord}% \pgfpathlineto{\sseq@targetcoord}% \sseq@eval{\noexpand\pgfusepath{% - draw + draw, \iftikz@mode@fill fill,\fi \iftikz@mode@draw draw,\fi }}% @@ -972,6 +1014,7 @@ \pgfpathlineto{\sseq@targetcoord}% \pgfgetpath\thispath \pgfusepath{discard}% + \pgfintersectionsortbysecondpath \pgfintersectionofpaths{\pgfsetpath\sseq@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@drawedge@handletrickyedge{% \ifsseq@draworphanedges + \pgfintersectionsortbysecondpath \pgfintersectionofpaths{\pgfsetpath\sseq@therangepath}{\pgfsetpath\thispath}% \ifnum\pgfintersectionsolutions=\z@ \sseq@drawedgefalse % don't draw orphan edges that never intersect actual range @@ -1024,8 +1068,8 @@ \def\sseq@drawedge@handleorphan{% - \def\sseq@sourcecoord{\pgfpointintersectionsolution{1}}% - \def\sseq@targetcoord{\pgfpointintersectionsolution{2}}% + \def\sseq@sourcecoord{\pgfpointintersectionsolution{2}}% + \def\sseq@targetcoord{\pgfpointintersectionsolution{1}}% \edef\temparrowstartspec{\@nx\pgfsetarrowsstart{\csname sseq@runoffarrow@start@\sseq@edgetype @spec\endcsname}}% \edef\temparrowendspec{\@nx\pgfsetarrowsend{\csname sseq@runoffarrow@end@\sseq@edgetype @spec\endcsname}}% \pgfcoordinate{tempa}{\sseq@sourcecoord}% diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqforeach.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqforeach.code.tex index 851f65ab3ac..b37bd0a3553 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/sseqforeach.code.tex +++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqforeach.code.tex @@ -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@mit.edu -%% Date: 2017-12-10 +%% Date: 2018-10-08 %% License: Latex Project Public License %% %% File: sseqforeach.code.tex diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqkeys.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqkeys.code.tex index fcb843904d2..b2a0a4063d4 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/sseqkeys.code.tex +++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqkeys.code.tex @@ -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@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@sseqsetdirectory{/sseqpages/global/default} - \def\sseq@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@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@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@savedoptioncode for later use. @@ -618,7 +617,7 @@ \pgfutil@in@{--}{#2}\ifpgfutil@in@ \sseq@getnumrange@range#1#2\sseq@nil \else - \edef#1{\the\numexpr#2} + \sseq@getnumrange@range#1#2--\sseq@infinity\sseq@nil \fi } \def\sseq@getnumrange@range#1#2--#3\sseq@nil{\edef#1{\the\numexpr#2}\@xp\edef\csname\sseq@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@globalkeys#1{% \let\sseq@storetilde~% \def~{}% - \pgfqkeys{/sseqpages/global}{#1}% - \sseq@globalkeys@#1,\sseq@nil + \pgfqkeys{/sseqpages/global}{#1}% run keys in global directory + \sseq@globalkeys@#1,\sseq@nil % handle defaults \let~\sseq@storetilde } \def\sseq@globalkeys@#1,{% \sseq@tempiftrue - \sseq@keys@removehandler{#1}% - \ifsseq@tempif + \sseq@keys@removehandler{#1}% this sets \sseq@tempif to be false if it has an ignored handler + % It also sets \sseq@temp to be the key. + \ifsseq@tempif % If not ignored handler \pgfkeys{/sseqpages/\sseq@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@temp/.@cmd}{}{% \pgfkeys{/sseqpages/global/default/\sseq@temp/.ecode={\@nx\pgfkeysalso{sseqs={\sseq@temp}}}}% }% @@ -1313,6 +1317,7 @@ \sseq@globalkeys@next } +% iterate over keys, throwing away empty keys and ones that start with ~. \def\sseq@globalkeys@next{% \@ifnextchar\sseq@nil{\@gobble}{% \@ifnextchar~{\sseq@globalkeys@eatentry}{% @@ -1323,6 +1328,7 @@ }% } +% Handlers to ignore for \def\sseq@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@thepagecount=\sseq@thepage\relax \let\page\sseq@thepage \edef\sseq@thepagemm{\the\numexpr\sseq@thepagecount-1\relax} - \ifx\sseq@thepagemax\undefined + \ifx\sseq@thepagemax\sseq@infinity \edef\sseq@thepagemaxpp{\the\numexpr\sseq@thepagecount+1\relax} \else \ifnum\sseq@thepagemax=\z@ diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqloadstore.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqloadstore.code.tex index 066685a57af..2ae85222360 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/sseqloadstore.code.tex +++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqloadstore.code.tex @@ -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@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@obj@ifundef#1{\@ifundefined{\sseq@obj@fullname{#1}}} \def\sseq@obj@ifdef#1#2#3{\@ifundefined{\sseq@obj@fullname{#1}}{#3}{#2}} \def\sseq@obj@useifdef@else#1#2{\@ifundefined{\sseq@obj@fullname{#1}}{#2}{\sseq@obj{#1}}} -\def\sseq@obj@inc#1{\bgroup\sseq@tempcount\sseq@obj{#1}\relax\advance\sseq@tempcount\@ne\sseq@obj@xdef{#1}{\the\sseq@tempcount}\egroup} +\def\sseq@obj@inccheckdef#1{\sseq@obj@ifundef{#1}{\sseq@obj@gdef{#1}{1}}{\sseq@obj@inc{#1}}} +\def\sseq@obj@inc#1{\sseq@obj@xdef{#1}{\the\numexpr\sseq@obj{#1}+1}} \def\sseq@obj@gaddto#1{\sseq@obj@ifundef{#1}{\sseq@obj@gdef{#1}}{\@xptwo\sseq@g@addto@macro\sseq@obj{#1}}} \def\sseq@obj@xaddto#1{\sseq@obj@ifundef{#1}{\sseq@obj@xdef{#1}}{\@xptwo\sseq@x@addto@macro\sseq@obj{#1}}} \def\sseq@obj@xoaddto#1{\sseq@obj@ifundef{#1}{\sseq@obj@xodef{#1}}{\@xp\sseq@g@addto@macro\csname \sseq@obj@fullname{#1}\@xp\endcsname\@xp}} diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqmacromakers.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqmacromakers.code.tex index ae914721e25..b40bc5eb681 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/sseqmacromakers.code.tex +++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqmacromakers.code.tex @@ -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@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@macro@setthiscall@toks +\newtoks\sseq@macro@defaultarggetters@toks + \cs_new_protected:Npn\DeclareSseqCommand#1#2#3{% \cs_if_exist:cTF { sseq @ builtin @ \cs_to_str:N #1 } {\sseq@error@x{wont-override-system-macro}{\string#1}\sseq@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@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@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@temptoks + \the\sseq@macro@setthiscall@toks }{}{\sseq@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@temptoks + \the\sseq@macro@setthiscall@toks }{}{\sseq@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@error \@xp\sseq@break \fi - \sseq@temptoks\@xp{\sseq@SseqGroup@argspec} % This gets added to the command by DeclareSseqCommand + \sseq@macro@setthiscall@toks\@xp{\sseq@SseqGroup@argspec} % This gets added to the command by DeclareSseqCommand #1#2{od()}{% %can't use \sseq@atbeginusermacro@msgsetup until next spot b/c don't know what the whole call looks like yet \IfNoValueTF{##1}{\def\sseq@options{}}{\def\sseq@options{##1}}% @@ -267,20 +270,19 @@ \sseqnewgroup@splitcoord##2\sseq@nil }% \csname sseq @ usermacro @ \sseq@macroname #2 @ helper \@xp\endcsname\@gobbletwo % This gobble eats the endgroup added by sseqDeclareDocumentCommand - }% - + } \sseq@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@temptoks + \the\sseq@macro@setthiscall@toks }{}{\sseq@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@temptoks + \the\sseq@macro@setthiscall@toks }{}{\sseq@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,20 +312,20 @@ \bgroup\catcode`\#=12\relax \gdef\sseq@SseqGroup@argspec{ \sseq@eval{\global\sseq@groupargspectoks{\IfNoValueF{#1}{\unexpanded{[#1]}}\IfNoValueF{#2}{\unexpanded{(#2)}}}} - \@gobbletwo + \@gobbletwo % What does this \@gobbletwo do? } \gdef\sseq@thearg{#\the\sseq@tempcount} \egroup % 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@macro@defaultarggetters@toks is for. \def\sseq@parseargspec#1#2{% \sseq@tempcount=\z@ \sseq@temptoks{\@nx#1}% Holds the stuff that goes in \esetthiscall (so most stuff) - \sseq@temptoksii{} + \sseq@macro@defaultarggetters@toks{} \sseq@parseargspec@#2\sseq@nil - \sseq@eval{\sseq@temptoks{\the\sseq@temptoksii\@nx\sseq@usermacro@esetthiscall{\the\sseq@temptoks}}} + \sseq@eval{\sseq@macro@setthiscall@toks{\the\sseq@macro@defaultarggetters@toks\@nx\sseq@usermacro@esetthiscall{\the\sseq@temptoks}}} } % For NewGroup: @@ -331,12 +333,11 @@ \def\sseq@parseargspec@newgroup#1#2{% \sseq@tempcount=\z@ \sseq@temptoks{} - \sseq@temptoksii{}% + \sseq@macro@defaultarggetters@toks{}% \sseq@parseargspec@#2\sseq@nil - % What's the second temptoks for? \sseq@eval{ - \sseq@temptoks{ - \the\sseq@temptoksii + \sseq@macro@setthiscall@toks{ + \the\sseq@macro@defaultarggetters@toks \@nx\sseq@esetthiscall{ \@nx\@nx\@nx#1 \@nx\the\sseq@groupargspectoks @@ -375,7 +376,7 @@ } \def\sseq@parseargspec@setargdefault#1{% - \sseq@e@addto@toks\sseq@temptoksii{% + \sseq@e@addto@toks\sseq@macro@defaultarggetters@toks{% \def\@xp\@nx\csname sseq@parseargspec@temparg\@alph\sseq@tempcount\endcsname{\sseq@thearg}% \def\@xp\@nx\csname sseq@parseargspec@tempdefault\@alph\sseq@tempcount\endcsname{\unexpanded{#1}}% } diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqmain.code.tex index d69b28d2041..772f51fdc78 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.0 2017-09-16 2017-09-16 +%% Package: spectralsequences v1.2.1 %% Author: Hood Chatham %% Email: hood@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@restorefont{\font@name} + \edef\sseq@restorefont{\font@name}% \selectfont\nullfont % Avoid space hazards! - \def\par{} + \def\par{}% % \ifx\pgfpictureid\@undefined\else %Uh-oh, we're inside tikz. \sseq@error@n{env-inside-tikz}{sseqdata}\@xp\sseq@breakdataenv \fi - \ifsseq@inprogress % Uh-oh, we're already in a sseq environment. This is not good. + \ifsseq@inprogress % Uh-oh, we're already in a sseq environment. \sseq@error@n{env-inside-sseq}{sseqdata}\@xp\sseq@breakdataenv \fi \sseq@inprogresstrue @@ -63,11 +63,11 @@ \sseq@installmacros \sseq@installmsghooks \sseq@install@xparse@Uarggrabber - % The behavior of xmax and xmin is very particular, so it's best not to mess with them. + % The behavior of xmax and xmin is very particular, so it's best not to mess with them. % In particular, they shouldn't be expanded until printing no matter what, but we don't want % \pgfmathparse to barf on them. \pgfmathparse really doesn't like engine protected macros, - % so in no case should this be engine protected. (Wish we could test an argument for the presence - % of engine protected macros). If we try to do that, \sseq@ifpgfmathexpr will break in + % so in no case should this be engine protected. (Wish we could test an argument for the presence + % of engine protected macros). If we try to do that, \sseq@ifpgfmathexpr will break in % \sseq@tikzprimitives@coords@notaclass@handle@. \def\xmin{\protect\sseq@xmin}\def\xmax{\protect\sseq@xmax} \def\ymin{\protect\sseq@ymin}\def\ymax{\protect\sseq@ymax} @@ -108,11 +108,11 @@ } % Just store all the settings -\def\endsseqdata{ +\def\endsseqdata{% \let\sseq@error@setup\sseq@error@setup@noinfo - \sseq@checkend{sseqdata} + \sseq@checkend{sseqdata}% \sseq@savedpaths@add{\endgroup} % prevent some of the two-pass user macros horrors - \xdef\sseq@restorestyles{\sseq@stylelist} + \xdef\sseq@restorestyles{\sseq@stylelist}% \sseq@storecmds \ignorespacesafterend \sseq@breakpoint @@ -121,9 +121,9 @@ \def\sseqpage{\@ifnextchar[{\sseqpage@}{\sseqpage@[]}} %] \def\sseqpage@[#1]{% - \edef\sseq@restorefont{\font@name} + \edef\sseq@restorefont{\font@name}% \selectfont\nullfont % Avoid space hazards! - \def\par{} + \def\par{}% % \ifx\pgfpictureid\@undefined\else %Uh-oh, we're inside tikz. \sseq@error@n{env-inside-tikz}{sseqpage}\@xp\sseq@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@savedpaths \sseq@g@addto@macro#1{\endgroup} \endgroup - \@xp\let\csname\sseq@macroname#1 code\endcsname\sseq@copymacro - \DeclareSseqGroup #1 {} { \csname\sseq@macroname#1 code\endcsname } + \@xp\let\csname\sseq@macroname#1 copiedcode\endcsname\sseq@copymacro + \DeclareSseqGroup #1 {} { \csname\sseq@macroname#1 copiedcode\endcsname } \let\sseq@savedpaths\sseq@savedpaths@save } @@ -478,6 +478,59 @@ \protected\def\sseq@xcoord{}\protected\def\sseq@ycoord{} + +%%% "Quick" commands for "compiled" code. +\def\sseq@qclass(#1,#2){ + \sseq@obj@inccheckdef{partcoord.(#1,#2).numnodes} + \edef\tempn{\sseq@obj{partcoord.(#1,#2).numnodes}} + \edef\classname{class.(#1,#2,\tempn)} + \sseq@obj@xdef{\classname.n}{\tempn} + \sseq@obj@xdef{\classname.num}{0} + \sseq@obj@xdef{\classname[0].page}{\sseq@infinity} + \sseq@savedpaths@addclass{class.(#1,#2,\tempn)} +} +\def\sseq@qclassnamed(#1,#2)#3{ + \sseq@qclass(#1,#2) + \def\sseq@class@name{#3} + \sseq@obj@xdef{\classname[0].name}{\sseq@class@name} + \sseq@obj@xdef{class.namedclass.\detokenize\@xp{\sseq@class@name}}{#1,#2,\tempn} +} + +\def\sseq@qdnamed#1(#2)(#3){\sseq@eval{\@nx\sseq@qd#1(\sseq@obj{class.namedclass.\detokenize{#2}})(\sseq@obj{class.namedclass.\detokenize{#3}})}} +\def\sseq@qd#1(#2,#3,#4)(#5,#6,#7){ + \bgroup + \def\sseq@dname{d.#1(#2,#3,#4)(#5,#6,#7)} + \def\source{(#2,#3,#4)} + \def\target{(#5,#6,#7)} + \sseq@obj@gdef{\sseq@dname.page}{#1} + \sseq@obj@gdef{\sseq@dname.source}{(#2,#3,#4)} + \sseq@obj@gdef{\sseq@dname.target}{(#5,#6,#7)} + \sseq@d@setpageminrec{class.\source}{#1}{source}% automatically handles \sseq@cleanup@obj + \sseq@d@setpageminrec{class.\target}{#1}{target} + \sseq@savedpaths@adddifferential{\sseq@dname} + \egroup +} + +\def\sseq@qstructlinenamed(#1)(#2){\sseq@eval{\@nx\sseq@qstructline(\sseq@obj{class.namedclass.\detokenize{#1}})(\sseq@obj{class.namedclass.\detokenize{#2}})}} +\def\sseq@qstructline(#1,#2,#3)(#4,#5,#6){ + \def\source{(#1,#2,#3)} + \def\target{(#4,#5,#6)} + \sseq@obj@xdef{structline.\source\target.num}{0} + \def\sseq@pagemin{0} + \edef\sseq@structlinename{structline.\source\target[\sseq@obj{structline.\source\target.num}]} + \sseq@cleanup@obj{\sseq@structlinename.page} + \sseq@obj@xdef{\sseq@structlinename.page}{\sseq@infinity} + \sseq@obj@xdef{\sseq@structlinename.pagemin}{\sseq@pagemin} + \sseq@obj@xdef{\sseq@structlinename.source}{\source} + \sseq@obj@xdef{\sseq@structlinename.target}{\target} + \sseq@class@adddependence{class.\source}{\sseq@structlinename}% If the source or target is already dead, this will set structlinename.page + \sseq@class@adddependence{class.\target}{\sseq@structlinename} + \sseq@savedpaths@addstructline{structline.\source\target} + %\sseq@cleanup@obj{\sseq@structlinename.options} + %\sseq@obj@xdef{\sseq@structlinename.options}{\ifsseq@needstikz\@nx\sseq@needstikztrue\fi\unexpanded\@xp{\sseq@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@gen to be the generation of that class, otherwise set \sseq@gen to be -1. \def\sseq@obj@pagetogen#1#2{ @@ -1021,20 +1074,20 @@ \def\sseq@d@main#1#2#3#4#5{% \sseq@options@firstpassmode - \def\sseq@edgetype{differential} + \def\sseq@edgetype{differential}% \the\sseq@sseqstyle \the\sseq@edgestyle \the\sseq@differentialstyle \the\sseq@scope@toks \sseq@options@normalmode - \IfNoValueF{#2}{ + \IfNoValueF{#2}{% \sseq@processoptions{differential}{#2}% Outputs result into \sseq@savedoptioncode - } + }% \sseq@xsetthiscall{\@xp\string\csname#1\endcsname\IfNoValueF{#2}{\unexpanded{[#2]}}\unexpanded{#3}\IfNoValueF{#4}{\unexpanded{(#4)}}\IfNoValueF{#5}{\unexpanded{(#5)}}}% \sseq@ifintexpr{#3}{% \sseq@tempcount=\numexpr#3\relax % this is a convenient way to get rid of spaces because #3 has to be a number }{% - \sseq@error@n{d-invalid-page}{#3}\sseq@break% + \sseq@error@n{d-invalid-page}{#3}\sseq@break }% \sseq@eval{\@nx\sseq@dparsecoord{\the\sseq@tempcount}{\IfNoValueTF{#4}{\lastclass0}{\unexpanded{#4}}}{\unexpanded{#5}}} \sseq@eval{\unexpanded{\csname sseq@d@#1\endcsname{#2}}{\the\sseq@tempcount}}% @@ -1196,7 +1249,7 @@ \bgroup \sseq@eval{ \@nx\sseq@drawedge\sseq@obj{#1.source}\sseq@obj{#1.target}{differential}{% - \@xptwo\@nx\sseq@obj{#1.options} + \@nx\sseq@obj{#1.options} } } \egroup @@ -1295,7 +1348,7 @@ \endgroup } \def\sseq@structline@structline{ - \@ifundefined{sseq@structline@pagemax}{}{\sseq@error{structline-no-page-max}}% could be warning + \@ifundefined{sseq@structline@pagemax}{}{\ifnum\sseq@structline@pagemax=\sseq@infinity\else \sseq@error{structline-no-page-max}\fi}% could be warning \ifnum\sseq@pagemin<\sseq@obj{class.\source[\sseq@obj{class.\source.num}].page}\relax\else \sseq@error{structline-stillborn} \sseq@breakfi @@ -1551,6 +1604,7 @@ } \let\sseq@processlabels\sseq@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@handleclassquotes@inner#1#2{% \begingroup\pgfscope @@ -1562,6 +1616,7 @@ \sseq@theclasslabelstyle \the\sseq@scope@toks \sseq@options@normalmode + \gdef\sseqlastlabel{#2} \sseq@processoptions{class/label}{#2}% \sseq@classlabel@handler{#1}% labeltextfn is a private handler for transformations, sseq@classlabel@handler is exposed via "class label handler" \ifsseq@classlabel @@ -1570,7 +1625,7 @@ \sseq@x@addto@macro\sseq@classlabelnodes{% \@nx\sseq@drawlabel{% \sseq@maybemathswitch\unexpanded\@xp{\result}\sseq@maybemathswitch}% - {% This is setup to prevent a bug where \classoptions and class label style don't work correctly together + {% This is set up to prevent a bug where \classoptions and class label style don't work correctly together \the\sseq@sseqstyle\@nx\the\sseq@sseqstyle@page \the\sseq@labelstyle\@nx\the\sseq@labelstyle@page \the\sseq@classlabelstyle\@nx\the\sseq@classlabelstyle@page diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqmessages.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqmessages.code.tex index bfa11df4e4b..3176e81296d 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/sseqmessages.code.tex +++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqmessages.code.tex @@ -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@mit.edu -%% Date: 2017-12-10 +%% Date: 2018-10-08 %% License: Latex Project Public License %% %% File: sseqmessages.code.tex diff --git a/Master/texmf-dist/tex/latex/spectralsequences/sseqparsers.code.tex b/Master/texmf-dist/tex/latex/spectralsequences/sseqparsers.code.tex index 316d2fe27e2..fa82704b809 100644 --- a/Master/texmf-dist/tex/latex/spectralsequences/sseqparsers.code.tex +++ b/Master/texmf-dist/tex/latex/spectralsequences/sseqparsers.code.tex @@ -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@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@error so this is easy. |