CTAN Comprehensive TeX Archive Network

Directory graphics/pgf/contrib/spectralsequences


spectralsequences v1.3.3

Author: Hood Chatham Email: hood@mit.edu Date: 2023-01-28 License: All files have the Latex Project Public License. Description: Print spectral sequence diagrams using pgf/tikz.

See the file manual/spectralsequencesmanual.pdf for a manual. See the examples directory for a large number of example files. The current development copy is hosted at https://github.com/SpectralSequences/latex. Open an issue on the github issue tracker https://github.com/SpectralSequences/latex/issues/new to submit bug reports, request new features, etc.




  • Fixed compatibility with pgf/tikz 3.1.0
  • The manual was improperly truncated in v1.3.2, this has been fixed.



  • Bent edges now enter the shapes at their endpoints at the correct angle.
  • Fixed an incompatibility with versions of latex3 starting with 2022-01-12



  • Extensions now should have all of the same features as structlines. Before, a bunch of things were missing or broken.
  • Various issues with range checks for rotated figures are fixed.
  • The u argument works again in \DeclareSseqCommand in versions of Live prior to 2021.



  • Added more control over page indicator in title and "print page as" key.
  • Added page=\infty.
  • Added \extension and \extensionoptions
  • Added \replacestructlines
  • Added range check off, range check on, and range check sideways global keys to control range checks. The sideways environment from rotating environment automatically uses range check sideways (issue #11).


  • Removed \replaceclass in {sseqpage} without keep changes error (suggested by Junhou Fung).
  • Fixed \doptions and \structlineoptions so that they can be used to add an edge label – needs tikz wasn't handled correctly (reported by idlaviV)
  • Fixed title positioning when the xrange that doesn't start at 0 (reported by Robert Burklund)
  • Fixed relative tikz coordinates (reported by Dexter Chua).
  • Fixed foreach loops nested inside of plain tikz commands (e.g., \draw (0,0) foreach \x in {1,2,3} {--(\x,\x)};)
  • Fixed this page structlines (reported by Irina Bobkova)
  • Fixed fit classes to accomodate new version of \tikz@calc@anchor in tikz version 3.1.5
  • Fixed various other incompatiblities with latex3 with various versions of expl3.


  • replaceclass now pushes the class replaced onto the stack.



  • expl3 defined expafter:NNNf recently, so I changed csnew:Npn expafter:NNNf to csset:Npn expafter:NNNf and copied the definition given by expl3.
  • expl3 changed the definition of peekmeaningignorespaces to be in terms of peekmeaning so letting peekmeaning to peekmeaningignorespaces caused an infite regress.
  • expl3 changed cxparsenovaluetl to cnovaluetl, so now I try to use each of them in sequence.
  • Fixed U argument type.
  • sseqnewfamily was broken by an update to tikz that added a scantokens call to the .ecode key handler, causing issues with @.
  • If d was called without a source or target argument and was followed by a macro, d would eat the first token of the expansion of that macro causing an error.
  • Draft mode works a lot better now, though it's probably still buggy.



  • 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 csnew:Npn with a csgset:Npn.


  • sseqlastlabel



  • replacesource and replacetarget
  • copypage
  • "name handler" option
  • SseqAHSSNameHandler
  • SseqNormalizeMonomialSetVariables
  • "show name" option
  • predicates IfExistsTF, IfAliveTF, IfValidDifferentialTF, and DrawIfValidDifferentialTF
  • "quiet" environment


  • class label handlers now must output result into result
  • renamed sseqnormalizemonomial to SseqNormalizeMonomial, and now outputs into result
  • renamed sseqifempty to SseqIfEmptyTF
  • renamed sseqerrortowarning to SseqErrorToWarning
  • tooltips now disabled unless you use the package option "tooltips" to prevent extraneous auxiliary files.


  • A bug that made "y axis gap" adjust both axes and "x axis gap" do nothing (reported by Achim Krause).
  • A bug where a random definition of \ was leaked into global scope (reported by Achim Krause).
  • Now a structline defined with option page=n will not be deleted by a shorter differential.
  • A parser error that caused infinite recurse under certain conditions
  • Class names now work with commands in their name (particularly, greek letters)
  • sseq@ifintexpr no longer breaks if the expression ends in empty
  • Using sseqset to give default scaling values for xscale and yscale now works as expected.



  • Groups defined with SseqNewGroup now correctly handle arithmetic in their arguments.
  • Labels inside a node now replace each other if two are given so you can make the label change on a given page with classoptions (reported by Steve Wilson).
  • kill had a bug in it that sometimes caused it to act on the wrong page (reported by Steve Wilson).



  • sseqparseint
  • parsecoordinate and parsedifferential
  • IfInBoundsTF, IfOutOfBoundsTF
  • New loop constructs Do, DoUntilOutOfBounds, DoUntilOutOfBoundsThenNMore
  • kill which kills a class without having to put a differential
  • lastclass as default arguments for replaceclass, classoptions, d/doptions, structline/structlineoptions
  • Pin key for labels
  • Families
  • Insert key for new classes allows control over relative class placement without reordering commands
  • Draw differentials from a range of pages.
  • Frame axis type, tick marks.


  • Ticks are now placed at values congruent to tick offset mod tick step, tick offset defaults to 0
  • What was called "x axis style" is now called "x axis type".


  • The tagclass command works now.
  • Scopes now nest properly.
  • Fixed a big performance issue with nested scopes and shifts.
  • Adobe reader grid color is now correct (or more correct)
  • Fixed the grid drawing so that grids are handled correctly when the range includes negative numbers
  • The package now works with xparse after 2017/02/08 when changes were made that broke my original code
  • Fixed a bug where if you used a structline in two sseqpage environments with the same name, it would give an error.
  • Now if you say structline(0,0)(0,1) structlineoptions(0,1)(0,0) it will work correctly.
  • Big ranges like 0 - 600 now work, provided that you provide an appropriate scale
  • Big range like 600 - 700 no longer will cause an overflow
  • Labels now are rectangle nodes so they don't shift down if they are very wide
  • Fixed a bug with ranges and the sseqpage environment where classes lying outside the printed range would enlarge the range even if an explicit range was specified.
  • The chess grid works correctly now


Download the contents of this package in one zip archive (2.2M).

spectralsequences – Print spectral sequence diagrams using PGF/TikZ

The package is a specialized tool built on top of PGF/TikZ for drawing spectral sequences. It provides a powerful, concise syntax for specifying the data of a spectral sequence, and then allows the user to print various pages of spectral sequences, automatically choosing which subset of the classes, differentials, and structure lines to display on each page. It also handles most of the details of the layout.

At the same time, it is extremely flexible. spectralsequences is closely integrated with TikZ to ensure that users can take advantage of as much as possible of its expressive power. It is possible to turn off most of the automated layout features and draw replacements using TikZ commands. The package also provides a carefully designed error reporting system intended to ensure that it is as clear as possible what is going wrong.

Version1.3.3 2023-01-28
LicensesThe Project Public License
MaintainerHood Chatham
Contained inTeX Live as spectralsequences
MiKTeX as spectralsequences
TopicsPGF TikZ
Guest Book Sitemap Contact Contact Author