texlive[50758] Master/texmf-dist: pgf (4apr19)

commits+karl at tug.org commits+karl at tug.org
Thu Apr 4 22:55:45 CEST 2019


Revision: 50758
          http://tug.org/svn/texlive?view=revision&revision=50758
Author:   karl
Date:     2019-04-04 22:55:44 +0200 (Thu, 04 Apr 2019)
Log Message:
-----------
pgf (4apr19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/pgf/ChangeLog
    trunk/Master/texmf-dist/doc/generic/pgf/FILES
    trunk/Master/texmf-dist/doc/generic/pgf/README
    trunk/Master/texmf-dist/doc/generic/pgf/licenses/gnu-free-documentation-license-1.2.txt
    trunk/Master/texmf-dist/doc/generic/pgf/licenses/gnu-public-license-2.txt
    trunk/Master/texmf-dist/doc/generic/pgf/macros/pgfmanual-en-macros.tex
    trunk/Master/texmf-dist/doc/generic/pgf/pgfmanual.pdf
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-decorations.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-points.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-transparency.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-decorations.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-main-body.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-main-preamble.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-pgffor.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-coordinates.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-decorations.tex
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-Euclid.tex
    trunk/Master/texmf-dist/doc/generic/pgf/version-for-dvisvgm/en/Makefile
    trunk/Master/texmf-dist/doc/generic/pgf/version-for-dvisvgm/pgfmanual-dvisvgm.cfg
    trunk/Master/texmf-dist/doc/generic/pgf/version-for-luatex/pgfmanual-luatex.cfg
    trunk/Master/texmf-dist/doc/generic/pgf/version-for-pdftex/pgfmanual-pdftex.cfg
    trunk/Master/texmf-dist/source/generic/pgf/testsuite/external/tikzexternaltest.code.tex
    trunk/Master/texmf-dist/source/generic/pgf/testsuite/external/tikzexternaltest.sharedpreamble.tex
    trunk/Master/texmf-dist/source/generic/pgf/testsuite/mathtest/pgfmathtestsuite.tex
    trunk/Master/texmf-dist/source/generic/pgf/testsuite/mathtest/unittest_luamathparser.tex
    trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/graphs/tikzlibrarygraphs.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzexternalshared.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryangles.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarycalc.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymath.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/bindings/Binding.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/bindings/BindingToPGF.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/circular/Tantau2012.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/circular/doc.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Anchoring.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentAlign.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentDirection.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentDistance.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentOrder.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Components.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Distances.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/FineTune.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/LayoutPipeline.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/NodeAnchors.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Orientation.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Sublayouts.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/doc.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/library.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Cluster.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Edge.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Graph.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Iterators.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Node.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Vector.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/FMMMLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/FastMultipoleEmbedder.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/GEMLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/MultilevelLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderFR.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderFRExact.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderKK.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/BarycenterPlacer.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/CirclePlacer.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/EdgeCoverMerger.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/IndependentSetMerger.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/LocalBiconnectedMerger.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/MatchingMerger.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/MedianPlacer.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomMerger.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomPlacer.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarMerger.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarPlacer.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/ZeroPlacer.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/CoffmanGrahamRanking.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/FastHierarchyLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/FastSimpleHierarchyLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/GreedyCycleRemoval.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/LongestPathRanking.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/OptimalRanking.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/SiftingHeuristic.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/SugiyamaLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout/BalloonLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout/CircularLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/planarity/PlanarizationLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/planarity.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/ASCIIDisplayer.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/BindingToASCII.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleDemo.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleEdgeDemo.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleHuffman.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/library.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/GraphAnimationCoordination.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/GreedyTemporalCycleRemoval.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/Skambath2016.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/Supergraph.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/SupergraphVertexSplitOptimization.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/TimeSpec.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/doc.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/layered.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/CoarseGraph.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlCoarsening.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlDeclare.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlElectric.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlIteration.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlSprings.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlStart.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/QuadTree.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalHu2006.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalLayouts.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalWalshaw2000.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringHu2006.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringLayouts.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/FruchtermanReingold.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/HuSpringElectricalFW.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SimpleSpring.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SocialGravityCloseness.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SocialGravityDegree.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/CoarseGraphFW.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/ForceController.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/ForceTemplate.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/InitialTemplate.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/PathLengthsFW.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/Preprocessing.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/doc.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceAbsoluteValue.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceCanvasDistance.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceCanvasPosition.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceGraphDistance.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForcePullToGrid.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForcePullToPoint.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/CircularInitialPositioning.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/GridInitialPositioning.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/RandomInitialPositioning.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/library.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/library.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceCore.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToAlgorithms.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToC.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToDisplay.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/Scope.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CrossingMinimizationGansnerKNV1993.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalBergerS1990a.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalBergerS1990b.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalGansnerKNV1993.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NetworkSimplex.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodePositioningGansnerKNV1993.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodeRankingGansnerKNV1993.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodeRankingMinimumHeight.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/Ranking.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/Sugiyama.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/crossing_minimization.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/cycle_removal.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/edge_routing.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/library.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/node_positioning.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/node_ranking.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Bezier.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Direct.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Event.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/LookupTable.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/PathLengths.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/PriorityQueue.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Simplifiers.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Stack.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Storage.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Transform.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Arc.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Collection.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Coordinate.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Digraph.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Edge.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Hyperedge.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Path.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Path_arced.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Vertex.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/pedigrees/Koerner2015.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/phylogenetics/AuthorDefinedPhylogeny.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/phylogenetics/BalancedMinimumEvolution.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/phylogenetics/BalancedNearestNeighbourInterchange.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/phylogenetics/DistanceMatrix.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/phylogenetics/Maeusle2012.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/phylogenetics/PhylogeneticTree.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/phylogenetics/SokalMichener1958.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/phylogenetics/library.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/planar/BoyerMyrvold2004.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/planar/Embedding.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/planar/LinkedList.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/planar/List.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/planar/PDP.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/planar/PlanarLayout.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/planar/ShiftMethod.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/planar/parameters.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/routing/Hints.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/routing/NecklaceRouting.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/tools/make_gd_wrap.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/trees/ChildSpec.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/trees/ReingoldTilford1981.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/trees/SpanningTreeComputation.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/trees/doc.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/trees/library.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf.lua
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/tex/pgflibrarygraphdrawing.circular.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/tex/pgflibrarygraphdrawing.examples.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/tex/pgflibrarygraphdrawing.force.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/tex/pgflibrarygraphdrawing.layered.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/tex/pgflibrarygraphdrawing.trees.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorations.pathmorphing.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/libraries/decorations/pgflibrarydecorations.shapes.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/libraries/luamath/pgf/luamath/functions.lua
    trunk/Master/texmf-dist/tex/generic/pgf/libraries/luamath/pgf/luamath/parser.lua
    trunk/Master/texmf-dist/tex/generic/pgf/libraries/luamath/pgflibraryluamath.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/lua/pgf/manual/DocumentParser.lua
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmath.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathcalc.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfloat.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.base.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.basic.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.comparison.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.integerarithmetics.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.misc.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.random.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.round.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathfunctions.trigonometric.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathode.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathparser.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/math/pgfmathutil.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleanimations.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmodulebending.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduledatavisualization.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduledecorations.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmodulematrix.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmodulenonlineartransformations.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleoo.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleparser.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleplot.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmoduleshapes.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmodulesnakes.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/modules/pgfmodulesorting.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/pgf.revision.tex
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgf.cfg
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf-via-dvi.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-pdf.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-postscript.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-common-svg.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvi.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvipdfm.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvipdfmx.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvips.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-dvisvgm.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-luatex.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-pdftex.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-tex4ht.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-textures.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-vtex.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys-xetex.def
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsys.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsysanimations.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsysprotocol.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/systemlayer/pgfsyssoftpath.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfcalendar.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfexternal.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfexternalwithdepth.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfkeys.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfkeysfiltered.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfrcs.code.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfutil-common-lists.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfutil-common.tex
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfutil-context.def
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfutil-latex.def
    trunk/Master/texmf-dist/tex/generic/pgf/utilities/pgfutil-plain.def
    trunk/Master/texmf-dist/tex/latex/pgf/doc/pgfmanual.code.tex
    trunk/Master/texmf-dist/tex/latex/pgf/doc/pgfmanual.pdflinks.code.tex
    trunk/Master/texmf-dist/tex/latex/pgf/doc/pgfmanual.prettyprinter.code.tex
    trunk/Master/texmf-dist/tex/latex/pgf/frontendlayer/libraries/tikzlibraryexternal.code.tex
    trunk/Master/texmf-dist/tex/latex/pgf/utilities/pgfcalendar.sty
    trunk/Master/texmf-dist/tex/latex/pgf/utilities/tikzexternal.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-perspective.tex
    trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryperspective.code.tex

Modified: trunk/Master/texmf-dist/doc/generic/pgf/ChangeLog
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/ChangeLog	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/ChangeLog	2019-04-04 20:55:44 UTC (rev 50758)
@@ -1,3321 +1,3449 @@
+2019-04-04 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
+
+    - Release 3.1.2!
+
+2019-04-04 Henri Menke
+
+    - Update README
+
+2019-04-03 Henri Menke
+
+    - Fix #523 (jkinable)
+
+2019-04-03 Henri Menke
+
+    - Fix #522 (kpymtzanev)
+
+2019-04-02 Henri Menke
+
+    - Welcome to GitHub :octocat:
+
+2019-03-13 Max Snippe
+
+    - Renaming perspective library macros
+
+2019-03-13 Max Snippe
+
+    - Fixed typo and missing backslash
+
+2019-03-11 Henri Menke
+
+    - Correct copyright statement
+
+2019-03-08 Max Snippe
+
+    - Added perspective library
+
+2019-03-06 Henri Menke
+
+    - Fix TeX conditionals on \pgfmathdeclarefunction (Eric Domenjoud) Feature Request #121
+
+2019-02-28 Henri Menke
+
+    - More accurate \pgfpointnormalised #518 #519 Feature #96
+
+2019-02-22 Henri Menke
+
+    - tikzmath needs to know about fpu
+
+2019-02-20 Henri Menke
+
+    - Fix shading angle #516 (Eric Domenjoud)
+
+2019-02-14 Henri Menke
+
+    - Fix trivial typo #514
+
+2019-02-08 Henri Menke
+
+    - Missed ligature suppression for dvisvgm #473
+
+2019-02-08 Henri Menke
+
+    - Now I hopefully got all of the ligatures #473
+
+2019-02-05 Henri Menke
+
+    - Some fixes for the shading patch #511 (Eric Domenjoud)
+
+2019-02-05 Henri Menke
+
+    - \long\def
+
+2019-02-05 Henri Menke
+
+    - Fake \scantokens has to at least strip braces
+
+2019-02-05 Henri Menke
+
+    - Only use \scantokens if available #508
+
+2019-02-04 Henri Menke
+
+    - Revert "Revert "Patch for shadings #511 (Eric Domenjoud)""
+
+2019-02-04 Henri Menke
+
+    - Revert "Patch for shadings #511 (Eric Domenjoud)"
+
+2019-02-04 Henri Menke
+
+    - Making the declared coordinate accessible
+
+2019-02-04 Henri Menke
+
+    - Globally remember declare coordinate of a node
+
+2019-02-04 Henri Menke
+
+    - Check for \pgfpointxyz before \rawx, \rawy, \rawz
+
+2019-02-04 Henri Menke
+
+    - Add \rawx, \rawy, \rawz to let operation
+
+2019-02-04 Henri Menke
+
+    - Disable strict nesting for now
+
+2019-02-04 Henri Menke
+
+    - Patch for shadings #511 (Eric Domenjoud)
+
+2019-02-03 Stefan Pinnow
+
+    - - minor stuff
+
+2019-02-02 Christian Feuersaenger
+
+    - Merge branch 'master' of ssh://git.code.sf.net/p/pgf/git
+
+2019-02-02 Christian Feuersaenger
+
+    - Merge branch 'branch_3.1_hotfix'
+
+2019-02-02 Christian Feuersaenger
+
+    - updated release file
+
 2019-02-02 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- Release 3.1.1!
 
+    - Release 3.1.1!
+
 2019-02-01 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- fixed bug #503: regression prevented the use of dvips. This reverts the
-	bugfix for bug 362
+    
+    - fixed bug #503: regression prevented the use of dvips. This reverts the
+    bugfix for bug #362
 
 2019-01-05 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- Release 3.1!
+    
+    - Release 3.1!
 
 2018-12-28 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- \pgfmathprintnumber: implemented 'retain unit mantissa=true|false' (feature #92)
+    - \pgfmathprintnumber: implemented 'retain unit mantissa=true|false' (feature #92)
 
 2018-12-30 Henri Menke
 
-	- fixed wrong projection of `canvas is xy plane at z` in `3d` library (bug #410)
-	- added documentation of `3d` library to the manual (support request #11)
-	- defined CMYK colors for ConTeXt (feature request #33)
-	- `text along path` decoration repeated last char multiple times when 
-	  this was in math mode (bug #479)
+    - fixed wrong projection of `canvas is xy plane at z` in `3d` library (bug #410)
+    - added documentation of `3d` library to the manual (support request #11)
+    - defined CMYK colors for ConTeXt (feature request #33)
+    - `text along path` decoration repeated last char multiple times when 
+      this was in math mode (bug #479)
 
 2018-12-29 Henri Menke
 
-	- fixed accidental usage of `\rm` (bug #476)
+    - fixed accidental usage of `\rm` (bug #476)
 
 2018-12-28 Henri Menke
 
-	- fixed newlines for tex4ht (bug #327)
-	- fixed bug that `fit` didn't work with `transform shape` (bug #330)
-	- fill color in nodes now respects colormodel (bug #349)
-	- fixed broken VTeX support (bug #350)
-	- `text=<color>` now works fine when in the nodes' text `\textcolor` is used (bug #362)
+    - fixed newlines for tex4ht (bug #327)
+    - fixed bug that `fit` didn't work with `transform shape` (bug #330)
+    - fill color in nodes now respects colormodel (bug #349)
+    - fixed broken VTeX support (bug #350)
+    - `text=<color>` now works fine when in the nodes' text `\textcolor` is used (bug #362)
 
 2018-12-26 Henri Menke
 
-	- allowed whitespace between layers in `\pgfsetlayers` (bug #376)
+    - allowed whitespace between layers in `\pgfsetlayers` (bug #376)
 
 2018-12-25 Henri Menke
 
-	- fixed `\method` which can now contain empty lines (bug #448)
-	- manual improvement regarding `pgfoothis` (bug #452)
-	- documented commands `\pgfooeset`, `\pgfooappend`, `\pgfooprefix` (bug #452)
+    - fixed `\method` which can now contain empty lines (bug #448)
+    - manual improvement regarding `pgfoothis` (bug #452)
+    - documented commands `\pgfooeset`, `\pgfooappend`, `\pgfooprefix` (bug #452)
 
 2018-12-24 Henri Menke
 
-	- fixed bug in \pgfkeysedef (bug #306)
-	- `miter limit` now raises an error when a value < 1 is given (bug #347)
-	- fixed bug that `\pgfmathmax` and `pgfmathmin` were broken when
-	  `fixedpointarithmetic` library was loaded (bug #360)
-	- added missing function `\pgfmathpneg` in `fixedpointarithmetic` library (bug #361)
-	- fixed bug that brace decorations were malformed for large amplitudes (bug #351)
-	- made node parser aware of prefix and suffix (bug #397)
+    - fixed bug in \pgfkeysedef (bug #306)
+    - `miter limit` now raises an error when a value < 1 is given (bug #347)
+    - fixed bug that `\pgfmathmax` and `pgfmathmin` were broken when
+      `fixedpointarithmetic` library was loaded (bug #360)
+    - added missing function `\pgfmathpneg` in `fixedpointarithmetic` library (bug #361)
+    - fixed bug that brace decorations were malformed for large amplitudes (bug #351)
+    - made node parser aware of prefix and suffix (bug #397)
 
 2018-12-23 Henri Menke
 
-	- (almost) fixed guillemets for LuaTeX (bug #473)
+    - (almost) fixed guillemets for LuaTeX (bug #473)
 
 2018-12-21 Henri Menke
 
-	- fixed incorrect spelling in pgflibrarydecorations.text (bug #479)
-	  (but this doesn't solve the bug 100%)
-	- fixed 'bend left' bug if used with a formula (bug #423)
-	- use \typeout stream instead of \write16 (bug #488)
-	- fixed some bugs regarding graphdrawing electrical "springs" (bugs #380 and #381)
+    - fixed incorrect spelling in pgflibrarydecorations.text (bug #479)
+      (but this doesn't solve the bug 100%)
+    - fixed 'bend left' bug if used with a formula (bug #423)
+    - use \typeout stream instead of \write16 (bug #488)
+    - fixed some bugs regarding graphdrawing electrical "springs" (bugs #380 and #381)
 
-	2018-12-20 Henri Menke
+    2018-12-20 Henri Menke
 
-	- fixed pgf_lookup_and_require for new luaotfload (bug #493)
-	- fixed graphdrawing for ConTeXt (bug #477)
+    - fixed pgf_lookup_and_require for new luaotfload (bug #493)
+    - fixed graphdrawing for ConTeXt (bug #477)
 
 2018-04-30 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- added utility \pgfmathifexpression (and special treatment in luamath
-	library and	fpu library)
+    - added utility \pgfmathifexpression (and special treatment in luamath
+    library and fpu library)
 
 2017-11-14 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- intersections lib: improved accuracy of intersections for linear paths
+    - intersections lib: improved accuracy of intersections for linear paths
 
 2017-02-08 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed incompatibility issue of tikzmath and fpu reported in 
-		http://tex.stackexchange.com/questions/349766/pgfplots-on-tikzmath-function-with-conditionals-returns-an-error
+    - fixed incompatibility issue of tikzmath and fpu reported in 
+        http://tex.stackexchange.com/questions/349766/pgfplots-on-tikzmath-function-with-conditionals-returns-an-error
 
 2016-12-31 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- Improved driver detection (bug #395 TikZ does not create output with LuaTeX 0.95.0)
-	- New luatex driver now supports fallback to pdftex driver if
-	luatexversion is older than 95 (let's hope this works reliably - luatex
-	used to have version 240 some time ago!)
+    - Improved driver detection (bug #395 TikZ does not create output with LuaTeX 0.95.0)
+    - New luatex driver now supports fallback to pdftex driver if
+    luatexversion is older than 95 (let's hope this works reliably - luatex
+    used to have version 240 some time ago!)
 
 2016-08-10 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bugs that caused pgfsys-dvips.def to generate corrupt
-	PostScript for all nodes.
+    - Fixed bugs that caused pgfsys-dvips.def to generate corrupt
+    PostScript for all nodes.
 
 2016-07-16 Till Tantau <tantau at users.sourceforge.net>
 
-	- Bounding box computations for animations implemented.
-	- Animated arrow tips are now possible.
+    - Bounding box computations for animations implemented.
+    - Animated arrow tips are now possible.
 
 2016-07-13 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed incompatibility between textpos (absolute mode) and external
+    - fixed incompatibility between textpos (absolute mode) and external
 
 2016-06-17 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed \write18 issues in luatex 0.87 and later (by using os.execute())
-	  affects external lib and plot function.
+    - fixed \write18 issues in luatex 0.87 and later (by using os.execute())
+      affects external lib and plot function.
 
 2016-03-31 Till Tantau <tantau at users.sourceforge.net>
 
-	- Lots of bugfixes in animation and svg code.
-	- Added optimizations to reduce file size for svg code
-	  (better support by dvisvgm will be needed however for more
-	  compact text!).
+    - Lots of bugfixes in animation and svg code.
+    - Added optimizations to reduce file size for svg code
+      (better support by dvisvgm will be needed however for more
+      compact text!).
 
 2016-03-18 Till Tantau <tantau at users.sourceforge.net>
 
-	- First working, fully documented version of TikZ animations!
+    - First working, fully documented version of TikZ animations!
 
 2016-02-24 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed manual stuff to compile it with dvisvgm.
+    - Fixed manual stuff to compile it with dvisvgm.
 
 2016-02-02 Till Tantau <tantau at users.sourceforge.net>
 
-	- Rewrote tikz animation lib.
+    - Rewrote tikz animation lib.
 
 2016-01-06 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- added context-related aux file fix of Hans Hagen
+    - added context-related aux file fix of Hans Hagen
 
 2016-01-02 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed save stack issues (eliminated 'retaining' issues) about pgf at x and pgf at y
+    - fixed save stack issues (eliminated 'retaining' issues) about pgf at x and pgf at y
 
 2015-12-29 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- external lib: 'force remake' now also updates .md5 files
+    - external lib: 'force remake' now also updates .md5 files
 
 2015-11-28 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fpu: fixed floor and ceil
-	- fixed basic layer floor function
-	- lua library: improved interoperability of luamath and fpu
-	- unit test now compares luamath, fpu, and pgfbasic math
+    - fpu: fixed floor and ceil
+    - fixed basic layer floor function
+    - lua library: improved interoperability of luamath and fpu
+    - unit test now compares luamath, fpu, and pgfbasic math
 
 2015-11-15 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- activated math parser in foreach's end notation to allow \foreach \i in {0,...,10-9}
+    - activated math parser in foreach's end notation to allow \foreach \i in {0,...,10-9}
 
 2015-09-09 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on pgfsys-dvisvgm.def a lot. Now requires
-	dvisvgm-1.5.3 because of switch from pt to bp there. Does
-	correct bounding box computations.
+    - Worked on pgfsys-dvisvgm.def a lot. Now requires
+    dvisvgm-1.5.3 because of switch from pt to bp there. Does
+    correct bounding box computations.
 
 2015-09-06 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed bug in luamath library
+    - fixed bug in luamath library
 
 2015-08-29 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- external lib: added support to automatically externalize references and
-	labels with 'mode=convert with system call'
+    - external lib: added support to automatically externalize references and
+    labels with 'mode=convert with system call'
 
 2015-08-24 Till Tantau <tantau at users.sourceforge.net>
 
-	- Reworked implementation of animations for tikz and started
-	on documentation of the backend.
+    - Reworked implementation of animations for tikz and started
+    on documentation of the backend.
 
 2015-08-20 Till Tantau <tantau at users.sourceforge.net>
 
-	- First complete implementation of animations for tikz! (for
-	svg backend). Documentation still missing, but works nicely.
+    - First complete implementation of animations for tikz! (for
+    svg backend). Documentation still missing, but works nicely.
 
 2015-08-13 Till Tantau <tantau at users.sourceforge.net>
 
-	- First work on animations for svg. Added commands in pgfsys
-	and added module pgfmoduleanimations. No documnetation yet.
+    - First work on animations for svg. Added commands in pgfsys
+    and added module pgfmoduleanimations. No documnetation yet.
 
 2015-08-07 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- Release 3.0.1!
+    - Release 3.0.1!
 
 2015-08-03 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed regression introduced for pgf 3.0.0 (bug #149): leading empty
-	lines at the beginning of plot files disabled '-- plot'
-	- fixed bug #291 (missing white space trimming in node labels)
-	- fixed bug #313 (alias option did not respect name prefix/suffix)
-	- fixed bug #341 ("is in pic" was not reset)
-	- fixed bug #365 (caused by missing adoption after copy-paste in tikzlibraryfolding)
-	- fixed bug #315/316 by applying the suggested patch and verifying it
+    - fixed regression introduced for pgf 3.0.0 (bug #149): leading empty
+    lines at the beginning of plot files disabled '-- plot'
+    - fixed bug #291 (missing white space trimming in node labels)
+    - fixed bug #313 (alias option did not respect name prefix/suffix)
+    - fixed bug #341 ("is in pic" was not reset)
+    - fixed bug #365 (caused by missing adoption after copy-paste in tikzlibraryfolding)
+    - fixed bug #315/316 by applying the suggested patch and verifying it
 
 2015-06-12 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed fpu math functions for int, ceil, and floor
-	- added \pgfmathlogtwo and \pgfmathlogten as requested in bug #359
+    - fixed fpu math functions for int, ceil, and floor
+    - added \pgfmathlogtwo and \pgfmathlogten as requested in bug #359
 
 
 2015-06-06 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed problem in gd: Creating more than about 15 vertices
-	inside a graph drawing algorithm was impossible since this
-	created too many text input levels. Reorganized the interplay
-	between tex and lua for the coroutine so that no input levels
-	are created.
+    - Fixed problem in gd: Creating more than about 15 vertices
+    inside a graph drawing algorithm was impossible since this
+    created too many text input levels. Reorganized the interplay
+    between tex and lua for the coroutine so that no input levels
+    are created.
 
 2015-06-05 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added number nodes option to graph lib.
+    - Added number nodes option to graph lib.
 
 2015-05-18 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed nullfont warnings in axes in datavisualization.
-	- Fixed wrong axes for school book plots.
+    - Fixed nullfont warnings in axes in datavisualization.
+    - Fixed wrong axes for school book plots.
 
 2015-05-15 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed nullfont warnings when parsing logic gate inputs.
+    - Fixed nullfont warnings when parsing logic gate inputs.
 
 2015-05-08 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug in tikz.code.tex concerning colors for arrow tips:
-	Setting and restoring the global color "trackers"
-	pgf at fillcolor@global over groups was done only in \pgfscope,
-	but not in the scopes opened and closed by tikz when drawing a
-	path (\pgfsys at beginscope is used there). This caused wrong
-	colors to be used.
+    - Fixed bug in tikz.code.tex concerning colors for arrow tips:
+    Setting and restoring the global color "trackers"
+    pgf at fillcolor@global over groups was done only in \pgfscope,
+    but not in the scopes opened and closed by tikz when drawing a
+    path (\pgfsys at beginscope is used there). This caused wrong
+    colors to be used.
 
 2015-05-08 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Updated patterns.meta library.
+    - Updated patterns.meta library.
 
 2015-05-02 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- context: committed patch to adopt pgfutil-context for new (incompatible)
-	context handling of colors -- contains some cleanup by Hans Hagen.
+    - context: committed patch to adopt pgfutil-context for new (incompatible)
+    context handling of colors -- contains some cleanup by Hans Hagen.
 
 2015-03-28 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed bug in external lib: braces in external filenames confused the generator
+    - fixed bug in external lib: braces in external filenames confused the generator
 
 2015-01-02 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed bug in fpu: equal(x, 0) failed for x<0
+    - fixed bug in fpu: equal(x, 0) failed for x<0
 
 2014-12-30 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed bug in atan2 (returned wrong sign for atan2(4e-5,-5))
-	- implemented atan2 in FPU
+    - fixed bug in atan2 (returned wrong sign for atan2(4e-5,-5))
+    - implemented atan2 in FPU
 
 2014-11-02 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed save stack issue (TeX capacity exceeded, sorry [save size=250000])
-	if the color changes a _huge_ number of times during a single path.
+    - fixed save stack issue (TeX capacity exceeded, sorry [save size=250000])
+    if the color changes a _huge_ number of times during a single path.
 
 2014-10-11 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- worked on LUA math parser: ensured that a suitable first scope of
-	functions works. I also added support for 'declare function'
+    - worked on LUA math parser: ensured that a suitable first scope of
+    functions works. I also added support for 'declare function'
 
 2014-10-11 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added provisional code for patterns.meta library. Patterns
+    - Added provisional code for patterns.meta library. Patterns
         can now be declared using TikZ code with additional support
         for tile transformations. Currently only PDF output supported
-	at back-end (uses \pgfsys at declarepattern@meta in pgfsys-pdftex.def).
+    at back-end (uses \pgfsys at declarepattern@meta in pgfsys-pdftex.def).
 
 2014-08-04 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- finished first prototype of a LUA math parser. It is orders of magnitude
-	faster than its TeX pendant, features a pure LUA mode and also offers a
-	fallback to the TeX \pgfmathparse for unsupported operations/functions
-	only defined in TeX.
+    - finished first prototype of a LUA math parser. It is orders of magnitude
+    faster than its TeX pendant, features a pure LUA mode and also offers a
+    fallback to the TeX \pgfmathparse for unsupported operations/functions
+    only defined in TeX.
 
 2014-07-09 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed bug (regression of bug #229): external lib with dvips produced
-	wrong bounding box (was broken entirely)
+    - fixed bug (regression of bug #229): external lib with dvips produced
+    wrong bounding box (was broken entirely)
 
 2014-07-08 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed regression in external lib: 'mode=graphics if exists' broke any
-	undefined label warnigns
-	- added automatic "fast lane" to math parser: if the input is a number
-	without units, it will return that as-is. Reduces typesetting time down to
-	66% for huge scatter plots and has just 1% overhead for math intensive
-	figures.
+    - fixed regression in external lib: 'mode=graphics if exists' broke any
+    undefined label warnigns
+    - added automatic "fast lane" to math parser: if the input is a number
+    without units, it will return that as-is. Reduces typesetting time down to
+    66% for huge scatter plots and has just 1% overhead for math intensive
+    figures.
 
 2014-06-22 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- added switch 'trig format=deg|rad' which allows to switch sin,cos,tan,
-	and their friends to radians. It works for all user input
-	arguments - I hope without unanticipated side-effects (marked as
-	experimental)
+    - added switch 'trig format=deg|rad' which allows to switch sin,cos,tan,
+    and their friends to radians. It works for all user input
+    arguments - I hope without unanticipated side-effects (marked as
+    experimental)
 
 2014-05-17 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- external lib: defined suitable defaults for 'system call' depending on driver
-	- external lib: solved incompatibility with biblatex's \cite[][]{name}
-	command	(http://tex.stackexchange.com/questions/173465/tikz-error-for-externalized-graphics-but-output-is-correct}
-	- number parser/printer: added switch 'read comma as period' to read
-	localized input numbers. Off by default but added useful hint to parser
-	message.
+    - external lib: defined suitable defaults for 'system call' depending on driver
+    - external lib: solved incompatibility with biblatex's \cite[][]{name}
+    command    (http://tex.stackexchange.com/questions/173465/tikz-error-for-externalized-graphics-but-output-is-correct}
+    - number parser/printer: added switch 'read comma as period' to read
+    localized input numbers. Off by default but added useful hint to parser
+    message.
 
 2014-05-06 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- Fixed bug #308 fixedpointarithmetic: unwanted spaces by line ends 
+    - Fixed bug #308 fixedpointarithmetic: unwanted spaces by line ends 
 
 2014-03-30 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- Fixed feature #81: signum function (fpu + pgf basic layer)
+    - Fixed feature #81: signum function (fpu + pgf basic layer)
 
 2014-03-24 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed all \begin{scope} and \end{scope} in foldings lib,
-	changed them to \scope and \endscope.
+    - Fixed all \begin{scope} and \end{scope} in foldings lib,
+    changed them to \scope and \endscope.
 
 2014-03-21 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed #303 Type in pgfmanual (colormixin)
-	- Fixed #302 pgf-3.0: Cannot plot a constant function. Will
-	now center the constant line.
-	- Addressed #299 Precision problem with explicitily anchored
-	labels: While not a bug, I added a "centered" option for cases
-	similar to this one (although, in this particular case, the
-	new centered option is not what is needed)...
-	- Fixed #298 \pgfarrowsdeclare is still mentioned in pgfmanual
-	- Fixed #294 Nodes for arcs, which angles are calculated
-	simultaneously.
-	- Fixed #292 "node scale and outer sep" by introducing the new
-	option "outer sep=auto", which takes care of both this problem
-	(at least in all normal cases) and also of the draw versus
-	fill problem with outer seps.
+    - Fixed #303 Type in pgfmanual (colormixin)
+    - Fixed #302 pgf-3.0: Cannot plot a constant function. Will
+    now center the constant line.
+    - Addressed #299 Precision problem with explicitily anchored
+    labels: While not a bug, I added a "centered" option for cases
+    similar to this one (although, in this particular case, the
+    new centered option is not what is needed)...
+    - Fixed #298 \pgfarrowsdeclare is still mentioned in pgfmanual
+    - Fixed #294 Nodes for arcs, which angles are calculated
+    simultaneously.
+    - Fixed #292 "node scale and outer sep" by introducing the new
+    option "outer sep=auto", which takes care of both this problem
+    (at least in all normal cases) and also of the draw versus
+    fill problem with outer seps.
 
 2014-03-20 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed #285 \tikz at intersect@namedpaths persists outside
-	scopes as suggested.
-	- Fixed #284 Additional rerun statement for overlays (for LyX)
-	by adding the proposed solution (essentially).
-	- Added post-fix for #288 by undoing all -- ligatures in
-	verbatim code.
+    - Fixed #285 \tikz at intersect@namedpaths persists outside
+    scopes as suggested.
+    - Fixed #284 Additional rerun statement for overlays (for LyX)
+    by adding the proposed solution (essentially).
+    - Added post-fix for #288 by undoing all -- ligatures in
+    verbatim code.
 
 2014-03-19 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fxied #283 "Is there a smarter way to handle units in math
-	engine?" by adding the "scalar" function.
-	- Fixed #288 "All the '£' should be '$' in the examples of
-	pgfmanual..." by switching to T1 enconding.
-	- Fixed #282 "\pgfmathredeclarefunction does not work properly."
+    - Fxied #283 "Is there a smarter way to handle units in math
+    engine?" by adding the "scalar" function.
+    - Fixed #288 "All the '£' should be '$' in the examples of
+    pgfmanual..." by switching to T1 enconding.
+    - Fixed #282 "\pgfmathredeclarefunction does not work properly."
 
 2014-02-24 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added first edge routing algorithm to gd.
-	
+    - Added first edge routing algorithm to gd.
+    
 2014-02-02 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- intersections libs: improved robustness and accuracy for curveto paths
-	by using the floating point library together with Mark Wibrow. 
+    
+    - intersections libs: improved robustness and accuracy for curveto paths
+    by using the floating point library together with Mark Wibrow. 
 
 2014-01-08 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed bug in latex/plain tex shipout routines for xdvipdfmx and xelatex:
-	combination of shadings	and standalone package failed to work.
+    - fixed bug in latex/plain tex shipout routines for xdvipdfmx and xelatex:
+    combination of shadings    and standalone package failed to work.
 
 2013-12-31 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fix for 'rotate around x/y/z' keys which now evaluate
-	  the argument provided.
-	  
+    - Fix for 'rotate around x/y/z' keys which now evaluate
+      the argument provided.
+      
 2013-12-25 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- intersections lib: detected duplicates in line-to intersections
-	in endpoints and suppressed them.
-	- intersections lib: stored time offset for each intersections as optional
-	property (i.e. if it comes for free). This is required to compute fill
-	paths
+    - intersections lib: detected duplicates in line-to intersections
+    in endpoints and suppressed them.
+    - intersections lib: stored time offset for each intersections as optional
+    property (i.e. if it comes for free). This is required to compute fill
+    paths
 
 2013-12-20 Till Tantau <tantau at users.sourceforge.net>
 
-	- Release 3.0.0!	
+    - Release 3.0.0!    
 
 2013-12-20 Till Tantau <tantau at users.sourceforge.net>
 
-	- In preparation for the release 3.0.0, I pimped the manual a
-	  bit. It will now automatically detect whether graph drawing
-	  C libs are available or not. Also, syntax hilighting is now
-	  always switched on. I also some subtle optical hints to
-	  crossreferenced words in the code examples; this is pretty
-	  useful, I think. 
-	- Did a lot of cleaning up for the release.
-	
+    - In preparation for the release 3.0.0, I pimped the manual a
+      bit. It will now automatically detect whether graph drawing
+      C libs are available or not. Also, syntax hilighting is now
+      always switched on. I also some subtle optical hints to
+      crossreferenced words in the code examples; this is pretty
+      useful, I think. 
+    - Did a lot of cleaning up for the release.
+    
 2013-12-18 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed a bug in Vertex.lua that returned wrong anchor
-	  positions for non-centered vertices.
-	
+    - Fixed a bug in Vertex.lua that returned wrong anchor
+      positions for non-centered vertices.
+    
 2013-12-13 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug #280 "Layered layout" produces unknown key with graphs library.
-	- Fixed bug #279 "Some parts of arguments in foreach macro are lost".
-	- Fixed bug #258 "Default arrow edge style puts circumflex in
-	  drawn end node" by now allowing people to say tip=on proper draw.
-	
+    - Fixed bug #280 "Layered layout" produces unknown key with graphs library.
+    - Fixed bug #279 "Some parts of arguments in foreach macro are lost".
+    - Fixed bug #258 "Default arrow edge style puts circumflex in
+      drawn end node" by now allowing people to say tip=on proper draw.
+    
 2013-12-08 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- intersections lib: ensured that 'name path global' is reset between main paths.
+    - intersections lib: ensured that 'name path global' is reset between main paths.
 
 2013-11-30 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- worked on intersections lib (internals only); added O(N) list
-	append/prepend utilities
+    - worked on intersections lib (internals only); added O(N) list
+    append/prepend utilities
 
 2013-11-18 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added keys 'rotate around x', 'rotate around y' and
-	'rotate around z' to rotate the xyz coordinate system
-	around the x, y, or z axis.
-	
+    - Added keys 'rotate around x', 'rotate around y' and
+    'rotate around z' to rotate the xyz coordinate system
+    around the x, y, or z axis.
+    
 2013-11-17 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixes for 'text effects along path' decoration and docs.
+    - Fixes for 'text effects along path' decoration and docs.
 
 2013-11-16 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- external lib: added support for 'up to date check=md5' for lualatex.
-	  Now, lualatex and pdftex both result in the same checksums (by means of
-	  \usepackage{pdftexcmds})
+    - external lib: added support for 'up to date check=md5' for lualatex.
+      Now, lualatex and pdftex both result in the same checksums (by means of
+      \usepackage{pdftexcmds})
 
 2013-11-16 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Finalised 'text effects along path' decoration and docs.
-	  
+    - Finalised 'text effects along path' decoration and docs.
+      
 2013-11-11 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Changed keyval example (and references to define at key) 
-	  in pgfcalendar documentation to pgfkeys stuff.
+    - Changed keyval example (and references to define at key) 
+      in pgfcalendar documentation to pgfkeys stuff.
 
 2013-11-08 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Minor fixes to decorations.text and math libraries documentation
-	
+    - Minor fixes to decorations.text and math libraries documentation
+    
 2013-11-07 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added 'text effects along path' decoration. 
+    - Added 'text effects along path' decoration. 
 
 2013-11-01 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- Fixed regression/bug in 'name path global'.
+    - Fixed regression/bug in 'name path global'.
 
 2013-10-31 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Applied path for bug #277 "\beforeforegroundpath not working".
-	
+    
+    - Applied path for bug #277 "\beforeforegroundpath not working".
+    
 2013-10-09 Till Tantau <tantau at users.sourceforge.net>
 
-	- Prepared manual for new release (fixed overful boxes and
-	  index problems).
-	
+    - Prepared manual for new release (fixed overful boxes and
+      index problems).
+    
 2013-10-08 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Updated math library (minor fixes).
+    - Updated math library (minor fixes).
 
 2013-10-07 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Applied some fixes so that C code for graph drawing works
-	  once more.
-	- Arrow tips and their doc are now officially finished!
-	- Added documentation of nonlinear transformations. 
-	
+    
+    - Applied some fixes so that C code for graph drawing works
+      once more.
+    - Arrow tips and their doc are now officially finished!
+    - Added documentation of nonlinear transformations. 
+    
 2013-10-06 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- modified release script to allow uploads of unstable TDS
-	  zips to http://pgf.sourceforge.net using
-	  make -f pgf/scripts/pgf/Makefile.pgf_release upload USER=cfeuersaenger
+    - modified release script to allow uploads of unstable TDS
+      zips to http://pgf.sourceforge.net using
+      make -f pgf/scripts/pgf/Makefile.pgf_release upload USER=cfeuersaenger
 
 2013-10-02 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed problem with math parser inserting extraneous
-	  spaces when parsing \dimenexpr
-	  
+    - Fixed problem with math parser inserting extraneous
+      spaces when parsing \dimenexpr
+      
 2013-09-30 Till Tantau <tantau at users.sourceforge.net>
 
-	- Changed blend mode syntax to standard pgf syntax (since PDF
-	  and SVG do not agree on names...).
-	- Added scale and slant options for arrow tips.
-	- Added more generic arrow tips.
-	
+    - Changed blend mode syntax to standard pgf syntax (since PDF
+      and SVG do not agree on names...).
+    - Added scale and slant options for arrow tips.
+    - Added more generic arrow tips.
+    
 2013-09-24 Till Tantau <tantau at users.sourceforge.net>
-	
-	- First version of comlete arrow documentation finished. Still
-	  need to document the arrows.meta library, though.
-	- Added "tips" option for drawing arrow tips without drawing
-	  paths.
-	
+    
+    - First version of comlete arrow documentation finished. Still
+      need to document the arrows.meta library, though.
+    - Added "tips" option for drawing arrow tips without drawing
+      paths.
+    
 2013-09-23 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed bug #273 "Graph drawing sublayouts fails".
-	- Incorporated first partial documentation of the arrow tips
-	  into the main documentation.
-	- Fixed bug bugs:#272 "SVG parser error after close path" as
-	  suggested by Mark Wibrow.
-	- Also changed the default syntax for svg path command so that
-	  it uses braces instead of quotation marks. (Quotation marks
-	  still work, of course.)
+    
+    - Fixed bug #273 "Graph drawing sublayouts fails".
+    - Incorporated first partial documentation of the arrow tips
+      into the main documentation.
+    - Fixed bug bugs:#272 "SVG parser error after close path" as
+      suggested by Mark Wibrow.
+    - Also changed the default syntax for svg path command so that
+      it uses braces instead of quotation marks. (Quotation marks
+      still work, of course.)
 
 2013-09-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Started working on arrow doc.
-	
+    - Started working on arrow doc.
+    
 2013-09-20 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added macro to convert string of digits to comma separated list.
-	
+    - Added macro to convert string of digits to comma separated list.
+    
 2013-09-18 Till Tantau <tantau at users.sourceforge.net>
 
-	- First version of new arrow tip management done. Up and
-	  running! Still needs documentation and the old arrow tip
-	  codes should (but need not) be ported.
-	- Did some porting of old code, added fixes. Doc still missing.
-	
+    - First version of new arrow tip management done. Up and
+      running! Still needs documentation and the old arrow tip
+      codes should (but need not) be ported.
+    - Did some porting of old code, added fixes. Doc still missing.
+    
 2013-09-17 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug #264: "\pgfkeys /errors/unknown key should (?) expand first argument"
-	- Fixed bug #268: "`matrix of nodes' isn't working properly any more"
-	
+    - Fixed bug #264: "\pgfkeys /errors/unknown key should (?) expand first argument"
+    - Fixed bug #268: "`matrix of nodes' isn't working properly any more"
+    
 2013-09-11 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Corrected typos (bug #266 and bug #265)
+    - Corrected typos (bug #266 and bug #265)
 
 2013-09-11 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- added magnetic tape shape.
+    - added magnetic tape shape.
 
 2013-09-09 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug #262/267: "Line breaks are not working in labels anyy more."
-	- Fixed bug #260: "TikZ node on background in pgfextra"
-	- Started work on bending arrows.
-	
+    - Fixed bug #262/267: "Line breaks are not working in labels anyy more."
+    - Fixed bug #260: "TikZ node on background in pgfextra"
+    - Started work on bending arrows.
+    
 2013-09-05 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- external lib: fixed bug: file dependency handling was incorrect and
-	suffered from regression caused by MD5 checks
+    - external lib: fixed bug: file dependency handling was incorrect and
+    suffered from regression caused by MD5 checks
 
 2013-08-31 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- repaired incompatibility with pgfplots <= 1.8: samples key was
-	evaluated in context of floating point unit and new pgf code relied on dimension
-	registers.
+    - repaired incompatibility with pgfplots <= 1.8: samples key was
+    evaluated in context of floating point unit and new pgf code relied on dimension
+    registers.
 
 2013-08-29 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added "turn" key.
-	
+    - Added "turn" key.
+    
 2013-08-28 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added "angle" pic type and "angles" library.
-	- Patched gd loader code so that it works with context mark IV.
-	
+    - Added "angle" pic type and "angles" library.
+    - Patched gd loader code so that it works with context mark IV.
+    
 2013-08-27 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added new pic path command.
-	- Patched pgfsys-dvipdfmx.def to step around the bug in
-	(x)dvipdfmx that caused scaled boxes (including scaled
-	graphics) inside nodes to be displayed incorrectly.
-	
+    - Added new pic path command.
+    - Patched pgfsys-dvipdfmx.def to step around the bug in
+    (x)dvipdfmx that caused scaled boxes (including scaled
+    graphics) inside nodes to be displayed incorrectly.
+    
 2013-08-24 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- fixed bug in fpu: 0^0 and 0^x both produced nan. Now we get
-	  0^0=1 and 0^x = 0.
+    
+    - fixed bug in fpu: 0^0 and 0^x both produced nan. Now we get
+      0^0=1 and 0^x = 0.
 
 2013-08-22 Till Tantau <tantua at users.sourceforge.net>
 
-	- Removed claims from manual (not by me...) that TikZ does not
-	  work with Mark IV of context. I just tried it and everything
-	  I tried (including advanced stuff like shadings) worked fine.
-	
+    - Removed claims from manual (not by me...) that TikZ does not
+      work with Mark IV of context. I just tried it and everything
+      I tried (including advanced stuff like shadings) worked fine.
+    
 2013-08-18 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed pgf intersection library to ensure that
-	  specialround tokens are processed.
+    - Fixed pgf intersection library to ensure that
+      specialround tokens are processed.
 
 2013-08-06 Till Tantau <tantua at users.sourceforge.net>
 
-	- Added support for dvisvgm. Quite nice...
-	
+    - Added support for dvisvgm. Quite nice...
+    
 2013-08-05 Till Tantau <tantua at users.sourceforge.net>
 
-	- Worked on tex4ht code. Works reasonably well know and even
-	  graph drawing is possible (when luatex is used for
-	  typesetting; for this I needed to fix some latin1 characters in
-	  html4.4ht). Also, I renamed /tikz/tex4ht... to /pgf/tex4ht
-	  (someone else added that) since tikz has nothing to do with
-	  that stuff. 
-	  Typesetting the manual in tex4ht no longer works, but that seems
-	  like too much bother for my taste. 
+    - Worked on tex4ht code. Works reasonably well know and even
+      graph drawing is possible (when luatex is used for
+      typesetting; for this I needed to fix some latin1 characters in
+      html4.4ht). Also, I renamed /tikz/tex4ht... to /pgf/tex4ht
+      (someone else added that) since tikz has nothing to do with
+      that stuff. 
+      Typesetting the manual in tex4ht no longer works, but that seems
+      like too much bother for my taste. 
 
 2013-08-02 Till Tantau <tantua at users.sourceforge.net>
 
-	- Fixed bug #256 "The special \pgfcoordinate macro doesn't
-	expand \pgfpictureid." 
+    - Fixed bug #256 "The special \pgfcoordinate macro doesn't
+    expand \pgfpictureid." 
 
 2013-08-04 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- external lib: fixed incompatibility of pdflscape with
-	external lib
+    
+    - external lib: fixed incompatibility of pdflscape with
+    external lib
 
 2013-08-01 Till Tantau <tantua at users.sourceforge.net>
 
-	- Fixed a problem with pdf resources of transparency groups in
-	dvipdfmx. 
-	
+    - Fixed a problem with pdf resources of transparency groups in
+    dvipdfmx. 
+    
 2013-07-31 Till Tantau <tantua at users.sourceforge.net>
 
-	- Fixed bug #149 "/tikz/raw gnuplot ignoring segmented plot"
-	  by introducing a new way of handling plot streams. There are
-	  now new kinds of points (outliers and undefined points) and
-	  "new data sets" commands inside streams. Handlers (like the
-	  lineto and curve handlers) can be configured to interpret
-	  these as jumps (this is the default).  
-	- Fixed bug #255 "Trig computations offend fp via fixedpointarithmetic lib"
-	
+    - Fixed bug #149 "/tikz/raw gnuplot ignoring segmented plot"
+      by introducing a new way of handling plot streams. There are
+      now new kinds of points (outliers and undefined points) and
+      "new data sets" commands inside streams. Handlers (like the
+      lineto and curve handlers) can be configured to interpret
+      these as jumps (this is the default).  
+    - Fixed bug #255 "Trig computations offend fp via fixedpointarithmetic lib"
+    
 2013-07-31 Mark Wibrow <vibrovski at users.sourceforge.net>
-	- Added "math" library. Could be integrated with calc library.
-	
+    - Added "math" library. Could be integrated with calc library.
+    
 2013-07-26 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- Fixed bug in external lib: mode=list and make did not cope well with
-	\ref in externalized images. These will be remade now.
+    - Fixed bug in external lib: mode=list and make did not cope well with
+    \ref in externalized images. These will be remade now.
 
 2013-07-24 Till Tantau <tantua at users.sourceforge.net>
 
-	- Fixed bug #162 "PGF manual examples use undefined "shape example" style"
-	- Fixed bug #169 "ghostscript error: /undefined in pgfo"
-	- Concerning bug #167 "node pin option sets
-	  inconsistent/incorrect angle" I added some clarification in
-	  the manual that explains the observed behaviour.
-	- Fixed bug #158 "\pgfmathparse does not support e-TeXs
-	  \numexpr and \dimexpr". You can now also use
-	  \pgfmathsetlength to assign a muskip a value. Internally,
-	  "mu" is treated like "pt", but if an expression contains
-	  "mu", \pgfmathsetlength and \pgfmathaddtolength will convert
-	  the number to "mu" before the assignment.
-	
+    - Fixed bug #162 "PGF manual examples use undefined "shape example" style"
+    - Fixed bug #169 "ghostscript error: /undefined in pgfo"
+    - Concerning bug #167 "node pin option sets
+      inconsistent/incorrect angle" I added some clarification in
+      the manual that explains the observed behaviour.
+    - Fixed bug #158 "\pgfmathparse does not support e-TeXs
+      \numexpr and \dimexpr". You can now also use
+      \pgfmathsetlength to assign a muskip a value. Internally,
+      "mu" is treated like "pt", but if an expression contains
+      "mu", \pgfmathsetlength and \pgfmathaddtolength will convert
+      the number to "mu" before the assignment.
+    
 2013-07-22 Till Tantau <tantua at users.sourceforge.net>
 
-	- Fixed bug #173 "Tikz's transparency, xelatex and preview
-	  package" by adding a specific fix for the interaction
-	  between preview.sty and everyshi.sty in pgfutil-latex.def.
+    - Fixed bug #173 "Tikz's transparency, xelatex and preview
+      package" by adding a specific fix for the interaction
+      between preview.sty and everyshi.sty in pgfutil-latex.def.
 
 2013-07-19 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- optimized mark=* and mark=o (q path versions lead to 10% time reduction)
-	- adopted new pgfkeys feature to /handler config/full or existing (
-	  required when /.search also is used to find the correct key path)
+    
+    - optimized mark=* and mark=o (q path versions lead to 10% time reduction)
+    - adopted new pgfkeys feature to /handler config/full or existing (
+      required when /.search also is used to find the correct key path)
 
 2013-07-19 Till Tantau <tantua at users.sourceforge.net>
 
-	- Fixed bug #175 "In PGF oo module, calling a method strips grouping"
-	- Fixed bug #181 "Need to document |- coordinates using calc notation"
-	- Fixed bug #187 "\pgfmathanglebetweenpoints is not documented"
-	- Increased accuracy of atan, atan2 and
-	  \pgfmathanglebetweenpoints. 	
+    - Fixed bug #175 "In PGF oo module, calling a method strips grouping"
+    - Fixed bug #181 "Need to document |- coordinates using calc notation"
+    - Fixed bug #187 "\pgfmathanglebetweenpoints is not documented"
+    - Increased accuracy of atan, atan2 and
+      \pgfmathanglebetweenpoints.     
 
 2013-07-18 Till Tantau <tantua at users.sourceforge.net>
 
-	- Fixed bug "#168 PGF is sensitive to dollar catcode"
-	- Fixed bug "#186 pgfonlayer makes pgf forget options" and
-	  added "every on background layer" option.
-	- Fixed bug "#192 pgffor scope iteration is buggy"
-	- Fixed bug "#196 Incoherent syntax for Bézier curves"
-	- Fixed bug "#199 Drawing error for chamfered rectangle"
-	- Fixed bug "#201 Markings fail with "Dimension too Large" on
-	  certain paths" by fixing a mistake and the decoration core
-	  and, additionally, in pgfmathanglebetweenpoints.
-	- Fixed bug "#254 building currenct CVS version fails on
-	  graphdrawing with current luatex": Will now work nicely with
-	  TeXLive 2013 and Lua 5.2.
-	- Added feature request "bug #203 Blending modes and better transparency"
-	
+    - Fixed bug "#168 PGF is sensitive to dollar catcode"
+    - Fixed bug "#186 pgfonlayer makes pgf forget options" and
+      added "every on background layer" option.
+    - Fixed bug "#192 pgffor scope iteration is buggy"
+    - Fixed bug "#196 Incoherent syntax for Bézier curves"
+    - Fixed bug "#199 Drawing error for chamfered rectangle"
+    - Fixed bug "#201 Markings fail with "Dimension too Large" on
+      certain paths" by fixing a mistake and the decoration core
+      and, additionally, in pgfmathanglebetweenpoints.
+    - Fixed bug "#254 building currenct CVS version fails on
+      graphdrawing with current luatex": Will now work nicely with
+      TeXLive 2013 and Lua 5.2.
+    - Added feature request "bug #203 Blending modes and better transparency"
+    
 2013-07-17 Till Tantau <tantua at users.sourceforge.net>
-	
-	- Fixed bug #204 "strange influence of \baselinestretch on
-	  tikz figure" by no longer sharing \pgfutil at tempa with latex:
-	  This register gets changed by LaTeX in a fontchange, which, in
-	  turn can happen at the beginning of every
-	  \pgfmathsetlength. 
-	- Fixed bug #207 "Decoration markings not on path on large
-	  lines" by using a more precise computation of positions on
-	  straight lines in decorations. Also, the angle computation
-	  is now much more precise by fixedin bug #201.
-	- Fixed bug #212 "Error if using plot into a \foreach loop in
-	  a single path" by making \pgffor at beginhook and friends local
-	  to the current \foreach. A nice side-effect is that one can
-	  now nest \foreach statements on a path and also mix in the
-	  plots. Hopefully, no one relied on the (undocumented,
-	  unsupported) old bevahiour of the hooks.
-	- Fixed bug #213 "pgfmathsetcounter only works in local scope"
-	  by adding a note in the documentation.
-	- Fixed bug #211 "\nodepart ignores text transparency"
-	- Fixed bug #220 "Transformations ignored in edge decoration."
-	- Fixed bug #221 "xyz spherical and cylindrical coordinate, radius not defined"
-	- Fixed bug #225 "pgfkeys "/errors/unknown choice value" ignores parameters"
-	- Fixed bug #253 "\pgfkeysfiltered cannot accept long arguments"
-	- Fixed bug #252 "I'm not able to build the current CVS
-	version". This included a number of patches to fix problems
-	introduced with the bugfixes introduced recently
-	
+    
+    - Fixed bug #204 "strange influence of \baselinestretch on
+      tikz figure" by no longer sharing \pgfutil at tempa with latex:
+      This register gets changed by LaTeX in a fontchange, which, in
+      turn can happen at the beginning of every
+      \pgfmathsetlength. 
+    - Fixed bug #207 "Decoration markings not on path on large
+      lines" by using a more precise computation of positions on
+      straight lines in decorations. Also, the angle computation
+      is now much more precise by fixedin bug #201.
+    - Fixed bug #212 "Error if using plot into a \foreach loop in
+      a single path" by making \pgffor at beginhook and friends local
+      to the current \foreach. A nice side-effect is that one can
+      now nest \foreach statements on a path and also mix in the
+      plots. Hopefully, no one relied on the (undocumented,
+      unsupported) old bevahiour of the hooks.
+    - Fixed bug #213 "pgfmathsetcounter only works in local scope"
+      by adding a note in the documentation.
+    - Fixed bug #211 "\nodepart ignores text transparency"
+    - Fixed bug #220 "Transformations ignored in edge decoration."
+    - Fixed bug #221 "xyz spherical and cylindrical coordinate, radius not defined"
+    - Fixed bug #225 "pgfkeys "/errors/unknown choice value" ignores parameters"
+    - Fixed bug #253 "\pgfkeysfiltered cannot accept long arguments"
+    - Fixed bug #252 "I'm not able to build the current CVS
+    version". This included a number of patches to fix problems
+    introduced with the bugfixes introduced recently
+    
 2013-07-16 Till Tantau <tantua at users.sourceforge.net>
-	
-	- Fixed bug #226 "matrix column sep=-\pgflinewidth changes after empty cell"
-	- Fixed bug #229 "pgfpagesuselayout breaks beamer class"
-	  (hopefully, setting page sizes is really messy in TeX!).
-	- Fixed bug #232 "pow function broken for 0^x for non-integer values of x"
-	- Fixed bug #165 "\draw with empty domain results in infinite calculation"
-	- Added better error message to adress bug #244 "mindmap-style
-	"invalidates" coordinate shape."
-	- Fixed bug #235 "\def\costhirty{0.8660256} not really used"
-	
+    
+    - Fixed bug #226 "matrix column sep=-\pgflinewidth changes after empty cell"
+    - Fixed bug #229 "pgfpagesuselayout breaks beamer class"
+      (hopefully, setting page sizes is really messy in TeX!).
+    - Fixed bug #232 "pow function broken for 0^x for non-integer values of x"
+    - Fixed bug #165 "\draw with empty domain results in infinite calculation"
+    - Added better error message to adress bug #244 "mindmap-style
+    "invalidates" coordinate shape."
+    - Fixed bug #235 "\def\costhirty{0.8660256} not really used"
+    
 2013-07-15 Till Tantau <tantua at users.sourceforge.net>
-	
-	- Fixed bug "#237 CVS-version: pdfimage error: key interpolate undefined"
-	- Fixed bug "#245 broken key /pgf/decoration/reset marks"
-	- Fixed bug "#239 picture disappear after a zero-width rectangle width shading"
-	- Fixed bug "#247 Error messages hard to catch in plain TeX/ConTeXt"
-	- Fixed bug "#166 Possibly typos in circuits.logic.IEC"
-	- Fixed bug "#249 pgfkeys: /handlers/first char syntax is not
-	'self-contained' (CVS version)" 
-	- Fixed bug "#248 circuits adjustable annotation improperly placed"
-	
+    
+    - Fixed bug "#237 CVS-version: pdfimage error: key interpolate undefined"
+    - Fixed bug "#245 broken key /pgf/decoration/reset marks"
+    - Fixed bug "#239 picture disappear after a zero-width rectangle width shading"
+    - Fixed bug "#247 Error messages hard to catch in plain TeX/ConTeXt"
+    - Fixed bug "#166 Possibly typos in circuits.logic.IEC"
+    - Fixed bug "#249 pgfkeys: /handlers/first char syntax is not
+    'self-contained' (CVS version)" 
+    - Fixed bug "#248 circuits adjustable annotation improperly placed"
+    
 2013-07-13 Till Tantau <tantua at users.sourceforge.net>
-	
-	- Fixed bug "#250 pgfkyes: .append style and similar undouble # tokens"
-	- Fixed bug "#143 label changes center of a matrix node"
+    
+    - Fixed bug "#250 pgfkyes: .append style and similar undouble # tokens"
+    - Fixed bug "#143 label changes center of a matrix node"
 
 2013-07-12 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed bug #128 "fit does not scale if used in scaled scope"
-	- Fixed bug #136 "\hrulefill inherits or not pgf line styles"
-	- Fixed bug #224 "Including Tikzpicture in third part of
-	  multipart node" 
+    
+    - Fixed bug #128 "fit does not scale if used in scaled scope"
+    - Fixed bug #136 "\hrulefill inherits or not pgf line styles"
+    - Fixed bug #224 "Including Tikzpicture in third part of
+      multipart node" 
 
 2013-07-11 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed bug #251 "cross out shape interacts with path options of path it is drawn on"
-	- Fixed bug #139 "Placement of node inside matix environment"
-	- Fixed bug #131 "text centering calculates wrong" and added
-	  new "node font" option.
-	- Fixed bug #121 "Annoying "Underfull \hbox (badness 10000)" message"
-	- Fixed bug #134 "Edge node style affecting arrowhead".
-	
+    
+    - Fixed bug #251 "cross out shape interacts with path options of path it is drawn on"
+    - Fixed bug #139 "Placement of node inside matix environment"
+    - Fixed bug #131 "text centering calculates wrong" and added
+      new "node font" option.
+    - Fixed bug #121 "Annoying "Underfull \hbox (badness 10000)" message"
+    - Fixed bug #134 "Edge node style affecting arrowhead".
+    
 2013-07-08 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed bug #132 "Error in matrix with column sep "between"
-	origins"	
-	- Fixed bug #133 "\draw[-<<,>=stealth] (10,45) -- (40,45); does
-	not work." However, this introduces a (small, only visual)
-	incompatibility with previous versions. If you need the visual
-	effect "-<<" used to have (which, in a sense, was wrong), use
-	"-< <" instead. The new "-> >" is also quite handy.
-	
+    
+    - Fixed bug #132 "Error in matrix with column sep "between"
+    origins"    
+    - Fixed bug #133 "\draw[-<<,>=stealth] (10,45) -- (40,45); does
+    not work." However, this introduces a (small, only visual)
+    incompatibility with previous versions. If you need the visual
+    effect "-<<" used to have (which, in a sense, was wrong), use
+    "-< <" instead. The new "-> >" is also quite handy.
+    
 2013-06-28 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug #116 "Decorations can't be repositioned when
-	  pre/post used."
-	
+    - Fixed bug #116 "Decorations can't be repositioned when
+      pre/post used."
+    
 2013-06-25 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed bug #241 "div/null error by (270:length) and a fading line."
-	- Fixed bug #126 "Incorrect placed labels for inplicite positioned nodes."
-	- Added foreach syntax to nodes. This is useful and also
-	  needed to fix the problem that the foreach statement cannot
-	  be used after a to path.
-	
+    
+    - Fixed bug #241 "div/null error by (270:length) and a fading line."
+    - Fixed bug #126 "Incorrect placed labels for inplicite positioned nodes."
+    - Added foreach syntax to nodes. This is useful and also
+      needed to fix the problem that the foreach statement cannot
+      be used after a to path.
+    
 2013-06-24 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed bug #18 and #74 (active characters and tikz) by virtue
-	  of the new "babel" library, which deactivates catcodes at the
-	  beginning of tikz pictures and reactivates them in nodes.
-	
+    
+    - Fixed bug #18 and #74 (active characters and tikz) by virtue
+      of the new "babel" library, which deactivates catcodes at the
+      beginning of tikz pictures and reactivates them in nodes.
+    
 2013-06-21 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug #110 "cannot add node after cycle operation"
-	- Fixed bug #88 "\pgftransformarrow does not rotate with \pgfpointanchor"
-	- Fixed bug #86 "macro-expanded tree node has bad edge anchor"
-	- Fixed bug #85 "PGF + Crop package, at least for pdftex."
-	
+    - Fixed bug #110 "cannot add node after cycle operation"
+    - Fixed bug #88 "\pgftransformarrow does not rotate with \pgfpointanchor"
+    - Fixed bug #86 "macro-expanded tree node has bad edge anchor"
+    - Fixed bug #85 "PGF + Crop package, at least for pdftex."
+    
 2013-06-20 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed bug #83 "Transparency Problem with \usepackage{endfloat}."
-	- Applied patch #19 pgfkeys: ".search also" fails at unbalanced "\if" values
-	- Applied patch #18 Missing grid lines with
-	  negative increment
-	- Applied patch #17 TikZ folding library
-	- Applied patch #14 inheritance in the oo module
-	- Applied patch #13 leaking space in \pgfpointintersectionoflines
-	- Applied patch #11 Patch for Bug #3165961 (\pgfmathmax and \pgfmathmin)
-	- Fixed problem of patch #9 Add papersize to XeTeX driver
-	- Applied patch #8 Support for changing physical page size with XeTeX
-	  (also added position saving support, while I was at it...)
-	- Applied patches #3, #4, #5, #6 (typos in manual) as far as possible
-	
+    
+    - Fixed bug #83 "Transparency Problem with \usepackage{endfloat}."
+    - Applied patch #19 pgfkeys: ".search also" fails at unbalanced "\if" values
+    - Applied patch #18 Missing grid lines with
+      negative increment
+    - Applied patch #17 TikZ folding library
+    - Applied patch #14 inheritance in the oo module
+    - Applied patch #13 leaking space in \pgfpointintersectionoflines
+    - Applied patch #11 Patch for Bug #3165961 (\pgfmathmax and \pgfmathmin)
+    - Fixed problem of patch #9 Add papersize to XeTeX driver
+    - Applied patch #8 Support for changing physical page size with XeTeX
+      (also added position saving support, while I was at it...)
+    - Applied patches #3, #4, #5, #6 (typos in manual) as far as possible
+    
 2013-06-18 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed bug #236 "Scaled closed paths, start/end points dont exactly match":
-	  "cycle" can now be used with all path operations where it
-	  makes sense, not only with --. In particular, things like
-	  ".. cycle" or "to [bend right] cycle" are now allowed.
+    
+    - Fixed bug #236 "Scaled closed paths, start/end points dont exactly match":
+      "cycle" can now be used with all path operations where it
+      makes sense, not only with --. In particular, things like
+      ".. cycle" or "to [bend right] cycle" are now allowed.
 
 2013-05-23 Till Tantau <tantau at users.sourceforge.net>
 
-	- Reworked handling of edge and vertex paths in gd. In
-	  particular, edge--vertex intersections are now computed in
-	  Lua, rather than in TikZ. This is much more powerful and
-	  allows beautiful arcs between vertices. It is also very
-	  useful for planar graph drawings when several edges leave a
-	  vertex in the same direction.
-	
+    - Reworked handling of edge and vertex paths in gd. In
+      particular, edge--vertex intersections are now computed in
+      Lua, rather than in TikZ. This is much more powerful and
+      allows beautiful arcs between vertices. It is also very
+      useful for planar graph drawings when several edges leave a
+      vertex in the same direction.
+    
 2013-04-08 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Did away with luadoc, now using simple handcoded documentor
-	that will also work with Lua 5.2
-	- Redid OGDF support. Resonably stable base now.
-	- Added better C support.
-	- Should now work with both Lua 5.1 and 5.2
-	
+    
+    - Did away with luadoc, now using simple handcoded documentor
+    that will also work with Lua 5.2
+    - Redid OGDF support. Resonably stable base now.
+    - Added better C support.
+    - Should now work with both Lua 5.1 and 5.2
+    
 2013-03-15 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- fixed incompatibility of fixltx2e and external lib
+    - fixed incompatibility of fixltx2e and external lib
 
 2013-02-08 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Reworked Storage mechanism of graph drawing system.
-	- Added phylogenetics library for graph drawing; documentation
-	still only rudimentary.
-	
+    
+    - Reworked Storage mechanism of graph drawing system.
+    - Added phylogenetics library for graph drawing; documentation
+    still only rudimentary.
+    
 2012-12-30 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Started adding support for calling C graph drawing functions
-	from Lua.
-	- First proof of concept for OGDF finished.
-	- Must still address luatex shared library link problems.
+    
+    - Started adding support for calling C graph drawing functions
+    from Lua.
+    - First proof of concept for OGDF finished.
+    - Must still address luatex shared library link problems.
 
 2012-12-25 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- fixed bug in external lib: \tikzexternalgetnextfilename did reset the
-	value of \tikzsetnextfilename and 'export next'
+    
+    - fixed bug in external lib: \tikzexternalgetnextfilename did reset the
+    value of \tikzsetnextfilename and 'export next'
 
 2012-11-30 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- updated driver pgfsys-xetex: now, it supports all that the new driver
-	for dvipdfmx does which includes fadings, functional shadings, and
-	patterns.
+    - updated driver pgfsys-xetex: now, it supports all that the new driver
+    for dvipdfmx does which includes fadings, functional shadings, and
+    patterns.
 
 2012-11-30 Till Tantau <tantau at users.sourceforge.net>
-	
-	- First complete documentation of the graph drawing
-	system. (Finally!) 
-	
+    
+    - First complete documentation of the graph drawing
+    system. (Finally!) 
+    
 2012-11-27 Till Tantau <tantau at users.sourceforge.net>
 
-	- Renamed gd files to shorter versions: instead of
-	pgf/gd/model/pgf.gd.model.Edges.lua we now have
-	pgf/gd/model/Edge.lua and so on.
-	- Worked on gd documentation. Only binding doc is still a
-	mess.
-	
+    - Renamed gd files to shorter versions: instead of
+    pgf/gd/model/pgf.gd.model.Edges.lua we now have
+    pgf/gd/model/Edge.lua and so on.
+    - Worked on gd documentation. Only binding doc is still a
+    mess.
+    
 2012-11-26 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on gd documentation.
-	
+    - Worked on gd documentation.
+    
 2012-11-21 Till Tantau <tantau at users.sourceforge.net>
-	
-	- New version of gd lib. The internals have been completely
-	redone. In particular, no tikz libraries are needed for the
-	individual algorithms any longer, all declarations are now
-	done completely inside Lua. This makes gd usable (in
-	principle) independently of tikz and pgf.
-	- Because of this, all declarations of algorithms need to be
-	redone. 
+    
+    - New version of gd lib. The internals have been completely
+    redone. In particular, no tikz libraries are needed for the
+    individual algorithms any longer, all declarations are now
+    done completely inside Lua. This makes gd usable (in
+    principle) independently of tikz and pgf.
+    - Because of this, all declarations of algorithms need to be
+    redone. 
 
 2012-11-10 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	
-	- external lib: fixed spurious white space (caused by 'up to date check')
+    
+    - external lib: fixed spurious white space (caused by 'up to date check')
 
 2012-11-01 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- manual styles: improved robustness of auto cross references & active spaces
+    - manual styles: improved robustness of auto cross references & active spaces
 
 2012-10-18 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Fixed a bug with active colon in circuits lib. Probably more to
-	fix in other libraries.
-	
+    - Fixed a bug with active colon in circuits lib. Probably more to
+    fix in other libraries.
+    
 2012-10-11 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
 
-	- Improved precision of math functions asin and acos (using linear
-	interpolation instead of constant interpolation)
+    - Improved precision of math functions asin and acos (using linear
+    interpolation instead of constant interpolation)
 
 2012-09-27 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on gd.
-	
+    - Worked on gd.
+    
 2012-09-26 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	- fixed pgfsys-pdftex.def : very old regression with \setbeamercovered{transparent}	and \pause
-	Patch by Hendrik Vogt
+    - fixed pgfsys-pdftex.def : very old regression with \setbeamercovered{transparent}    and \pause
+    Patch by Hendrik Vogt
 
 2012-08-29 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added support for sublayouts in gd (not yet fully
-	documented). This allows one to use several algorithms inside
-	a single graph.
-	
+    - Added support for sublayouts in gd (not yet fully
+    documented). This allows one to use several algorithms inside
+    a single graph.
+    
 2012-06-28 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Redone handling of clusters in gd yet again. Renamed them to
-	"collections". Much better system now, can handle hyperedges,
-	subgraphs and other stuff (in principle).
-	- Nodes generated by a gd algorithm now have correct size
-	information (this one was tricky!).
-	
+    
+    - Redone handling of clusters in gd yet again. Renamed them to
+    "collections". Much better system now, can handle hyperedges,
+    subgraphs and other stuff (in principle).
+    - Nodes generated by a gd algorithm now have correct size
+    information (this one was tricky!).
+    
 2012-06-22 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Redone handling of clusters in gd.
-	- Worked on gd documentation.
+    
+    - Redone handling of clusters in gd.
+    - Worked on gd documentation.
 
 2012-06-18 Christian Feuersaenger <cfeuersaenger at users.sourceforge.net>
-	- fixed minor expansion issue \foreach \x in {a,...,d} lead to unexpanded value \x
-	
+    - fixed minor expansion issue \foreach \x in {a,...,d} lead to unexpanded value \x
+    
 2012-06-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- externalization: added special switch to deactivate incompatible
-	geometry drivers during externalization 
+    - externalization: added special switch to deactivate incompatible
+    geometry drivers during externalization 
 
 2012-05-31 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Redone pgf.gd.model.Arc
-	- Added documentation for said class.
-	
+    
+    - Redone pgf.gd.model.Arc
+    - Added documentation for said class.
+    
 2012-05-23 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on gd documentation.
-	- Replaced old luadoc by customized version. Gets called
-	directly from tex.
-	
+    - Worked on gd documentation.
+    - Replaced old luadoc by customized version. Gets called
+    directly from tex.
+    
 2012-05-17 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- external lib: added support for MD5/diff based up-to-date checks.
-	Changes to a picture will automatically result in a remake of the
-	respective external graphics.
+    
+    - external lib: added support for MD5/diff based up-to-date checks.
+    Changes to a picture will automatically result in a remake of the
+    respective external graphics.
 
 2012-05-03 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Fix bug #3527068 (\pgfmathatantwo did not exist)
+    - Fix bug #3527068 (\pgfmathatantwo did not exist)
 
 2012-05-14 Till Tantau <tantau at users.sourceforge.net>
 
-	- Changed pgf.gd.new_graph_drawing_algorithm syntax. Not
-	  likely to change again...
-	- Added support for algorithms to create nodes and edge in the
-	  syntactic digraph.
-	- Introduced library graphdrawing.examples that includes some
-	  code demonstrating how "things are done".
+    - Changed pgf.gd.new_graph_drawing_algorithm syntax. Not
+      likely to change again...
+    - Added support for algorithms to create nodes and edge in the
+      syntactic digraph.
+    - Introduced library graphdrawing.examples that includes some
+      code demonstrating how "things are done".
 
 
 2012-05-13 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- context: fixed catcode issues by means of suitable module
-	\protect/\unprotect statements. 
+    - context: fixed catcode issues by means of suitable module
+    \protect/\unprotect statements. 
 
 2012-05-06 Till Tantau <tantau at users.sourceforge.net>
 
-	- Introduced a new class model for graph drawing (Digraph,
-	  Arc, and Vertex instead of Graph, Edge, Node). I'm currently
-	  porting all the old code, but it takes a while and it's a
-	  bit messy right now. Some easy algorithms are already based
-	  on the new system, old ones not. In the end, things should
-	  be significantly faster and also easier to program.
+    - Introduced a new class model for graph drawing (Digraph,
+      Arc, and Vertex instead of Graph, Edge, Node). I'm currently
+      porting all the old code, but it takes a while and it's a
+      bit messy right now. Some easy algorithms are already based
+      on the new system, old ones not. In the end, things should
+      be significantly faster and also easier to program.
 
 2012-05-03 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Attempt to fix bug in calc lib when '!' or ':' are active (not
-	  fully tested but should work).
+    - Attempt to fix bug in calc lib when '!' or ':' are active (not
+      fully tested but should work).
 
 2012-05-02 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Attempt to fix bug with label and pin when ':' is active (not
-	  fully tested but should work).
+    - Attempt to fix bug with label and pin when ':' is active (not
+      fully tested but should work).
 
 2012-04-19 Till Tantau <tantau at users.sourceforge.net>
 
-	- Finished the first two chapters of the documentation of gd
- 	  (overview and tikz usage).
-	- Module system is now redone and the directory structure
-	  has been reorganized. No more messing around with lua
-	  modules, everything is perfectly portable now.
-	
+    - Finished the first two chapters of the documentation of gd
+       (overview and tikz usage).
+    - Module system is now redone and the directory structure
+      has been reorganized. No more messing around with lua
+      modules, everything is perfectly portable now.
+    
 2012-04-17 Till Tantau <tantau at users.sourceforge.net>
 
-	- Started to completely redo the module system of graph
-	  drawing in lua. I'm in the middle of it, so its currently
-	  messy, but it works.
-	
+    - Started to completely redo the module system of graph
+      drawing in lua. I'm in the middle of it, so its currently
+      messy, but it works.
+    
 2012-04-12 Till Tantau <tantau at users.sourceforge.net>
 
-	- Implemented packing procedure for graph drawing.
-	- Cleaned up graph drawing source some more.
-	- Renamed lots of files (still not happy with it, though).
+    - Implemented packing procedure for graph drawing.
+    - Cleaned up graph drawing source some more.
+    - Renamed lots of files (still not happy with it, though).
 
 2012-04-11 Till Tantau <tantau at users.sourceforge.net>
 
-	- Implemented Reingold-Tilford tree layout.
+    - Implemented Reingold-Tilford tree layout.
 
 2012-04-05 Till Tantau <tantau at users.sourceforge.net>
 
-	- Implemented my first graph drawing algorithm: circular layout.
+    - Implemented my first graph drawing algorithm: circular layout.
 
 2012-04-03 Till Tantau <tantau at users.sourceforge.net>
 
-	- Introduced new declaration mechanism for graph drawing
-	  algorithm classes
-	- Implemented preprocessing step of decomposing a graph into
-	  connected components.
-	
+    - Introduced new declaration mechanism for graph drawing
+      algorithm classes
+    - Implemented preprocessing step of decomposing a graph into
+      connected components.
+    
 2012-04-02 Till Tantau <tantau at users.sourceforge.net>
 
-	- Cleaned up graph drawing algorithm directories: Moved
-	obsolete algorithms to special directory.
-	- Switched graph drawing calling interface from function-base
-	to object-based: All graph drawing algorithms must now be
-	implemented in a class
-	- Cleaned up file and class names of graph drawing engine. 
+    - Cleaned up graph drawing algorithm directories: Moved
+    obsolete algorithms to special directory.
+    - Switched graph drawing calling interface from function-base
+    to object-based: All graph drawing algorithms must now be
+    implemented in a class
+    - Cleaned up file and class names of graph drawing engine. 
 
 2012-03-30 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed problem that in case math library is loaded before pgf
-	some math functions were broken (because \pgfmath at xa and
-	\pgf at xa were different registers, which they should not be).
-	
+    - Fixed problem that in case math library is loaded before pgf
+    some math functions were broken (because \pgfmath at xa and
+    \pgf at xa were different registers, which they should not be).
+    
 2012-03-29 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added anchoring and orientation to graph drawing library. 
-	
+    - Added anchoring and orientation to graph drawing library. 
+    
 2012-03-21 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added arrows.spaced library.
-	- Added quotation syntax to graph lib.
-	- Renamed some graph drawing layouts.
-	- Worked on documentation of graph drawing lib.
+    - Added arrows.spaced library.
+    - Added quotation syntax to graph lib.
+    - Renamed some graph drawing layouts.
+    - Worked on documentation of graph drawing lib.
 
 2012-03-07 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Moved wrappers for luatex primitives (\pgfutil at directlua,
-	\pgfutil at ifluatex, \pgfutil at luaescapestring) to pgfutil-common.tex
-	- Added support for luatex to the profiler library by emulating
-	\pdfelapsedtime.
+    - Moved wrappers for luatex primitives (\pgfutil at directlua,
+    \pgfutil at ifluatex, \pgfutil at luaescapestring) to pgfutil-common.tex
+    - Added support for luatex to the profiler library by emulating
+    \pdfelapsedtime.
 
 2012-02-27 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed wrong edef in graph lib that broke the /-syntax when
-	  text contained expandable stuff.
-	
+    - Fixed wrong edef in graph lib that broke the /-syntax when
+      text contained expandable stuff.
+    
 2012-02-21 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- More work on the luamath parser and evaluator.
+    - More work on the luamath parser and evaluator.
 
 2012-01-24 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Fix a bug in tikz polar coordinates (reported on tex.se
-	http://tex.stackexchange.com/questions/41828/using-math-in-tikz):
-	braces around a delimited argument are removed.
+    - Fix a bug in tikz polar coordinates (reported on tex.se
+    http://tex.stackexchange.com/questions/41828/using-math-in-tikz):
+    braces around a delimited argument are removed.
 
 2012-01-10 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Fix a bug in pgfmath != operator (reported and fixed on tex.se
-	http://tex.stackexchange.com/questions/40605/using-in-pgfmathparse)
+    - Fix a bug in pgfmath != operator (reported and fixed on tex.se
+    http://tex.stackexchange.com/questions/40605/using-in-pgfmathparse)
 
 2012-01-09 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Fix a pgfmath dependency for pgffor.
+    - Fix a pgfmath dependency for pgffor.
 
 2012-01-03 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added pos support to the arc command (finally...).
-	- Added support to the graph library for drawing tries.
-	- Added support to the graph library for adding edge labels in
-	  an easier way.
+    - Added pos support to the arc command (finally...).
+    - Added support to the graph library for drawing tries.
+    - Added support to the graph library for adding edge labels in
+      an easier way.
 
 2011-12-29 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added the 'fixed relative' number formatting style.
+    - Added the 'fixed relative' number formatting style.
 
 2011-12-28 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- Added 'const plot mark mid' and 'jump mark mid' plot handlers.
+    
+    - Added 'const plot mark mid' and 'jump mark mid' plot handlers.
 
 2011-12-02 Till Tantau <tantau at users.sourceforge.net>
 
-	- Renamed "layered drawing" to "layered layout" for
-	consistency. 
+    - Renamed "layered drawing" to "layered layout" for
+    consistency. 
 
 2011-11-12 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- More work on the lua math parser and evaluator.
-	- Added wrappers for luatex primitives: \pgfutil at directlua,
-	\pgfutil at ifluatex, \pgfutil at luaescapestring
-	- Make lua code more lua 5.2 compatible
+    - More work on the lua math parser and evaluator.
+    - Added wrappers for luatex primitives: \pgfutil at directlua,
+    \pgfutil at ifluatex, \pgfutil at luaescapestring
+    - Make lua code more lua 5.2 compatible
 
 2011-11-11 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Work on the lua math parser and evaluator. Begin to merge Mark's
-	code with mine.
+    - Work on the lua math parser and evaluator. Begin to merge Mark's
+    code with mine.
 
 2011-11-03 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- added FPU support for ==, !=, <=, >=, ?
+    
+    - added FPU support for ==, !=, <=, >=, ?
 
 2011-10-29 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed problem with pgf number printer: it introduced spurious spaces
-	tracker id 3430171. Thanks to Clemens Koppensteiner for the bugfix.
+    - fixed problem with pgf number printer: it introduced spurious spaces
+    tracker id 3430171. Thanks to Clemens Koppensteiner for the bugfix.
 
 2011-09-25 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- \pgfsetlayers can now be given inside of a pgfpicture (or tikzpicture)
+    - \pgfsetlayers can now be given inside of a pgfpicture (or tikzpicture)
 
 2011-06-22 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- The lua math parser now works on basic expressions (no units, no
-	arrays, no strings, no functions, ...?).
+    - The lua math parser now works on basic expressions (no units, no
+    arrays, no strings, no functions, ...?).
 
 2011-06-02 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Some work on a lua (lpeg based) math parser.
+    - Some work on a lua (lpeg based) math parser.
 
 2011-05-31 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Added a gnuplot call key to pgfmoduleplot.code.tex (feature
-	request #3308340).
+    - Added a gnuplot call key to pgfmoduleplot.code.tex (feature
+    request #3308340).
 
 2011-05-30 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing: 
-	  - Initial work on layered drawing algorithms.
+    - graph drawing: 
+      - Initial work on layered drawing algorithms.
 
 2011-05-25 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Added dim function for array to pgfmath (to be documented)
-	- Some work on a ODE solver
-	
+    - Added dim function for array to pgfmath (to be documented)
+    - Some work on a ODE solver
+    
 2011-05-20 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- removed spurious white spaces in my bugfix for pgfmathdivide
+    - removed spurious white spaces in my bugfix for pgfmathdivide
 
 2011-05-19 Till Tantau <tantau at users.sourceforge.net>
 
-	- Second attempt at fixing spy lib...
+    - Second attempt at fixing spy lib...
 
 2011-05-18 Matthias Schulz <ma.schulz at email.de>
 
-	- graph drawing:
-	  - added short overview for nodes and edges (lua class documentation)
+    - graph drawing:
+      - added short overview for nodes and edges (lua class documentation)
 
 2011-05-17 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - Separate 'spring layout' and 'spring electrical layout' families.
-		  Rename existing algorithms accordingly.
-	  - Add an implementation of the Floyd-Warshall algorithm.
-	  - Add a new 'Hu2006 spring' algorithm based solely on springs.
-	  - Improve the initial layout of 'Hu2006 spring electrical' by 
-	    taking the graph size and diameter into account.
-	  - Rework existing spring electrical algorithms and improve 
-	    documentation.
-	  - Catch -!- edges and remove them from the Lua graph when detected.
+    - graph drawing:
+      - Separate 'spring layout' and 'spring electrical layout' families.
+          Rename existing algorithms accordingly.
+      - Add an implementation of the Floyd-Warshall algorithm.
+      - Add a new 'Hu2006 spring' algorithm based solely on springs.
+      - Improve the initial layout of 'Hu2006 spring electrical' by 
+        taking the graph size and diameter into account.
+      - Rework existing spring electrical algorithms and improve 
+        documentation.
+      - Catch -!- edges and remove them from the Lua graph when detected.
 
 2011-05-14 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - Update documentation of spring and spring-electrical parameters.
-	    Add TODO items where things are missing, unclear or need to be 
-	    worked on.
-	  - Make initial step dimension and the electric charge of nodes
-	    configurable. Both, Walshaw2000 and Hu2006 support this.
-	  - Improve the approximation of the repulsive force.
+    - graph drawing:
+      - Update documentation of spring and spring-electrical parameters.
+        Add TODO items where things are missing, unclear or need to be 
+        worked on.
+      - Make initial step dimension and the electric charge of nodes
+        configurable. Both, Walshaw2000 and Hu2006 support this.
+      - Improve the approximation of the repulsive force.
 
 2011-05-13 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug 3297817 (spy postscript problem).
-	- Fixed bug of missing newpath in postscript and opacity
-	  settings. 
-	
+    - Fixed bug 3297817 (spy postscript problem).
+    - Fixed bug of missing newpath in postscript and opacity
+      settings. 
+    
 2011-05-13 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - Rename graphdrawing.spring to graphdrawing.force.
-	  - Fix NaN bug in the orientation helper.
-	  - Initial work on improving and documenting the parameters for
-	    spring and spring-electrical algorithms.
-	  - Properly forward default node and edge parameters to Lua.
+    - graph drawing:
+      - Rename graphdrawing.spring to graphdrawing.force.
+      - Fix NaN bug in the orientation helper.
+      - Initial work on improving and documenting the parameters for
+        spring and spring-electrical algorithms.
+      - Properly forward default node and edge parameters to Lua.
 
 2011-05-12 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - Add Fibonacci heap and priority queue classes. 
-	  - Add Lua file for common graph algorithms. Implement Dijkstra.
-	  - Add method Graph:getPseudoDiameter().
-	  - Hu2006: Scale coordinations of nodes in a coarse graph based on 
-	    the quotient of its pseudo diameters and that of the parent coarse
-	    graph, as described in the paper.
+    - graph drawing:
+      - Add Fibonacci heap and priority queue classes. 
+      - Add Lua file for common graph algorithms. Implement Dijkstra.
+      - Add method Graph:getPseudoDiameter().
+      - Hu2006: Scale coordinations of nodes in a coarse graph based on 
+        the quotient of its pseudo diameters and that of the parent coarse
+        graph, as described in the paper.
 
 2011-05-11 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - Fix several interpolation bugs in the coarse graph class.
-	  - Use the coarse graph class in the Walshaw2000 algorithm.
+    - graph drawing:
+      - Fix several interpolation bugs in the coarse graph class.
+      - Use the coarse graph class in the Walshaw2000 algorithm.
 
 2011-05-11 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on documentation of gd backend. Still need to
-	  document graph parameters.
-	
+    - Worked on documentation of gd backend. Still need to
+      document graph parameters.
+    
 2011-05-10 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - Remove files from the old graph drawing library tree.
-	  - Disable verbose logging by default.
-	  - Specify sane initial values for spring algorithm parameters.
+    - graph drawing:
+      - Remove files from the old graph drawing library tree.
+      - Disable verbose logging by default.
+      - Specify sane initial values for spring algorithm parameters.
 
 2011-05-10 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added .graph drawing parameter initial key.
+    - Added .graph drawing parameter initial key.
 
 2011-05-09 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - Implement graph coarsening in the Hu2006 algorithm.
-	  - Name force-based algorithms after the paper author and year.
+    - graph drawing:
+      - Implement graph coarsening in the Hu2006 algorithm.
+      - Name force-based algorithms after the paper author and year.
 
 2011-05-09 Till Tantau <tantau at users.sourceforge.net>
 
-	- Reorganized graph drawing documentation.
+    - Reorganized graph drawing documentation.
 
 2011-05-06 Jannis Pohlmann <jannis at xfce.org>
 
-	- Finished the graph drawing library reorganization started by Till.
+    - Finished the graph drawing library reorganization started by Till.
 
 2011-05-06 Till Tantau <tantau at users.sourceforge.net>
 
-	- Reorganized the graph drawing key and directory
-	  structure. The documentation is still missing. Also, lots of
-	  files still need to be moved, but I'll leave that to Jannis.
-	
+    - Reorganized the graph drawing key and directory
+      structure. The documentation is still missing. Also, lots of
+      files still need to be moved, but I'll leave that to Jannis.
+    
 2011-05-06 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - implement a quadtree optimization in the Walshaw algorithm.
-	  - add a simple version of the Hu spring-electrical algorithm that
-	    seems to work almost as good as the Walshaw even without
-		  the multilevel approach implemented (which is the only thing
-		  that really makes the Walshaw algorithm useful).
+    - graph drawing:
+      - implement a quadtree optimization in the Walshaw algorithm.
+      - add a simple version of the Hu spring-electrical algorithm that
+        seems to work almost as good as the Walshaw even without
+          the multilevel approach implemented (which is the only thing
+          that really makes the Walshaw algorithm useful).
 
 2011-05-04 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing: 
-	  - Initial work on a quad tree implementation for spring and spring
-		  electrical algorithms, with unit test.
-		- Improve the internals of the Vector class.
+    - graph drawing: 
+      - Initial work on a quad tree implementation for spring and spring
+          electrical algorithms, with unit test.
+        - Improve the internals of the Vector class.
 
 2011-05-03 Till Tantau <tantau at users.sourceforge.net>
 
-	- graph drawing: Started to cleanup pgf and tikz layers. Ongoing...
+    - graph drawing: Started to cleanup pgf and tikz layers. Ongoing...
 
 2011-05-03 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-		- Fix Walshaw algorithm to properly set the subnodes when copying
-		  the coarse graphs. Simplify the code that updates the node
-		  coordinates.
+    - graph drawing:
+        - Fix Walshaw algorithm to properly set the subnodes when copying
+          the coarse graphs. Simplify the code that updates the node
+          coordinates.
 
 2011-05-02 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing:
-	  - Modify the doclet to allow underscores in parameter names.
-		- Document the Vector class as well as the table, iter and traversal
-		  helpers.
-		- Remove old table and iterator helpers. Rename helper files. Rename
-		  table.merge() and table.copy() to table.custom_merge() and
-		  table.custom_copy() to avoid name clashes with luatools. Add 
-		  string helpers, including string.parse_braces(). Update algorithms 
-		  to work with these changes.
-		- Allow vectors to have an origin vector, similar to the Position
-		  class. Introduce new alternative table-based syntax for
-		  Vector:set() that is much easier to read. Update unit tests
-		  and algorithms. 
+    - graph drawing:
+      - Modify the doclet to allow underscores in parameter names.
+        - Document the Vector class as well as the table, iter and traversal
+          helpers.
+        - Remove old table and iterator helpers. Rename helper files. Rename
+          table.merge() and table.copy() to table.custom_merge() and
+          table.custom_copy() to avoid name clashes with luatools. Add 
+          string helpers, including string.parse_braces(). Update algorithms 
+          to work with these changes.
+        - Allow vectors to have an origin vector, similar to the Position
+          class. Introduce new alternative table-based syntax for
+          Vector:set() that is much easier to read. Update unit tests
+          and algorithms. 
 
 2011-05-02 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fpu: added support for log10 and log2
+    - fpu: added support for log10 and log2
 
 2011-05-02 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing: 
-	  - Drop the 'not yet positionedPGFGDINTERNAL' node name prefix
-	    internally. It's stripped off now when nodes are passed over to
-	  	Lua and its added back again when shipping the node out to TeX.
-	  -	Drop the Node:shortname() method which is no longer needed.
-	  - Improve coding style and documentation of the Interface, Sys, 
-	    Node, Edge and Graph classes. 
-	  - Rename Sys:logMessage() to Sys:log().
-	  - Make parameter labels in the API docs not appear in bold.
-		- Disable verbose logging by default.
-		- Add methods Edge:getNodes() and Node:getEdges().
+    - graph drawing: 
+      - Drop the 'not yet positionedPGFGDINTERNAL' node name prefix
+        internally. It's stripped off now when nodes are passed over to
+          Lua and its added back again when shipping the node out to TeX.
+      -    Drop the Node:shortname() method which is no longer needed.
+      - Improve coding style and documentation of the Interface, Sys, 
+        Node, Edge and Graph classes. 
+      - Rename Sys:logMessage() to Sys:log().
+      - Make parameter labels in the API docs not appear in bold.
+        - Disable verbose logging by default.
+        - Add methods Edge:getNodes() and Node:getEdges().
 
 2011-05-02 Jannis Pohlmann <jannis at xfce.org>
 
-	- graph drawing: 
-	  - Initial work on spring-electrical and layered drawing algorithms.
-		- Major rework of the Lua code of the graphdrawing library: added
-		  a Vector class for improved math operations and node positioning,
-			added quite a number of table and iterator helpers, added
-			post-processing code for fixing the orientation of graph drawings,
-			updated the graph/node/edge data structures to store nodes in the order
-			they appear instead of storing them in a random order, implement
-			coordinate keys for nodes, and much more.
+    - graph drawing: 
+      - Initial work on spring-electrical and layered drawing algorithms.
+        - Major rework of the Lua code of the graphdrawing library: added
+          a Vector class for improved math operations and node positioning,
+            added quite a number of table and iterator helpers, added
+            post-processing code for fixing the orientation of graph drawings,
+            updated the graph/node/edge data structures to store nodes in the order
+            they appear instead of storing them in a random order, implement
+            coordinate keys for nodes, and much more.
 
 2011-04-30  Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- number printing: added '1000 sep in fractionals' switch
+    - number printing: added '1000 sep in fractionals' switch
 
 2011-04-29 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Work on pgflibraryluamath (added pgfpointnormalised)
+    - Work on pgflibraryluamath (added pgfpointnormalised)
 
 2011-04-27 Matthias Schulz <ma.schulz at email.de>
 
-	- Graphdrawing library documentation, split into two files, removed
-	noluatex file, reworked the text (added information).
+    - Graphdrawing library documentation, split into two files, removed
+    noluatex file, reworked the text (added information).
 
 2011-04-25 Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- First attempt to do math with lua (very basical): pgflibraryluamath
+    - First attempt to do math with lua (very basical): pgflibraryluamath
 
 2011-04-18  Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- bugfix for rounding error in \pgfmathdivide{83.407811000}{16.68156400}
-	was 4.10, is now 5.0: it could happen in rare cases that digits where 
-	appended where they shouldhave been than added (4 + .10 instead of 4 + 1.0)
+    - bugfix for rounding error in \pgfmathdivide{83.407811000}{16.68156400}
+    was 4.10, is now 5.0: it could happen in rare cases that digits where 
+    appended where they shouldhave been than added (4 + .10 instead of 4 + 1.0)
 
 2011-04-22 Jannis Pohlmann <jannis at xfce.org>
 
-	- Implemented a G_n subgraph for creating grid (or: mesh) graphs.
-	This also introduces a new key /tikz/graphs/wrap after=<number> that
-	configures how the nodes in such a grid graph are connected. Some of
-	the common subgraph keys such as /tikz/graphs/V and /tikz/graphs/n 
-	can be used with G_n subgraphs as well.
-	- Added a simple grid placement strategy. It currently does not 
-	support the chain shift and group shift keys properly and does not 
-	implement any placement order other than left-to-right, so there is
-	room for improvement.
+    - Implemented a G_n subgraph for creating grid (or: mesh) graphs.
+    This also introduces a new key /tikz/graphs/wrap after=<number> that
+    configures how the nodes in such a grid graph are connected. Some of
+    the common subgraph keys such as /tikz/graphs/V and /tikz/graphs/n 
+    can be used with G_n subgraphs as well.
+    - Added a simple grid placement strategy. It currently does not 
+    support the chain shift and group shift keys properly and does not 
+    implement any placement order other than left-to-right, so there is
+    room for improvement.
 
 2011-04-18  Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- external lib: reduced number of \newwrite allocations and allowed to disable features
-	to safe more of them (aux in dpth=false,disable dependency files)
+    
+    - external lib: reduced number of \newwrite allocations and allowed to disable features
+    to safe more of them (aux in dpth=false,disable dependency files)
 
 2011-04-17  Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- added '/pgf/number format/relative' formatting style.
+    
+    - added '/pgf/number format/relative' formatting style.
 
 2011-03-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Finished documentation of data visualization (sort of)! 
-	- First usable version of data visualization!
+    - Finished documentation of data visualization (sort of)! 
+    - First usable version of data visualization!
 
 2011-03-15 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on dv documentation. Finished chapter on visualizers,
-	style sheets. Legends still missing
+    - Worked on dv documentation. Finished chapter on visualizers,
+    style sheets. Legends still missing
 
 2011-03-07 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on dv documentation. Finished chapter on axes.
+    - Worked on dv documentation. Finished chapter on axes.
 
 2011-03-07  Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- Incorporated a bugfix of Hans Hagen which makes pgf compatible with
-	Context Mk IV.
-	Verified: the patch is backwards compatible with TL 2009 and TL 2010
-	i.e. Context MkII and it works with Context Mk IV.
+    
+    - Incorporated a bugfix of Hans Hagen which makes pgf compatible with
+    Context Mk IV.
+    Verified: the patch is backwards compatible with TL 2009 and TL 2010
+    i.e. Context MkII and it works with Context Mk IV.
 
 2011-01-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on dv documentation.
-	
+    - Worked on dv documentation.
+    
 2011-01-05  Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Attempt to fix a bug #1911195 with pgfpages and rotation (fix
-	contributed by Mark Wibrow). Note: Mark was not sure it has side
-	effects.
+    - Attempt to fix a bug #1911195 with pgfpages and rotation (fix
+    contributed by Mark Wibrow). Note: Mark was not sure it has side
+    effects.
 
 2010-12-17  Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Documentation will now compile with auto-xref enabled (a problem
-	with \_ in the graph lib not handled correctly by
-	pgfmanual.pdflinks.code.tex).
-	- Fix bug #3104978 thanks to Heiko Oberdiek patch on ctt.
+    - Documentation will now compile with auto-xref enabled (a problem
+    with \_ in the graph lib not handled correctly by
+    pgfmanual.pdflinks.code.tex).
+    - Fix bug #3104978 thanks to Heiko Oberdiek patch on ctt.
 
 2010-12-17 Till Tantau <tantau at users.sourceforge.net>
 
-	- Changed the graph syntax for anonymous nodes in the graph
-	library and simplified the as= syntax.
-	- Added fresh nodes options to graph library.
+    - Changed the graph syntax for anonymous nodes in the graph
+    library and simplified the as= syntax.
+    - Added fresh nodes options to graph library.
 
 2010-12-14 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed graph lib so that it compiles with plain TeX.
+    - Fixed graph lib so that it compiles with plain TeX.
 
 2010-12-10 Till Tantau <tantau at users.sourceforge.net>
 
-	- Small fixed in the graph library.
+    - Small fixed in the graph library.
 
 2010-12-07 Till Tantau <tantau at users.sourceforge.net>
 
-	- Finished graph library!
+    - Finished graph library!
 
 2010-12-06 Till Tantau <tantau at users.sourceforge.net>
 
-	- Nearly finished graph lib and its documentation.
+    - Nearly finished graph lib and its documentation.
 
 2010-11-30 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug #3123605 (hopefully...).
-	- Worked on graph lib.
+    - Fixed bug #3123605 (hopefully...).
+    - Worked on graph lib.
 
 2010-11-19  Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Some integer arithmetics functions for the math parser
-	(contributed by Alain Matthes): gcd, isprime, isodd, iseven
+    - Some integer arithmetics functions for the math parser
+    (contributed by Alain Matthes): gcd, isprime, isodd, iseven
 
 2010-11-19 Till Tantau <tantau at users.sourceforge.net>
 
-	- Second attempt at making \tikz work also with fragile stuff
-	following. The new code will no longer fail in a situation
-	like \tikz \foreach ...
-	- Worked on graph lib stuff.
+    - Second attempt at making \tikz work also with fragile stuff
+    following. The new code will no longer fail in a situation
+    like \tikz \foreach ...
+    - Worked on graph lib stuff.
 
 2010-11-06  Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- A luatex version of the doc is available (fixed inputenc issues
-	since luatex works with utf8 by default).
+    - A luatex version of the doc is available (fixed inputenc issues
+    since luatex works with utf8 by default).
 
 2010-11-04  Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Fix bug in pgfmathfunctions.basic.code.tex (bug reported by
-	Alain Matthes and fixed by Paul Gaborit on fctt): wrong
-	interaction between pow and exp (linked to \pgfmath at x modified
-	outside macro call).
+    - Fix bug in pgfmathfunctions.basic.code.tex (bug reported by
+    Alain Matthes and fixed by Paul Gaborit on fctt): wrong
+    interaction between pow and exp (linked to \pgfmath at x modified
+    outside macro call).
 
 2010-11-01  Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- Make \pgfkeys at exp@call long (bug reported by Florent Chervet on
-	fctt)
-	- Fix bug in pgflibraryshapes.callouts.code.tex: \pgf at test changed
-	to \pgf at node@name (bug reported by Zarko F. Cucej on ctt and fix
-	contributed by Mark Wibrow)
-	
+    - Make \pgfkeys at exp@call long (bug reported by Florent Chervet on
+    fctt)
+    - Fix bug in pgflibraryshapes.callouts.code.tex: \pgf at test changed
+    to \pgf at node@name (bug reported by Zarko F. Cucej on ctt and fix
+    contributed by Mark Wibrow)
+    
 2010-10-27  Christophe Jorssen <cjorssen at users.sourceforge.net>
 
-	- fixed bug 3096333 (Fix contributed by Mark Wibrow): pgffor
-	failed to update \lastx in some cases 
-	
+    - fixed bug 3096333 (Fix contributed by Mark Wibrow): pgffor
+    failed to update \lastx in some cases 
+    
 2010-10-25  Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	Released version 2.10
+    Released version 2.10
 
 2010-10-22 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- closed a lot of bugs on sourceforge, especially documentation bugs
-	- fixed bug 2429749: gnuplot invocation in tabularx did not work.
+    - closed a lot of bugs on sourceforge, especially documentation bugs
+    - fixed bug 2429749: gnuplot invocation in tabularx did not work.
 
 2010-10-21 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed bug: there was an incompatibility between pgf and beamer due to a
-	missing \interlineskip in the shipout handling for latex.
+    - fixed bug: there was an incompatibility between pgf and beamer due to a
+    missing \interlineskip in the shipout handling for latex.
 
 2010-10-15 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- renamed 'halfcircle' marker to 'halfcircle*' and added 'halfcircle'.
-	- provided special case 'mark color=none' for the half-filled markers.
+    - renamed 'halfcircle' marker to 'halfcircle*' and added 'halfcircle'.
+    - provided special case 'mark color=none' for the half-filled markers.
 
 2010-10-13 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed incorrect fill/stroke coloring of new marker contributions (see
-	ChangeLog 2010-09-27)
-	- added more predefined dashed and dotted line patterns for black/white plots
-	to fulfill a related feature request of Tomek
-	- fixed bug: the 'name path global' feature did not work in every case...
-	the actual implementation might need to be revised eventually.
+    - fixed incorrect fill/stroke coloring of new marker contributions (see
+    ChangeLog 2010-09-27)
+    - added more predefined dashed and dotted line patterns for black/white plots
+    to fulfill a related feature request of Tomek
+    - fixed bug: the 'name path global' feature did not work in every case...
+    the actual implementation might need to be revised eventually.
 
 2010-10-12 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Imported spell checking results of Stefan Pinnow (thanks!)
-	- Dealed with typo in 'sci generic' number formatting style: it now
-	accepts 'mantissa' *and* 'mantisse'
+    - Imported spell checking results of Stefan Pinnow (thanks!)
+    - Dealed with typo in 'sci generic' number formatting style: it now
+    accepts 'mantissa' *and* 'mantisse'
 
 2010-10-11 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- External lib: Fixed bug. The 'failed ref warnings for' was not properly \protect'ed.
+    
+    - External lib: Fixed bug. The 'failed ref warnings for' was not properly \protect'ed.
 
 2010-09-27 Till Tantau <tantua at users.sourceforge.net>
 
-	- Started on graph lib. Not yet finished and not documented.
-	
+    - Started on graph lib. Not yet finished and not documented.
+    
 
 2010-09-21 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added plot markers of Magnus Tewes and Tomek: halfcircle, halfsquare*,
-	halfsquare left*, halfsquare right*, heart
+    - Added plot markers of Magnus Tewes and Tomek: halfcircle, halfsquare*,
+    halfsquare left*, halfsquare right*, heart
 
 2010-09-08 Till Tantau <tantua at users.sourceforge.net>
 
-	- Added \pgfpositionnodelater and \pgfpositionnodenow
-	commands.
-	
+    - Added \pgfpositionnodelater and \pgfpositionnodenow
+    commands.
+    
 
 2010-08-31 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- externalization+\ref: fixed a bug
+    - externalization+\ref: fixed a bug
 
 2010-08-30 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: documented how to generate .png graphics and added support
-	switches.
+    - external lib: documented how to generate .png graphics and added support
+    switches.
 
 2010-08-26 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added 'baseline=default', 'trim left=default' and 'trim right=default' choices to reset these keys.
+    - added 'baseline=default', 'trim left=default' and 'trim right=default' choices to reset these keys.
 
 2010-08-25 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added support to provide paragraphs in "pin" arguments
+    - added support to provide paragraphs in "pin" arguments
 
 2010-08-24 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on data visualization and its documentation.
+    - Worked on data visualization and its documentation.
 
 
 2010-08-23 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- basic level externalization: added \hoffset=0pt and \voffset=0pt to improve
-	compatibility with special document classes
-	- added docs for \deferredanchor feature contributed by Christophe Jorssen <cjorssen at users.sourceforge.net>
-	- ConTeXt support: fixed loading problem of calendar lib
+    
+    - basic level externalization: added \hoffset=0pt and \voffset=0pt to improve
+    compatibility with special document classes
+    - added docs for \deferredanchor feature contributed by Christophe Jorssen <cjorssen at users.sourceforge.net>
+    - ConTeXt support: fixed loading problem of calendar lib
 
 
 2010-08-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- pgfsys-tex4ht.def: fixed problem with \par in a non-long macro argument,
-	thereby eliminating a compilation problem
-	- pgfsys-tex4ht.def: renamed offending macro invocation \Par to \par
+    - pgfsys-tex4ht.def: fixed problem with \par in a non-long macro argument,
+    thereby eliminating a compilation problem
+    - pgfsys-tex4ht.def: renamed offending macro invocation \Par to \par
 
 
 2010-08-16 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- basic level image externalization: added '/pgf/images/trim external={<left>}{<bottom>}{<right>}{<top>}'
-	to allow modifications to the hardcoded '1truein' shifts.
-	- added '/.style n args' key.
-	- \usetikzlibrary / \usepgflibrary: added support for white-space trimming
-	and empty arguments in the lists. Now, lines do not need to be terminated
-	by '%' and ',,' is valid.
+    
+    - basic level image externalization: added '/pgf/images/trim external={<left>}{<bottom>}{<right>}{<top>}'
+    to allow modifications to the hardcoded '1truein' shifts.
+    - added '/.style n args' key.
+    - \usetikzlibrary / \usepgflibrary: added support for white-space trimming
+    and empty arguments in the lists. Now, lines do not need to be terminated
+    by '%' and ',,' is valid.
 
 2010-08-13 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: documented how to solve compatibility problems with
-	\tikzifexternalizing
+    - external lib: documented how to solve compatibility problems with
+    \tikzifexternalizing
 
 2010-08-11 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- added \deferredanchor feature contributed by Christophe Jorssen <cjorssen at users.sourceforge.net>
+    
+    - added \deferredanchor feature contributed by Christophe Jorssen <cjorssen at users.sourceforge.net>
 
 2010-08-03 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added optimized and numerically stable arc path command
-	\pgfpatharctoprecomputed which interpolates start- and end points
-	
+    - added optimized and numerically stable arc path command
+    \pgfpatharctoprecomputed which interpolates start- and end points
+    
 2010-07-10 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- external lib: fixed incompatibility with 2010/06/08 v2.0b eso-pic package 
+    
+    - external lib: fixed incompatibility with 2010/06/08 v2.0b eso-pic package 
 
 2010-07-06 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: added sanity checking for failed \ref,\pageref,\cite commands in external images.
+    - external lib: added sanity checking for failed \ref,\pageref,\cite commands in external images.
 
 2010-07-01 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- math parser: improved error messages by providing the complete math expression.
+    
+    - math parser: improved error messages by providing the complete math expression.
 
 2010-06-30 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- added 'trim left' and 'trim right' features to simplify bounding box
-	modifications and allow support for restricted bounding boxes and image
-	externalization.	
+    
+    - added 'trim left' and 'trim right' features to simplify bounding box
+    modifications and allow support for restricted bounding boxes and image
+    externalization.    
 
 2010-06-16 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- pgfutil-latex.def: changed \usepackage to \RequirePackage (thanks to Christophe Jorssen)
-	- external lib: added \tikzappendtofigurename{} shortcut for '\tikzset{external/figure name/.add={}{suffix}}'
+    
+    - pgfutil-latex.def: changed \usepackage to \RequirePackage (thanks to Christophe Jorssen)
+    - external lib: added \tikzappendtofigurename{} shortcut for '\tikzset{external/figure name/.add={}{suffix}}'
 
 2010-06-14 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- external lib: added warning at end of document if not all graphics have
-	been found.
+    
+    - external lib: added warning at end of document if not all graphics have
+    been found.
 
 2010-06-10 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- updated file 'tikzexternal.sty' for \label and \ref support inside of
-	externalized graphics
-	- documented how \label and \ref support in external graphics works.
-	- activated \label support for mode=convert with system call and
-	documented limitations.
+    
+    - updated file 'tikzexternal.sty' for \label and \ref support inside of
+    externalized graphics
+    - documented how \label and \ref support in external graphics works.
+    - activated \label support for mode=convert with system call and
+    documented limitations.
 
 2010-06-09 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \tikzifinpicture{<true code>}{<false code>} macro
+    - added \tikzifinpicture{<true code>}{<false code>} macro
 
 2010-05-31 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on data visualization.
+    - Worked on data visualization.
 
 2010-05-30 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added .list key handler.
+    - Added .list key handler.
 
 2010-05-26 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on data visualization.
-	
+    - Worked on data visualization.
+    
 2010-05-06 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- improved sanity checking in number printer: now, the zero flag is
-	checked even if its exponent > 0
+    - improved sanity checking in number printer: now, the zero flag is
+    checked even if its exponent > 0
 
 2010-04-22 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- floatparsenumber: number format errors after exponents now contain the offending
-	character instead of '\relax' 
+    - floatparsenumber: number format errors after exponents now contain the offending
+    character instead of '\relax' 
 
 2010-04-12 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- number printer: added 'frac denom' and 'frac whole' for fine tuning of
-	fractional number printing.
+    - number printer: added 'frac denom' and 'frac whole' for fine tuning of
+    fractional number printing.
 
 2010-04-10 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- number printer: made \protect portable across TeX variants (doesn't
-	produce bugs with context anymore)
-	- fpu: optimized \pgfmathfloatgetflagstomacro
+    - number printer: made \protect portable across TeX variants (doesn't
+    produce bugs with context anymore)
+    - fpu: optimized \pgfmathfloatgetflagstomacro
 
 2010-04-09 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \pgfresetboundingbox
-	- added \pgfgetlastxy coordinate macro
-	- added '/pgf/images/include external/<image name>' code key.
+    - added \pgfresetboundingbox
+    - added \pgfgetlastxy coordinate macro
+    - added '/pgf/images/include external/<image name>' code key.
 
 2010-04-08 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fpu: added convenience method \pgfmathfloattoint
+    - fpu: added convenience method \pgfmathfloattoint
 
 2010-03-31 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- number printer: added 'frac' style to automatically create fractionals.
+    - number printer: added 'frac' style to automatically create fractionals.
 
 2010-03-25 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- splitted basic level file pgfcoreimage.code.tex: there is now a 
-	pgfcoreexternal.code.tex file.
+    - splitted basic level file pgfcoreimage.code.tex: there is now a 
+    pgfcoreexternal.code.tex file.
 
 2010-03-24 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- \pgfmathprintnumber is no longer a "fragile" command (it is \protect'ed
-	automatically in LaTeX).
+    - \pgfmathprintnumber is no longer a "fragile" command (it is \protect'ed
+    automatically in LaTeX).
 
 2010-03-23 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed baseline alignment with "text width" option in LaTeX.
+    - Fixed baseline alignment with "text width" option in LaTeX.
 
 2010-03-23 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- New divide function
-	- Rewrote code foreach extensions. Now no longer an impenetrable mess.
-	  pgffor.code.tex is much larger, but contains some (as yet) undocumented 
-	  features which may get optimised out.
-	
+    - New divide function
+    - Rewrote code foreach extensions. Now no longer an impenetrable mess.
+      pgffor.code.tex is much larger, but contains some (as yet) undocumented 
+      features which may get optimised out.
+    
 2010-03-19 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Image externalization: added '/pgf/images/aux in dpth' feature.
-	It allows to store \label and other .aux file related stuff in the image's
-	.dpth file which is processed when when the main document includes the
-	image.
-	The new switch is on for the semi-automatic modes of the external lib, otherwise it is
-	off.
+    - Image externalization: added '/pgf/images/aux in dpth' feature.
+    It allows to store \label and other .aux file related stuff in the image's
+    .dpth file which is processed when when the main document includes the
+    image.
+    The new switch is on for the semi-automatic modes of the external lib, otherwise it is
+    off.
 
 2010-03-17 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- pgfkeys: added '.code n args' handler. The difference to '.code
-	args={#1#2#3}' is that keys defined with 'code n args' gobble spaces
-	between the arguments.
-	Note: 'code 2 args' remains as-is (it has the special feature that the
-	second argument is optional).
-	- fixed bug in '/.add code' key handler: it didn't work properly for
-	complicated keys
-	- pgfkeys manual section: updated xrefs and docs
+    - pgfkeys: added '.code n args' handler. The difference to '.code
+    args={#1#2#3}' is that keys defined with 'code n args' gobble spaces
+    between the arguments.
+    Note: 'code 2 args' remains as-is (it has the special feature that the
+    second argument is optional).
+    - fixed bug in '/.add code' key handler: it didn't work properly for
+    complicated keys
+    - pgfkeys manual section: updated xrefs and docs
 
 2010-03-15 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: \tikzexternalize no longer needs (but still accepts) the
-	main job's name. Changes are now documented and the replacement |.sty|
-	file has been updated.
-	- intersection lib: added 'name path global' feature.
+    - external lib: \tikzexternalize no longer needs (but still accepts) the
+    main job's name. Changes are now documented and the replacement |.sty|
+    file has been updated.
+    - intersection lib: added 'name path global' feature.
 
 2010-03-11 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: partially fixed incompatibility with glossary package and
-	documented work-around
+    - external lib: partially fixed incompatibility with glossary package and
+    documented work-around
 
 2010-03-05 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- FPU: added \pgfmathfloatifapproxequalrel 
-	- number printing: added style to configure |sci precision|
-	- number printing: added style to configure |std=<lower e>:<upper e>|
+    - FPU: added \pgfmathfloatifapproxequalrel 
+    - number printing: added style to configure |sci precision|
+    - number printing: added style to configure |std=<lower e>:<upper e>|
 
 2010-03-03 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- external lib: the <real job's name> argument from \tikzexternalize is
-	now optional. It can be deduced automatically if it is missing.
+    
+    - external lib: the <real job's name> argument from \tikzexternalize is
+    now optional. It can be deduced automatically if it is missing.
 
 2010-02-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- number printing: added 'sci generic' style to customize the appearance
-	of scientific format and a 'verbatim' style which doesn't use TeX macros
-	for the formatted numbers.
+    - number printing: added 'sci generic' style to customize the appearance
+    of scientific format and a 'verbatim' style which doesn't use TeX macros
+    for the formatted numbers.
 
 2010-02-17 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: now, a |\jobname.auxlock| file will be generated in order
-	to detect whether the \jobname.aux file is in its final state. This allows
-	to export any images containing |\ref{}| manually; the automatic procedure
-	will not use the .aux file.
+    - external lib: now, a |\jobname.auxlock| file will be generated in order
+    to detect whether the \jobname.aux file is in its final state. This allows
+    to export any images containing |\ref{}| manually; the automatic procedure
+    will not use the .aux file.
 
 2010-02-16 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added \ifpgfexternalreadmainaux switch. Will be used to avoid buffering
-	problems during externalization mode 'convert with system call'.
+    - Added \ifpgfexternalreadmainaux switch. Will be used to avoid buffering
+    problems during externalization mode 'convert with system call'.
 
 2010-02-16 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug "papersize not supported by pgfsys-xetex.def - ID: 2934982"
+    - Fixed bug "papersize not supported by pgfsys-xetex.def - ID: 2934982"
 
 
 2010-02-09 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Improved automatic cross referencing: auto key path prefixing failed for
-	spaces in key paths.
+    - Improved automatic cross referencing: auto key path prefixing failed for
+    spaces in key paths.
 
 2010-02-08 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added "on background layer" key to backgrounds lib.
+    - Added "on background layer" key to backgrounds lib.
 
 2010-02-02 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \pgfmathifisint
-	- supported \nofiles in auto xref generation
+    - added \pgfmathifisint
+    - supported \nofiles in auto xref generation
 
 2010-02-01 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- externalization: both, basic layer and external lib now support \ref{}s
-	inside of externalized pictures. Furthermore, they won't generate any aux
-	files on their own (which wouldn't be thread safe and is not useful
-	anyway)
+    
+    - externalization: both, basic layer and external lib now support \ref{}s
+    inside of externalized pictures. Furthermore, they won't generate any aux
+    files on their own (which wouldn't be thread safe and is not useful
+    anyway)
 
 2010-01-29 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: fixed bug with figure list/makefile handling and file
-	deps: calling file dependency handlings outside of a picture could result
-	in compilation failures
+    - external lib: fixed bug with figure list/makefile handling and file
+    deps: calling file dependency handlings outside of a picture could result
+    in compilation failures
 
 2010-01-27 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: mode=list and make now supports the force remake keys.
-	- external lib: the -shell-escape switch for nested system calls is
-	activated only if it was active for the main document. This should allow a
-	reasonable security measure for mode=list and make (which will also work
-	without system calls from within TeX).
+    - external lib: mode=list and make now supports the force remake keys.
+    - external lib: the -shell-escape switch for nested system calls is
+    activated only if it was active for the main document. This should allow a
+    reasonable security measure for mode=list and make (which will also work
+    without system calls from within TeX).
 
 2010-01-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: added support for file dependencies.
-	For mode=list and make, any file dependencies configured with
-	\tikzpicturedependsonfile{<name>} will be checked by the generated
-	makefile.
+    - external lib: added support for file dependencies.
+    For mode=list and make, any file dependencies configured with
+    \tikzpicturedependsonfile{<name>} will be checked by the generated
+    makefile.
 
 
 2010-01-16 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- profiler library now uses an output file which contains the current date
-	and time. Furthermore, it counts every invocation and allows to show every
-	command invocation (optionally with arguments expanded).
+    - profiler library now uses an output file which contains the current date
+    and time. Furthermore, it counts every invocation and allows to show every
+    command invocation (optionally with arguments expanded).
 
 2010-01-14 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- profiler library can now profile macros with arbitrary argument pattern
-	and is more rebust with respect to save stack usage
+    - profiler library can now profile macros with arbitrary argument pattern
+    and is more rebust with respect to save stack usage
 
 2010-01-11 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- worked on profiler library and added docs for it.
+    - worked on profiler library and added docs for it.
 
 2010-01-10 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added first draft of the pgf 'profiler' library
+    - added first draft of the pgf 'profiler' library
 
 2010-01-07 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fix for rounded corners affecting custom fills in rectangle 
-	  split shape.
+    - Fix for rounded corners affecting custom fills in rectangle 
+      split shape.
 
 2009-12-29 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- updated the 'make dist' documentation target such that it compresses
-	every pdf object. The resulting manual is half as large than without
-	compression, but it requires pdf 1.5 (at least acrobat 6.0).
+    - updated the 'make dist' documentation target such that it compresses
+    every pdf object. The resulting manual is half as large than without
+    compression, but it requires pdf 1.5 (at least acrobat 6.0).
 
 2009-12-22 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: some output messages did not respect the 'verbose
-	IO=false' flag; fixed that
-	- fixed buggy treatment of some automatic cross references in manual
+    - external lib: some output messages did not respect the 'verbose
+    IO=false' flag; fixed that
+    - fixed buggy treatment of some automatic cross references in manual
 
 2009-12-15 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: improved the tikzexternal.sty package which can be used
-	without pgf installed.
+    - external lib: improved the tikzexternal.sty package which can be used
+    without pgf installed.
 
 2009-12-04 Till Tantau <tantau at users.sourceforge.net>
 
-	- added spy library.
-	
+    - added spy library.
+    
 2009-12-02 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- imported a patch of Andy Schlaikjer which extends the 'plot gnuplot'
-	feature to read the ``unbounded point'' information provided by gnuplot.
+    
+    - imported a patch of Andy Schlaikjer which extends the 'plot gnuplot'
+    feature to read the ``unbounded point'' information provided by gnuplot.
 
 2009-11-29 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \r at pgf@reada temporary \openin register for compatibility with
-	other packages
+    - added \r at pgf@reada temporary \openin register for compatibility with
+    other packages
 
 2009-11-19 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed an auto xref bug which wrote '\pgfkeys{}' although the manual
-	contained |\pgfkeys|.
+    - fixed an auto xref bug which wrote '\pgfkeys{}' although the manual
+    contained |\pgfkeys|.
 
 2009-11-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: the 'optimize command away' things where not activated
-	accidentally. I fixed it.
-	- added support for new paragraphs in pgfkeys values
-	- fixed bug in |const plot| handler (and all its variants): the first
-	coordinate was transformed twice
+    - external lib: the 'optimize command away' things where not activated
+    accidentally. I fixed it.
+    - added support for new paragraphs in pgfkeys values
+    - fixed bug in |const plot| handler (and all its variants): the first
+    coordinate was transformed twice
 
 2009-11-15 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- auto xrefs now support point coordinate systems.
-	- auto xrefs now provide an interface to deal with tricky active
-	characters (for |-)
-	- external lib: improved compatibility with |fadings| libary.
-	- replaced 'set terminal table; set output "<file>"' by 'set table "<file>"'
-	to maintain compatibility with the new gnuplot version.
+    - auto xrefs now support point coordinate systems.
+    - auto xrefs now provide an interface to deal with tricky active
+    characters (for |-)
+    - external lib: improved compatibility with |fadings| libary.
+    - replaced 'set terminal table; set output "<file>"' by 'set table "<file>"'
+    to maintain compatibility with the new gnuplot version.
 
 2009-11-14 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- pgfmanual.pdf: provided a 'make dist' target in version_for_pdftex/en
-	which activates automatic hyper references from codeexamples to key
-	declarations.
-	This utilizes larger memory limits, configured in
-	doc/generic/pgf/text-en/texmf.cnf
+    - pgfmanual.pdf: provided a 'make dist' target in version_for_pdftex/en
+    which activates automatic hyper references from codeexamples to key
+    declarations.
+    This utilizes larger memory limits, configured in
+    doc/generic/pgf/text-en/texmf.cnf
 
 2009-11-12 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added the 'small mindmap' style.
+    - Added the 'small mindmap' style.
 
 2009-11-06 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- FPU: improved sanity checks and exception handling for the decompose
-	routines (pgfmathfloatgetexponent etc) and the number parser.
-	Added exception 'wrong lowlevel format'.
+    - FPU: improved sanity checks and exception handling for the decompose
+    routines (pgfmathfloatgetexponent etc) and the number parser.
+    Added exception 'wrong lowlevel format'.
 
 2009-10-20 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- renamed 'text mark/style' to 'text mark style' and 'text mark/as node'
-	to 'text mark as node' (there are backw. compatibility hooks).
-	This should avoid confusion with '.unknown' handlers.
+    - renamed 'text mark/style' to 'text mark style' and 'text mark/as node'
+    to 'text mark as node' (there are backw. compatibility hooks).
+    This should avoid confusion with '.unknown' handlers.
 
 2009-10-19 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- improved error recovery of external lib.
+    
+    - improved error recovery of external lib.
 
 2009-10-16 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- temporarily disabled the auto cross references -- it seems they compile
-	only with increased memory.
+    - temporarily disabled the auto cross references -- it seems they compile
+    only with increased memory.
 
 2009-10-15 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Installed preliminary version of automatic cross referencing tool.
-	Now, every codeexample is parsed for options and control sequences which
-	have been defined somewhere else in the document; pdf cross references are
-	built automatically as well.
-	- configured links to be blue throughout the document.
-	- external lib: added \tikzexternaldisable such that partial externalization is possible
-	although the document contains unsupported constructs (where environments
-	can't be identified without macro expansion).
-	The pgfmanual compiles with image externalization now.
+    - Installed preliminary version of automatic cross referencing tool.
+    Now, every codeexample is parsed for options and control sequences which
+    have been defined somewhere else in the document; pdf cross references are
+    built automatically as well.
+    - configured links to be blue throughout the document.
+    - external lib: added \tikzexternaldisable such that partial externalization is possible
+    although the document contains unsupported constructs (where environments
+    can't be identified without macro expansion).
+    The pgfmanual compiles with image externalization now.
 
 2009-10-13 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \pgfutilsolvetwotwoleq to solve 2x2 linear equation systems using
-	column pivotisation and gauss elim. Should result in improved quality
-	compared with \pgftransforminvert as internal equation solver
+    - added \pgfutilsolvetwotwoleq to solve 2x2 linear equation systems using
+    column pivotisation and gauss elim. Should result in improved quality
+    compared with \pgftransforminvert as internal equation solver
 
 2009-10-09 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Defined \pgfdeclaregenericanchor to allow anchors which get the shape
-	name as argument. Only useful internally.
+    - Defined \pgfdeclaregenericanchor to allow anchors which get the shape
+    name as argument. Only useful internally.
 
 2009-09-15 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Fixed buggy treatment of white spaces in \jobname and 'plot function'
-	using \pgfutilpreparefilename.
+    - Fixed buggy treatment of white spaces in \jobname and 'plot function'
+    using \pgfutilpreparefilename.
 
 2009-09-04 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug item #2834141 [wrong reversed double arrows]
-	- Fixed bug item #2834233 [shapes libraries]
-	- Fixed bug item #2822265 [tangent coordinates not working in CVS]
-	- Changed \rm to \tf in Context.
+    - Fixed bug item #2834141 [wrong reversed double arrows]
+    - Fixed bug item #2834233 [shapes libraries]
+    - Fixed bug item #2822265 [tangent coordinates not working in CVS]
+    - Changed \rm to \tf in Context.
 
 2009-07-31 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: added 'mode=list and make'. Now, image externalisation
-	time can be reduced with 'make -j 2 -f mainfile.makefile'.
+    - external lib: added 'mode=list and make'. Now, image externalisation
+    time can be reduced with 'make -j 2 -f mainfile.makefile'.
 
 2009-07-08 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external lib: fixed treatment of long arguments in \tikz ... ; shortcut
-	command.
+    - external lib: fixed treatment of long arguments in \tikz ... ; shortcut
+    command.
 
 2009-06-30 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed white space bug in \pgfkeysdeactivatefamily
-	- added \pgfmathfloatvalueof
+    - fixed white space bug in \pgfkeysdeactivatefamily
+    - added \pgfmathfloatvalueof
 
 2009-06-22 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added a '*' feature to '\pgfmathdeclarefunction' which overwrites
-	existing functions.
+    - added a '*' feature to '\pgfmathdeclarefunction' which overwrites
+    existing functions.
 
 2009-06-11 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added '/tikz/no marks' key.
-	- fixed typo in external lib documentation: the key is called 'figure name',
-	not 'file name'
+    - added '/tikz/no marks' key.
+    - fixed typo in external lib documentation: the key is called 'figure name',
+    not 'file name'
 
 2009-06-10 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- added \pgfgettransformentries and \pgfsettransformentries.
-	- updated the external library such that it deals with active characters
-	in the same way as without external library.
-	- fixed bug in fpu cosh, sinh and tanh
+    
+    - added \pgfgettransformentries and \pgfsettransformentries.
+    - updated the external library such that it deals with active characters
+    in the same way as without external library.
+    - fixed bug in fpu cosh, sinh and tanh
 
 2009-06-09 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- provided two new aliases for key filters, added \pgfkeyssetfamily.
+    - provided two new aliases for key filters, added \pgfkeyssetfamily.
 
 2009-05-29 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- allowed numbers like '.9' in fpu.
+    - allowed numbers like '.9' in fpu.
 
 2009-02-29 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fix for signal shape. 
+    - Fix for signal shape. 
 
 
 2009-05-22 Jin-Hwan Cho <jinhwancho at users.sourceforge.net>
 
-	- Applied the patches for dvipdfmx driver,
-	pgf-doc-diff.version2cvs (2009-04-18) and
-	pgf-generic-diff.version2cvs (2009-04-19).
+    - Applied the patches for dvipdfmx driver,
+    pgf-doc-diff.version2cvs (2009-04-18) and
+    pgf-generic-diff.version2cvs (2009-04-19).
 
 2009-05-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Restored processing of unknown keys in the predefined key filters 'and',
-	'not', 'or' and 'false': it was not improvement...
+    - Restored processing of unknown keys in the predefined key filters 'and',
+    'not', 'or' and 'false': it was not improvement...
 
 2009-05-17 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed the sequence of arguments of
-	\pgfqkeysactivatefamiliesandfilteroptions and 
-	\pgfqkeysactivatesinglefamilyandfilteroptions
-	in the reference manual.
+    - fixed the sequence of arguments of
+    \pgfqkeysactivatefamiliesandfilteroptions and 
+    \pgfqkeysactivatesinglefamilyandfilteroptions
+    in the reference manual.
 
 2009-05-16 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- key filtering: the composed key filter handlers 'not', 'and', 'false' and 'or' now 
-	ignore unknown options and call the .unknown handlers.
-	- pgfkeys: removed the experimental \pgfkeyssetdefaultpathforhandled method.
-	It doesn't fit into the clean interface for pgfkeys - and the problem of
-	default paths for handled keys can be solved better with the '/handler
-	config' method.
+    - key filtering: the composed key filter handlers 'not', 'and', 'false' and 'or' now 
+    ignore unknown options and call the .unknown handlers.
+    - pgfkeys: removed the experimental \pgfkeyssetdefaultpathforhandled method.
+    It doesn't fit into the clean interface for pgfkeys - and the problem of
+    default paths for handled keys can be solved better with the '/handler
+    config' method.
 
 2009-04-24 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- provided API function \pgfmathfloatifflags to simplify special cases in
-	FPU.
+    - provided API function \pgfmathfloatifflags to simplify special cases in
+    FPU.
 
 2009-04-23 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added (primitive) veclen implementation for FPU.
-	- added cosh, sinh, tanh to FPU
+    - added (primitive) veclen implementation for FPU.
+    - added cosh, sinh, tanh to FPU
 
 2009-04-21 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed bug in external lib: empty lines in tikzpicture environments were not accepted 
-	for some operating modes.
+    - fixed bug in external lib: empty lines in tikzpicture environments were not accepted 
+    for some operating modes.
 
 2009-04-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \pgfqpointscale
+    - added \pgfqpointscale
 
 2009-04-08 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added an optional argument count to 'optimize command away' in external
-	library.
+    - added an optional argument count to 'optimize command away' in external
+    library.
 
 2009-04-03 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added the |figure name| key to the externalization library
-	- improved docs for externalization library
+    - added the |figure name| key to the externalization library
+    - improved docs for externalization library
 
 2009-03-30 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- improved sanity checking of floating point comparison: does now also
-	yield results for infty/nan
-	- added fix for precedence bug for unary minus (fix has been suggested by
-	Mark Wibrow, by mail conversation)
+    - improved sanity checking of floating point comparison: does now also
+    yield results for infty/nan
+    - added fix for precedence bug for unary minus (fix has been suggested by
+    Mark Wibrow, by mail conversation)
 
 2009-03-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Replaced \z@ by 0pt for context.
+    - Replaced \z@ by 0pt for context.
 
 2009-03-21 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- external library: fixed the 'optimize' feature: pictures which won't be
-	exported could not be optimized away (although they should)
+    - external library: fixed the 'optimize' feature: pictures which won't be
+    exported could not be optimized away (although they should)
 
 2009-03-20 Till Tantau <tantau at users.sourceforge.net>
 
-	- Replaced \toks@ and \voidb at x by \pgfutil at toks@ and
-	  \pgfutil at voidb@x. 
+    - Replaced \toks@ and \voidb at x by \pgfutil at toks@ and
+      \pgfutil at voidb@x. 
 
 2009-03-14 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- improved docs for .search also.
-	- fixed initial value for 'domain' such that it really uses the default
-	samples=25.
-	
+    - improved docs for .search also.
+    - fixed initial value for 'domain' such that it really uses the default
+    samples=25.
+    
 
 2009-03-09 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added patch for context color support in luatex.
+    - Added patch for context color support in luatex.
 
 2009-02-26 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- improved the optimization facilities of the external library:
-	|optimize=false| will now properly restore any optimized material 
-	when used in \tikzset
-	
+    - improved the optimization facilities of the external library:
+    |optimize=false| will now properly restore any optimized material 
+    when used in \tikzset
+    
 2009-02-23 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added |/handler config=all,only existing,full or existing|
-	configuration.
-	- added |.search also| key handler as a simple implementation of key
-	search paths.
-	- fixed default value for /tikz/samples at- there are no really 25
-	samples, not 26. I forgot to fix this last time when I fixed 'samples'
+    - added |/handler config=all,only existing,full or existing|
+    configuration.
+    - added |.search also| key handler as a simple implementation of key
+    search paths.
+    - fixed default value for /tikz/samples at- there are no really 25
+    samples, not 26. I forgot to fix this last time when I fixed 'samples'
 
 2009-02-20 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added |\pgfkeyssetdefaultpathforhandled| feature as improvement for
-	multiple key paths to pgfkeys. Reference documentation and an 
-	application example is in the manual.
+    - added |\pgfkeyssetdefaultpathforhandled| feature as improvement for
+    multiple key paths to pgfkeys. Reference documentation and an 
+    application example is in the manual.
 
 2009-02-13 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added 'mark=text' which draws arbitrary TeX content as plot marks to
-	plot mark library.
+    - added 'mark=text' which draws arbitrary TeX content as plot marks to
+    plot mark library.
 
 2009-02-06 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added key 'define function' to define simple local functions. 
+    - Added key 'define function' to define simple local functions. 
 
 2009-02-04 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked on dv stuff.
-	
+    - Worked on dv stuff.
+    
 2009-02-01 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Index argument to array is automatically truncated to an 
-	  integer.
-	- Text decoration can now be aligned along or fitted to a path.
-	- Added key '/pgf/decoration/reverse path' to decorate a path 
-	  backwards.
+    - Index argument to array is automatically truncated to an 
+      integer.
+    - Text decoration can now be aligned along or fitted to a path.
+    - Added key '/pgf/decoration/reverse path' to decorate a path 
+      backwards.
 
 2009-01-24 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- the FPU deactivation command is now assembled once and for all during
-	its first usage.
+    - the FPU deactivation command is now assembled once and for all during
+    its first usage.
 
 2009-01-23 Till Tantau <tantau at users.sourceforge.net>
 
-	- Changed the "ellipse", "circle" and "arc" commands, so that
-	  they take options. This gives a much clearer and more
-	  flexible syntax. Naturally, the old syntax continues to work
-	  as expected. 
-	- Documented svg stuff and added tikz interface. Most useful
-	  for quickly converting svg pictures to tikz pictures...
+    - Changed the "ellipse", "circle" and "arc" commands, so that
+      they take options. This gives a much clearer and more
+      flexible syntax. Naturally, the old syntax continues to work
+      as expected. 
+    - Documented svg stuff and added tikz interface. Most useful
+      for quickly converting svg pictures to tikz pictures...
 
 2009-01-23 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed fpu 'round' method - it rounded mantissas instead of the complete
-	number before.
+    - fixed fpu 'round' method - it rounded mantissas instead of the complete
+    number before.
 
 2009-01-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed some math stuff
-	- Renamed \pgfpathcurvebetweentime* to
-	  \pgfpathcurvebetweentimecontinue. 
-	- Added svg.path lib. It allows one to directly use
-	  the svg syntax for paths (like "M10 10 L 20 20"). Not yet
-	  documented. 
+    - Fixed some math stuff
+    - Renamed \pgfpathcurvebetweentime* to
+      \pgfpathcurvebetweentimecontinue. 
+    - Added svg.path lib. It allows one to directly use
+      the svg syntax for paths (like "M10 10 L 20 20"). Not yet
+      documented. 
 
 2009-01-06 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added tutorial for mind/lecture maps.
+    - Added tutorial for mind/lecture maps.
 
 2009-01-06 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- implemented fpu factorial
-	- if the fixed point library is activated, the fpu will be deactivated
-	automatically.
-	- added draft for FPU documentation
+    - implemented fpu factorial
+    - if the fixed point library is activated, the fpu will be deactivated
+    automatically.
+    - added draft for FPU documentation
 
 2009-01-03 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- fixed bug in fpu sqrt.
-	- added logical commands to fpu.
-	- fixed bug in fpu related to multi-argument-commands
-	- provided feature to disable fpu manually.
+    
+    - fixed bug in fpu sqrt.
+    - added logical commands to fpu.
+    - fixed bug in fpu related to multi-argument-commands
+    - provided feature to disable fpu manually.
 
 2008-12-31 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added support for pgf 2.00 and the fpu (works only with additional
-	and technical work - the fpu file is not all which is needed)
-	- added pow and greaterthan to FPU
-	- fixed some FPU issues
-	- fixed processing of '/tikz/domain' key - it produced N+1 samples instead
-	of N.
+    - added support for pgf 2.00 and the fpu (works only with additional
+    and technical work - the fpu file is not all which is needed)
+    - added pow and greaterthan to FPU
+    - fixed some FPU issues
+    - fixed processing of '/tikz/domain' key - it produced N+1 samples instead
+    of N.
 
 2008-12-30 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added further functions to fpu; improved sanity checking; fixed smaller
-	bugs related to fpu
+    - added further functions to fpu; improved sanity checking; fixed smaller
+    bugs related to fpu
 
 2008-12-29 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- improved internal floating point code: it is possible to change the
-	  low-level representation with minimal number of code lines.
-	- modified low-level floating point representation. All high level code
-	  should be completely unaffected; the changes are backwards compatible.
-	- Wrote first draft of a floating point unit library (fpu) similar in
-	  spirit to the fixed point library of Mark Wibrow.
-	- Moved all floating point math operations (functions) into the fpu
-	  library. It is now necessary to include the library in order to use
-	  floating point math operations. The number formatting methods are still
-	  available as before.
+    - improved internal floating point code: it is possible to change the
+      low-level representation with minimal number of code lines.
+    - modified low-level floating point representation. All high level code
+      should be completely unaffected; the changes are backwards compatible.
+    - Wrote first draft of a floating point unit library (fpu) similar in
+      spirit to the fixed point library of Mark Wibrow.
+    - Moved all floating point math operations (functions) into the fpu
+      library. It is now necessary to include the library in order to use
+      floating point math operations. The number formatting methods are still
+      available as before.
 
 2008-12-28 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added trigonometric functions to floating point unit.
+    - added trigonometric functions to floating point unit.
 
 2008-12-17 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added \colorlet to ConTeXt stuff.
+    - Added \colorlet to ConTeXt stuff.
 
 2008-12-14 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked some more on data visualization stuff. Still in
-	pre-alpha. 
+    - Worked some more on data visualization stuff. Still in
+    pre-alpha. 
 
 2008-12-11 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \pgfmathfloatexp.
+    - added \pgfmathfloatexp.
 
 2008-12-07 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- floating point macros now always use the basic pgf math methods for
-	mantisse computations, even if the fixed point library is active.
+    - floating point macros now always use the basic pgf math methods for
+    mantisse computations, even if the fixed point library is active.
 
 2008-12-06 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- 'mark=none' is now equivalent with 'mark=' (disables plot marks).
-	The previous behavior was to issue \pgfuseplotmark{none} which is
-	equivalent to \relax (and wastes time).
+    - 'mark=none' is now equivalent with 'mark=' (disables plot marks).
+    The previous behavior was to issue \pgfuseplotmark{none} which is
+    equivalent to \relax (and wastes time).
 
 2008-12-03 Till Tantau <tantau at users.sourceforge.net>
 
-	- Changed exp function code in
-	  pgfmathfunctions.basic.code.tex. It is now *much* more
-	  precise for negative values and also more precise for
-	  positive values.
+    - Changed exp function code in
+      pgfmathfunctions.basic.code.tex. It is now *much* more
+      precise for negative values and also more precise for
+      positive values.
 
 2008-11-28 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- optimized \pgfmathfloattofixed for speed (although it introduces
-	redundand zeros)
-	- Added '/pgf/image/include external' command key as public interface 
-	to modify the '\includegraphics' command in image externalization routines.
+    - optimized \pgfmathfloattofixed for speed (although it introduces
+    redundand zeros)
+    - Added '/pgf/image/include external' command key as public interface 
+    to modify the '\includegraphics' command in image externalization routines.
 
 2008-11-24 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed bug with |overlay| option and matrizes: now, cell pictures won't 
-	collapse any more if the matrix has |overlay| enabled. However, the
-	matrix' bounding box won't contribute to the image as desired.
+    - fixed bug with |overlay| option and matrizes: now, cell pictures won't 
+    collapse any more if the matrix has |overlay| enabled. However, the
+    matrix' bounding box won't contribute to the image as desired.
 
 2008-11-23 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- added support for active '!' characters (for example in blue!30!black
-	and french babel setting)
-	- modified processing of 'domain' option: the argument is '\edef'ed such
-	that any potentially active ':' characters will be expanded to non-active
-	ones (avoiding errors in the following processing).
+    
+    - added support for active '!' characters (for example in blue!30!black
+    and french babel setting)
+    - modified processing of 'domain' option: the argument is '\edef'ed such
+    that any potentially active ':' characters will be expanded to non-active
+    ones (avoiding errors in the following processing).
 
 2008-11-13 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed \pgfnodealias bug that caused chains to fail in matrices.
+    - Fixed \pgfnodealias bug that caused chains to fail in matrices.
 
 2008-10-30 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added shading library, mainly containing the new color wheel
-	shading donated by Ken Starks.
+    - Added shading library, mainly containing the new color wheel
+    shading donated by Ken Starks.
 
 2008-10-27 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- More fixes for insertion of spaces.
+    - More fixes for insertion of spaces.
 
 2008-10-27 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added square arrow send by
-	  gvtjongahung at users.sourceforge.net.
-	- Changed pgfutil-context.def so that driver detection should
-	  work once more.
+    - Added square arrow send by
+      gvtjongahung at users.sourceforge.net.
+    - Changed pgfutil-context.def so that driver detection should
+      work once more.
 
 2008-10-27 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed insertion of space when parsing exponents.
+    - Fixed insertion of space when parsing exponents.
 
 2008-10-23 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added int truncation to floating point unit.
+    - added int truncation to floating point unit.
 
 2008-10-22 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added abs, abserror and relerror to floating point unit.
+    - added abs, abserror and relerror to floating point unit.
 
 2008-10-21 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added sqrt for floating point unit, built on top of pgfmathsqrt.
+    - added sqrt for floating point unit, built on top of pgfmathsqrt.
 
 2008-10-09 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed the wrong lengths of support vectors for circles. Used to
-	  be 0.555 (found by trial and error), while the correct value
-	  is 4/3*(sqrt(2)-1) = 0.5522847, which gives much better
-	  circles.
-	  Thanks to Ken Starks for point this out.
+    - Fixed the wrong lengths of support vectors for circles. Used to
+      be 0.555 (found by trial and error), while the correct value
+      is 4/3*(sqrt(2)-1) = 0.5522847, which gives much better
+      circles.
+      Thanks to Ken Starks for point this out.
 
 2008-10-07 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed rounded rectangle right arc bug.
+    - Fixed rounded rectangle right arc bug.
 
 2008-10-06 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Fixed missing treatment of 'assume math mode' in \pgfmathprintnumber'
+    - Fixed missing treatment of 'assume math mode' in \pgfmathprintnumber'
 
 2008-10-05 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed missing switching off of auto anchors in positioning
-	  library. 
+    - Fixed missing switching off of auto anchors in positioning
+      library. 
 
 2008-10-01 Till Tantau <tantau at tcs.uni-luebeck.de>
 
-	- Fixed matrix/pdfsync incompatibility.
+    - Fixed matrix/pdfsync incompatibility.
 
 2008-09-30 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed some parsing bugs with arrays.
-	- Fix for parsing of arrays in TikZ coordinates. 
+    - Fixed some parsing bugs with arrays.
+    - Fix for parsing of arrays in TikZ coordinates. 
 
 2008-09-25 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added number formatting option 'min exponent for 1000 sep'.
+    - Added number formatting option 'min exponent for 1000 sep'.
 
 2008-09-21 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed bug in math parser which inserted spaces into text
-	  or picture.
+    - Fixed bug in math parser which inserted spaces into text
+      or picture.
 
 2008-09-17 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added number formatting style 'sci superscript'
-	Example: formats the number 42 as 4.2^1 instead of 4.2 \cdot 10^1
+    - added number formatting style 'sci superscript'
+    Example: formats the number 42 as 4.2^1 instead of 4.2 \cdot 10^1
 
 2008-09-15 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug "TikZ, the shadow library and ConTeXt MKIV
-	  (LuaTeX)". 
-	
+    - Fixed bug "TikZ, the shadow library and ConTeXt MKIV
+      (LuaTeX)". 
+    
 2008-09-14 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed bug #2105132 for rounded rectangle.
-	- Fixed bug #2044129 for chamfered rectangle.
-	
+    - Fixed bug #2105132 for rounded rectangle.
+    - Fixed bug #2044129 for chamfered rectangle.
+    
 2008-09-12 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added \pgfpathcurvebetweentime.
+    - Added \pgfpathcurvebetweentime.
 
 2008-09-10 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed problem with nodes on a line inside a picture that is
-	  inside a node of another picture. Pictures will now always
-	  start with "pos=.5" set.
+    - Fixed problem with nodes on a line inside a picture that is
+      inside a node of another picture. Pictures will now always
+      start with "pos=.5" set.
 
 2008-09-07 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Slight hack of decorations so that the input path can consist of a
-	  single move to. This enables stuff like 
-	  \path [decoration={some decoration}, decorate] (4,5);
+    - Slight hack of decorations so that the input path can consist of a
+      single move to. This enables stuff like 
+      \path [decoration={some decoration}, decorate] (4,5);
 
 2008-09-03 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed small bug related to '@dec sep mark' and not-a-number in number
-	formatting routines.
+    - fixed small bug related to '@dec sep mark' and not-a-number in number
+    formatting routines.
 
 2008-09-03 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Solutions for path intersections can now be sorted along either path.
-	- \pgfintersectionsolutions is now a macro, not a count register.
+    - Solutions for path intersections can now be sorted along either path.
+    - \pgfintersectionsolutions is now a macro, not a count register.
 
 2008-08-31 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- fix for ``Missing character...' warnings in logfile when using 
-	  foreach.
-	- removed `trim integers' option from foreach as int function 
-	  can now be used.
+    
+    - fix for ``Missing character...' warnings in logfile when using 
+      foreach.
+    - removed `trim integers' option from foreach as int function 
+      can now be used.
 
 2008-08-31 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Rewrote math parser. Anyone who relies on, or has hacked internal 
-	  parser or function macros, or has defined their own functions for
-	  the parser will need to reconsult the code and/or documentation. 
-	- Files for functions definitions split (possibly permanantly) into 
-	  different files.
-	- Scaling of results at the end of the parse is no longer the default 
-	  action. This doesn't break PGF or TikZ, but it may break user code
-	  that depended on this scaling. To turn it back on use 
-	  \let\pgfmathpostparse=\pgfmathscaleresult. 
-	- Modifying existing functions or creating new functions must now be
-	  done using \pgfmathdeclarefunction and \pgfmathredeclarefunction.
-	- Single argument functions do not need parentheses, provided the
-	  funtion is followed by a space, so sin 60 is the same as sin(60).
-	  But! Functions have the highest precedence, so sin 60*\x is the 
-	  same as sin(60)*\x.
-	- Added {} operators for array specification and [] operators for 
-	  array access - see docs for details.
-	- added postfix ! factorial operator.
-	- added c++/java style conditional e.g., \x > 10 ? 13 : 20.
-	- added >=, <=, !=, prefix !, &&, || operators.
-	- added atan2, log10, log2, e, int and frac functions.
-	- adapted cosh, sinh and tanh from Martin Heller.
-	- added lua-style random function for generating random integers.
-	- added Mod function (note capital letter). Uses floored division
-	  and is never negative.
-	- min, max, veclen and pow can now be nested in any argument 
-	  position.
-	- min and max can now take a variable number of arguments.
-	- For compatability \pgfmathmax and \pgfmathmin still take two 
-	  arguments (although these can contain comma separated expressions). 
-	  However \pgfmathmin@ and \pgfmathmax@ now only take
-	  one argument in the form \pgfmathmin@{{1}{2}{3}{4}{5}} (for 5 
-	  arguments).
-	- added hex, Hex, bin, and oct functions. These functions will not
-		work properly if the post-parse scaling is turned back on.
-	- 0 prefix for integers now specifies an octal number which is 
-	  automatically converted to base 10.
-	- 0x or 0X prefix for integers now specifies a hexadecimal number, 
-	  which is automatically converted to base 10. 
-	- 0b or 0B prefix for integers now specifies a binary number, 
-	  which is automatically converted to base 10.
-	- "" characters turn off parsing (!) for part of an expression.
-	- added width, height, and depth functions for text e.g., 
-	  width("Some text"), but as an expression is \edef'ed before
-	  parsing other commands will have to be `protected' e.g.,
-	  width("\noexpand\Huge Some text").
-	- bugfix for tan and cot. 
+    - Rewrote math parser. Anyone who relies on, or has hacked internal 
+      parser or function macros, or has defined their own functions for
+      the parser will need to reconsult the code and/or documentation. 
+    - Files for functions definitions split (possibly permanantly) into 
+      different files.
+    - Scaling of results at the end of the parse is no longer the default 
+      action. This doesn't break PGF or TikZ, but it may break user code
+      that depended on this scaling. To turn it back on use 
+      \let\pgfmathpostparse=\pgfmathscaleresult. 
+    - Modifying existing functions or creating new functions must now be
+      done using \pgfmathdeclarefunction and \pgfmathredeclarefunction.
+    - Single argument functions do not need parentheses, provided the
+      funtion is followed by a space, so sin 60 is the same as sin(60).
+      But! Functions have the highest precedence, so sin 60*\x is the 
+      same as sin(60)*\x.
+    - Added {} operators for array specification and [] operators for 
+      array access - see docs for details.
+    - added postfix ! factorial operator.
+    - added c++/java style conditional e.g., \x > 10 ? 13 : 20.
+    - added >=, <=, !=, prefix !, &&, || operators.
+    - added atan2, log10, log2, e, int and frac functions.
+    - adapted cosh, sinh and tanh from Martin Heller.
+    - added lua-style random function for generating random integers.
+    - added Mod function (note capital letter). Uses floored division
+      and is never negative.
+    - min, max, veclen and pow can now be nested in any argument 
+      position.
+    - min and max can now take a variable number of arguments.
+    - For compatability \pgfmathmax and \pgfmathmin still take two 
+      arguments (although these can contain comma separated expressions). 
+      However \pgfmathmin@ and \pgfmathmax@ now only take
+      one argument in the form \pgfmathmin@{{1}{2}{3}{4}{5}} (for 5 
+      arguments).
+    - added hex, Hex, bin, and oct functions. These functions will not
+        work properly if the post-parse scaling is turned back on.
+    - 0 prefix for integers now specifies an octal number which is 
+      automatically converted to base 10.
+    - 0x or 0X prefix for integers now specifies a hexadecimal number, 
+      which is automatically converted to base 10. 
+    - 0b or 0B prefix for integers now specifies a binary number, 
+      which is automatically converted to base 10.
+    - "" characters turn off parsing (!) for part of an expression.
+    - added width, height, and depth functions for text e.g., 
+      width("Some text"), but as an expression is \edef'ed before
+      parsing other commands will have to be `protected' e.g.,
+      width("\noexpand\Huge Some text").
+    - bugfix for tan and cot. 
 
 2008-08-27 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added '/tikz/external/export={true,false}' key for externalization
-	library.
+    - added '/tikz/external/export={true,false}' key for externalization
+    library.
 
 2008-08-05 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added documentation for basic layer externalization and baseline option.
+    - added documentation for basic layer externalization and baseline option.
 
 2008-07-28 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added 'showpos' key to number printing (and alias 'print sign').
+    - added 'showpos' key to number printing (and alias 'print sign').
 
 2008-07-22 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- fixed typo in pgfmathfloat.code.tex
-	- added 'optimize command away=\macro' key to externalization library. It
-	allows to discard unnecessary and possibly expensive user macros during
-	export (unnecessary = not in selected picture).
+    - fixed typo in pgfmathfloat.code.tex
+    - added 'optimize command away=\macro' key to externalization library. It
+    allows to discard unnecessary and possibly expensive user macros during
+    export (unnecessary = not in selected picture).
 
 2008-07-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Fixed bug in system layer path collecting. Very long paths
-	are now processed more efficiently (the bug disabled an optimization).
+    - Fixed bug in system layer path collecting. Very long paths
+    are now processed more efficiently (the bug disabled an optimization).
 
 2008-07-14 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added "marker" positions into the output of number formatting routines
-	to find period positions (even if no period is typeset) and exponent
-	positions. Allows alignment within auxiliary routines.
+    - added "marker" positions into the output of number formatting routines
+    to find period positions (even if no period is typeset) and exponent
+    positions. Allows alignment within auxiliary routines.
 
 2008-07-14 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed dash phase bug.
-	- Fixed missing library include in automata lib.
-	- Added "align" option. "text ragged" and friends are now
-	  deprecated. Text width need no longer not, but can, be
-	  specified. The following now has the expected effect: \node
-	  [draw,align=center] {Hello\\world.}; 
+    - Fixed dash phase bug.
+    - Fixed missing library include in automata lib.
+    - Added "align" option. "text ragged" and friends are now
+      deprecated. Text width need no longer not, but can, be
+      specified. The following now has the expected effect: \node
+      [draw,align=center] {Hello\\world.}; 
 
 2008-07-10 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \pgfqpointxy and \pgfqpointxyz to complement the "quick" point
-	commands in basic layer.
+    - added \pgfqpointxy and \pgfqpointxyz to complement the "quick" point
+    commands in basic layer.
 
 2008-07-09 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added 'every mark' style.
-	- 'mark options' simply overwrites 'every mark' (consistent with its old
-	definition)
+    - added 'every mark' style.
+    - 'mark options' simply overwrites 'every mark' (consistent with its old
+    definition)
 
 2008-07-07 Till Tantau <tantau at users.sourceforge.net>
 
-	- Finished circuit library and documentation (well, some
-	  shapes still missing, but that's something users should
-	  contribute). 
+    - Finished circuit library and documentation (well, some
+      shapes still missing, but that's something users should
+      contribute). 
 
 2008-07-01 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- the external library now handles active double quotes ",
-	  single quotes ', and active semicolons ';' in its system call
-	  correctly. Furthermore, \\ will expand to a normal
-	  backslash. The initial system call now uses double quotes
-	  for indows compatibility, it also contains the shell-escape
-	  feature for gnuplot invocations.
+    - the external library now handles active double quotes ",
+      single quotes ', and active semicolons ';' in its system call
+      correctly. Furthermore, \\ will expand to a normal
+      backslash. The initial system call now uses double quotes
+      for indows compatibility, it also contains the shell-escape
+      feature for gnuplot invocations.
 
 2008-06-30 Till Tantau <tantau at users.sourceforge.net>
 
-	- Did some documentation of circuit lib.
-	- Removed the separated documentation of the intersection
-	  library and made this documentation part of the main
-	  documentation. 
-	- The intersection cs is now deprecated, the documentation
-	  is now only based on the intersection lib. 
-	- Added a "by" option so that "name intersections={of=A and
-	  B,by={c,d,e}}" will create an alias c for intersection-1, d
-	  for intersection-2 and e for intersection-3.
-	- Renamed "path name" to "name path" in the intersection
-	  lib. This is more consistent with "name intersections".
+    - Did some documentation of circuit lib.
+    - Removed the separated documentation of the intersection
+      library and made this documentation part of the main
+      documentation. 
+    - The intersection cs is now deprecated, the documentation
+      is now only based on the intersection lib. 
+    - Added a "by" option so that "name intersections={of=A and
+      B,by={c,d,e}}" will create an alias c for intersection-1, d
+      for intersection-2 and e for intersection-3.
+    - Renamed "path name" to "name path" in the intersection
+      lib. This is more consistent with "name intersections".
 
 2008-06-29 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Minor changes on float stuff, wrote pgfmathfloatmultiply and
-	  pgfmathfloatdivide on top of pgfmathmultiply and pgfmathdivide
+    - Minor changes on float stuff, wrote pgfmathfloatmultiply and
+      pgfmathfloatdivide on top of pgfmathmultiply and pgfmathdivide
 
 2008-06-29 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added `Fixed Point Arithmetic' library, which provides
-	  a parsing interface to the fp package. Dealing with plotting
-	  files still a bit crude. 
-	- This library means the manual now requires the fp pacakge 
-	  to compile.
-	- Fixed floor function for negative numbers.
-	- Fixed \pgfmathsetseed.
-	- Font and group fix for external documentation.
+    - Added `Fixed Point Arithmetic' library, which provides
+      a parsing interface to the fp package. Dealing with plotting
+      files still a bit crude. 
+    - This library means the manual now requires the fp pacakge 
+      to compile.
+    - Fixed floor function for negative numbers.
+    - Fixed \pgfmathsetseed.
+    - Font and group fix for external documentation.
 
 2008-06-27 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Complete change of TikZ intersections (PGF unchanged).
-	- Slight hack of the TikZ scopes library to permit local
-	  path naming. Should work...
+    - Complete change of TikZ intersections (PGF unchanged).
+    - Slight hack of the TikZ scopes library to permit local
+      path naming. Should work...
     
 2008-06-26 Till Tantau <tantau at users.sourceforge.net>
 
-	- Continued with circuit library.
-	- Introduced subdirectories inside the pgf library
-	  directory and moved libs into them.
-	  You may need to update your checkout.
+    - Continued with circuit library.
+    - Introduced subdirectories inside the pgf library
+      directory and moved libs into them.
+      You may need to update your checkout.
 
 2008-06-26 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- The external library now typesets as horizontal material by issueing
-	  \leavevmode. This fixes an inconsistency with the normal tikzpictures.
+    - The external library now typesets as horizontal material by issueing
+      \leavevmode. This fixes an inconsistency with the normal tikzpictures.
 
 2008-06-25 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added intersection library + documentation for 
-	  intersecting ``named'' paths.
+    - Added intersection library + documentation for 
+      intersecting ``named'' paths.
   
 2008-06-25 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Fixed bug in external library. Now, strings like '#1' occuring 
-	  somewhere in an image is collected correctly.
+    - Fixed bug in external library. Now, strings like '#1' occuring 
+      somewhere in an image is collected correctly.
 
 2008-06-24 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Removed new intersection stuff. Need to restart from scratch...
+    - Removed new intersection stuff. Need to restart from scratch...
 
 2008-06-23 Till Tantau <tantau at users.sourceforge.net>
 
-	- Started working on circuit library documentation.
+    - Started working on circuit library documentation.
 
 2008-06-23 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added PGF code and docs for intersections of two curves and 
-	  intersections of a line and a curve.
-	- Fixed bug in foreach code when registers are used with dots
-	  statement.
-			  
+    - Added PGF code and docs for intersections of two curves and 
+      intersections of a line and a curve.
+    - Fixed bug in foreach code when registers are used with dots
+      statement.
+              
 2008-06-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Created first version of circuit libraries for electrical
-	  engineering (circuits.ee.*). 
-	- Added libraries so that ee circuits and logical circuits can
-	  be accessed using the same interface. (circuits.logic.*)
-	- The tikz lib shapes.gates.logic.* will no
-	  longer be needed, the circuits.logic.* will replace them. (The
-	  pgf libs shapes.gates.* are still used as before, however.)
-	- Minor patch in shapes.gates.logic.US so that the .0 and .180
-	  anchors of a not gate or a buffer gate are the same as the
-	  input or output anchors.
-	- All this is not documented, yet.
-	- Worked some more on dv stuff, but nothing to "show", yet.
+    - Created first version of circuit libraries for electrical
+      engineering (circuits.ee.*). 
+    - Added libraries so that ee circuits and logical circuits can
+      be accessed using the same interface. (circuits.logic.*)
+    - The tikz lib shapes.gates.logic.* will no
+      longer be needed, the circuits.logic.* will replace them. (The
+      pgf libs shapes.gates.* are still used as before, however.)
+    - Minor patch in shapes.gates.logic.US so that the .0 and .180
+      anchors of a not gate or a buffer gate are the same as the
+      input or output anchors.
+    - All this is not documented, yet.
+    - Worked some more on dv stuff, but nothing to "show", yet.
 
 2008-06-21 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed parsing bug in foreach code.
-	- Added "rotate fit" key to fit library, so (e.g.) a rotated 
-	  rectangle can be fitted around nodes/coordinates.
+    - Fixed parsing bug in foreach code.
+    - Added "rotate fit" key to fit library, so (e.g.) a rotated 
+      rectangle can be fitted around nodes/coordinates.
 
 2008-06-21 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added documentation for tikz 'external' library.
-	- created pgfexternalwithdepth.tex file to use the 'baseline' information.
-	- improved some issues of the external library.
-	- Added '/pgf/images/draft' option
-	- Modified implementation of draft images to show the image file name
-	instead of the internal image name
+    - Added documentation for tikz 'external' library.
+    - created pgfexternalwithdepth.tex file to use the 'baseline' information.
+    - improved some issues of the external library.
+    - Added '/pgf/images/draft' option
+    - Modified implementation of draft images to show the image file name
+    instead of the internal image name
 
 2008-06-19 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added tikz library 'external' which allows automatic or semiautomatic 
-	  export of each tikzpicture to pdf. Documentation is not yet ready.
-	- Added self-contained latex package tikzexternal.sty to read those images
-	  without tikz/pgf installed.
-	- Added support for the 'baseline' option in \beginpgfgraphicnamed ... \endpgfgraphicnamed
-	  by storing the box depth into a separate file.
+    - Added tikz library 'external' which allows automatic or semiautomatic 
+      export of each tikzpicture to pdf. Documentation is not yet ready.
+    - Added self-contained latex package tikzexternal.sty to read those images
+      without tikz/pgf installed.
+    - Added support for the 'baseline' option in \beginpgfgraphicnamed ... \endpgfgraphicnamed
+      by storing the box depth into a separate file.
 
 2008-06-19 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added first ideas for a circuit library.
-	- Bugfixes in scoping behaviour.
-	- Changed scoping rules for to path operation: Options are now
-	  local. This may break existing code, but is much more
-	  consistent with everything else and removes other problems. 
-	- Patched mindmap lib to account for these changed rules.
-	- Added insert path option.
-	- Deprecated "after node path". Use "append after command" and
-	  "prefix after command" instead.
-	- Moved datavisualization libraries to separate subdirectory.
+    - Added first ideas for a circuit library.
+    - Bugfixes in scoping behaviour.
+    - Changed scoping rules for to path operation: Options are now
+      local. This may break existing code, but is much more
+      consistent with everything else and removes other problems. 
+    - Patched mindmap lib to account for these changed rules.
+    - Added insert path option.
+    - Deprecated "after node path". Use "append after command" and
+      "prefix after command" instead.
+    - Moved datavisualization libraries to separate subdirectory.
 
 2008-06-18 Till Tantau <tantau at users.sourceforge.net>
 
-	- Changed label and pin options once again, to allow more
-	  flexibility. In particular, the angle can now be
-	  omitted. Also, for rotated main nodes the anchors are now
-	  chosen in more sensible ways.
+    - Changed label and pin options once again, to allow more
+      flexibility. In particular, the angle can now be
+      omitted. Also, for rotated main nodes the anchors are now
+      chosen in more sensible ways.
 
 2008-06-16 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added tiny little turtle graphics library for fun.
-	- Changed scoping rules for \foreach statement on a path: the
-	  last coordinate is now persistent not only after the foreach
-	  statement, but also between different iterations.
-	- Changed positioning of "label" when you attach a label to a
-	  transformed shape. The position is now absolute with respect
-	  to the page, unless the "transform shape" option is used.
-	
+    - Added tiny little turtle graphics library for fun.
+    - Changed scoping rules for \foreach statement on a path: the
+      last coordinate is now persistent not only after the foreach
+      statement, but also between different iterations.
+    - Changed positioning of "label" when you attach a label to a
+      transformed shape. The position is now absolute with respect
+      to the page, unless the "transform shape" option is used.
+    
 2008-06-11 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed the bug fix for character checking in foreach.
-	- Updates and fixes for new foreach code.
+    - Fixed the bug fix for character checking in foreach.
+    - Updates and fixes for new foreach code.
 
 2008-06-13 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug in new \foreach stuff that causes an error on
-	  things like \foreach \i in {1,...,\foo}. If a list element
-	  is a macro, no is-it-a-character check is done.
+    - Fixed bug in new \foreach stuff that causes an error on
+      things like \foreach \i in {1,...,\foo}. If a list element
+      is a macro, no is-it-a-character check is done.
 
 2008-06-11 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Checked in proposed \foreach extensions. Possibly the
-	  extensions would be better contained in a pgflibrary...
-	- list items can now be evaluated.
-	- dots replacement is context sensitive.
-	- sequences indicated by dots can be character sequences.
-	- a list item can be ``remembered'' in the next iteration.
-	- access to the number of the current item in the list is
-	  provided. 
+    - Checked in proposed \foreach extensions. Possibly the
+      extensions would be better contained in a pgflibrary...
+    - list items can now be evaluated.
+    - dots replacement is context sensitive.
+    - sequences indicated by dots can be character sequences.
+    - a list item can be ``remembered'' in the next iteration.
+    - access to the number of the current item in the list is
+      provided. 
 
 2008-06-09 Till Tantau <tantau at users.sourceforge.net>
 
-	- Worked a bit on data visualization stuff.
-	
+    - Worked a bit on data visualization stuff.
+    
 2008-06-07 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added '/pgf/number format/1000 sep' and 'dec sep' shortcut 
-	  styles which simply call 'set thousands separator' and 'set 
-	  decimal separator'. Those option are somewhat long...
+    - Added '/pgf/number format/1000 sep' and 'dec sep' shortcut 
+      styles which simply call 'set thousands separator' and 'set 
+      decimal separator'. Those option are somewhat long...
 
 2008-06-06 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed the "local bounding box" option so that it honors the
-	  "relevant for picture size"-if.
-	
+    - Fixed the "local bounding box" option so that it honors the
+      "relevant for picture size"-if.
+    
 2008-06-04 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed buggy "mid left" and "mid right" options.
-	- Added "between positions" option to the "mark" option. This
-	  makes it possible to create paths with "repeated arrows along
-	  the path". This did not work before.
+    - Fixed buggy "mid left" and "mid right" options.
+    - Added "between positions" option to the "mark" option. This
+      makes it possible to create paths with "repeated arrows along
+      the path". This did not work before.
 
 2008-06-03 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added '/pgf/number format/assume math mode' to disable math checks. 
-	  This allows to assemble tabulars, apply \pgfmathprintnumber to each cell
-	  and use the dcolumn package to align at decimal separators (no
-	  documentation for that feature yet)
+    - Added '/pgf/number format/assume math mode' to disable math checks. 
+      This allows to assemble tabulars, apply \pgfmathprintnumber to each cell
+      and use the dcolumn package to align at decimal separators (no
+      documentation for that feature yet)
 
 2008-06-02 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed pgfpages in conjunction with everyshi.
+    - Fixed pgfpages in conjunction with everyshi.
 
 2008-05-31 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- Semantics of |/pgf/number format/fixed zerofill| changed: it now simply
-	  sets a boolean which affects all numbers in fixed format; it does not
-	  SET fixed format. The same holds for sci zerofill.
+    
+    - Semantics of |/pgf/number format/fixed zerofill| changed: it now simply
+      sets a boolean which affects all numbers in fixed format; it does not
+      SET fixed format. The same holds for sci zerofill.
 
 2008-05-30 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Provided \pgfmathprintnumberto macro in addition to
-	  \pgfmathprintnumber.
+    - Provided \pgfmathprintnumberto macro in addition to
+      \pgfmathprintnumber.
 
 2008-05-22 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Revised Lindenmayer system stuff. Documentation should 
-	  now be up to date.
+    - Revised Lindenmayer system stuff. Documentation should 
+      now be up to date.
 
 2008-05-22 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added 'xbar interval' and 'ybar interval' plot handlers.
-	- Moved plot handler options to /pgf key tree.
-	- added 'bar shift' option.
-	- bar width option is now evaluated when needed.
-	- Added documentation for plot handler library changes and for tikz-plot
-	  interfaces.
-	- Modified pgf manual macros: codeexamples section now employs pgfkeys,
-	  xkeyval no longer required. Introduced style 'every codeexample' to
-	  maintain compatibility and allow customization for users.
+    - Added 'xbar interval' and 'ybar interval' plot handlers.
+    - Moved plot handler options to /pgf key tree.
+    - added 'bar shift' option.
+    - bar width option is now evaluated when needed.
+    - Added documentation for plot handler library changes and for tikz-plot
+      interfaces.
+    - Modified pgf manual macros: codeexamples section now employs pgfkeys,
+      xkeyval no longer required. Introduced style 'every codeexample' to
+      maintain compatibility and allow customization for users.
 
 2008-05-21 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added missing documentation of moveto-decoration.
+    - Added missing documentation of moveto-decoration.
 
 2008-05-20 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Changed the processing of \pgflsystemstep. Now a TeX
-	  dimension, it permits a symbol to shorten the step.
+    - Changed the processing of \pgflsystemstep. Now a TeX
+      dimension, it permits a symbol to shorten the step.
 
 2008-05-19 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added Lindemayer system drawing library.
-	- Renamed the ranomization keys for the step and angle.
-	- Updated the L-system docs.
+    - Added Lindemayer system drawing library.
+    - Renamed the ranomization keys for the step and angle.
+    - Updated the L-system docs.
 
 2008-05-19 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added documentation of oo-subsystem.
-	- Started documentation of data visualization-subsystem.
-	- Fixed hyperlink problem in dvipdfm(x)/xetex.
-	- Fixed typos in Lindemayer system doc.
+    - Added documentation of oo-subsystem.
+    - Started documentation of data visualization-subsystem.
+    - Fixed hyperlink problem in dvipdfm(x)/xetex.
+    - Fixed typos in Lindemayer system doc.
 
 2008-05-17 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added \pgfmathfloatadd, \pgfmathfloatsubtract and
-	\pgfmathfloatmultiplyfixed based on pgf's normal math parser
-	- Added tests for float arithmetics
-	- Added \pgfmathfloattoextentedprecision for 8-digit mantisse precision
-	- Added documentation for these methods
-	- Added basic layer input stream methods to set zero levels for [xy]comb/[xy]bar;
-	allows to start bars at different offsets than x=0 / y=0.
-	- Added documentation for zero level streams.
+    - Added \pgfmathfloatadd, \pgfmathfloatsubtract and
+    \pgfmathfloatmultiplyfixed based on pgf's normal math parser
+    - Added tests for float arithmetics
+    - Added \pgfmathfloattoextentedprecision for 8-digit mantisse precision
+    - Added documentation for these methods
+    - Added basic layer input stream methods to set zero levels for [xy]comb/[xy]bar;
+    allows to start bars at different offsets than x=0 / y=0.
+    - Added documentation for zero level streams.
 
 2008-05-15 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added "path picture" option, mostly for the implementation
-	  of the corrected mindmap connecting bars.
-	- Fixed buggy code of mindmap connect bars: Shading angles
-	  where sometimes wrong and shading was sometimes at the wrong
-	  position.  
+    - Added "path picture" option, mostly for the implementation
+      of the corrected mindmap connecting bars.
+    - Fixed buggy code of mindmap connect bars: Shading angles
+      where sometimes wrong and shading was sometimes at the wrong
+      position.  
 
 2008-05-14 Till Tantau <tantau at users.sourceforge.net>
 
-	- Completely rewrote management of pdf resources. This affects
-	  pdftex, dvipdfm, dvipdfmx and xetex backends and all front
-	  ends. They should now all work together in harmony, as far
-	  as this is supported by them.
-	- Completely rewrote driver detection in plain and context
-	  mode. 
-	- dvipdfmx and xetex now use \special{pdf:literal direct},
-	  which can *considerably* reduce file sizes (up to a factor
-	  of 2).
+    - Completely rewrote management of pdf resources. This affects
+      pdftex, dvipdfm, dvipdfmx and xetex backends and all front
+      ends. They should now all work together in harmony, as far
+      as this is supported by them.
+    - Completely rewrote driver detection in plain and context
+      mode. 
+    - dvipdfmx and xetex now use \special{pdf:literal direct},
+      which can *considerably* reduce file sizes (up to a factor
+      of 2).
 
 2008-05-14 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed compatability issue with old calc code.
-	
+    - Fixed compatability issue with old calc code.
+    
 2008-05-13 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- documented '.lasttry' key handler
-	- introduced documentation for key filtering routines (as \input section
-	in pgfmanual-en-pgfkeys.tex). Main section of pgfkeys not really updated
-	yet; I only removed the 'family limitation' item in the introduction.
+    - documented '.lasttry' key handler
+    - introduced documentation for key filtering routines (as \input section
+    in pgfmanual-en-pgfkeys.tex). Main section of pgfkeys not really updated
+    yet; I only removed the 'family limitation' item in the introduction.
 
 2008-05-11 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Multiple fixes for signal shape.
+    - Multiple fixes for signal shape.
 
 2008-05-03 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- added \pgfplotbarwidth and docs
-	- used \pgfmathparse to assign \pgfsetplotbarwidth
-	- added 'const plot mark right' to plot handler library to complete the
-	different variants of left/right connected/jump handlers.
+    - added \pgfplotbarwidth and docs
+    - used \pgfmathparse to assign \pgfsetplotbarwidth
+    - added 'const plot mark right' to plot handler library to complete the
+    different variants of left/right connected/jump handlers.
 
 2008-05-01 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed parser for expressions that begin and end with braces.
+    - Fixed parser for expressions that begin and end with braces.
 
 2008-04-27 Christian Feuersaenger <ludewich at users.sourceforge.net>
-	
-	- Added \pgfmathapproxequalto operation and documentation below
-	\pgfmathequalto
-	- Added some user-interface methods to floating point arithmetics
-	- Added options
-		/pgf/number format/set decimal separator
-		/pgf/number format/set thousands separator
-		/pgf/number format/skip 0.
-	- Added documentation for floating point arithmetics
-	- Added documentation for number printing
+    
+    - Added \pgfmathapproxequalto operation and documentation below
+    \pgfmathequalto
+    - Added some user-interface methods to floating point arithmetics
+    - Added options
+        /pgf/number format/set decimal separator
+        /pgf/number format/set thousands separator
+        /pgf/number format/skip 0.
+    - Added documentation for floating point arithmetics
+    - Added documentation for number printing
 
 2008-04-26 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added PGF plot handlers to plot handler library:
-		- \pgfplothandlerxbar
-		- \pgfplothandlerybar
-	  with parameter \pgfsetplotbarwidth{} and
-	    - \pgfplothandlerconstantlineto
-		- \pgfplothandlerjumpmarkleft
-		- \pgfplothandlerjumpmarkright
-	- Added Tikz-Plot handlers
-		- /tikz/xbar
-		- /tikz/ybar
-	  with option '/tikz/bar width' and
-		- /tikz/const plot
-		- /tikz/jump mark left
-		- /tikz/jump mark right
-	- Added documentation for new plot handlers to Tikz- and plot handler
-	section in manual
+    - Added PGF plot handlers to plot handler library:
+        - \pgfplothandlerxbar
+        - \pgfplothandlerybar
+      with parameter \pgfsetplotbarwidth{} and
+        - \pgfplothandlerconstantlineto
+        - \pgfplothandlerjumpmarkleft
+        - \pgfplothandlerjumpmarkright
+    - Added Tikz-Plot handlers
+        - /tikz/xbar
+        - /tikz/ybar
+      with option '/tikz/bar width' and
+        - /tikz/const plot
+        - /tikz/jump mark left
+        - /tikz/jump mark right
+    - Added documentation for new plot handlers to Tikz- and plot handler
+    section in manual
 
 2008-04-23 Till Tantau <tantau at users.sourceforge.net>
 
-	- Documented changed double line handling.
-	- Made some arrow tips work with double lines.
+    - Documented changed double line handling.
+    - Made some arrow tips work with double lines.
 
 2008-04-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added (not yet documented) "inner lines", which move the
-	  double line mechanism from tikz to the basic layer. This
-	  allows the definition of special arrow tips for double lines.
-	- Added (not yet documented) new arrow tip "implies" using
-	  this mechanism.
+    - Added (not yet documented) "inner lines", which move the
+      double line mechanism from tikz to the basic layer. This
+      allows the definition of special arrow tips for double lines.
+    - Added (not yet documented) new arrow tip "implies" using
+      this mechanism.
 
 2008-04-21 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- New version of rectangle split shape. Now supports horizontal
-	  as well as vertical spliting. Also supports up to 20 parts. 
+    
+    - New version of rectangle split shape. Now supports horizontal
+      as well as vertical spliting. Also supports up to 20 parts. 
 
 2008-04-17 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added pgfkeysfiltered.code.tex which provides key filtering
-	  and provides key-selection utilities like xkeyvals families
-	- changed pgfkeys.code.tex to '\input' pgfkeysfiltered.code.tex
+    - Added pgfkeysfiltered.code.tex which provides key filtering
+      and provides key-selection utilities like xkeyvals families
+    - changed pgfkeys.code.tex to '\input' pgfkeysfiltered.code.tex
 
 2008-04-14 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added \tikzaddtikzonlycommandshortcutlet and
-	  \tikzaddtikzonlycommandshortcutdef to install shortcut commands at the
-	  beginning of tikzpicture.
-	- pgfkeys.code.tex: fixed incompatibility .try with .is choice
+    - Added \tikzaddtikzonlycommandshortcutlet and
+      \tikzaddtikzonlycommandshortcutdef to install shortcut commands at the
+      beginning of tikzpicture.
+    - pgfkeys.code.tex: fixed incompatibility .try with .is choice
 
 2008-04-10 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed patterns in dvips mode (were broken).
-	
+    - Fixed patterns in dvips mode (were broken).
+    
 2008-04-03 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Switched to everyshi in latex mode to hack into
-	  \shipout. Wrote direct code to hack into \shipout in plain
-	  mode. Hacking into \shipout in Context is still unclear.
-	- Added space arrow.
-	
+    
+    - Switched to everyshi in latex mode to hack into
+      \shipout. Wrote direct code to hack into \shipout in plain
+      mode. Hacking into \shipout in Context is still unclear.
+    - Added space arrow.
+    
 2008-4-02 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- Reimplemented parsing of operands. 
+    
+    - Reimplemented parsing of operands. 
 
 2008-04-01 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added cirlce solidus shape by Manuel Lacruz.
+    - Added cirlce solidus shape by Manuel Lacruz.
 
 2008-03-19 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- `curve control points' decoration no longer exists. It is 
-	  replaced by the `show path construction' decoration.
-	- added code + docs for defining changable patterns.
-	- Parser altered to access \pgfmathfloatparsenumber when 
-	  \ifpgfmathfloat is true (old interface to \pgfmathfloat deleted).
+    
+    - `curve control points' decoration no longer exists. It is 
+      replaced by the `show path construction' decoration.
+    - added code + docs for defining changable patterns.
+    - Parser altered to access \pgfmathfloatparsenumber when 
+      \ifpgfmathfloat is true (old interface to \pgfmathfloat deleted).
 
 2008-03-18 Christian Feuersaenger <ludewich at users.sourceforge.net>
 
-	- Added generic/pgf/math/pgfmathfloat.code.tex
-	- Modified pgfmath.code.tex to include pgfmathfloat.code.tex
-	- Added generic/pgf/testsuite/mathtest/pgfmathtestsuite.tex [dvipdfm/pdflatex]
-	  which provides testing for pgfmathfloat.code.tex
+    - Added generic/pgf/math/pgfmathfloat.code.tex
+    - Modified pgfmath.code.tex to include pgfmathfloat.code.tex
+    - Added generic/pgf/testsuite/mathtest/pgfmathtestsuite.tex [dvipdfm/pdflatex]
+      which provides testing for pgfmathfloat.code.tex
 
 2008-03-17 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed minimum width handling in rounded rectangle shape. 
+    - Fixed minimum width handling in rounded rectangle shape. 
 
 2008-03-12 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added key for rectangle split to ignore empty parts.
-	- Extended \pgfshadecolortorgb to define macros for the
-	  individual color components.
+    - Added key for rectangle split to ignore empty parts.
+    - Extended \pgfshadecolortorgb to define macros for the
+      individual color components.
 
 2008-03-08 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added `curve control points' decoration for drawing
-	  curve controls. NB: names/keys may change.
+    - Added `curve control points' decoration for drawing
+      curve controls. NB: names/keys may change.
 
 2008-03-07 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fix for (some) `hidden' bugs: ``Missing character: 
-	  There is no <char> in font nullfont!''. This is usually
-	  only seen in log file. Fixed for star, circular sector
-	  and math macros.
+    - Fix for (some) `hidden' bugs: ``Missing character: 
+      There is no <char> in font nullfont!''. This is usually
+      only seen in log file. Fixed for star, circular sector
+      and math macros.
 
 2008-03-03 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed documentation "placment" replaced by "positioning"
-	- Fixed ConTeXt page resource problem. (ConTeXt support is
-	  still not as smooth as support of other formats)
-	- Checked in some data visualization stuff, without any
-	  documentation. Everything still likely to change
-	  completely. 
-	- Moved module management to pgfutil.
-	- Added support for simple oo-programming, not documented. 
+    - Fixed documentation "placment" replaced by "positioning"
+    - Fixed ConTeXt page resource problem. (ConTeXt support is
+      still not as smooth as support of other formats)
+    - Checked in some data visualization stuff, without any
+      documentation. Everything still likely to change
+      completely. 
+    - Moved module management to pgfutil.
+    - Added support for simple oo-programming, not documented. 
 
 2008-02-26 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed bug in pgfkeysaddvalue.
-	- Fixed bug of stack leak in function shadings in postscript.
-	- Fixed missing image inclusion documentation.
-	- Fixed atan bug in documentation example.
-	- Fixed missing dependency of chains--positioning library
-	- Fixed missing dependency of mindmap--decorations library
+    - Fixed bug in pgfkeysaddvalue.
+    - Fixed bug of stack leak in function shadings in postscript.
+    - Fixed missing image inclusion documentation.
+    - Fixed atan bug in documentation example.
+    - Fixed missing dependency of chains--positioning library
+    - Fixed missing dependency of mindmap--decorations library
 
 2008-02-20 Till Tantau <tantau at users.sourceforge.net>
 
-	Released version 2.00
+    Released version 2.00
 
 2008-02-14 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed "initial"/"accepting" distance bug.
-	- Fixed wrong intersection computation bug.
-	
+    - Fixed "initial"/"accepting" distance bug.
+    - Fixed wrong intersection computation bug.
+    
 2008-02-13 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added "local bounding box" option for Fabien...
+    - Added "local bounding box" option for Fabien...
 
 2008-02-12 Till Tantau <tantau at users.sourceforge.net>
 
-	- Finished chains and chain tutorial.
-	- Fixed height of rounded rectangle shape.
-	
+    - Finished chains and chain tutorial.
+    - Fixed height of rounded rectangle shape.
+    
 2008-02-11 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added "auto end on length" and "auto corner on length"
-	  options to decorations.
-	- Added "if input segment is closepath" option to
-	  decorations. 
-	- Renamed "subpath" in decoration code to "inputsegment". In
-	  the pdf-specification (and in the rest of the pgf manual) a
-	  path is made up of subpath, which are started by movetos,
-	  and these in turn are made up of segments. In decorations,
-	  segments used to be called subpaths, which was too
-	  confusing... 
-	- More renaming in chains, but its stabilizing now.
-	- Started a tutorial on chains.
-	
+    - Added "auto end on length" and "auto corner on length"
+      options to decorations.
+    - Added "if input segment is closepath" option to
+      decorations. 
+    - Renamed "subpath" in decoration code to "inputsegment". In
+      the pdf-specification (and in the rest of the pgf manual) a
+      path is made up of subpath, which are started by movetos,
+      and these in turn are made up of segments. In decorations,
+      segments used to be called subpaths, which was too
+      confusing... 
+    - More renaming in chains, but its stabilizing now.
+    - Started a tutorial on chains.
+    
 2008-02-10 Till Tantau <tantau at users.sourceforge.net>
 
-	- Moved chain part inside "positioning" into "chains"
-	  library. 
-	- Renamed things in the chains library, yet again and added
-	  branches.
-	- Fixed bug with "xyz of" placements.
+    - Moved chain part inside "positioning" into "chains"
+      library. 
+    - Renamed things in the chains library, yet again and added
+      branches.
+    - Fixed bug with "xyz of" placements.
 
 2008-02-08 Till Tantau <tantau at users.sourceforge.net>
 
-	- Renamed "placements" library to "positioning".
-	- Renamed and changed all chain commands.
-	- Added scopes library.
-	- Renamed cap and join to line cap and line join (but old ones
-	  are still available).
+    - Renamed "placements" library to "positioning".
+    - Renamed and changed all chain commands.
+    - Added scopes library.
+    - Renamed cap and join to line cap and line join (but old ones
+      are still available).
 
 2008-02-07 Till Tantau <tantau at users.sourceforge.net>
 
-	- Patched Makefiles according to suggestion by Hans Meine.
-	- Fixed bug: duplicate fading name in pgflibraryfadings.
-	- Fixed bug: wrong size of functional shading in dvips.
-	- Fixed bud: documentation a4paper setting.
-	- Fixed bug: Manual now compiles with tex4ht once more.
-	- Fixed bug: Manual now is hyperlinked also for dvipdfm.
-	- Fixed bug: wrong size of all shadings in svg code.
-	- Slight change in placement lib, default chain now has a
-	  name. 
+    - Patched Makefiles according to suggestion by Hans Meine.
+    - Fixed bug: duplicate fading name in pgflibraryfadings.
+    - Fixed bug: wrong size of functional shading in dvips.
+    - Fixed bud: documentation a4paper setting.
+    - Fixed bug: Manual now compiles with tex4ht once more.
+    - Fixed bug: Manual now is hyperlinked also for dvipdfm.
+    - Fixed bug: wrong size of all shadings in svg code.
+    - Slight change in placement lib, default chain now has a
+      name. 
 
 2008-02-07 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Removed internal asin tables as asin is now calculated from 
-	  acos tables.
-	- Misc. updates for shapes docs.
+    - Removed internal asin tables as asin is now calculated from 
+      acos tables.
+    - Misc. updates for shapes docs.
 
 
 2008-02-06 Till Tantau <tantau at users.sourceforge.net>
 
-	- Changed fit library, so that nodes are now "completely"
-	  fitted. 
-	- Changed tutorial so that fit library is now used.
-	- Added placement library and documentation.
+    - Changed fit library, so that nodes are now "completely"
+      fitted. 
+    - Changed tutorial so that fit library is now used.
+    - Added placement library and documentation.
 
 2008-02-05 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixes in snake compatibility code.
-	- Added dvipdfmx support (identical to dvipdfm).
-	- Fixed missing braces and color stack problem in
-	  shapes.logic.IEC. 
+    - Fixes in snake compatibility code.
+    - Added dvipdfmx support (identical to dvipdfm).
+    - Fixed missing braces and color stack problem in
+      shapes.logic.IEC. 
 
 2008-02-04 Till Tantau <tantau at users.sourceforge.net>
 
-	- Patched (and hopefully fixed) hyperref support.
-	- Made matrix inversion more precise.
-	- Added tutorial for geometric constructions.
-	- Fixed partway and intersection computations.
-	- Added line to circle intersection.
+    - Patched (and hopefully fixed) hyperref support.
+    - Made matrix inversion more precise.
+    - Added tutorial for geometric constructions.
+    - Fixed partway and intersection computations.
+    - Added line to circle intersection.
 
 2008-02-03 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Added through library (still very simple...).
-	- Added computation of intersection of circles and tangent to
-	  a circle.
+    
+    - Added through library (still very simple...).
+    - Added computation of intersection of circles and tangent to
+      a circle.
 
 2008-01-31 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Updated isosceles triangle shape. Positioning of node
-	  contents improved. Added key so minimum width and height
-	  can be applied independently
-	- Fix for trapezium shape for minimum height. This fix may
-	  ``break'' exisiting code by making any trapezium enlarged using
-	  minimum height to appear slightly wider than before. But...
-	- Added keys for trapezium so that minimum width and height
-	  can be applied independently, or to just the `body' of the
-	  trapezium. 
+    - Updated isosceles triangle shape. Positioning of node
+      contents improved. Added key so minimum width and height
+      can be applied independently
+    - Fix for trapezium shape for minimum height. This fix may
+      ``break'' exisiting code by making any trapezium enlarged using
+      minimum height to appear slightly wider than before. But...
+    - Added keys for trapezium so that minimum width and height
+      can be applied independently, or to just the `body' of the
+      trapezium. 
 
 2008-01-30 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Reimplemented shape `tape'. Anchors should behave a bit
-	  better now.
+    - Reimplemented shape `tape'. Anchors should behave a bit
+      better now.
 
 2008-01-29 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed problem with pin a relative coordinates.
+    - Fixed problem with pin a relative coordinates.
 
 2008-01-27 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added `logic gate IEC symbol color` key to change color
-	  for all symbols simultaneously.
-	- Fix for loading US and IEC shape library separately.
-	- Misc. updates for decoration docs.
+    - Added `logic gate IEC symbol color` key to change color
+      for all symbols simultaneously.
+    - Fix for loading US and IEC shape library separately.
+    - Misc. updates for decoration docs.
 
 2008-01-26 Till Tantau <tantau at users.sourceforge.net>
 
-	- Modified calc library. Working on documentation.
-	- Added calc library and ($...$) notation for coordinates.
+    - Modified calc library. Working on documentation.
+    - Added calc library and ($...$) notation for coordinates.
 
 2008-01-25 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- Reorganised logic shapes. Now two libraries:
-	  shapes.gates.logic.US (for `American' gates) and 
-	  shapes.gates.logic.IEC (for rectangular gates).
-	  Gates are now named `and gate US' or `and gate IEC' etc.
-	  TikZ key `use US style logic gates' and `use IEC style
-	  logic gates' set up styles so that (e.g.) `and gate' 
-	  becomes a synonym for `shape=and gate US'. See docs for
-	  details.
+    
+    - Reorganised logic shapes. Now two libraries:
+      shapes.gates.logic.US (for `American' gates) and 
+      shapes.gates.logic.IEC (for rectangular gates).
+      Gates are now named `and gate US' or `and gate IEC' etc.
+      TikZ key `use US style logic gates' and `use IEC style
+      logic gates' set up styles so that (e.g.) `and gate' 
+      becomes a synonym for `shape=and gate US'. See docs for
+      details.
 
 2008-01-23 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added decorations.markings.
+    - Added decorations.markings.
 
 2008-01-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed pgfpatharc: Fractional angles are now handled
-	  correctly. 
-	- Fixed incompatability with bm package: Changed hack to
-	  \@@end to \AtEndDocument.
-	- Changed things in the math engine to speed up things: First,
-	  \pgfmath at returnone now uses simpler and faster code. Second,
-	  some marshals in the internal math commands like
-	  \pgfmathadd@ have been removed. This makes it necessary that
-	  the second operand in a call to an internal math macro no
-	  longer uses \pgf at x or \pgf at xa and I fixed the 3 places where
-	  this was the case.
-	- Added footprint decoration and merged Marks footprints.
-	- Added buffering to the subpath mechanism. This speeds up
-	  constructions of very long paths by a factor of 10 or more. 
-	- Fixed missing declaration of \iftikz at decoratepath in
-	  tikz.code.tex. 
+    - Fixed pgfpatharc: Fractional angles are now handled
+      correctly. 
+    - Fixed incompatability with bm package: Changed hack to
+      \@@end to \AtEndDocument.
+    - Changed things in the math engine to speed up things: First,
+      \pgfmath at returnone now uses simpler and faster code. Second,
+      some marshals in the internal math commands like
+      \pgfmathadd@ have been removed. This makes it necessary that
+      the second operand in a call to an internal math macro no
+      longer uses \pgf at x or \pgf at xa and I fixed the 3 places where
+      this was the case.
+    - Added footprint decoration and merged Marks footprints.
+    - Added buffering to the subpath mechanism. This speeds up
+      constructions of very long paths by a factor of 10 or more. 
+    - Fixed missing declaration of \iftikz at decoratepath in
+      tikz.code.tex. 
 
 2008-01-22 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- Added logic shapes library. Includes AND gate, NAND gate,
-	  OR gate, NOR gate, XOR gate, XNOR gate and NOT gate.
+    
+    - Added logic shapes library. Includes AND gate, NAND gate,
+      OR gate, NOR gate, XOR gate, XNOR gate and NOT gate.
 
 2008-01-22 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fooled around with title page.
-	- Changed TikZ path scoping rules: Scopes no longer affect the
-	  last point on a path. This was a nuiseance before and became
-	  a real problem with decorations.
-	- Finished my move from snakes to decorations. Also finished
-	  documentation. 
-	  We are now ready for a new release!
-	
+    - Fooled around with title page.
+    - Changed TikZ path scoping rules: Scopes no longer affect the
+      last point on a path. This was a nuiseance before and became
+      a real problem with decorations.
+    - Finished my move from snakes to decorations. Also finished
+      documentation. 
+      We are now ready for a new release!
+    
 2008-01-19 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- Removed \externalcode command for decoration states as
-	  persistent pre/postcomputation stuff does a similar job.	  
+    
+    - Removed \externalcode command for decoration states as
+      persistent pre/postcomputation stuff does a similar job.      
 
 2008-01-18 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- Added \externalcode command for decoration states. Allows
-	  code to be executed outside the TeX-group the state code
-	  is executed in.
+    
+    - Added \externalcode command for decoration states. Allows
+      code to be executed outside the TeX-group the state code
+      is executed in.
 
 2008-01-17 Till Tantau <tantau at users.sourceforge.net>
 
-	- Split decoration lib into several libs. 
-	- Renamed lineto decoration to curveto decoration.
-	- Renamed many keys of decorations and snakes to shorter
-	  names.
-	- Changed the tikz setting of decoration options.
-	- No documentation yet.
+    - Split decoration lib into several libs. 
+    - Renamed lineto decoration to curveto decoration.
+    - Renamed many keys of decorations and snakes to shorter
+      names.
+    - Changed the tikz setting of decoration options.
+    - No documentation yet.
 
 2008-01-17 Till Tantau <tantau at users.sourceforge.net>
 
-	- Started merging snakes and decorations. Not yet finished.
+    - Started merging snakes and decorations. Not yet finished.
 
 2008-01-16 Till Tantau <tantau at users.sourceforge.net>
 
-	- (Partly) rewrote the tikz support for decorations. There is
-	  now a "decorate" path command:
-	  \draw ... decorate [decoration=zigzag] { (0,0) -- (1,2) };
+    - (Partly) rewrote the tikz support for decorations. There is
+      now a "decorate" path command:
+      \draw ... decorate [decoration=zigzag] { (0,0) -- (1,2) };
           This yields a much cleaner interface.
-	- There is also a decorate=true/false option that causes the
-	  whole path to be decorated.
-	- Decorated path can now contain nodes.
-	- Node paths can also be decorated now.
-	- Fixed missing \pgftransformreset inside decoration
-	  environment. 
-	
+    - There is also a decorate=true/false option that causes the
+      whole path to be decorated.
+    - Decorated path can now contain nodes.
+    - Node paths can also be decorated now.
+    - Fixed missing \pgftransformreset inside decoration
+      environment. 
+    
 2008-01-15 Till Tantau <tantau at users.sourceforge.net>
 
-	- Changed the decoration documentation a bit. Still not quite
-  	  perfect... 
-	- Restructured the basic layer. There is a central core (which
-	  got slightly larger) and "modules", which can be included
-	  using \usepgfmodule. All the pgfbaseXXX files are now
-	  obsolete and only included for the old ones for
-	  compatibility.
-	  The {pgf} package no longer includes the modules "pattern",
-	  "snakes" and "decorations" by default. However, these
-	  modules are loaded by their respective libraries, so,
-	  normally, no one will notice.	
-	
+    - Changed the decoration documentation a bit. Still not quite
+        perfect... 
+    - Restructured the basic layer. There is a central core (which
+      got slightly larger) and "modules", which can be included
+      using \usepgfmodule. All the pgfbaseXXX files are now
+      obsolete and only included for the old ones for
+      compatibility.
+      The {pgf} package no longer includes the modules "pattern",
+      "snakes" and "decorations" by default. However, these
+      modules are loaded by their respective libraries, so,
+      normally, no one will notice.    
+    
 2008-01-15 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- Fix for minimum size in ellipse split shape.
-	- Added decorations documentation.
+    
+    - Fix for minimum size in ellipse split shape.
+    - Added decorations documentation.
 
 2008-01-14 Till Tantau <tantau at users.sourceforge.net>
 
-	- Coordinates like (2,3cm) are now allowed. Has the same
-	  effect as ([shift={(2,0)}]0pt,3cm), which is what everybody
-	  would expect.
-	- Moved tikz hacks inside tikzlibrarydecorations into
-	  tikz.code.tex itself.
+    - Coordinates like (2,3cm) are now allowed. Has the same
+      effect as ([shift={(2,0)}]0pt,3cm), which is what everybody
+      would expect.
+    - Moved tikz hacks inside tikzlibrarydecorations into
+      tikz.code.tex itself.
 
 2008-01-14 Mark Wibrow <vibrovski at users.sourceforge.net>
-	
-	- Fix for save stack overflow in decorations.
-	- Renamed \pgfdecorate \endpgfdecorate, now \pgfdecoration
-	  \endpgfdecoration. Makes it more consistent with...
-	- Meta decorations! Automata that decorate the path with
-	  decoration automata! Increased fancyness! Docs soon.
-	- Removed a bunch of keys from \tikzlibrarydecorations as
-	  not really necessary.	
+    
+    - Fix for save stack overflow in decorations.
+    - Renamed \pgfdecorate \endpgfdecorate, now \pgfdecoration
+      \endpgfdecoration. Makes it more consistent with...
+    - Meta decorations! Automata that decorate the path with
+      decoration automata! Increased fancyness! Docs soon.
+    - Removed a bunch of keys from \tikzlibrarydecorations as
+      not really necessary.    
 
 2008-01-13 Till tantau <tantau at users.sourceforge.net>
 
-	- Changed shadow lib once more and added it to CVS.
+    - Changed shadow lib once more and added it to CVS.
 
 2008-01-13 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added decorations files. Docs to follow soon(ish).
-	- Fix for `star point ratio' and `star point height'
-	  keys in star shape.
+    - Added decorations files. Docs to follow soon(ish).
+    - Fix for `star point ratio' and `star point height'
+      keys in star shape.
 
 2008-01-11 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Added copy shadow.
+    
+    - Added copy shadow.
 
 2008-01-10 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added random steps snake.
-	
+    - Added random steps snake.
+    
 2008-01-09 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added shadow library, removed shadow shapes (no longer
-	  needed).
-	- Added preaction and postaction options (very useful).
-	- Added transform canvas option.
-	- Added scale around option.
-	- Moved tikz.code.tex to tikz/tikz.code.tex
-	- Moved .../libraries/pgflibrarytikzXXXX.code.tex to
-	  .../frontendlayer/tikz/libraries/tikzlibraryXXXX.code.tex.
+    - Added shadow library, removed shadow shapes (no longer
+      needed).
+    - Added preaction and postaction options (very useful).
+    - Added transform canvas option.
+    - Added scale around option.
+    - Moved tikz.code.tex to tikz/tikz.code.tex
+    - Moved .../libraries/pgflibrarytikzXXXX.code.tex to
+      .../frontendlayer/tikz/libraries/tikzlibraryXXXX.code.tex.
 
 2007-12-20 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed missing example bbs for dvipdfm.
-	- Fixed buggy swirl shading.
-	- Finished documentation switch from \itemoption to {key}.
-	- Changed TikZ fading options. More consistent and easier to use,
-	  now. 
+    - Fixed missing example bbs for dvipdfm.
+    - Fixed buggy swirl shading.
+    - Finished documentation switch from \itemoption to {key}.
+    - Changed TikZ fading options. More consistent and easier to use,
+      now. 
 
 2007-12-20 Mark Wibrow <vibrovski at users.sourceforge.net>
-	- Added `ellipse split' shape.
+    - Added `ellipse split' shape.
 
 2007-12-17 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed spaces problem with external graphics.
-	- Added [missing] option to supress children.
-	- Reduced number of libs includes by {shapes} to geometric,
-	  misc and symbol. Shapes is now more or less deprecated.
-	- Added shadowed shapes.
-	- Added pgfsys-xetex for native xetex support.
-	- Added documentation hint on scoping inside \foreach.
-	- Fixed bug [1620194] "tikz library mindmap requires trees"
-	- Fixed bug [1787504] "Usage of \@namelet in xxcolor.sty clases with memoir."
-	- Fixed bug [1809693] "background rectangle is scaled".
-	
+    - Fixed spaces problem with external graphics.
+    - Added [missing] option to supress children.
+    - Reduced number of libs includes by {shapes} to geometric,
+      misc and symbol. Shapes is now more or less deprecated.
+    - Added shadowed shapes.
+    - Added pgfsys-xetex for native xetex support.
+    - Added documentation hint on scoping inside \foreach.
+    - Fixed bug [1620194] "tikz library mindmap requires trees"
+    - Fixed bug [1787504] "Usage of \@namelet in xxcolor.sty clases with memoir."
+    - Fixed bug [1809693] "background rectangle is scaled".
+    
 2007-12-13 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added fadings.
-	- Added functional shadings.
-	- Fixed bug in double drawing with arrows.
+    - Added fadings.
+    - Added functional shadings.
+    - Fixed bug in double drawing with arrows.
 
 2007-11-24 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fix for all math functions with two arguments.
-	- Fix for tikz when y-coordinate is a function within braces.
-	- Fix for distance calculation in shape snake.
-	- Added `cloud callout' shape.
-	- cloud shape can now use (or ignore) `aspect' key.
-	- More key updates/fixes for shapes.
-	
+    - Fix for all math functions with two arguments.
+    - Fix for tikz when y-coordinate is a function within braces.
+    - Fix for distance calculation in shape snake.
+    - Added `cloud callout' shape.
+    - cloud shape can now use (or ignore) `aspect' key.
+    - More key updates/fixes for shapes.
+    
 2007-11-23 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Corrected minimum size of a diamond shape (was twice the
-	  correct size -- this may break existing code, but that cannot
-	  be avoided!).
-	- Changed some more documentation from \itemoption to {key}s. Not
- 	  yet finished.
-	
+    
+    - Corrected minimum size of a diamond shape (was twice the
+      correct size -- this may break existing code, but that cannot
+      be avoided!).
+    - Changed some more documentation from \itemoption to {key}s. Not
+       yet finished.
+    
 2007-11-19 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Updated math documentation. Code examples now consistent with
-	  the rest of the manual.
+    - Updated math documentation. Code examples now consistent with
+      the rest of the manual.
 
 2007-11-12 Till Tantau <tantau at users.sourceforge.net>
-	
-	- Fixed hyperref-dvipdfm-problem.
-	
+    
+    - Fixed hyperref-dvipdfm-problem.
+    
 2007-11-10 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Updated cloud shape for minimum size calculations.
-	- Reimplemented rounded rectangle. Now supports concave arcs.
-	- Removed all stuff for Fancy hyperlinked picture of shapes.
+    - Updated cloud shape for minimum size calculations.
+    - Reimplemented rounded rectangle. Now supports concave arcs.
+    - Removed all stuff for Fancy hyperlinked picture of shapes.
 
 2007-11-07 Till Tantau <tantau at users.sourceforge.net>
-	
-	- \foreach will now allow a macro name to be given as list
-	  argument (as in \foreach \x in \mylist {...})
-	
+    
+    - \foreach will now allow a macro name to be given as list
+      argument (as in \foreach \x in \mylist {...})
+    
 2007-10-29 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed keys problem when .try is used with a comma.
-	
+    - Fixed keys problem when .try is used with a comma.
+    
 2007-10-28 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed shape snake for drawing to other pictures.
-	- Added shapes `arrow box' shape, `rectangle callout` and 
-	  `ellipse callout'.
+    - Fixed shape snake for drawing to other pictures.
+    - Added shapes `arrow box' shape, `rectangle callout` and 
+      `ellipse callout'.
 
 2007-10-26 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed dvipdfm problem with hyperref.
+    - Fixed dvipdfm problem with hyperref.
 
 2007-10-13 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- pgfbasesnakes: changed length calculation and added angle calculation.
-	- added `shape snake' to snake library.
-	- added cylinder shape to geometric shapes.
-	- renamed `bevelled rectangle'. Now called `chamfered rectangle'.
-	- renamed pgfsavepgf at process. Now called pgfextract at process. 
+    - pgfbasesnakes: changed length calculation and added angle calculation.
+    - added `shape snake' to snake library.
+    - added cylinder shape to geometric shapes.
+    - renamed `bevelled rectangle'. Now called `chamfered rectangle'.
+    - renamed pgfsavepgf at process. Now called pgfextract at process. 
 
 2007-10-12 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Fixed bug #1803811 gobbling of tokens after \pgfmathaddtocounter.
-	- Fixed insertion of spaces after \pgfmath stuff.
-	- Fixed bug #1811862.
+    - Fixed bug #1803811 gobbling of tokens after \pgfmathaddtocounter.
+    - Fixed insertion of spaces after \pgfmath stuff.
+    - Fixed bug #1811862.
 
 2007-09-19 Mark Wibrow <vibrovski at users.sourceforge.net>
 
@@ -3343,21 +3471,21 @@
 
 
 2007-08-20  Mark Wibrow <vibrovski at users.sourceforge.net>
-	- Added cloud shape.
-	- Updated all shapes (and doc.) for pgfkeys.
-	- Changed Kite key: Now use (e.g.) '/pgf/kite vertex angles=60 and 70' (see doc.)
-	- Added keys /pgf/shape aspect and /pgf/shape aspect inverse, (but \pgfsetshapeaspect
-	  and, TikZ option `apsect' are still there for compatability).
-	- Updated diamond shape (and doc.) to use keys.
-	-`Housekeeping' stuff (moved some macros around).
+    - Added cloud shape.
+    - Updated all shapes (and doc.) for pgfkeys.
+    - Changed Kite key: Now use (e.g.) '/pgf/kite vertex angles=60 and 70' (see doc.)
+    - Added keys /pgf/shape aspect and /pgf/shape aspect inverse, (but \pgfsetshapeaspect
+      and, TikZ option `apsect' are still there for compatability).
+    - Updated diamond shape (and doc.) to use keys.
+    -`Housekeeping' stuff (moved some macros around).
 
 
 2007-08-10 Mark Wibrow <vibrovski at users.sourceforge.net>
   
-	- Trapezium shape updated. No longer uses left and right 
-	  extensions. Uses internal angles instead.
+    - Trapezium shape updated. No longer uses left and right 
+      extensions. Uses internal angles instead.
         - Updated pgfkeys for shapes (not done \pgfsetshapeaspect for
-	  diamond shape)
+      diamond shape)
 
 2007-08-09 Mark Wibrow <vibrovski at users.sourceforge.net>
   
@@ -3366,7 +3494,7 @@
 
 2007-08-08 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added fitting library.
+    - Added fitting library.
 
 2007-07-28 Mark Wibrow <vibrovski at users.sourceforge.net>
   
@@ -3378,373 +3506,373 @@
 
 2007-07-23 Till Tantau <tantau at users.sourceforge.net>
 
-	- Started to use new pgfkeys also in pgf. In particular,
-	  commands like \pgfsetshape... are now replaced by keys.
-	  (Not yet finished.)
-	
+    - Started to use new pgfkeys also in pgf. In particular,
+      commands like \pgfsetshape... are now replaced by keys.
+      (Not yet finished.)
+    
 2007-07-21 Mark Wibrow <vibrovski at users.sourceforge.net>
   
-	- Added new geometric shape: `circular sector'.
-	- Updated pgfbaseshapes.code.tex for saved macro support.
+    - Added new geometric shape: `circular sector'.
+    - Updated pgfbaseshapes.code.tex for saved macro support.
 
 2007-07-12 Till Tantau <tantau at users.sourceforge.net>
 
-	- Added overlay functionality to \node.
-	- Added pgfkeys and its documentation.
+    - Added overlay functionality to \node.
+    - Added pgfkeys and its documentation.
 
 2007-07-10 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Updated all `new' geometric shapes: polygon, star, trapezium,
-	  semicircle, isosceles triangle, kite, dart.
-	- `isosceles triangle' and `simple isosceles triangle' combined
-	  into one shape.
-	- more accurate anchor positioning in polygon and star shapes.
-	- Added `shape border uses incircle' option for supporting shapes.
-	- Added `shape border rotate' option for supporting shapes.
+    - Updated all `new' geometric shapes: polygon, star, trapezium,
+      semicircle, isosceles triangle, kite, dart.
+    - `isosceles triangle' and `simple isosceles triangle' combined
+      into one shape.
+    - more accurate anchor positioning in polygon and star shapes.
+    - Added `shape border uses incircle' option for supporting shapes.
+    - Added `shape border rotate' option for supporting shapes.
 
 2007-07-04 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added support for sec, cosec and cot.
+    - Added support for sec, cosec and cot.
 
 2007-07-03 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed missing compatibility \pgfsincos
-	- Fixed wrong \pgfmathsincos
+    - Fixed missing compatibility \pgfsincos
+    - Fixed wrong \pgfmathsincos
 
 2007-06-23 Mark Wibrow <vibrovski at users.sourceforge.net>
 
-	- Added semicircle shape.
-	- Updated documentation for all new shapes.
+    - Added semicircle shape.
+    - Updated documentation for all new shapes.
 
 2007-06-22 Mark Wibrow <vibrovski at users.sourceforge.net>
   
-	- Added support for savedmacros in \pgfdeclareshape.
-	- Added trapezium shape.
-	- Added support for `legacy' calc code (\real, \minof, \maxof, \ratio).
-	- Fixed 'public' sqrt macro in \pgfmathoperations.code.tex
-	- Added isosceles triangle shape: uses incircle, but supports arbitrary 
-	  rotation of border.
-	- Added simple isosceles triangle shape: much tighter fit of node 
-	  contents, but restricted rotation of border.
+    - Added support for savedmacros in \pgfdeclareshape.
+    - Added trapezium shape.
+    - Added support for `legacy' calc code (\real, \minof, \maxof, \ratio).
+    - Fixed 'public' sqrt macro in \pgfmathoperations.code.tex
+    - Added isosceles triangle shape: uses incircle, but supports arbitrary 
+      rotation of border.
+    - Added simple isosceles triangle shape: much tighter fit of node 
+      contents, but restricted rotation of border.
 
 2007-06-21 Till Tantau <tantau at users.sourceforge.net>
 
-	- Fixed text width problem in matrix of nodes.
+    - Fixed text width problem in matrix of nodes.
 
 2007-01-18 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 1.18:
+    Version 1.18:
 
-	- Added regular polygon and star shapes (by Mark Wibrow).
-	- Added graphic externalization commands.
-	- Added barycentric coordinate system.
-	- Added direct TikZ plotting of function based on math engine.
-	- Added math documentation into main documentation.
-	- Added Mark Wibrow's math library. 
-	- Added calendar support.
-	- Added matrix stuff.
-	- Added automatic driver selection for xetex.
-	- Added "growth parent anchor" option.
-	- Fixed superfluous spaces in quick math parse code
-	- Fixed superfluous \newboxes in math and image code
-	- Fixed mth parser to recognize \wd\mybox. 
-	- Fixed wrong \pgfmathsetrandomseed
-	- Fixed wrong \pgfmathradians@
-	- Fixed problems with long mantissa and plain tex math code.
-	- Fixed things so that \setlength works in pictures, once
-	  more. 
-	- Fixed selectfont problem in pdfsys-dvipdfm.def
-	- Fixed problem with lost lastx/lasty in foreach in TikZ.
-	- Fixed snake+rectangle+transform problem.
-	- Fixed rectangle+rounded corner problem.
-	- Fixed postscrip eofill1 problem.
-	- Fixed amsmath/pgf clash because of wrong definition of \:
-	- Fixed size of hyperlinks inside nodes.
-	- Fixed ConTeXt problem in pgfbaseplot.
-	- Fixed .aux problems in plain and ConTeXt mode. Using .pgf as
-	  extension now.
+    - Added regular polygon and star shapes (by Mark Wibrow).
+    - Added graphic externalization commands.
+    - Added barycentric coordinate system.
+    - Added direct TikZ plotting of function based on math engine.
+    - Added math documentation into main documentation.
+    - Added Mark Wibrow's math library. 
+    - Added calendar support.
+    - Added matrix stuff.
+    - Added automatic driver selection for xetex.
+    - Added "growth parent anchor" option.
+    - Fixed superfluous spaces in quick math parse code
+    - Fixed superfluous \newboxes in math and image code
+    - Fixed mth parser to recognize \wd\mybox. 
+    - Fixed wrong \pgfmathsetrandomseed
+    - Fixed wrong \pgfmathradians@
+    - Fixed problems with long mantissa and plain tex math code.
+    - Fixed things so that \setlength works in pictures, once
+      more. 
+    - Fixed selectfont problem in pdfsys-dvipdfm.def
+    - Fixed problem with lost lastx/lasty in foreach in TikZ.
+    - Fixed snake+rectangle+transform problem.
+    - Fixed rectangle+rounded corner problem.
+    - Fixed postscrip eofill1 problem.
+    - Fixed amsmath/pgf clash because of wrong definition of \:
+    - Fixed size of hyperlinks inside nodes.
+    - Fixed ConTeXt problem in pgfbaseplot.
+    - Fixed .aux problems in plain and ConTeXt mode. Using .pgf as
+      extension now.
 
 2006-10-26 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 1.10:
+    Version 1.10:
 
-	- Renamed \pgf at sys@pdf at mark to \pgfsyspdfmark.
-	- Fixed the ConTeXt support so that it is usable (which is wasn't).
-	
+    - Renamed \pgf at sys@pdf at mark to \pgfsyspdfmark.
+    - Fixed the ConTeXt support so that it is usable (which is wasn't).
+    
 2006-10-11 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 1.09:
+    Version 1.09:
 
-	- Added \usepgflibrary and \usetikzlibrary to simplify adding
-	  new libraries.
-	- Added native ConTeXt support in the form of module
-	  wrappers.
-	- Added patterns.
-	- Added crosses snake.
-	- Added to and edge path operations.
-	- Added to path library. In particular, this gives decent
-	  curved paths. 
-	- Added tikz automata library.
-	- Added tikz er diagram library.
-	- Added tikz Petri net library.
-	- Added tikz mindmap library.
-	- Added access to nodes in other pictures (!).
-	- Added extended baseline setting.
-	- Added functionality to add new coordinate systems.
-	- Added polar xy coordinate system.
-	- Added diamond shape (!).
-	- Added plot mark phase, repeat and indices.
-	- Added text height and text depth options.
-	- Added label and pin options.
-	- Added automatic node placement (!). 
-	- Added pgfsys-dvi.def for pure dvi mode. Supports only
-	  black and white drawing (not documented and not really usable).
-	- Added 3d library (not documented and not really usable).
-	- Cleared up license chaos.
-	- Reorganized library documentation.
-	- Removed pgflibraryautomata, use pgflibrarytikzautomata instead.
-	- Fixed tree level option bug.
-	- Fixed missing options for coordinates.
-	- Fixed bug in TikZ parabola code.
-	- Fixed bug in TikZ snake cycle code.
-	- Fixed bug with empty list in pgffor
-	- Fixed bug in code for insertion of dvips header specials.
-	- Fixed bug in shading code (wrong bigpoint correction).
-	- Fixed bug #1472666.
-	- Fixed bug #1473255.
-	- Fixed bug #1526175.
-	- Fixed bug #1542512.
-	- Fixed bug in TikZ transformation code for nested pictures.
-	- Fixed patch #1443606.
-	- Fixed path #1526178.
-	
+    - Added \usepgflibrary and \usetikzlibrary to simplify adding
+      new libraries.
+    - Added native ConTeXt support in the form of module
+      wrappers.
+    - Added patterns.
+    - Added crosses snake.
+    - Added to and edge path operations.
+    - Added to path library. In particular, this gives decent
+      curved paths. 
+    - Added tikz automata library.
+    - Added tikz er diagram library.
+    - Added tikz Petri net library.
+    - Added tikz mindmap library.
+    - Added access to nodes in other pictures (!).
+    - Added extended baseline setting.
+    - Added functionality to add new coordinate systems.
+    - Added polar xy coordinate system.
+    - Added diamond shape (!).
+    - Added plot mark phase, repeat and indices.
+    - Added text height and text depth options.
+    - Added label and pin options.
+    - Added automatic node placement (!). 
+    - Added pgfsys-dvi.def for pure dvi mode. Supports only
+      black and white drawing (not documented and not really usable).
+    - Added 3d library (not documented and not really usable).
+    - Cleared up license chaos.
+    - Reorganized library documentation.
+    - Removed pgflibraryautomata, use pgflibrarytikzautomata instead.
+    - Fixed tree level option bug.
+    - Fixed missing options for coordinates.
+    - Fixed bug in TikZ parabola code.
+    - Fixed bug in TikZ snake cycle code.
+    - Fixed bug with empty list in pgffor
+    - Fixed bug in code for insertion of dvips header specials.
+    - Fixed bug in shading code (wrong bigpoint correction).
+    - Fixed bug #1472666.
+    - Fixed bug #1473255.
+    - Fixed bug #1526175.
+    - Fixed bug #1542512.
+    - Fixed bug in TikZ transformation code for nested pictures.
+    - Fixed patch #1443606.
+    - Fixed path #1526178.
+    
 2005-11-16 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 1.01:
+    Version 1.01:
 
-	- Added textures support.
-	- Added text opacity option.
-	- Fixed bug in pgfbasesnakes.code.tex causing lot's of
-	  'missing = in nullfont' message in log file.
-	- Fixed bug that made plain tex mode unusable.
-	- Fixed missing pgfsys-vtex.def in FILES.
-	- Fixed wrong box placements in compatibility mode.
-	- Fixed SVG support to create legal xml.
-	- Moved documentation to doc/generic/pgf.
+    - Added textures support.
+    - Added text opacity option.
+    - Fixed bug in pgfbasesnakes.code.tex causing lot's of
+      'missing = in nullfont' message in log file.
+    - Fixed bug that made plain tex mode unusable.
+    - Fixed missing pgfsys-vtex.def in FILES.
+    - Fixed wrong box placements in compatibility mode.
+    - Fixed SVG support to create legal xml.
+    - Moved documentation to doc/generic/pgf.
 
 2005-10-23 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 1.00:
+    Version 1.00:
 
-	- There have not been any real changes since 0.99.
-	
-	
+    - There have not been any real changes since 0.99.
+    
+    
 2005-10-11 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 0.99:
+    Version 0.99:
 
-	- Added vtex support (finally!).
-	- Added multi part mechanism to nodes.
-	- Added very simple pgflibraryautomata.
-	- Changed coordinate shape such that it now never produces a
-	  text label.
-	- Renamed \pgfshapebox to \pgfnodeparttextbox (made necessary
-	  by the node part mechanism).
+    - Added vtex support (finally!).
+    - Added multi part mechanism to nodes.
+    - Added very simple pgflibraryautomata.
+    - Changed coordinate shape such that it now never produces a
+      text label.
+    - Renamed \pgfshapebox to \pgfnodeparttextbox (made necessary
+      by the node part mechanism).
 
 2005-09-20 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 0.98:
+    Version 0.98:
 
-	- Added transparency to PGF (quite nice...).
-	- Added foreach option to child path operation (also nice...).
-	- Fixed problem with \\ in centered text.
-	- Fixed problem with hyperlinks in nodes.
-	- Fixed wrong arrows in trees.
+    - Added transparency to PGF (quite nice...).
+    - Added foreach option to child path operation (also nice...).
+    - Fixed problem with \\ in centered text.
+    - Fixed problem with hyperlinks in nodes.
+    - Fixed wrong arrows in trees.
 
 2005-09-08 Till Tantau <tantua at users.sourceforge.net>
 
-	Version 0.97:
+    Version 0.97:
 
-	- Reorganised directory structure of documentation.
-	- Added tree mechanism.
-	- Added snake mechanism.
-	- Added layer mechanism.
-	- Added new shapes: cross out, strike out, forbidden sign.
-	- Added some more documentation.
-	- Added "none" drawing and filling colors.
-	- Added pgflibrarytikzbackgrounds.
-	- Changed syntax of \pgfqbox.
-	- Changed syntax of several \pgfsys at xxxx commands.
-	- Added SVG support / a tex4ht backend. (Complicated text
-  	  inside svg graphics is not supported well, but that's mainly
-	  a shortcoming of the svg specification.)
+    - Reorganised directory structure of documentation.
+    - Added tree mechanism.
+    - Added snake mechanism.
+    - Added layer mechanism.
+    - Added new shapes: cross out, strike out, forbidden sign.
+    - Added some more documentation.
+    - Added "none" drawing and filling colors.
+    - Added pgflibrarytikzbackgrounds.
+    - Changed syntax of \pgfqbox.
+    - Changed syntax of several \pgfsys at xxxx commands.
+    - Added SVG support / a tex4ht backend. (Complicated text
+        inside svg graphics is not supported well, but that's mainly
+      a shortcoming of the svg specification.)
 
 2005-07-06 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 0.96:
+    Version 0.96:
 
-	This is a beta version. Version 1.00 will be the first stable
-	version of TikZ/pgf.
-	
-	- Fixed spacing problem in dvips.
-	- Changed syntax of plot and plot marks.
-	- Changed syntax of ellipse and elliptical arc options.
-	- Fixed baseline bug in tikz.
-	- Fixed bug in pgfpages.
-	- Introduced "every xxxx" styles, got rid of shape actions option.
-	- Added "intersection of" syntax for coordinates.
-	- Started revising the documentation.
-	- Changed names of some pgfpages commands.
-	- Changed syntax of parabola command.
-	- Proof read documentation.
+    This is a beta version. Version 1.00 will be the first stable
+    version of TikZ/pgf.
+    
+    - Fixed spacing problem in dvips.
+    - Changed syntax of plot and plot marks.
+    - Changed syntax of ellipse and elliptical arc options.
+    - Fixed baseline bug in tikz.
+    - Fixed bug in pgfpages.
+    - Introduced "every xxxx" styles, got rid of shape actions option.
+    - Added "intersection of" syntax for coordinates.
+    - Started revising the documentation.
+    - Changed names of some pgfpages commands.
+    - Changed syntax of parabola command.
+    - Proof read documentation.
 
 2005-06-12 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 0.95:
+    Version 0.95:
 
-	This is an *alpha* prerelease version. Syntax changes
-	are still possible before the beta version. Version 1.00
-	will be the stable version.
+    This is an *alpha* prerelease version. Syntax changes
+    are still possible before the beta version. Version 1.00
+    will be the stable version.
 
-	Changes (this is almost a new program):
-	- Introduced three layers: system, basic, frontends.
-	- Wrote two frontends: TikZ (*most* useful!) and pgfpict2e (a
-	  demonstration).
-	- Largely rewrote the basic layer.
-	- Largely rewrote the system layer.
-	- Completely rewrote the documentation.
-	- Added two utilities: pgfpages and pgffor.
-	- Made macro naming more consistent.
-	- Added plain tex support.
-	- Added dvipdfm support.
-	- Restructured directory structure.
-	- Zillions of small bugfixes.
-	
+    Changes (this is almost a new program):
+    - Introduced three layers: system, basic, frontends.
+    - Wrote two frontends: TikZ (*most* useful!) and pgfpict2e (a
+      demonstration).
+    - Largely rewrote the basic layer.
+    - Largely rewrote the system layer.
+    - Completely rewrote the documentation.
+    - Added two utilities: pgfpages and pgffor.
+    - Made macro naming more consistent.
+    - Added plain tex support.
+    - Added dvipdfm support.
+    - Restructured directory structure.
+    - Zillions of small bugfixes.
+    
 2004-10-20 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 0.65:
-	- Fixed bug in pgfshade.sty that arises in conjunction with
-	  calc.sty and latex+dvips.
+    Version 0.65:
+    - Fixed bug in pgfshade.sty that arises in conjunction with
+      calc.sty and latex+dvips.
 
 2004-10-08 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 0.64:
-	- Fixed missing depth of \pgfnodebox.
-	- Fixed bug that caused infinite stack loop with pictures inside
-	  nodes. 
+    Version 0.64:
+    - Fixed missing depth of \pgfnodebox.
+    - Fixed bug that caused infinite stack loop with pictures inside
+      nodes. 
 
 2004-07-08 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 0.63:
-	- Added \pgfextractx, \pgfextracty, \pgfcorner.
-	- Added some documentation on masks and images.
-	- Fixed a somewhat obscure bug having to do with the modification
-	  of \spaceskip.
-	- \pgfex and \pgfem no loner needed. Use 1ex etc. once more.
-	- calc.sty is now supported.
+    Version 0.63:
+    - Added \pgfextractx, \pgfextracty, \pgfcorner.
+    - Added some documentation on masks and images.
+    - Fixed a somewhat obscure bug having to do with the modification
+      of \spaceskip.
+    - \pgfex and \pgfem no loner needed. Use 1ex etc. once more.
+    - calc.sty is now supported.
 
 2004-07-06 Till Tantau <tantau at users.sourceforge.net>
 
-	Version 0.62:
-	- Fixed problem in xxcolor with option "gray" and xcolor.
-	- Switched to xcolor version 2.00.
-	- Added eofill and eofillstroke commands.
-	- Added option to shadings, so that they are automatically
-	  recalculated upon color changes.
-	- Changed names of example images to start with pgf.
+    Version 0.62:
+    - Fixed problem in xxcolor with option "gray" and xcolor.
+    - Switched to xcolor version 2.00.
+    - Added eofill and eofillstroke commands.
+    - Added option to shadings, so that they are automatically
+      recalculated upon color changes.
+    - Changed names of example images to start with pgf.
 
 2004-04-07 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.61:
-	- Added \pgfex and \pgfem dimensions.
-	- Fixed bug that causes pgfshade to fail to work if xcolor 
-	  is called with option "gray".
-	- Fixed PostScript code for radial shadings.
-	- xxcolor now works with xcolor 1.10 (and only 1.10).
+    Version 0.61:
+    - Added \pgfex and \pgfem dimensions.
+    - Fixed bug that causes pgfshade to fail to work if xcolor 
+      is called with option "gray".
+    - Fixed PostScript code for radial shadings.
+    - xxcolor now works with xcolor 1.10 (and only 1.10).
 
 2004-02-18 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.60:
-	- Replaced some commands for the postscript code by shorter
-	  versions for smaller file size.
-	- Fixed bug in pgfbox command that caused incorrect kerning in
-	  postscript output.
-	- Fixed bug in pgfsys at defineimage that made page inclusion
-	  impossible. 
-	- Fixed bug in pgfshading that did not reset dash patterns in
-	  shadings in the PostScript version. 
-	- Spaces are now allowed inside the pgfpicture environment.
-	- Added \pgfgrid command.
-	
+    Version 0.60:
+    - Replaced some commands for the postscript code by shorter
+      versions for smaller file size.
+    - Fixed bug in pgfbox command that caused incorrect kerning in
+      postscript output.
+    - Fixed bug in pgfsys at defineimage that made page inclusion
+      impossible. 
+    - Fixed bug in pgfshading that did not reset dash patterns in
+      shadings in the PostScript version. 
+    - Spaces are now allowed inside the pgfpicture environment.
+    - Added \pgfgrid command.
+    
 2004-01-13 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.50:
-	- Switched to version 1.06 of xcolor.
-	- Core pgf no longer relies on xxcolor.
-	- The syntax of the mechanism for choosing alternate images and
-	  shadings is more flexible now. The syntax has been changed
-	  (mainly, you now have to have a dot between the original name and
-	  the alternate extension).
-	- Some xxcolor commands have been removed.
-	
+    Version 0.50:
+    - Switched to version 1.06 of xcolor.
+    - Core pgf no longer relies on xxcolor.
+    - The syntax of the mechanism for choosing alternate images and
+      shadings is more flexible now. The syntax has been changed
+      (mainly, you now have to have a dot between the original name and
+      the alternate extension).
+    - Some xxcolor commands have been removed.
+    
 2003-12-02 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.43:
-	- Fixed \normalcolor, so that it works also in preamble.
+    Version 0.43:
+    - Fixed \normalcolor, so that it works also in preamble.
 
 2003-11-20 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.42:
-	- Documented masks.
-	- Fixed bug in pgf.sty for nested pictures.
+    Version 0.42:
+    - Documented masks.
+    - Fixed bug in pgf.sty for nested pictures.
 
 2003-11-18 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.41:
-	- Added masks (not yet documented).
+    Version 0.41:
+    - Added masks (not yet documented).
 
 2003-11-12 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.40:
-	- Changed syntax of \pgfdeclareimage. Uses key=value scheme
-	  now. All parameters may now be omitted. 
-	- Added \pgfimage command.
-	- Option for selecting a specific page from an image file.
-	- Fixed bug in xxcolor.sty having to do with \@ifempty command.
-	- Reworked the formatting of the user's guide.
+    Version 0.40:
+    - Changed syntax of \pgfdeclareimage. Uses key=value scheme
+      now. All parameters may now be omitted. 
+    - Added \pgfimage command.
+    - Option for selecting a specific page from an image file.
+    - Fixed bug in xxcolor.sty having to do with \@ifempty command.
+    - Reworked the formatting of the user's guide.
 
 2003-10-29 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.34:
-	- Shadings now work together with color mix-ins.
-	- Shadings can now take color names as parameters.
-	
+    Version 0.34:
+    - Shadings now work together with color mix-ins.
+    - Shadings can now take color names as parameters.
+    
 2003-10-24 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.33:
-	- Fixed problem with missing \leavevmode in \pgfuseimage.
-	- Reworked code for image inclusion. 
-	- "Draft" option is now supported. Supresses reading of images. 
-	- Added xxcolor package.
-	- pgfpictures will now inherit the color from their surroundings.
+    Version 0.33:
+    - Fixed problem with missing \leavevmode in \pgfuseimage.
+    - Reworked code for image inclusion. 
+    - "Draft" option is now supported. Supresses reading of images. 
+    - Added xxcolor package.
+    - pgfpictures will now inherit the color from their surroundings.
 
 2003-10-20 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.32:
-	- Updated installation procedure information.
+    Version 0.32:
+    - Updated installation procedure information.
 
 2003-09-18 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.31:
-	- One parameter for \pgfdeclareimage may now be omitted. It will
-	  be computed automatically.
-	
+    Version 0.31:
+    - One parameter for \pgfdeclareimage may now be omitted. It will
+      be computed automatically.
+    
 2003-08-21 Till Tantau <tantau at cs.tu-berlin.de>
 
-	Version 0.30:
-	- Created ChangeLog
-	- Added pgfshade.sty
-	
+    Version 0.30:
+    - Created ChangeLog
+    - Added pgfshade.sty
+    
 
 
 ;;; Local Variables:

Modified: trunk/Master/texmf-dist/doc/generic/pgf/FILES
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/FILES	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/FILES	2019-04-04 20:55:44 UTC (rev 50758)
@@ -83,6 +83,7 @@
 pgf/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryspy.code.tex
 pgf/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarythrough.code.tex
 pgf/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryshadings.code.tex
+pgf/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryperspective.code.tex
 pgf/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarylindenmayersystems.code.tex
 pgf/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarypositioning.code.tex
 pgf/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryautomata.code.tex
@@ -592,6 +593,7 @@
 pgf/doc/generic/pgf/text-en/pgfmanual-en-library-profiler.tex
 pgf/doc/generic/pgf/text-en/pgfmanual-en-tutorial-Euclid.tex
 pgf/doc/generic/pgf/text-en/pgfmanual-en-gd-usage-tikz.tex
+pgf/doc/generic/pgf/text-en/pgfmanual-en-library-perspective.tex
 pgf/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex
 pgf/doc/generic/pgf/text-en/pgfmanual-en-library-babel.tex
 pgf/doc/generic/pgf/text-en/pgfmanual-en-library-trees.tex

Modified: trunk/Master/texmf-dist/doc/generic/pgf/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/README	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/README	2019-04-04 20:55:44 UTC (rev 50758)
@@ -5,7 +5,7 @@
 documentation also explains the installation.  See the file
 doc/generic/pgf/license/LICENSE for license details.
 
-Please go to http://sourceforge.net/projects/pgf/
+Please go to https://github.com/pgf-tikz/pgf
 to submit bug reports, request new features, etc.
 
 

Modified: trunk/Master/texmf-dist/doc/generic/pgf/licenses/gnu-free-documentation-license-1.2.txt
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/licenses/gnu-free-documentation-license-1.2.txt	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/licenses/gnu-free-documentation-license-1.2.txt	2019-04-04 20:55:44 UTC (rev 50758)
@@ -1,5 +1,5 @@
-		GNU Free Documentation License
-		  Version 1.2, November 2002
+        GNU Free Documentation License
+          Version 1.2, November 2002
 
 
  Copyright (C) 2000,2001,2002  Free Software Foundation, Inc.

Modified: trunk/Master/texmf-dist/doc/generic/pgf/licenses/gnu-public-license-2.txt
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/licenses/gnu-public-license-2.txt	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/licenses/gnu-public-license-2.txt	2019-04-04 20:55:44 UTC (rev 50758)
@@ -1,5 +1,5 @@
-		    GNU GENERAL PUBLIC LICENSE
-		       Version 2, June 1991
+            GNU GENERAL PUBLIC LICENSE
+               Version 2, June 1991
 
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
@@ -6,7 +6,7 @@
  Everyone is permitted to copy and distribute verbatim copies
  of this license document, but changing it is not allowed.
 
-			    Preamble
+                Preamble
 
   The licenses for most software are designed to take away your
 freedom to share and change it.  By contrast, the GNU General Public
@@ -56,7 +56,7 @@
   The precise terms and conditions for copying, distribution and
 modification follow.
 
-		    GNU GENERAL PUBLIC LICENSE
+            GNU GENERAL PUBLIC LICENSE
    TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 
   0. This License applies to any program or other work which contains
@@ -255,7 +255,7 @@
 of preserving the free status of all derivatives of our free software and
 of promoting the sharing and reuse of software generally.
 
-			    NO WARRANTY
+                NO WARRANTY
 
   11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
@@ -277,9 +277,9 @@
 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 POSSIBILITY OF SUCH DAMAGES.
 
-		     END OF TERMS AND CONDITIONS
+             END OF TERMS AND CONDITIONS
 
-	    How to Apply These Terms to Your New Programs
+        How to Apply These Terms to Your New Programs
 
   If you develop a new program, and you want it to be of the greatest
 possible use to the public, the best way to achieve this is to make it

Modified: trunk/Master/texmf-dist/doc/generic/pgf/macros/pgfmanual-en-macros.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/macros/pgfmanual-en-macros.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/macros/pgfmanual-en-macros.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -309,7 +309,7 @@
 \def\extractmathfunctionname@#1(#2)#3\tmpb{\def\mathname{#1}}
 
 \makeatother
-  
+
 \newenvironment{math-function}[1]{
   \def\mathdefaultname{#1}
   \extractmathfunctionname{#1}
@@ -339,7 +339,7 @@
   \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
   \def\mathtest{#1}%
   \ifx\mathtest\pgfmanualemptytext%
-    \index{#2@\protect\texttt{#2} #3 math operator}%  
+    \index{#2@\protect\texttt{#2} #3 math operator}%
     \index{Math operators!#2@\protect\texttt{#2}}%
   \fi%
   \pgfmanualbody
@@ -358,7 +358,7 @@
   \pgfmanualentryheadline{\mathexample\hfill\mathtype}%
   \def\mathtest{#1}%
   \ifx\mathtest\pgfmanualemptytext%
-    \index{#2#3@\protect\texttt{#2\protect\ #3} #4 math operators}% 
+    \index{#2#3@\protect\texttt{#2\protect\ #3} #4 math operators}%
     \index{Math operators!#2#3@\protect\texttt{#2\protect\ #3}}%
   \fi%
   \pgfmanualbody
@@ -819,7 +819,7 @@
       \decomposetoodeep#1/#2\nil%
     \else%
       \iffirsttime%
-        \begingroup%  
+        \begingroup%
           % also make a pdf link anchor with full key path.
           \def\hyperlabelwithoutslash##1/\nil{%
             \pgfmanualpdflabel{##1}{}%
@@ -1185,7 +1185,7 @@
     \edef\strippedtext{\stripcommand#1}%
     \expandafter\getridofats\strippedtext @\relax%
   }
-  
+
   \gdef\stripcommand#1{\expandafter\mygobble\string#1}
 }
 
@@ -1326,7 +1326,7 @@
 
 \newenvironment{arrowexamples}
 {\begin{tabbing}
-    \hbox to \dimexpr\linewidth-5.5cm\relax{\emph{Appearance of the below at line width} \hfil} \= 
+    \hbox to \dimexpr\linewidth-5.5cm\relax{\emph{Appearance of the below at line width} \hfil} \=
      \hbox to 1.9cm{\emph{0.4pt}\hfil} \= \hbox to 2cm{\emph{0.8pt}\hfil} \= \emph{1.6pt} \\
   }
 {\end{tabbing}\vskip-1em}
@@ -1333,7 +1333,7 @@
 
 \newenvironment{arrowcapexamples}
 {\begin{tabbing}
-    \hbox to \dimexpr\linewidth-5.5cm\relax{\emph{Appearance of the below at line width} \hfil} \= 
+    \hbox to \dimexpr\linewidth-5.5cm\relax{\emph{Appearance of the below at line width} \hfil} \=
      \hbox to 1.9cm{\emph{1ex}\hfil} \= \hbox to 2cm{\emph{1em}\hfil} \\
   }
 {\end{tabbing}\vskip-1em}
@@ -1376,7 +1376,7 @@
 \newcommand\symarrow[1]{%
   \index{#1@\protect\texttt{#1} arrow tip}%
   \index{Arrow tips!#1@\protect\texttt{#1}}%
-  \texttt{#1}& yields thick  
+  \texttt{#1}& yields thick
   \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
@@ -1391,7 +1391,7 @@
 \newcommand\symarrowdouble[1]{%
   \index{#1@\protect\texttt{#1} arrow tip}%
   \index{Arrow tips!#1@\protect\texttt{#1}}%
-  \texttt{#1}& yields thick  
+  \texttt{#1}& yields thick
   \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
@@ -1402,12 +1402,12 @@
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
     \draw (0pt,.5ex) -- (1cm,.5ex);
-  \end{tikzpicture}, double 
+  \end{tikzpicture}, double
   \begin{tikzpicture}[arrows={#1-#1},thick,baseline]
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
     \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
-  \end{tikzpicture} and 
+  \end{tikzpicture} and
   \begin{tikzpicture}[arrows={#1-#1},thin,baseline]
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
@@ -1420,7 +1420,7 @@
   \index{Arrow tips!#1@\protect\texttt{#1}}%
   \index{#2@\protect\texttt{#2} arrow tip}%
   \index{Arrow tips!#2@\protect\texttt{#2}}%
-  \texttt{#1-#2}& yields thick  
+  \texttt{#1-#2}& yields thick
   \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
@@ -1438,7 +1438,7 @@
   \index{Arrow tips!#1@\protect\texttt{#1}}%
   \index{#2@\protect\texttt{#2} arrow tip}%
   \index{Arrow tips!#2@\protect\texttt{#2}}%
-  \texttt{#1-#2}& yields thick  
+  \texttt{#1-#2}& yields thick
   \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
@@ -1448,12 +1448,12 @@
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
     \draw (0pt,.5ex) -- (1cm,.5ex);
-  \end{tikzpicture}, double 
+  \end{tikzpicture}, double
   \begin{tikzpicture}[arrows={#1-#2},thick,baseline]
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
     \draw[double,double equal sign distance] (0pt,.5ex) -- (1cm,.5ex);
-  \end{tikzpicture} and 
+  \end{tikzpicture} and
   \begin{tikzpicture}[arrows={#1-#2},thin,baseline]
     \useasboundingbox (-1mm,-0.5ex) rectangle (1.1cm,2ex);
     \fill [black!15] (1cm,-.5ex) rectangle (1.1cm,1.5ex) (-1mm,-.5ex) rectangle (0mm,1.5ex) ;
@@ -1482,7 +1482,7 @@
   \index{#1@\protect\texttt{#1} plot mark}%
   \index{Plot marks!#1@\protect\texttt{#1}}
   \texttt{mark=\declare{\noligs{#1}}} & \tikz\draw[color=black!25]
-  plot[mark=#1,mark options={fill=examplefill,draw=black}] 
+  plot[mark=#1,mark options={fill=examplefill,draw=black}]
     coordinates {(0,0) (.5,0.2) (1,0) (1.5,0.2)};\\
 }
 
@@ -1561,7 +1561,7 @@
 %   \codeexample at tabinit@catcode
 % and
 %   \codeexample at tabinit@replacementchars
-% which are used inside of 
+% which are used inside of
 %\begin{codeexample}
 % ...
 %\end{codeexample}
@@ -1900,7 +1900,7 @@
 \makeatother
 
 
-%%% Local Variables: 
+%%% Local Variables:
 %%% mode: latex
 %%% TeX-master: "beameruserguide"
-%%% End: 
+%%% End:

Modified: trunk/Master/texmf-dist/doc/generic/pgf/pgfmanual.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-decorations.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-decorations.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-decorations.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -968,7 +968,7 @@
 
 \begin{environment}{{pgfmetadecoration}\marg{name}}
     This environment decorates the input path described in \meta{environment
-    contents}, with the	meta-decoration \meta{name}.
+    contents}, with the meta-decoration \meta{name}.
 \end{environment}
 
 \begin{plainenvironment}{{pgfmetadecoration}\marg{name}}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-points.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-points.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-points.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -66,7 +66,7 @@
   \draw[help lines] (0,0) grid (3,2);
 
   \foreach \angle in {0,10,...,90}
-    {\pgfpathcircle{\pgfpointpolar{\angle}{1cm/2cm}}{2pt}}
+    {\pgfpathcircle{\pgfpointpolar{\angle}{1cm and 2cm}}{2pt}}
   \pgfusepath{fill}
 \end{tikzpicture}
 \end{codeexample}
@@ -662,8 +662,8 @@
 Note that this macro is used often internally. For this reason, it is not a
 good idea to keep anything important in the variables |\pgf at x| and |\pgf at y|
 since they will be overwritten and changed frequently. Instead, intermediate
-values can ge stored in the \TeX-dimensions |\pgf at xa|, |\pgf at xb|, |\pgf at xc| and
-their |y|-counterparts |\pgf at ya|, |\pgf at yb|, |pgf at yc|. For example, here is the
+values can be stored in the \TeX-dimensions |\pgf at xa|, |\pgf at xb|, |\pgf at xc| and
+their |y|-counterparts |\pgf at ya|, |\pgf at yb|, |\pgf at yc|. For example, here is the
 code of the command |\pgfpointadd|:
 %
 \begin{codeexample}[code only]

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-transparency.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-transparency.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-base-transparency.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -349,6 +349,7 @@
     is ``large enough'' and then insert this picture into the main picture
     while ignoring the size. The following example shows how this is done:
 
+% TODO: Nesting tikzpictures is NOT supported
 {\tikzexternaldisable
 \begin{codeexample}[]
 \begin{tikzpicture}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-circuits.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -1241,7 +1241,7 @@
   \foreach \x/\y/\z in {false/blue/1pt, true/red/2pt}
     \foreach \a in {north, south, east, west, north east,
       south east, north west, south west}
-      \draw[logic gate anchors use bounding box=\x, color=\y]	
+      \draw[logic gate anchors use bounding box=\x, color=\y]
         (A.\a) circle(\z);
 \end{tikzpicture}
 \end{codeexample}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-decorations.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-decorations.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-decorations.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -1819,7 +1819,7 @@
     \end{key}
 
     \begin{key}{/pgf/decoration/text effects/word count=\meta{macro}}
-        Store the number of words in the decoration text in	\meta{macro}.
+        Store the number of words in the decoration text in \meta{macro}.
         Numbering starts at |1|. When the character is the word separator,
         \meta{macro} takes the number of the previous word. If the decoration
         text starts with a word separator \meta{macro} will be |0|.

Added: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-perspective.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-perspective.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-perspective.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -0,0 +1,418 @@
+\section{Three Point Perspective Drawing Library}
+
+\noindent\emph{by Max Snippe}
+
+\begin{tikzlibrary}{perspective}
+  This library provides tools for perspective drawing with one, two, or three
+  vanishing points.
+\end{tikzlibrary}
+
+\subsection{Coordinate Systems}
+
+\begin{coordinatesystem}{three point perspective}
+  The |three point perspective| coordinate system is very similar to the |xyz|
+  coordinate system, save that it will display the provided coordinates with a
+  perspective projection.
+  %
+  \begin{key}{/tikz/cs/x=\meta{number} (initially 0)}
+    The $x$ component of the coordinate. Should be given \emph{without} unit.
+  \end{key}
+  %
+  \begin{key}{/tikz/cs/y=\meta{number} (initially 0)}
+    Same as |x|.
+  \end{key}
+  %
+  \begin{key}{/tikz/cs/z=\meta{number} (initially 0)}
+    Same as |x|.
+  \end{key}
+\end{coordinatesystem}
+
+\begin{coordinatesystem}{tpp}
+  The |tpp| coordinate system is an alias for the |three point perspective|
+  coordinate system.
+\end{coordinatesystem}
+
+\subsection{Setting the view}
+
+\begin{key}{/tikz/3d view=\marg{azimuth}\marg{elevation}
+    (default \{-30\}\{15\})}
+  With the |3d view| option, the projection of the 3D coordinates on the 2D page
+  is defined. It is determined by rotating the coordinate system by
+  $-\meta{azimuth}$ around the $z$-axis, and by \meta{elevation} around the
+  (new) $x$-axis, as shown below.
+
+  \begin{tikzpicture}[
+    viewpoint/.pic={
+      \draw (22.5:0.45) -- (0,0) -- (-22.5:0.45);
+      \draw (0,0) ++ (22.5:0.35) arc (22.5:-22.5:0.35);
+      \draw (0.225,0) circle (0.02 and 0.09);
+    }]
+    \begin{scope}[3d view={-20}{20}]
+      \draw[->] (-3,0,0) -- (3,0,0) node[pos=1.05]{x};
+      \draw[->] (0,-3,0) -- (0,3,0) node[pos=1.05]{y};
+      \draw[->] (0,0,-1) -- (0,0,3) node[pos=1.05]{z};
+
+      \pgfmathsetmacro\az{50}
+      \begin{scope}[canvas is xy plane at z=0]
+        \draw[->] (0,0) ++(0,-2) arc (-90:-90+\az:2) coordinate[pos=0.5](az);
+        \draw (az) -- ++(-90+\az/2:1) node[below]{\meta{azimuth}};
+        \draw[dashed] (0,0) -- ++(-90+\az:3);
+      \end{scope}
+      \begin{scope}[rotate around z=\az]
+        \pgfmathsetmacro\el{50}
+        \begin{scope}[canvas is yz plane at x=0]
+          \draw[->] (0,0) ++(-2.5,0) arc (180:180-\el:2.5)
+            coordinate[pos=0.5](el);
+          \draw (el) -- ++(180-\el/2:1) node[above]{\meta{elevation}};
+          \draw[dashed] (0,0) --
+            pic[solid,sloped,transform shape,pos=1.2]{viewpoint} ++(180-\el:3);
+        \end{scope}
+      \end{scope}
+    \end{scope}
+  \end{tikzpicture}
+
+  For example, when both \meta{azimuth} and \meta{elevation} are 0$^\circ$,
+  $+z$ will be pointing upward, and $+x$ will be pointing right. The default is
+  as shown below.
+\begin{codeexample}[]
+\begin{tikzpicture}[3d view]
+  \draw[->] (-1,0,0) -- (1,0,0) node[pos=1.1]{x};
+  \draw[->] (0,-1,0) -- (0,1,0) node[pos=1.1]{y};
+  \draw[->] (0,0,-1) -- (0,0,1) node[pos=1.1]{z};
+\end{tikzpicture}
+\end{codeexample}
+\end{key}
+
+\begin{stylekey}{/tikz/isometric view}
+  A special kind of |3d view| is isometric, which can be set with the
+  |isometric view| style. It simply sets |3d view={-45}{35.26}|. The value for
+  \meta{elevation} is determined with $\arctan(1/\sqrt{2})$. In isometric
+  projection the angle between any pair of axes is 120$^\circ$, as shown below.
+\begin{codeexample}[]
+\begin{tikzpicture}[isometric view]
+  \draw[->] (-1,0,0) -- (1,0,0) node[pos=1.1]{x};
+  \draw[->] (0,-1,0) -- (0,1,0) node[pos=1.1]{y};
+  \draw[->] (0,0,-1) -- (0,0,1) node[pos=1.1]{z};
+\end{tikzpicture}
+\end{codeexample}
+\end{stylekey}
+
+\subsection{Defining the perspective}
+
+\newcommand\simplecuboid[3]{%
+  \fill[gray!80!white] (tpp cs:x=0,y=0,z=#3)
+    -- (tpp cs:x=0,y=#2,z=#3)
+    -- (tpp cs:x=#1,y=#2,z=#3)
+    -- (tpp cs:x=#1,y=0,z=#3) -- cycle;
+  \fill[gray]  (tpp cs:x=0,y=0,z=0)
+    -- (tpp cs:x=0,y=0,z=#3)
+    -- (tpp cs:x=0,y=#2,z=#3)
+    -- (tpp cs:x=0,y=#2,z=0) -- cycle;
+  \fill[gray!50!white] (tpp cs:x=0,y=0,z=0)
+    -- (tpp cs:x=0,y=0,z=#3)
+    -- (tpp cs:x=#1,y=0,z=#3)
+    -- (tpp cs:x=#1,y=0,z=0) -- cycle;}
+
+\newcommand{\simpleaxes}[3]{%
+  \draw[->] (-0.5,0,0) -- (#1,0,0) node[pos=1.1]{x};
+  \draw[->] (0,-0.5,0) -- (0,#2,0) node[pos=1.1]{y};
+  \draw[->] (0,0,-0.5) -- (0,0,#3) node[pos=1.1]{z};}
+
+In this section, the following example cuboid will be used with various scaling.
+As a reference, the axes will be shown too, without perspective projection.
+\begingroup
+\let\simplecuboid\relax
+\let\simpleaxes\relax
+\begin{codeexample}[]
+\newcommand\simplecuboid[3]{%
+  \fill[gray!80!white] (tpp cs:x=0,y=0,z=#3)
+    -- (tpp cs:x=0,y=#2,z=#3)
+    -- (tpp cs:x=#1,y=#2,z=#3)
+    -- (tpp cs:x=#1,y=0,z=#3) -- cycle;
+  \fill[gray]  (tpp cs:x=0,y=0,z=0)
+    -- (tpp cs:x=0,y=0,z=#3)
+    -- (tpp cs:x=0,y=#2,z=#3)
+    -- (tpp cs:x=0,y=#2,z=0) -- cycle;
+  \fill[gray!50!white] (tpp cs:x=0,y=0,z=0)
+    -- (tpp cs:x=0,y=0,z=#3)
+    -- (tpp cs:x=#1,y=0,z=#3)
+    -- (tpp cs:x=#1,y=0,z=0) -- cycle;}
+\newcommand{\simpleaxes}[3]{%
+  \draw[->] (-0.5,0,0) -- (#1,0,0) node[pos=1.1]{x};
+  \draw[->] (0,-0.5,0) -- (0,#2,0) node[pos=1.1]{y};
+  \draw[->] (0,0,-0.5) -- (0,0,#3) node[pos=1.1]{z};}
+
+\begin{tikzpicture}[3d view]
+  \simplecuboid{2}{2}{2}
+  \simpleaxes{2}{2}{2}
+\end{tikzpicture}
+\end{codeexample}
+\endgroup
+
+\begin{key}{/tikz/perspective=\meta{vanishing points}
+    (default p=\{(10,0,0)\},q=\{(0,10,0)\},r=\{(0,0,20)\})}
+  The `strength' of the perspective can be determined by setting the location of
+  the vanishing points. The default values have a stronger perspective towards
+  $x$ and $y$ than towards $z$, as shown below.
+\begin{codeexample}[]
+\begin{tikzpicture}[3d view,perspective]
+  \simplecuboid{2}{2}{2}
+  \simpleaxes{2}{2}{2}
+\end{tikzpicture}
+\end{codeexample}
+  From this example it also shows that the maximum dimensions of the cuboid are
+  no longer 2 by 2 by 2. This is inherent to the perspective projection.
+  %
+  \begin{key}{/tikz/perspective/p=\marg{x,y,z} (initially (0,0,0))}
+    The location of the vanishing point that determines the `strength' of the
+    perspective in $x$-direction can be set with the |p| key.
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  3d view,
+  perspective={
+    p = {(5,0,0)}}]
+  \simplecuboid{2}{2}{2}
+  \simpleaxes{2}{2}{2}
+\end{tikzpicture}
+\end{codeexample}
+    Note also that when only |p| is provided, the perspective in $y$ and $z$
+    direction is turned off.
+
+    To turn of the perspective in $x$-direction, one must set the $x$ component
+    of |p| to \texttt{0} (e.g. |p={(0,a,b)}|, where \texttt{a} and \texttt{b}
+    can be any number and will be ignored). Or one can provide |q| and |r| and
+    omit |p|.
+
+    By changing the $y$ and $z$ components of |p|, one can achieve various
+    effects.
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  3d view,
+  perspective={
+    p = {(5,0,1)}}]
+  \simplecuboid{2}{2}{2}
+  \simpleaxes{2}{2}{2}
+\end{tikzpicture}
+\end{codeexample}
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  3d view,
+  perspective={
+    p = {(5,1,0)}}]
+  \simplecuboid{2}{2}{2}
+  \simpleaxes{2}{2}{2}
+\end{tikzpicture}
+\end{codeexample}
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  3d view,
+  perspective={
+    p = {(5,1,1)}}]
+  \simplecuboid{2}{2}{2}
+  \simpleaxes{2}{2}{2}
+\end{tikzpicture}
+\end{codeexample}
+  \end{key}
+  %
+  \begin{key}{/tikz/perspective/q=\marg{x,y,z} (initially (0,0,0))}
+    Similar to |p|, but can be turned off by setting its $y$ component to
+    \texttt{0}.
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  3d view,
+  perspective={
+    q = {(0,5,0)}}]
+  \simplecuboid{2}{2}{2}
+  \simpleaxes{2}{2}{2}
+\end{tikzpicture}
+\end{codeexample}
+  \end{key}
+  %
+  \begin{key}{/tikz/perspective/r=\marg{x,y,z} (initially (0,0,0))}
+    Similar to |p|, but can be turned off by setting its $z$ component to
+    \texttt{0}.
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  3d view,
+  perspective={
+    r = {(0,0,5)}}]
+  \simplecuboid{2}{2}{2}
+  \simpleaxes{2}{2}{2}
+\end{tikzpicture}
+\end{codeexample}
+  \end{key}
+\end{key}
+
+\subsection{Shortcomings}
+  Currently a number of things are not working, mostly due to the fact that PGF
+  uses a 2D coordinate system underwater, and perspective projection is a
+  non-linear affine transformation which needs to be aware of all three
+  coordinates. These three coordinates are currently lost when processing a 3D
+  coordinate.
+  The issues include, but possibly are not limited to:
+  \begin{itemize}
+    \item Keys like |shift|, |xshift|, |yshift| are not working
+    \item Keys like |rotate around x|, |rotate around y|, and |rotate around z|
+      are not working
+    \item Units are not working
+    \item Most keys from the |3d| library are unsupported, e.g. all the
+      |canvas is .. plane| keys.
+  \end{itemize}
+
+\subsection{Examples}
+An |r| that lies `below' your drawing can mimic a macro effect.
+\nopagebreak
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  isometric view,
+  perspective={
+    p = {(8,0,0)},
+    q = {(0,8,0)},
+    r = {(0,0,-8)}}]
+
+  \simplecuboid{2}{2}{2}]
+
+\end{tikzpicture}
+\end{codeexample}
+
+A peculiar phenomenon inherent to perspective drawing, is that however great
+your coordinate will become in the direction of the vanishing point, it will
+never reach it.
+\nopagebreak
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  isometric view,
+  perspective={
+    p = {(4,0,0)},
+    q = {(0,4,0)}}]
+
+    \node[fill=red,circle,inner sep=1.5pt,label=above:p] at (4,0,0){};
+
+    \foreach \i in {0,...,100}{
+      \filldraw[fill = gray] (tpp cs:x=\i,y=0,z=0)
+        -- (tpp cs:x=\i+0.5,y=0,z=0)
+        -- (tpp cs:x=\i+0.5,y=2,z=0)
+        -- (tpp cs:x=\i,y=2,z=0)
+        -- cycle;}
+\end{tikzpicture}
+\end{codeexample}
+
+Even for simple examples, the added perspective might add another `dimension' to
+your drawing. In this case, two vanishing points give a more intuitive result
+then three would.
+\nopagebreak
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  scale=0.7,
+  3d view,
+  perspective={
+    p = {(20,0,0)},
+    q = {(0,20,0)}}]
+
+  \filldraw[fill=brown] (tpp cs:x=0,y=0,z=0)
+    -- (tpp cs:x=0,y=4,z=0)
+    -- (tpp cs:x=0,y=4,z=2)
+    -- (tpp cs:x=0,y=2,z=4)
+    -- (tpp cs:x=0,y=0,z=2) -- cycle;
+  \filldraw[fill=red!70!black] (tpp cs:x=0,y=0,z=2)
+    -- (tpp cs:x=5,y=0,z=2)
+    -- (tpp cs:x=5,y=2,z=4)
+    -- (tpp cs:x=0,y=2,z=4) -- cycle;
+  \filldraw[fill=brown!80!white] (tpp cs:x=0,y=0,z=0)
+    -- (tpp cs:x=0,y=0,z=2)
+    -- (tpp cs:x=5,y=0,z=2)
+    -- (tpp cs:x=5,y=0,z=0) -- cycle;
+\end{tikzpicture}
+\end{codeexample}
+
+With the vanishing points nearby, the distortion of parallel lines becomes very
+strong. This might lead to \texttt{Dimension too large} errors.
+\nopagebreak
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  3d view,
+  perspective={
+    p = {(2,0,0)},
+    q = {(0,2,0)},
+    r = {(0,0,2)}},
+  scale=4,
+  vanishing point/.style={fill,circle,inner sep=2pt}]
+
+  \simplecuboid{3}{1}{2}
+
+  \node[vanishing point,label = right:p] (p) at (2,0,0){};
+  \node[vanishing point,label = left:q] (q) at (0,2,0){};
+  \node[vanishing point,label = above:r] (r) at (0,0,2){};
+
+  \begin{scope}[dotted]
+    \foreach \y in {0,1}{
+      \foreach \z in {0,2}{
+        \draw (tpp cs:x=0,y=\y,z=\z) -- (p.center);}}
+    \foreach \x in {0,3}{
+      \foreach \z in {0,2}{
+        \draw (tpp cs:x=\x,y=0,z=\z) -- (q.center);}}
+    \foreach \x in {0,3}{
+      \foreach \y in {0,1}{
+        \draw (tpp cs:x=\x,y=\y,z=0) -- (r.center);}}
+  \end{scope}
+\end{tikzpicture}
+\end{codeexample}
+
+% A more complex example.
+\iffalse
+Of course these examples can become as complex as desired, but as with any 3D
+drawing using \tikzname, the order of drawing commands is important and can
+become increasingly more complex.
+\nopagebreak
+\begin{codeexample}[]
+\begin{tikzpicture}[
+  cycle of vertices/.style 2 args={
+    insert path={
+      foreach \i [count=\j,evaluate=\j as \k using
+        {ifthenelse(\j==1,"","-- "}] in {#2}{\k (vert-#1-\i)} -- cycle}},
+  scale=0.7,
+  line join=round,
+  bottom/.style={draw=white!50!black,fill=white!40!black},
+  front/.style={draw=white!50!black,fill=black},
+  side/.style={draw=white!50!black,fill=white!80!black},
+]
+  \begin{scope}[
+    3d view={-20}{0},
+    perspective={
+      p = {(20,0,0)},
+      q = {(0,20,0)},
+      r = {(5,1,50)},
+    }]
+    \path foreach \x/\y/\z [count=\i] in {
+      3.5/2.0/0.0,3.5/2.0/4.0,6.0/2.0/4.0,6.5/2.0/3.5,6.5/2.0/0.5,6.0/2.0/0.0,
+      4.5/2.0/1.0,4.5/2.0/3.0,5.5/2.0/3.0,5.5/2.0/1.0,3.5/0.0/0.0,3.5/0.0/4.0,
+      6.0/0.0/4.0,6.5/0.0/3.5,6.5/0.0/0.5,6.0/0.0/0.0,4.5/0.0/1.0,4.5/0.0/3.0,
+      5.5/0.0/3.0,5.5/0.0/1.0%
+    }{(tpp cs:x=\x,y=\y,z=\z) coordinate[name=vert-D-\i]};
+    \filldraw[front,cycle of vertices={D}{1,...,6},
+      cycle of vertices={D}{7,10,9,8}];
+    \filldraw[side,cycle of vertices={D}{10,9,19,20}];
+    \filldraw[bottom,cycle of vertices={D}{8,9,19,18}];
+    \filldraw[front,cycle of vertices={D}{11,...,16},
+      cycle of vertices={D}{17,20,19,18}];
+    \filldraw[side,cycle of vertices={D}{1,2,12,11}];
+    % '3'
+    \path foreach \x/\y/\z [count=\i] in {
+      0.0/2.0/0.0,0.0/2.0/1.0,2.0/2.0/1.0,2.0/2.0/1.5,0.0/2.0/1.5,0.0/2.0/2.5,
+      2.0/2.0/2.5,2.0/2.0/3.0,0.0/2.0/3.0,0.0/2.0/4.0,3.0/2.0/4.0,3.0/2.0/0.0,
+      0.0/0.0/0.0,0.0/0.0/1.0,2.0/0.0/1.0,2.0/0.0/1.5,0.0/0.0/1.5,0.0/0.0/2.5,
+      2.0/0.0/2.5,2.0/0.0/3.0,0.0/0.0/3.0,0.0/0.0/4.0,3.0/0.0/4.0,3.0/0.0/0.0%
+    }{(tpp cs:x=\x,y=\y,z=\z) coordinate[name=vert-3-\i]};
+    \filldraw[front,cycle of vertices={3}{1,...,12}];
+    \filldraw[side,cycle of vertices={3}{3,4,16,15}];
+    \filldraw[side,cycle of vertices={3}{7,8,20,19}];
+    \filldraw[side,cycle of vertices={3}{1,2,14,13}];
+    \filldraw[side,cycle of vertices={3}{5,6,18,17}];
+    \filldraw[side,cycle of vertices={3}{9,10,22,21}];
+    \filldraw[bottom,cycle of vertices={3}{4,5,17,16}];
+    \filldraw[bottom,cycle of vertices={3}{8,9,21,20}];
+    \filldraw[front,cycle of vertices={3}{13,...,24}];
+  \end{scope}
+\end{tikzpicture}
+\end{codeexample}
+\fi
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-library-perspective.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-main-body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-main-body.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-main-body.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -50,6 +50,7 @@
 
     \foreach \where in {-9cm,9cm}
     {\nodeshadowed [at={(\where,5cm)}] {
+    % TODO: Nesting tikzpictures is NOT supported
     \tikz \draw [green!20!black, rotate=90]
     [l-system={rule set={F -> FF-[-F+F]+[+F-F]}, axiom=F, order=4,
       step=2pt, randomize step percent=50, angle=30, randomize angle percent=5}]
@@ -220,7 +221,7 @@
 
 \title{\bfseries The \tikzname\ and {\Large PGF} Packages\\
   \large Manual for version \pgfversion\\[1mm]
-\large\href{https://sourceforge.net/projects/pgf}{\texttt{https://sourceforge.net/projects/pgf}}}
+\large\href{https://github.com/pgf-tikz/pgf}{\texttt{https://github.com/pgf-tikz/pgf}}}
 \author{Till Tantau\footnote{Editor of this documentation. Parts of
     this documentation have been written by other authors as indicated
     in these parts or chapters and in Section~\ref{section-authors}.}\\
@@ -536,6 +537,7 @@
 \include{pgfmanual-en-library-mindmaps}
 \include{pgfmanual-en-library-folding}
 \include{pgfmanual-en-library-patterns}
+\include{pgfmanual-en-library-perspective}
 \include{pgfmanual-en-library-petri}
 \include{pgfmanual-en-library-plot-handlers}
 \include{pgfmanual-en-library-plot-marks}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-main-preamble.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-main-preamble.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-main-preamble.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -94,6 +94,7 @@
   views,
   animations,
   rdf,
+  perspective,
 }
 
 \usepackage{ifluatex}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-pgffor.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-pgffor.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-pgffor.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -359,6 +359,19 @@
 \end{codeexample}
         %
     \end{key}
+
+    \begin{key}{/pgf/foreach/parse=\marg{boolean} (default false)}
+        If this key is set to true the upper bound in the loop will be
+        fed into |\pgfmathparse|. This allows to use complex expressions as
+        the upper bound. However, the expression must be safe for evaluation
+        in |\pgfmathparse|. It is known that internal \TeX\ registers can
+        cause trouble.
+        %
+\begin{codeexample}[]
+\foreach \x [parse=true] in {1,...,1.0e+1 - 1}{ \x }
+\end{codeexample}
+        %
+    \end{key}
 \end{command}
 
 \begin{command}{\breakforeach}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-coordinates.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-coordinates.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-coordinates.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -1046,7 +1046,7 @@
     whatever value it had at the beginning of the scope. More precisely, when
     \tikzname\ encounters |}| on a path, it checks whether at this particular
     moment the key is set to |true|. If so, the current position reverts to the
-    value is had when the matching |{| was read.
+    value it had when the matching |{| was read.
     %
 \begin{codeexample}[]
 \begin{tikzpicture}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-decorations.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-decorations.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tikz-decorations.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -474,25 +474,20 @@
     which |0pt| by default. Thus, for the |pre| option to have any effect, you
     also need to set the |pre length| option.
     %
+    % TODO: Nesting tikzpictures is NOT supported
 \begin{codeexample}[]
-\begin{tikzpicture}
 \tikz [decoration={zigzag,pre=lineto,pre length=1cm}]
   \draw [decorate] (0,0) -- (2,1) arc (90:0:1);
-\end{tikzpicture}
 \end{codeexample}
     %
 \begin{codeexample}[]
-\begin{tikzpicture}
 \tikz [decoration={zigzag,pre=moveto,pre length=1cm}]
   \draw [decorate] (0,0) -- (2,1) arc (90:0:1);
-\end{tikzpicture}
 \end{codeexample}
     %
 \begin{codeexample}[]
-\begin{tikzpicture}
 \tikz [decoration={zigzag,pre=crosses,pre length=1cm}]
   \draw [decorate] (0,0) -- (2,1) arc (90:0:1);
-\end{tikzpicture}
 \end{codeexample}
 
     Note that the default |pre| option is |lineto|, not |curveto|. This means
@@ -500,17 +495,13 @@
     reasons). Change the |pre| key to |curveto| if you have a curved path.
     %
 \begin{codeexample}[]
-\begin{tikzpicture}
 \tikz [decoration={zigzag,pre length=3cm}]
   \draw [decorate] (0,0) -- (2,1) arc (90:0:1);
-\end{tikzpicture}
 \end{codeexample}
     %
 \begin{codeexample}[]
-\begin{tikzpicture}
 \tikz [decoration={zigzag,pre=curveto,pre length=3cm}]
   \draw [decorate] (0,0) -- (2,1) arc (90:0:1);
-\end{tikzpicture}
 \end{codeexample}
     %
 \end{key}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-Euclid.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-Euclid.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/text-en/pgfmanual-en-tutorial-Euclid.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -488,7 +488,7 @@
     Produce the straight lines \A\E\ and \B\F\ in a straight line with
     \D\A\ and \D\B. Describe the circle \C\G\H\ with center \B\ and
     radius \B\C, and  again, describe the circle \G\K\L\ with center
-    \D\ and radius \D\G. 	
+    \D\ and radius \D\G.
 
     Since the point \B\ is the center of the circle \C\G\H, therefore
     \B\C\ equals \B\G. Again, since the point \D\ is the center of the

Modified: trunk/Master/texmf-dist/doc/generic/pgf/version-for-dvisvgm/en/Makefile
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/version-for-dvisvgm/en/Makefile	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/version-for-dvisvgm/en/Makefile	2019-04-04 20:55:44 UTC (rev 50758)
@@ -17,7 +17,7 @@
 
 pgfmanual.svg: $(doc).tex $(doc).ind revisionfile
 	TEXINPUTS="$(TEXINPUTS)" $(latex) $(doc).tex
-	dvisvgm --no-merge --output=%f-%4p.svg --page=1- --bbox=a4 --linkmark=none $(doc)
+	dvisvgm --font-format=woff --no-merge --output=%f-%4p.svg --page=1- --bbox=a4 --linkmark=none $(doc)
 
 pgfmanual-no-font.svg: $(doc).tex $(doc).ind revisionfile
 	TEXINPUTS="$(TEXINPUTS)" $(latex) $(doc).tex

Modified: trunk/Master/texmf-dist/doc/generic/pgf/version-for-dvisvgm/pgfmanual-dvisvgm.cfg
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/version-for-dvisvgm/pgfmanual-dvisvgm.cfg	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/version-for-dvisvgm/pgfmanual-dvisvgm.cfg	2019-04-04 20:55:44 UTC (rev 50758)
@@ -11,7 +11,12 @@
 
 \usepackage[hypertex]{hyperref}
 \makeatletter
-\expandafter\g at addto@macro\csname ttfamily \endcsname{\ignoreligaturesinfont\font\relax}
+\g at addto@macro\selectfont{%
+  \long\edef\longf at family{\f at family}%
+  \ifx\longf at family\ttdefault
+    \ignoreligaturesinfont\font\relax
+  \fi
+}
 \makeatother
 
 \usepackage{graphicx,xcolor}

Modified: trunk/Master/texmf-dist/doc/generic/pgf/version-for-luatex/pgfmanual-luatex.cfg
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/version-for-luatex/pgfmanual-luatex.cfg	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/version-for-luatex/pgfmanual-luatex.cfg	2019-04-04 20:55:44 UTC (rev 50758)
@@ -11,7 +11,12 @@
 \usepackage[hyphens]{url}
 \usepackage[pdfborder={0 0 0}]{hyperref}
 \makeatletter
-\expandafter\g at addto@macro\csname ttfamily \endcsname{\ignoreligaturesinfont\font\relax}
+\g at addto@macro\selectfont{%
+  \long\edef\longf at family{\f at family}%
+  \ifx\longf at family\ttdefault
+    \ignoreligaturesinfont\font\relax
+  \fi
+}
 \makeatother
 
 % Just make sure to compile this using lualatex.

Modified: trunk/Master/texmf-dist/doc/generic/pgf/version-for-pdftex/pgfmanual-pdftex.cfg
===================================================================
--- trunk/Master/texmf-dist/doc/generic/pgf/version-for-pdftex/pgfmanual-pdftex.cfg	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/doc/generic/pgf/version-for-pdftex/pgfmanual-pdftex.cfg	2019-04-04 20:55:44 UTC (rev 50758)
@@ -11,7 +11,12 @@
 \usepackage[hyphens]{url}
 \usepackage[pdfborder={0 0 0}]{hyperref}
 \makeatletter
-\expandafter\g at addto@macro\csname ttfamily \endcsname{\pdfnoligatures\font\relax}
+\g at addto@macro\selectfont{%
+  \long\edef\longf at family{\f at family}%
+  \ifx\longf at family\ttdefault
+    \pdfnoligatures\font\relax
+  \fi
+}
 \makeatother
 
 % Just make sure to compile this using pdfelatex.

Modified: trunk/Master/texmf-dist/source/generic/pgf/testsuite/external/tikzexternaltest.code.tex
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/generic/pgf/testsuite/external/tikzexternaltest.sharedpreamble.tex
===================================================================
--- trunk/Master/texmf-dist/source/generic/pgf/testsuite/external/tikzexternaltest.sharedpreamble.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/source/generic/pgf/testsuite/external/tikzexternaltest.sharedpreamble.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -5,16 +5,16 @@
 \usepackage{hyperref}
 
 \IfFileExists{pgfplots.sty}{%
-	\usepackage{pgfplots}
+    \usepackage{pgfplots}
 }{}%
 
 \IfFileExists{tikzlibraryexternal.code.tex}{%
-	\usetikzlibrary{external}
+    \usetikzlibrary{external}
 }{%
-	\message{TEST IS RUNNING IN COMPATIBILITY MODE}%
-	% a test to check for pgf 2.00 compatibility, to check whether the
-	% external library copy shipped with pgfplots works:
-	\usepgfplotslibrary{external}
+    \message{TEST IS RUNNING IN COMPATIBILITY MODE}%
+    % a test to check for pgf 2.00 compatibility, to check whether the
+    % external library copy shipped with pgfplots works:
+    \usepgfplotslibrary{external}
 }%
 
 \pgfkeys{/pgf/images/include external/.code={\href{file:#1}{\pgfimage{#1}}}}

Modified: trunk/Master/texmf-dist/source/generic/pgf/testsuite/mathtest/pgfmathtestsuite.tex
===================================================================
--- trunk/Master/texmf-dist/source/generic/pgf/testsuite/mathtest/pgfmathtestsuite.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/source/generic/pgf/testsuite/mathtest/pgfmathtestsuite.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -1,5 +1,5 @@
-% FIXME: this class is MESSY. 
-% 
+% FIXME: this class is MESSY.
+%
 % rewrite with proper assertions ... it goes back to a time where I
 % merely wanted to inspect the results!
 %
@@ -13,10 +13,10 @@
 \usepackage{ifpdf}
 
 \ifpdf
-	\usepackage{hyperref}
+    \usepackage{hyperref}
 \else
-	\def\pgfsysdriver{pgfsys-dvipdfm.def}
-	\usepackage[dvipdfm]{hyperref}
+    \def\pgfsysdriver{pgfsys-dvipdfm.def}
+    \usepackage[dvipdfm]{hyperref}
 \fi
 \usepackage{tikz}
 \usepackage{fp}
@@ -23,10 +23,10 @@
 
 \makeatletter
 \pgfutil at ifundefined{pgfmathdeclarefunction}{
-	% load pgfplots with its pgf 2.00 compatibility code:
-	\usepackage{pgfplots}
+    % load pgfplots with its pgf 2.00 compatibility code:
+    \usepackage{pgfplots}
 }{
-	\usepgflibrary{fpu}
+    \usepgflibrary{fpu}
 }
 \makeatother
 
@@ -46,93 +46,93 @@
 
 
 \def\compare#1#2{%
-	\begingroup
-	\message{COMPUTING LOG(#1)}%
-	\pgfmathlog{#1}%
-	\let\actual=\pgfmathresult
-	\def\expected{#2}%
-	\pgfmathsubtract\actual\expected%
-	\let\abserr=\pgfmathresult
-	\pgfmathdivide\abserr\expected
-	\let\relerr=\pgfmathresult
-	\noindent
-	log(#1)\hfill=
-	\expected;\hfill%
-	actual=\actual;\hfill%
-	abserr=\abserr;\hfill%
-	relerr=\relerr;\hfill%
-	\endgroup
-	\par
+    \begingroup
+    \message{COMPUTING LOG(#1)}%
+    \pgfmathlog{#1}%
+    \let\actual=\pgfmathresult
+    \def\expected{#2}%
+    \pgfmathsubtract\actual\expected%
+    \let\abserr=\pgfmathresult
+    \pgfmathdivide\abserr\expected
+    \let\relerr=\pgfmathresult
+    \noindent
+    log(#1)\hfill=
+    \expected;\hfill%
+    actual=\actual;\hfill%
+    abserr=\abserr;\hfill%
+    relerr=\relerr;\hfill%
+    \endgroup
+    \par
 }%
 %--------------------------------------------------
 % \def\showlowlevelfloat#1#2e#3\relax{%
-% 	\ensuremath{[#1] \cdot #2 \cdot 10^{#3}}%
+%     \ensuremath{[#1] \cdot #2 \cdot 10^{#3}}%
 % }%
-%-------------------------------------------------- 
+%--------------------------------------------------
 \long\def\showlowlevelfloatmacro#1{#1}
 
 \long\def\showlowlevelfloatmacrolong#1{%
-	#1 is decomposed into 
+    #1 is decomposed into
 
-	{%
-		\gdef\testerror{}%
-		\pgfmathfloattoregisters{#1}{\count0 }{\dimen0 }{\count1 }%
-		pgfmathfloattoregisters: flags \the\count0; M=\the\dimen0; E=\the\count1
-		\ifx\testerror\empty
-		\else
-			\par (caught \texttt{\testerror})%
-		\fi
-	}%
-		
-	{%
-		\gdef\testerror{}%
-		pgfmathfloattoregisterstok: \pgfmathfloattoregisterstok{#1}{\count0 }{\toks0 }{\count1 }%
-		flags \the\count0; M=\the\toks0; E=\the\count1
-		\ifx\testerror\empty
-		\else
-			\par (caught \texttt{\testerror})%
-		\fi
-	}%
+    {%
+        \gdef\testerror{}%
+        \pgfmathfloattoregisters{#1}{\count0 }{\dimen0 }{\count1 }%
+        pgfmathfloattoregisters: flags \the\count0; M=\the\dimen0; E=\the\count1
+        \ifx\testerror\empty
+        \else
+            \par (caught \texttt{\testerror})%
+        \fi
+    }%
 
-	{%
-		\gdef\testerror{}%
-		pgfmathfloatgetflags \pgfmathfloatgetflags{#1}{\count0 }
-		flags \the\count0;
-		\ifx\testerror\empty
-		\else
-			\par (caught \texttt{\testerror})%
-		\fi
-	}%
+    {%
+        \gdef\testerror{}%
+        pgfmathfloattoregisterstok: \pgfmathfloattoregisterstok{#1}{\count0 }{\toks0 }{\count1 }%
+        flags \the\count0; M=\the\toks0; E=\the\count1
+        \ifx\testerror\empty
+        \else
+            \par (caught \texttt{\testerror})%
+        \fi
+    }%
 
-	\medskip
-	%\expandafter\showlowlevelfloat#1\relax
+    {%
+        \gdef\testerror{}%
+        pgfmathfloatgetflags \pgfmathfloatgetflags{#1}{\count0 }
+        flags \the\count0;
+        \ifx\testerror\empty
+        \else
+            \par (caught \texttt{\testerror})%
+        \fi
+    }%
+
+    \medskip
+    %\expandafter\showlowlevelfloat#1\relax
 }%
 
 \def\showsinglenumberparsing#1{%
 %\tracingmacros=2\tracingcommands=2
-	\begingroup
-	\message{PARSING NUMBER #1...}%
-	\gdef\testerror{}%
-	\pgfmathfloatparsenumber{#1}%
-	\let\resultasfloat=\pgfmathresult
-	\pgfmathfloattofixed\resultasfloat
-	\let\resultasfixed=\pgfmathresult
-	\[ #1 \mapsto \resultasfloat = \showlowlevelfloatmacro\resultasfloat \mapsto \resultasfixed 
-	\]
-		\ifx\testerror\empty
-		\else
-			\par (caught \texttt{\testerror})%
-		\fi
-	\endgroup
+    \begingroup
+    \message{PARSING NUMBER #1...}%
+    \gdef\testerror{}%
+    \pgfmathfloatparsenumber{#1}%
+    \let\resultasfloat=\pgfmathresult
+    \pgfmathfloattofixed\resultasfloat
+    \let\resultasfixed=\pgfmathresult
+    \[ #1 \mapsto \resultasfloat = \showlowlevelfloatmacro\resultasfloat \mapsto \resultasfixed
+    \]
+        \ifx\testerror\empty
+        \else
+            \par (caught \texttt{\testerror})%
+        \fi
+    \endgroup
 %\tracingmacros=0\tracingcommands=0
 }
 
 \def\pretty#1{%
-	\message{Pretty-printing #1...}%
-	\pgfmathprintnumberto{#1}\result
-	{\pgfkeys{/pgf/number format/showpos}\pgfmathprintnumberto{#1}\resultpos\global\let\resultpos=\resultpos}%
-	\[ #1 \mapsto \pgfmathprintnumber{#1} [=\resultpos] \]
-	\message{#1 mapsto \meaning\result}%
+    \message{Pretty-printing #1...}%
+    \pgfmathprintnumberto{#1}\result
+    {\pgfkeys{/pgf/number format/showpos}\pgfmathprintnumberto{#1}\resultpos\global\let\resultpos=\resultpos}%
+    \[ #1 \mapsto \pgfmathprintnumber{#1} [=\resultpos] \]
+    \message{#1 mapsto \meaning\result}%
 }
 
 \begin{document}
@@ -146,7 +146,7 @@
 % \showit{4.0}
 % log(1200)=\pgfmathlog{1.2}\pgfmathadd{\pgfmathresult}{6.9077}\pgfmathresult\par
 % log(6.241e-7)=\pgfmathlog{6.241}\pgfmathadd{\pgfmathresult}{-16.11809}\pgfmathresult\par
-%-------------------------------------------------- 
+%--------------------------------------------------
 
 \testsection{Conversion to normalised floating point numbers basis 10}
 \showsinglenumberparsing{123.41251}%
@@ -203,36 +203,36 @@
 
 \testsubsection{Error handling}
 {
-	\pgfkeys{
-		/pgf/fpu/handlers/empty number/.code 2 args={%
-			\gdef\testerror{handlers/empty number=\{#1\}\{#2\}}%
-		},
-		/pgf/fpu/handlers/invalid number/.code 2 args={%
-			\gdef\testerror{handlers/invalid number=\{#1\}\{#2\}}%
-		},
-		/pgf/fpu/handlers/wrong lowlevel format/.code 2 args={%
-			\gdef\testerror{handlers/wrong lowlevel format=\{#1\}\{#2\}}%
-		},
-	}
-	\showsinglenumberparsing{-53e-5 not terminated}
-	%\showsinglenumberparsing{-53e-}
-	\showsinglenumberparsing{}
-	\showsinglenumberparsing{ ASDZ at 414e12}
+    \pgfkeys{
+        /pgf/fpu/handlers/empty number/.code 2 args={%
+            \gdef\testerror{handlers/empty number=\{#1\}\{#2\}}%
+        },
+        /pgf/fpu/handlers/invalid number/.code 2 args={%
+            \gdef\testerror{handlers/invalid number=\{#1\}\{#2\}}%
+        },
+        /pgf/fpu/handlers/wrong lowlevel format/.code 2 args={%
+            \gdef\testerror{handlers/wrong lowlevel format=\{#1\}\{#2\}}%
+        },
+    }
+    \showsinglenumberparsing{-53e-5 not terminated}
+    %\showsinglenumberparsing{-53e-}
+    \showsinglenumberparsing{}
+    \showsinglenumberparsing{ ASDZ at 414e12}
 
-	This one has trailing spaces and should work:
-	\showsinglenumberparsing{10   }
+    This one has trailing spaces and should work:
+    \showsinglenumberparsing{10   }
 
-	This one has leading spaces and should work:
-	\showsinglenumberparsing{   10}
+    This one has leading spaces and should work:
+    \showsinglenumberparsing{   10}
 
-	\testsubsection{Error handling of decompose routines}
+    \testsubsection{Error handling of decompose routines}
 
-	\pgfmathfloatparsenumber{100}
-	\showlowlevelfloatmacrolong{\pgfmathresult}
-		
-	\showlowlevelfloatmacrolong{132}
+    \pgfmathfloatparsenumber{100}
+    \showlowlevelfloatmacrolong{\pgfmathresult}
 
-	\showlowlevelfloatmacrolong{Z}
+    \showlowlevelfloatmacrolong{132}
+
+    \showlowlevelfloatmacrolong{Z}
 }
 
 \testsection{logarithms, compared with PGF arithmetics}
@@ -298,65 +298,65 @@
 {
 \twocolumn
 \def\prettytest{%
-	\pretty{1}
-	\pretty{1.0}
-	\pretty{-1.02311}
-	\pretty{-11241.02311}
-	\pretty{-11241}
-	\pretty{8124.99999}
-	\pretty{8124.849999}
-	\pretty{8124.843333}
-	\pretty{8.82}
-	\pretty{8.5}
-	\pretty{9.}
-	\pretty{5.9}
-	\pretty{-0.00001}
-	\pretty{-1.00001}
-	\pretty{-0.559}
-	\pretty{-0.554}
-	\pretty{-0.00000141}
-	\pretty{1.234e10}
-	\pretty{123456781}
-	\pretty{1234}
-	\pretty{8}
-	\pretty{-9.995}
-	\pretty{-0.015}
-	\pretty{-0.1}
-	\pretty{-0.15}
-	\pretty{0.15}
-	\pretty{-0}
-	\pretty{0}
-	\pretty{9.00}
-	\pretty{200.01}
-	\pretty{200.0000}
-	\pretty{1.5e-7}
-	\pretty{0.00035}
-	\pretty{0.00005}
-	\pretty{nan}
-	\pretty{inf}
-	\pretty{-inf}
-	\pretty{10}
-	\pretty{100}
-	\pretty{200}
-	\pretty{500}
-	\pretty{1000}
-	\pretty{30000}
-	\pretty{600000}
-	\pretty{1000000}
-	\pretty{30000000}
-	\pretty{600000000}
-	\pretty{1000000000}
-	\pretty{-10}
-	\pretty{-100}
-	\pretty{-200}
-	\pretty{-500}
-	\pretty{-1000}
-	\pretty{-30000}
-	\pretty{-600000}
-	\pretty{-1000000}
-	\pretty{-30000000}
-	\pretty{-600000000}
-	\pretty{-1000000000}
+    \pretty{1}
+    \pretty{1.0}
+    \pretty{-1.02311}
+    \pretty{-11241.02311}
+    \pretty{-11241}
+    \pretty{8124.99999}
+    \pretty{8124.849999}
+    \pretty{8124.843333}
+    \pretty{8.82}
+    \pretty{8.5}
+    \pretty{9.}
+    \pretty{5.9}
+    \pretty{-0.00001}
+    \pretty{-1.00001}
+    \pretty{-0.559}
+    \pretty{-0.554}
+    \pretty{-0.00000141}
+    \pretty{1.234e10}
+    \pretty{123456781}
+    \pretty{1234}
+    \pretty{8}
+    \pretty{-9.995}
+    \pretty{-0.015}
+    \pretty{-0.1}
+    \pretty{-0.15}
+    \pretty{0.15}
+    \pretty{-0}
+    \pretty{0}
+    \pretty{9.00}
+    \pretty{200.01}
+    \pretty{200.0000}
+    \pretty{1.5e-7}
+    \pretty{0.00035}
+    \pretty{0.00005}
+    \pretty{nan}
+    \pretty{inf}
+    \pretty{-inf}
+    \pretty{10}
+    \pretty{100}
+    \pretty{200}
+    \pretty{500}
+    \pretty{1000}
+    \pretty{30000}
+    \pretty{600000}
+    \pretty{1000000}
+    \pretty{30000000}
+    \pretty{600000000}
+    \pretty{1000000000}
+    \pretty{-10}
+    \pretty{-100}
+    \pretty{-200}
+    \pretty{-500}
+    \pretty{-1000}
+    \pretty{-30000}
+    \pretty{-600000}
+    \pretty{-1000000}
+    \pretty{-30000000}
+    \pretty{-600000000}
+    \pretty{-1000000000}
 }
 
 \testsubsection{STD format}
@@ -491,61 +491,61 @@
 
 \testsection{Pretty printing using the relative style}
 {
-\long\def\TESTIT#1#2{%	
-	\gdef\temptable{\begin{tabular}}%
-	\gdef\header{l}%
-	\def\n{\noexpand\n}%
-	\foreach \number in {#2} {%
-		\xdef\header{\header c}%
-	}%
-	\toks0=\expandafter{\temptable}%
-	\xdef\temptable{\the\toks0 {\header}\n}%
-	%
-	\toks0=\expandafter{\temptable}%
-	\toks1={}%
-	\xdef\temptable{\the\toks0 \the\toks1}%
-	\foreach \number in {#2} {%
-		\toks0=\expandafter{\temptable}%
-		\toks1=\expandafter{\number}%
-		\xdef\temptable{\the\toks0 & \noexpand\texttt{\the\toks1}}%
-	}%
-	\toks0=\expandafter{\temptable}%
-	\xdef\temptable{\the\toks0 \noexpand\\\n}%
-	%
-	\toks0=\expandafter{\temptable}%
-	\toks1={With actual config:}%
-	\xdef\temptable{\the\toks0 \the\toks1}%
-	\foreach \number in {#2} {%
-		\toks0=\expandafter{\temptable}%
-		\toks1=\expandafter{\number}%
-		\xdef\temptable{\the\toks0 & \noexpand\pgfmathprintnumber{\the\toks1}}%
-	}%
-	\toks0=\expandafter{\temptable}%
-	\xdef\temptable{\the\toks0 \noexpand\\\n}%
-	%
-	\foreach \relativeto in {#1} {%
-		\toks0=\expandafter{\temptable}%
-		\xdef\temptable{\the\toks0 Relative to $10^{\relativeto}$:}%
-		\foreach \number in {#2} {%
-			\toks0=\expandafter{\temptable}%
-			\toks1=\expandafter{\number}%
-			\xdef\temptable{\the\toks0 & \noexpand\pgfmathprintnumber[relative={\relativeto}]{\the\toks1}}%
-		}%
-		\toks0=\expandafter{\temptable}%
-		\xdef\temptable{\the\toks0 \noexpand\\\n}%
-	}%
-	%
-	%
-	\toks0=\expandafter{\temptable}%
-	\toks1={\end{tabular}\n}%
-	\xdef\temptable{\the\toks0 \the\toks1}%
-	%
-	\def\n{^^J}%
+\long\def\TESTIT#1#2{%
+    \gdef\temptable{\begin{tabular}}%
+    \gdef\header{l}%
+    \def\n{\noexpand\n}%
+    \foreach \number in {#2} {%
+        \xdef\header{\header c}%
+    }%
+    \toks0=\expandafter{\temptable}%
+    \xdef\temptable{\the\toks0 {\header}\n}%
+    %
+    \toks0=\expandafter{\temptable}%
+    \toks1={}%
+    \xdef\temptable{\the\toks0 \the\toks1}%
+    \foreach \number in {#2} {%
+        \toks0=\expandafter{\temptable}%
+        \toks1=\expandafter{\number}%
+        \xdef\temptable{\the\toks0 & \noexpand\texttt{\the\toks1}}%
+    }%
+    \toks0=\expandafter{\temptable}%
+    \xdef\temptable{\the\toks0 \noexpand\\\n}%
+    %
+    \toks0=\expandafter{\temptable}%
+    \toks1={With actual config:}%
+    \xdef\temptable{\the\toks0 \the\toks1}%
+    \foreach \number in {#2} {%
+        \toks0=\expandafter{\temptable}%
+        \toks1=\expandafter{\number}%
+        \xdef\temptable{\the\toks0 & \noexpand\pgfmathprintnumber{\the\toks1}}%
+    }%
+    \toks0=\expandafter{\temptable}%
+    \xdef\temptable{\the\toks0 \noexpand\\\n}%
+    %
+    \foreach \relativeto in {#1} {%
+        \toks0=\expandafter{\temptable}%
+        \xdef\temptable{\the\toks0 Relative to $10^{\relativeto}$:}%
+        \foreach \number in {#2} {%
+            \toks0=\expandafter{\temptable}%
+            \toks1=\expandafter{\number}%
+            \xdef\temptable{\the\toks0 & \noexpand\pgfmathprintnumber[relative={\relativeto}]{\the\toks1}}%
+        }%
+        \toks0=\expandafter{\temptable}%
+        \xdef\temptable{\the\toks0 \noexpand\\\n}%
+    }%
+    %
+    %
+    \toks0=\expandafter{\temptable}%
+    \toks1={\end{tabular}\n}%
+    \xdef\temptable{\the\toks0 \the\toks1}%
+    %
+    \def\n{^^J}%
 %\message{TEMP-TABLE: \n\meaning\temptable\n}%
-	%
-	\let\n=\relax
-	\noindent
-	\temptable
+    %
+    \let\n=\relax
+    \noindent
+    \temptable
 }%
 %\tracingmacros=2 \tracingcommands=2
 
@@ -574,20 +574,20 @@
 \begingroup
 \testsection{testing pgfmathfloatadd}
 \def\testfloataddnonsymmetric#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\first=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\second=\pgfmathresult
-	\message{computing #1 + #2;  \first + \second}%
-	\pgfmathfloatadd\first\second
-	\let\result=\pgfmathresult
-	\pgfmathfloattofixed\result
-	\let\resultfixed=\pgfmathresult
-	\[ \text{pgfmathfloatadd: }  \showlowlevelfloatmacro\first  +  \showlowlevelfloatmacro\second = \showlowlevelfloatmacro\result \; \bigl( #1 + #2 = \resultfixed \bigr). \]
+    \pgfmathfloatparsenumber{#1}%
+    \let\first=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\second=\pgfmathresult
+    \message{computing #1 + #2;  \first + \second}%
+    \pgfmathfloatadd\first\second
+    \let\result=\pgfmathresult
+    \pgfmathfloattofixed\result
+    \let\resultfixed=\pgfmathresult
+    \[ \text{pgfmathfloatadd: }  \showlowlevelfloatmacro\first  +  \showlowlevelfloatmacro\second = \showlowlevelfloatmacro\result \; \bigl( #1 + #2 = \resultfixed \bigr). \]
 }%
 \def\testfloatadd#1#2{%
-	\testfloataddnonsymmetric{#1}{#2}%
-	\testfloataddnonsymmetric{#2}{#1}%
+    \testfloataddnonsymmetric{#1}{#2}%
+    \testfloataddnonsymmetric{#2}{#1}%
 }%
 
 \testfloatadd{1}{100}
@@ -623,17 +623,17 @@
 \begingroup
 \testsection{testing pgfmathfloatmultiplyfixed}
 \def\testfloatmultiplyfixed#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\first=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\pgfmathfloattofixed\pgfmathresult
-	\let\second=\pgfmathresult
-	\message{computing #1 * #2;  \first * \second}%
-	\pgfmathfloatmultiplyfixed\first\second
-	\let\result=\pgfmathresult
-	\pgfmathfloattofixed\result
-	\let\resultfixed=\pgfmathresult
-	\[ \text{pgfmathfloatmultiplyfixed: }  \showlowlevelfloatmacro\first  \cdot \second = \showlowlevelfloatmacro\result \; \bigl( #1 \cdot #2 = \resultfixed \bigr). \]
+    \pgfmathfloatparsenumber{#1}%
+    \let\first=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \pgfmathfloattofixed\pgfmathresult
+    \let\second=\pgfmathresult
+    \message{computing #1 * #2;  \first * \second}%
+    \pgfmathfloatmultiplyfixed\first\second
+    \let\result=\pgfmathresult
+    \pgfmathfloattofixed\result
+    \let\resultfixed=\pgfmathresult
+    \[ \text{pgfmathfloatmultiplyfixed: }  \showlowlevelfloatmacro\first  \cdot \second = \showlowlevelfloatmacro\result \; \bigl( #1 \cdot #2 = \resultfixed \bigr). \]
 }%
 
 \testfloatmultiplyfixed{1}{100}
@@ -670,18 +670,18 @@
 
 \testsection{testing pgfmathfloatlessthan}
 \def\testfloatlessthan#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\first=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\second=\pgfmathresult
-	\message{checking #1 <= #2;  \first <= \second}%
-	\pgfmathfloatlessthan\first\second
-	\ifpgfmathfloatcomparison
-		\def\result{<}%
-	\else
-		\def\result{\ge}%
-	\fi
-	\[ \text{pgfmathfloatlessthan: } \bigl( \showlowlevelfloatmacro\first \bigr)\; = #1 \result #2\; \bigl( = \showlowlevelfloatmacro\second \big). \]
+    \pgfmathfloatparsenumber{#1}%
+    \let\first=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\second=\pgfmathresult
+    \message{checking #1 <= #2;  \first <= \second}%
+    \pgfmathfloatlessthan\first\second
+    \ifpgfmathfloatcomparison
+        \def\result{<}%
+    \else
+        \def\result{\ge}%
+    \fi
+    \[ \text{pgfmathfloatlessthan: } \bigl( \showlowlevelfloatmacro\first \bigr)\; = #1 \result #2\; \bigl( = \showlowlevelfloatmacro\second \big). \]
 }%
 
 \testfloatlessthan{4}{5}
@@ -702,15 +702,15 @@
 
 \testsection{float to fixed test}
 \def\testpgfmathfloattofixed#1{%
-	\pgfmathfloatparsenumber{#1}%
+    \pgfmathfloatparsenumber{#1}%
 %\tracingmacros=2\tracingcommands=2
-	\let\argument=\pgfmathresult
-	\message{converting #1 = \argument\  to fixed point}%
-	\pgfmathfloattofixed\argument
-	\let\result=\pgfmathresult
-	\message{-> \result}%
+    \let\argument=\pgfmathresult
+    \message{converting #1 = \argument\  to fixed point}%
+    \pgfmathfloattofixed\argument
+    \let\result=\pgfmathresult
+    \message{-> \result}%
 %\tracingmacros=0\tracingcommands=0
-	\[ \bigl( \showlowlevelfloatmacro\argument \bigr)\; = #1 \mapsto \result \]
+    \[ \bigl( \showlowlevelfloatmacro\argument \bigr)\; = #1 \mapsto \result \]
 }%
 \testpgfmathfloattofixed{0}
 \testpgfmathfloattofixed{5}
@@ -733,21 +733,21 @@
 
 \testsection{Testing pgfmathfloatmin and pgfmathfloatmax}
 \def\testfloatminmax#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\first=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\second=\pgfmathresult
+    \pgfmathfloatparsenumber{#1}%
+    \let\first=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\second=\pgfmathresult
 %\tracingmacros=2\tracingcommands=2
-	\message{computing min/max #1 and #2}%
-	\pgfmathfloatmin\first\second
-	\let\result=\pgfmathresult
-	\pgfmathfloattofixed\result
-	\[ \min\{#1,#2\} = \min\{ \showlowlevelfloatmacro\first, \showlowlevelfloatmacro\second \} \; = \showlowlevelfloatmacro\result = \pgfmathresult \]
-	%
-	\pgfmathfloatmax\first\second
-	\let\result=\pgfmathresult
-	\pgfmathfloattofixed\result
-	\[ \max\{#1,#2\} = \max\{ \showlowlevelfloatmacro\first, \showlowlevelfloatmacro\second \} \; = \showlowlevelfloatmacro\result = \pgfmathresult \]
+    \message{computing min/max #1 and #2}%
+    \pgfmathfloatmin\first\second
+    \let\result=\pgfmathresult
+    \pgfmathfloattofixed\result
+    \[ \min\{#1,#2\} = \min\{ \showlowlevelfloatmacro\first, \showlowlevelfloatmacro\second \} \; = \showlowlevelfloatmacro\result = \pgfmathresult \]
+    %
+    \pgfmathfloatmax\first\second
+    \let\result=\pgfmathresult
+    \pgfmathfloattofixed\result
+    \[ \max\{#1,#2\} = \max\{ \showlowlevelfloatmacro\first, \showlowlevelfloatmacro\second \} \; = \showlowlevelfloatmacro\result = \pgfmathresult \]
 }%
 \testfloatminmax{42}{56}
 \testfloatminmax{-4122}{1256}
@@ -756,13 +756,13 @@
 
 \testsection{Testing pgfmathfloatshift}
 \def\pgfmathfloatshifttest#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\argument=\pgfmathresult
-	\message{computing mathshift #1 by #2}%
-	\pgfmathfloatshift\argument{#2}%
-	\let\result=\pgfmathresult
-	\pgfmathfloattofixed\result
-	\[ #1 \cdot 10^{#2} = \showlowlevelfloatmacro\argument \cdot 10^{#2} = \showlowlevelfloatmacro\result = \pgfmathresult \]
+    \pgfmathfloatparsenumber{#1}%
+    \let\argument=\pgfmathresult
+    \message{computing mathshift #1 by #2}%
+    \pgfmathfloatshift\argument{#2}%
+    \let\result=\pgfmathresult
+    \pgfmathfloattofixed\result
+    \[ #1 \cdot 10^{#2} = \showlowlevelfloatmacro\argument \cdot 10^{#2} = \showlowlevelfloatmacro\result = \pgfmathresult \]
 }%
 \pgfmathfloatshifttest{4}{1}
 \pgfmathfloatshifttest{4}{2}
@@ -775,37 +775,37 @@
 \testsection{Testing pgfmathfloatmultiply}
 \begingroup
 \def\pgfmathfloatmultiplytest#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\argumenta=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\argumentb=\pgfmathresult
-	\message{computing mathmultiply #1 by #2}%
-	\pgfmathfloatmultiply\argumenta\argumentb%
-	\let\result=\pgfmathresult
-	\pgfmathfloattofixed\result
-	\[ #1 \cdot #2 = \showlowlevelfloatmacro\result = \pgfmathresult \]
+    \pgfmathfloatparsenumber{#1}%
+    \let\argumenta=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\argumentb=\pgfmathresult
+    \message{computing mathmultiply #1 by #2}%
+    \pgfmathfloatmultiply\argumenta\argumentb%
+    \let\result=\pgfmathresult
+    \pgfmathfloattofixed\result
+    \[ #1 \cdot #2 = \showlowlevelfloatmacro\result = \pgfmathresult \]
 }%
 \def\tests{%
-	\pgfmathfloatmultiplytest{4}{1}
-	\pgfmathfloatmultiplytest{4}{2}
-	\pgfmathfloatmultiplytest{4}{-1}
-	\pgfmathfloatmultiplytest{4}{-2}
-	\pgfmathfloatmultiplytest{0}{-2}
-	\pgfmathfloatmultiplytest{1.1415130}{-2}
-	\pgfmathfloatmultiplytest{1.1415130}{5}
-	\pgfmathfloatmultiplytest{10}{10}
-	\pgfmathfloatmultiplytest{100}{100}
-	\pgfmathfloatmultiplytest{9999999}{9999999}
-	gnuplot for $\cdot$: $99999980000001.0$
-	\pgfmathfloatmultiplytest{-10}{10}
-	\pgfmathfloatmultiplytest{-90}{3}
-	\pgfmathfloatmultiplytest{-90}{-3}
-	\pgfmathfloatmultiplytest{-inf}{nan}
-	\pgfmathfloatmultiplytest{-inf}{+inf}
-	\pgfmathfloatmultiplytest{1}{0}
-	\pgfmathfloatmultiplytest{1}{0}
-	\pgfmathfloatmultiplytest{1}{-0}
-	\pgfmathfloatmultiplytest{3.14159265358979}{2}
+    \pgfmathfloatmultiplytest{4}{1}
+    \pgfmathfloatmultiplytest{4}{2}
+    \pgfmathfloatmultiplytest{4}{-1}
+    \pgfmathfloatmultiplytest{4}{-2}
+    \pgfmathfloatmultiplytest{0}{-2}
+    \pgfmathfloatmultiplytest{1.1415130}{-2}
+    \pgfmathfloatmultiplytest{1.1415130}{5}
+    \pgfmathfloatmultiplytest{10}{10}
+    \pgfmathfloatmultiplytest{100}{100}
+    \pgfmathfloatmultiplytest{9999999}{9999999}
+    gnuplot for $\cdot$: $99999980000001.0$
+    \pgfmathfloatmultiplytest{-10}{10}
+    \pgfmathfloatmultiplytest{-90}{3}
+    \pgfmathfloatmultiplytest{-90}{-3}
+    \pgfmathfloatmultiplytest{-inf}{nan}
+    \pgfmathfloatmultiplytest{-inf}{+inf}
+    \pgfmathfloatmultiplytest{1}{0}
+    \pgfmathfloatmultiplytest{1}{0}
+    \pgfmathfloatmultiplytest{1}{-0}
+    \pgfmathfloatmultiplytest{3.14159265358979}{2}
 }%
 \tests
 
@@ -812,34 +812,34 @@
 \testsection{Testing pgfmathfloatdivide}
 
 \def\pgfmathfloatmultiplytest#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\argumenta=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\argumentb=\pgfmathresult
-	\message{computing mathdivide #1 by #2}%
-	\pgfmathfloatdivide\argumenta\argumentb%
-	\let\result=\pgfmathresult
-	\pgfmathfloattofixed\result
-	\[ #1 / #2 = \showlowlevelfloatmacro\result = \pgfmathresult \]
+    \pgfmathfloatparsenumber{#1}%
+    \let\argumenta=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\argumentb=\pgfmathresult
+    \message{computing mathdivide #1 by #2}%
+    \pgfmathfloatdivide\argumenta\argumentb%
+    \let\result=\pgfmathresult
+    \pgfmathfloattofixed\result
+    \[ #1 / #2 = \showlowlevelfloatmacro\result = \pgfmathresult \]
 }%
 \tests
 
 % #1/#2 expected #3
 \def\pgfmathfloattest#1#2#3{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\argumenta=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\argumentb=\pgfmathresult
-	\pgfmathfloatparsenumber{#3}%
-	\let\reference=\pgfmathresult
-	\message{computing (#1/#2)}%
-	\pgfmathfloatdivide\argumenta\argumentb%
-	\let\resultfloat=\pgfmathresult
-	\pgfmathfloattosci\pgfmathresult
-	\let\result=\pgfmathresult
-	\pgfmathfloatrelerror\resultfloat\reference
-	\pgfmathfloattosci\pgfmathresult
-	\[ #1/#2 =  \result\quad (\text{error/r to }#3 = \pgfmathprintnumber\pgfmathresult)\]
+    \pgfmathfloatparsenumber{#1}%
+    \let\argumenta=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\argumentb=\pgfmathresult
+    \pgfmathfloatparsenumber{#3}%
+    \let\reference=\pgfmathresult
+    \message{computing (#1/#2)}%
+    \pgfmathfloatdivide\argumenta\argumentb%
+    \let\resultfloat=\pgfmathresult
+    \pgfmathfloattosci\pgfmathresult
+    \let\result=\pgfmathresult
+    \pgfmathfloatrelerror\resultfloat\reference
+    \pgfmathfloattosci\pgfmathresult
+    \[ #1/#2 =  \result\quad (\text{error/r to }#3 = \pgfmathprintnumber\pgfmathresult)\]
 }%
 \pgfmathfloattest{83407811.0}{166815640.0}{0.499999946048224}
 \endgroup
@@ -850,28 +850,28 @@
 % #1 : number
 % #2 : the reference, sqrt (#1)
 \def\pgfmathfloatsqrttest#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\argumenta=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\reference=\pgfmathresult
-	\message{computing sqrt(#1)}%
-	\pgfmathfloatsqrt\argumenta%
-	\let\resultfloat=\pgfmathresult
-	\pgfmathfloattosci\pgfmathresult
-	\let\result=\pgfmathresult
-	\pgfmathfloatrelerror\resultfloat\reference
-	\pgfmathfloattosci\pgfmathresult
-	\[ \sqrt{#1} =  \result\quad (\text{rel. error } \pgfmathresult)\]
+    \pgfmathfloatparsenumber{#1}%
+    \let\argumenta=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\reference=\pgfmathresult
+    \message{computing sqrt(#1)}%
+    \pgfmathfloatsqrt\argumenta%
+    \let\resultfloat=\pgfmathresult
+    \pgfmathfloattosci\pgfmathresult
+    \let\result=\pgfmathresult
+    \pgfmathfloatrelerror\resultfloat\reference
+    \pgfmathfloattosci\pgfmathresult
+    \[ \sqrt{#1} =  \result\quad (\text{rel. error } \pgfmathresult)\]
 }%
 \def\tests{%
-	\pgfmathfloatsqrttest{0}{0}
-	\pgfmathfloatsqrttest{1}{1}
-	\pgfmathfloatsqrttest{2}{1.414213562373}
-	\pgfmathfloatsqrttest{4}{2}
-	\pgfmathfloatsqrttest{16}{4}
-	\pgfmathfloatsqrttest{10}{3.162277660168}
-	\pgfmathfloatsqrttest{1000000}{1000}
-	\pgfmathfloatsqrttest{123456789}{1.111111106055556e+04}
+    \pgfmathfloatsqrttest{0}{0}
+    \pgfmathfloatsqrttest{1}{1}
+    \pgfmathfloatsqrttest{2}{1.414213562373}
+    \pgfmathfloatsqrttest{4}{2}
+    \pgfmathfloatsqrttest{16}{4}
+    \pgfmathfloatsqrttest{10}{3.162277660168}
+    \pgfmathfloatsqrttest{1000000}{1000}
+    \pgfmathfloatsqrttest{123456789}{1.111111106055556e+04}
 }%
 \tests
 }
@@ -880,32 +880,32 @@
 \testsection{Testing pgfmathfloatint}
 % #1 : number
 \def\pgfmathfloatinttest#1{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\argumenta=\pgfmathresult
-	\message{computing int(#1)}%
-	\pgfmathfloatint\argumenta%
-	\pgfmathfloattosci\pgfmathresult
-	\let\result=\pgfmathresult
-	\[ int(#1) =  \result \]
-	%
-	\pgfmathfloatparsenumber{-#1}%
-	\let\argumenta=\pgfmathresult
-	\message{computing int(-#1)}%
-	\pgfmathfloatint\argumenta%
-	\pgfmathfloattosci\pgfmathresult
-	\let\result=\pgfmathresult
-	\[ int(-#1) =  \result \]
+    \pgfmathfloatparsenumber{#1}%
+    \let\argumenta=\pgfmathresult
+    \message{computing int(#1)}%
+    \pgfmathfloatint\argumenta%
+    \pgfmathfloattosci\pgfmathresult
+    \let\result=\pgfmathresult
+    \[ int(#1) =  \result \]
+    %
+    \pgfmathfloatparsenumber{-#1}%
+    \let\argumenta=\pgfmathresult
+    \message{computing int(-#1)}%
+    \pgfmathfloatint\argumenta%
+    \pgfmathfloattosci\pgfmathresult
+    \let\result=\pgfmathresult
+    \[ int(-#1) =  \result \]
 }%
 \def\tests{%
-	\pgfmathfloatinttest{1.23}
-	\pgfmathfloatinttest{12.34}
-	\pgfmathfloatinttest{123.4}
-	\pgfmathfloatinttest{1234.}
-	\pgfmathfloatinttest{1234.1}
-	\pgfmathfloatinttest{1e-2}
-	\pgfmathfloatinttest{0}
-	\pgfmathfloatinttest{3.456789e4}
-	\pgfmathfloatinttest{3.456789e10}
+    \pgfmathfloatinttest{1.23}
+    \pgfmathfloatinttest{12.34}
+    \pgfmathfloatinttest{123.4}
+    \pgfmathfloatinttest{1234.}
+    \pgfmathfloatinttest{1234.1}
+    \pgfmathfloatinttest{1e-2}
+    \pgfmathfloatinttest{0}
+    \pgfmathfloatinttest{3.456789e4}
+    \pgfmathfloatinttest{3.456789e10}
 }%
 \tests
 }
@@ -915,72 +915,72 @@
 % #1 : number
 % #2 : the reference, sqrt (#1)
 \def\pgfmathfloattest#1#2{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\argumenta=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\reference=\pgfmathresult
-	\message{computing (#1)}%
-	\pgfmathfloatexp\argumenta%
-	\let\resultfloat=\pgfmathresult
-	\pgfmathfloattosci\pgfmathresult
-	\let\result=\pgfmathresult
-	\pgfmathfloatrelerror\resultfloat\reference
-	\pgfmathfloattosci\pgfmathresult
-	\[ \exp(#1) =  \result\quad (\text{error/r to }#2 = \pgfmathresult)\]
+    \pgfmathfloatparsenumber{#1}%
+    \let\argumenta=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\reference=\pgfmathresult
+    \message{computing (#1)}%
+    \pgfmathfloatexp\argumenta%
+    \let\resultfloat=\pgfmathresult
+    \pgfmathfloattosci\pgfmathresult
+    \let\result=\pgfmathresult
+    \pgfmathfloatrelerror\resultfloat\reference
+    \pgfmathfloattosci\pgfmathresult
+    \[ \exp(#1) =  \result\quad (\text{error/r to }#2 = \pgfmathresult)\]
 }%
 %\tracingmacros=2\tracingcommands=2
-	\pgfmathfloattest{-700}{9.85967654375977e-305}
-	\pgfmathfloattest{-1.0000000e+02}{3.7200760e-44}
-	\pgfmathfloattest{-9.5918367e+01}{2.2038516e-42}
-	\pgfmathfloattest{-9.1836735e+01}{1.3056083e-40}
-	\pgfmathfloattest{-8.7755102e+01}{7.7346991e-39}
-	\pgfmathfloattest{-8.3673469e+01}{4.5821992e-37}
-	\pgfmathfloattest{-7.9591837e+01}{2.7145916e-35}
-	\pgfmathfloattest{-7.5510204e+01}{1.6081814e-33}
-	\pgfmathfloattest{-7.1428571e+01}{9.5272065e-32}
-	\pgfmathfloattest{-6.7346939e+01}{5.6441184e-30}
-	\pgfmathfloattest{-6.3265306e+01}{3.3436950e-28}
-	\pgfmathfloattest{-5.9183673e+01}{1.9808756e-26}
-	\pgfmathfloattest{-5.5102041e+01}{1.1735125e-24}
-	\pgfmathfloattest{-5.1020408e+01}{6.9521362e-23}
-	\pgfmathfloattest{-4.6938776e+01}{4.1185924e-21}
-	\pgfmathfloattest{-4.2857143e+01}{2.4399411e-19}
-	\pgfmathfloattest{-3.8775510e+01}{1.4454727e-17}
-	\pgfmathfloattest{-3.4693878e+01}{8.5632855e-16}
-	\pgfmathfloattest{-3.0612245e+01}{5.0730713e-14}
-	\pgfmathfloattest{-2.6530612e+01}{3.0053946e-12}
-	\pgfmathfloattest{-2.2448980e+01}{1.7804593e-10}
-	\pgfmathfloattest{-1.8367347e+01}{1.0547817e-08}
-	\pgfmathfloattest{-1.4285714e+01}{6.2487495e-07}
-	\pgfmathfloattest{-1.0204082e+01}{3.7018912e-05}
-	\pgfmathfloattest{-6.1224490e+00}{2.1930786e-03}
-	\pgfmathfloattest{-2.0408163e+00}{1.2992261e-01}
-	\pgfmathfloattest{2.0408163e+00}{7.6968898e+00}
-	\pgfmathfloattest{6.1224490e+00}{4.5598001e+02}
-	\pgfmathfloattest{1.0204082e+01}{2.7013219e+04}
-	\pgfmathfloattest{1.4285714e+01}{1.6003202e+06}
-	\pgfmathfloattest{1.8367347e+01}{9.4806349e+07}
-	\pgfmathfloattest{2.2448980e+01}{5.6165284e+09}
-	\pgfmathfloattest{2.6530612e+01}{3.3273501e+11}
-	\pgfmathfloattest{3.0612245e+01}{1.9711925e+13}
-	\pgfmathfloattest{3.4693878e+01}{1.1677761e+15}
-	\pgfmathfloattest{3.8775510e+01}{6.9181522e+16}
-	\pgfmathfloattest{4.2857143e+01}{4.0984595e+18}
-	\pgfmathfloattest{4.6938776e+01}{2.4280140e+20}
-	\pgfmathfloattest{5.1020408e+01}{1.4384068e+22}
-	\pgfmathfloattest{5.5102041e+01}{8.5214258e+23}
-	\pgfmathfloattest{5.9183673e+01}{5.0482727e+25}
-	\pgfmathfloattest{6.3265306e+01}{2.9907034e+27}
-	\pgfmathfloattest{6.7346939e+01}{1.7717559e+29}
-	\pgfmathfloattest{7.1428571e+01}{1.0496256e+31}
-	\pgfmathfloattest{7.5510204e+01}{6.2182039e+32}
-	\pgfmathfloattest{7.9591837e+01}{3.6837954e+34}
-	\pgfmathfloattest{8.3673469e+01}{2.1823582e+36}
-	\pgfmathfloattest{8.7755102e+01}{1.2928751e+38}
-	\pgfmathfloattest{9.1836735e+01}{7.6592653e+39}
-	\pgfmathfloattest{9.5918367e+01}{4.5375106e+41}
-	\pgfmathfloattest{1.0000000e+02}{2.6881171e+43}
-	\pgfmathfloattest{700}{1.014232054735e+304}
+    \pgfmathfloattest{-700}{9.85967654375977e-305}
+    \pgfmathfloattest{-1.0000000e+02}{3.7200760e-44}
+    \pgfmathfloattest{-9.5918367e+01}{2.2038516e-42}
+    \pgfmathfloattest{-9.1836735e+01}{1.3056083e-40}
+    \pgfmathfloattest{-8.7755102e+01}{7.7346991e-39}
+    \pgfmathfloattest{-8.3673469e+01}{4.5821992e-37}
+    \pgfmathfloattest{-7.9591837e+01}{2.7145916e-35}
+    \pgfmathfloattest{-7.5510204e+01}{1.6081814e-33}
+    \pgfmathfloattest{-7.1428571e+01}{9.5272065e-32}
+    \pgfmathfloattest{-6.7346939e+01}{5.6441184e-30}
+    \pgfmathfloattest{-6.3265306e+01}{3.3436950e-28}
+    \pgfmathfloattest{-5.9183673e+01}{1.9808756e-26}
+    \pgfmathfloattest{-5.5102041e+01}{1.1735125e-24}
+    \pgfmathfloattest{-5.1020408e+01}{6.9521362e-23}
+    \pgfmathfloattest{-4.6938776e+01}{4.1185924e-21}
+    \pgfmathfloattest{-4.2857143e+01}{2.4399411e-19}
+    \pgfmathfloattest{-3.8775510e+01}{1.4454727e-17}
+    \pgfmathfloattest{-3.4693878e+01}{8.5632855e-16}
+    \pgfmathfloattest{-3.0612245e+01}{5.0730713e-14}
+    \pgfmathfloattest{-2.6530612e+01}{3.0053946e-12}
+    \pgfmathfloattest{-2.2448980e+01}{1.7804593e-10}
+    \pgfmathfloattest{-1.8367347e+01}{1.0547817e-08}
+    \pgfmathfloattest{-1.4285714e+01}{6.2487495e-07}
+    \pgfmathfloattest{-1.0204082e+01}{3.7018912e-05}
+    \pgfmathfloattest{-6.1224490e+00}{2.1930786e-03}
+    \pgfmathfloattest{-2.0408163e+00}{1.2992261e-01}
+    \pgfmathfloattest{2.0408163e+00}{7.6968898e+00}
+    \pgfmathfloattest{6.1224490e+00}{4.5598001e+02}
+    \pgfmathfloattest{1.0204082e+01}{2.7013219e+04}
+    \pgfmathfloattest{1.4285714e+01}{1.6003202e+06}
+    \pgfmathfloattest{1.8367347e+01}{9.4806349e+07}
+    \pgfmathfloattest{2.2448980e+01}{5.6165284e+09}
+    \pgfmathfloattest{2.6530612e+01}{3.3273501e+11}
+    \pgfmathfloattest{3.0612245e+01}{1.9711925e+13}
+    \pgfmathfloattest{3.4693878e+01}{1.1677761e+15}
+    \pgfmathfloattest{3.8775510e+01}{6.9181522e+16}
+    \pgfmathfloattest{4.2857143e+01}{4.0984595e+18}
+    \pgfmathfloattest{4.6938776e+01}{2.4280140e+20}
+    \pgfmathfloattest{5.1020408e+01}{1.4384068e+22}
+    \pgfmathfloattest{5.5102041e+01}{8.5214258e+23}
+    \pgfmathfloattest{5.9183673e+01}{5.0482727e+25}
+    \pgfmathfloattest{6.3265306e+01}{2.9907034e+27}
+    \pgfmathfloattest{6.7346939e+01}{1.7717559e+29}
+    \pgfmathfloattest{7.1428571e+01}{1.0496256e+31}
+    \pgfmathfloattest{7.5510204e+01}{6.2182039e+32}
+    \pgfmathfloattest{7.9591837e+01}{3.6837954e+34}
+    \pgfmathfloattest{8.3673469e+01}{2.1823582e+36}
+    \pgfmathfloattest{8.7755102e+01}{1.2928751e+38}
+    \pgfmathfloattest{9.1836735e+01}{7.6592653e+39}
+    \pgfmathfloattest{9.5918367e+01}{4.5375106e+41}
+    \pgfmathfloattest{1.0000000e+02}{2.6881171e+43}
+    \pgfmathfloattest{700}{1.014232054735e+304}
 }
 
 {
@@ -989,29 +989,29 @@
 % #2 : operand 2
 % #3 : the reference, #1 mod #2
 \def\pgfmathfloattest#1#2#3{%
-	\pgfmathfloatparsenumber{#1}%
-	\let\argumenta=\pgfmathresult
-	\pgfmathfloatparsenumber{#2}%
-	\let\argumentb=\pgfmathresult
-	\pgfmathfloatparsenumber{#3}%
-	\let\reference=\pgfmathresult
-	\message{computing #1 mod #2}%
-	\pgfmathfloatmod\argumenta\argumentb%
-	\let\resultfloat=\pgfmathresult
-	\pgfmathfloattosci\pgfmathresult
-	\let\result=\pgfmathresult
-	\pgfmathfloatrelerror\resultfloat\reference
-	\pgfmathfloattosci\pgfmathresult
-	\[ #1\text{ mod }#2 =  \result\quad (\text{error/r to }#3 = \pgfmathresult)\]
+    \pgfmathfloatparsenumber{#1}%
+    \let\argumenta=\pgfmathresult
+    \pgfmathfloatparsenumber{#2}%
+    \let\argumentb=\pgfmathresult
+    \pgfmathfloatparsenumber{#3}%
+    \let\reference=\pgfmathresult
+    \message{computing #1 mod #2}%
+    \pgfmathfloatmod\argumenta\argumentb%
+    \let\resultfloat=\pgfmathresult
+    \pgfmathfloattosci\pgfmathresult
+    \let\result=\pgfmathresult
+    \pgfmathfloatrelerror\resultfloat\reference
+    \pgfmathfloattosci\pgfmathresult
+    \[ #1\text{ mod }#2 =  \result\quad (\text{error/r to }#3 = \pgfmathresult)\]
 }%
 %\tracingmacros=2\tracingcommands=2
-	\pgfmathfloattest{4}{3}{1}
-	\pgfmathfloattest{10}{10}{0}
-	\pgfmathfloattest{20}{6}{2}
-	\pgfmathfloattest{-100}{30}{-10}
-	\pgfmathfloattest{10.5}{5}{0.5}
-	\pgfmathfloattest{300.63}{360}{300.63}
-	\pgfmathfloattest{-20}{30}{-20}
+    \pgfmathfloattest{4}{3}{1}
+    \pgfmathfloattest{10}{10}{0}
+    \pgfmathfloattest{20}{6}{2}
+    \pgfmathfloattest{-100}{30}{-10}
+    \pgfmathfloattest{10.5}{5}{0.5}
+    \pgfmathfloattest{300.63}{360}{300.63}
+    \pgfmathfloattest{-20}{30}{-20}
 }
 
 {
@@ -1020,97 +1020,97 @@
 % #2 : operand
 % #3 : the reference, #2(#1)
 \def\pgfmathfloattest#1#2#3{%
-	\pgfmathfloatparsenumber{#2}%
-	\let\argumenta=\pgfmathresult
-	\pgfmathfloatparsenumber{#3}%
-	\let\reference=\pgfmathresult
-	\message{computing \string#1(#2)}%
-	#1\argumenta%
-	\let\resultfloat=\pgfmathresult
-	\pgfmathfloattosci\pgfmathresult
-	\let\result=\pgfmathresult
-	\pgfmathfloatrelerror\resultfloat\reference
-	\pgfmathfloattosci\pgfmathresult
-	\[ \string#1(#2) =  \result\quad (\text{error/r to }#3 = \pgfmathresult)\]
+    \pgfmathfloatparsenumber{#2}%
+    \let\argumenta=\pgfmathresult
+    \pgfmathfloatparsenumber{#3}%
+    \let\reference=\pgfmathresult
+    \message{computing \string#1(#2)}%
+    #1\argumenta%
+    \let\resultfloat=\pgfmathresult
+    \pgfmathfloattosci\pgfmathresult
+    \let\result=\pgfmathresult
+    \pgfmathfloatrelerror\resultfloat\reference
+    \pgfmathfloattosci\pgfmathresult
+    \[ \string#1(#2) =  \result\quad (\text{error/r to }#3 = \pgfmathresult)\]
 }%
 %\tracingmacros=2\tracingcommands=2
 \testsubsection{SIN}
-	\pgfmathfloattest\pgfmathfloatsin{-7.2000000e+02}{4.8985872e-16}
-	\pgfmathfloattest\pgfmathfloatsin{-6.5454545e+02}{9.0963200e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-5.8909091e+02}{7.5574957e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-5.2363636e+02}{-2.8173256e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-4.5818182e+02}{-9.8982144e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-3.9272727e+02}{-5.4064082e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-3.2727273e+02}{5.4064082e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-2.6181818e+02}{9.8982144e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-1.9636364e+02}{2.8173256e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-1.3090909e+02}{-7.5574957e-01}
-	\pgfmathfloattest\pgfmathfloatsin{-6.5454545e+01}{-9.0963200e-01}
-	\pgfmathfloattest\pgfmathfloatsin{0.0000000e+00}{0.0000000e+00}
-	\pgfmathfloattest\pgfmathfloatsin{6.5454545e+01}{9.0963200e-01}
-	\pgfmathfloattest\pgfmathfloatsin{1.3090909e+02}{7.5574957e-01}
-	\pgfmathfloattest\pgfmathfloatsin{1.9636364e+02}{-2.8173256e-01}
-	\pgfmathfloattest\pgfmathfloatsin{2.6181818e+02}{-9.8982144e-01}
-	\pgfmathfloattest\pgfmathfloatsin{3.2727273e+02}{-5.4064082e-01}
-	\pgfmathfloattest\pgfmathfloatsin{3.9272727e+02}{5.4064082e-01}
-	\pgfmathfloattest\pgfmathfloatsin{4.5818182e+02}{9.8982144e-01}
-	\pgfmathfloattest\pgfmathfloatsin{5.2363636e+02}{2.8173256e-01}
-	\pgfmathfloattest\pgfmathfloatsin{5.8909091e+02}{-7.5574957e-01}
-	\pgfmathfloattest\pgfmathfloatsin{6.5454545e+02}{-9.0963200e-01}
-	\pgfmathfloattest\pgfmathfloatsin{7.2000000e+02}{-4.8985872e-16}
+    \pgfmathfloattest\pgfmathfloatsin{-7.2000000e+02}{4.8985872e-16}
+    \pgfmathfloattest\pgfmathfloatsin{-6.5454545e+02}{9.0963200e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-5.8909091e+02}{7.5574957e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-5.2363636e+02}{-2.8173256e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-4.5818182e+02}{-9.8982144e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-3.9272727e+02}{-5.4064082e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-3.2727273e+02}{5.4064082e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-2.6181818e+02}{9.8982144e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-1.9636364e+02}{2.8173256e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-1.3090909e+02}{-7.5574957e-01}
+    \pgfmathfloattest\pgfmathfloatsin{-6.5454545e+01}{-9.0963200e-01}
+    \pgfmathfloattest\pgfmathfloatsin{0.0000000e+00}{0.0000000e+00}
+    \pgfmathfloattest\pgfmathfloatsin{6.5454545e+01}{9.0963200e-01}
+    \pgfmathfloattest\pgfmathfloatsin{1.3090909e+02}{7.5574957e-01}
+    \pgfmathfloattest\pgfmathfloatsin{1.9636364e+02}{-2.8173256e-01}
+    \pgfmathfloattest\pgfmathfloatsin{2.6181818e+02}{-9.8982144e-01}
+    \pgfmathfloattest\pgfmathfloatsin{3.2727273e+02}{-5.4064082e-01}
+    \pgfmathfloattest\pgfmathfloatsin{3.9272727e+02}{5.4064082e-01}
+    \pgfmathfloattest\pgfmathfloatsin{4.5818182e+02}{9.8982144e-01}
+    \pgfmathfloattest\pgfmathfloatsin{5.2363636e+02}{2.8173256e-01}
+    \pgfmathfloattest\pgfmathfloatsin{5.8909091e+02}{-7.5574957e-01}
+    \pgfmathfloattest\pgfmathfloatsin{6.5454545e+02}{-9.0963200e-01}
+    \pgfmathfloattest\pgfmathfloatsin{7.2000000e+02}{-4.8985872e-16}
 
 
 
 \testsubsection{COS}
-	\pgfmathfloattest\pgfmathfloatcos{-7.2000000e+02}{1.0000000e+00}
-	\pgfmathfloattest\pgfmathfloatcos{-6.5454545e+02}{4.1541501e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-5.8909091e+02}{-6.5486073e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-5.2363636e+02}{-9.5949297e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-4.5818182e+02}{-1.4231484e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-3.9272727e+02}{8.4125353e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-3.2727273e+02}{8.4125353e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-2.6181818e+02}{-1.4231484e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-1.9636364e+02}{-9.5949297e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-1.3090909e+02}{-6.5486073e-01}
-	\pgfmathfloattest\pgfmathfloatcos{-6.5454545e+01}{4.1541501e-01}
-	\pgfmathfloattest\pgfmathfloatcos{0.0000000e+00}{1.0000000e+00}
-	\pgfmathfloattest\pgfmathfloatcos{6.5454545e+01}{4.1541501e-01}
-	\pgfmathfloattest\pgfmathfloatcos{1.3090909e+02}{-6.5486073e-01}
-	\pgfmathfloattest\pgfmathfloatcos{1.9636364e+02}{-9.5949297e-01}
-	\pgfmathfloattest\pgfmathfloatcos{2.6181818e+02}{-1.4231484e-01}
-	\pgfmathfloattest\pgfmathfloatcos{3.2727273e+02}{8.4125353e-01}
-	\pgfmathfloattest\pgfmathfloatcos{3.9272727e+02}{8.4125353e-01}
-	\pgfmathfloattest\pgfmathfloatcos{4.5818182e+02}{-1.4231484e-01}
-	\pgfmathfloattest\pgfmathfloatcos{5.2363636e+02}{-9.5949297e-01}
-	\pgfmathfloattest\pgfmathfloatcos{5.8909091e+02}{-6.5486073e-01}
-	\pgfmathfloattest\pgfmathfloatcos{6.5454545e+02}{4.1541501e-01}
-	\pgfmathfloattest\pgfmathfloatcos{7.2000000e+02}{1.0000000e+00}
+    \pgfmathfloattest\pgfmathfloatcos{-7.2000000e+02}{1.0000000e+00}
+    \pgfmathfloattest\pgfmathfloatcos{-6.5454545e+02}{4.1541501e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-5.8909091e+02}{-6.5486073e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-5.2363636e+02}{-9.5949297e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-4.5818182e+02}{-1.4231484e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-3.9272727e+02}{8.4125353e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-3.2727273e+02}{8.4125353e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-2.6181818e+02}{-1.4231484e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-1.9636364e+02}{-9.5949297e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-1.3090909e+02}{-6.5486073e-01}
+    \pgfmathfloattest\pgfmathfloatcos{-6.5454545e+01}{4.1541501e-01}
+    \pgfmathfloattest\pgfmathfloatcos{0.0000000e+00}{1.0000000e+00}
+    \pgfmathfloattest\pgfmathfloatcos{6.5454545e+01}{4.1541501e-01}
+    \pgfmathfloattest\pgfmathfloatcos{1.3090909e+02}{-6.5486073e-01}
+    \pgfmathfloattest\pgfmathfloatcos{1.9636364e+02}{-9.5949297e-01}
+    \pgfmathfloattest\pgfmathfloatcos{2.6181818e+02}{-1.4231484e-01}
+    \pgfmathfloattest\pgfmathfloatcos{3.2727273e+02}{8.4125353e-01}
+    \pgfmathfloattest\pgfmathfloatcos{3.9272727e+02}{8.4125353e-01}
+    \pgfmathfloattest\pgfmathfloatcos{4.5818182e+02}{-1.4231484e-01}
+    \pgfmathfloattest\pgfmathfloatcos{5.2363636e+02}{-9.5949297e-01}
+    \pgfmathfloattest\pgfmathfloatcos{5.8909091e+02}{-6.5486073e-01}
+    \pgfmathfloattest\pgfmathfloatcos{6.5454545e+02}{4.1541501e-01}
+    \pgfmathfloattest\pgfmathfloatcos{7.2000000e+02}{1.0000000e+00}
 
 
 \testsubsection{TAN}
-	\pgfmathfloattest\pgfmathfloattan{-7.2000000e+02}{4.8985872e-16}
-	\pgfmathfloattest\pgfmathfloattan{-6.5454545e+02}{2.1896946e+00}
-	\pgfmathfloattest\pgfmathfloattan{-5.8909091e+02}{-1.1540615e+00}
-	\pgfmathfloattest\pgfmathfloattan{-5.2363636e+02}{2.9362649e-01}
-	\pgfmathfloattest\pgfmathfloattan{-4.5818182e+02}{6.9551528e+00}
-	\pgfmathfloattest\pgfmathfloattan{-3.9272727e+02}{-6.4266098e-01}
-	\pgfmathfloattest\pgfmathfloattan{-3.2727273e+02}{6.4266098e-01}
-	\pgfmathfloattest\pgfmathfloattan{-2.6181818e+02}{-6.9551528e+00}
-	\pgfmathfloattest\pgfmathfloattan{-1.9636364e+02}{-2.9362649e-01}
-	\pgfmathfloattest\pgfmathfloattan{-1.3090909e+02}{1.1540615e+00}
-	\pgfmathfloattest\pgfmathfloattan{-6.5454545e+01}{-2.1896946e+00}
-	\pgfmathfloattest\pgfmathfloattan{0.0000000e+00}{0.0000000e+00}
-	\pgfmathfloattest\pgfmathfloattan{6.5454545e+01}{2.1896946e+00}
-	\pgfmathfloattest\pgfmathfloattan{1.3090909e+02}{-1.1540615e+00}
-	\pgfmathfloattest\pgfmathfloattan{1.9636364e+02}{2.9362649e-01}
-	\pgfmathfloattest\pgfmathfloattan{2.6181818e+02}{6.9551528e+00}
-	\pgfmathfloattest\pgfmathfloattan{3.2727273e+02}{-6.4266098e-01}
-	\pgfmathfloattest\pgfmathfloattan{3.9272727e+02}{6.4266098e-01}
-	\pgfmathfloattest\pgfmathfloattan{4.5818182e+02}{-6.9551528e+00}
-	\pgfmathfloattest\pgfmathfloattan{5.2363636e+02}{-2.9362649e-01}
-	\pgfmathfloattest\pgfmathfloattan{5.8909091e+02}{1.1540615e+00}
-	\pgfmathfloattest\pgfmathfloattan{6.5454545e+02}{-2.1896946e+00}
-	\pgfmathfloattest\pgfmathfloattan{7.2000000e+02}{-4.8985872e-16}
+    \pgfmathfloattest\pgfmathfloattan{-7.2000000e+02}{4.8985872e-16}
+    \pgfmathfloattest\pgfmathfloattan{-6.5454545e+02}{2.1896946e+00}
+    \pgfmathfloattest\pgfmathfloattan{-5.8909091e+02}{-1.1540615e+00}
+    \pgfmathfloattest\pgfmathfloattan{-5.2363636e+02}{2.9362649e-01}
+    \pgfmathfloattest\pgfmathfloattan{-4.5818182e+02}{6.9551528e+00}
+    \pgfmathfloattest\pgfmathfloattan{-3.9272727e+02}{-6.4266098e-01}
+    \pgfmathfloattest\pgfmathfloattan{-3.2727273e+02}{6.4266098e-01}
+    \pgfmathfloattest\pgfmathfloattan{-2.6181818e+02}{-6.9551528e+00}
+    \pgfmathfloattest\pgfmathfloattan{-1.9636364e+02}{-2.9362649e-01}
+    \pgfmathfloattest\pgfmathfloattan{-1.3090909e+02}{1.1540615e+00}
+    \pgfmathfloattest\pgfmathfloattan{-6.5454545e+01}{-2.1896946e+00}
+    \pgfmathfloattest\pgfmathfloattan{0.0000000e+00}{0.0000000e+00}
+    \pgfmathfloattest\pgfmathfloattan{6.5454545e+01}{2.1896946e+00}
+    \pgfmathfloattest\pgfmathfloattan{1.3090909e+02}{-1.1540615e+00}
+    \pgfmathfloattest\pgfmathfloattan{1.9636364e+02}{2.9362649e-01}
+    \pgfmathfloattest\pgfmathfloattan{2.6181818e+02}{6.9551528e+00}
+    \pgfmathfloattest\pgfmathfloattan{3.2727273e+02}{-6.4266098e-01}
+    \pgfmathfloattest\pgfmathfloattan{3.9272727e+02}{6.4266098e-01}
+    \pgfmathfloattest\pgfmathfloattan{4.5818182e+02}{-6.9551528e+00}
+    \pgfmathfloattest\pgfmathfloattan{5.2363636e+02}{-2.9362649e-01}
+    \pgfmathfloattest\pgfmathfloattan{5.8909091e+02}{1.1540615e+00}
+    \pgfmathfloattest\pgfmathfloattan{6.5454545e+02}{-2.1896946e+00}
+    \pgfmathfloattest\pgfmathfloattan{7.2000000e+02}{-4.8985872e-16}
 
 
 
@@ -1117,148 +1117,148 @@
 }
 
 {
-	% #1 : expression
-	% #2 : the reference
-	\def\assertEquals#1#2{%
-		\pgfmathfloatparsenumber{#2}%
-		\let\reference=\pgfmathresult
-		\message{parsing expression #1...}%
-		\pgfmathparse{#1}%
-		\pgfmathfloatparsenumber{\pgfmathresult}%
-		\let\argumenta=\pgfmathresult
-		\let\resultfloat=\pgfmathresult
-		\pgfmathfloattosci\pgfmathresult
-		\let\result=\pgfmathresult
-		\pgfmathfloatrelerror\resultfloat\reference
-		\let\actualerror=\pgfmathresult
-		\pgfmathfloatgreaterthan{\pgfmathresult}{\THRESH}%
-		\ifpgfmathfloatcomparison
-			\begingroup
-			\pgfkeys{/pgf/fpu=false}%
-			\pgfmathparse{#1}%
-			\global\let\actualBasic=\pgfmathresult
-			\endgroup
-			\PackageError{pgf-fpu}{Got error: expected #1=#2, but was \result\space (error \actualerror; basic level returns \actualBasic)}{}%
-		\fi
-		\pgfmathfloattosci\actualerror
-		\[ #1 =  \result \quad[= \resultfloat] \quad (\text{error/r to }#2 = \pgfmathresult)\]
-	}%
-	\def\mathparserTestCases{%
-		\assertEquals{1+1}{2}
-		\assertEquals{1234567*4}{4938268}
-		\assertEquals{exp(200)}{7.22597376812575e+86}
-		\assertEquals{rad(360)}{6.28318530717959}
-		\assertEquals{rad(180)}{3.14159265358979}
-		\assertEquals{deg(2*pi)}{360}
-		\assertEquals{deg(pi)}{180}
-		\assertEquals{ln(1)}{0}
-		\assertEquals{round(1.5)}{2}
-		\assertEquals{round(-1.5)}{-2}
-		\assertEquals{- (1.5)}{-1.5}
-		\assertEquals{(1e4 - 1e3) * 1e5}{900000000.0}
-		\assertEquals{4^2}{16}
-		\assertEquals{4^3}{64}
-		\assertEquals{4^-3}{0.015625}
-		\assertEquals{4^-6}{0.000244140625}
-		\assertEquals{111^4}{151807041}
-		\assertEquals{8^10}{1073741824}
-		\assertEquals{3^1.5}{5.19615242270663}
-		\assertEquals{16^5.5}{4194304}
-		\assertEquals{15^-0.25}{0.508132748154615}
-		\assertEquals{sec(45)}{1.4142136e+00}
-		\assertEquals{cot(30)}{1.7320508e+00}
-		\assertEquals{asin(7.0710678e-01)}{45}
-		\assertEquals{acos(8.6602540e-01)}{30}
-		\assertEquals{atan(5.7735027e-01)}{30}
-		\assertEquals{atan(16000)}{89.9964}
-		\assertEquals{atan(1e6)}{8.9999943e+01}
-		\assertEquals{atan(-1e6)}{-8.9999943e+01}
-		\assertEquals{-12^2}{-144}%
-		\assertEquals{0-12^2}{-144}%
-		\assertEquals{-(12)^2}{-144}%
-		\assertEquals{exp(-12^2)}{2.8946e-63}%
-		\assertEquals{round(98.8)}{99}%
-		\assertEquals{-pi}{-3.14159265358979}%
-		\assertEquals{2*(-pi)}{-6.28318530717959}%
-		\assertEquals{2*(-3)}{-6}%
-		\assertEquals{veclen(1,1)}{1.414213562373095}%
-		\assertEquals{veclen(1e5,6e5)}{6.082762530298220e+05}%
-		\assertEquals{cosh(5)}{74.20994852478784}%
-		\assertEquals{sinh(0.6)}{0.636653582148241}%
-		\assertEquals{tanh(0.6)}{0.537049566998035}%
+    % #1 : expression
+    % #2 : the reference
+    \def\assertEquals#1#2{%
+        \pgfmathfloatparsenumber{#2}%
+        \let\reference=\pgfmathresult
+        \message{parsing expression #1...}%
+        \pgfmathparse{#1}%
+        \pgfmathfloatparsenumber{\pgfmathresult}%
+        \let\argumenta=\pgfmathresult
+        \let\resultfloat=\pgfmathresult
+        \pgfmathfloattosci\pgfmathresult
+        \let\result=\pgfmathresult
+        \pgfmathfloatrelerror\resultfloat\reference
+        \let\actualerror=\pgfmathresult
+        \pgfmathfloatgreaterthan{\pgfmathresult}{\THRESH}%
+        \ifpgfmathfloatcomparison
+            \begingroup
+            \pgfkeys{/pgf/fpu=false}%
+            \pgfmathparse{#1}%
+            \global\let\actualBasic=\pgfmathresult
+            \endgroup
+            \PackageError{pgf-fpu}{Got error: expected #1=#2, but was \result\space (error \actualerror; basic level returns \actualBasic)}{}%
+        \fi
+        \pgfmathfloattosci\actualerror
+        \[ #1 =  \result \quad[= \resultfloat] \quad (\text{error/r to }#2 = \pgfmathresult)\]
+    }%
+    \def\mathparserTestCases{%
+        \assertEquals{1+1}{2}
+        \assertEquals{1234567*4}{4938268}
+        \assertEquals{exp(200)}{7.22597376812575e+86}
+        \assertEquals{rad(360)}{6.28318530717959}
+        \assertEquals{rad(180)}{3.14159265358979}
+        \assertEquals{deg(2*pi)}{360}
+        \assertEquals{deg(pi)}{180}
+        \assertEquals{ln(1)}{0}
+        \assertEquals{round(1.5)}{2}
+        \assertEquals{round(-1.5)}{-2}
+        \assertEquals{- (1.5)}{-1.5}
+        \assertEquals{(1e4 - 1e3) * 1e5}{900000000.0}
+        \assertEquals{4^2}{16}
+        \assertEquals{4^3}{64}
+        \assertEquals{4^-3}{0.015625}
+        \assertEquals{4^-6}{0.000244140625}
+        \assertEquals{111^4}{151807041}
+        \assertEquals{8^10}{1073741824}
+        \assertEquals{3^1.5}{5.19615242270663}
+        \assertEquals{16^5.5}{4194304}
+        \assertEquals{15^-0.25}{0.508132748154615}
+        \assertEquals{sec(45)}{1.4142136e+00}
+        \assertEquals{cot(30)}{1.7320508e+00}
+        \assertEquals{asin(7.0710678e-01)}{45}
+        \assertEquals{acos(8.6602540e-01)}{30}
+        \assertEquals{atan(5.7735027e-01)}{30}
+        \assertEquals{atan(16000)}{89.9964}
+        \assertEquals{atan(1e6)}{8.9999943e+01}
+        \assertEquals{atan(-1e6)}{-8.9999943e+01}
+        \assertEquals{-12^2}{-144}%
+        \assertEquals{0-12^2}{-144}%
+        \assertEquals{-(12)^2}{-144}%
+        \assertEquals{exp(-12^2)}{2.8946e-63}%
+        \assertEquals{round(98.8)}{99}%
+        \assertEquals{-pi}{-3.14159265358979}%
+        \assertEquals{2*(-pi)}{-6.28318530717959}%
+        \assertEquals{2*(-3)}{-6}%
+        \assertEquals{veclen(1,1)}{1.414213562373095}%
+        \assertEquals{veclen(1e5,6e5)}{6.082762530298220e+05}%
+        \assertEquals{cosh(5)}{74.20994852478784}%
+        \assertEquals{sinh(0.6)}{0.636653582148241}%
+        \assertEquals{tanh(0.6)}{0.537049566998035}%
 
-		{\pgfkeys{/pgf/trig format=rad}
-		\assertEquals{atan2(4,5)}{0.674740942223553}%
-		\assertEquals{atan2(-4,5)}{-0.674740942223553}%
-		\assertEquals{atan2(4,-5)}{2.46685171136624}%
-		\assertEquals{atan2(-4,-5)}{-2.46685171136624}%
-		%
-		\assertEquals{atan2(5,4)}{0.89605538457134}%
-		\assertEquals{atan2(-5,4)}{-0.89605538457134}%
-		\assertEquals{atan2(5,-4)}{2.24553726901845}%
-		\assertEquals{atan2(-5,-4)}{-2.24553726901845}%
-		%
-		\assertEquals{atan2(4e-5,5)}{0}%
-		\assertEquals{atan2(4e-5,-5)}{3.1415126535899}%
-		}
-	%	\assertEquals{ceil(1.5)}{2}
-	}
+        {\pgfkeys{/pgf/trig format=rad}
+        \assertEquals{atan2(4,5)}{0.674740942223553}%
+        \assertEquals{atan2(-4,5)}{-0.674740942223553}%
+        \assertEquals{atan2(4,-5)}{2.46685171136624}%
+        \assertEquals{atan2(-4,-5)}{-2.46685171136624}%
+        %
+        \assertEquals{atan2(5,4)}{0.89605538457134}%
+        \assertEquals{atan2(-5,4)}{-0.89605538457134}%
+        \assertEquals{atan2(5,-4)}{2.24553726901845}%
+        \assertEquals{atan2(-5,-4)}{-2.24553726901845}%
+        %
+        \assertEquals{atan2(4e-5,5)}{0}%
+        \assertEquals{atan2(4e-5,-5)}{3.1415126535899}%
+        }
+    %    \assertEquals{ceil(1.5)}{2}
+    }
 
 
-	{
-		\testsection{Testing the FPU library (and math parser)}
-		\pgfkeys{/pgf/fpu}
-		%\tracingmacros=2\tracingcommands=2
-		\mathparserTestCases
-	}
+    {
+        \testsection{Testing the FPU library (and math parser)}
+        \pgfkeys{/pgf/fpu}
+        %\tracingmacros=2\tracingcommands=2
+        \mathparserTestCases
+    }
 
-	{
-		\def\mathparserTestCases{%
-			\assertEquals{sin(90)}{1.0}%
-			\assertEquals{cos(90)}{0.0}%
-			\assertEquals{tan(45)}{1.0}%
-			\assertEquals{sec(45)}{1.41429}%
-			\assertEquals{cosec(30)}{2.0}%
-			\assertEquals{cot(15)}{3.73215}%
-			\assertEquals{asin(0.7071)}{44.99945}%
-			\assertEquals{acos(0.5)}{60}%
-			\assertEquals{atan(1)}{45}%
-			\assertEquals{atan(16001)}{90}%
-			\assertEquals{atan(-16001)}{-90}%
-			%\assertEquals{atan2(-4,3)}{-53.13011}%
-		}%
-		\testsection{Testing trig format=deg, basic layer (selected examples)}
-		%\tracingmacros=2\tracingcommands=2
-		\mathparserTestCases
+    {
+        \def\mathparserTestCases{%
+            \assertEquals{sin(90)}{1.0}%
+            \assertEquals{cos(90)}{0.0}%
+            \assertEquals{tan(45)}{1.0}%
+            \assertEquals{sec(45)}{1.41429}%
+            \assertEquals{cosec(30)}{2.0}%
+            \assertEquals{cot(15)}{3.73215}%
+            \assertEquals{asin(0.7071)}{44.99945}%
+            \assertEquals{acos(0.5)}{60}%
+            \assertEquals{atan(1)}{45}%
+            \assertEquals{atan(16001)}{90}%
+            \assertEquals{atan(-16001)}{-90}%
+            %\assertEquals{atan2(-4,3)}{-53.13011}%
+        }%
+        \testsection{Testing trig format=deg, basic layer (selected examples)}
+        %\tracingmacros=2\tracingcommands=2
+        \mathparserTestCases
 
-		\testsection{Testing trig format=deg, FPU (selected examples)}
-		\pgfkeys{/pgf/fpu}
-		\mathparserTestCases
-	}
-	
-	{
-		\pgfkeys{/pgf/trig format=rad}
-		\def\mathparserTestCases{%
-			\assertEquals{sin(pi/2)}{1.0}%
-			\assertEquals{cos(pi/2)}{0.0}%
-			\assertEquals{tan(pi/4)}{1.0}%
-			\assertEquals{sec(pi/4)}{1.41429}%
-			\assertEquals{cosec(rad(30))}{2.0}%
-			\assertEquals{cot(rad(15))}{3.73215}%
-			\assertEquals{asin(0.7071)}{0.785388564086562}% 44.99945}%
-			\assertEquals{acos(0.5)}{1.0471975511966}%
-			\assertEquals{atan(1)}{0.785398163397448}%45}%
-			\assertEquals{atan(16001)}{1.570796326794}%
-			\assertEquals{atan(-16001)}{-1.570796326794}%
-			%\assertEquals{atan2(-4,3)}{-53.13011}%
-		}%
-		\testsection{Testing trig format=rad, basic layer (selected examples)}
-		%\tracingmacros=2\tracingcommands=2
-		\mathparserTestCases
+        \testsection{Testing trig format=deg, FPU (selected examples)}
+        \pgfkeys{/pgf/fpu}
+        \mathparserTestCases
+    }
 
-		\testsection{Testing trig format=rad, FPU (selected examples)}
-		\pgfkeys{/pgf/fpu}
-		\mathparserTestCases
-	}
+    {
+        \pgfkeys{/pgf/trig format=rad}
+        \def\mathparserTestCases{%
+            \assertEquals{sin(pi/2)}{1.0}%
+            \assertEquals{cos(pi/2)}{0.0}%
+            \assertEquals{tan(pi/4)}{1.0}%
+            \assertEquals{sec(pi/4)}{1.41429}%
+            \assertEquals{cosec(rad(30))}{2.0}%
+            \assertEquals{cot(rad(15))}{3.73215}%
+            \assertEquals{asin(0.7071)}{0.785388564086562}% 44.99945}%
+            \assertEquals{acos(0.5)}{1.0471975511966}%
+            \assertEquals{atan(1)}{0.785398163397448}%45}%
+            \assertEquals{atan(16001)}{1.570796326794}%
+            \assertEquals{atan(-16001)}{-1.570796326794}%
+            %\assertEquals{atan2(-4,3)}{-53.13011}%
+        }%
+        \testsection{Testing trig format=rad, basic layer (selected examples)}
+        %\tracingmacros=2\tracingcommands=2
+        \mathparserTestCases
+
+        \testsection{Testing trig format=rad, FPU (selected examples)}
+        \pgfkeys{/pgf/fpu}
+        \mathparserTestCases
+    }
 }
 \end{document}

Modified: trunk/Master/texmf-dist/source/generic/pgf/testsuite/mathtest/unittest_luamathparser.tex
===================================================================
--- trunk/Master/texmf-dist/source/generic/pgf/testsuite/mathtest/unittest_luamathparser.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/source/generic/pgf/testsuite/mathtest/unittest_luamathparser.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -9,8 +9,8 @@
 X
 
 \def\SHOW#1{%
-	\dimen0=#1 %
-	#1 = \the\dimen0
+    \dimen0=#1 %
+    #1 = \the\dimen0
 }
 
 \SHOW{1pt}
@@ -40,13 +40,13 @@
 \newif\ifcomparewithtex
 \newif\ifcomparewithfpu
 \pgfkeys{
-	/ut/compare with TeX/.is if=comparewithtex,
-	/ut/compare with TeX=true,
-	/ut/compare with fpu/.is if=comparewithfpu,
-	/ut/compare with fpu=true,
-	/ut/.search also={/pgf/luamath},
-	/pgf/luamath/show error message=true,
-	/pgf/luamath/enable TeX fallback=false,
+    /ut/compare with TeX/.is if=comparewithtex,
+    /ut/compare with TeX=true,
+    /ut/compare with fpu/.is if=comparewithfpu,
+    /ut/compare with fpu=true,
+    /ut/.search also={/pgf/luamath},
+    /pgf/luamath/show error message=true,
+    /pgf/luamath/enable TeX fallback=false,
 }
 
 \newcount\numErrors
@@ -57,113 +57,113 @@
 % #4: expected 'units declared' (1 or 0)
 \def\parsertest{\pgfutil at ifnextchar[\parsertest@{\parsertest@[]}}%
 \def\parsertest@[#1]#2#3#4{%
-	\begingroup
-	\pgfqkeys{/ut}{#1}%
-	\pgfluamathparse{#2}%
-	\let\actual=\pgfmathresult
-	\ifpgfmathunitsdeclared
-		\def\actualunitsdeclared{1}%
-	\else
-		\def\actualunitsdeclared{0}%
-	\fi
-	%
-	\ifcomparewithtex
-		\ifpgfluamathusedTeXfallback
-			\let\expectedTeX=\actual
-		\else
-			\pgfmathparse{#2}%
-			\let\expectedTeX=\pgfmathresult
-		\fi
-	\else
-		\def\expectedTeX{--}%
-	\fi
-	%
-	\edef\expected{#3}%
-	\def\success{1}%
-	\ifx\expected\empty
-		\ifx\actual\empty
-		\else
-			\def\success{0}%
-		\fi
-	\else
-		\ifx\actual\expected
-		\else
-			\def\success{0}%
-		\fi
-	\fi
-	%
-	\if1\success
-	\else
-		\message{FAILURE for #2 expected \expected\space but was \actual^^J}%
-		\global\advance\numErrors by1
-	\fi
-	%
-	\if1\success
-		\def\expectedunitsdeclared{#4}%
-		\ifx\actualunitsdeclared\expectedunitsdeclared
-		\else
-			\def\success{0}%
-			\message{FAILURE for #2 expected units declared #4 but was \actualunitsdeclared^^J}%
-			\global\advance\numErrors by1
-		\fi
-	\fi
-	%
-	\if1\success
-		\ifcomparewithtex
-			% check against PGF's basic layer as reference:
-			\dimen0=\actual pt %
-			\dimen1=\expectedTeX pt %
-			\advance\dimen0 by-\dimen1
-			\ifdim\dimen0<0sp
-				\dimen0=-\dimen0
-			\fi
-			\ifdim\dimen0 > 0.004pt %
-				\def\success{0}%
-				\message{FAILURE for #2 : matches expectations, but does NOT match TeX output (error \the\dimen0). expected \expectedTeX\space but was \actual^^J}%
-				\global\advance\numErrors by1
-			\fi
-			%
-			%
-			\ifpgfmathunitsdeclared
-				\def\actualTeXunitsdeclared{1}%
-			\else
-				\def\actualTeXunitsdeclared{0}%
-			\fi
-			\ifx\actualTeXunitsdeclared\actualunitsdeclared
-			\else
-				\message{WARNING for #2 : matches ALL expectations, but TeX's output does NOT match TeX expected units declared (TeX returns \actualTeXunitsdeclared, expectation = LUA is \actualunitsdeclared)^^J}%
-			\fi
-		\fi
-		%
-		\ifcomparewithfpu
-			% check that FPU works as well. This 
-			% * tests the FPU
-			% * tests that FPU values can be injected into the LUA backend:
-			\begingroup
-			\pgfkeys{/pgf/fpu,/pgf/fpu/output format=float}%
-			\pgfmathparse{#2}%
-			\xdef\actualfpu{\pgfmathresult}%
-			\ifpgfmathunitsdeclared
-				\xdef\actualfpuunitsdeclared{1}%
-			\else
-				\xdef\actualfpuunitsdeclared{0}%
-			\fi
-			\endgroup
-			%
-			\pgfkeys{/pgf/luamath/output format=fixed}%
-			\pgfluamathparse{abs(\actual - \actualfpu) > 0.004}%
-			\ifdim\pgfmathresult pt=1pt
-				\def\success{0}%
-				\pgfluamathparse{abs(\actual - \actualfpu)}%
-				\message{FAILURE for #2 : matches expectations, but does NOT match output of FPU (error \pgfmathresult). fpu=\actualfpu\space lua=\actual^^J}%
-				\global\advance\numErrors by1
-			\fi
-		\fi
-		%
-	\fi
-	%
-	\message{#2 = \actual\space (pgf=\expectedTeX) \if1\success OK\else FAILURE\fi^^J}%
-	\endgroup
+    \begingroup
+    \pgfqkeys{/ut}{#1}%
+    \pgfluamathparse{#2}%
+    \let\actual=\pgfmathresult
+    \ifpgfmathunitsdeclared
+        \def\actualunitsdeclared{1}%
+    \else
+        \def\actualunitsdeclared{0}%
+    \fi
+    %
+    \ifcomparewithtex
+        \ifpgfluamathusedTeXfallback
+            \let\expectedTeX=\actual
+        \else
+            \pgfmathparse{#2}%
+            \let\expectedTeX=\pgfmathresult
+        \fi
+    \else
+        \def\expectedTeX{--}%
+    \fi
+    %
+    \edef\expected{#3}%
+    \def\success{1}%
+    \ifx\expected\empty
+        \ifx\actual\empty
+        \else
+            \def\success{0}%
+        \fi
+    \else
+        \ifx\actual\expected
+        \else
+            \def\success{0}%
+        \fi
+    \fi
+    %
+    \if1\success
+    \else
+        \message{FAILURE for #2 expected \expected\space but was \actual^^J}%
+        \global\advance\numErrors by1
+    \fi
+    %
+    \if1\success
+        \def\expectedunitsdeclared{#4}%
+        \ifx\actualunitsdeclared\expectedunitsdeclared
+        \else
+            \def\success{0}%
+            \message{FAILURE for #2 expected units declared #4 but was \actualunitsdeclared^^J}%
+            \global\advance\numErrors by1
+        \fi
+    \fi
+    %
+    \if1\success
+        \ifcomparewithtex
+            % check against PGF's basic layer as reference:
+            \dimen0=\actual pt %
+            \dimen1=\expectedTeX pt %
+            \advance\dimen0 by-\dimen1
+            \ifdim\dimen0<0sp
+                \dimen0=-\dimen0
+            \fi
+            \ifdim\dimen0 > 0.004pt %
+                \def\success{0}%
+                \message{FAILURE for #2 : matches expectations, but does NOT match TeX output (error \the\dimen0). expected \expectedTeX\space but was \actual^^J}%
+                \global\advance\numErrors by1
+            \fi
+            %
+            %
+            \ifpgfmathunitsdeclared
+                \def\actualTeXunitsdeclared{1}%
+            \else
+                \def\actualTeXunitsdeclared{0}%
+            \fi
+            \ifx\actualTeXunitsdeclared\actualunitsdeclared
+            \else
+                \message{WARNING for #2 : matches ALL expectations, but TeX's output does NOT match TeX expected units declared (TeX returns \actualTeXunitsdeclared, expectation = LUA is \actualunitsdeclared)^^J}%
+            \fi
+        \fi
+        %
+        \ifcomparewithfpu
+            % check that FPU works as well. This
+            % * tests the FPU
+            % * tests that FPU values can be injected into the LUA backend:
+            \begingroup
+            \pgfkeys{/pgf/fpu,/pgf/fpu/output format=float}%
+            \pgfmathparse{#2}%
+            \xdef\actualfpu{\pgfmathresult}%
+            \ifpgfmathunitsdeclared
+                \xdef\actualfpuunitsdeclared{1}%
+            \else
+                \xdef\actualfpuunitsdeclared{0}%
+            \fi
+            \endgroup
+            %
+            \pgfkeys{/pgf/luamath/output format=fixed}%
+            \pgfluamathparse{abs(\actual - \actualfpu) > 0.004}%
+            \ifdim\pgfmathresult pt=1pt
+                \def\success{0}%
+                \pgfluamathparse{abs(\actual - \actualfpu)}%
+                \message{FAILURE for #2 : matches expectations, but does NOT match output of FPU (error \pgfmathresult). fpu=\actualfpu\space lua=\actual^^J}%
+                \global\advance\numErrors by1
+            \fi
+        \fi
+        %
+    \fi
+    %
+    \message{#2 = \actual\space (pgf=\expectedTeX) \if1\success OK\else FAILURE\fi^^J}%
+    \endgroup
 }%
 
 \parsertest{1}{1.0}{0}
@@ -225,10 +225,10 @@
 \pgfmathdeclarefunction{N1}{3}{\pgfmathparse{#1+#2+#3}}%
 \directlua{
 function pgfluamathfunctions.x()
-	return 4
+    return 4
 end
 function pgfluamathfunctions.N1(x,m,n)
-	return x+m+n
+    return x+m+n
 end
 }
 \parsertest{2^x}{16.0}{0}
@@ -371,8 +371,8 @@
 \parsertest{0 <0.1 || 4 <0.1}{1.0}{0}
 {
 \pgfkeys{/pgf/declare function={
-	xx=4;
-	yy=4;
+    xx=4;
+    yy=4;
 }}
 \parsertest{abs(xx-yy)<0.1 ? -42 : 42}{-42.0}{0}
 \parsertest{abs(xx-yy)<0.1 || abs(xx-0.5)<0.1}{1.0}{0}
@@ -425,11 +425,11 @@
 % -- strings with "<str>"
 % -- 'scalar' function
 % -- hex/octal/binary input
-% -- tex registers 
+% -- tex registers
 % -- What happens for undefined functions!? --> return nil and let TeX invoke its parser (no warning!?)
 % -- width/height/depth
 % end
-%-------------------------------------------------- 
+%--------------------------------------------------
 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -510,15 +510,15 @@
 % should have been clean up:
 \parsertest[show error message=false,compare with TeX=false,compare with fpu=false]{mu1(-5,2)}{}{0}
 
-	
+
 \def\pgfmathifexpressionTest#1{%
-	\pgfmathifexpression{1000>999}{%
-		% ok
-		\message{PASSED for mathifexpression(1000>999)  #1: = '\pgfmathresult'^^J}%
-	}{%
-		\message{FAILURE for mathifexpression(1000>999)  #1: = '\pgfmathresult'^^J}%
-		\global\advance\numErrors by1
-	}%
+    \pgfmathifexpression{1000>999}{%
+        % ok
+        \message{PASSED for mathifexpression(1000>999)  #1: = '\pgfmathresult'^^J}%
+    }{%
+        \message{FAILURE for mathifexpression(1000>999)  #1: = '\pgfmathresult'^^J}%
+        \global\advance\numErrors by1
+    }%
 }
 
 \pgfmathifexpressionTest{basicmath}
@@ -533,7 +533,7 @@
 \pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}%
 \pgfmathifexpressionTest{fpu output fixed}
 \endgroup
-	
+
 \begingroup
 \pgfkeys{/pgf/fpu,/pgf/fpu/output format=sci}%
 \pgfmathifexpressionTest{fpu output sci}
@@ -553,9 +553,9 @@
 % NO MORE TEST CASES HERE!
 
 \ifnum\numErrors>0
-	\PackageError{pgf}{Has \the\numErrors\space FAILURES}{}
+    \PackageError{pgf}{Has \the\numErrors\space FAILURES}{}
 \else
-	\message{All cases PASSED^^J}%
+    \message{All cases PASSED^^J}%
 \fi
 
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreexternal.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -273,7 +273,7 @@
 %   \pgfexternalstorecommand will be restored.
 % - anything else will be appended to the main .aux file, assuming that
 %   it contains \label or \ref information (only if the LaTeX switch
-%      \if at filesw is \iftrue).
+%   \if at filesw is \iftrue).
 %
 %
 % #1: the image file name (such that #1.dpth exists)

Modified: trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcorepoints.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -568,8 +568,8 @@
 %
 % #1 = a time
 % #2 = center of a ellipse
-% #3 = 0-degree exis of the ellipse
-% #4 = 90-degree exis of the ellipse
+% #3 = 0-degree axis of the ellipse
+% #4 = 90-degree axis of the ellipse
 % #5 = start angle of an arc on the ellipse
 % #6 = end angle of an arc on the ellipse
 %
@@ -851,11 +851,11 @@
 
 \def\pgfpointxyz#1#2#3{%
   \pgfmathparse{#1}%
-  \let\pgftemp at x=\pgfmathresult%
+  \global\let\pgftemp at x=\pgfmathresult%
   \pgfmathparse{#2}%
-  \let\pgftemp at y=\pgfmathresult%
+  \global\let\pgftemp at y=\pgfmathresult%
   \pgfmathparse{#3}%
-  \let\pgftemp at z=\pgfmathresult%
+  \global\let\pgftemp at z=\pgfmathresult%
   \global\pgf at x=\pgftemp at x\pgf at xx%
   \global\advance\pgf at x by \pgftemp at y\pgf at yx%
   \global\advance\pgf at x by \pgftemp at z\pgf at zx%
@@ -943,77 +943,12 @@
 
 \def\pgfpointnormalised#1{%
   \pgf at process{#1}%
-  \pgf at xa=\pgf at x%
-  \pgf at ya=\pgf at y%
-  \ifdim\pgf at x<0pt\relax% move into first quadrant
-    \global\pgf at x=-\pgf at x%
-  \fi%
-  \ifdim\pgf at y<0pt\relax%
-    \pgf at y=-\pgf at y%
-  \fi%
-  \ifdim\pgf at x>\pgf at y% x > y
-    % make point small
-    \c at pgf@counta=\pgf at x%
-    \divide\c at pgf@counta by 65536\relax%
-    \ifnum\c at pgf@counta=0\relax%
-      \c at pgf@counta=1\relax%
-    \fi%
-    \global\divide\pgf at x by\c at pgf@counta%
-    \global\divide\pgf at y by\c at pgf@counta%
-    \divide\pgf at xa by\c at pgf@counta%
-    \divide\pgf at ya by\c at pgf@counta%
-    % ok.
-    \global\pgf at x=.125\pgf at x%
-    \global\pgf at y=.125\pgf at y%
-    \c at pgf@counta=\pgf at x%
-    \c at pgf@countb=\pgf at y%
-    \multiply\c at pgf@countb by 100%
-    \ifnum\c at pgf@counta<64\relax%
-      \global\pgf at x=1pt\relax%
-      \global\pgf at y=0pt\relax%
-    \else%
-      \divide\c at pgf@countb by \c at pgf@counta%
-      \global\pgf at x=\csname pgf at cosfrac\the\c at pgf@countb\endcsname pt%
-      \pgf at xc=8192pt%
-      \divide\pgf at xc by\c at pgf@counta%
-      \global\pgf at y=\pgf at sys@tonumber{\pgf at xc}\pgf at ya%
-      \global\pgf at y=\pgf at sys@tonumber{\pgf at x}\pgf at y%
-    \fi%
-    \ifdim\pgf at xa<0pt%
-      \global\pgf at x=-\pgf at x%
-    \fi%
-  \else% x <= y
-    % make point small
-    \c at pgf@counta=\pgf at y%
-    \divide\c at pgf@counta by 65536\relax%
-    \ifnum\c at pgf@counta=0\relax%
-      \c at pgf@counta=1\relax%
-    \fi%
-    \global\divide\pgf at x by\c at pgf@counta%
-    \global\divide\pgf at y by\c at pgf@counta%
-    \divide\pgf at xa by\c at pgf@counta%
-    \divide\pgf at ya by\c at pgf@counta%
-    % ok.
-    \global\pgf at x=.125\pgf at x%
-    \global\pgf at y=.125\pgf at y%
-    \c at pgf@counta=\pgf at y%
-    \c at pgf@countb=\pgf at x%
-    \multiply\c at pgf@countb by 100%
-    \ifnum\c at pgf@counta<64\relax%
-      \global\pgf at y=1pt\relax%
-      \global\pgf at x=0pt\relax%
-    \else%
-      \divide\c at pgf@countb by \c at pgf@counta%
-      \global\pgf at y=\csname pgfmath at cosfrac@\the\c at pgf@countb\endcsname pt%
-      \pgf at xc=8192pt%
-      \divide\pgf at xc by\c at pgf@counta%
-      \global\pgf at x=\pgf at sys@tonumber{\pgf at xc}\pgf at xa%
-      \global\pgf at x=\pgf at sys@tonumber{\pgf at y}\pgf at x%
-    \fi%
-    \ifdim\pgf at ya<0pt%
-      \global\pgf at y=-\pgf at y%
-    \fi%
-  \fi\ignorespaces%
+  \pgfmathatantwo{\the\pgf at y}{\the\pgf at x}%
+  \let\pgf at tmp=\pgfmathresult%
+  \pgfmathcos@{\pgf at tmp}%
+  \pgf at x=\pgfmathresult pt\relax%
+  \pgfmathsin@{\pgf at tmp}%
+  \pgf at y=\pgfmathresult pt\relax%
 }
 
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcorescopes.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -742,6 +742,7 @@
 \def\pgfinterruptpicture
 {%
   \begingroup%
+    \csname tikz at inside@picturefalse\endcsname%
     \pgfinterruptboundingbox%
       \pgftransformreset%
       \pgfinterruptpath%

Modified: trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/basiclayer/pgfcoreshade.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -157,6 +157,12 @@
 
 
 
+\newcount\pgf at shadingcount
+\pgf at shadingcount=0
+{
+  \catcode`\%=12
+  \gdef\pgf at shadingnum{%\the\pgf at shadingcount%}
+}
 
 % Declares a horizontal shading for later use. The shading is a
 % horizontal bar that changes its color.
@@ -196,8 +202,11 @@
 \def\pgf at declarehorizontalshading[#1]#2#3#4{%
   \expandafter\def\csname pgf at deps@pgfshading#2!\endcsname{#1}%
   \expandafter\ifx\csname pgf at deps@pgfshading#2!\endcsname\pgfutil at empty%
+    \expandafter\let\csname pgf at num@pgfshading#2!\endcsname\pgfutil at empty
     \pgfsys at horishading{#2}{#3}{#4}%
   \else%
+    \global\advance\pgf at shadingcount 1\relax
+    \expandafter\edef\csname pgf at num@pgfshading#2!\endcsname{\pgf at shadingnum}%
     \expandafter\def\csname pgf at func@pgfshading#2!\endcsname{\pgfsys at horishading}%
     \expandafter\def\csname pgf at args@pgfshading#2!\endcsname{{#3}{#4}}%
     \expandafter\let\csname @pgfshading#2!\endcsname=\pgfutil at empty%
@@ -226,8 +235,11 @@
 \def\pgf at declareverticalshading[#1]#2#3#4{%
   \expandafter\def\csname pgf at deps@pgfshading#2!\endcsname{#1}%
   \expandafter\ifx\csname pgf at deps@pgfshading#2!\endcsname\pgfutil at empty%
+    \expandafter\let\csname pgf at num@pgfshading#2!\endcsname=\pgfutil at empty
     \pgfsys at vertshading{#2}{#3}{#4}%
   \else%
+    \global\advance\pgf at shadingcount 1\relax
+    \expandafter\edef\csname pgf at num@pgfshading#2!\endcsname{\pgf at shadingnum}%
     \expandafter\def\csname pgf at func@pgfshading#2!\endcsname{\pgfsys at vertshading}%
     \expandafter\def\csname pgf at args@pgfshading#2!\endcsname{{#3}{#4}}%
     \expandafter\let\csname @pgfshading#2!\endcsname=\pgfutil at empty%
@@ -269,8 +281,11 @@
 \def\pgf at declareradialshading[#1]#2#3#4{%
   \expandafter\def\csname pgf at deps@pgfshading#2!\endcsname{#1}%
   \expandafter\ifx\csname pgf at deps@pgfshading#2!\endcsname\pgfutil at empty%
+    \expandafter\let\csname pgf at num@pgfshading#2!\endcsname=\pgfutil at empty
     \pgfsys at radialshading{#2}{#3}{#4}%
   \else%
+    \global\advance\pgf at shadingcount 1\relax
+    \expandafter\edef\csname pgf at num@pgfshading#2!\endcsname{\pgf at shadingnum}%
     \expandafter\def\csname pgf at func@pgfshading#2!\endcsname{\pgfsys at radialshading}%
     \expandafter\def\csname pgf at args@pgfshading#2!\endcsname{{#3}{#4}}%
     \expandafter\let\csname @pgfshading#2!\endcsname=\pgfutil at empty%
@@ -317,7 +332,7 @@
 % evaluated for each pixel independently.
 %
 % Because of the rather difficult PostScript syntax, use this macro
-% only *if you know what you are doing* (or if you are advanterous, of
+% only *if you know what you are doing* (or if you are adventurous, of
 % course).
 %
 % As for other shadings, the optional dependencies argument is used to
@@ -376,17 +391,21 @@
 \def\pgf at declarefunctionalshading[#1]#2#3#4#5#6{%
   \expandafter\def\csname pgf at deps@pgfshading#2!\endcsname{#1}%
   \expandafter\ifx\csname pgf at deps@pgfshading#2!\endcsname\pgfutil at empty%
+    \expandafter\let\csname pgf at num@pgfshading#2!\endcsname=\pgfutil at empty
     \pgfshade at functionaldo{#2}{#3}{#4}{#5}{#6}%
   \else%
+    \global\advance\pgf at shadingcount 1\relax
+    \expandafter\edef\csname pgf at num@pgfshading#2!\endcsname{\pgf at shadingnum}%
     \expandafter\def\csname pgf at func@pgfshading#2!\endcsname{\pgfshade at functionaldo}%
     \expandafter\def\csname pgf at args@pgfshading#2!\endcsname{{#3}{#4}{#5}{#6}}%
     \expandafter\let\csname @pgfshading#2!\endcsname=\pgfutil at empty%
   \fi}
 \def\pgfshade at functionaldo#1#2#3#4#5{%
-  {%
+  \begingroup
     #4%
     \pgfsys at functionalshading{#1}{#2}{#3}{#5}%
-  }%
+    \expandafter\pgfmath at smuggleone\csname @pgfshading#1!\endcsname
+  \endgroup
 }
 
 \def\pgfshadecolortorgb#1#2{%
@@ -426,38 +445,38 @@
   \expandafter\pgfutil at ifundefined\expandafter{\pgf at shadingname}%
   {\pgferror{Undefined shading "#1"}}%
   {%
+    \edef\pgf at shade@adds{\csname pgf at num\pgf at shadingname\endcsname}%
+    \pgfutil at ifundefined{pgf at deps\pgf at shadingname}%
+    {}%
     {%
-      \pgfutil at globalcolorsfalse%
-      \def\pgf at shade@adds{}%
-      \pgfutil at ifundefined{pgf at deps\pgf at shadingname}%
-      {}%
-      {%
+      \begingroup
+        \pgfutil at globalcolorsfalse
         \edef\@list{\csname pgf at deps\pgf at shadingname\endcsname}%
         \pgfutil at for\@temp:=\@list\do{%
-          {%
-            \pgfutil at ifundefined{applycolormixins}{}{\applycolormixins{\@temp}}%
-            \pgfutil at extractcolorspec{\@temp}{\pgf at tempcolor}%
-            \expandafter\pgfutil at convertcolorspec\pgf at tempcolor{rgb}{\pgf at rgbcolor}%
-            \xdef\pgf at shade@adds{\pgf at shade@adds,\pgf at rgbcolor}%
-          }%
+          \pgfutil at ifundefined{applycolormixins}{}{\applycolormixins{\@temp}}%
+          \pgfutil at extractcolorspec{\@temp}{\pgf at tempcolor}%
+          \expandafter\pgfutil at convertcolorspec\pgf at tempcolor{rgb}{\pgf at rgbcolor}%
+          \edef\pgf at shade@adds{\pgf at shade@adds,\pgf at rgbcolor}%
         }%
-      }%
-      \expandafter\pgf at strip@shadename\pgf at shadingname!!%
-      \pgfutil at ifundefined{@pgfshading\pgf at basename\pgf at shade@adds!}%
-      {%
-        {%
-          \expandafter\def\expandafter\@temp\expandafter{\csname pgf at func\pgf at shadingname\endcsname}%
-          \edef\@args{{\pgf at basename\pgf at shade@adds}}%
-          \expandafter\expandafter\expandafter\def%
-          \expandafter\expandafter\expandafter\@@args%
-          \expandafter\expandafter\expandafter{\csname pgf at args\pgf at shadingname\endcsname}%
-          \expandafter\expandafter\expandafter\@temp\expandafter\@args\@@args%
-          %
-        }%
-      }%
-      {}%
-      \pgf at invokeshading{\csname @pgfshading\pgf at basename\pgf at shade@adds!\endcsname}%
+        \pgfmath at smuggleone\pgf at shade@adds
+      \endgroup
     }%
+    \expandafter\pgf at strip@shadename\pgf at shadingname!!%
+    \edef\pgf at shadingxname{@pgfshading\pgf at basename\pgf at shade@adds!}%
+    \pgfutil at ifundefined{\pgf at shadingxname}%
+    {%
+      \begingroup
+        \edef\@temp{\expandafter\noexpand\csname pgf at func\pgf at shadingname\endcsname}%
+        \edef\@args{{\pgf at basename\pgf at shade@adds}}%
+        \expandafter\expandafter\expandafter\def
+        \expandafter\expandafter\expandafter\@@args
+        \expandafter\expandafter\expandafter{\csname pgf at args\pgf at shadingname\endcsname}%
+        \expandafter\expandafter\expandafter\@temp\expandafter\@args\@@args
+        \expandafter\pgfmath at smuggleone\csname\pgf at shadingxname\endcsname
+      \endgroup
+    }%
+    {}%
+    \pgf at invokeshading{\csname\pgf at shadingxname\endcsname}%
   }%
 }
 
@@ -484,6 +503,8 @@
 \def\pgfaliasshading#1#2{%
   \expandafter\let\expandafter\pgf at temp\expandafter=\csname @pgfshading#2!\endcsname%
   \expandafter\let\csname @pgfshading#1!\endcsname=\pgf at temp%
+  \expandafter\let\expandafter\pgf at temp\expandafter=\csname pgf at num@pgfshading#2!\endcsname%
+  \expandafter\let\csname pgf at num@pgfshading#1!\endcsname=\pgf at temp%
   \expandafter\let\expandafter\pgf at temp\expandafter=\csname pgf at deps@pgfshading#2!\endcsname%
   \expandafter\let\csname pgf at deps@pgfshading#1!\endcsname=\pgf at temp%
   \expandafter\let\expandafter\pgf at temp\expandafter=\csname pgf at func@pgfshading#2!\endcsname%
@@ -539,40 +560,66 @@
       \advance\pgf at xb by.5\pgf at pathminx%
       \pgf at yb=.5\pgf at pathmaxy%
       \advance\pgf at yb by.5\pgf at pathminy%
+      % Calculate rotation:
+      \pgfmathparse{#2}%
+      \let\pgfshade at angle=\pgfmathresult
+      \pgfmathsin@\pgfshade at angle
+      \let\pgfshade at sin=\pgfmathresult
+      \pgfmathcos@\pgfshade at angle
+      \let\pgfshade at cos=\pgfmathresult
+      % width and height of the bounding box
+      \pgf at xa=\pgf at pathmaxx
+      \advance\pgf at xa by-\pgf at pathminx
+      \pgf at ya=\pgf at pathmaxy
+      \advance\pgf at ya by-\pgf at pathminy
       % Calculate scaling:
-      \pgf at xc=\pgf at pathmaxx%
-      \advance\pgf at xc by-\pgf at pathminx%
-      \pgf at yc=\pgf at pathmaxy%
-      \advance\pgf at yc by-\pgf at pathminy%
-      \pgf at xc=.01992528\pgf at xc%
-      \pgf at yc=.01992528\pgf at yc%
-      \ifdim\pgf at xc<0.0001pt\relax\ifdim\pgf at xc>-0.0001pt\relax\pgf at no@shadetrue\fi\fi%
-      \ifdim\pgf at yc<0.0001pt\relax\ifdim\pgf at yc>-0.0001pt\relax\pgf at no@shadetrue\fi\fi%
-      \ifpgf at no@shade\else%
-      \pgfsys at beginscope%
-        \pgfsyssoftpath at invokecurrentpath%
-        \pgfsys at clipnext%
-        \pgfsys at discardpath%
-        % Compute new transformation matrix:
-        \pgfsys at transformcm{1}{0}{0}{1}{\pgf at xb}{\pgf at yb}%
-        \pgfsys at transformcm%
-        {\pgf at sys@tonumber{\pgf at xc}}{0}%
-        {0}{\pgf at sys@tonumber{\pgf at yc}}{0pt}{0pt}%
-        \pgfmathparse{#2}%
-        \let\pgfshade at angle=\pgfmathresult%
-        \pgfmathsin@{\pgfshade at angle}%
-        \let\pgfshade at sin=\pgfmathresult%
-        \pgfmathcos@{\pgfshade at angle}%
-        \let\pgfshade at cos=\pgfmathresult%
-        \pgf at x=\pgfshade at sin pt%
-        \pgf at xa=-\pgf at x%
-        \pgfsys at transformcm{\pgfshade at cos}{\pgfshade at sin}{\pgf at sys@tonumber{\pgf at xa}}{\pgfshade at cos}{0pt}{0pt}%
-        \ifx\pgf at shade@extra at transform\pgfutil at empty%
-        \else%
-          \pgflowlevel{\pgf at shade@extra at transform}%
-        \fi%
-        \pgfuseshading{#1}%
-      \pgfsys at endscope%
+      % xscale = 1pt/50bp * (w*|cos(a)|+h*|sin(a)|)/(|cos(a)|+|sin(a)|)
+      % yscale = 1pt/50bp * (w*|sin(a)|+h*|cos(a)|)/(|cos(a)|+|sin(a)|)
+      % 1pt/50bp = .01992528
+      \pgfmathabs@\pgfshade at sin
+      \let\pgfshade at abssin=\pgfmathresult
+      \pgfmathabs@\pgfshade at cos
+      \let\pgfshade at abscos=\pgfmathresult
+      \pgf at xc=\pgfshade at abscos\pgf at xa
+      \advance\pgf at xc by\pgfshade at abssin\pgf at ya
+      \pgf at yc=\pgfshade at abssin\pgf at xa
+      \advance\pgf at yc by\pgfshade at abscos\pgf at ya
+      \pgfmathadd@\pgfshade at abscos\pgfshade at abssin
+      \pgfmathdivide@{.01992528}{\pgfmathresult}%
+      \pgf at xc=\pgfmathresult\pgf at xc
+      \pgf at yc=\pgfmathresult\pgf at yc
+      \ifdim\pgf at xc<0.0001pt
+        \ifdim\pgf at xc>-0.0001pt
+          \pgf at no@shadetrue
+        \fi
+      \fi
+      \ifdim\pgf at yc<0.0001pt
+        \ifdim\pgf at yc>-0.0001pt
+          \pgf at no@shadetrue
+        \fi
+      \fi
+      \ifpgf at no@shade\else
+        \pgfsys at beginscope
+          \pgfsyssoftpath at invokecurrentpath
+          \pgfsys at clipnext
+          \pgfsys at discardpath
+          % Compute new transformation matrix:
+          % shift
+          \pgfsys at transformcm{1}{0}{0}{1}{\the\pgf at xb}{\the\pgf at yb}%
+          % rotation
+          \pgf at x=\pgfshade at sin pt%
+          \pgf at xa=-\pgf at x%
+          \pgfsys at transformcm{\pgfshade at cos}{\pgfshade at sin}{\pgf at sys@tonumber{\pgf at xa}}{\pgfshade at cos}{0pt}{0pt}%
+          % scaling
+          \pgfsys at transformcm{\pgf at sys@tonumber{\pgf at xc}}{0}{0}{\pgf at sys@tonumber{\pgf at yc}}{0pt}{0pt}%
+          % This will actually be the first transformation of the shading.
+          % Should it be applied first so that it becomes the last one?
+          \ifx\pgf at shade@extra at transform\pgfutil at empty%
+          \else%
+            \pgflowlevel{\pgf at shade@extra at transform}%
+          \fi%
+          \pgfuseshading{#1}%
+        \pgfsys at endscope%
       \fi%
     \endgroup%
   \fi%

Modified: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/graphs/tikzlibrarygraphs.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/graphs/tikzlibrarygraphs.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/graphs/tikzlibrarygraphs.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -542,10 +542,10 @@
 }%
 
 \def\tikz at lib@graph at quote@parser at done{%
-  {\expandafter\scantokens\expandafter{%
+  {\expandafter\pgfutil at scantokens\expandafter{%
     \expandafter\expandafter\expandafter\tikzlibgraphactivations\expandafter\expandafter\expandafter\tikzlibgraphdoedef\expandafter{\the\pgfkeys at temptoks}%
   }}%
-  {\expandafter\scantokens\expandafter{\expandafter\tikzlibgraphactivationsbrace\expandafter\xdef\expandafter\tikzlibgraphreplaced\expandafter<\tikzlibgraphreplaced>\catcode`\}=2\relax}}%
+  {\expandafter\pgfutil at scantokens\expandafter{\expandafter\tikzlibgraphactivationsbrace\expandafter\xdef\expandafter\tikzlibgraphreplaced\expandafter<\tikzlibgraphreplaced>\catcode`\}=2\relax}}%
   \edef\tikzlibgraphreplaced{\expandafter\detokenize\expandafter{\tikzlibgraphreplaced}}
   \pgfutil at ifnextchar/\tikz at lib@graph at quotes@slash\tikz at lib@graph at quotes@no at slash%
 }%
@@ -563,7 +563,7 @@
 \def\tikz at lib@prepare at active#1#2#3{%
   {%
     \catcode`#1=13\relax%
-    \scantokens{\gdef\tikzlibgraphactivator{\def#2{@#3@}}}%
+    \pgfutil at scantokens{\gdef\tikzlibgraphactivator{\def#2{@#3@}}}%
   }%
   \pgfutil at g@addto at macro\tikzlibgraphactivations{\catcode`#1=13\relax}%
   \expandafter\pgfutil at g@addto at macro\expandafter\tikzlibgraphactivations\expandafter{\tikzlibgraphactivator}%
@@ -646,7 +646,16 @@
 
 \def\tikz at lib@graph at node{\tikz at lib@graph at check@quotes\tikz at lib@graph at node@normal}%
 
-\def\tikz at lib@graph at node@normal#1-{%
+\def\tikz at lib@graph at node@normal{%
+  \pgfutil at ifnextchar({\tikz at lib@graph at node@dressed}{\tikz at lib@graph at node@naked}%
+}%
+
+\def\tikz at lib@graph at node@dressed(#1){%
+  % Add extra braces around nodes to protect dashes
+  \tikz at lib@graph at node@naked{(#1)}%
+}%
+
+\def\tikz at lib@graph at node@naked#1-{%
   % Detect trailing <
   \tikz at lib@graph@@node#1<\pgf at stop%
 }%
@@ -883,7 +892,8 @@
     \ifpgfutil at in@%
       \tikz at lib@parse at node@with at doubleunder#1\pgf at stop%
     \else
-      \pgfkeys at spdef\tikz at lib@graph at name@only{#1}%
+      \edef\pgf at marshal{\noexpand\pgfkeys at spdef\noexpand\tikz at lib@graph at name@only{#1}}%
+      \pgf at marshal%
       \let\tikz at lib@graph at node@text\tikz at lib@graph at name@only%
       \edef\tikz at lib@graph at name{\tikz at lib@graph at path\tikz at lib@graph at name@only}%
     \fi%
@@ -902,7 +912,7 @@
 }%
 \def\tikz at lg@slash at quote"#1"#2\pgf at stop{%
   \iftikz at handle@active at nodes%
-    \def\tikz at lib@graph at node@text{\scantokens{#1}}%
+    \def\tikz at lib@graph at node@text{\csname pgfutil at scantokens\endcsname{#1}}%
   \else
     \def\tikz at lib@graph at node@text{#1}%
   \fi%
@@ -910,7 +920,7 @@
 {\catcode`\"=13\relax
   \gdef\tikz at lg@slash at quote@active"#1"#2\pgf at stop{%
   \iftikz at handle@active at nodes%
-    \def\tikz at lib@graph at node@text{\scantokens{#1}}%
+    \def\tikz at lib@graph at node@text{\csname pgfutil at scantokens\endcsname{#1}}%
   \else
     \def\tikz at lib@graph at node@text{#1}%
   \fi%
@@ -918,7 +928,7 @@
 }%
 \def\tikz at lg@slash at cont#1\pgf at stop{%
   \iftikz at handle@active at nodes%
-    \def\tikz at lib@graph at node@text{\scantokens{#1}}%
+    \def\tikz at lib@graph at node@text{\csname pgfutil at scantokens\endcsname{#1}}%
   \else
     \def\tikz at lib@graph at node@text{#1}%
   \fi%

Modified: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzexternalshared.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzexternalshared.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzexternalshared.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -12,7 +12,7 @@
 %   tikzlibraryexternal.code.tex
 % ******************************
 %
-% 
+%
 % This file provides a high-level automatic export feature for tikz pictures.
 % It allows to export EACH SINGLE FIGURE into a separate PDF.
 %
@@ -61,17 +61,17 @@
 %
 % This command must be called *after* \tikzexternalize.
 \def\tikzifexternalizing#1#2{%
-	\ifpgf at external@grabshipout #1\else #2\fi
+    \ifpgf at external@grabshipout #1\else #2\fi
 }%
 % Invokes '#1' if the external lib is currently externalizing the NEXT FOLLOWING
 % tikzpicture. It invokes '#2' if that is not the case.
 \def\tikzifexternalizingnext#1#2{%
-	\ifpgf at external@grabshipout 
-		\tikzexternalgetnextfilename\tikzexternal at temp
-		\tikzifexternaljobnamematches\tikzexternal at temp{#1}{#2}%
-	\else 
-		#2%
-	\fi
+    \ifpgf at external@grabshipout
+        \tikzexternalgetnextfilename\tikzexternal at temp
+        \tikzifexternaljobnamematches\tikzexternal at temp{#1}{#2}%
+    \else
+        #2%
+    \fi
 }%
 % Invokes '#1' if the external lib is currently externalizing the
 % current picture. It invokes '#2' if that is not the case.
@@ -79,16 +79,16 @@
 % If the command is invoked outside of a picture, '#2' will be
 % invoked.
 \def\tikzifexternalizingcurrent#1#2{%
-	\ifpgf at external@grabshipout 
-		\tikzexternalgetcurrentfilename\tikzexternal at temp
-		\ifx\tikzexternal at temp\pgfutil at empty
-			#2%
-		\else
-			\tikzifexternaljobnamematches\tikzexternal at temp{#1}{#2}%
-		\fi
-	\else 
-		#2%
-	\fi
+    \ifpgf at external@grabshipout
+        \tikzexternalgetcurrentfilename\tikzexternal at temp
+        \ifx\tikzexternal at temp\pgfutil at empty
+            #2%
+        \else
+            \tikzifexternaljobnamematches\tikzexternal at temp{#1}{#2}%
+        \fi
+    \else
+        #2%
+    \fi
 }%
 
 % Invokes '#2' if \jobname equals '#1' and '#3' if not.
@@ -95,227 +95,227 @@
 % I suppose that '#1' is a macro containing the file name.
 %
 \def\tikzifexternaljobnamematches#1#2#3{%
-	\edef\pgf at tempa{\expandafter\string\csname#1\endcsname}%
-	\edef\pgf at tempb{\expandafter\string\csname\pgfactualjobname\endcsname}%
-	\ifx\pgf at tempa\pgf at tempb #2\else#3 \fi%
+    \edef\pgf at tempa{\expandafter\string\csname#1\endcsname}%
+    \edef\pgf at tempb{\expandafter\string\csname\pgfactualjobname\endcsname}%
+    \ifx\pgf at tempa\pgf at tempb #2\else#3 \fi%
 }%
 
 
 \pgfutil at IfUndefined{pdfshellescape}{%
-	% let's hope that \usepackage{pdftexcmds} has been used...
-	\pgfutil at IfUndefined{pdf at shellescape}{%
-		\def\tikzexternalcheckshellescape{0}%
-	}{%
-		\let\tikzexternalcheckshellescape=\pdf at shellescape
-	}%
+    % let's hope that \usepackage{pdftexcmds} has been used...
+    \pgfutil at IfUndefined{pdf at shellescape}{%
+        \def\tikzexternalcheckshellescape{0}%
+    }{%
+        \let\tikzexternalcheckshellescape=\pdf at shellescape
+    }%
 }{%
-	\let\tikzexternalcheckshellescape=\pdfshellescape
+    \let\tikzexternalcheckshellescape=\pdfshellescape
 }%
 \ifnum\tikzexternalcheckshellescape=1
-	\def\tikzexternalcheckshellescape{\pgfkeysvalueof{/tikz/external/shell escape}\space}%
+    \def\tikzexternalcheckshellescape{\pgfkeysvalueof{/tikz/external/shell escape}\space}%
 \else
-	\def\tikzexternalcheckshellescape{}%
+    \def\tikzexternalcheckshellescape{}%
 \fi
 
 \newif\iftikzexternal at auto@detect at jobname
 
 \pgfqkeys{/tikz/external}{
-	figure list/.is if=tikzexternal at genfigurelist,
-	aux in dpth/.style={/pgf/images/aux in dpth=#1},%
-	disable dependency files/.code={%
-		\let\tikzexternalfiledependsonfile at ACTIVE=\tikzexternalfiledependsonfile
-	},
-	% 'mode' applies only if \jobname==real job name.
-	mode/.is choice,
-	mode/only graphics/.code	= {%
-		\def\tikzexternal at opmode{0}%
-		\pgfkeysalso{/pgf/images/aux in dpth=true}%
-	},
-	mode/no graphics/.code		= {\def\tikzexternal at opmode{1}},
-	% an alias for 'no graphics:'
-	mode/only pictures/.code	= {\def\tikzexternal at opmode{1}},
-	mode/graphics if exists/.code= {%
-		\def\tikzexternal at opmode{2}%
-		\pgfkeysalso{/pgf/images/aux in dpth=true}%
-	},
-	mode/list only/.code		= {\def\tikzexternal at opmode{3}\tikzexternal at genfigurelisttrue},
-	mode/convert with system call/.code={%
-		\def\tikzexternal at opmode{4}%
-		\pgfkeysalso{/tikz/external/figure list=false,/pgf/images/aux in dpth=true}%
-	},
-	mode/list and make/.code	= {%
-		\def\tikzexternal at opmode{5}%
-		\pgfkeysalso{/tikz/external/figure list=true,/pgf/images/aux in dpth=true}%
-	},
-	mode=convert with system call,
-	force remake/.is if=tikzexternal at force@remake,
-	force remake/.default=true,
-	%
-	% DEPRECATED: this here will work out-of-the box (provided that
-	% 'aux in dpth' is active):
-	failed ref warnings for/.initial={\ref,\cite,\pageref},
-	export next/.is if=tikzexternalexportnext,
-	export/.is if=tikzexternal at export@enabled,
-	remake next/.is if=tikzexternalremakenext,
-	remake next/.default=true,
-	verbose IO/.is if=tikzexternal at verboseio,
-	verbose IO/.default=true,
-	verbose IO=true,
-	verbose optimize/.is if=tikzexternal at verbose@optimize,
-	verbose up to date/.is if=tikzexternal at verboseuptodate,
-	verbose/.style={
-		verbose IO=#1,
-		verbose optimize=#1,
-		verbose up to date=#1,
-	},
-	shell escape/.initial=-shell-escape,
-	read main aux/.is if=pgfexternalreadmainaux,
-	image discarded text/.initial={%
-		[[ \textsc{Image Discarded Due To} \texttt{`/tikz/external/%
-				\ifcase\tikzexternal at opmode\relax
-					mode=only graphics%
-				\or
-					mode=no graphics%
-				\or
-					mode=graphics if exists%
-				\or
-					mode=list only%
-				\or
-					mode=convert with system call%
-				\or
-					mode=list and make%
-				\fi
-		'}~]]%
-		\pgfutil at ifundefined{tikzexternal at warning@at at end}{%
-			\pgfutil at ifundefined{AtEndDocument}{}{%
-				\AtEndDocument{%
-					\message{! Package tikz Warning: Some images are not up-to-date and need to be generated. }%
-				}%
-			}%
-			\gdef\tikzexternal at warning@at at end{1}%
-		}{}%
-	},
-	optimize/.is choice,
-	optimize/true/.code={%
-		\tikzexternal at optimizetrue
-		\iftikzexternal at optimize
-			\ifpgf at external@grabshipout
-				% we have already started the externalization! Install
-				% optimization commands to activate the new one:
-				\tikzexternal at optimize@REPLACE
-			\fi
-		\fi
-	},
-	optimize/false/.code={%
-		\tikzexternal at optimizefalse%
-		\tikzexternal at optimize@RESTORE
-	},%
-	optimize=true,
-	optimize away text/.code={[ \textsc{\string#1\ optimized away because it does not contribute to exported PDF}]},
-	optimize/install/.code={},%
-	optimize/restore/.code={},%
-	% Expects two arguments, the command name and (optionally) a count
-	% of expected arguments.
-	% Example: 
-	% 	'optimize command away=\includegraphics'
-	% 	'optimize command away={\mycommand}{3}'
-	%
-	% It accepts commands which have '[]' arguments and whose first
-	% argument always begins with '{'.
-	%
-	% #1: the command name
-	% #2: either empty or a number of EXPECTED arguments. It will be checked
-	% for one optional argument in square brackets as well.
-	optimize command away/.code 2 args={%
-		\expandafter\global\expandafter\let\csname\string#1 at ORIG\endcsname=#1%
-		\pgfkeysalso{%
-			/tikz/external/optimize/install/.append code={%
-				\def#1{\tikzexternal at optimize@away at cmd{#1}{#2}}%
-			},
-			/tikz/external/optimize/restore/.append code={%
-				\expandafter\let\expandafter#1\csname\string#1 at ORIG\endcsname
-			}
-		}%
-		\iftikzexternal at optimize
-			\ifpgf at external@grabshipout
-				% we have already started the externalization! Install
-				% optimization commands to activate the new one:
-				\tikzexternal at optimize@REPLACE
-			\fi
-		\fi
-	},
-	optimize command away=\includegraphics,
-	optimize command away=\pgfincludeexternalgraphics,
-	% EXPERIMENTAL (UNTESTED):
-	optimize latex env away/.code={%
-		\expandafter\let\expandafter\pgf at tempa\csname #1\endcsname
-		\expandafter\global\expandafter\let\csname #1 at ORIG\endcsname=\pgf at tempa%
-		\pgfkeysalso{%
-			/tikz/external/optimize/install/.append code={%
-				\pgfutil at namedef{#1}{\tikzexternal at optimize@away at latex@env{#1}}%
-			},
-			/tikz/external/optimize/restore/.append code={%
-				\pgfutil at namelet{#1}{#1 at ORIG}%
-			}%
-		}%
-	},
-	only named/.is if=tikzexternal at onlynamed,
-	only named/.default=true,
-	figure name/.initial=\tikzexternal at realjob-figure,
-	reset counter/.code={%
-		\expandafter\gdef\csname c at tikzext@no@#1\endcsname{0}%
-	},%
-	prefix/.code={\tikzsetexternalprefix{#1}},
-	up to date check/.is choice,
-	up to date check/simple/.code={\def\tikzexternal at uptodate@mode{0}},
-	% md5 relies on \pdfmdfivesum of pdftex. It uses 'diff' as fallback if we do not have that command.
-	up to date check/md5/.code={\def\tikzexternal at uptodate@mode{1}},
-	up to date check/diff/.code={\def\tikzexternal at uptodate@mode{2}},
-	up to date check=md5,
+    figure list/.is if=tikzexternal at genfigurelist,
+    aux in dpth/.style={/pgf/images/aux in dpth=#1},%
+    disable dependency files/.code={%
+        \let\tikzexternalfiledependsonfile at ACTIVE=\tikzexternalfiledependsonfile
+    },
+    % 'mode' applies only if \jobname==real job name.
+    mode/.is choice,
+    mode/only graphics/.code   = {%
+        \def\tikzexternal at opmode{0}%
+        \pgfkeysalso{/pgf/images/aux in dpth=true}%
+    },
+    mode/no graphics/.code     = {\def\tikzexternal at opmode{1}},
+    % an alias for 'no graphics:'
+    mode/only pictures/.code   = {\def\tikzexternal at opmode{1}},
+    mode/graphics if exists/.code= {%
+        \def\tikzexternal at opmode{2}%
+        \pgfkeysalso{/pgf/images/aux in dpth=true}%
+    },
+    mode/list only/.code       = {\def\tikzexternal at opmode{3}\tikzexternal at genfigurelisttrue},
+    mode/convert with system call/.code={%
+        \def\tikzexternal at opmode{4}%
+        \pgfkeysalso{/tikz/external/figure list=false,/pgf/images/aux in dpth=true}%
+    },
+    mode/list and make/.code   = {%
+        \def\tikzexternal at opmode{5}%
+        \pgfkeysalso{/tikz/external/figure list=true,/pgf/images/aux in dpth=true}%
+    },
+    mode=convert with system call,
+    force remake/.is if=tikzexternal at force@remake,
+    force remake/.default=true,
+    %
+    % DEPRECATED: this here will work out-of-the box (provided that
+    % 'aux in dpth' is active):
+    failed ref warnings for/.initial={\ref,\cite,\pageref},
+    export next/.is if=tikzexternalexportnext,
+    export/.is if=tikzexternal at export@enabled,
+    remake next/.is if=tikzexternalremakenext,
+    remake next/.default=true,
+    verbose IO/.is if=tikzexternal at verboseio,
+    verbose IO/.default=true,
+    verbose IO=true,
+    verbose optimize/.is if=tikzexternal at verbose@optimize,
+    verbose up to date/.is if=tikzexternal at verboseuptodate,
+    verbose/.style={
+        verbose IO=#1,
+        verbose optimize=#1,
+        verbose up to date=#1,
+    },
+    shell escape/.initial=-shell-escape,
+    read main aux/.is if=pgfexternalreadmainaux,
+    image discarded text/.initial={%
+        [[ \textsc{Image Discarded Due To} \texttt{`/tikz/external/%
+                \ifcase\tikzexternal at opmode\relax
+                    mode=only graphics%
+                \or
+                    mode=no graphics%
+                \or
+                    mode=graphics if exists%
+                \or
+                    mode=list only%
+                \or
+                    mode=convert with system call%
+                \or
+                    mode=list and make%
+                \fi
+        '}~]]%
+        \pgfutil at ifundefined{tikzexternal at warning@at at end}{%
+            \pgfutil at ifundefined{AtEndDocument}{}{%
+                \AtEndDocument{%
+                    \message{! Package tikz Warning: Some images are not up-to-date and need to be generated. }%
+                }%
+            }%
+            \gdef\tikzexternal at warning@at at end{1}%
+        }{}%
+    },
+    optimize/.is choice,
+    optimize/true/.code={%
+        \tikzexternal at optimizetrue
+        \iftikzexternal at optimize
+            \ifpgf at external@grabshipout
+                % we have already started the externalization! Install
+                % optimization commands to activate the new one:
+                \tikzexternal at optimize@REPLACE
+            \fi
+        \fi
+    },
+    optimize/false/.code={%
+        \tikzexternal at optimizefalse%
+        \tikzexternal at optimize@RESTORE
+    },%
+    optimize=true,
+    optimize away text/.code={[ \textsc{\string#1\ optimized away because it does not contribute to exported PDF}]},
+    optimize/install/.code={},%
+    optimize/restore/.code={},%
+    % Expects two arguments, the command name and (optionally) a count
+    % of expected arguments.
+    % Example:
+    %   'optimize command away=\includegraphics'
+    %   'optimize command away={\mycommand}{3}'
+    %
+    % It accepts commands which have '[]' arguments and whose first
+    % argument always begins with '{'.
+    %
+    % #1: the command name
+    % #2: either empty or a number of EXPECTED arguments. It will be checked
+    % for one optional argument in square brackets as well.
+    optimize command away/.code 2 args={%
+        \expandafter\global\expandafter\let\csname\string#1 at ORIG\endcsname=#1%
+        \pgfkeysalso{%
+            /tikz/external/optimize/install/.append code={%
+                \def#1{\tikzexternal at optimize@away at cmd{#1}{#2}}%
+            },
+            /tikz/external/optimize/restore/.append code={%
+                \expandafter\let\expandafter#1\csname\string#1 at ORIG\endcsname
+            }
+        }%
+        \iftikzexternal at optimize
+            \ifpgf at external@grabshipout
+                % we have already started the externalization! Install
+                % optimization commands to activate the new one:
+                \tikzexternal at optimize@REPLACE
+            \fi
+        \fi
+    },
+    optimize command away=\includegraphics,
+    optimize command away=\pgfincludeexternalgraphics,
+    % EXPERIMENTAL (UNTESTED):
+    optimize latex env away/.code={%
+        \expandafter\let\expandafter\pgf at tempa\csname #1\endcsname
+        \expandafter\global\expandafter\let\csname #1 at ORIG\endcsname=\pgf at tempa%
+        \pgfkeysalso{%
+            /tikz/external/optimize/install/.append code={%
+                \pgfutil at namedef{#1}{\tikzexternal at optimize@away at latex@env{#1}}%
+            },
+            /tikz/external/optimize/restore/.append code={%
+                \pgfutil at namelet{#1}{#1 at ORIG}%
+            }%
+        }%
+    },
+    only named/.is if=tikzexternal at onlynamed,
+    only named/.default=true,
+    figure name/.initial=\tikzexternal at realjob-figure,
+    reset counter/.code={%
+        \expandafter\gdef\csname c at tikzext@no@#1\endcsname{0}%
+    },%
+    prefix/.code={\tikzsetexternalprefix{#1}},
+    up to date check/.is choice,
+    up to date check/simple/.code={\def\tikzexternal at uptodate@mode{0}},
+    % md5 relies on \pdfmdfivesum of pdftex. It uses 'diff' as fallback if we do not have that command.
+    up to date check/md5/.code={\def\tikzexternal at uptodate@mode{1}},
+    up to date check/diff/.code={\def\tikzexternal at uptodate@mode{2}},
+    up to date check=md5,
 }
 
 \expandafter\def\csname tikzexternal at driver@pgfsys-luatex.def\endcsname{%
-	\pgfkeyssetvalue{/tikz/external/system call}{%
-		lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
-	}%
+    \pgfkeyssetvalue{/tikz/external/system call}{%
+        lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+    }%
 }%
 \expandafter\def\csname tikzexternal at driver@pgfsys-pdftex.def\endcsname{%
-	\pgfutil at IfUndefined{directlua}{%
-		\pgfkeyssetvalue{/tikz/external/system call}{%
-			pdflatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
-		}%
-	}{%
-		\pgfkeyssetvalue{/tikz/external/system call}{%
-			lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
-		}%
-	}%
+    \pgfutil at IfUndefined{directlua}{%
+        \pgfkeyssetvalue{/tikz/external/system call}{%
+            pdflatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+        }%
+    }{%
+        \pgfkeyssetvalue{/tikz/external/system call}{%
+            lualatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+        }%
+    }%
 }%
 %--------------------------------------------------
 % \expandafter\def\csname tikzexternal at driver@pgfsys-dvipdfm.def\endcsname{%
-% 	\pgfkeyssetvalue{/tikz/external/system call}{%
-% 		latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
-% 		&& dvipdfm "\image".dvi %
-% 	}%
+%     \pgfkeyssetvalue{/tikz/external/system call}{%
+%         latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+%         && dvipdfm "\image".dvi %
+%     }%
 % }%
-%-------------------------------------------------- 
+%--------------------------------------------------
 \expandafter\def\csname tikzexternal at driver@pgfsys-xetex.def\endcsname{%
-	\pgfkeyssetvalue{/tikz/external/system call}{%
-		xelatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
-	}%
+    \pgfkeyssetvalue{/tikz/external/system call}{%
+        xelatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"%
+    }%
 }%
 \expandafter\def\csname tikzexternal at driver@pgfsys-dvips.def\endcsname{%
-	\pgfkeyssetvalue{/tikz/external/system call}{%
-		latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource" %
-		&& dvips -o "\image".ps "\image".dvi %
-	}%
+    \pgfkeyssetvalue{/tikz/external/system call}{%
+        latex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource" %
+        && dvips -o "\image".ps "\image".dvi %
+    }%
 }%
 
 % Auto-select a suitable default value fo 'system call':
 \pgfutil at ifundefined{tikzexternal at driver@\pgfsysdriver}{%
-	% fallback. We do not know the driver here.
-	\csname tikzexternal at driver@pgfsys-pdftex.def\endcsname
+    % fallback. We do not know the driver here.
+    \csname tikzexternal at driver@pgfsys-pdftex.def\endcsname
 }{%
-	\csname tikzexternal at driver@\pgfsysdriver\endcsname
+    \csname tikzexternal at driver@\pgfsysdriver\endcsname
 }%
 
 
@@ -329,7 +329,7 @@
 \tikzsetexternalprefix{}
 
 % This method initialises automatic externalization.
-% 
+%
 % The command does need any argument, but it has two optional ones:
 %
 % 1. \tikzexternalize[<options>]
@@ -348,67 +348,67 @@
 % 2. in case that the job's real name and the current \jobname differ,
 % it will process ONLY the matching tikzpicture.
 \def\tikzexternalize{%
-	\pgfutil at ifnextchar[{%
-		\tikzexternalize at opt
-	}{%
-		\tikzexternalize at opt[]%
-	}%
+    \pgfutil at ifnextchar[{%
+        \tikzexternalize at opt
+    }{%
+        \tikzexternalize at opt[]%
+    }%
 }%
 \def\tikzexternalize at opt[#1]{%
-	\pgfutil at ifnextchar\bgroup{%
-		\tikzexternal at auto@detect at jobnamefalse
-		\tikzexternalize at opt@withname[#1]%
-	}{%
-		\tikzexternal at auto@detect at jobnametrue
-		\pgfutil at ifundefined{tikzexternalrealjob}{%
-			% ok, \tikzexternalrealjob is not known. 
-			% Assume we are currently *not* externalizing.
-			\let\tikzexternalrealjob=\jobname
-		}{}%
-		\def\pgf at tempa{\tikzexternalize at opt@withname[#1]}%
-		\expandafter\pgf at tempa\expandafter{\tikzexternalrealjob}%
-	}%
+    \pgfutil at ifnextchar\bgroup{%
+        \tikzexternal at auto@detect at jobnamefalse
+        \tikzexternalize at opt@withname[#1]%
+    }{%
+        \tikzexternal at auto@detect at jobnametrue
+        \pgfutil at ifundefined{tikzexternalrealjob}{%
+            % ok, \tikzexternalrealjob is not known.
+            % Assume we are currently *not* externalizing.
+            \let\tikzexternalrealjob=\jobname
+        }{}%
+        \def\pgf at tempa{\tikzexternalize at opt@withname[#1]}%
+        \expandafter\pgf at tempa\expandafter{\tikzexternalrealjob}%
+    }%
 }%
 \def\tikzexternalize at opt@withname[#1]#2{%
-	\gdef\tikzexternalrealjob{#2}%
-	\if1\tikzexternalize at hasbeencalled
-	\else
-		\pgfqkeys{/tikz/external}{#1}%
-		\def\tikzexternal at realjob{#2}%
-		\tikzexternalauxlock at init
-		\pgfrealjobname{#2}%
-		\def\tikzexternalize at hasbeencalled{1}%
-		\tikzexternalenable
-		\def\tikzexternal at determineimgextension##1:##2\relax{\gdef\tikzexternalimgextension{##1}}%
-		\xdef\pgf at tempa{\pgfsys at imagesuffixlist}%
-		\expandafter\tikzexternal at determineimgextension\pgf at tempa:\relax
-		\pgfutil at ifundefined{includegraphics}{%
-			\let\tikzexternal at orig@includegraphics=\relax
-		}{%
-			\let\tikzexternal at orig@includegraphics=\includegraphics
-		}%
-		\let\tikzexternalfiledependsonfile=\tikzexternalfiledependsonfile at ACTIVE
-		\let\tikzpicturedependsonfile=\tikzpicturedependsonfile at ACTIVE
-	\fi
+    \gdef\tikzexternalrealjob{#2}%
+    \if1\tikzexternalize at hasbeencalled
+    \else
+        \pgfqkeys{/tikz/external}{#1}%
+        \def\tikzexternal at realjob{#2}%
+        \tikzexternalauxlock at init
+        \pgfrealjobname{#2}%
+        \def\tikzexternalize at hasbeencalled{1}%
+        \tikzexternalenable
+        \def\tikzexternal at determineimgextension##1:##2\relax{\gdef\tikzexternalimgextension{##1}}%
+        \xdef\pgf at tempa{\pgfsys at imagesuffixlist}%
+        \expandafter\tikzexternal at determineimgextension\pgf at tempa:\relax
+        \pgfutil at ifundefined{includegraphics}{%
+            \let\tikzexternal at orig@includegraphics=\relax
+        }{%
+            \let\tikzexternal at orig@includegraphics=\includegraphics
+        }%
+        \let\tikzexternalfiledependsonfile=\tikzexternalfiledependsonfile at ACTIVE
+        \let\tikzpicturedependsonfile=\tikzpicturedependsonfile at ACTIVE
+    \fi
 }
 \def\tikzexternalize at hasbeencalled{0}%
 
 \def\tikzifexternalizehasbeencalled#1#2{%
-	\if1\tikzexternalize at hasbeencalled
-		#1%
-	\else
-		#2%
-	\fi
+    \if1\tikzexternalize at hasbeencalled
+        #1%
+    \else
+        #2%
+    \fi
 }%
 
-% If mode=`convert with system call', the boolean \ifpgfexternalreadmainaux 
+% If mode=`convert with system call', the boolean \ifpgfexternalreadmainaux
 % will be set depending on the current lock file.
 %
 % The idea is as follows: Suppose
-% pdflatex -shell-escape mainjob.tex 
+% pdflatex -shell-escape mainjob.tex
 % is running.
-% 
-% While it runs, 
+%
+% While it runs,
 % a) it modifies its mainjob.aux file,
 % b) it issues pdflatex -jobname mainjob-figure0 mainjob.tex .
 %
@@ -418,7 +418,7 @@
 % avoid such failure, a locking mechanism is established.
 %
 % The locking mechanisms causes (a) to write a lock command into
-% mainjob.auxlock 
+% mainjob.auxlock
 % just before (b) is called. Then, (b) will check it. After (b) has
 % completed, the lock will be reset.
 %
@@ -437,66 +437,66 @@
 % anything. Otherwise, it will be changed depending for 'mode=convert
 % with system call' if necessary.
 \def\tikzexternalauxlock at init{%
-	\if4\tikzexternal at opmode
-		% mode=convert with system call
-		\ifpgfexternalreadmainaux
-			% ohoh. This case needs care because the main.aux might
-			% not be ready at this time!
-			% check.
-			%
-			\edef\pgf at tempa{\expandafter\string\csname\tikzexternal at realjob\endcsname}%
-			\edef\pgf at tempb{\expandafter\string\csname\jobname\endcsname}%
-			\ifx\pgf at tempa\pgf at tempb
-				% we are *not* externalizing. Set lock into its
-				% initial "unlocked" state.
-				\tikzexternalauxlock at setlock{0}%
-			\else
-				% we are externalizing. Query the lock's value:
-				\tikzexternalauxlock at getlockvalue
-				\if1\tikzexternallocked
-					\pgfexternalreadmainauxfalse
-					% the main .aux file won't be read right now.
-				\else
-					\pgfexternalreadmainauxtrue
-				\fi
-			\fi
-		\else
-			% NO-OP. We won't read the main aux file anyway.
-			\def\tikzexternalauxlock at setlock##1{}%
-		\fi
-	\fi
+    \if4\tikzexternal at opmode
+        % mode=convert with system call
+        \ifpgfexternalreadmainaux
+            % ohoh. This case needs care because the main.aux might
+            % not be ready at this time!
+            % check.
+            %
+            \edef\pgf at tempa{\expandafter\string\csname\tikzexternal at realjob\endcsname}%
+            \edef\pgf at tempb{\expandafter\string\csname\jobname\endcsname}%
+            \ifx\pgf at tempa\pgf at tempb
+                % we are *not* externalizing. Set lock into its
+                % initial "unlocked" state.
+                \tikzexternalauxlock at setlock{0}%
+            \else
+                % we are externalizing. Query the lock's value:
+                \tikzexternalauxlock at getlockvalue
+                \if1\tikzexternallocked
+                    \pgfexternalreadmainauxfalse
+                    % the main .aux file won't be read right now.
+                \else
+                    \pgfexternalreadmainauxtrue
+                \fi
+            \fi
+        \else
+            % NO-OP. We won't read the main aux file anyway.
+            \def\tikzexternalauxlock at setlock##1{}%
+        \fi
+    \fi
 }
 % defines \tikzexternallocked to be either 0 or 1, depending on the
 % lock file.
 \def\tikzexternalauxlock at getlockvalue{%
-	\openin\r at pgf@reada=\tikzexternal at realjob.auxlock
-	\ifeof\r at pgf@reada
-		% no lock file. Unlock.
-		\def\tikzexternallocked{0}%
-	\else
-		% read first line...
-		\read\r at pgf@reada to\pgf at tempa
-		% ... and execute it.
-		\pgf at tempa
-		% it should contain a definition of \tikzexternallocked. If
-		% not, lock it anyway.
-		\pgfutil at ifundefined
-			{tikzexternallocked}
-			{\def\tikzexternallocked{1}}%
-			{}%
-	\fi
-	\closein\r at pgf@reada
+    \openin\r at pgf@reada=\tikzexternal at realjob.auxlock
+    \ifeof\r at pgf@reada
+        % no lock file. Unlock.
+        \def\tikzexternallocked{0}%
+    \else
+        % read first line...
+        \read\r at pgf@reada to\pgf at tempa
+        % ... and execute it.
+        \pgf at tempa
+        % it should contain a definition of \tikzexternallocked. If
+        % not, lock it anyway.
+        \pgfutil at ifundefined
+            {tikzexternallocked}
+            {\def\tikzexternallocked{1}}%
+            {}%
+    \fi
+    \closein\r at pgf@reada
 }%
 \def\tikzexternalauxlock at setlock#1{%
-	\immediate\openout\w at pgf@writea=\tikzexternal at realjob.auxlock
-	\immediate\write\w at pgf@writea{\noexpand\def\noexpand\tikzexternallocked{#1}}%
-	\immediate\closeout\w at pgf@writea
+    \immediate\openout\w at pgf@writea=\tikzexternal at realjob.auxlock
+    \immediate\write\w at pgf@writea{\noexpand\def\noexpand\tikzexternallocked{#1}}%
+    \immediate\closeout\w at pgf@writea
 }
 
 
 % this is a hook into pgfcoreexternal.code.tex:
 \def\pgf at external@grab at refundefinedtrue@code{%
-	\gdef\noexpand\tikzexternal at systemcall@reschedule at to@end at document{1}%
+    \gdef\noexpand\tikzexternal at systemcall@reschedule at to@end at document{1}%
 }%
 
 % Expands to the default image extension (it is set by
@@ -510,54 +510,54 @@
 
 % can be used to (temporarily) disable the externalization.
 \def\tikzexternaldisable{%
-	\let\tikz=\tikzexternal at origtikz
-	\tikzexternal at TEXDIALECT@restore at picture
-	\pgfutil at ifundefined{tikzexternal at orig@tikzfadingfrompicture}
-	{}% NOP
-	{%
-		\let\tikzfadingfrompicture=\tikzexternal at orig@tikzfadingfrompicture
-		\let\endtikzfadingfrompicture=\tikzexternal at orig@endtikzfadingfrompicture
-		\let\tikzfading=\tikzexternal at orig@tikzfading
-	}%
-	\iftikzexternal at optimize
-		\ifpgf at external@grabshipout
-			\tikzexternal at optimize@RESTORE
-		\fi
-	\fi
+    \let\tikz=\tikzexternal at origtikz
+    \tikzexternal at TEXDIALECT@restore at picture
+    \pgfutil at ifundefined{tikzexternal at orig@tikzfadingfrompicture}
+    {}% NOP
+    {%
+        \let\tikzfadingfrompicture=\tikzexternal at orig@tikzfadingfrompicture
+        \let\endtikzfadingfrompicture=\tikzexternal at orig@endtikzfadingfrompicture
+        \let\tikzfading=\tikzexternal at orig@tikzfading
+    }%
+    \iftikzexternal at optimize
+        \ifpgf at external@grabshipout
+            \tikzexternal at optimize@RESTORE
+        \fi
+    \fi
 }%
 % re-enables externalization after a \tikzexternalizedisable.
 \def\tikzexternalenable{%
-	\if\tikzexternalize at hasbeencalled1%
-		\let\tikz=\tikzexternal at tikz@replacement
-		\tikzexternal at TEXDIALECT@installreplacement at picture
-		\pgfutil at ifundefined{tikzfadingfrompicture}%
-		{}% no special handling for 'fading lib'
-		{%
-			% oh, ok -- patch fading lib!
-			\pgfutil at ifundefined{tikzexternal at orig@tikzfadingfrompicture}{%
-				\let\tikzexternal at orig@tikzfadingfrompicture=\tikzfadingfrompicture
-				\let\tikzexternal at orig@endtikzfadingfrompicture=\endtikzfadingfrompicture
-				\let\tikzexternal at orig@tikzfading=\tikzfading
-			}{}%
-			\def\tikzfadingfrompicture{%
-				\begingroup
-				\tikzexternaldisable
-				\tikzexternal at orig@tikzfadingfrompicture}%
-			\def\endtikzfadingfrompicture{%
-				\tikzexternal at orig@endtikzfadingfrompicture
-				\endgroup}%
-			\def\tikzfading[##1]{%
-				\begingroup
-				\tikzexternaldisable
-				\tikzexternal at orig@tikzfading[##1]%
-				\endgroup}%
-		}%
-		\iftikzexternal at optimize
-			\ifpgf at external@grabshipout
-				\tikzexternal at optimize@REPLACE
-			\fi
-		\fi
-	\fi
+    \if\tikzexternalize at hasbeencalled1%
+        \let\tikz=\tikzexternal at tikz@replacement
+        \tikzexternal at TEXDIALECT@installreplacement at picture
+        \pgfutil at ifundefined{tikzfadingfrompicture}%
+        {}% no special handling for 'fading lib'
+        {%
+            % oh, ok -- patch fading lib!
+            \pgfutil at ifundefined{tikzexternal at orig@tikzfadingfrompicture}{%
+                \let\tikzexternal at orig@tikzfadingfrompicture=\tikzfadingfrompicture
+                \let\tikzexternal at orig@endtikzfadingfrompicture=\endtikzfadingfrompicture
+                \let\tikzexternal at orig@tikzfading=\tikzfading
+            }{}%
+            \def\tikzfadingfrompicture{%
+                \begingroup
+                \tikzexternaldisable
+                \tikzexternal at orig@tikzfadingfrompicture}%
+            \def\endtikzfadingfrompicture{%
+                \tikzexternal at orig@endtikzfadingfrompicture
+                \endgroup}%
+            \def\tikzfading[##1]{%
+                \begingroup
+                \tikzexternaldisable
+                \tikzexternal at orig@tikzfading[##1]%
+                \endgroup}%
+        }%
+        \iftikzexternal at optimize
+            \ifpgf at external@grabshipout
+                \tikzexternal at optimize@REPLACE
+            \fi
+        \fi
+    \fi
 }%
 
 % Sets the filename for the next tikzpicture or \tikz shortcommand.
@@ -572,7 +572,7 @@
 \tikzsetnextfilename{}
 
 
-% These are few TeX dialect-specific commands which need to be overriden when used with
+% These are few TeX dialect-specific commands which need to be overridden when used with
 % something different than plain TeX:
 %
 % 1. this command collects a complete image into a macro, up to (but not including) the
@@ -579,27 +579,27 @@
 %    final TeX-dialect specific end-image command.
 %    This is really difficult for LaTeX because \end{tikzpicture} either involves dirty
 %    catcode-hacks to parse the braces or an ugly loop which loops until it
-%	finds \end followed by {tikzpicture}. 
-% 
+%    finds \end followed by {tikzpicture}.
+%
 % #1: a macro which will be called with the collected environment contents.
 % all following tokens: the environment contents.
 \long\gdef\tikzexternal at TEXDIALECT@collectpicture#1#2\endtikzpicture{#1{#2}}
 %
 % 2. the following commands should expand to the TeX-dialect specific begin and end image command, i.e.
-%	\tikzpicture / \endtikzpicture
-%    or 
-%	\begin{tikzpicture} / \end{tikzpicture}
-%	or
-%	\starttikzpicture / \stoptikzpicture
+%    \tikzpicture / \endtikzpicture
+%    or
+%    \begin{tikzpicture} / \end{tikzpicture}
+%    or
+%    \starttikzpicture / \stoptikzpicture
 \def\tikzexternal at TEXDIALECT@begpicture{\tikzpicture}
 \def\tikzexternal at TEXDIALECT@endpicture{\endtikzpicture}%
 %
 % 3. This installs the replacement macros:
 \def\tikzexternal at TEXDIALECT@installreplacement at picture{%
-	\let\tikzpicture=\tikzexternal at tikzpicture@replacement
+    \let\tikzpicture=\tikzexternal at tikzpicture@replacement
 }%
 \def\tikzexternal at TEXDIALECT@restore at picture{%
-	\let\tikzpicture=\tikzexternal at origpicture
+    \let\tikzpicture=\tikzexternal at origpicture
 }%
 
 
@@ -617,77 +617,77 @@
 % - externalize mode (i.e. jobname != real job name). Then, it will
 %   externalize the picture selected by 'jobname' (and only this picture).
 \def\tikzexternal at tikzpicture@replacement{%
-	\leavevmode
-	\global\tikzexternal at file@isuptodatetrue% may be set to false during checks.
-	\tikzexternal at getnextfilename\tikzexternal at curfilename
-	\ifx\tikzexternal at curfilename\pgfutil at empty
-		\ifpgf at external@grabshipout
-			% This picture won't be externalized.
-			% But maybe we can optimize it away:
-			\iftikzexternal at optimize
-				% -> it won't be shipped out anyway, so save typesetting time!
-				\let\tikzexternal at next=\tikzexternal at skipfigure
-			\else
-				% include this graphics into the output (even if
-				% it will be discarded anyway).
-				\let\tikzexternal at next=\tikzexternal at normalpicture@nographics
-			\fi
-		\else
-			\let\tikzexternal at next=\tikzexternal at normalpicture@nographics
-		\fi
-	\else
-		\ifpgf at external@grabshipout
-			\tikzifexternaljobnamematches\tikzexternal at curfilename{%
-				% ok, this here IS the picture for which
-				% pdflatex --jobname <my name>
-				% has been invoked.
-				\let\tikzexternal at next=\tikzexternal at externalizefig
-			}{%
-				\iftikzexternal at optimize
-					% No, another picture should be exported. Simply skip this one
-					% -> it won't be shipped out anyway, so save typesetting time!
-					\let\tikzexternal at next=\tikzexternal at skipfigure
-				\else
-					% include this graphics into the output (even it
-					% it will be discarded anyway).
-					\let\tikzexternal at next=\tikzexternal at normalpicture@nographics
-				\fi
-			}%
-		\else
-			\ifcase\tikzexternal at opmode\relax
-				% 'mode=only graphics'
-				\let\tikzexternal at next=\tikzexternal at forcegraphics
-			\or
-				% 'mode=no graphics'
-				\let\tikzexternal at next=\tikzexternal at normalpicture@nographics
-			\or
-				% 'mode=graphics if exists'
-				\let\tikzexternal at next=\tikzexternal at externalizefig
-			\or
-				% 'mode=list only'
-				\let\tikzexternal at next=\tikzexternal at listmodepicture
-			\or
-				% 'mode=convert with system call'
-				\let\tikzexternal at next=\tikzexternal at externalizefig@systemcall
-			\or
-				% 'mode=list and make'
-				\let\tikzexternal at next=\tikzexternal at list@and at makefile@mode at picture
-			\fi
-		\fi
-	\fi
-	\tikzexternal at next
+    \leavevmode
+    \global\tikzexternal at file@isuptodatetrue% may be set to false during checks.
+    \tikzexternal at getnextfilename\tikzexternal at curfilename
+    \ifx\tikzexternal at curfilename\pgfutil at empty
+        \ifpgf at external@grabshipout
+            % This picture won't be externalized.
+            % But maybe we can optimize it away:
+            \iftikzexternal at optimize
+                % -> it won't be shipped out anyway, so save typesetting time!
+                \let\tikzexternal at next=\tikzexternal at skipfigure
+            \else
+                % include this graphics into the output (even if
+                % it will be discarded anyway).
+                \let\tikzexternal at next=\tikzexternal at normalpicture@nographics
+            \fi
+        \else
+            \let\tikzexternal at next=\tikzexternal at normalpicture@nographics
+        \fi
+    \else
+        \ifpgf at external@grabshipout
+            \tikzifexternaljobnamematches\tikzexternal at curfilename{%
+                % ok, this here IS the picture for which
+                % pdflatex --jobname <my name>
+                % has been invoked.
+                \let\tikzexternal at next=\tikzexternal at externalizefig
+            }{%
+                \iftikzexternal at optimize
+                    % No, another picture should be exported. Simply skip this one
+                    % -> it won't be shipped out anyway, so save typesetting time!
+                    \let\tikzexternal at next=\tikzexternal at skipfigure
+                \else
+                    % include this graphics into the output (even it
+                    % it will be discarded anyway).
+                    \let\tikzexternal at next=\tikzexternal at normalpicture@nographics
+                \fi
+            }%
+        \else
+            \ifcase\tikzexternal at opmode\relax
+                % 'mode=only graphics'
+                \let\tikzexternal at next=\tikzexternal at forcegraphics
+            \or
+                % 'mode=no graphics'
+                \let\tikzexternal at next=\tikzexternal at normalpicture@nographics
+            \or
+                % 'mode=graphics if exists'
+                \let\tikzexternal at next=\tikzexternal at externalizefig
+            \or
+                % 'mode=list only'
+                \let\tikzexternal at next=\tikzexternal at listmodepicture
+            \or
+                % 'mode=convert with system call'
+                \let\tikzexternal at next=\tikzexternal at externalizefig@systemcall
+            \or
+                % 'mode=list and make'
+                \let\tikzexternal at next=\tikzexternal at list@and at makefile@mode at picture
+            \fi
+        \fi
+    \fi
+    \tikzexternal at next
 }%
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Replacement for \tikz short command:
 \def\tikzexternal at tikz@replacement{%
-	\pgfutil at ifnextchar[{\tikzexternal at tikz@replacement at opt}{\tikzexternal at tikz@replacement at opt[]}%
+    \pgfutil at ifnextchar[{\tikzexternal at tikz@replacement at opt}{\tikzexternal at tikz@replacement at opt[]}%
 }%
 \def\tikzexternal at tikz@replacement at opt[#1]{%
-	\pgfutil at ifnextchar\bgroup{\tikzexternal at tikz@replacement at opt@{#1}}{\tikzexternal at tikz@replacement at opt@@{#1}}%
+    \pgfutil at ifnextchar\bgroup{\tikzexternal at tikz@replacement at opt@{#1}}{\tikzexternal at tikz@replacement at opt@@{#1}}%
 }
 \long\def\tikzexternal at tikz@replacement at opt@#1#2{%
-	\tikzexternal at tikz@replacement at opt@process{#1}{#2}%
+    \tikzexternal at tikz@replacement at opt@process{#1}{#2}%
 }%
 \def\tikzexternal at tikz@replacement at opt@@#1{%
   \def\tikz at next{\tikzexternal at tikz@replacement at collectnormalsemicolon{#1}}%
@@ -696,41 +696,41 @@
   \fi%
   \tikz at next}
 \long\def\tikzexternal at tikz@replacement at collectnormalsemicolon#1#2;{%
-	\tikzexternal at tikz@replacement at opt@process{#1}{#2;}%
+    \tikzexternal at tikz@replacement at opt@process{#1}{#2;}%
 }%
 {
   \catcode`\;=\active
   \long\gdef\tikzexternal at tikz@replacement at collectactivesemicolon#1#2;{%
-	\tikzexternal at tikz@replacement at opt@process{#1}{#2;}%
+    \tikzexternal at tikz@replacement at opt@process{#1}{#2;}%
   }
 }
 \long\def\tikzexternal at tikz@replacement at opt@process#1#2{%
-	\begingroup
-	\t at tikzexternal@tmpa=\expandafter{\tikzexternal at TEXDIALECT@begpicture[#1]#2}%
-	\t at tikzexternal@tmpb=\expandafter{\tikzexternal at TEXDIALECT@endpicture}%
-	\xdef\pgf at tempa{\the\t at tikzexternal@tmpa\the\t at tikzexternal@tmpb}%
-	\endgroup
-	\pgf at tempa
+    \begingroup
+    \t at tikzexternal@tmpa=\expandafter{\tikzexternal at TEXDIALECT@begpicture[#1]#2}%
+    \t at tikzexternal@tmpb=\expandafter{\tikzexternal at TEXDIALECT@endpicture}%
+    \xdef\pgf at tempa{\the\t at tikzexternal@tmpa\the\t at tikzexternal@tmpb}%
+    \endgroup
+    \pgf at tempa
 }
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 \def\tikzexternal at getnextfilename@advancecount{%
-	\begingroup
-	\c at pgf@counta=\csname c at tikzext@no@\tikzexternal at figurename\endcsname\relax
-	\advance\c at pgf@counta by1 
-	\expandafter\xdef\csname c at tikzext@no@\tikzexternal at figurename\endcsname{\the\c at pgf@counta}%
-	\endgroup
+    \begingroup
+    \c at pgf@counta=\csname c at tikzext@no@\tikzexternal at figurename\endcsname\relax
+    \advance\c at pgf@counta by1
+    \expandafter\xdef\csname c at tikzext@no@\tikzexternal at figurename\endcsname{\the\c at pgf@counta}%
+    \endgroup
 }%
 
 % Returns the file name which will be used for the next tikzpicture (based on the currently available information only, of course).
 \def\tikzexternalgetnextfilename#1{%
-	\begingroup
-	\let\tikzexternal at getnextfilename@advancecount\relax% NOP
-	\let\tikzexternal at getnextfilename@resetglobals=\relax% NOP
-	\def\tikzexternal at protocol@to at file##1{}% NOP
-	\tikzexternal at getnextfilename#1%
-	\pgfmath at smuggleone#1%
-	\endgroup
+    \begingroup
+    \let\tikzexternal at getnextfilename@advancecount\relax% NOP
+    \let\tikzexternal at getnextfilename@resetglobals=\relax% NOP
+    \def\tikzexternal at protocol@to at file##1{}% NOP
+    \tikzexternal at getnextfilename#1%
+    \pgfmath at smuggleone#1%
+    \endgroup
 }%
 
 % Returns the file name of the current picture.
@@ -740,13 +740,13 @@
 % #1 the macro which will contain the file name.
 % @see \tikzexternalgetnextfilename
 \def\tikzexternalgetcurrentfilename#1{%
-	\ifx\tikzexternal at curfilename\relax
-		% we are outside of a picture.
-		\let#1=\pgfutil at empty
-	\else
-		% we are inside of a picture.
-		\let#1=\tikzexternal at curfilename
-	\fi
+    \ifx\tikzexternal at curfilename\relax
+        % we are outside of a picture.
+        \let#1=\pgfutil at empty
+    \else
+        % we are inside of a picture.
+        \let#1=\tikzexternal at curfilename
+    \fi
 }
 
 % Fills #1 with a filename for the current picture.
@@ -762,136 +762,136 @@
 % Please note that both, \tikzsetnextfilename and \tikzexternalexportnextfalse
 % affect only ONE picture. They will be reset afterwards.
 \def\tikzexternal at getnextfilename#1{%
-	\let#1=\pgfutil at empty
-	% determine next file name:
-	\iftikzexternal at export@enabled
-		\iftikzexternalexportnext
-			\begingroup
-			\t at tikzexternal@tmpa=\expandafter{\tikzexternal at filenameprefix}%
-			\ifx\tikzexternal at nextfile\pgfutil at empty
-				\iftikzexternal at onlynamed
-					\xdef\pgf at tempa{}%
-				\else
-					\pgfkeysgetvalue{/tikz/external/figure name}\tikzexternal at figurename
-					\pgfutil at ifundefined{c at tikzext@no@\tikzexternal at figurename}{%
-						% initialise on first usage:
-						\expandafter\gdef\csname c at tikzext@no@\tikzexternal at figurename\endcsname{0}%
-					}{}%
-					\t at tikzexternal@tmpb=\expandafter{\tikzexternal at figurename}%
-					\xdef\pgf at tempa{\the\t at tikzexternal@tmpa\the\t at tikzexternal@tmpb\csname c at tikzext@no@\tikzexternal at figurename\endcsname}%
-					% advance the counter for 'figure name':
-					\tikzexternal at getnextfilename@advancecount
-				\fi
-			\else
-				\t at tikzexternal@tmpb=\expandafter{\tikzexternal at nextfile}%
-				\xdef\pgf at tempa{\the\t at tikzexternal@tmpa\the\t at tikzexternal@tmpb}%
-			\fi
-			\endgroup
-			\let#1=\pgf at tempa
-		\fi
-	\fi
-	% 
-	\tikzexternal at getnextfilename@resetglobals%
-	%
-	\tikzexternal at protocol@to at file#1%
+    \let#1=\pgfutil at empty
+    % determine next file name:
+    \iftikzexternal at export@enabled
+        \iftikzexternalexportnext
+            \begingroup
+            \t at tikzexternal@tmpa=\expandafter{\tikzexternal at filenameprefix}%
+            \ifx\tikzexternal at nextfile\pgfutil at empty
+                \iftikzexternal at onlynamed
+                    \xdef\pgf at tempa{}%
+                \else
+                    \pgfkeysgetvalue{/tikz/external/figure name}\tikzexternal at figurename
+                    \pgfutil at ifundefined{c at tikzext@no@\tikzexternal at figurename}{%
+                        % initialise on first usage:
+                        \expandafter\gdef\csname c at tikzext@no@\tikzexternal at figurename\endcsname{0}%
+                    }{}%
+                    \t at tikzexternal@tmpb=\expandafter{\tikzexternal at figurename}%
+                    \xdef\pgf at tempa{\the\t at tikzexternal@tmpa\the\t at tikzexternal@tmpb\csname c at tikzext@no@\tikzexternal at figurename\endcsname}%
+                    % advance the counter for 'figure name':
+                    \tikzexternal at getnextfilename@advancecount
+                \fi
+            \else
+                \t at tikzexternal@tmpb=\expandafter{\tikzexternal at nextfile}%
+                \xdef\pgf at tempa{\the\t at tikzexternal@tmpa\the\t at tikzexternal@tmpb}%
+            \fi
+            \endgroup
+            \let#1=\pgf at tempa
+        \fi
+    \fi
+    %
+    \tikzexternal at getnextfilename@resetglobals%
+    %
+    \tikzexternal at protocol@to at file#1%
 }%
 
 \def\tikzexternal at getnextfilename@resetglobals{%
-	% Reset global flags:
-	\global\let\tikzexternal at nextfile=\pgfutil at empty
-	\global\tikzexternalexportnexttrue
+    % Reset global flags:
+    \global\let\tikzexternal at nextfile=\pgfutil at empty
+    \global\tikzexternalexportnexttrue
 }%
 
 % #1: the image file name which should be protocolled. (can be a
 % macro)
 \def\tikzexternal at protocol@to at file#1{%
-	\ifpgf at external@grabshipout%
-	\else
-		\iftikzexternal at genfigurelist
-			\edef\tikzexternal at temp{#1}%
-			\ifx\tikzexternal at temp\pgfutil at empty
-			\else
-				\pgfutil at ifundefined{tikzexternal at listmode@openedfile}{%
-					\message{Opening '\tikzexternal at realjob.figlist' for writing.}%
-					\begingroup
-						\globaldefs=1
-						% this gets round '\outer\newwrite' in plain TeX:
-						\csname newwrite\endcsname\tikzexternal at outfile
-					\endgroup
-					\immediate\openout\tikzexternal at outfile=\tikzexternal at realjob.figlist\relax
-					\gdef\tikzexternal at listmode@openedfile{1}%
-					\if\tikzexternal at opmode5% mode='list and make'
-						\tikzexternal at list@and at make@prepare
-					\fi
-				}{}%
-				\iftikzexternal at verboseio
-					\pgf at typeout{Writing '#1' to '\tikzexternal at realjob.figlist'.}%
-				\fi
-				\immediate\write\tikzexternal at outfile{#1}%
-				\if\tikzexternal at opmode5% mode='list and make'
-					\tikzexternal at list@and at make@gentarget{#1}%
-				\fi
-			\fi
-		\fi
-	\fi
+    \ifpgf at external@grabshipout%
+    \else
+        \iftikzexternal at genfigurelist
+            \edef\tikzexternal at temp{#1}%
+            \ifx\tikzexternal at temp\pgfutil at empty
+            \else
+                \pgfutil at ifundefined{tikzexternal at listmode@openedfile}{%
+                    \message{Opening '\tikzexternal at realjob.figlist' for writing.}%
+                    \begingroup
+                        \globaldefs=1
+                        % this gets round '\outer\newwrite' in plain TeX:
+                        \csname newwrite\endcsname\tikzexternal at outfile
+                    \endgroup
+                    \immediate\openout\tikzexternal at outfile=\tikzexternal at realjob.figlist\relax
+                    \gdef\tikzexternal at listmode@openedfile{1}%
+                    \if\tikzexternal at opmode5% mode='list and make'
+                        \tikzexternal at list@and at make@prepare
+                    \fi
+                }{}%
+                \iftikzexternal at verboseio
+                    \pgf at typeout{Writing '#1' to '\tikzexternal at realjob.figlist'.}%
+                \fi
+                \immediate\write\tikzexternal at outfile{#1}%
+                \if\tikzexternal at opmode5% mode='list and make'
+                    \tikzexternal at list@and at make@gentarget{#1}%
+                \fi
+            \fi
+        \fi
+    \fi
 }%
 
 \def\tikzexternal at list@and at make@gentarget#1{%
-	\tikzexternal at assemble@systemcall{#1}{\pgf at tempa}%
-	\def\tikzexternal at tempb{\pgfutilstrreplace{^^J}{^^J\tikzexternal at TABchar}}%
-	\expandafter\tikzexternal at tempb\expandafter{\pgf at tempa}%
-	\let\pgf at tempa=\pgfretval
-	\iftikzexternal at verboseio
-		\pgf at typeout{Writing '#1' to '\tikzexternal at realjob.makefile'.}%
-	\fi
-	\global\tikzexternal at file@isuptodatetrue% only check for force remake:
-	\tikzexternal at checkforceremake%
-	\immediate\write\tikzexternal at outmakefile{#1\tikzexternalimgextension: \iftikzexternal at file@isuptodate\else FORCEREMAKE\fi}%
-	\immediate\write\tikzexternal at outmakefile{\tikzexternal at TABchar\pgf at tempa}%
-	\immediate\write\tikzexternal at outmakefile{}%
+    \tikzexternal at assemble@systemcall{#1}{\pgf at tempa}%
+    \def\tikzexternal at tempb{\pgfutilstrreplace{^^J}{^^J\tikzexternal at TABchar}}%
+    \expandafter\tikzexternal at tempb\expandafter{\pgf at tempa}%
+    \let\pgf at tempa=\pgfretval
+    \iftikzexternal at verboseio
+        \pgf at typeout{Writing '#1' to '\tikzexternal at realjob.makefile'.}%
+    \fi
+    \global\tikzexternal at file@isuptodatetrue% only check for force remake:
+    \tikzexternal at checkforceremake%
+    \immediate\write\tikzexternal at outmakefile{#1\tikzexternalimgextension: \iftikzexternal at file@isuptodate\else FORCEREMAKE\fi}%
+    \immediate\write\tikzexternal at outmakefile{\tikzexternal at TABchar\pgf at tempa}%
+    \immediate\write\tikzexternal at outmakefile{}%
 }
 
 \def\tikzexternal at list@and at make@prepare{%
-	\iftikzexternal at verboseio
-		\pgf at typeout{Opening '\tikzexternal at realjob.makefile' for writing.}%
-	\fi
-	\begingroup
-		% this makes \tikzexternal at outmakefile global:
-		\globaldefs=1
-		% this gets round '\outer\newwrite' in plain TeX:
-		\csname newwrite\endcsname\tikzexternal at outmakefile
-	\endgroup
-	\immediate\openout\tikzexternal at outmakefile=\tikzexternal at realjob.makefile\relax
-	\immediate\write\tikzexternal at outmakefile{ALL_FIGURE_NAMES=\tikzexternal at DOLLARchar(shell cat \tikzexternal at realjob.figlist)}%
-	\immediate\write\tikzexternal at outmakefile{ALL_FIGURES=\tikzexternal at DOLLARchar(ALL_FIGURE_NAMES:\tikzexternal at PERCENTchar=\tikzexternal at PERCENTchar\tikzexternalimgextension)}%
-	\immediate\write\tikzexternal at outmakefile{}%
-	\immediate\write\tikzexternal at outmakefile{allimages: \tikzexternal at DOLLARchar(ALL_FIGURES)}%
-	\immediate\write\tikzexternal at outmakefile{\tikzexternal at TABchar @echo All images exist now. Use make -B to re-generate them.}%
-	\immediate\write\tikzexternal at outmakefile{}%
-	\immediate\write\tikzexternal at outmakefile{FORCEREMAKE:}%
-	\immediate\write\tikzexternal at outmakefile{}%
-	%
-	% support for .dep files and auto-dependencies:
-	\immediate\write\tikzexternal at outmakefile{include $(ALL_FIGURE_NAMES:\tikzexternal at PERCENTchar=\tikzexternal at PERCENTchar.\tikzexternaldepext)}%
-	\immediate\write\tikzexternal at outmakefile{}%
-	\tikzexternalmakefiledefaultdeprule
-	\immediate\write\tikzexternal at outmakefile{}%
-	\tikzexternal at outmakefile@pendingcommands
-	\pgfutil at ifundefined{AtEndDocument}{}{%
-		\AtEndDocument{\pgf at typeout{===== mode=`list and make': Use 'make -f \tikzexternal at realjob.makefile' to generate all images. Then, re-run (pdf)latex \tikzexternal at realjob. =====}}%
-	}%
+    \iftikzexternal at verboseio
+        \pgf at typeout{Opening '\tikzexternal at realjob.makefile' for writing.}%
+    \fi
+    \begingroup
+        % this makes \tikzexternal at outmakefile global:
+        \globaldefs=1
+        % this gets round '\outer\newwrite' in plain TeX:
+        \csname newwrite\endcsname\tikzexternal at outmakefile
+    \endgroup
+    \immediate\openout\tikzexternal at outmakefile=\tikzexternal at realjob.makefile\relax
+    \immediate\write\tikzexternal at outmakefile{ALL_FIGURE_NAMES=\tikzexternal at DOLLARchar(shell cat \tikzexternal at realjob.figlist)}%
+    \immediate\write\tikzexternal at outmakefile{ALL_FIGURES=\tikzexternal at DOLLARchar(ALL_FIGURE_NAMES:\tikzexternal at PERCENTchar=\tikzexternal at PERCENTchar\tikzexternalimgextension)}%
+    \immediate\write\tikzexternal at outmakefile{}%
+    \immediate\write\tikzexternal at outmakefile{allimages: \tikzexternal at DOLLARchar(ALL_FIGURES)}%
+    \immediate\write\tikzexternal at outmakefile{\tikzexternal at TABchar @echo All images exist now. Use make -B to re-generate them.}%
+    \immediate\write\tikzexternal at outmakefile{}%
+    \immediate\write\tikzexternal at outmakefile{FORCEREMAKE:}%
+    \immediate\write\tikzexternal at outmakefile{}%
+    %
+    % support for .dep files and auto-dependencies:
+    \immediate\write\tikzexternal at outmakefile{include $(ALL_FIGURE_NAMES:\tikzexternal at PERCENTchar=\tikzexternal at PERCENTchar.\tikzexternaldepext)}%
+    \immediate\write\tikzexternal at outmakefile{}%
+    \tikzexternalmakefiledefaultdeprule
+    \immediate\write\tikzexternal at outmakefile{}%
+    \tikzexternal at outmakefile@pendingcommands
+    \pgfutil at ifundefined{AtEndDocument}{}{%
+        \AtEndDocument{\pgf at typeout{===== mode=`list and make': Use 'make -f \tikzexternal at realjob.makefile' to generate all images. Then, re-run (pdf)latex \tikzexternal at realjob. =====}}%
+    }%
 }%
 \def\tikzexternaldepext{dep}
 
 \def\tikzexternalmakefiledefaultdeprule{%
-	\immediate\write\tikzexternal at outmakefile{\tikzexternal at PERCENTchar.\tikzexternaldepext:}%
-	\immediate\write\tikzexternal at outmakefile{\tikzexternal at TABchar mkdir -p \tikzexternal at normal@dq $(dir $@)\tikzexternal at normal@dq}%
-	\immediate\write\tikzexternal at outmakefile{\tikzexternal at TABchar touch \tikzexternal at normal@dq $@\tikzexternal at normal@dq\space \tikzexternal at HASHchar\space will be filled later.}%
+    \immediate\write\tikzexternal at outmakefile{\tikzexternal at PERCENTchar.\tikzexternaldepext:}%
+    \immediate\write\tikzexternal at outmakefile{\tikzexternal at TABchar mkdir -p \tikzexternal at normal@dq $(dir $@)\tikzexternal at normal@dq}%
+    \immediate\write\tikzexternal at outmakefile{\tikzexternal at TABchar touch \tikzexternal at normal@dq $@\tikzexternal at normal@dq\space \tikzexternal at HASHchar\space will be filled later.}%
 }%
 
 % Invokes '#1' if a makefile is to be written and '#2' if not.
 \def\tikzexternalifwritesmakefile#1#2{%
-	\if5\tikzexternal at opmode #1\else #2\fi
+    \if5\tikzexternal at opmode #1\else #2\fi
 }%
 \def\tikzexternal at outmakefile@pendingcommands{}%
 
@@ -898,16 +898,16 @@
 % Will write something to the make file. If the makefile is not yet
 % opened, #1 will be written as soon as it *is* opened.
 \def\tikzexternalwritetomakefile#1{%
-	\if\tikzexternal at opmode5% mode='list and make'
-		\pgfutil at ifundefined{tikzexternal at outmakefile}{%
-			\expandafter\gdef\expandafter\tikzexternal at outmakefile@pendingcommands\expandafter{%
-				\tikzexternal at outmakefile@pendingcommands
-				\immediate\write\tikzexternal at outmakefile{#1}%
-			}%
-		}{%
-			\immediate\write\tikzexternal at outmakefile{#1}%
-		}%
-	\fi
+    \if\tikzexternal at opmode5% mode='list and make'
+        \pgfutil at ifundefined{tikzexternal at outmakefile}{%
+            \expandafter\gdef\expandafter\tikzexternal at outmakefile@pendingcommands\expandafter{%
+                \tikzexternal at outmakefile@pendingcommands
+                \immediate\write\tikzexternal at outmakefile{#1}%
+            }%
+        }{%
+            \immediate\write\tikzexternal at outmakefile{#1}%
+        }%
+    \fi
 }%
 
 \def\tikzexternal at dep@file at name{}
@@ -919,23 +919,23 @@
 % external graphics for which we are adding a dependency.
 % #2: a file name. If this file gets changed, #1 shall be remade.
 %
-% This command will be actived as soons as \tikzexternalize has been
+% This command will be activated as soon as \tikzexternalize has been
 % called.
 \def\tikzexternalfiledependsonfile at ACTIVE#1#2{%
-	\begingroup
-	\def\tikzpicturedependsonfile at name{#1}%
-	\ifx\tikzpicturedependsonfile at name\pgfutil at empty
-		% could be auto-generated: empty file name means "picture
-		% won't be externalized". Skip it.
-	\else
-		% if we encounter any dependencies while we externalize a
-		% picture, we have to write these things into the image's .dep
-		% file.
-		\tikzifexternalizingcurrent
-			{\tikzexternalfiledependsonfile at append@to at dep@file{#1}{#2}}%
-			{\tikzexternalfiledependsonfile at append@to at makefile{#1}{#2}}%
-	\fi
-	\endgroup
+    \begingroup
+    \def\tikzpicturedependsonfile at name{#1}%
+    \ifx\tikzpicturedependsonfile at name\pgfutil at empty
+        % could be auto-generated: empty file name means "picture
+        % won't be externalized". Skip it.
+    \else
+        % if we encounter any dependencies while we externalize a
+        % picture, we have to write these things into the image's .dep
+        % file.
+        \tikzifexternalizingcurrent
+            {\tikzexternalfiledependsonfile at append@to at dep@file{#1}{#2}}%
+            {\tikzexternalfiledependsonfile at append@to at makefile{#1}{#2}}%
+    \fi
+    \endgroup
 }%
 \def\tikzexternalfiledependsonfile#1#2{}% NO-OP until \tikzexternalize has been called.
 
@@ -949,32 +949,32 @@
 % Consequently, this here has to be called if and only if #1 is about
 % to be externalized.
 \def\tikzexternalfiledependsonfile at append@to at dep@file#1#2{%
-	% write every dependency which is defined *INSIDE* of the current
-	% picture into the .dep file of the current picture:
-	\tikzexternalgetcurrentfilename\tikzpicturedependsonfile at name
-	\edef\tikzpicturedependsonfile at name{\tikzpicturedependsonfile at name.\tikzexternaldepext}%
-	%\edef\tikzpicturedependsonfile at name{#1.\tikzexternaldepext}%
-	\ifx\tikzexternal at dep@file at name\tikzpicturedependsonfile at name
-		% file is open and ready.
-	\else
-		% create new output file.
-		\pgfutil at ifundefined{tikzexternal at dep@file}{%
-			\begingroup
-				% this makes \tikzexternal at dep@file global:
-				\globaldefs=1
-				% this gets round '\outer\newwrite' in plain TeX:
-				\csname newwrite\endcsname\tikzexternal at dep@file
-			\endgroup
-		}{}%
-		\ifx\tikzexternal at dep@file at name\pgfutil at empty
-		\else
-			% it is already open. Close it.
-			\immediate\closeout\tikzexternal at dep@file
-		\fi
-		\global\let\tikzexternal at dep@file at name=\tikzpicturedependsonfile at name
-		\immediate\openout\tikzexternal at dep@file=\tikzexternal at dep@file at name\relax
-	\fi
-	\immediate\write\tikzexternal at dep@file{#1\tikzexternalimgextension: #2}%
+    % write every dependency which is defined *INSIDE* of the current
+    % picture into the .dep file of the current picture:
+    \tikzexternalgetcurrentfilename\tikzpicturedependsonfile at name
+    \edef\tikzpicturedependsonfile at name{\tikzpicturedependsonfile at name.\tikzexternaldepext}%
+    %\edef\tikzpicturedependsonfile at name{#1.\tikzexternaldepext}%
+    \ifx\tikzexternal at dep@file at name\tikzpicturedependsonfile at name
+        % file is open and ready.
+    \else
+        % create new output file.
+        \pgfutil at ifundefined{tikzexternal at dep@file}{%
+            \begingroup
+                % this makes \tikzexternal at dep@file global:
+                \globaldefs=1
+                % this gets round '\outer\newwrite' in plain TeX:
+                \csname newwrite\endcsname\tikzexternal at dep@file
+            \endgroup
+        }{}%
+        \ifx\tikzexternal at dep@file at name\pgfutil at empty
+        \else
+            % it is already open. Close it.
+            \immediate\closeout\tikzexternal at dep@file
+        \fi
+        \global\let\tikzexternal at dep@file at name=\tikzpicturedependsonfile at name
+        \immediate\openout\tikzexternal at dep@file=\tikzexternal at dep@file at name\relax
+    \fi
+    \immediate\write\tikzexternal at dep@file{#1\tikzexternalimgextension: #2}%
 }
 
 % sub-routine of \tikzexternalfiledependsonfile which appends stuff to
@@ -985,8 +985,8 @@
 % the documentation of
 % \tikzexternalfiledependsonfile at append@to at dep@file)
 \def\tikzexternalfiledependsonfile at append@to at makefile#1#2{%
-	\edef\tikzexternal at temp{#1\tikzexternalimgextension: #2}%
-	\expandafter\tikzexternalwritetomakefile\expandafter{\tikzexternal at temp}%
+    \edef\tikzexternal at temp{#1\tikzexternalimgextension: #2}%
+    \expandafter\tikzexternalwritetomakefile\expandafter{\tikzexternal at temp}%
 }
 
 % Adds a dependency for the NEXT picture which is about to be
@@ -996,46 +996,46 @@
 % #1: a file name. If this file gets changed, the tikzpicture's
 % externalized graphics shall be remade.
 %
-% This command will be actived as soons as \tikzexternalize has been
+% This command will be activated as soon as \tikzexternalize has been
 % called.
 \def\tikzpicturedependsonfile at ACTIVE#1{%
-	\begingroup
-	\tikzexternalgetcurrentfilename\tikzpicturedependsonfile at name
-	\ifx\tikzpicturedependsonfile at name\pgfutil at empty
-		\tikzexternalgetnextfilename\tikzpicturedependsonfile at name
-	\fi
-	\expandafter\tikzexternalfiledependsonfile\expandafter{\tikzpicturedependsonfile at name}{#1}%
-	\endgroup
+    \begingroup
+    \tikzexternalgetcurrentfilename\tikzpicturedependsonfile at name
+    \ifx\tikzpicturedependsonfile at name\pgfutil at empty
+        \tikzexternalgetnextfilename\tikzpicturedependsonfile at name
+    \fi
+    \expandafter\tikzexternalfiledependsonfile\expandafter{\tikzpicturedependsonfile at name}{#1}%
+    \endgroup
 }%
 \def\tikzpicturedependsonfile#1{}% NO-OP until \tikzexternalize has been called.
 
 
-% This command is invoked 
+% This command is invoked
 %  if and only if ( (grab mode && --jobname matches) || 'mode=graphics if exists' )
 %
 % It converts the current tikzpicture into an image in grab mode
 % or processes the 'graphics if exist' mode.
 \def\tikzexternal at externalizefig{%
-	\ifpgf at external@grabshipout%
-		% In this case, we already KNOW that the filename matches.
-		\expandafter\tikzexternal at externalizefig@GRAB%
-	\else
-		\expandafter\tikzexternal at externalizefig@mode at graphics@if at exists
-	\fi%
+    \ifpgf at external@grabshipout%
+        % In this case, we already KNOW that the filename matches.
+        \expandafter\tikzexternal at externalizefig@GRAB%
+    \else
+        \expandafter\tikzexternal at externalizefig@mode at graphics@if at exists
+    \fi%
 }
 \def\tikzexternal at externalizefig@mode at graphics@if at exists{%
-	% check if there is already a file.
-	% In that case, use it. If not, typeset the picture normally.
-	\gdef\pgf at filename{}%
-	\xdef\pgf at tempa{\noexpand\pgf at findfile\pgfsys at imagesuffixlist:+{\tikzexternal at curfilename}}%
-	\pgf at tempa
-	\ifx\pgf at filename\pgfutil at empty%
-		% Note: since we have no 'GRAB' mode, we do not have to deal with optimization.
-		% there is no graphics.
-		\expandafter\tikzexternal at normalpicture@nographics
-	\else
-		\expandafter\tikzexternal at forcegraphics
-	\fi
+    % check if there is already a file.
+    % In that case, use it. If not, typeset the picture normally.
+    \gdef\pgf at filename{}%
+    \xdef\pgf at tempa{\noexpand\pgf at findfile\pgfsys at imagesuffixlist:+{\tikzexternal at curfilename}}%
+    \pgf at tempa
+    \ifx\pgf at filename\pgfutil at empty%
+        % Note: since we have no 'GRAB' mode, we do not have to deal with optimization.
+        % there is no graphics.
+        \expandafter\tikzexternal at normalpicture@nographics
+    \else
+        \expandafter\tikzexternal at forcegraphics
+    \fi
 }%
 
 
@@ -1043,108 +1043,108 @@
 % It will be called if GRAB mode is on.
 % See the 'optimize command away' key.
 \def\tikzexternal at optimize@away at cmd#1#2{%
-	\pgfutil at ifnextchar[{%
-		\tikzexternal at optimize@away at cmd@{#1}{#2}%
-	}{%
-		\tikzexternal at optimize@away at cmd@{#1}{#2}[]%
-	}%
+    \pgfutil at ifnextchar[{%
+        \tikzexternal at optimize@away at cmd@{#1}{#2}%
+    }{%
+        \tikzexternal at optimize@away at cmd@{#1}{#2}[]%
+    }%
 }%
 \def\tikzexternal at optimize@away at cmd@#1#2[#3]{%
-	\def\tikz at temp{#2}%
-	\ifx\tikz at temp\pgfutil at empty
-		\def\tikz at temp{\tikzexternal at optimize@away at cmd@auto{#1}{#3}}%
-	\else
-		\ifcase#2\relax
-			\def\tikzexternal at optimize@away at cmd@manual{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1##2{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1##2##3{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1##2##3##4{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5##6{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5##6##7{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5##6##7##8{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}%
-			}%
-		\or
-			\def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5##6##7##8##9{%
-				\tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}%
-			}%
-		\fi
-		\def\tikz at temp{\tikzexternal at optimize@away at cmd@manual}%
-	\fi
-	\tikz at temp
+    \def\tikz at temp{#2}%
+    \ifx\tikz at temp\pgfutil at empty
+        \def\tikz at temp{\tikzexternal at optimize@away at cmd@auto{#1}{#3}}%
+    \else
+        \ifcase#2\relax
+            \def\tikzexternal at optimize@away at cmd@manual{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1##2{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1##2##3{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1##2##3##4{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5##6{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5##6##7{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5##6##7##8{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}}%
+            }%
+        \or
+            \def\tikzexternal at optimize@away at cmd@manual##1##2##3##4##5##6##7##8##9{%
+                \tikzexternal at optimize@away at cmd@@@{#1}{#3}{{##1}{##2}{##3}{##4}{##5}{##6}{##7}{##8}{##9}}%
+            }%
+        \fi
+        \def\tikz at temp{\tikzexternal at optimize@away at cmd@manual}%
+    \fi
+    \tikz at temp
 }%
 \def\tikzexternal at optimize@away at cmd@auto#1#2{%
-	\pgfutil at ifnextchar\bgroup{%
-		\tikzexternal at optimize@away at cmd@auto@{#1}{#2}%
-	}{%
-		\tikzexternal at optimize@away at cmd@auto@{#1}{#2}{<no argument in curly braces>}% give empty argument.
-	}
+    \pgfutil at ifnextchar\bgroup{%
+        \tikzexternal at optimize@away at cmd@auto@{#1}{#2}%
+    }{%
+        \tikzexternal at optimize@away at cmd@auto@{#1}{#2}{<no argument in curly braces>}% give empty argument.
+    }
 }%
 
 \def\tikzexternal at optimize@away at cmd@auto@#1#2#3{%
-	\tikzexternal at optimize@away at cmd@@@{#1}{#2}{{#3}}% <-- provide braces
+    \tikzexternal at optimize@away at cmd@@@{#1}{#2}{{#3}}% <-- provide braces
 }%
 \def\tikzexternal at optimize@away at cmd@@@#1#2#3{%
-	\begingroup
-	\toks0={#1[#2]#3}%
-	\iftikzexternal at verbose@optimize
-		\pgf at typeout{The command '\the\toks0' has been optimized away. Use '/tikz/external/optimize=false' to disable this.}%
-	\fi
-	\endgroup
-	\begingroup
-	\pgfkeysvalueof{/tikz/external/optimize away text/. at cmd}#1\pgfeov%
-	\endgroup
+    \begingroup
+    \toks0={#1[#2]#3}%
+    \iftikzexternal at verbose@optimize
+        \pgf at typeout{The command '\the\toks0' has been optimized away. Use '/tikz/external/optimize=false' to disable this.}%
+    \fi
+    \endgroup
+    \begingroup
+    \pgfkeysvalueof{/tikz/external/optimize away text/. at cmd}#1\pgfeov%
+    \endgroup
 }%
 
 \def\tikzexternal at optimize@away at latex@env#1{%
-	\def\tikzexternal at optimize@away at latex@env@{#1}%
-	\begingroup
-		\def\tikzexternal at laTeX@collect at until@end at tikzpicturetikzpicturestring{#1}%
-		\tikzexternal at TEXDIALECT@collectpicture\tikzexternal at optimize@away at latex@env at close
+    \def\tikzexternal at optimize@away at latex@env@{#1}%
+    \begingroup
+        \def\tikzexternal at laTeX@collect at until@end at tikzpicturetikzpicturestring{#1}%
+        \tikzexternal at TEXDIALECT@collectpicture\tikzexternal at optimize@away at latex@env at close
 }%
 \long\def\tikzexternal at optimize@away at latex@env at close#1{%
-	\iftikzexternal at verbose@optimize
-		\pgf at typeout{The complete contents of \string\begin{tikzexternal at optimize@away at latex@env@} up to the next \end{tikzexternal at optimize@away at latex@env@} has been optimized away because it does not contribute to the exported PDF. Use '/tikz/external/optimize=false' to disable this.}%
-	\fi
-	\endgroup
-	% we still need to invoke \end{<name>} in latex because \begin{<name>}
-	% starts a local group - that must be closed properly. Make sure then \end<name> does nothing:
-	\expandafter\let\csname end\tikzexternal at optimize@away at latex@env@\endcsname=\relax
-	\expandafter\end\expandafter{\tikzexternal at optimize@away at latex@env@}%
+    \iftikzexternal at verbose@optimize
+        \pgf at typeout{The complete contents of \string\begin{tikzexternal at optimize@away at latex@env@} up to the next \end{tikzexternal at optimize@away at latex@env@} has been optimized away because it does not contribute to the exported PDF. Use '/tikz/external/optimize=false' to disable this.}%
+    \fi
+    \endgroup
+    % we still need to invoke \end{<name>} in latex because \begin{<name>}
+    % starts a local group - that must be closed properly. Make sure then \end<name> does nothing:
+    \expandafter\let\csname end\tikzexternal at optimize@away at latex@env@\endcsname=\relax
+    \expandafter\end\expandafter{\tikzexternal at optimize@away at latex@env@}%
 }%
 
 \def\tikzexternal at optimize@REPLACE{%
-	\pgfkeysvalueof{/tikz/external/optimize/install/. at cmd}\pgfeov
+    \pgfkeysvalueof{/tikz/external/optimize/install/. at cmd}\pgfeov
 }%
 
 \def\tikzexternal at optimize@RESTORE{%
-	\pgfkeysvalueof{/tikz/external/optimize/restore/. at cmd}\pgfeov
+    \pgfkeysvalueof{/tikz/external/optimize/restore/. at cmd}\pgfeov
 }%
 
 % Closes one 'tikzpicture' environment. This is only used for LaTeX,
@@ -1151,10 +1151,10 @@
 % because the '\end{tikzpicture}' command would raise an exception otherwise.
 % It does *not* call \endtikzpicture.
 \def\tikzexternal at closeenvironments{%
-	\let\endtikzpicture=\relax
-	\tikzexternal at TEXDIALECT@endpicture
-	\let\endtikzpicture=\tikzexternal at origendpicture
-	\let\tikzexternal at curfilename=\relax
+    \let\endtikzpicture=\relax
+    \tikzexternal at TEXDIALECT@endpicture
+    \let\endtikzpicture=\tikzexternal at origendpicture
+    \let\tikzexternal at curfilename=\relax
 }
 
 % Throws a tikzpicture away - without further notice.
@@ -1163,19 +1163,19 @@
 %
 % See the 'optimize' key to disable this.
 \def\tikzexternal at skipfigure{%
-	\tikzexternal at TEXDIALECT@collectpicture\tikzexternal at skipfigure@@
+    \tikzexternal at TEXDIALECT@collectpicture\tikzexternal at skipfigure@@
 }
 \long\def\tikzexternal at skipfigure@@#1{%
-	\iftikzexternal at verbose@optimize
-		\pgf at typeout{A tikzpicture has been optimized away. Use '/tikz/external/optimize=false' to disable this.}%
-	\fi
-	\tikzexternal at closeenvironments
-	\pgfkeysvalueof{/tikz/external/optimize away text/. at cmd}tikzpicture\pgfeov%
+    \iftikzexternal at verbose@optimize
+        \pgf at typeout{A tikzpicture has been optimized away. Use '/tikz/external/optimize=false' to disable this.}%
+    \fi
+    \tikzexternal at closeenvironments
+    \pgfkeysvalueof{/tikz/external/optimize away text/. at cmd}tikzpicture\pgfeov%
 }
 
 % Processes tikzpicture normally; without any externalization.
 %
-% We need to do further work here to deal with NESTED tikzpicture environments 
+% We need to do further work here to deal with NESTED tikzpicture environments
 % because all of them shall also be typeset normally.
 %
 % Idea:
@@ -1185,126 +1185,126 @@
 %
 % FIXME: could it be possible that nested tikzpictures use other code anyway?
 \def\tikzexternal at normalpicture@nographics{%
-	\tikzexternal at nestedflagfalse
-	\let\tikzpicture=\tikzexternal at normalpicture@begreplace
-	\let\endtikzpicture=\tikzexternal at normalpicture@endreplace
-	\tikzpicture
+    \tikzexternal at nestedflagfalse
+    \let\tikzpicture=\tikzexternal at normalpicture@begreplace
+    \let\endtikzpicture=\tikzexternal at normalpicture@endreplace
+    \tikzpicture
 }
 \def\tikzexternal at normalpicture@begreplace{%
-	\begingroup
-	\tikzexternal at nestedflagtrue
-	\tikzexternal at origpicture
+    \begingroup
+    \tikzexternal at nestedflagtrue
+    \tikzexternal at origpicture
 }
 \def\tikzexternal at normalpicture@endreplace{%
-	\tikzexternal at origendpicture
-	\endgroup
-	\iftikzexternal at nestedflag
-	\else
-		\let\tikzpicture=\tikzexternal at tikzpicture@replacement
-		\let\endtikzpicture=\tikzexternal at origendpicture
-	\fi
+    \tikzexternal at origendpicture
+    \endgroup
+    \iftikzexternal at nestedflag
+    \else
+        \let\tikzpicture=\tikzexternal at tikzpicture@replacement
+        \let\endtikzpicture=\tikzexternal at origendpicture
+    \fi
 }%
 
 % Assumes there is an image on disk and reads it. The tikzpicture is thrown away.
 \def\tikzexternal at forcegraphics{%
-	\tikzexternal at TEXDIALECT@collectpicture\tikzexternal at forcegraphics@@
+    \tikzexternal at TEXDIALECT@collectpicture\tikzexternal at forcegraphics@@
 }
 \long\def\tikzexternal at forcegraphics@@#1{\tikzexternal at forcegraphics@@@}%
 \def\tikzexternal at forcegraphics@@@{%
-	\if5\tikzexternal at opmode
-		\let\tikz at refundefinedtrue@@=\G at refundefinedtrue
-		\gdef\G at refundefinedtrue{%
-			\tikz at refundefinedtrue@@ 
-			\tikzexternal at forceremake@undefined at reference@handler
-		}%
-	\fi
-	\expandafter\pgfincludeexternalgraphics\expandafter{\tikzexternal at curfilename}%
-	\if5\tikzexternal at opmode
-		\global\let\G at refundefinedtrue=\tikz at refundefinedtrue@@
-	\fi
-	\tikzexternal at closeenvironments
+    \if5\tikzexternal at opmode
+        \let\tikz at refundefinedtrue@@=\G at refundefinedtrue
+        \gdef\G at refundefinedtrue{%
+            \tikz at refundefinedtrue@@
+            \tikzexternal at forceremake@undefined at reference@handler
+        }%
+    \fi
+    \expandafter\pgfincludeexternalgraphics\expandafter{\tikzexternal at curfilename}%
+    \if5\tikzexternal at opmode
+        \global\let\G at refundefinedtrue=\tikz at refundefinedtrue@@
+    \fi
+    \tikzexternal at closeenvironments
 }
 
 \def\tikzexternal at forceremake@undefined at reference@handler{%
-	\pgf at typeout{===== 'mode=list and make': encountered undefined reference in current picture. Adding dependency to FORCEREMAKE. Rerun make to update the picture.' ========^^J}%
-	\tikzpicturedependsonfile{FORCEREMAKE}%
+    \pgf at typeout{===== 'mode=list and make': encountered undefined reference in current picture. Adding dependency to FORCEREMAKE. Rerun make to update the picture.' ========^^J}%
+    \tikzpicturedependsonfile{FORCEREMAKE}%
 }%
 
 % Simply replaces the complete picture by some placeholder text.
 % It is used by 'mode=list only' to reduce runtime.
 \def\tikzexternal at listmodepicture{%
-	\tikzexternal at TEXDIALECT@collectpicture\tikzexternal at listmodepicture@@
+    \tikzexternal at TEXDIALECT@collectpicture\tikzexternal at listmodepicture@@
 }
 \long\def\tikzexternal at listmodepicture@@#1{\tikzexternal at listmodepicture@@@}
 \def\tikzexternal at listmodepicture@@@{%
-	\pgfkeysvalueof{/tikz/external/image discarded text}%
-	\tikzexternal at closeenvironments
+    \pgfkeysvalueof{/tikz/external/image discarded text}%
+    \tikzexternal at closeenvironments
 }
 
 % check if there is already a file.
 % In that case, use it. If not, skip it.
 \def\tikzexternal at list@and at makefile@mode at picture{%
-	\tikzexternal at TEXDIALECT@collectpicture\tikzexternal at list@and at makefile@mode at picture@
+    \tikzexternal at TEXDIALECT@collectpicture\tikzexternal at list@and at makefile@mode at picture@
 }%
 \long\def\tikzexternal at list@and at makefile@mode at picture@#1{%
-	%
-	\tikzexternal at check@uptodate at mode{#1}%
-	%
-	\gdef\pgf at filename{}%
-	\xdef\pgf at tempa{\noexpand\pgf at findfile\pgfsys at imagesuffixlist:+{\tikzexternal at curfilename}}%
-	\pgf at tempa
-	\ifx\pgf at filename\pgfutil at empty%
-		% Note: since we have no 'GRAB' mode, we do not have to deal with optimization.
-		% there is no graphics.
-		\expandafter\tikzexternal at listmodepicture@@@
-	\else
-		\expandafter\tikzexternal at forcegraphics@@@
-	\fi
+    %
+    \tikzexternal at check@uptodate at mode{#1}%
+    %
+    \gdef\pgf at filename{}%
+    \xdef\pgf at tempa{\noexpand\pgf at findfile\pgfsys at imagesuffixlist:+{\tikzexternal at curfilename}}%
+    \pgf at tempa
+    \ifx\pgf at filename\pgfutil at empty%
+        % Note: since we have no 'GRAB' mode, we do not have to deal with optimization.
+        % there is no graphics.
+        \expandafter\tikzexternal at listmodepicture@@@
+    \else
+        \expandafter\tikzexternal at forcegraphics@@@
+    \fi
 }%
 
 \def\tikzexternal at externalizefig@before at grab{%
-	\pgfutil at IfUndefined{TP at holdbox}{%
-	}{%
-		% \usepackage[absolute]{textpos}
-		% populates this box -- and would inject unwanted material into our images. Reset it:
-		\global\setbox\TP at holdbox\vbox{}%
-	}%
+    \pgfutil at IfUndefined{TP at holdbox}{%
+    }{%
+        % \usepackage[absolute]{textpos}
+        % populates this box -- and would inject unwanted material into our images. Reset it:
+        \global\setbox\TP at holdbox\vbox{}%
+    }%
 }%
 
 \def\tikzexternal at externalizefig@GRAB{%
-	\ifpgf at external@grabshipout
-		\iftikzexternal at optimize
-			\tikzexternal at optimize@RESTORE
-		\fi
-		\tikzexternal at externalizefig@before at grab
-	\fi
-	\def\tikzpicture{%
-		\def\tikzpicture{% make sure that nested \tikzpicture are processed normally.
-			\begingroup
-			\def\endtikzpicture{%
-				\tikzexternal at origendpicture
-				\endgroup
-			}%
-			\tikzexternal at origpicture
-		}%
-		\pgf at external@grab{\tikzexternal at curfilename}%
-		\tikzexternal at origpicture
-	}%
-	\def\endtikzpicture{%
-		\tikzexternal at origendpicture
-		\pgf at externalend
-		%
-		\tikzexternal at ensure@nonempty at floats
-		%
-		\let\tikzpicture=\tikzexternal at tikzpicture@replacement
-		\let\endtikzpicture=\tikzexternal at origendpicture
-		\iftikzexternal at optimize
-			\ifpgf at external@grabshipout
-				\tikzexternal at optimize@REPLACE
-			\fi
-		\fi
-	}%
-	\tikzpicture
+    \ifpgf at external@grabshipout
+        \iftikzexternal at optimize
+            \tikzexternal at optimize@RESTORE
+        \fi
+        \tikzexternal at externalizefig@before at grab
+    \fi
+    \def\tikzpicture{%
+        \def\tikzpicture{% make sure that nested \tikzpicture are processed normally.
+            \begingroup
+            \def\endtikzpicture{%
+                \tikzexternal at origendpicture
+                \endgroup
+            }%
+            \tikzexternal at origpicture
+        }%
+        \pgf at external@grab{\tikzexternal at curfilename}%
+        \tikzexternal at origpicture
+    }%
+    \def\endtikzpicture{%
+        \tikzexternal at origendpicture
+        \pgf at externalend
+        %
+        \tikzexternal at ensure@nonempty at floats
+        %
+        \let\tikzpicture=\tikzexternal at tikzpicture@replacement
+        \let\endtikzpicture=\tikzexternal at origendpicture
+        \iftikzexternal at optimize
+            \ifpgf at external@grabshipout
+                \tikzexternal at optimize@REPLACE
+            \fi
+        \fi
+    }%
+    \tikzpicture
 }%
 
 % If a sequence of floats containing JUST tikzpictures is
@@ -1320,7 +1320,7 @@
 % see
 % http://tex.stackexchange.com/questions/54625/why-is-fixltx2e-incompatible-with-tikzexternalize
 \def\tikzexternal at ensure@nonempty at floats{%
-	tikzexternal: picture has been externalized. This text is required to avoid empty floats.
+    tikzexternal: picture has been externalized. This text is required to avoid empty floats.
 }%
 
 % 1. Discards the current picture in this document.
@@ -1329,7 +1329,7 @@
 %    process \tikzexternal at externalizefig.
 % 4. Assert that finally an image exists and use it.
 \def\tikzexternal at externalizefig@systemcall{%
-	\tikzexternal at TEXDIALECT@collectpicture\tikzexternal at externalizefig@systemcall@@
+    \tikzexternal at TEXDIALECT@collectpicture\tikzexternal at externalizefig@systemcall@@
 }
 
 {
@@ -1358,10 +1358,10 @@
 |xdef|tikzexternal at normal@backslash{\}%
 }
 {
-\catcode`\^^I=12 
+\catcode`\^^I=12
 \catcode`\$=12
 \catcode`\%=12
-\catcode`\#=12 
+\catcode`\#=12
 \gdef\tikzexternal at HASHchar{#}
 \gdef\tikzexternal at TABchar{^^I}\gdef\tikzexternal at PERCENTchar{%}\xdef\tikzexternal at DOLLARchar{$}}
 
@@ -1372,131 +1372,130 @@
 % #2: the global return value macro
 %
 \def\tikzexternal at assemble@systemcall#1#2{%
-	\begingroup
-		\def\image{#1}%
-		\iftikzexternal at auto@detect at jobname
-			\edef\texsource{\string\def\string\tikzexternalrealjob{\tikzexternal at realjob}\string\input{\tikzexternal at realjob}}%
-		\else
-			\let\texsource=\tikzexternal at realjob
-		\fi
-		\ifnum\the\catcode`\"=13 \tikzexternal at activate@normal at dq\fi
-		\ifnum\the\catcode`\'=13 \tikzexternal at activate@normal at sq\fi
-		\ifnum\the\catcode`\;=13 \tikzexternal at activate@normal at semic\fi
-		\ifnum\the\catcode`\-=13 \tikzexternal at activate@normal at dash\fi
-		\let\\=\tikzexternal at normal@backslash
-		\xdef#2{\pgfkeysvalueof{/tikz/external/system call}}%
-	\endgroup
+    \begingroup
+        \def\image{#1}%
+        \iftikzexternal at auto@detect at jobname
+            \edef\texsource{\string\def\string\tikzexternalrealjob{\tikzexternal at realjob}\string\input{\tikzexternal at realjob}}%
+        \else
+            \let\texsource=\tikzexternal at realjob
+        \fi
+        \ifnum\the\catcode`\"=13 \tikzexternal at activate@normal at dq\fi
+        \ifnum\the\catcode`\'=13 \tikzexternal at activate@normal at sq\fi
+        \ifnum\the\catcode`\;=13 \tikzexternal at activate@normal at semic\fi
+        \ifnum\the\catcode`\-=13 \tikzexternal at activate@normal at dash\fi
+        \let\\=\tikzexternal at normal@backslash
+        \xdef#2{\pgfkeysvalueof{/tikz/external/system call}}%
+    \endgroup
 }%
 \long\def\tikzexternal at externalizefig@systemcall@@#1{%
-	\tikzexternal at externalizefig@systemcall at uptodatecheck{#1}%
-	\tikzexternal at assemble@systemcall{\tikzexternal at curfilename}{\pgf at tempa}%
-	\global\let\tikzexternal at cursyscall=\pgf at tempa
-	\gdef\tikzexternal at typeset@picture at on@failure{1}%
-	\iftikzexternal at file@isuptodate
-		\iftikzexternal at verboseio
-			\pgf at typeout{===== Image '\tikzexternal at curfilename' is up-to-date. ======}%
-		\fi
-		\let\pgf at filename=\tikzexternal at curfilename
-	\else
-		\begingroup
-		% no such image. Generate it!
-		%
-		\tikzexternalauxlock at setlock1%
-		\tikzexternal at externalizefig@systemcall at call{\tikzexternal at cursyscall}%
-		\tikzexternalauxlock at setlock0%
-		\expandafter\tikzexternal at externalizefig@systemcall at assertsuccess\expandafter{\tikzexternal at cursyscall}%
-		\pgfmath at smuggleone\pgf at filename
-		\endgroup
-	\fi
-	\ifx\pgf at filename\pgfutil at empty
-		\if1\tikzexternal at typeset@picture at on@failure
-			% error recovery: something did not work! Try to load it
-			% anyway. Perhaps it was just that shell-escape wasn't
-			% enabled.
-			\begingroup
-			\toks0={%
-				\tikzexternaldisable
-				\pgfutil at ifundefined{scantokens}{\long\def\scantokens##1{##1}}{}%
-			}%
-			% FIXME : THIS WILL FAIL IF THERE IS '##' INSIDE OF '#1'!
-			% for example something like /.style={#1} in the picture environment *will* fail.
-			\toks1={%
-				\tikzpicture
-				#1%
-			}%
-			\toks2={%
-				\tikzexternal at TEXDIALECT@endpicture
-				\tikzexternalenable
-			}%
-			\xdef\tikzexternal at externalizefig@systemcall at next{%
-				\the\toks0
-				%  try reading them again as if they were in the input file.
-				\noexpand\scantokens{\the\toks1 }%
-				\the\toks2
-			}%
-			\endgroup
-		\else
-			% Ah -- this picture failed, but the failure has already
-			% been handled somehow. Do not typeset it again!
-			%
-			% A use-case is that the picture has been rescheduled for
-			% \end{document}.
-			\gdef\tikzexternal at externalizefig@systemcall at next{\tikzexternal at closeenvironments}%
-		\fi
-	\else
-		% ok, take the image!
-		\gdef\tikzexternal at systemcall@reschedule at to@end at document{0}%
-		\expandafter\pgfincludeexternalgraphics\expandafter{\tikzexternal at curfilename}%
-		\if1\tikzexternal at systemcall@reschedule at to@end at document
-			\pgfutil at IfUndefined{AtVeryEndDocument}{%
-			}{%
-				\pgf at typeout{===== The previous system call resulted in undefined references inside of the output file. Rescheduling it for \string\end{document}. ========}%
-				\expandafter\tikzexternal at externalizefig@systemcall at reschedule\expandafter{\tikzexternal at cursyscall}%
-			}%
-		\fi
-		\gdef\tikzexternal at externalizefig@systemcall at next{\tikzexternal at closeenvironments}%
-	\fi
-	\tikzexternal at externalizefig@systemcall at next
+    \tikzexternal at externalizefig@systemcall at uptodatecheck{#1}%
+    \tikzexternal at assemble@systemcall{\tikzexternal at curfilename}{\pgf at tempa}%
+    \global\let\tikzexternal at cursyscall=\pgf at tempa
+    \gdef\tikzexternal at typeset@picture at on@failure{1}%
+    \iftikzexternal at file@isuptodate
+        \iftikzexternal at verboseio
+            \pgf at typeout{===== Image '\tikzexternal at curfilename' is up-to-date. ======}%
+        \fi
+        \let\pgf at filename=\tikzexternal at curfilename
+    \else
+        \begingroup
+        % no such image. Generate it!
+        %
+        \tikzexternalauxlock at setlock1%
+        \tikzexternal at externalizefig@systemcall at call{\tikzexternal at cursyscall}%
+        \tikzexternalauxlock at setlock0%
+        \expandafter\tikzexternal at externalizefig@systemcall at assertsuccess\expandafter{\tikzexternal at cursyscall}%
+        \pgfmath at smuggleone\pgf at filename
+        \endgroup
+    \fi
+    \ifx\pgf at filename\pgfutil at empty
+        \if1\tikzexternal at typeset@picture at on@failure
+            % error recovery: something did not work! Try to load it
+            % anyway. Perhaps it was just that shell-escape wasn't
+            % enabled.
+            \begingroup
+            \toks0={%
+                \tikzexternaldisable
+            }%
+            % FIXME : THIS WILL FAIL IF THERE IS '##' INSIDE OF '#1'!
+            % for example something like /.style={#1} in the picture environment *will* fail.
+            \toks1={%
+                \tikzpicture
+                #1%
+            }%
+            \toks2={%
+                \tikzexternal at TEXDIALECT@endpicture
+                \tikzexternalenable
+            }%
+            \xdef\tikzexternal at externalizefig@systemcall at next{%
+                \the\toks0
+                %  try reading them again as if they were in the input file.
+                \noexpand\pgfutil at scantokens{\the\toks1 }%
+                \the\toks2
+            }%
+            \endgroup
+        \else
+            % Ah -- this picture failed, but the failure has already
+            % been handled somehow. Do not typeset it again!
+            %
+            % A use-case is that the picture has been rescheduled for
+            % \end{document}.
+            \gdef\tikzexternal at externalizefig@systemcall at next{\tikzexternal at closeenvironments}%
+        \fi
+    \else
+        % ok, take the image!
+        \gdef\tikzexternal at systemcall@reschedule at to@end at document{0}%
+        \expandafter\pgfincludeexternalgraphics\expandafter{\tikzexternal at curfilename}%
+        \if1\tikzexternal at systemcall@reschedule at to@end at document
+            \pgfutil at IfUndefined{AtVeryEndDocument}{%
+            }{%
+                \pgf at typeout{===== The previous system call resulted in undefined references inside of the output file. Rescheduling it for \string\end{document}. ========}%
+                \expandafter\tikzexternal at externalizefig@systemcall at reschedule\expandafter{\tikzexternal at cursyscall}%
+            }%
+        \fi
+        \gdef\tikzexternal at externalizefig@systemcall at next{\tikzexternal at closeenvironments}%
+    \fi
+    \tikzexternal at externalizefig@systemcall at next
 }%
 
 \def\tikzexternal at externalizefig@systemcall at call#1{%
-	\iftikzexternal at verboseio
-		\pgf at typeout{===== 'mode=convert with system call': Invoking '#1' ========}%
-	\fi
-	\pgfutil at shellescape{#1}%
+    \iftikzexternal at verboseio
+        \pgf at typeout{===== 'mode=convert with system call': Invoking '#1' ========}%
+    \fi
+    \pgfutil at shellescape{#1}%
 }%
 
 % Sets \iftikzexternal at file@isuptodate to false if one of the "force
 % remake" things is active.
 \def\tikzexternal at checkforceremake{%
-	\iftikzexternal at force@remake
-		\global\tikzexternal at file@isuptodatefalse
-	\else
-		\iftikzexternalremakenext
-			\global\tikzexternal at file@isuptodatefalse
-			\global\tikzexternalremakenextfalse
-		\fi
-	\fi
+    \iftikzexternal at force@remake
+        \global\tikzexternal at file@isuptodatefalse
+    \else
+        \iftikzexternalremakenext
+            \global\tikzexternal at file@isuptodatefalse
+            \global\tikzexternalremakenextfalse
+        \fi
+    \fi
 }
 
 \pgfutil at IfUndefined{pdfmdfivesum}{%
 }{%
-	% predefine to this value. This does only make sense for pdftex.
-	% note that the latex library for 'external' loads \usepackage{pdftexcmds} which \let's this to \pdf at mdfivesum:
-	\let\tikzexternal at mdfivesum=\pdfmdfivesum
+    % predefine to this value. This does only make sense for pdftex.
+    % note that the latex library for 'external' loads \usepackage{pdftexcmds} which \let's this to \pdf at mdfivesum:
+    \let\tikzexternal at mdfivesum=\pdfmdfivesum
 }%
 
 \long\def\tikzexternal at computemdfivesum#1{%
-	\t at tikzexternal@tmpb={#1}%
-	\edef\tikzexternal at temp{\the\t at tikzexternal@tmpb}%
-	% \meaning results in a string of catcode 12 - which is expandable.
-	\edef\pgfretval{\tikzexternal at mdfivesum{\meaning\tikzexternal at temp}}%
+    \t at tikzexternal@tmpb={#1}%
+    \edef\tikzexternal at temp{\the\t at tikzexternal@tmpb}%
+    % \meaning results in a string of catcode 12 - which is expandable.
+    \edef\pgfretval{\tikzexternal at mdfivesum{\meaning\tikzexternal at temp}}%
 }
 \long\def\tikzexternal at computemdfivesum@diff at fallback#1{%
-	\t at tikzexternal@tmpb={#1}%
-	\edef\tikzexternal at temp{\the\t at tikzexternal@tmpb}%
-	% \meaning results in a string of catcode 12 - which is expandable.
-	\edef\pgfretval{\meaning\tikzexternal at temp}%
+    \t at tikzexternal@tmpb={#1}%
+    \edef\tikzexternal at temp{\the\t at tikzexternal@tmpb}%
+    % \meaning results in a string of catcode 12 - which is expandable.
+    \edef\pgfretval{\meaning\tikzexternal at temp}%
 }
 
 % Will be set dynamically, depending on 'up to date check'.
@@ -1507,99 +1506,99 @@
 % It is used as argument for \write{..}
 %
 % #1 the hash key to serialize.
-% \def\tikzexternal at hashfct@serialize 
+% \def\tikzexternal at hashfct@serialize
 \long\def\tikzexternal at hashfct@serialize at std#1{%
-	\noexpand\def\noexpand\tikzexternallastkey{#1}%
+    \noexpand\def\noexpand\tikzexternallastkey{#1}%
 }%
 
 % serializes using temporary token registers. Necessary if #1 contains
 % executable code.
 \long\def\tikzexternal at hashfct@serialize at tok#1{%
-	\noexpand\begingroup
-		% in order to allow '#' inside of the body, we have to use token registers:
-		\noexpand\toks0={#1}%
-		\noexpand\xdef\noexpand\tikzexternallastkey{\noexpand\the\noexpand\toks0 }%
-	\noexpand\endgroup
+    \noexpand\begingroup
+        % in order to allow '#' inside of the body, we have to use token registers:
+        \noexpand\toks0={#1}%
+        \noexpand\xdef\noexpand\tikzexternallastkey{\noexpand\the\noexpand\toks0 }%
+    \noexpand\endgroup
 }%
 
 \def\tikzexternal at check@uptodate at ext{.md5}
 
-\def\tikzexternal at check@uptodate at mode@warn at fallback{%	
-	\message{Package tikz Warning: The key 'up to date check=md5' is impossible, there is no macro to compute MD5. Falling back to 'up to date check=diff'.}%
-	%
-	% warn only once:
-	\global\let\tikzexternal at check@uptodate at mode@warn at fallback=\relax
+\def\tikzexternal at check@uptodate at mode@warn at fallback{%
+    \message{Package tikz Warning: The key 'up to date check=md5' is impossible, there is no macro to compute MD5. Falling back to 'up to date check=diff'.}%
+    %
+    % warn only once:
+    \global\let\tikzexternal at check@uptodate at mode@warn at fallback=\relax
 }%
 
 % assigns the boolean \iftikzexternal at file@isuptodate
 \long\def\tikzexternal at check@uptodate at mode#1{%
-	\if1\tikzexternal at uptodate@mode
-		% up to date check=md5:
-		% check if we CAN compute MD5 sums:
-		\pgfutil at IfUndefined{tikzexternal at mdfivesum}{%
-			% we cannot compute md5 sums - fallback to diff.
-			\tikzexternal at check@uptodate at mode@warn at fallback
-			\def\tikzexternal at uptodate@mode{2}%
-		}{}%
-	\fi
-	%
-	\ifcase\tikzexternal at uptodate@mode
-		% up to date check=simple
-		% nothing to do -- file existance is checked anyway.
-		\let\tikzexternal at hashfct=\pgfutil at empty
-		\let\tikzexternal at hashfct@serialize=\pgfutil at empty
-	\or
-		% up to date check=md5
-		\let\tikzexternal at hashfct=\tikzexternal at computemdfivesum
-		\let\tikzexternal at hashfct@serialize=\tikzexternal at hashfct@serialize at std
-	\or
-		\let\tikzexternal at hashfct=\tikzexternal at computemdfivesum@diff at fallback
-		\let\tikzexternal at hashfct@serialize=\tikzexternal at hashfct@serialize at tok
-	\fi
-	\ifx\tikzexternal at hashfct\pgfutil at empty
-	\else
-		\tikzpicturedependsonfile{\tikzexternal at curfilename\tikzexternal at check@uptodate at ext}%
-		\tikzexternal at hashfct{#1}%
-		\let\tikzexternal at lastkey@new=\pgfretval
-		\begingroup
-		% no '@' token in this macro: avoid messing up the catcodes in input files:
-		\global\let\tikzexternallastkey=\pgfutil at empty
-		\openin\r at pgf@reada=\tikzexternal at curfilename\tikzexternal at check@uptodate at ext\relax %
-		\ifeof\r at pgf@reada
-		\else
-			% read first line...
-			\endlinechar=-1 % older versions did not have a '%' at the end-of-line. Avoid spurious spaces.
-			\read\r at pgf@reada to\pgf at tempa
-			% ... and execute it.
-			\pgf at tempa
-			% it should contain a definition of \tikzexternallastkey.
-		\fi
-		\closein\r at pgf@reada
-		%
-		\let\tikzexternal at lastkey=\tikzexternallastkey
-		\pgfmath at smuggleone\tikzexternal at lastkey
-		\endgroup
-		% normalize catcodes. Unfortunately, they cannot be expected to be the same.
-		% \meaning will use catcode 12 for each token:
-		\edef\tikzexternal at lastkey@normalized{\meaning\tikzexternal at lastkey}%
-		\edef\tikzexternal at lastkey@new at normalized{\meaning\tikzexternal at lastkey@new}%
-		\iftikzexternal at verboseuptodate
-			\pgf at typeout{Up-to-date check of \tikzexternal at curfilename: new \tikzexternal at lastkey@new at normalized; old \tikzexternal at lastkey@normalized.^^J}%
-		\fi
-		\ifx\tikzexternal at lastkey@normalized\tikzexternal at lastkey@new at normalized
-			\tikzexternal at file@isuptodatetrue
-		\else
-			\tikzexternal at file@isuptodatefalse
-			\immediate\openout\w at pgf@writea=\tikzexternal at curfilename\tikzexternal at check@uptodate at ext\relax%
-			\immediate\write\w at pgf@writea{\tikzexternal at hashfct@serialize{\tikzexternal at lastkey@new}\tikzexternal at PERCENTchar}%
-			\immediate\closeout\w at pgf@writea
-		\fi
-	\fi
+    \if1\tikzexternal at uptodate@mode
+        % up to date check=md5:
+        % check if we CAN compute MD5 sums:
+        \pgfutil at IfUndefined{tikzexternal at mdfivesum}{%
+            % we cannot compute md5 sums - fallback to diff.
+            \tikzexternal at check@uptodate at mode@warn at fallback
+            \def\tikzexternal at uptodate@mode{2}%
+        }{}%
+    \fi
+    %
+    \ifcase\tikzexternal at uptodate@mode
+        % up to date check=simple
+        % nothing to do -- file existence is checked anyway.
+        \let\tikzexternal at hashfct=\pgfutil at empty
+        \let\tikzexternal at hashfct@serialize=\pgfutil at empty
+    \or
+        % up to date check=md5
+        \let\tikzexternal at hashfct=\tikzexternal at computemdfivesum
+        \let\tikzexternal at hashfct@serialize=\tikzexternal at hashfct@serialize at std
+    \or
+        \let\tikzexternal at hashfct=\tikzexternal at computemdfivesum@diff at fallback
+        \let\tikzexternal at hashfct@serialize=\tikzexternal at hashfct@serialize at tok
+    \fi
+    \ifx\tikzexternal at hashfct\pgfutil at empty
+    \else
+        \tikzpicturedependsonfile{\tikzexternal at curfilename\tikzexternal at check@uptodate at ext}%
+        \tikzexternal at hashfct{#1}%
+        \let\tikzexternal at lastkey@new=\pgfretval
+        \begingroup
+        % no '@' token in this macro: avoid messing up the catcodes in input files:
+        \global\let\tikzexternallastkey=\pgfutil at empty
+        \openin\r at pgf@reada=\tikzexternal at curfilename\tikzexternal at check@uptodate at ext\relax %
+        \ifeof\r at pgf@reada
+        \else
+            % read first line...
+            \endlinechar=-1 % older versions did not have a '%' at the end-of-line. Avoid spurious spaces.
+            \read\r at pgf@reada to\pgf at tempa
+            % ... and execute it.
+            \pgf at tempa
+            % it should contain a definition of \tikzexternallastkey.
+        \fi
+        \closein\r at pgf@reada
+        %
+        \let\tikzexternal at lastkey=\tikzexternallastkey
+        \pgfmath at smuggleone\tikzexternal at lastkey
+        \endgroup
+        % normalize catcodes. Unfortunately, they cannot be expected to be the same.
+        % \meaning will use catcode 12 for each token:
+        \edef\tikzexternal at lastkey@normalized{\meaning\tikzexternal at lastkey}%
+        \edef\tikzexternal at lastkey@new at normalized{\meaning\tikzexternal at lastkey@new}%
+        \iftikzexternal at verboseuptodate
+            \pgf at typeout{Up-to-date check of \tikzexternal at curfilename: new \tikzexternal at lastkey@new at normalized; old \tikzexternal at lastkey@normalized.^^J}%
+        \fi
+        \ifx\tikzexternal at lastkey@normalized\tikzexternal at lastkey@new at normalized
+            \tikzexternal at file@isuptodatetrue
+        \else
+            \tikzexternal at file@isuptodatefalse
+            \immediate\openout\w at pgf@writea=\tikzexternal at curfilename\tikzexternal at check@uptodate at ext\relax%
+            \immediate\write\w at pgf@writea{\tikzexternal at hashfct@serialize{\tikzexternal at lastkey@new}\tikzexternal at PERCENTchar}%
+            \immediate\closeout\w at pgf@writea
+        \fi
+    \fi
 }
 
 % Checks whether the current picture needs to be externalized.
-% 
-% This is the case if 
+%
+% This is the case if
 % a) there is no external image yet,
 % b) the picture has been invalidated manually.
 %
@@ -1606,47 +1605,47 @@
 % It returns \iftikzexternal at file@isuptodate accordingly.
 % #1: the picture-content
 \long\def\tikzexternal at externalizefig@systemcall at uptodatecheck#1{%
-	\tikzexternal at check@uptodate at mode{#1}%
-	\tikzexternal at checkforceremake
-	\iftikzexternal at file@isuptodate
-		% check if there is already a file.
-		% In that case, use it. If that is not the case, generate it and include it afterwards.
-		\gdef\pgf at filename{}%
-		\xdef\pgf at tempa{\noexpand\pgf at findfile\pgfsys at imagesuffixlist:+{\tikzexternal at curfilename}}%
-		\pgf at tempa
-		\ifx\pgf at filename\pgfutil at empty%
-			\global\tikzexternal at file@isuptodatefalse
-		\fi
-	\fi
+    \tikzexternal at check@uptodate at mode{#1}%
+    \tikzexternal at checkforceremake
+    \iftikzexternal at file@isuptodate
+        % check if there is already a file.
+        % In that case, use it. If that is not the case, generate it and include it afterwards.
+        \gdef\pgf at filename{}%
+        \xdef\pgf at tempa{\noexpand\pgf at findfile\pgfsys at imagesuffixlist:+{\tikzexternal at curfilename}}%
+        \pgf at tempa
+        \ifx\pgf at filename\pgfutil at empty%
+            \global\tikzexternal at file@isuptodatefalse
+        \fi
+    \fi
 }%
 
 % \pgf at filename will be empty if the assertion failed.
 \def\tikzexternal at externalizefig@systemcall at assertsuccess#1{%
-	% check if there is a file now and raise an error message if not.
-	\gdef\pgf at filename{}%
-	\xdef\pgf at tempa{\noexpand\pgf at findfile\pgfsys at imagesuffixlist:+{\tikzexternal at curfilename}}%
-	\pgf at tempa
-	\ifx\pgf at filename\pgfutil at empty%
-		\tikzexternal at externalizefig@systemcall at handleexception{#1}%
-	\fi
+    % check if there is a file now and raise an error message if not.
+    \gdef\pgf at filename{}%
+    \xdef\pgf at tempa{\noexpand\pgf at findfile\pgfsys at imagesuffixlist:+{\tikzexternal at curfilename}}%
+    \pgf at tempa
+    \ifx\pgf at filename\pgfutil at empty%
+        \tikzexternal at externalizefig@systemcall at handleexception{#1}%
+    \fi
 }%
 \def\tikzexternal at externalizefig@systemcall at handleexception@msg#1{%
-	\tikzerror{Sorry, the system call '#1' did NOT result in a usable output file '\tikzexternal at curfilename' (expected one of \pgfsys at imagesuffixlist). Please verify that you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or something like that. Or maybe the command simply failed? Error messages can be found in '\tikzexternal at curfilename.log'. If you continue now, I'll try to typeset the picture}{}%
+    \tikzerror{Sorry, the system call '#1' did NOT result in a usable output file '\tikzexternal at curfilename' (expected one of \pgfsys at imagesuffixlist). Please verify that you have enabled system calls. For pdflatex, this is 'pdflatex -shell-escape'. Sometimes it is also named 'write 18' or something like that. Or maybe the command simply failed? Error messages can be found in '\tikzexternal at curfilename.log'. If you continue now, I'll try to typeset the picture}{}%
 }
 \def\tikzexternal at externalizefig@systemcall at handleexception@retry at later#1{%
-	\gdef\tikzexternal at systemcall@reschedule at to@end at document{0}%
-	\expandafter\pgfexternalreaddpth\expandafter{\tikzexternal at curfilename}%
-	\if1\tikzexternal at systemcall@reschedule at to@end at document
-		\pgfutil at IfUndefined{AtVeryEndDocument}{%
-			\tikzexternal at externalizefig@systemcall at handleexception@msg{#1}%
-		}{%
-			\pgf at typeout{===== The last system call resulted in an EMPTY output file. Maybe it is part of \string\ref. Rescheduling it for \string\end{document}. ========}%
-			\gdef\tikzexternal at typeset@picture at on@failure{0}%
-			\tikzexternal at externalizefig@systemcall at reschedule{#1}%
-		}%
-	\else
-		\tikzexternal at externalizefig@systemcall at handleexception@msg{#1}%
-	\fi
+    \gdef\tikzexternal at systemcall@reschedule at to@end at document{0}%
+    \expandafter\pgfexternalreaddpth\expandafter{\tikzexternal at curfilename}%
+    \if1\tikzexternal at systemcall@reschedule at to@end at document
+        \pgfutil at IfUndefined{AtVeryEndDocument}{%
+            \tikzexternal at externalizefig@systemcall at handleexception@msg{#1}%
+        }{%
+            \pgf at typeout{===== The last system call resulted in an EMPTY output file. Maybe it is part of \string\ref. Rescheduling it for \string\end{document}. ========}%
+            \gdef\tikzexternal at typeset@picture at on@failure{0}%
+            \tikzexternal at externalizefig@systemcall at reschedule{#1}%
+        }%
+    \else
+        \tikzexternal at externalizefig@systemcall at handleexception@msg{#1}%
+    \fi
 }
 
 % reschedules the externalization of the current file to
@@ -1655,58 +1654,58 @@
 % This hook allows to execute code AFTER the main .aux file is
 % finished; it will even re-read the main aux file.
 \def\tikzexternal at externalizefig@systemcall at reschedule#1{%
-	\t at tikzexternal@tmpb={%
-		\global\let\tikzexternal at externalizefig@systemcall at handleexception=\tikzexternal at externalizefig@systemcall at handleexception@msg%
-		% ... no auxlocks!
-		\tikzexternal at externalizefig@systemcall at call{#1}%
-		\tikzexternal at externalizefig@systemcall at assertsuccess{#1}%
-	}%
-	\xdef\pgfutil at tempa{%
-		\noexpand\def\noexpand\tikzexternal at curfilename{\tikzexternal at curfilename}%
-		\the\t at tikzexternal@tmpb
-	}%
-	\expandafter\AtVeryEndDocument\expandafter{\pgfutil at tempa}%
-	\gdef\tikzexternal at has@rescheduled at something{1}%
+    \t at tikzexternal@tmpb={%
+        \global\let\tikzexternal at externalizefig@systemcall at handleexception=\tikzexternal at externalizefig@systemcall at handleexception@msg%
+        % ... no auxlocks!
+        \tikzexternal at externalizefig@systemcall at call{#1}%
+        \tikzexternal at externalizefig@systemcall at assertsuccess{#1}%
+    }%
+    \xdef\pgfutil at tempa{%
+        \noexpand\def\noexpand\tikzexternal at curfilename{\tikzexternal at curfilename}%
+        \the\t at tikzexternal@tmpb
+    }%
+    \expandafter\AtVeryEndDocument\expandafter{\pgfutil at tempa}%
+    \gdef\tikzexternal at has@rescheduled at something{1}%
 }%
 \let\tikzexternal at externalizefig@systemcall at handleexception=\tikzexternal at externalizefig@systemcall at handleexception@retry at later%
 
 \def\tikzexternal at has@rescheduled at something{0}%
 \pgfutil at IfUndefined{AtVeryEndDocument}{}{%
-	\AtVeryEndDocument{%
-		\if1\tikzexternal at has@rescheduled at something
-			\pgf at typeout{===== tikzexternal: \string\end{document} reached. Working on rescheduled images to resolve references... ========}%
-		\fi
-	}%
+    \AtVeryEndDocument{%
+        \if1\tikzexternal at has@rescheduled at something
+            \pgf at typeout{===== tikzexternal: \string\end{document} reached. Working on rescheduled images to resolve references... ========}%
+        \fi
+    }%
 }
 
 % Overwrite error message of pgf.
 % This happens if the generated image was empty, i.e. if there was no \shipout.
 \def\pgfexternal at error@no at shipout{%
-	\begingroup
-		\begingroup
-		% overwrite .dpth file in order to flag the file as "need to be scheduled
-		% for \AtVeryEndDocument" :
-		\immediate\openout\pgf at plotwrite=\pgfactualjobname.dpth
-		\let\w at pgfexternal@auxout=\pgf at plotwrite
-		\pgfexternalstorecommand at isexporting{\gdef\noexpand\tikzexternal at systemcall@reschedule at to@end at document{1}}%
-		\immediate\closeout\pgf at plotwrite
-		\endgroup
-	\tikzexternal at assemble@systemcall{\pgfactualjobname}{\pgf at tempa}%
-	\toks0=\expandafter{\pgf at tempa}%
-	\tikzerror{Sorry, image externalization failed: the resulting image was EMPTY. I tried to externalize '\pgfactualjobname', but it seems there is no such image in the document!?
+    \begingroup
+        \begingroup
+        % overwrite .dpth file in order to flag the file as "need to be scheduled
+        % for \AtVeryEndDocument" :
+        \immediate\openout\pgf at plotwrite=\pgfactualjobname.dpth
+        \let\w at pgfexternal@auxout=\pgf at plotwrite
+        \pgfexternalstorecommand at isexporting{\gdef\noexpand\tikzexternal at systemcall@reschedule at to@end at document{1}}%
+        \immediate\closeout\pgf at plotwrite
+        \endgroup
+    \tikzexternal at assemble@systemcall{\pgfactualjobname}{\pgf at tempa}%
+    \toks0=\expandafter{\pgf at tempa}%
+    \tikzerror{Sorry, image externalization failed: the resulting image was EMPTY. I tried to externalize '\pgfactualjobname', but it seems there is no such image in the document!?
  \if\tikzexternal at opmode4 ^^J
-\space\space You are currently using 'mode=convert with system call'. This problem can happen if the image (or one of the images preceeding it) was declared inside of a \string\label{} (i.e. in the .aux file): 'convert with system call' has no access to the main aux file.^^J
+\space\space You are currently using 'mode=convert with system call'. This problem can happen if the image (or one of the images preceding it) was declared inside of a \string\label{} (i.e. in the .aux file): 'convert with system call' has no access to the main aux file.^^J
 \space\space Possible solutions in this case:^^J
 \space\space (a) Try using 'mode=list and make',^^J
-\space\space (b) Issue the externalization command '\the\toks0' *manually* (also check the preceeding externalized images, perhaps the file name sequence is not correct).^^J
+\space\space (b) Issue the externalization command '\the\toks0' *manually* (also check the preceding externalized images, perhaps the file name sequence is not correct).^^J
 \space\space Repeat: the resulting image was EMPTY, your attention is required
 \else
-	\if\tikzexternal at opmode5 ^^J
+    \if\tikzexternal at opmode5 ^^J
 \space\space You are currently using 'mode=list and make'. Possible solutions:^^J
 \space\space (a) Try to delete `\tikzexternal at realjob.makefile'. Perhaps it is not up-to-date.^^J
 \space\space (b) Perhaps pictures are declared inside of \string\label{} and the .aux file is not up-to-date. Re-run latex, perhaps re-generate the graphics as well.^^J
 \space\space Repeat: the resulting image was EMPTY, your attention is required
-	\fi
+    \fi
 \fi}%
-	\endgroup
+    \endgroup
 }%

Modified: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryangles.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryangles.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryangles.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -63,7 +63,7 @@
   \ifx\tikzpictext\relax\else%
     \def\pgf at temp{\node()[name prefix
       ..,at={([shift={({.5*\tikz at start@angle at temp+.5*\tikz at end@angle at temp}:\pgfkeysvalueof{/tikz/angle
-            eccentricity}*sqrt(1/2)*\tikz at lib@angle at rad pt)}]#2.center)}]}
+            eccentricity}*1.4142136*\tikz at lib@angle at rad pt)}]#2.center)}]}
     \expandafter\pgf at temp\expandafter[\tikzpictextoptions]{\tikzpictext};%
   \fi
 }%

Modified: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarycalc.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarycalc.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarycalc.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -39,6 +39,10 @@
   \let\x=\tikz at cc@dox%
   \let\y=\tikz at cc@doy%
   \let\n=\tikz at cc@don%
+  \let\rawx=\tikz at cc@dotempx%
+  \let\rawy=\tikz at cc@dotempy%
+  \let\rawz=\tikz at cc@dotempz%
+  \let\coord=\tikz at cc@docoord%
   \pgfutil at ifnextchar i{\tikz at cc@stop at let}{\tikz at cc@handle at line}%
 }%
 \def\tikz at cc@handle at line{%
@@ -66,6 +70,17 @@
   \expandafter\edef\csname tikz at cc@p@\tikz at cc@coord at name\endcsname{\the\pgf at x,\the\pgf at y}%
   \expandafter\edef\csname tikz at cc@x@\tikz at cc@coord at name\endcsname{\the\pgf at x}%
   \expandafter\edef\csname tikz at cc@y@\tikz at cc@coord at name\endcsname{\the\pgf at y}%
+  \pgfutil at letfirst\pgfutil at next{#1}%
+  \ifx\pgfutil at next\pgfpointxyz
+    \expandafter\edef\csname tikz at cc@tempx@\tikz at cc@coord at name\endcsname{\pgftemp at x}%
+    \expandafter\edef\csname tikz at cc@tempy@\tikz at cc@coord at name\endcsname{\pgftemp at y}%
+    \expandafter\edef\csname tikz at cc@tempz@\tikz at cc@coord at name\endcsname{\pgftemp at z}%
+  \else
+    \expandafter\edef\csname tikz at cc@tempx@\tikz at cc@coord at name\endcsname{}%
+    \expandafter\edef\csname tikz at cc@tempy@\tikz at cc@coord at name\endcsname{}%
+    \expandafter\edef\csname tikz at cc@tempz@\tikz at cc@coord at name\endcsname{}%
+  \fi
+  \expandafter\edef\csname tikz at cc@coord@\tikz at cc@coord at name\endcsname{\csname tikz at declared@coordinate\endcsname}%
   \pgfutil at ifnextchar,{\tikz at cc@handle at nextline}{\tikz at cc@stop at let}%
 }%
 \def\tikz at cc@handle at nextline,{%
@@ -79,6 +94,10 @@
 \def\tikz at cc@dox#1{\csname tikz at cc@x@#1\endcsname}%
 \def\tikz at cc@doy#1{\csname tikz at cc@y@#1\endcsname}%
 \def\tikz at cc@don#1{\csname tikz at cc@n@#1\endcsname}%
+\def\tikz at cc@dotempx#1{\csname tikz at cc@tempx@#1\endcsname}%
+\def\tikz at cc@dotempy#1{\csname tikz at cc@tempy@#1\endcsname}%
+\def\tikz at cc@dotempz#1{\csname tikz at cc@tempz@#1\endcsname}%
+\def\tikz at cc@docoord#1{\csname tikz at cc@coord@#1\endcsname}%
 
 
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryintersections.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -53,7 +53,7 @@
   \expandafter\pgfutil at g@addto at macro\expandafter\tikz at intersect@namedpaths\expandafter{\tikz at marshal}%
 }%
 
-
+% at the end of evey \path command ...
 \let\tikz at finish@orig=\tikz at finish
 \def\tikz at finish{%
   \tikz at finish@orig%
@@ -60,16 +60,9 @@
   \tikz at intersect@finish%
 }%
 
+% ... make the named path variables available
 \def\tikz at intersect@finish{%
-  \ifx\tikz at intersect@namedpaths\pgfutil at empty%
-  \else%
-    \tikz at intersect@namedpaths%
-    % FIXME : it is reasonable to reset this globally as it is global
-    % in its nature. But the reset instruction should be moved to
-    % \endscope or something related. Resetting it here breaks the
-    % manual
-    \let\tikz at intersect@namedpaths=\pgfutil at empty%
-  \fi%
+  \tikz at intersect@namedpaths%
 }%
 
 \let\tikz at intersect@namedpaths=\pgfutil at empty

Modified: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymath.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymath.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibrarymath.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -7,8 +7,8 @@
 %
 % See the file doc/generic/pgf/licenses/LICENSE for more details.
 
+\usetikzlibrary{fpu}
 
-
 \edef\tikz at math@at at catcode{\the\catcode`\@}%
 \catcode`\@=11
 

Added: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryperspective.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryperspective.code.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryperspective.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -0,0 +1,111 @@
+% Copyright 2019 by Max Snippe
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/generic/pgf/licenses/LICENSE for more details.
+
+\ProvidesFileRCS{tikzlibraryperspective.code.tex}
+
+% Initialize affine transformation matrix for perspective view
+% [aa ab ac 0]
+% [ba bb bc 0]
+% [ca cb cc 0]
+% [da db dc 1]
+\pgfmathsetmacro\pgf at H@tpp at aa{+1}
+  \pgfmathsetmacro\pgf at H@tpp at ab{+0}
+    \pgfmathsetmacro\pgf at H@tpp at ac{+0}
+\pgfmathsetmacro\pgf at H@tpp at ba{+0}
+  \pgfmathsetmacro\pgf at H@tpp at bb{+1}
+    \pgfmathsetmacro\pgf at H@tpp at bc{+0}
+\pgfmathsetmacro\pgf at H@tpp at ca{+0}
+  \pgfmathsetmacro\pgf at H@tpp at cb{+0}
+    \pgfmathsetmacro\pgf at H@tpp at cc{+1}
+\pgfmathsetmacro\pgf at H@tpp at da{+0}
+  \pgfmathsetmacro\pgf at H@tpp at db{+0}
+    \pgfmathsetmacro\pgf at H@tpp at dc{+0}
+
+\def\pgfpointperspectivexyz#1#2#3{%
+  \pgfmathsetmacro\pgf at pp@w%
+    { \pgf at H@tpp at da*(#1) + \pgf at H@tpp at db*(#2) + \pgf at H@tpp at dc*(#3) + 1}
+  \pgfmathsetmacro\pgf at pp@x%
+    {(\pgf at H@tpp at aa*(#1) + \pgf at H@tpp at ab*(#2) + \pgf at H@tpp at ac*(#3))/\pgf at pp@w}
+  \pgfmathsetmacro\pgf at pp@y%
+    {(\pgf at H@tpp at ba*(#1) + \pgf at H@tpp at bb*(#2) + \pgf at H@tpp at bc*(#3))/\pgf at pp@w}
+  \pgfmathsetmacro\pgf at pp@z%
+    {(\pgf at H@tpp at ca*(#1) + \pgf at H@tpp at cb*(#2) + \pgf at H@tpp at cc*(#3))/\pgf at pp@w}
+%
+  \pgf at x=\pgf at pp@x\pgf at xx%
+  \advance\pgf at x by \pgf at pp@y\pgf at yx%
+  \advance\pgf at x by \pgf at pp@z\pgf at zx%
+  \pgf at y=\pgf at pp@x\pgf at xy%
+  \advance\pgf at y by \pgf at pp@y\pgf at yy%
+  \advance\pgf at y by \pgf at pp@z\pgf at zy}
+
+\tikzdeclarecoordinatesystem{three point perspective}
+{%
+  \tikzset{cs/.cd,x=0,y=0,z=0,#1}%
+  \pgfpointperspectivexyz{\tikz at cs@x}{\tikz at cs@y}{\tikz at cs@z}
+}
+\tikzaliascoordinatesystem{tpp}{three point perspective}
+
+\pgfkeys{
+  /perspective/.cd,
+    p/.code args={(#1,#2,#3)}{
+      \pgfmathparse{ifthenelse(#1,int(1),int(0))}
+      \ifnum\pgfmathresult=0\else
+        \pgfmathsetmacro\pgf at H@tpp at ba{#2/#1}
+        \pgfmathsetmacro\pgf at H@tpp at ca{#3/#1}
+        \pgfmathsetmacro\pgf at H@tpp at da{ 1/#1}
+      \fi
+    },
+    q/.code args={(#1,#2,#3)}{
+      \pgfmathparse{ifthenelse(#2,int(1),int(0))}
+      \ifnum\pgfmathresult=0\else
+        \pgfmathsetmacro\pgf at H@tpp at ab{#1/#2}
+        \pgfmathsetmacro\pgf at H@tpp at cb{#3/#2}
+        \pgfmathsetmacro\pgf at H@tpp at db{ 1/#2}
+      \fi
+    },
+    r/.code args={(#1,#2,#3)}{
+      \pgfmathparse{ifthenelse(#3,int(1),int(0))}
+      \ifnum\pgfmathresult=0\else
+        \pgfmathsetmacro\pgf at H@tpp at ac{#1/#3}
+        \pgfmathsetmacro\pgf at H@tpp at bc{#2/#3}
+        \pgfmathsetmacro\pgf at H@tpp at dc{ 1/#3}
+      \fi
+    },
+}
+
+\tikzset{
+  perspective/.append code={\pgfkeys{/perspective/.cd,#1}},
+  perspective/.default={
+    p={(10,0,0)},
+    q={(0,10,0)},
+    r={(0,0,20)}},
+}
+
+\tikzset{
+  3d view/.code 2 args={
+    % Set elevation and azimuth angles
+    \pgfmathsetmacro\pgf at view@az{#1}
+    \pgfmathsetmacro\pgf at view@el{#2}
+    % Calculate projections of rotation matrix
+    \pgfmathsetmacro\pgf at xvec@x{cos(\pgf at view@az)}
+    \pgfmathsetmacro\pgf at xvec@y{-sin(\pgf at view@az)*sin(\pgf at view@el)}
+    \pgfmathsetmacro\pgf at yvec@x{sin(\pgf at view@az)}
+    \pgfmathsetmacro\pgf at yvec@y{cos(\pgf at view@az)*sin(\pgf at view@el)}
+    \pgfmathsetmacro\pgf at zvec@x{+0}
+    \pgfmathsetmacro\pgf at zvec@y{cos(\pgf at view@el)}
+    % Set base vectors
+    \pgfsetxvec{\pgfpoint{\pgf at xvec@x cm}{\pgf at xvec@y cm}}
+    \pgfsetyvec{\pgfpoint{\pgf at yvec@x cm}{\pgf at yvec@y cm}}
+    \pgfsetzvec{\pgfpoint{\pgf at zvec@x cm}{\pgf at zvec@y cm}}
+  },
+  3d view/.default={-30}{15},
+  isometric view/.style={3d view={-45}{atan(1/sqrt(2))}},
+}
+
+\endinput


Property changes on: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/libraries/tikzlibraryperspective.code.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/frontendlayer/tikz/tikz.code.tex	2019-04-04 20:55:44 UTC (rev 50758)
@@ -822,7 +822,7 @@
                 tikz at label@angle = #2,
                 anchor=@auto,
                 #1,
-                tikz at label@post = \tikz at label@distance] {\iftikz at handle@active at nodes\expandafter\scantokens\else\expandafter\pgfutil at firstofone\fi{#3\ignorespaces}}
+                tikz at label@post = \tikz at label@distance] {\iftikz at handle@active at nodes\expandafter\pgfutil at scantokens\else\expandafter\pgfutil at firstofone\fi{#3\ignorespaces}}
           \pgfextra{\global\let\tikz at last@fig at name=\tikz at save@last at fig@name}
         \egroup}}}%
 \endgroup
@@ -852,7 +852,7 @@
               tikz at label@angle = #2,
               anchor=@auto,
               #1,
-              tikz at label@post = \tikz at label@distance] {\iftikz at handle@active at nodes\expandafter\scantokens\else\expandafter\pgfutil at firstofone\fi{#3\ignorespaces}}
+              tikz at label@post = \tikz at label@distance] {\iftikz at handle@active at nodes\expandafter\pgfutil at scantokens\else\expandafter\pgfutil at firstofone\fi{#3\ignorespaces}}
         \pgfextra{\global\let\tikz at last@fig at name=\tikz at save@last at fig@name}
       \egroup}}}%
 
@@ -1656,6 +1656,14 @@
 %
 % Main TikZ Environment
 %
+\newif\iftikz at inside@picture
+\tikz at inside@picturefalse
+\def\tikz at check@inside at picture{%
+  \iftikz at inside@picture%
+    \pgfwarning{Nesting tikzpictures is NOT supported}%
+  \fi%
+  \tikz at inside@picturetrue%
+}
 
 \def\tikzpicture{%
   \begingroup%
@@ -1662,6 +1670,7 @@
     \tikz at startup@env%
     \tikz at collect@scope at anims\tikz at picture}%
 \def\tikz at picture[#1]{%
+  %\tikz at check@inside at picture%
   \pgfpicture%
   \let\tikz at atbegin@picture=\pgfutil at empty%
   \let\tikz at atend@picture=\pgfutil at empty%
@@ -2009,6 +2018,7 @@
 % settings.
 
 \def\tikz at command@path{%
+  \global\let\tikz at intersect@namedpaths=\pgfutil at empty% clear intersections
   \let\tikz at signal@path=\tikz at signal@path% for detection at begin of matrix cell
   \pgfutil at ifnextchar[{\tikz at check@earg}%]
   {\pgfutil at ifnextchar<{\tikz at doopt}{\tikz@@command at path}}}%
@@ -2769,7 +2779,7 @@
     \iftikz at collect@pic%
       \expandafter\def\expandafter\tikz at collected@onpath\expandafter{\tikz at collected@onpath{#1}}%
     \else%
-      \expandafter\def\expandafter\tikz at collected@onpath\expandafter{\tikz at collected@onpath{\scantokens{#1}}}%
+      \expandafter\def\expandafter\tikz at collected@onpath\expandafter{\tikz at collected@onpath{\pgfutil at scantokens{#1}}}%
     \fi%
   \else%
     \expandafter\def\expandafter\tikz at collected@onpath\expandafter{\tikz at collected@onpath{#1}}%
@@ -3823,6 +3833,8 @@
     {\tikzerror{Unknown shape ``\tikz at shape.'' Using ``rectangle'' instead}%
       \def\tikz at shape{rectangle}}%
     {}%
+    \expandafter\xdef\csname tikz at dcl@coord@\tikz at fig@name\endcsname{%
+      \csname tikz at scan@point at coordinate\endcsname}%
     \tikzset{every \tikz at shape\space node/.try}%
     \tikz at node@textfont%
     \tikz at node@begin at hook%
@@ -3869,8 +3881,8 @@
             \else%
               \pgfutil at colorlet{.}{\tikz at textcolor}%
             \fi%
-		% FIXME : this here is the proposed solution for https://sourceforge.net/p/pgf/bugs/362/
-		% bit it caused https://sourceforge.net/p/pgf/bugs/503/ .
+        % FIXME : this here is the proposed solution for <https://sourceforge.net/p/pgf/bugs/362/>
+        % but it caused <https://sourceforge.net/p/pgf/bugs/503/>.
         %   \pgfutil at color{.}%
             \setbox\tikz at figbox=\box\pgfutil at voidb@x%
             \setbox\tikz at figbox@bg=\box\pgfutil at voidb@x%
@@ -4326,7 +4338,7 @@
     \iftikz at node@is at pic%
       \expandafter\def\expandafter\tikz at nodes@collect\expandafter{\tikz at nodes@collect{#1}}%
     \else%
-      \expandafter\def\expandafter\tikz at nodes@collect\expandafter{\tikz at nodes@collect{\scantokens{#1}}}%
+      \expandafter\def\expandafter\tikz at nodes@collect\expandafter{\tikz at nodes@collect{\pgfutil at scantokens{#1}}}%
     \fi%
   \else%
     \expandafter\def\expandafter\tikz at nodes@collect\expandafter{\tikz at nodes@collect{#1}}%
@@ -4665,7 +4677,7 @@
   \tikz at p@c at s}%
 \def\tikz at p@c at s@group#1{%
   \iftikz at handle@active at nodes%
-    \expandafter\def\expandafter\tikz at child@node at text\expandafter{\tikz at child@node at text{\scantokens{#1}}}%
+    \expandafter\def\expandafter\tikz at child@node at text\expandafter{\tikz at child@node at text{\pgfutil at scantokens{#1}}}%
   \else%
     \expandafter\def\expandafter\tikz at child@node at text\expandafter{\tikz at child@node at text{#1}}
   \fi%
@@ -5161,8 +5173,8 @@
   {\tikz at scan@no at calculator#1(}%
 }%
 \def\tikz at scan@no at calculator#1(#2){%
-  \edef\tikz at temp{(#2)}%
-  \expandafter\tikz@@scan@@no at calculator\expandafter#1\tikz at temp%
+  \edef\tikz at scan@point at coordinate{(#2)}%
+  \expandafter\tikz@@scan@@no at calculator\expandafter#1\tikz at scan@point at coordinate%
 }%
 \def\tikz@@scan@@no at calculator#1(#2){%
   \pgfutil at in@{cs:}{#2}%
@@ -5326,6 +5338,7 @@
       \def\tikz at shapeborder@name{\tikz at pp@name{#2}}%
     \fi%
   \fi%
+  \expandafter\let\expandafter\tikz at declared@coordinate\csname tikz at dcl@coord@\tikz at pp@name{#2}\endcsname
   \edef\tikz at marshal{\noexpand#1{\noexpand\pgfqpoint{\the\pgf at x}{\the\pgf at y}}}%
   \tikz at marshal%
 }%

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/bindings/Binding.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/bindings/Binding.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/bindings/Binding.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -38,7 +38,7 @@
 --
 -- @field storage A |Storage| storing the information passed from the
 -- display layer. The interpretation of this left to the actual
--- binding. 
+-- binding.
 
 local Binding = {
   storage = Storage.newTableStorage ()
@@ -71,7 +71,7 @@
 -- of the display layer to make the parameter |t.key| available to the
 -- parsing process. Furthermore, if |t.initial| is not |nil|, the
 -- display layer must convert it into a value that is stored as the
--- initial value and call |InterfaceToDisplay.setOptionInitial|. 
+-- initial value and call |InterfaceToDisplay.setOptionInitial|.
 --
 -- @param t See |InterfaceToAlgorithms.declare| for details.
 
@@ -105,7 +105,7 @@
 
 
 ---
--- This function and the correspoding |...Stop...| functions are
+-- This function and the corresponding |...Stop...| functions are
 -- called whenever a collection kind should be rendered. See
 -- |InterfaceToDisplay.render_collections| for details.
 --
@@ -141,7 +141,7 @@
 
 
 ---
--- This function and the correspoding |...Stop...| functions are
+-- This function and the corresponding |...Stop...| functions are
 -- called whenever a vertex should be rendered. See
 -- |InterfaceToDisplay.render_vertices| for details.
 --
@@ -191,7 +191,7 @@
 
 
 ---
--- This function and the correspoding |...Stop...| functions are
+-- This function and the corresponding |...Stop...| functions are
 -- called whenever an edge should be rendered. See
 -- |InterfaceToDisplay.render_edges| for details.
 --
@@ -237,21 +237,22 @@
 -- vertex. This call will be made while an algorithm is running. It is
 -- now the job of the binding to cause the display layer to create the
 -- node. This is done by calling the |yield| method of the scope's
--- coroutine. 
+-- coroutine.
 --
 -- @param init  A table of initial values for the node. The following
 -- fields will be used:
+-- %
 -- \begin{itemize}
--- \item |name| If present, this name will be given to the
--- node. If not present, an iternal name is generated. Note that,
--- unless the node is a subgraph node, this name may not be the name
--- of an already present node of the graph; in this case an error
--- results. 
--- \item |shape| If present, a shape of the node.
--- \item |generated_options| A table that is passed back to the
--- display layer as a list of key-value pairs.
--- \item |text| The text of the node, to be passed back to the
--- higher layer. This is what should be displayed as the node's text.
+--   \item |name| If present, this name will be given to the
+--     node. If not present, an internal name is generated. Note that,
+--     unless the node is a subgraph node, this name may not be the name
+--     of an already present node of the graph; in this case an error
+--     results.
+--   \item |shape| If present, a shape of the node.
+--   \item |generated_options| A table that is passed back to the
+--     display layer as a list of key--value pairs.
+--   \item |text| The text of the node, to be passed back to the
+--     higher layer. This is what should be displayed as the node's text.
 -- \end{itemize}
 
 function Binding:createVertex(init)

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/bindings/BindingToPGF.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/bindings/BindingToPGF.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/bindings/BindingToPGF.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,7 +20,7 @@
 -- drawing system to the \pgfname\ display system by overriding (that
 -- is, implementing) the methods of the |Binding| class. As a typical
 -- example, consider the implementation of the function |renderVertex|:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --function BindingToPGF:renderVertex(v)
 --  local info = assert(self.infos[v], "thou shalt not modify the syntactic digraph")
@@ -44,7 +44,7 @@
 -- (new) position for the node. For almost all methods of the
 -- |Binding| class there is a corresponding ``callback'' macro on the
 -- \TeX\ layer, all of which are implemented in the \pgfname\ library
--- |graphdrawing|. For details on these callbacks, 
+-- |graphdrawing|. For details on these callbacks,
 -- please consult the code of that file and of the class
 -- |BindingToPGF| (they are not documented here since they are local
 -- to the binding and should not be called by anyone other than the
@@ -81,7 +81,7 @@
 
 function BindingToPGF:resumeGraphDrawingCoroutine(text)
   tex.print(text)
-  tex.print("\\pgfgdresumecoroutinetrue") 
+  tex.print("\\pgfgdresumecoroutinetrue")
 end
 
 
@@ -108,7 +108,7 @@
 
 function BindingToPGF:renderCollection(collection)
   tex.print("\\pgfgdcallbackrendercollection{".. collection.kind .. "}{"
-	    .. table_in_pgf_syntax(collection.generated_options) .. "}")
+        .. table_in_pgf_syntax(collection.generated_options) .. "}")
 end
 
 function BindingToPGF:renderCollectionStartKind(kind, layer)
@@ -133,11 +133,11 @@
 
 function BindingToPGF:everyVertexCreation(v)
   local info = self.storage[v]
-  
+
   -- Save the box!
   box_count = box_count + 1
   boxes[box_count] = node.copy_list(tex.box[info.tex_box_number])
-  
+
   -- Special tex stuff, should not be considered by gd algorithm
   info.box_count = box_count
 end
@@ -180,12 +180,12 @@
   end
 end
 
-  
+
 -- Managing edges
 
 function BindingToPGF:renderEdge(e)
   local info = assert(self.storage[e], "thou shalt not modify the syntactic digraph")
-  
+
   local function get_anchor(e, anchor)
     local a = e.options[anchor]
     if a and a ~= "" then
@@ -194,7 +194,7 @@
       return ""
     end
   end
-  
+
   local callback = {
     '\\pgfgdcallbackedge',
     '{', e.tail.name .. get_anchor(e, "tail anchor"), '}',
@@ -205,12 +205,12 @@
     '{', table_in_pgf_syntax(e.generated_options), '}',
     '{'
   }
-  
+
   local i = 1
   while i <= #e.path do
     local c = e.path[i]
     assert (type(c) == "string", "illegal path operand")
-    
+
     if c == "lineto" then
       i = i + 1
       local d = rigid(e.path[i])
@@ -231,7 +231,7 @@
                                                .. to_pt(d2.x) .. ',' .. to_pt(d2.y) .. ')..'
       callback [#callback + 1] = '(' .. to_pt(d3.x) .. ',' .. to_pt(d3.y) .. ')'
       i = i + 1
-    else				     
+    else
       error("illegal operation in edge path")
     end
   end
@@ -238,12 +238,12 @@
 
   callback [#callback + 1] = '}'
   callback [#callback + 1] = '{' .. animations_in_pgf_syntax(e.animations) .. '}'
-  
+
   -- hand TikZ code over to TeX
   tex.print(table.concat(callback))
 end
-      
-      
+
+
 function BindingToPGF:renderEdgesStart()
   tex.print("\\pgfgdcallbackbeginedgeshipout")
 end
@@ -275,12 +275,12 @@
   local prefix = "/graph drawing/"
   local suffix = "/.try"
   return table.concat( lib.imap( t, function(table)
-	   if table.value then
-	     return prefix .. table.key .. suffix .. "={" .. tostring(table.value) .. "}"
-	   else
-	     return prefix .. table.key .. suffix
-	   end
-	 end), ",")
+       if table.value then
+         return prefix .. table.key .. suffix .. "={" .. tostring(table.value) .. "}"
+       else
+         return prefix .. table.key .. suffix
+       end
+     end), ",")
 end
 
 
@@ -288,29 +288,29 @@
   return
     table.concat(
       lib.imap(
-	a,
-	function(animation) 
-	  return "\\pgfanimateattribute{" .. animation.attribute .. "}{whom=pgf at gd," ..
-	    table.concat(
-	      lib.imap (
-		animation.entries,
-		function (entry)
-		  return "entry={" .. entry.t .. "s}{" .. to_pgf(entry.value) .. "}"
-		end
-	      ), ",") ..
-	    "," ..
-	    table.concat(
-	      lib.imap(
-		animation.options or {},
-		function(table)
-		  if table.value then
-		    return table.key .. "={" .. to_pgf(table.value) .. "}"
-		  else
-		    return table.key
-		  end
-	      end), ",")
-	    .. "}"
-	end)
+    a,
+    function(animation)
+      return "\\pgfanimateattribute{" .. animation.attribute .. "}{whom=pgf at gd," ..
+        table.concat(
+          lib.imap (
+        animation.entries,
+        function (entry)
+          return "entry={" .. entry.t .. "s}{" .. to_pgf(entry.value) .. "}"
+        end
+          ), ",") ..
+        "," ..
+        table.concat(
+          lib.imap(
+        animation.options or {},
+        function(table)
+          if table.value then
+            return table.key .. "={" .. to_pgf(table.value) .. "}"
+          else
+            return table.key
+          end
+          end), ",")
+        .. "}"
+    end)
     )
 end
 
@@ -332,12 +332,12 @@
 function path_in_pgf_syntax (p)
 
   local s = {}
-  
+
   local i = 1
   while i <= #p do
     local c = p[i]
     assert (type(c) == "string", "illegal path operand")
-    
+
     if c == "lineto" then
       i = i + 1
       local d = rigid(p[i])
@@ -355,10 +355,10 @@
       local d1, d2, d3 = rigid(p[i+1]), rigid(p[i+2]), rigid(p[i+3])
       i = i + 3
       s [#s + 1] = '\\pgfpathcurveto{\\pgfqpoint{' .. to_pt(d1.x) .. '}{' .. to_pt(d1.y) .. '}}{\\pgfqpoint{'
-	.. to_pt(d2.x) .. '}{' .. to_pt(d2.y) .. '}}{\\pgfqpoint{' 
-	.. to_pt(d3.x) .. '}{' .. to_pt(d3.y) .. '}}'
+        .. to_pt(d2.x) .. '}{' .. to_pt(d2.y) .. '}}{\\pgfqpoint{'
+        .. to_pt(d3.x) .. '}{' .. to_pt(d3.y) .. '}}'
       i = i + 1
-    else				     
+    else
       error("illegal operation in edge path")
     end
   end

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/circular/Tantau2012.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/circular/Tantau2012.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/circular/Tantau2012.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -22,7 +22,7 @@
 declare {
   key       = "simple necklace layout",
   algorithm = Tantau2012,
-  
+
   postconditions = {
     upward_oriented = true
   },
@@ -48,15 +48,15 @@
   local g = self.ugraph
   local vertices = g.vertices
   local n = #vertices
-  
+
   local sib_dists = self:computeNodeDistances ()
   local radii = self:computeNodeRadii()
   local diam, adjusted_radii = self:adjustNodeRadii(sib_dists, radii)
 
-  -- Compute total necessary length. For this, iterate over all 
-  -- consecutive pairs and keep track of the necessary space for 
-  -- this node. We imagine the nodes to be aligned from left to 
-  -- right in a line. 
+  -- Compute total necessary length. For this, iterate over all
+  -- consecutive pairs and keep track of the necessary space for
+  -- this node. We imagine the nodes to be aligned from left to
+  -- right in a line.
   local carry = 0
   local positions = {}
   local function wrap(i) return (i-1)%n + 1 end
@@ -67,11 +67,11 @@
     local node_sep =
       lib.lookup_option('node post sep', vertices[i], g) +
       lib.lookup_option('node pre sep', vertices[wrap(i+1)], g)
-    local arc = node_sep + adjusted_radii[i] + adjusted_radii[wrap(i+1)] 
+    local arc = node_sep + adjusted_radii[i] + adjusted_radii[wrap(i+1)]
     local needed = carry + arc
     local dist = math.sin( arc/diam ) * diam
     needed = needed + math.max ((radii[i] + radii[wrap(i+1)]+node_sep)-dist, 0)
-    carry = math.max(needed-sib_dists[i],0)    
+    carry = math.max(needed-sib_dists[i],0)
   end
   local length = ideal_pos + carry
 
@@ -98,15 +98,15 @@
 
   local missing_length = self.digraph.options['radius'] * 2 * math.pi - sum_length
   if missing_length > 0 then
-     -- Ok, the sib_dists to not add up to the desired minimum value. 
-     -- What should we do? Hmm... We increase all by the missing amount:
-     for i=1,#vertices do
-	sib_dists[i] = sib_dists[i] + missing_length/#vertices
-     end
+    -- Ok, the sib_dists to not add up to the desired minimum value.
+    -- What should we do? Hmm... We increase all by the missing amount:
+    for i=1,#vertices do
+      sib_dists[i] = sib_dists[i] + missing_length/#vertices
+    end
   end
 
   sib_dists.total = math.max(self.digraph.options['radius'] * 2 * math.pi, sum_length)
-  
+
   return sib_dists
 end
 
@@ -130,20 +130,20 @@
   local total = 0
   local max_rad = 0
   for i=1,#radii do
-    total = total + 2*radii[i] 
+    total = total + 2*radii[i]
             + lib.lookup_option('node post sep', self.digraph.vertices[i], self.digraph)
             + lib.lookup_option('node pre sep', self.digraph.vertices[i], self.digraph)
-    max_rad = math.max(max_rad, radii[i])  
+    max_rad = math.max(max_rad, radii[i])
   end
   total = math.max(total, sib_dists.total, max_rad*math.pi)
   local diam = total/(math.pi)
-  
+
   -- Now, adjust the radii:
   local adjusted_radii = {}
   for i=1,#radii do
     adjusted_radii[i] = (math.pi - 2*math.acos(radii[i]/diam))*diam/2
   end
-  
+
   return diam, adjusted_radii
 end
 
@@ -150,4 +150,4 @@
 
 -- done
 
-return Tantau2012
\ No newline at end of file
+return Tantau2012

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/circular/doc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/circular/doc.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/circular/doc.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -19,20 +19,23 @@
 key          "simple necklace layout"
 
 summary
-[[ This simple layout arranges the nodes in a circle, which is
-especially useful for drawing, well, circles of nodes. ]]
+[[
+This simple layout arranges the nodes in a circle, which is
+especially useful for drawing, well, circles of nodes.
+]]
 
 documentation
 [[
 The name |simple necklace layout| is reminiscent of the more general
-``necklace layout,'' a term coined by Speckmann and Verbeek in
+``necklace layout'', a term coined by Speckmann and Verbeek in
 their paper
+%
 \begin{itemize}
-\item
-  Bettina Speckmann and Kevin Verbeek,
-  \newblock Necklace Maps,
-  \newblock \emph{IEEE Transactions on Visualization and Computer
-    Graphics,} 16(6):881--889, 2010. 
+  \item
+    Bettina Speckmann and Kevin Verbeek,
+    \newblock Necklace Maps,
+    \newblock \emph{IEEE Transactions on Visualization and Computer
+      Graphics,} 16(6):881--889, 2010.
 \end{itemize}
 
 For a |simple necklace layout|, the centers of the nodes
@@ -41,7 +44,7 @@
 clockwise). The order of the nodes is the order in which they appear
 in the graph, the edges are not taken into consideration, unless the
 |componentwise| option is given.
-    
+%
 \begin{codeexample}[]
 \tikz[>=spaced stealth']
   \graph [simple necklace layout, grow'=down, node sep=1em,
@@ -49,35 +52,38 @@
   {
     x_1 -> x_2 -> x_3 -> x_4 ->
     x_5 -> "\dots"[draw=none] -> "x_{n-1}" -> x_n -> x_1
-  };    
+  };
 \end{codeexample}
-     
+
 When you give the |componentwise| option, the graph will be
 decomposed into connected components, which are then laid out
 individually and packed using the usual component packing
 mechanisms:
-    
+%
 \begin{codeexample}[]
 \tikz \graph [simple necklace layout] {
   a -- b -- c -- d -- a,
   1 -- 2 -- 3 -- 1
-};    
+};
 \end{codeexample}
+%
 \begin{codeexample}[]
 \tikz \graph [simple necklace layout, componentwise] {
   a -- b -- c -- d -- a,
   1 -- 2 -- 3 -- 1
-};    
+};
 \end{codeexample}
-    
+
 The nodes are placed in such a way that
+%
 \begin{enumerate}
-\item The (angular) distance between the centers of consecutive
-  nodes is at least  |node distance|,
-\item the distance between the borders of consecutive nodes is at
-  least |node sep|, and
-\item the radius is at least |radius|.
+  \item The (angular) distance between the centers of consecutive
+    nodes is at least  |node distance|,
+  \item the distance between the borders of consecutive nodes is at
+    least |node sep|, and
+  \item the radius is at least |radius|.
 \end{enumerate}
+%
 The radius of the circle is chosen near-minimal such that the above
 properties are satisfied. To be more precise, if all nodes are
 circles, the radius is chosen optimally while for, say, rectangular
@@ -101,8 +107,8 @@
           node sep=0pt, node distance=0pt,
           nodes={draw,circle}]
   { 1 -- 2 [minimum size=30pt] -- 3 --
-    4 [minimum size=50pt] -- 5 [minimum size=40pt] -- 6 -- 7 }; 
-  
+    4 [minimum size=50pt] -- 5 [minimum size=40pt] -- 6 -- 7 };
+
   \draw [red] (0,-1.25) circle [];
 \end{tikzpicture}
 ]]
@@ -113,7 +119,7 @@
               node sep=0pt, node distance=1cm,
               nodes={draw,circle}]
 { 1 -- 2 [minimum size=30pt] -- 3 --
-  4 [minimum size=50pt] -- 5 [minimum size=40pt] -- 6 -- 7 }; 
+  4 [minimum size=50pt] -- 5 [minimum size=40pt] -- 6 -- 7 };
 ]]
 
 example
@@ -122,7 +128,7 @@
               node sep=2pt, node distance=0pt,
               nodes={draw,circle}]
 { 1 -- 2 [minimum size=30pt] -- 3 --
-  4 [minimum size=50pt] -- 5 [minimum size=40pt] -- 6 -- 7 }; 
+  4 [minimum size=50pt] -- 5 [minimum size=40pt] -- 6 -- 7 };
 ]]
 
 example
@@ -131,6 +137,6 @@
               node sep=0pt, node distance=0pt,
               nodes={rectangle,draw}]
 { 1 -- 2 [minimum size=30pt] -- 3 --
-  4 [minimum size=50pt] -- 5 [minimum size=40pt] -- 6 -- 7 }; 
+  4 [minimum size=50pt] -- 5 [minimum size=40pt] -- 6 -- 7 };
 ]]
 --------------------------------------------------------------------

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Anchoring.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Anchoring.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Anchoring.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -23,22 +23,22 @@
 -- \emph{absolutely} once all relative positions have been computed. In
 -- case that the graph consists of several unconnected components, the
 -- situation is even more complicated.
--- 
+--
 -- The order in which the algorithm layer determines the node at which
 -- the graph should be anchored:
---
+-- %
 -- \begin{enumerate}
--- \item If the |anchor node=|\meta{node name} option given to the graph
---   as a whole, the graph is anchored at \meta{node name}, provided
---   there is a node of this name in the graph. (If there is no node of
---   this name or if it is misspelled, the effect is the same as if this
---   option had not been given at all.)
--- \item Otherwise, if there is a node where the |anchor here| option is
---   specified, the first node with this option set is used.
--- \item Otherwise, if there is a node where the |desired at| option is
---   set (perhaps implicitly through keys like |x|), the first such node
---   is used.
--- \item Finally, in all other cases, the first node is used.
+--   \item If the |anchor node=|\meta{node name} option given to the graph
+--     as a whole, the graph is anchored at \meta{node name}, provided
+--     there is a node of this name in the graph. (If there is no node of
+--     this name or if it is misspelled, the effect is the same as if this
+--     option had not been given at all.)
+--   \item Otherwise, if there is a node where the |anchor here| option is
+--     specified, the first node with this option set is used.
+--   \item Otherwise, if there is a node where the |desired at| option is
+--     set (perhaps implicitly through keys like |x|), the first such node
+--     is used.
+--   \item Finally, in all other cases, the first node is used.
 -- \end{enumerate}
 --
 -- In the above description, the ``first'' node refers to the node first
@@ -45,7 +45,7 @@
 -- encountered in the specification of the graph.
 --
 -- Once the node has been determined, the graph is shifted so that
--- this node lies at the poistion specified by |anchor at|.
+-- this node lies at the position specified by |anchor at|.
 --
 -- @end
 
@@ -70,7 +70,7 @@
   type = "coordinate",
   documentation_in = "pgf.gd.control.doc"
 }
-       
+
 ---
 declare {
   key = "anchor node",

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentAlign.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentAlign.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentAlign.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -47,22 +47,22 @@
 --
 -- @end
 
-  
+
 ---
-  
+
 declare {
   key = "align here",
   type = "boolean",
 
-  summary = [["  
-       When this option is given to a node, this alignment line will go
-       through the origin of this node. If this option is passed to more
-       than one node of a component, the node encountered first in the
-       component is used.
+  summary = [["
+    When this option is given to a node, this alignment line will go
+    through the origin of this node. If this option is passed to more
+    than one node of a component, the node encountered first in the
+    component is used.
   "]],
-  examples = [["     
-       \tikz \graph [binary tree layout, nodes={draw}]
-         { a, b -- c[align here], d -- e[second, align here] -- f };
+  examples = [["
+    \tikz \graph [binary tree layout, nodes={draw}]
+      { a, b -- c[align here], d -- e[second, align here] -- f };
   "]]
 }
 
@@ -72,33 +72,39 @@
   key = "component align",
   type = "string",
   initial = "first node",
-  
+
   summary = [["
     Specifies a ``strategy'' for the alignment of components.
   "]],
-  documentation = [["  
-       The following values are permissible:
-       \begin{itemize}
-       \item \declare{|first node|}
-           In each component, the alignment line goes through the center of
-           the first node of the component encountered during specification
-           of the component.
+  documentation = [["
+    The following values are permissible:
+    %
+    \begin{itemize}
+      \item \declare{|first node|}
+
+        In each component, the alignment line goes through the center of
+        the first node of the component encountered during specification
+        of the component.
+        %
 \begin{codeexample}[]
 \tikz \graph [binary tree layout, nodes={draw},
               component align=first node]
   { a, b -- c, d -- e[second] -- f };
 \end{codeexample}
-         \item \declare{|center|}
-    
-           The nodes of the component are projected onto the shift line. The
-           alignment line is now chosen so that it is exactly in the middle
-           between the maximum and minimum value that the projected nodes
-           have on the shift line.
+        %
+      \item \declare{|center|}
+
+        The nodes of the component are projected onto the shift line. The
+        alignment line is now chosen so that it is exactly in the middle
+        between the maximum and minimum value that the projected nodes
+        have on the shift line.
+        %
 \begin{codeexample}[]
 \tikz \graph [binary tree layout, nodes={draw},
               component align=center]
   { a, b -- c, d -- e[second] -- f };
 \end{codeexample}
+        %
 \begin{codeexample}[]
 \tikz \graph [binary tree layout, nodes={draw},
               component direction=90,
@@ -105,17 +111,20 @@
               component align=center]
   { a, b -- c, d -- e[second] -- f };
 \end{codeexample}
-         \item \declare{|counterclockwise|}
-      
-           As for |center|, we project the nodes of the component onto the
-           shift line. The alignment line is now chosen so that it goes
-           through the center of the node whose center has the highest
-           projected value.
+        %
+      \item \declare{|counterclockwise|}
+
+        As for |center|, we project the nodes of the component onto the
+        shift line. The alignment line is now chosen so that it goes
+        through the center of the node whose center has the highest
+        projected value.
+        %
 \begin{codeexample}[]
 \tikz \graph [binary tree layout, nodes={draw},
               component align=counterclockwise]
   { a, b -- c, d -- e[second] -- f };
 \end{codeexample}
+        %
 \begin{codeexample}[]
 \tikz \graph [binary tree layout, nodes={draw},
               component direction=90,
@@ -122,17 +131,19 @@
               component align=counterclockwise]
  { a, b -- c, d -- e[second] -- f };
 \end{codeexample}
-           The name |counterclockwise| is intended to indicate that the align
-           line goes through the node that comes last if we go from the
-           alignment direction in a counter-clockwise direction.
-         \item \declare{|clockwise|}
-          
-           Works like |counterclockwise|, only in the other direction:
+        The name |counterclockwise| is intended to indicate that the align
+        line goes through the node that comes last if we go from the
+        alignment direction in a counter-clockwise direction.
+      \item \declare{|clockwise|}
+
+        Works like |counterclockwise|, only in the other direction:
+        %
 \begin{codeexample}[]
 \tikz \graph [binary tree layout, nodes={draw},
               component align=clockwise]
   { a, b -- c, d -- e[second] -- f };
 \end{codeexample}
+        %
 \begin{codeexample}[]
 \tikz \graph [binary tree layout, nodes={draw},
               component direction=90,
@@ -139,14 +150,16 @@
               component align=clockwise]
   { a, b -- c, d -- e[second] -- f };
 \end{codeexample}
-         \item \declare{|counterclockwise bounding box|}
-      
-           This method is quite similar to |counterclockwise|, only the
-           alignment line does not go through the center of the node with a
-           maximum projected value on the shift line, but through the maximum
-           value of the projected bounding boxes. For a left-to-right
-           packing, this means that the components are aligned so that the
-           bounding boxes of the components are aligned at the top.
+        %
+      \item \declare{|counterclockwise bounding box|}
+
+        This method is quite similar to |counterclockwise|, only the
+        alignment line does not go through the center of the node with a
+        maximum projected value on the shift line, but through the maximum
+        value of the projected bounding boxes. For a left-to-right
+        packing, this means that the components are aligned so that the
+        bounding boxes of the components are aligned at the top.
+        %
 \begin{codeexample}[]
 \tikz \graph [tree layout, nodes={draw, align=center},
               component sep=0pt,
@@ -157,10 +170,11 @@
               component align=counterclockwise bounding box]
   { a, "high\\node" -- b};
 \end{codeexample}
-         \item \declare{|clockwise bounding box|}
-       
-         Works like |counterclockwise bounding box|.
-       \end{itemize}
+        %
+      \item \declare{|clockwise bounding box|}
+
+        Works like |counterclockwise bounding box|.
+    \end{itemize}
   "]]
 }
 
@@ -173,16 +187,16 @@
     { key = "component align", value = "counterclockwise"},
   },
 
-  summary = [["  
-         Shorthand for |component direction=right| and
-         |component align=counterclockwise|. This means that, as the name
-         suggest, the components will be placed left-to-right and they are
-         aligned such that their top nodes are in a line.
+  summary = [["
+    Shorthand for |component direction=right| and
+    |component align=counterclockwise|. This means that, as the name
+    suggest, the components will be placed left-to-right and they are
+    aligned such that their top nodes are in a line.
   "]],
-  examples = [["       
-       \tikz \graph [tree layout, nodes={draw, align=center},
-                     components go right top aligned]
-         { a, "high\\node" -- b};
+  examples = [["
+    \tikz \graph [tree layout, nodes={draw, align=center},
+                  components go right top aligned]
+      { a, "high\\node" -- b};
   "]]
 }
 
@@ -194,17 +208,17 @@
     { key = "component direction", value=0},
     { key = "component align", value = "counterclockwise bounding box"},
   },
-  
-  summary = [["  
-       Like |components go right top aligned|, but with
-       |component align| set to |counterclockwise| |bounding box|. This means that the
-       components will be aligned with their bounding boxed being
-       top-aligned.
+
+  summary = [["
+    Like |components go right top aligned|, but with
+    |component align| set to |counterclockwise| |bounding box|. 
+    This means that the components will be aligned with their bounding 
+    boxed being top-aligned.
   "]],
   examples = [["
-       \tikz \graph [tree layout, nodes={draw, align=center},
-                     components go right absolute top aligned]
-         { a, "high\\node" -- b};
+    \tikz \graph [tree layout, nodes={draw, align=center},
+                  components go right absolute top aligned]
+      { a, "high\\node" -- b};
   "]]
 }
 
@@ -216,7 +230,7 @@
     { key = "component direction", value=0},
     { key = "component align", value = "clockwise"},
   },
-  
+
   summary = "See the other |components go ...| keys."
 }
 
@@ -229,7 +243,7 @@
     { key = "component direction", value=0},
     { key = "component align", value = "clockwise bounding box"},
   },
-  
+
   summary = "See the other |components go ...| keys."
 }
 
@@ -242,7 +256,7 @@
     { key = "component direction", value=0},
     { key = "component align", value = "center"},
   },
-  
+
   summary = "See the other |components go ...| keys."
 }
 
@@ -255,11 +269,11 @@
     { key = "component direction", value=0},
     { key = "component align", value = "first node"},
   },
-  
-  summary = [["  
-       Shorthand for |component direction=right| and
-       |component align=first node|.
-   "]]
+
+  summary = [["
+    Shorthand for |component direction=right| and
+    |component align=first node|.
+  "]]
  }
 
 
@@ -271,13 +285,13 @@
     { key = "component direction", value=180},
     { key = "component align", value = "clockwise"},
   },
-  
+
   summary = "See the other |components go ...| keys.",
 
-  examples = [["  
-       \tikz \graph [tree layout, nodes={draw, align=center},
-                     components go left top aligned]
-         { a, "high\\node" -- b};
+  examples = [["
+    \tikz \graph [tree layout, nodes={draw, align=center},
+                  components go left top aligned]
+      { a, "high\\node" -- b};
   "]]
 }
 
@@ -290,7 +304,7 @@
     { key = "component direction", value=180},
     { key = "component align", value = "clockwise bounding box"},
   },
-  
+
   summary = "See the other |components go ...| keys."
 }
 
@@ -304,7 +318,7 @@
     { key = "component direction", value=180},
     { key = "component align", value = "counterclockwise"},
   },
-  
+
   summary = "See the other |components go ...| keys."
 }
 
@@ -318,7 +332,7 @@
     { key = "component direction", value=180},
     { key = "component align", value = "counterclockwise bounding box"},
   },
-  
+
   summary = "See the other |components go ...| keys."
 }
 
@@ -360,17 +374,15 @@
   },
   summary = "See the other |components go ...| keys.",
 
-  examples = {
-    [["  
-       \tikz \graph [tree layout, nodes={draw, align=center},
-                     components go down left aligned]
-         { a, hello -- {world,s} };
-    "]],
-    [["
-       \tikz \graph [tree layout, nodes={draw, align=center},
-                     components go up absolute left aligned]
-         { a, hello -- {world,s}};
-    "]]
+  examples = {[["
+    \tikz \graph [tree layout, nodes={draw, align=center},
+                  components go down left aligned]
+      { a, hello -- {world,s} };
+  "]],[["
+    \tikz \graph [tree layout, nodes={draw, align=center},
+                  components go up absolute left aligned]
+      { a, hello -- {world,s}};
+  "]]
   }
 }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentDirection.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentDirection.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentDirection.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -25,35 +25,32 @@
   type = "direction",
   initial = "0",
 
-  summary = [["  
-      The \meta{angle} is used to determine the relative position of each
-      component relative to the previous one. The direction need not be a
-      multiple of |90|. As usual, you can use texts like |up| or
-      |right| instead of a  number.
+  summary = [["
+    The \meta{angle} is used to determine the relative position of each
+    component relative to the previous one. The direction need not be a
+    multiple of |90|. As usual, you can use texts like |up| or
+    |right| instead of a number.
   "]],
-  documentation = [["     
-      As the examples show, the direction only has an influence on the
-      relative positions of the components, not on the direction of growth
-      inside the components. In particular, the components are not rotated
-      by this option in any way. You can use the |grow| option or |orient|
-      options to orient individual components.
+  documentation = [["
+    As the examples show, the direction only has an influence on the
+    relative positions of the components, not on the direction of growth
+    inside the components. In particular, the components are not rotated
+    by this option in any way. You can use the |grow| option or |orient|
+    options to orient individual components.
   "]],
-  examples = {
-    [["
-       \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
-                     component direction=left]
-         { a, b, c -- d -- e, f -- g };
-    "]],
-    [["
-       \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
-                     component direction=10]
-         { a, b, c -- d -- e, f -- g };
-    "]],
-    [["
-       \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
-                     component direction=up]
-         { a, b, c [grow=right] -- d -- e, f[grow=45] -- g };
-    "]]
+  examples = {[["
+    \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
+                  component direction=left]
+      { a, b, c -- d -- e, f -- g };
+  "]],[["
+    \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
+                  component direction=10]
+      { a, b, c -- d -- e, f -- g };
+  "]],[["
+    \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
+                  component direction=up]
+       { a, b, c [grow=right] -- d -- e, f[grow=45] -- g };
+  "]]
   }
 }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentDistance.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentDistance.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentDistance.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -23,7 +23,7 @@
 --
 -- @end
 
-  
+
 ---
 
 declare {
@@ -31,70 +31,74 @@
   type = "string",
   initial = "skyline",
 
-  documentation = [["  
-       Given two components, their distance is computed as follows in
-         depencende of \meta{method}:
-         \begin{itemize}
-         \item \declare{|rectangular|}
-      
-           Imagine a bounding box to be drawn around both components. They
-           are then shifted such that the padding (separating distance)
-           between the two boxes is the current value of |component sep|.
-       \begin{codeexample}[]
-       \tikz \graph [tree layout, nodes={draw}, component sep=0pt,
-                     component packing=rectangular]
-         { a -- long text, longer text -- b};
-       \end{codeexample}
-         \item \declare{|skyline|}
-      
-           The ``skyline method'' is used to compute the distance. It works
-           as follows: For simplicity, assume that the component direction is
-           right (other case work similary, only everything is
-           rotated). Imaging the second  component to be placed far right
-           beyond the first component. Now start moving the second component
-           back to the left until one of the nodes of the second component
-           touches a node of the first component, and stop. Again, the
-           padding |component sep| can be used to avoid the nodes actually
-           touching each other. 
-        
-       \begin{codeexample}[]
-       \tikz \graph [tree layout, nodes={draw}, component sep=0pt,
-                     level distance=1.5cm,
-                     component packing=skyline]
-         { a -- long text, longer text -- b};
-       \end{codeexample}
-      
-           In order to avoid nodes of the second component ``passing through
-           a hole in the first component,'' the actual algorithm is a bit
-           more complicated: For both components, a ``skyline'' is
-           computed. For the first component, consider an arbitrary
-           horizontal line. If there are one or more nodes on this line, the
-           rightmost point on any of the bounding boxes of these nodes will
-           be the point on the skyline of the first component for this
-           line. Similarly, for the second component, for each horizontal
-           level the skyline is given by the leftmost point on any of the
-           bounding boxes intersecting the line.
-      
-           Now, the interesting case are horizontal lines that do not
-           intersect any of the nodes of the first and/or second
-           component. Such lines represent ``holes'' in the skyline. For
-           them, the following rule is used: Move the horizontal line upward
-           and downward as little as possible until a height is reached where
-           there is a skyline defined. Then the skyline position on the
-           original horizontal line is the skyline position at the reached
-           line, minus (or, for the second component, plus) the distance by
-           which the line was moved. This means that the holes are ``filled
-           up by slanted roofs.''
-       \begin{codeexample}[]
-       \begin{tikzpicture}
-         \graph [tree layout, nodes={draw}, component sep=0pt,
-                 component packing=skyline]
-         { a -- long text, longer text -- b};
-         \draw[red] (long text.north east) -- ++(north west:1cm);
-       \end{tikzpicture}
-       \end{codeexample}
-      
-       \end{itemize}
+  documentation = [["
+    Given two components, their distance is computed as follows in
+    dependence of \meta{method}:
+    %
+    \begin{itemize}
+      \item \declare{|rectangular|}
+
+        Imagine a bounding box to be drawn around both components. They
+        are then shifted such that the padding (separating distance)
+        between the two boxes is the current value of |component sep|.
+        %
+        \begin{codeexample}[]
+        \tikz \graph [tree layout, nodes={draw}, component sep=0pt,
+                      component packing=rectangular]
+          { a -- long text, longer text -- b};
+        \end{codeexample}
+          %
+      \item \declare{|skyline|}
+
+        The ``skyline method'' is used to compute the distance. It works
+        as follows: For simplicity, assume that the component direction is
+        right (other case work similarly, only everything is
+        rotated). Imaging the second  component to be placed far right
+        beyond the first component. Now start moving the second component
+        back to the left until one of the nodes of the second component
+        touches a node of the first component, and stop. Again, the
+        padding |component sep| can be used to avoid the nodes actually
+        touching each other.
+        %
+        \begin{codeexample}[]
+        \tikz \graph [tree layout, nodes={draw}, component sep=0pt,
+                      level distance=1.5cm,
+                      component packing=skyline]
+          { a -- long text, longer text -- b};
+        \end{codeexample}
+
+        In order to avoid nodes of the second component ``passing through
+        a hole in the first component'', the actual algorithm is a bit
+        more complicated: For both components, a ``skyline'' is
+        computed. For the first component, consider an arbitrary
+        horizontal line. If there are one or more nodes on this line, the
+        rightmost point on any of the bounding boxes of these nodes will
+        be the point on the skyline of the first component for this
+        line. Similarly, for the second component, for each horizontal
+        level the skyline is given by the leftmost point on any of the
+        bounding boxes intersecting the line.
+
+        Now, the interesting case are horizontal lines that do not
+        intersect any of the nodes of the first and/or second
+        component. Such lines represent ``holes'' in the skyline. For
+        them, the following rule is used: Move the horizontal line upward
+        and downward as little as possible until a height is reached where
+        there is a skyline defined. Then the skyline position on the
+        original horizontal line is the skyline position at the reached
+        line, minus (or, for the second component, plus) the distance by
+        which the line was moved. This means that the holes are ``filled
+        up by slanted roofs''.
+        %
+        \begin{codeexample}[]
+        \begin{tikzpicture}
+          \graph [tree layout, nodes={draw}, component sep=0pt,
+                  component packing=skyline]
+          { a -- long text, longer text -- b};
+          \draw[red] (long text.north east) -- ++(north west:1cm);
+        \end{tikzpicture}
+        \end{codeexample}
+
+    \end{itemize}
   "]]
 }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentOrder.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentOrder.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/ComponentOrder.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -13,8 +13,8 @@
 local declare       = require "pgf.gd.interface.InterfaceToAlgorithms".declare
 
 
-  
 
+
 ---
 -- @section subsubsection {Ordering the Components}
 --
@@ -33,46 +33,44 @@
   initial = "by first specified node",
 
   summary = [["
-      Selects a ``strategy'' for ordering the components. By default,
-      they are ordered in the way they appear in the input.
+    Selects a ``strategy'' for ordering the components. By default,
+    they are ordered in the way they appear in the input.
   "]],
-  documentation = [["  
-       The following values are permissible for \meta{strategy}
-       \begin{itemize}
-       \item \declare{|by first specified node|}
-      
-         The components are ordered ``in the way they appear in the input
-         specification of the graph''. More precisely, for each component
-         consider the node that is first encountered in the description
-         of the graph. Order the components in the same way as these nodes
-         appear in the graph description.
+  documentation = [["
+    The following values are permissible for \meta{strategy}
+    %
+    \begin{itemize}
+      \item \declare{|by first specified node|}
 
-         \item \declare{|increasing node number|}
-        
-           The components are ordered by increasing number of nodes. For
-           components with the same number of nodes, the first node in each
-           component is considered and they are ordered according to the
-           sequence in which these nodes appear in the input.
+        The components are ordered ``in the way they appear in the input
+        specification of the graph''. More precisely, for each component
+        consider the node that is first encountered in the description
+        of the graph. Order the components in the same way as these nodes
+        appear in the graph description.
+      \item \declare{|increasing node number|}
 
-         \item \declare{|decreasing node number|}
-           As above, but in decreasing order.  
-       \end{itemize}
+        The components are ordered by increasing number of nodes. For
+        components with the same number of nodes, the first node in each
+        component is considered and they are ordered according to the
+        sequence in which these nodes appear in the input.
+
+      \item \declare{|decreasing node number|}
+        As above, but in decreasing order.
+    \end{itemize}
   "]],
-  examples = {
-    [["
-        \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
-                     component order=by first specified node]
-          { a, b, c, f -- g, c -- d -- e };
-    "]],
-    [["
-       \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
-                     component order=increasing node number]
-       { a, b, c -- d -- e, f -- g };
-    "]]
+  examples = {[["
+    \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
+                  component order=by first specified node]
+      { a, b, c, f -- g, c -- d -- e };
+  "]],[["
+    \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
+                  component order=increasing node number]
+      { a, b, c -- d -- e, f -- g };
+  "]]
   }
-}  
-       
-       
+}
+
+
 ---
 
 declare {
@@ -81,11 +79,11 @@
     { key = "component order", value = "increasing node number" }
   },
 
-  summary = [["  
-       A shorthand for |component order=increasing node number|.
-   "]]
+  summary = [["
+    A shorthand for |component order=increasing node number|.
+  "]]
  }
-  
+
 ---
 
 declare {
@@ -93,15 +91,15 @@
   use = {
     { key = "component order", value = "decreasing node number" },
   },
-  summary = [["  
-      A shorthand for |component order=decreasing node number|.
+  summary = [["
+    A shorthand for |component order=decreasing node number|.
   "]],
   examples = [["
-       \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
-                     large components first]
-       { a, b, c -- d -- e, f -- g };
+    \tikz \graph [tree layout, nodes={inner sep=1pt,draw,circle},
+                  large components first]
+      { a, b, c -- d -- e, f -- g };
   "]]
-}  
+}
 
 
 return Components
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Components.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Components.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Components.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -35,57 +35,57 @@
 --
 -- The default method for placing the different components works as
 -- follows:
---
+-- %
 -- \begin{enumerate}
--- \item For each component, a layout is determined and the component is
---   oriented as described
---   Section~\ref{subsection-library-graphdrawing-standard-orientation}
---   on the orientation of graphs. 
--- \item The components are sorted as prescribed by the
---   |component order| key.
--- \item The first component is now placed (conceptually) at the
---   origin. (The final position of this and all other components will be
---   determined later, namely in the anchoring phase, but let us imagine
---   that the first component lies at the origin at this point.)
--- \item The second component is now positioned relative to the first
---   component. The ``direction'' in which the next component is placed
---   relative to the first one is determined by the |component direction|
---   key, so components can be placed from left to right or up to down or
---   in any other direction (even something like $30^\circ$). However,
---   both internally and in the following description, we assume that the
---   components are placed from left to right; other directions are
---   achieved by doing some (clever) rotating of the arrangement achieved
---   in this way. 
+--   \item For each component, a layout is determined and the component is
+--     oriented as described
+--     Section~\ref{subsection-library-graphdrawing-standard-orientation}
+--     on the orientation of graphs.
+--   \item The components are sorted as prescribed by the
+--     |component order| key.
+--   \item The first component is now placed (conceptually) at the
+--     origin. (The final position of this and all other components will be
+--     determined later, namely in the anchoring phase, but let us imagine
+--     that the first component lies at the origin at this point.)
+--   \item The second component is now positioned relative to the first
+--     component. The ``direction'' in which the next component is placed
+--     relative to the first one is determined by the |component direction|
+--     key, so components can be placed from left to right or up to down or
+--     in any other direction (even something like $30^\circ$). However,
+--     both internally and in the following description, we assume that the
+--     components are placed from left to right; other directions are
+--     achieved by doing some (clever) rotating of the arrangement achieved
+--     in this way.
 --
---   So, we now wish to place the second component to the right of the
---   first component. The component is first shifted vertically according
---   to some alignment strategy. For instance, it can be shifted so that
---   the topmost node of the first component and the topmost node of the
---   second component have the same vertical position. Alternatively, we
---   might require that certain ``alignment nodes'' in both components
---   have the same vertical position. There are several other strategies,
---   which can be configured using the |component align| key.
+--     So, we now wish to place the second component to the right of the
+--     first component. The component is first shifted vertically according
+--     to some alignment strategy. For instance, it can be shifted so that
+--     the topmost node of the first component and the topmost node of the
+--     second component have the same vertical position. Alternatively, we
+--     might require that certain ``alignment nodes'' in both components
+--     have the same vertical position. There are several other strategies,
+--     which can be configured using the |component align| key.
 --
---   One the vertical position has been fixed, the horizontal position is
---   computed. Here, two different strategies are available: First, image
---   rectangular bounding boxed to be drawn around both components. Then
---   we shift the second component such that the right border of the
---   bounding box of the first component touches the left border of the
---   bounding box of the second component. Instead of having the bounding
---   boxes ``touch,'' we can also have a padding of |component sep|
---   between them. The second strategy is more involved and also known as
---   a ``skyline'' strategy, where (roughly) the components are
---   ``moved together as near as possible so that nodes do not touch''. 
--- \item
---   After the second component has been placed, the third component is
---   considered and positioned relative to the second one, and so on.
--- \item
---   At the end, as hinted at earlier, the whole arrangement is rotate so
---   that instead of ``going right'' the component go in the direction of
---   |component direction|. Note, however, that this rotation applies only
---   to the ``shift'' of the components; the components themselves are
---   not rotated. Fortunately, this whole rotation process happens in the
---   background and the result is normally exactly what you would expect.
+--     One the vertical position has been fixed, the horizontal position is
+--     computed. Here, two different strategies are available: First, image
+--     rectangular bounding boxed to be drawn around both components. Then
+--     we shift the second component such that the right border of the
+--     bounding box of the first component touches the left border of the
+--     bounding box of the second component. Instead of having the bounding
+--     boxes ``touch'', we can also have a padding of |component sep|
+--     between them. The second strategy is more involved and also known as
+--     a ``skyline'' strategy, where (roughly) the components are
+--     ``moved together as near as possible so that nodes do not touch''.
+--   \item
+--     After the second component has been placed, the third component is
+--     considered and positioned relative to the second one, and so on.
+--   \item
+--     At the end, as hinted at earlier, the whole arrangement is rotate so
+--     that instead of ``going right'' the component go in the direction of
+--     |component direction|. Note, however, that this rotation applies only
+--     to the ``shift'' of the components; the components themselves are
+--     not rotated. Fortunately, this whole rotation process happens in the
+--     background and the result is normally exactly what you would expect.
 -- \end{enumerate}
 --
 -- In the following, we go over the different keys that can be used to
@@ -95,35 +95,33 @@
 
 
 ---
-  
+
 declare {
   key = "componentwise",
   type = "boolean",
 
-  summary = [["  
-      For algorithms that also support drawing unconnected graphs, use
-      this key to enforce that the components of the graph are,
-      nevertheless, laid out individually. For algorithms that do not
-      support laying out unconnected graphs, this option has no effect;
-      rather it works as if this option were always set.
+  summary = [["
+    For algorithms that also support drawing unconnected graphs, use
+    this key to enforce that the components of the graph are,
+    nevertheless, laid out individually. For algorithms that do not
+    support laying out unconnected graphs, this option has no effect;
+    rather it works as if this option were always set.
   "]],
-  examples = { 
-    [["
-       \tikz \graph [simple necklace layout]
-         {
-           a -- b -- c -- d -- a,
-           1 -- 2 -- 3 -- 1
-         };    
-    "]],
-    [[",
-       \tikz \graph [simple necklace layout, componentwise]
-         {
-           a -- b -- c -- d -- a,
-           1 -- 2 -- 3 -- 1
-         };    
-    "]]
+  examples = {[["
+    \tikz \graph [simple necklace layout]
+      {
+        a -- b -- c -- d -- a,
+        1 -- 2 -- 3 -- 1
+      };
+    "]],[[",
+    \tikz \graph [simple necklace layout, componentwise]
+      {
+        a -- b -- c -- d -- a,
+        1 -- 2 -- 3 -- 1
+      };
+  "]]
   }
-}  
-  
+}
 
 
+

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Distances.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Distances.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Distances.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -24,24 +24,24 @@
 -- general keys that will be used by many algorithms.
 --
 -- There are different kinds of objects for which you can specify
--- distances and paddings:  
---
+-- distances and paddings:
+-- %
 -- \begin{itemize}
--- \item You specify the ``natural'' distance between nodes
--- connected by an edge using |node distance|, which is also available in
--- normal \tikzname\ albeit for a slightly different purpose. However,
--- not every algorithm will (or can) honour the key; see the description
--- of each algorithm what it will ``make of this option''.
--- \item A number of graph drawing algorithms arrange nodes in layers
--- (or levels); we refer
--- to the nodes on the same layer as siblings (although, in a tree,
--- siblings are only nodes with the same parent; nevertheless we use
--- ``sibling'' loosely also for nodes that are more like ``cousins'').
--- \item  When a graph consists of several connected component, many graph
--- drawing algorithms will layout these components individually. The
--- different components will then be arranged next to each other, see
--- Section~\ref{section-gd-packing} for the details, such that between
--- the nodes of any two components a padding is avaiable.
+--   \item You specify the ``natural'' distance between nodes
+--     connected by an edge using |node distance|, which is also available in
+--     normal \tikzname\ albeit for a slightly different purpose. However,
+--     not every algorithm will (or can) honor the key; see the description
+--     of each algorithm what it will ``make of this option''.
+--   \item A number of graph drawing algorithms arrange nodes in layers
+--     (or levels); we refer
+--     to the nodes on the same layer as siblings (although, in a tree,
+--     siblings are only nodes with the same parent; nevertheless we use
+--     ``sibling'' loosely also for nodes that are more like ``cousins'').
+--   \item When a graph consists of several connected component, many graph
+--     drawing algorithms will layout these components individually. The
+--     different components will then be arranged next to each other, see
+--     Section~\ref{section-gd-packing} for the details, such that between
+--     the nodes of any two components a padding is available.
 -- \end{itemize}
 --
 -- @end
@@ -56,23 +56,23 @@
   type = "length",
   initial = "1cm",
 
-  summary = [["  
-       This is minimum distance that the centers of nodes connected by an
-       edge should have. It will not always be possible to satisfy this
-       desired distance, for instance in case the nodes are too big. In
-       this case, the \meta{length} is just considered as a lower bound.
+  summary = [["
+    This is minimum distance that the centers of nodes connected by an
+    edge should have. It will not always be possible to satisfy this
+    desired distance, for instance in case the nodes are too big. In
+    this case, the \meta{length} is just considered as a lower bound.
   "]],
   examples = [["
-       \begin{tikzpicture}
-         \graph [simple necklace layout,  node distance=1cm, node sep=0pt,
-                 nodes={draw,circle,as=.}]
-         {
-           1 -- 2 [minimum size=2cm] -- 3 --
-           4 -- 5 -- 6 -- 7 --[orient=up] 8
-         };
-         \draw [red,|-|] (1.center) -- ++(0:1cm);
-         \draw [red,|-|] (5.center) -- ++(180:1cm);
-       \end{tikzpicture}
+    \begin{tikzpicture}
+      \graph [simple necklace layout,  node distance=1cm, node sep=0pt,
+              nodes={draw,circle,as=.}]
+      {
+        1 -- 2 [minimum size=2cm] -- 3 --
+        4 -- 5 -- 6 -- 7 --[orient=up] 8
+      };
+      \draw [red,|-|] (1.center) -- ++(0:1cm);
+      \draw [red,|-|] (5.center) -- ++(180:1cm);
+    \end{tikzpicture}
   "]]
 }
 
@@ -84,26 +84,24 @@
   type = "length",
   initial = ".333em",
 
-  summary = [["  
-       This is a minimum ``padding'' or ``separation'' between the border
-       of nodes connected by an edge. Thus, if nodes are so big that nodes
-       with a distance of |node distance| would overlap (or
-       just come with \meta{dimension} distance of one another), their
-       distance is enlarged so that this distance is still satisfied.
-       The |pre| means that the padding is added to the node ``at the
-       front.'' This make sense only for some algorithms, like for a
-       simple necklace layout.
+  summary = [["
+    This is a minimum ``padding'' or ``separation'' between the border
+    of nodes connected by an edge. Thus, if nodes are so big that nodes
+    with a distance of |node distance| would overlap (or
+    just come with \meta{dimension} distance of one another), their
+    distance is enlarged so that this distance is still satisfied.
+    The |pre| means that the padding is added to the node ``at the
+    front''. This make sense only for some algorithms, like for a
+    simple necklace layout.
   "]],
-  examples = {
-    [["  
-       \tikz \graph [simple necklace layout, node distance=0cm, nodes={circle,draw}]
-         { 1--2--3--4--5--1 };
-    "]],
-    [["  
-       \tikz \graph [simple necklace layout, node distance=0cm, node sep=0mm,
-                     nodes={circle,draw}]
-         { 1--2--3[node pre sep=5mm]--4--5[node pre sep=1mm]--1 };  
-    "]]
+  examples = {[["
+    \tikz \graph [simple necklace layout, node distance=0cm, nodes={circle,draw}]
+      { 1--2--3--4--5--1 };
+  "]],[["
+    \tikz \graph [simple necklace layout, node distance=0cm, node sep=0mm,
+                  nodes={circle,draw}]
+      { 1--2--3[node pre sep=5mm]--4--5[node pre sep=1mm]--1 };
+  "]]
   }
 }
 
@@ -114,13 +112,13 @@
   type = "length",
   initial = ".333em",
 
-  summary = [["  
-       Works like |node pre sep|.
-   "]]
+  summary = [["
+    Works like |node pre sep|.
+  "]]
 }
-    
 
-    
+
+
 ---
 -- @param length A length.
 
@@ -131,9 +129,9 @@
     { key = "node pre sep",  value = function(v) return v/2 end },
     { key = "node post sep", value = function(v) return v/2 end },
   },
-  summary = [["  
-       A shorthand for setting both |node pre sep| and |node post sep| to
-       $\meta{length}/2$. 
+  summary = [["
+    A shorthand for setting both |node pre sep| and |node post sep| to
+    $\meta{length}/2$.
   "]]
 }
 
@@ -145,26 +143,26 @@
   type = "length",
   initial = "1cm",
 
-  summary = [["  
-       This is minimum distance that the centers of nodes on one
-       level should have from the centers of nodes on the next level. It
-       will not always be possible to satisfy this desired distance, for
-       instance in case the nodes are too big. In this case, the
-       \meta{length} is just considered as a lower bound.
+  summary = [["
+    This is minimum distance that the centers of nodes on one
+    level should have from the centers of nodes on the next level. It
+    will not always be possible to satisfy this desired distance, for
+    instance in case the nodes are too big. In this case, the
+    \meta{length} is just considered as a lower bound.
   "]],
   examples = [["
-       \begin{tikzpicture}[inner sep=2pt]
-         \draw [help lines] (0,0) grid (3.5,2);
-         \graph [layered layout, level distance=1cm, level sep=0]
-           { 1 [x=1,y=2] -- 2 -- 3 -- 1 };  
-         \graph [layered layout, level distance=5mm, level sep=0]
-           { 1 [x=3,y=2] -- 2 -- 3 -- 1, 3 -- {4,5} -- 6 -- 3 };  
-       \end{tikzpicture}
+    \begin{tikzpicture}[inner sep=2pt]
+      \draw [help lines] (0,0) grid (3.5,2);
+      \graph [layered layout, level distance=1cm, level sep=0]
+        { 1 [x=1,y=2] -- 2 -- 3 -- 1 };
+      \graph [layered layout, level distance=5mm, level sep=0]
+        { 1 [x=3,y=2] -- 2 -- 3 -- 1, 3 -- {4,5} -- 6 -- 3 };
+    \end{tikzpicture}
   "]]
 }
-	   
+
 ---
-declare {   
+declare {
   key = "layer distance",
   type = "length",
   use = {
@@ -179,25 +177,25 @@
   type = "length",
   initial = ".333em",
 
-  summary = [["  
-       This is a minimum ``padding'' or ``separation'' between the border
-       of the nodes on a level to any nodes on the previous level. Thus, if
-       nodes are so big that nodes on consecutive levels would overlap (or
-       just come with \meta{lrngth} distance of one another), their
-       distance is enlarged so that this distance is still satisfied.
-       If a node on the previous level also has a |level post sep|, this
-       post padding and the \meta{dimension} add up. Thus, these keys
-       behave like the ``padding'' keys rather
-       than the ``margin'' key of cascading style sheets.
+  summary = [["
+    This is a minimum ``padding'' or ``separation'' between the border
+    of the nodes on a level to any nodes on the previous level. Thus, if
+    nodes are so big that nodes on consecutive levels would overlap (or
+    just come with \meta{length} distance of one another), their
+    distance is enlarged so that this distance is still satisfied.
+    If a node on the previous level also has a |level post sep|, this
+    post padding and the \meta{dimension} add up. Thus, these keys
+    behave like the ``padding'' keys rather
+    than the ``margin'' key of cascading style sheets.
   "]],
   examples = [["
-       \begin{tikzpicture}[inner sep=2pt, level sep=0pt, sibling distance=0pt]
-         \draw [help lines] (0,0) grid (3.5,2);
-         \graph [layered layout, level distance=0cm, nodes=draw]
-           { 1 [x=1,y=2] -- {2,3[level pre sep=1mm],4[level pre sep=5mm]} -- 5 };  
-         \graph [layered layout, level distance=0cm, nodes=draw]
-           { 1 [x=3,y=2] -- {2,3,4} -- 5[level pre sep=5mm] };  
-       \end{tikzpicture}
+    \begin{tikzpicture}[inner sep=2pt, level sep=0pt, sibling distance=0pt]
+      \draw [help lines] (0,0) grid (3.5,2);
+      \graph [layered layout, level distance=0cm, nodes=draw]
+        { 1 [x=1,y=2] -- {2,3[level pre sep=1mm],4[level pre sep=5mm]} -- 5 };
+      \graph [layered layout, level distance=0cm, nodes=draw]
+        { 1 [x=3,y=2] -- {2,3,4} -- 5[level pre sep=5mm] };
+    \end{tikzpicture}
   "]]
 }
 
@@ -208,13 +206,13 @@
   type = "length",
   initial = ".333em",
 
-  summary = [["  
-       Works like |level pre sep|.
-   "]]
+  summary = [["
+    Works like |level pre sep|.
+  "]]
 }
-    
+
 ---
-declare {   
+declare {
   key = "layer pre sep",
   type = "length",
   use = {
@@ -224,7 +222,7 @@
 }
 
 ---
-declare {   
+declare {
   key = "layer post sep",
   type = "length",
   use = {
@@ -247,17 +245,17 @@
     { key = "level post sep", value = function (v) return v/2 end },
   },
 
-  summary = [["  
-       A shorthand for setting both |level pre sep| and |level post sep| to
-       $\meta{length}/2$. Note that if you set |level distance=0| and
-       |level sep=1em|, you get a layout where any two consecutive layers
-       are ``spaced apart'' by |1em|. 
+  summary = [["
+    A shorthand for setting both |level pre sep| and |level post sep| to
+    $\meta{length}/2$. Note that if you set |level distance=0| and
+    |level sep=1em|, you get a layout where any two consecutive layers
+    are ``spaced apart'' by |1em|.
   "]]
 }
 
 
 ---
-declare {   
+declare {
   key = "layer sep",
   type = "number",
   use = {
@@ -273,28 +271,25 @@
   type = "length",
   initial = "1cm",
 
-  summary = [["  
-       This is minimum distance that the centers of node should have to the
-       center of the next node on the same level. As for levels, this is
-       just a lower bound.      
-       For some layouts, like a simple necklace layout, the \meta{length} is
-       measured as the distance on the circle.
+  summary = [["
+    This is minimum distance that the centers of node should have to the
+    center of the next node on the same level. As for levels, this is
+    just a lower bound.
+    For some layouts, like a simple necklace layout, the \meta{length} is
+    measured as the distance on the circle.
   "]],
-  examples = {
-    [["
-       \tikz \graph [tree layout, sibling distance=1cm, nodes={circle,draw}]
-         { 1--{2,3,4,5} };  
-    "]],
-    [["
-       \tikz \graph [tree layout, sibling distance=0cm, sibling sep=0pt,
-                     nodes={circle,draw}]
-         { 1--{2,3,4,5} };  
-    "]],
-    [["
-       \tikz \graph [tree layout, sibling distance=0cm, sibling sep=0pt,
-                     nodes={circle,draw}]
-         { 1--{2,3[sibling distance=1cm],4,5} };  
-    "]]
+  examples = {[["
+    \tikz \graph [tree layout, sibling distance=1cm, nodes={circle,draw}]
+      { 1--{2,3,4,5} };
+  "]],[["
+    \tikz \graph [tree layout, sibling distance=0cm, sibling sep=0pt,
+                  nodes={circle,draw}]
+      { 1--{2,3,4,5} };
+  "]],[["
+    \tikz \graph [tree layout, sibling distance=0cm, sibling sep=0pt,
+                  nodes={circle,draw}]
+      { 1--{2,3[sibling distance=1cm],4,5} };
+  "]]
   }
 }
 
@@ -306,13 +301,13 @@
   type = "length",
   initial = ".333em",
 
-  summary = [["  
-       Works like |level pre sep|, only for siblings.
+  summary = [["
+    Works like |level pre sep|, only for siblings.
   "]],
   examples = [["
-       \tikz \graph [tree layout, sibling distance=0cm, nodes={circle,draw},
-                     sibling sep=0pt]
-         { 1--{2,3[sibling pre sep=1cm],4,5} };  
+    \tikz \graph [tree layout, sibling distance=0cm, nodes={circle,draw},
+                  sibling sep=0pt]
+      { 1--{2,3[sibling pre sep=1cm],4,5} };
   "]]
 }
 
@@ -323,13 +318,13 @@
   type = "length",
   initial = ".333em",
 
-  summary = [["  
-       Works like |sibling pre sep|.
+  summary = [["
+      Works like |sibling pre sep|.
    "]]
  }
-    
 
 
+
 ---
 --  @param length A length
 
@@ -341,17 +336,17 @@
     { key = "sibling post sep", value = function(v) return v/2 end },
   },
 
-  summary = [["  
-       A shorthand for setting both |sibling pre sep| and |sibling post sep| to
-       $\meta{length}/2$. 
+  summary = [["
+    A shorthand for setting both |sibling pre sep| and |sibling post sep| to
+    $\meta{length}/2$.
   "]]
 }
 
-    
 
-    
 
-    
+
+
+
 ---
 declare {
   key = "part distance",
@@ -358,9 +353,9 @@
   type = "length",
   initial = "1.5cm",
 
-  summary = [["  
-       This is minimum distance between the centers of ``parts'' of a
-       graph. What a ``part'' is depends on the algorithm. 
+  summary = [["
+    This is minimum distance between the centers of ``parts'' of a
+    graph. What a ``part'' is depends on the algorithm.
   "]]
 }
 
@@ -382,9 +377,9 @@
   initial = "1em",
   summary = "A post-padding for pars."
  }
-    
 
 
+
 ---
 --  @param length A length
 
@@ -396,9 +391,9 @@
     { key = "part post sep", value = function(v) return v/2 end },
   },
 
-  summary = [["  
-       A shorthand for setting both |part pre sep| and |part post sep| to
-       $\meta{length}/2$. 
+  summary = [["
+    A shorthand for setting both |part pre sep| and |part post sep| to
+    $\meta{length}/2$.
   "]]
 }
 
@@ -412,33 +407,31 @@
   type = "length",
   initial = "1.5em",
 
-  summary = [["  
-       This is pading between the bounding boxes that nodes of different
-       connected components will have when they are placed next to each
-       other.
+  summary = [["
+    This is padding between the bounding boxes that nodes of different
+    connected components will have when they are placed next to each
+    other.
   "]],
-  examples = {
-    [["
-       \tikz \graph [binary tree layout, sibling distance=4mm, level distance=8mm,
-                     components go right top aligned,
-                     component sep=1pt, nodes=draw]  
-       {
-         1 -> 2 -> {3->4[second]->5,6,7};
-         a -> b[second] -> c[second] -> d -> e;
-         x -> y[second] -> z -> u[second] -> v;
-       };  
-    "]],
-    [["
-       \tikz \graph [binary tree layout, sibling distance=4mm, level distance=8mm,
-                     components go right top aligned,
-                     component sep=1em, nodes=draw]  
-       {
-         1 -> 2 -> {3->4[second]->5,6,7};
-         a -> b[second] -> c[second] -> d -> e;
-         x -> y[second] -> z -> u[second] -> v;
-       };  
-    "]]
-  }  
+  examples = {[["
+    \tikz \graph [binary tree layout, sibling distance=4mm, level distance=8mm,
+                  components go right top aligned,
+                  component sep=1pt, nodes=draw]
+    {
+      1 -> 2 -> {3->4[second]->5,6,7};
+      a -> b[second] -> c[second] -> d -> e;
+      x -> y[second] -> z -> u[second] -> v;
+    };
+  "]],[["
+    \tikz \graph [binary tree layout, sibling distance=4mm, level distance=8mm,
+                  components go right top aligned,
+                  component sep=1em, nodes=draw]
+    {
+      1 -> 2 -> {3->4[second]->5,6,7};
+      a -> b[second] -> c[second] -> d -> e;
+      x -> y[second] -> z -> u[second] -> v;
+    };
+  "]]
+  }
 }
 
 
@@ -451,11 +444,11 @@
   initial = "2cm",
 
   summary = [["
-      This is the minimum distance between the centers of bounding
-      boxes of connected components when they are placed next to each
-      other. (Not used, currently.)
+    This is the minimum distance between the centers of bounding
+    boxes of connected components when they are placed next to each
+    other. (Not used, currently.)
   "]]
 }
 
 
-return Distances
\ No newline at end of file
+return Distances

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/FineTune.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/FineTune.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/FineTune.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -28,20 +28,20 @@
   type = "canvas coordinate",
 
   summary = [["
-      This option allows you to slightly ``nudge'' (move) nodes after
-      they have been positioned by the given offset. The idea is that
-      this nudging is done after the position of the node has been
-      computed, so nudging  has no influence on the actual graph
-      drawing algorithms. This, in turn, means that you can use
-      nudging to ``correct'' or ``optimize''  the positioning of nodes
-      after the algorithm has computed something. 
+    This option allows you to slightly ``nudge'' (move) nodes after
+    they have been positioned by the given offset. The idea is that
+    this nudging is done after the position of the node has been
+    computed, so nudging  has no influence on the actual graph
+    drawing algorithms. This, in turn, means that you can use
+    nudging to ``correct'' or ``optimize'' the positioning of nodes
+    after the algorithm has computed something.
   "]],
 
   examples = [["
-      \tikz \graph [edges=rounded corners, nodes=draw,
-                    layered layout, sibling distance=0] {
-        a -- {b, c, d[nudge=(up:2mm)]} -- e -- a;
-       };
+    \tikz \graph [edges=rounded corners, nodes=draw,
+                  layered layout, sibling distance=0] {
+      a -- {b, c, d[nudge=(up:2mm)]} -- e -- a;
+     };
   "]]
 }
 
@@ -58,10 +58,10 @@
 
   summary = "A shorthand for nudging a node upwards.",
   examples = [["
-      \tikz \graph [edges=rounded corners, nodes=draw,
-                    layered layout, sibling distance=0] {
-        a -- {b, c, d[nudge up=2mm]} -- e -- a;
-      };
+    \tikz \graph [edges=rounded corners, nodes=draw,
+                  layered layout, sibling distance=0] {
+      a -- {b, c, d[nudge up=2mm]} -- e -- a;
+    };
   "]]
 }
 
@@ -91,10 +91,10 @@
 
   summary = "Like |nudge up|, but left.",
   examples = [["
-      \tikz \graph [edges=rounded corners, nodes=draw,
-                    layered layout, sibling distance=0] {
-        a -- {b, c, d[nudge left=2mm]} -- e -- a;
-      };
+    \tikz \graph [edges=rounded corners, nodes=draw,
+                  layered layout, sibling distance=0] {
+      a -- {b, c, d[nudge left=2mm]} -- e -- a;
+    };
   "]]
 }
 
@@ -118,18 +118,18 @@
   type = "canvas coordinate",
 
   summary = [["
-      Using this option you can provide a position for a node to wish
-      it will be forced after the graph algorithms have run. So, the node
-      is positioned normally and the graph drawing algorithm does not know
-      about the position specified using |regardless at|. However,
-      afterwards, the node is placed there, regardless of what the
-      algorithm has computed (all other nodes are unaffected).
+    Using this option you can provide a position for a node to wish
+    it will be forced after the graph algorithms have run. So, the node
+    is positioned normally and the graph drawing algorithm does not know
+    about the position specified using |regardless at|. However,
+    afterwards, the node is placed there, regardless of what the
+    algorithm has computed (all other nodes are unaffected).
   "]],
   examples = [["
-      \tikz \graph [edges=rounded corners, nodes=draw,
-                    layered layout, sibling distance=0] {
-        a -- {b,c,d[regardless at={(1,0)}]} -- e -- a;
-      };
+    \tikz \graph [edges=rounded corners, nodes=draw,
+                  layered layout, sibling distance=0] {
+      a -- {b,c,d[regardless at={(1,0)}]} -- e -- a;
+    };
   "]]
 }
 
@@ -148,17 +148,17 @@
   },
 
   summary = [["
-      This option combines |desired at| and |regardless at|. Thus, the
-      algorithm is ``told'' about the desired position. If it fails to place
-      the node at the desired position, it will be put there
-      regardless. The name of the key is intended to remind one of a node
-      being ``nailed'' to the canvas.
+    This option combines |desired at| and |regardless at|. Thus, the
+    algorithm is ``told'' about the desired position. If it fails to place
+    the node at the desired position, it will be put there
+    regardless. The name of the key is intended to remind one of a node
+    being ``nailed'' to the canvas.
   "]],
   examples = [["
-      \tikz \graph [edges=rounded corners, nodes=draw,
-                    layered layout, sibling distance=0] {
-        a -- {b,c,d[nail at={(1,0)}]} -- e[nail at={(1.5,-1)}] -- a;
-      };
+    \tikz \graph [edges=rounded corners, nodes=draw,
+                  layered layout, sibling distance=0] {
+      a -- {b,c,d[nail at={(1,0)}]} -- e[nail at={(1.5,-1)}] -- a;
+    };
   "]]
 }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/LayoutPipeline.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/LayoutPipeline.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/LayoutPipeline.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -21,48 +21,48 @@
 -- Before an algorithm is applied, a number of transformations will
 -- have been applied, depending on the algorithm's |preconditions|
 -- field:
---
+-- %
 -- \begin{itemize}
--- \item |connected|
+--   \item |connected|
 --
---   If this property is set for an algorithm (that is, in the
---   |declare| statement for the algorithm the |predconditions| field
---   has the entry |connected=true| set), then the graph will be
---   decomposed into connected components. The algorithm is run on each
---   component individually.
--- \item |tree|
+--     If this property is set for an algorithm (that is, in the
+--     |declare| statement for the algorithm the |predconditions| field
+--     has the entry |connected=true| set), then the graph will be
+--     decomposed into connected components. The algorithm is run on each
+--     component individually.
+--   \item |tree|
 --
---   When set, the field |spanning_tree| of the algorithm will be set
---   to a spanning tree of the graph. This option implies |connected|. 
--- \item |loop_free|
+--     When set, the field |spanning_tree| of the algorithm will be set
+--     to a spanning tree of the graph. This option implies |connected|.
+--   \item |loop_free|
 --
---   When set, all loops (arcs from a vertex to itself) will have been
---   removed when the algorithm runs.
+--     When set, all loops (arcs from a vertex to itself) will have been
+--     removed when the algorithm runs.
 --
--- \item |at_least_two_nodes|
+--   \item |at_least_two_nodes|
 --
---   When explicitly set to |false| (this precondition is |true| by
---   default), the algorithm will even be run if there is only a
---   single vertex in the graph.
+--     When explicitly set to |false| (this precondition is |true| by
+--     default), the algorithm will even be run if there is only a
+--     single vertex in the graph.
 -- \end{itemize}
 --
 -- Once the algorithm has run, the algorithm's |postconditions| will
 -- be processed:
---
+-- %
 -- \begin{itemize}
--- \item |upward_oriented|
+--   \item |upward_oriented|
 --
---   When set, the algorithm tells the layout pipeline that the graph
---   has been laid out in a layered manner with each layer going from
---   left to right and layers at a whole going upwards (positive
---   $y$-coordinates). The graph will then be rotated and possibly
---   swapped in accordance with the |grow| key set by the user.
--- \item |fixed|
+--     When set, the algorithm tells the layout pipeline that the graph
+--     has been laid out in a layered manner with each layer going from
+--     left to right and layers at a whole going upwards (positive
+--     $y$-coordinates). The graph will then be rotated and possibly
+--     swapped in accordance with the |grow| key set by the user.
+--   \item |fixed|
 --
---   When set, no rotational postprocessing will be done after the
---   algorithm has run. Usually, a graph is rotated to meet a user's
---   |orient| settings. However, when the algorithm has already
---   ``ideally'' rotated the graph, set this postcondition.
+--     When set, no rotational postprocessing will be done after the
+--     algorithm has run. Usually, a graph is rotated to meet a user's
+--     |orient| settings. However, when the algorithm has already
+--     ``ideally'' rotated the graph, set this postcondition.
 -- \end{itemize}
 --
 --
@@ -71,23 +71,22 @@
 -- posttransformations. This happens when users install additional
 -- algorithms in appropriate phases. In detail, the following happens
 -- in order:
---
+-- %
 -- \begin{enumerate}
--- \item If specified, the graph is decomposed into connected
--- components and the following steps are applied to each component
--- individually.
--- \item All algorithms in the phase stack for the phase
--- |preprocessing| are applied to the component. These algorithms are
--- run one after the other in the order they appear in the phase
--- stack.
--- \item If necessary, the spanning tree is now computed and
--- rotational information is gathered.
--- \item The single algorithm in phase |main| is called.
--- \item All algorithms in the phase stack for the phase
--- |edge routing| are run. 
--- \item All algorithms in the phase stack for phase |postprocessing|
--- are run.
--- \item Edge syncing, orientation, and anchoring are applied.
+--   \item If specified, the graph is decomposed into connected
+--     components and the following steps are applied to each component
+--     individually.
+--   \item All algorithms in the phase stack for the phase
+--     |preprocessing| are applied to the component. These algorithms are
+--     run one after the other in the order they appear in the phase stack.
+--   \item If necessary, the spanning tree is now computed and
+--     rotational information is gathered.
+--   \item The single algorithm in phase |main| is called.
+--   \item All algorithms in the phase stack for the phase 
+--     |edge routing| are run.
+--   \item All algorithms in the phase stack for phase |postprocessing|
+--     are run.
+--   \item Edge syncing, orientation, and anchoring are applied.
 -- \end{enumerate}
 --
 -- If sublayouts are used, all of the above (except for anchoring)
@@ -128,9 +127,9 @@
 
 
 
--- The main ``graph drawing pipeline'' that handles the pre- and 
--- postprocessing for a graph. This method is called by the diplay
--- interface.  
+-- The main ``graph drawing pipeline'' that handles the pre- and
+-- postprocessing for a graph. This method is called by the display
+-- interface.
 --
 -- @param scope A graph drawing scope.
 
@@ -137,30 +136,30 @@
 function LayoutPipeline.run(scope)
 
   -- The pipeline...
-  
+
   -- Step 1: Preparations
-  
+
   -- Prepare events
   prepare_events(scope.events)
-  
+
   -- Step 2: Recursively layout the graph, starting with the root layout
   local root_layout = assert(scope.collections[InterfaceCore.sublayout_kind][1], "no layout in scope")
-  
+
   scope.syntactic_digraph =
     Sublayouts.layoutRecursively (scope,
-				  root_layout,
-				  LayoutPipeline.runOnLayout,
-				  { root_layout })
-  
+                  root_layout,
+                  LayoutPipeline.runOnLayout,
+                  { root_layout })
+
   -- Step 3: Anchor the graph
   LayoutPipeline.anchor(scope.syntactic_digraph, scope)
-  
+
   -- Step 4: Apply regardless transforms
   Sublayouts.regardless(scope.syntactic_digraph)
-  
+
   -- Step 5: Cut edges
   LayoutPipeline.cutEdges(scope.syntactic_digraph)
-  
+
 end
 
 
@@ -174,7 +173,7 @@
 -- @param algorithm_class The to-be-applied algorithm class.
 -- @param layout_graph A subgraph of the syntactic digraph which is
 -- restricted to the current layout and in which sublayouts have
--- been contracted to single nodes. 
+-- been contracted to single nodes.
 -- @param layout The layout to which the graph belongs.
 --
 function LayoutPipeline.runOnLayout(scope, algorithm_class, layout_graph, layout)
@@ -189,12 +188,12 @@
     local new_a = layout_copy:connect(a.tail,a.head)
     new_a.syntactic_edges = a.syntactic_edges
   end
-    
+
   -- Step 1: Decompose the graph into connected components, if necessary:
   local syntactic_components
   if algorithm_class.preconditions.tree or algorithm_class.preconditions.connected or layout_graph.options.componentwise then
-    syntactic_components = LayoutPipeline.decompose(layout_copy) 
-    LayoutPipeline.sortComponents(layout_graph.options['component order'], syntactic_components)    
+    syntactic_components = LayoutPipeline.decompose(layout_copy)
+    LayoutPipeline.sortComponents(layout_graph.options['component order'], syntactic_components)
   else
     -- Only one component: The graph itself...
     syntactic_components = { layout_copy }
@@ -202,17 +201,17 @@
 
   -- Step 2: For all components do:
   for i,syntactic_component in ipairs(syntactic_components) do
-    
+
     -- Step 2.1: Reset random number generator to make sure that the
     -- same graph is always typeset in  the same way.
-    math.randomseed(layout_graph.options['random seed'])
-    
+    lib.randomseed(layout_graph.options['random seed'])
+
     local digraph  = Direct.digraphFromSyntacticDigraph(syntactic_component)
 
     -- Step 2.3: If requested, remove loops
     if algorithm_class.preconditions.loop_free then
       for _,v in ipairs(digraph.vertices) do
-	digraph:disconnect(v,v)
+        digraph:disconnect(v,v)
       end
     end
 
@@ -222,15 +221,15 @@
     -- Step 2.4a: Run preprocessor
     for _,class in ipairs(layout_graph.options.algorithm_phases["preprocessing stack"]) do
       class.new{
-	digraph = digraph,
-	ugraph = ugraph,
-	scope = scope,
-	layout = layout,
-	layout_graph = layout_graph,
-	syntactic_component = syntactic_component,
-      }:run()  
+        digraph = digraph,
+        ugraph = ugraph,
+        scope = scope,
+        layout = layout,
+        layout_graph = layout_graph,
+        syntactic_component = syntactic_component,
+      }:run()
     end
-    
+
     -- Step 2.5: Create an algorithm object
     local algorithm = algorithm_class.new{
       digraph = digraph,
@@ -240,14 +239,14 @@
       layout_graph = layout_graph,
       syntactic_component = syntactic_component,
     }
-    
+
     -- Step 2.7: Compute a spanning tree, if necessary
     if algorithm_class.preconditions.tree then
       local spanning_algorithm_class = syntactic_component.options.algorithm_phases["spanning tree computation"]
       algorithm.spanning_tree =
-	spanning_algorithm_class.new{
-	  ugraph = ugraph,
-  	  events = scope.events
+        spanning_algorithm_class.new{
+          ugraph = ugraph,
+          events = scope.events
         }:run()
     end
 
@@ -261,9 +260,9 @@
                              or algorithm_class.preconditions.at_least_two_nodes == false then
       -- Main run of the algorithm:
       if algorithm_class.old_graph_model then
-	LayoutPipeline.runOldGraphModel(scope, digraph, algorithm_class, algorithm)
+        LayoutPipeline.runOldGraphModel(scope, digraph, algorithm_class, algorithm)
       else
-	algorithm:run ()
+        algorithm:run ()
       end
     end
 
@@ -270,27 +269,27 @@
     -- Step 2.9a: Run edge routers
     for _,class in ipairs(layout_graph.options.algorithm_phases["edge routing stack"]) do
       class.new{
-	digraph = digraph,
-	ugraph = ugraph,
-	scope = scope,
-	layout = layout,
-	layout_graph = layout_graph,
-	syntactic_component = syntactic_component,
-      }:run()  
+        digraph = digraph,
+        ugraph = ugraph,
+        scope = scope,
+        layout = layout,
+        layout_graph = layout_graph,
+        syntactic_component = syntactic_component,
+      }:run()
     end
-    
+
     -- Step 2.9b: Run postprocessor
     for _,class in ipairs(layout_graph.options.algorithm_phases["postprocessing stack"]) do
       class.new{
-	digraph = digraph,
-	ugraph = ugraph,
-	scope = scope,
-	layout = layout,
-	layout_graph = layout_graph,
-	syntactic_component = syntactic_component,
-      }:run()  
+        digraph = digraph,
+        ugraph = ugraph,
+        scope = scope,
+        layout = layout,
+        layout_graph = layout_graph,
+        syntactic_component = syntactic_component,
+      }:run()
     end
-    
+
     -- Step 2.10: Sync the graphs
     digraph:sync()
     ugraph:sync()
@@ -297,7 +296,7 @@
     if algorithm.spanning_tree then
       algorithm.spanning_tree:sync()
     end
-    
+
     -- Step 2.11: Orient the graph
     LayoutPipeline.orient(algorithm.rotation_info, algorithm.postconditions, syntactic_component, scope)
   end
@@ -317,7 +316,7 @@
 -- procedure described in
 -- Section~\ref{subsection-library-graphdrawing-anchoring}. These
 -- transformations are always performed.
--- 
+--
 -- @param graph A graph
 -- @param scope The scope
 
@@ -325,7 +324,7 @@
 
   -- Step 1: Find anchor node:
   local anchor_node
-  
+
   local anchor_node_name = graph.options['anchor node']
   if anchor_node_name then
     anchor_node = scope.node_names[anchor_node_name]
@@ -337,10 +336,10 @@
       lib.find (graph.vertices, function (v) return v.options['desired at'] end) or
       graph.vertices[1]
   end
-  
+
   -- Sanity check
   assert(graph:contains(anchor_node), "anchor node is not in graph!")
-  
+
   local desired = anchor_node.options['desired at'] or graph.options['anchor at']
   local delta = desired - anchor_node.pos
 
@@ -361,7 +360,7 @@
 ---
 -- This method tries to determine in which direction the graph is supposed to
 -- grow and in which direction the algorithm will grow the graph. These two
--- pieces of information togehter produce a necessary rotation around some node.
+-- pieces of information together produce a necessary rotation around some node.
 -- This rotation is returned in a table.
 --
 -- Note that this method does not actually cause a rotation to happen; this is
@@ -372,12 +371,12 @@
 -- @return A table containing the computed information.
 
 function LayoutPipeline.prepareRotateAround(postconditions, graph)
-  
+
   -- Find the vertex from which we orient
   local swap = true
 
   local v,_,grow = lib.find (graph.vertices, function (v) return v.options["grow"] end)
-  
+
   if not v and graph.options["grow"] then
     v,grow,swap = graph.vertices[1], graph.options["grow"], true
   end
@@ -386,7 +385,7 @@
     v,_,grow =  lib.find (graph.vertices, function (v) return v.options["grow'"] end)
     swap = false
   end
-  
+
   if not v and graph.options["grow'"] then
     v,grow,swap = graph.vertices[1], graph.options["grow'"], false
   end
@@ -394,15 +393,15 @@
   if not v then
     v, grow, swap = graph.vertices[1], -90, true
   end
-  
+
   -- Now compute the rotation
   local info = {}
   local growth_direction = (postconditions.upward_oriented and 90) or (postconditions.upward_oriented_swapped and 90)
-  
+
   if postconditions.upward_oriented_swapped then
     swap = not swap
   end
-  
+
   if growth_direction == "fixed" then
     info.angle = 0 -- no rotation
   elseif growth_direction then
@@ -416,9 +415,9 @@
     local other = lib.find_min(
       graph:outgoing(v),
       function (a)
-	if a.head ~= v and a:eventIndex() then
-	  return a, a:eventIndex()
-	end
+        if a.head ~= v and a:eventIndex() then
+          return a, a:eventIndex()
+        end
       end)
     info.to_node = (other and other.head) or
       (graph.vertices[1] == v and graph.vertices[2] or graph.vertices[1])
@@ -440,14 +439,16 @@
 -- orientation for what the algorithm assumes.
 --
 -- The ``bounding box'' actually consists of the fields
+-- %
 -- \begin{itemize}
--- \item |sibling_pre|,
--- \item |sibling_post|,
--- \item |layer_pre|, and
--- \item |layer_post|,
+--   \item |sibling_pre|,
+--   \item |sibling_post|,
+--   \item |layer_pre|, and
+--   \item |layer_post|,
 -- \end{itemize}
+-- %
 -- which correspond to ``min x'', ``min y'', ``min y'', and ``max y''
--- for a tree growing up. 
+-- for a tree growing up.
 --
 -- The computation of the ``bounding box'' treats a centered circle in
 -- a special way, all other shapes are currently treated like a
@@ -454,41 +455,41 @@
 -- rectangle.
 --
 -- @param rotation_info The table computed by the function prepareRotateAround
--- @param packing_storage A storage in which the computed distances are stored. 
--- @param graph    An graph
+-- @param packing_storage A storage in which the computed distances are stored.
+-- @param graph     An graph
 -- @param vertices  An array of to-be-prepared vertices inside graph
 
 function LayoutPipeline.prepareBoundingBoxes(rotation_info, adjusted_bb, graph, vertices)
-  
+
   local angle = assert(rotation_info.angle, "angle field missing")
   local swap  = rotation_info.swap
-  
+
   for _,v in ipairs(vertices) do
     local bb = adjusted_bb[v]
     local a  = angle
-    
+
     if v.shape == "circle" then
       a = 0 -- no rotation for circles.
     end
-    
+
     -- Fill the bounding box field,
     bb.sibling_pre = math.huge
     bb.sibling_post = -math.huge
     bb.layer_pre = math.huge
     bb.layer_post = -math.huge
-    
+
     local c = math.cos(angle)
     local s = math.sin(angle)
     for _,p in ipairs(v.path:coordinates()) do
       local x =  p.x*c + p.y*s
       local y = -p.x*s + p.y*c
-      
+
       bb.sibling_pre = math.min (bb.sibling_pre, x)
       bb.sibling_post = math.max (bb.sibling_post, x)
       bb.layer_pre = math.min (bb.layer_pre, y)
       bb.layer_post = math.max (bb.layer_post, y)
     end
-    
+
     -- Flip sibling per and post if flag:
     if swap then
       bb.sibling_pre, bb.sibling_post = -bb.sibling_post, -bb.sibling_pre
@@ -501,7 +502,7 @@
 
 
 --
--- Rotate the whole graph around a point 
+-- Rotate the whole graph around a point
 --
 -- Causes the graph to be rotated around \meta{around} so that what
 -- used to be the |from_angle| becomes the |to_angle|. If the flag |swap|
@@ -516,21 +517,21 @@
 --             swapped (flipped) along the new angle
 
 function LayoutPipeline.rotateGraphAround(graph, around_x, around_y, from, to, swap)
-  
+
   -- Translate to origin
   local t = Transform.new_shift(-around_x, -around_y)
-  
+
   -- Rotate to zero degrees:
   t = Transform.concat(Transform.new_rotation(-from), t)
-  
+
   -- Swap
   if swap then
     t = Transform.concat(Transform.new_scaling(1,-1), t)
   end
-  
+
   -- Rotate to from degrees:
   t = Transform.concat(Transform.new_rotation(to), t)
-  
+
   -- Translate back
   t = Transform.concat(Transform.new_shift(around_x, around_y), t)
 
@@ -546,7 +547,7 @@
 
 
 
--- 
+--
 -- Orient the whole graph using two nodes
 --
 -- The whole graph is rotated so that the line from the first node to
@@ -557,7 +558,7 @@
 -- @param first_node
 -- @param seond_node
 -- @param target_angle
--- @param swap 
+-- @param swap
 
 function LayoutPipeline.orientTwoNodes(graph, first_node, second_node, target_angle, swap)
   if first_node and second_node then
@@ -564,10 +565,10 @@
     -- Compute angle between first_node and second_node:
     local x = second_node.pos.x - first_node.pos.x
     local y = second_node.pos.y - first_node.pos.y
-    
+
     local angle = math.atan2(y,x)
     LayoutPipeline.rotateGraphAround(graph, first_node.pos.x,
-			   first_node.pos.y, angle, target_angle, swap)
+               first_node.pos.y, angle, target_angle, swap)
   end
 end
 
@@ -576,7 +577,7 @@
 ---
 -- Performs a post-layout orientation of the graph by performing the
 -- steps documented in Section~\ref{subsection-library-graphdrawing-standard-orientation}.
--- 
+--
 -- @param rotation_info The info record computed by the function |prepareRotateAround|.
 -- @param postconditions The algorithm's postconditions.
 -- @param graph A to-be-oriented graph.
@@ -583,10 +584,10 @@
 -- @param scope The graph drawing scope.
 
 function LayoutPipeline.orient(rotation_info, postconditions, graph, scope)
-  
+
   -- Sanity check
   if #graph.vertices < 2 then return end
-  
+
   -- Step 1: Search for global graph orient options:
   local function f (orient, tail, head, flag)
     if orient and head and tail then
@@ -593,8 +594,8 @@
       local n1 = scope.node_names[tail]
       local n2 = scope.node_names[head]
       if graph:contains(n1) and graph:contains(n2) then
-	LayoutPipeline.orientTwoNodes(graph, n1, n2, orient/360*2*math.pi, flag)
-	return true
+        LayoutPipeline.orientTwoNodes(graph, n1, n2, orient/360*2*math.pi, flag)
+        return true
       end
     end
   end
@@ -608,32 +609,32 @@
   if f(-90, tail, head, false) then return end
   local tail, head = string.match(graph.options["vertical'"] or "", "^(.*) to (.*)$")
   if f(-90, tail, head, true) then return end
-  
+
   -- Step 2: Search for a node with the orient option:
   for _, v in ipairs(graph.vertices) do
     local function f (key, flag)
       local orient = v.options[key]
-      local head   = v.options["orient head"] 
+      local head   = v.options["orient head"]
       local tail   = v.options["orient tail"]
-      
+
       if orient and head then
-	local n2 = scope.node_names[head]
-	if graph:contains(n2) then
-	  LayoutPipeline.orientTwoNodes(graph, v, n2, orient/360*2*math.pi, flag)
-	  return true
-	end
-      elseif orient and tail then
-	local n1 = scope.node_names[tail]
-	if graph:contains(n1) then
-	  LayoutPipeline.orientTwoNodes(graph, n1, v, orient/360*2*math.pi, flag)
-	  return true
-	end
+        local n2 = scope.node_names[head]
+        if graph:contains(n2) then
+          LayoutPipeline.orientTwoNodes(graph, v, n2, orient/360*2*math.pi, flag)
+          return true
+        end
+          elseif orient and tail then
+        local n1 = scope.node_names[tail]
+        if graph:contains(n1) then
+          LayoutPipeline.orientTwoNodes(graph, n1, v, orient/360*2*math.pi, flag)
+          return true
+        end
       end
     end
     if f("orient", false) then return end
     if f("orient'", true) then return end
   end
-  
+
   -- Step 3: Search for an edge with the orient option:
   for _, a in ipairs(graph.arcs) do
     if a:options("orient",true) then
@@ -643,21 +644,21 @@
       return LayoutPipeline.orientTwoNodes(graph, a.tail, a.head, a:options("orient'")/360*2*math.pi, true)
     end
   end
-  
+
   -- Step 4: Search two nodes with a desired at option:
   local first, second, third
-  
+
   for _, v in ipairs(graph.vertices) do
     if v.options['desired at'] then
       if first then
-	if second then
-	  third = v
-	  break
-	else
-	  second = v
-	end
-      else
-	first = v
+        if second then
+          third = v
+          break
+        else
+          second = v
+        end
+          else
+        first = v
       end
     end
   end
@@ -667,13 +668,13 @@
     local b = second.options['desired at']
     return LayoutPipeline.orientTwoNodes(graph, first, second, math.atan2(b.y-a.y,b.x-a.x), false)
   end
-  
+
   -- Computed during preprocessing:
   if rotation_info.from_node and postconditions.fixed ~= true then
     local x = rotation_info.from_node.pos.x
     local y = rotation_info.from_node.pos.y
     local from_angle = rotation_info.from_angle or math.atan2(rotation_info.to_node.pos.y - y, rotation_info.to_node.pos.x - x)
-    
+
     LayoutPipeline.rotateGraphAround(graph, x, y, from_angle, rotation_info.to_angle, rotation_info.swap)
   end
 end
@@ -689,74 +690,74 @@
 --
 -- @param graph A to-be-decomposed graph
 --
--- @return An array of graph objects that represent the connected components of the graph. 
+-- @return An array of graph objects that represent the connected components of the graph.
 
 function LayoutPipeline.decompose (digraph)
 
   -- The list of connected components (node sets)
   local components = {}
-  
+
   -- Remember, which graphs have already been visited
   local visited = {}
-  
+
   for _,v in ipairs(digraph.vertices) do
     if not visited[v] then
       -- Start a depth-first-search of the graph, starting at node n:
       local stack = { v }
       local component = Digraph.new {
-	syntactic_digraph = digraph.syntactic_digraph,
-	options = digraph.options
+        syntactic_digraph = digraph.syntactic_digraph,
+        options = digraph.options
       }
-      
+
       while #stack >= 1 do
-	local tos = stack[#stack]
-	stack[#stack] = nil -- pop
-	
-	if not visited[tos] then
-	  
-	  -- Visit pos:
-	  component:add { tos }
-	  visited[tos] = true
+        local tos = stack[#stack]
+        stack[#stack] = nil -- pop
 
-	  -- Push all unvisited neighbors:
-	  for _,a in ipairs(digraph:incoming(tos)) do
-	    local neighbor = a.tail
-	    if not visited[neighbor] then
-	      stack[#stack+1] = neighbor -- push
-	    end
-	  end
-	  for _,a in ipairs(digraph:outgoing(tos)) do
-	    local neighbor = a.head
-	    if not visited[neighbor] then
-	      stack[#stack+1] = neighbor -- push
-	    end
-	  end
-	end
+        if not visited[tos] then
+
+          -- Visit pos:
+          component:add { tos }
+          visited[tos] = true
+
+          -- Push all unvisited neighbors:
+          for _,a in ipairs(digraph:incoming(tos)) do
+            local neighbor = a.tail
+            if not visited[neighbor] then
+              stack[#stack+1] = neighbor -- push
+            end
+          end
+          for _,a in ipairs(digraph:outgoing(tos)) do
+            local neighbor = a.head
+            if not visited[neighbor] then
+              stack[#stack+1] = neighbor -- push
+            end
+          end
+        end
       end
-      
+
       -- Ok, vertices will now contain all vertices reachable from n.
       components[#components+1] = component
     end
   end
-  
+
   if #components < 2 then
     return { digraph }
   end
-  
+
   for _,c in ipairs(components) do
     table.sort (c.vertices, function (u,v) return u.event.index < v.event.index end)
     for _,v in ipairs(c.vertices) do
       for _,a in ipairs(digraph:outgoing(v)) do
-	local new_a = c:connect(a.tail, a.head)
-	new_a.syntactic_edges = a.syntactic_edges
+        local new_a = c:connect(a.tail, a.head)
+        new_a.syntactic_edges = a.syntactic_edges
       end
       for _,a in ipairs(digraph:incoming(v)) do
-	local new_a = c:connect(a.tail, a.head)
-	new_a.syntactic_edges = a.syntactic_edges
+        local new_a = c:connect(a.tail, a.head)
+        new_a.syntactic_edges = a.syntactic_edges
       end
     end
   end
-  
+
   return components
 end
 
@@ -784,23 +785,23 @@
 
 -- Right now, we hardcode the functions here. Perhaps make this
 -- dynamic in the future. Could easily be done on the tikzlayer,
--- acutally. 
+-- actually.
 
 LayoutPipeline.component_ordering_functions = {
-  ["increasing node number"] = 
-    function (g,h) 
+  ["increasing node number"] =
+    function (g,h)
       if #g.vertices == #h.vertices then
-	return g.vertices[1].event.index < h.vertices[1].event.index
+        return g.vertices[1].event.index < h.vertices[1].event.index
       else
-	return #g.vertices < #h.vertices 
+        return #g.vertices < #h.vertices
       end
     end,
-  ["decreasing node number"] = 
-    function (g,h) 
+  ["decreasing node number"] =
+    function (g,h)
       if #g.vertices == #h.vertices then
-	return g.vertices[1].event.index < h.vertices[1].event.index
+        return g.vertices[1].event.index < h.vertices[1].event.index
       else
-	return #g.vertices > #h.vertices 
+        return #g.vertices > #h.vertices
       end
     end,
   ["by first specified node"] = nil,
@@ -810,27 +811,27 @@
 
 
 local function compute_rotated_bb(vertices, angle, sep, bb)
-  
+
   local r = Transform.new_rotation(-angle)
-  
+
   for _,v in ipairs(vertices) do
     -- Find the rotated bounding box field,
     local t = Transform.concat(r,Transform.new_shift(v.pos.x, v.pos.y))
-    
+
     local min_x = math.huge
     local max_x = -math.huge
     local min_y = math.huge
     local max_y = -math.huge
-	
+
     for _,e in ipairs(v.path) do
       if type(e) == "table" then
-	local c = e:clone()
-	c:apply(t)
-      
-	min_x = math.min (min_x, c.x)
-	max_x = math.max (max_x, c.x)
-	min_y = math.min (min_y, c.y)
-	max_y = math.max (max_y, c.y)
+        local c = e:clone()
+        c:apply(t)
+
+        min_x = math.min (min_x, c.x)
+        max_x = math.max (max_x, c.x)
+        min_y = math.min (min_y, c.y)
+        max_y = math.max (max_y, c.y)
       end
     end
 
@@ -839,12 +840,12 @@
     max_x = max_x + sep
     min_y = min_y - sep
     max_y = max_y + sep
-    
+
     local _,_,_,_,c_x,c_y = v:boundingBox()
     local center = Coordinate.new(c_x,c_y)
-    
+
     center:apply(t)
-    
+
     bb[v].min_x = min_x
     bb[v].max_x = max_x
     bb[v].min_y = min_y
@@ -855,9 +856,9 @@
 
 
 
---- 
+---
 -- This internal function packs the components of a graph. See
--- Section~\ref{subsection-gd-component-packing} for details. 
+-- Section~\ref{subsection-gd-component-packing} for details.
 --
 -- @param graph The graph
 -- @param components A list of components
@@ -866,14 +867,14 @@
 
   local vertices = Storage.newTableStorage()
   local bb = Storage.newTableStorage()
-  
+
   -- Step 1: Preparation, rotation to target direction
   local sep = syntactic_digraph.options['component sep']
   local angle = syntactic_digraph.options['component direction']/180*math.pi
-  
+
   local mark = {}
   for _,c in ipairs(components) do
-    
+
     -- Setup the lists of to-be-considered nodes
     local vs = {}
     for _,v in ipairs(c.vertices) do
@@ -882,7 +883,7 @@
 
     for _,a in ipairs(c.arcs) do
       for _,p in ipairs(a:pointCloud()) do
-	vs [#vs + 1] = Vertex.new { pos = p }
+        vs [#vs + 1] = Vertex.new { pos = p }
       end
     end
     vertices[c] = vs
@@ -889,10 +890,10 @@
 
     compute_rotated_bb(vs, angle, sep/2, bb)
   end
-  
+
   local x_shifts = { 0 }
   local y_shifts = {}
-  
+
   -- Step 2: Vertical alignment
   for i,c in ipairs(components) do
     local max_max_y = -math.huge
@@ -899,7 +900,7 @@
     local max_center_y = -math.huge
     local min_min_y = math.huge
     local min_center_y = math.huge
-    
+
     for _,v in ipairs(c.vertices) do
       local info = bb[v]
       max_max_y = math.max(info.max_y, max_max_y)
@@ -907,7 +908,7 @@
       min_min_y = math.min(info.min_y, min_min_y)
       min_center_y = math.min(info.c_y, min_center_y)
     end
-    
+
     -- Compute alignment line
     local valign = syntactic_digraph.options['component align']
     local line
@@ -921,15 +922,15 @@
       line = min_center_y
     elseif valign == "first node" then
       line = bb[c.vertices[1]].c_y
-    else 
+    else
       line = min_min_y
     end
-    
+
     -- Overruled?
     for _,v in ipairs(c.vertices) do
       if v.options['align here'] then
-	line = bb[v].c_y
-	break
+        line = bb[v].c_y
+        break
       end
     end
 
@@ -956,9 +957,9 @@
       y_values[#y_values+1] = info.c_y
     end
   end
-  
+
   table.sort(y_values)
-  
+
   local y_ranks = {}
   local right_face = {}
   for i=1,#y_values do
@@ -966,41 +967,41 @@
     right_face[i] = -math.huge
   end
 
-  
-  
+
+
   for i=1,#components-1 do
     -- First, update right_face:
     local touched = {}
-    
+
     for _,v in ipairs(vertices[components[i]]) do
       local info = bb[v]
       local border = info.max_x
-      
+
       for i=y_ranks[info.min_y],y_ranks[info.max_y] do
-	touched[i] = true
-	right_face[i] = math.max(right_face[i], border)
+        touched[i] = true
+        right_face[i] = math.max(right_face[i], border)
       end
     end
-    
+
     -- Fill up the untouched entries:
     local right_max = -math.huge
     for i=1,#y_values do
       if not touched[i] then
-	-- Search for next and previous touched
-	local interpolate = -math.huge
-	for j=i+1,#y_values do
-	  if touched[j] then
-	    interpolate = math.max(interpolate,right_face[j] - (y_values[j] - y_values[i]))
-	    break
-	  end
-	end
-	for j=i-1,1,-1 do
-	  if touched[j] then
-	    interpolate = math.max(interpolate,right_face[j] - (y_values[i] - y_values[j]))
-	    break
-	  end
-	end
-	right_face[i] = math.max(interpolate,right_face[i])
+        -- Search for next and previous touched
+        local interpolate = -math.huge
+        for j=i+1,#y_values do
+          if touched[j] then
+            interpolate = math.max(interpolate,right_face[j] - (y_values[j] - y_values[i]))
+            break
+          end
+        end
+        for j=i-1,1,-1 do
+          if touched[j] then
+            interpolate = math.max(interpolate,right_face[j] - (y_values[i] - y_values[j]))
+            break
+          end
+        end
+        right_face[i] = math.max(interpolate,right_face[i])
       end
       right_max = math.max(right_max, right_face[i])
     end
@@ -1016,30 +1017,30 @@
       local border = info.min_x
 
       for i=y_ranks[info.min_y],y_ranks[info.max_y] do
-	touched[i] = true
-	left_face[i] = math.min(left_face[i], border)
+        touched[i] = true
+        left_face[i] = math.min(left_face[i], border)
       end
     end
-    
+
     -- Fill up the untouched entries:
     local left_min = math.huge
     for i=1,#y_values do
       if not touched[i] then
-	-- Search for next and previous touched
-	local interpolate = math.huge
-	for j=i+1,#y_values do
-	  if touched[j] then
-	    interpolate = math.min(interpolate,left_face[j] + (y_values[j] - y_values[i]))
-	    break
-	  end
-	end
-	for j=i-1,1,-1 do
-	  if touched[j] then
-	    interpolate = math.min(interpolate,left_face[j] + (y_values[i] - y_values[j]))
-	    break
-	  end
-	end
-	left_face[i] = interpolate
+        -- Search for next and previous touched
+        local interpolate = math.huge
+        for j=i+1,#y_values do
+          if touched[j] then
+            interpolate = math.min(interpolate,left_face[j] + (y_values[j] - y_values[i]))
+            break
+          end
+        end
+        for j=i-1,1,-1 do
+          if touched[j] then
+            interpolate = math.min(interpolate,left_face[j] + (y_values[i] - y_values[j]))
+            break
+          end
+        end
+        left_face[i] = interpolate
       end
       left_min = math.min(left_min, left_face[i])
     end
@@ -1051,10 +1052,10 @@
       shift = right_max - left_min
     else
       for i=1,#y_values do
-	shift = math.max(shift, right_face[i] - left_face[i])
+        shift = math.max(shift, right_face[i] - left_face[i])
       end
     end
-    
+
     -- Adjust nodes:
     x_shifts[i+1] = shift
     for _,v in ipairs(vertices[components[i+1]]) do
@@ -1063,12 +1064,12 @@
       info.max_x = info.max_x + shift
     end
   end
-  
+
   -- Now, rotate shifts
   for i,c in ipairs(components) do
     local x =  x_shifts[i]*math.cos(angle) - y_shifts[i]*math.sin(angle)
     local y =  x_shifts[i]*math.sin(angle) + y_shifts[i]*math.cos(angle)
-    
+
     for _,v in ipairs(vertices[c]) do
       v.pos.x = v.pos.x + x
       v.pos.y = v.pos.y + y
@@ -1094,13 +1095,13 @@
 
     for i=1,#events do
       if events[i].kind == "begin" then
-	stack[#stack + 1] = i
+        stack[#stack + 1] = i
       elseif events[i].kind == "end" then
-	local tos = stack[#stack]
-	stack[#stack] = nil -- pop
-	
-	events[tos].end_index = i
-	events[i].begin_index = tos
+        local tos = stack[#stack]
+        stack[#stack] = nil -- pop
+
+        events[tos].end_index = i
+        events[i].begin_index = tos
       end
     end
   end
@@ -1124,48 +1125,48 @@
       local p = e.path
       p:makeRigid()
       local orig = p:clone()
-      
-      if e.options['tail cut'] and e.tail.options['cut policy'] == "as edge requests" 
-	or e.tail.options['cut policy'] == "all" then
 
-	local vpath = e.tail.path:clone()
-	vpath:shiftByCoordinate(e.tail.pos)
-	
-	local x = p:intersectionsWith (vpath)
-	
-	if #x > 0 then
-	  p:cutAtBeginning(x[1].index, x[1].time)
-	end
+      if e.options['tail cut'] and e.tail.options['cut policy'] == "as edge requests"
+        or e.tail.options['cut policy'] == "all" then
+
+        local vpath = e.tail.path:clone()
+        vpath:shiftByCoordinate(e.tail.pos)
+
+        local x = p:intersectionsWith (vpath)
+
+        if #x > 0 then
+          p:cutAtBeginning(x[1].index, x[1].time)
+        end
       end
-      
-      if e.options['head cut'] and e.head.options['cut policy'] == "as edge requests" 
-	or e.head.options['cut policy'] == "all" then
-	
-	local vpath = e.head.path:clone()
-	vpath:shiftByCoordinate(e.head.pos)
-	x = p:intersectionsWith (vpath)
-	if #x > 0 then
-	  p:cutAtEnd(x[#x].index, x[#x].time)
-	else
-	  -- Check whether there was an intersection with the original
-	  --path:
-	  local x2 = orig:intersectionsWith (vpath)
-	  if #x2 > 0 then
-	    -- Ok, after cutting the tail vertex, there is no longer
-	    -- an intersection with the head vertex, but there used to
-	    -- be one. This means that the vertices overlap and the
-	    -- path should be ``inside'' them. Hmm...
-	    if e.options['allow inside edges'] and #p > 1 then
-	      local from = p[2]
-	      local to = x2[1].point
-	      p:clear()
-	      p:appendMoveto(from)
-	      p:appendLineto(to)
-	    else
-	      p:clear()
-	    end
-	  end
-	end
+
+      if e.options['head cut'] and e.head.options['cut policy'] == "as edge requests"
+        or e.head.options['cut policy'] == "all" then
+
+        local vpath = e.head.path:clone()
+        vpath:shiftByCoordinate(e.head.pos)
+        x = p:intersectionsWith (vpath)
+        if #x > 0 then
+          p:cutAtEnd(x[#x].index, x[#x].time)
+        else
+          -- Check whether there was an intersection with the original
+          --path:
+          local x2 = orig:intersectionsWith (vpath)
+          if #x2 > 0 then
+            -- Ok, after cutting the tail vertex, there is no longer
+            -- an intersection with the head vertex, but there used to
+            -- be one. This means that the vertices overlap and the
+            -- path should be ``inside'' them. Hmm...
+            if e.options['allow inside edges'] and #p > 1 then
+              local from = p[2]
+              local to = x2[1].point
+              p:clear()
+              p:appendMoveto(from)
+              p:appendLineto(to)
+            else
+              p:clear()
+            end
+          end
+        end
       end
     end
   end
@@ -1200,7 +1201,7 @@
   for i,e in ipairs(scope.events) do
     graph.events[i] = e
   end
-  
+
   -- Nodes
   for _,v in ipairs(g.vertices) do
     if not v.name then
@@ -1212,13 +1213,13 @@
     local node = Node.new{
       name = v.name,
       tex = {
-	tex_node = v.tex and v.tex.stored_tex_box_number,
-	shape = v.shape,
-	minX = minX, 
-	maxX = maxX, 
-	minY = minY, 
-	maxY = maxY, 
-      }, 
+        tex_node = v.tex and v.tex.stored_tex_box_number,
+        shape = v.shape,
+        minX = minX,
+        maxX = maxX,
+        minY = minY,
+        maxY = maxY,
+      },
       options = v.options,
       event_index = v.event.index,
       index = v.event.index,
@@ -1234,39 +1235,39 @@
     local da = g.syntactic_digraph:arc(a.tail, a.head)
     if da then
       for _,m in ipairs(da.syntactic_edges) do
-	if not mark[m] then
-	  mark[m] = true
-	  local from_node = graph:findNode(da.tail.name)
-	  local to_node = graph:findNode(da.head.name)
-	  local edge = graph:createEdge(from_node, to_node, m.direction, nil, m.options, nil)
-	  edge.event_index = m.event.index
-	  edge.orig_m = m
-	  graph.events[m.event.index] = { kind = 'edge', parameters = edge }
-	end
+        if not mark[m] then
+          mark[m] = true
+          local from_node = graph:findNode(da.tail.name)
+          local to_node = graph:findNode(da.head.name)
+          local edge = graph:createEdge(from_node, to_node, m.direction, nil, m.options, nil)
+          edge.event_index = m.event.index
+          edge.orig_m = m
+          graph.events[m.event.index] = { kind = 'edge', parameters = edge }
+        end
       end
     end
     local da = g.syntactic_digraph:arc(a.head, a.tail)
-    if da then 
+    if da then
       for _,m in ipairs(da.syntactic_edges) do
-	if not mark[m] then
-	  mark[m] = true
-	  local from_node = graph:findNode(da.tail.name)
-	  local to_node = graph:findNode(da.head.name)
-	  local edge = graph:createEdge(from_node, to_node, m.direction, nil, m.options, nil)
-	  edge.event_index = m.event.index
-	  edge.orig_m = m
-	  graph.events[m.event.index] = { kind = 'edge', parameters = edge }
-	end
+        if not mark[m] then
+          mark[m] = true
+          local from_node = graph:findNode(da.tail.name)
+          local to_node = graph:findNode(da.head.name)
+          local edge = graph:createEdge(from_node, to_node, m.direction, nil, m.options, nil)
+          edge.event_index = m.event.index
+          edge.orig_m = m
+          graph.events[m.event.index] = { kind = 'edge', parameters = edge }
+        end
       end
     end
   end
-  
+
   table.sort(graph.edges, function(e1,e2) return e1.event_index < e2.event_index end)
   for _,n in ipairs (graph.nodes) do
     table.sort(n.edges, function(e1,e2) return e1.event_index < e2.event_index end)
   end
-  
 
+
   -- Clusters
   for _, c in ipairs(scope.collections['same layer'] or {}) do
     cluster = Cluster.new("cluster" .. unique_count)
@@ -1274,7 +1275,7 @@
     graph:addCluster(cluster)
     for _,v in ipairs(c.vertices) do
       if g:contains(v) then
-	cluster:addNode(graph:findNode(v.name))
+        cluster:addNode(graph:findNode(v.name))
       end
     end
   end
@@ -1292,7 +1293,7 @@
     if #e.bend_points > 0 then
       local c = {}
       for _,x in ipairs(e.bend_points) do
-	c[#c+1] = Coordinate.new (x.x, x.y)
+        c[#c+1] = Coordinate.new (x.x, x.y)
       end
       e.orig_m:setPolylinePath(c)
     end
@@ -1309,12 +1310,12 @@
 
   algorithm.graph = graph
   graph:registerAlgorithm(algorithm)
-    
+
   -- If requested, remove loops
   if algorithm_class.preconditions.loop_free then
     Simplifiers:removeLoopsOldModel(algorithm)
   end
-    
+
   -- If requested, collapse multiedges
   if algorithm_class.preconditions.simple then
     Simplifiers:collapseMultiedgesOldModel(algorithm)
@@ -1324,12 +1325,12 @@
     -- Main run of the algorithm:
     algorithm:run ()
   end
-  
+
   -- If requested, expand multiedges
   if algorithm_class.preconditions.simple then
     Simplifiers:expandMultiedgesOldModel(algorithm)
   end
-  
+
   -- If requested, restore loops
   if algorithm_class.preconditions.loop_free then
     Simplifiers:restoreLoopsOldModel(algorithm)
@@ -1343,4 +1344,4 @@
 
 -- Done
 
-return LayoutPipeline
\ No newline at end of file
+return LayoutPipeline

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/NodeAnchors.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/NodeAnchors.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/NodeAnchors.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,9 +18,9 @@
 --
 -- \label{section-gd-anchors}
 --
--- When a graph has been layed out completely, the edges between the
+-- When a graph has been laid out completely, the edges between the
 -- nodes must be drawn. Conceptually, an edge is ``between two
--- nodes,'' but when we actually draw the node, we do not really want
+-- nodes'', but when we actually draw the node, we do not really want
 -- the edge's path to start ``in the middle'' of the node; rather, we
 -- want it to start ``on the border'' and also end there.
 --
@@ -37,7 +37,7 @@
 -- inside the tail and head nodes, respectively. The edge path will
 -- then start and end at these points, however, they will usually be
 -- shortened so that they actually start and end on the intersection
--- of the edge's path with the nodes' paths. 
+-- of the edge's path with the nodes' paths.
 
 
 ---
@@ -47,41 +47,41 @@
   type = "string",
   initial = "",
 
-  summary = [["  
-      Specifies where in the tail vertex the edge should start. 
+  summary = [["
+    Specifies where in the tail vertex the edge should start.
   "]],
 
   documentation = [["
-      This is either a string or a number, interpreted as an angle
-      (with 90 meaning ``up''). If it is a string, when the start of
-      the edge is computed, we try to look up the anchor in the tail
-      vertex's table of anchors (some anchors get installed in this
-      table by the display system). If it is not found, we test
-      whether it is one of the special ``direction anchors'' like
-      |north| or |south east|. If so, we convert them into points on
-      the border of the node that lie in the direction of a line
-      starting at the center to a point on the bounding box of the
-      node in the designated direction. Finally, if the anchor is a
-      number, we use a point on the border of the node that is on a
-      line from the center in the specified direction.
+    This is either a string or a number, interpreted as an angle
+    (with 90 meaning ``up''). If it is a string, when the start of
+    the edge is computed, we try to look up the anchor in the tail
+    vertex's table of anchors (some anchors get installed in this
+    table by the display system). If it is not found, we test
+    whether it is one of the special ``direction anchors'' like
+    |north| or |south east|. If so, we convert them into points on
+    the border of the node that lie in the direction of a line
+    starting at the center to a point on the bounding box of the
+    node in the designated direction. Finally, if the anchor is a
+    number, we use a point on the border of the node that is on a
+    line from the center in the specified direction.
 
-      If the anchor is set to the empty string (which is the default), 
-      the anchor is interpreted as the |center| anchor inside the
-      graph drawing system. However, a display system may choose to
-      make a difference between the |center| anchor and an empty
-      anchor (\tikzname\ does: for options like |bend left| if the
-      anchor is empty, the bend line starts at the border of the node,
-      while for the anchor set explicitly to |center| it starts at the
-      center).
+    If the anchor is set to the empty string (which is the default),
+    the anchor is interpreted as the |center| anchor inside the
+    graph drawing system. However, a display system may choose to
+    make a difference between the |center| anchor and an empty
+    anchor (\tikzname\ does: for options like |bend left| if the
+    anchor is empty, the bend line starts at the border of the node,
+    while for the anchor set explicitly to |center| it starts at the
+    center).
 
-      Note that graph drawing algorithms need not take the
-      setting of this option into consideration. However, the final
-      rendering of the edge will always take it into consideration
-      (only, the setting may not be very sensible if the algorithm
-      ignored it).
+    Note that graph drawing algorithms need not take the
+    setting of this option into consideration. However, the final
+    rendering of the edge will always take it into consideration
+    (only, the setting may not be very sensible if the algorithm
+    ignored it).
   "]]
 }
-    
+
 ---
 
 declare {
@@ -101,10 +101,10 @@
   initial = true,
 
   summary = [["
-      Decides whether the tail of an edge is ``cut'', meaning
-      that the edge's path will be shortened at the beginning so that
-      it starts only of the node's border rather than at the exact
-      position of the |tail anchor|, which may be inside the node.
+    Decides whether the tail of an edge is ``cut'', meaning
+    that the edge's path will be shortened at the beginning so that
+    it starts only of the node's border rather than at the exact
+    position of the |tail anchor|, which may be inside the node.
   "]]
 }
 
@@ -130,23 +130,24 @@
   summary = "The policy for cutting edges entering or leaving a node.",
 
   documentation = [["
-      This option is important for nodes only. It can have three
-      possible values:
-      \begin{itemize}
+    This option is important for nodes only. It can have three
+    possible values:
+    %
+    \begin{itemize}
       \item |as edge requests| Whether or not an edge entering or
-      leaving the node is cut depends on the setting of the edge's
-      |tail cut| and |head cut| options. This is the default.
+        leaving the node is cut depends on the setting of the edge's
+        |tail cut| and |head cut| options. This is the default.
       \item |all| All edges entering or leaving the node are cut,
-      regardless of the edges' cut values.
+        regardless of the edges' cut values.
       \item |none| No edge entering or leaving the node is cut,
-      regardless of the edges' cut values.
-      \end{itemize}
+        regardless of the edges' cut values.
+    \end{itemize}
   "]]
 }
 
-    
+
 ---
-declare {    
+declare {
   key = "allow inside edges",
   type = "boolean",
   initial = "true",
@@ -154,21 +155,21 @@
   summary = "Decides whether an edge between overlapping nodes should be drawn.",
 
   documentation = [["
-      If two vertices overlap, it may happen that when you draw an
-      edge between them, this edges would be completely inside the two
-      vertices. In this case, one could either not draw them or one
-      could draw a sort of ``inside edge''.
+    If two vertices overlap, it may happen that when you draw an
+    edge between them, this edges would be completely inside the two
+    vertices. In this case, one could either not draw them or one
+    could draw a sort of ``inside edge''.
   "]],
-      
+
   examples = { [["
-      \tikz \graph [no layout, nodes={draw, minimum size=20pt}] {
-        a [x=0, y=0] -- b [x=15pt, y=10pt] -- c[x=40pt]
-      };
-      "]], [["
-      \tikz \graph [no layout, nodes={draw, minimum size=20pt},
-                    allow inside edges=false] {
-        a [x=0, y=0] -- b [x=15pt, y=10pt] -- c[x=40pt]
-      };
-      "]]
+    \tikz \graph [no layout, nodes={draw, minimum size=20pt}] {
+      a [x=0, y=0] -- b [x=15pt, y=10pt] -- c[x=40pt]
+    };
+  "]],[["
+    \tikz \graph [no layout, nodes={draw, minimum size=20pt},
+                  allow inside edges=false] {
+      a [x=0, y=0] -- b [x=15pt, y=10pt] -- c[x=40pt]
+    };
+  "]]
   }
 }
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Orientation.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Orientation.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Orientation.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -27,7 +27,7 @@
 -- you can specify that the line from a certain vertex to another
 -- vertex should have a certain slope. How these vertices and slopes
 -- are specified in explained momentarily. Second, you can specify a
--- so-called ``growth direction'' for trees. 
+-- so-called ``growth direction'' for trees.
 --
 -- @end
 
@@ -48,42 +48,40 @@
   type = "direction",
   default = 0,
 
-  summary = [["  
-       This key specifies that the straight line from the |orient tail| to
-       the |orient head| should be at an angle of \meta{direction} relative to
-       the right-going $x$-axis. Which vertices are used as tail an head
-       depends on where the |orient| option is encountered: When used with
-       an edge, the tail is the edge's tail und the head is the edge's
-       head. When used with a node, the tail or the head must be specified
-       explicitly and the node is used as the node missing in the
-       specification. When used with a graph as a whole, both the head and
-       tail nodes must be specified explicitly.
+  summary = [["
+    This key specifies that the straight line from the |orient tail| to
+    the |orient head| should be at an angle of \meta{direction} relative to
+    the right-going $x$-axis. Which vertices are used as tail an head
+    depends on where the |orient| option is encountered: When used with
+    an edge, the tail is the edge's tail and the head is the edge's
+    head. When used with a node, the tail or the head must be specified
+    explicitly and the node is used as the node missing in the
+    specification. When used with a graph as a whole, both the head and
+    tail nodes must be specified explicitly.
   "]],
   documentation = [["
-       Note that the \meta{direction} is independent of the actual to-path
-       of an edge, which might define a bend or more complicated shapes. For
-       instance, a \meta{angle} of |45| requests that the end node is ``up
-       and right'' relative to the start node. 
+    Note that the \meta{direction} is independent of the actual to-path
+    of an edge, which might define a bend or more complicated shapes. For
+    instance, a \meta{angle} of |45| requests that the end node is ``up
+    and right'' relative to the start node.
 
-       You can also specify the standard direction texts |north| or |south east|
-       and so forth as \meta{direction} and also |up|, |down|, |left|, and |right|. Also, you 
-       can specify |-| for ``right'' and \verb!|! for ``down.''
-  "]],        
-  examples = {
-    [["
-       \tikz \graph [spring layout]
-       {
-         a -- { b, c, d, e -- {f, g, h} };
-         h -- [orient=30] a;
-       };
-    "]],
-    [["
-       \tikz \graph [spring layout]
-       {
-         a -- { b, c, d[> orient=right], e -- {f, g, h} };
-         h -- a;
-       };
-    "]]
+    You can also specify the standard direction texts |north| or |south east|
+    and so forth as \meta{direction} and also |up|, |down|, |left|, and
+    |right|. Also, you can specify |-| for ``right'' and \verb!|! for ``down''.
+  "]],
+  examples = {[["
+    \tikz \graph [spring layout]
+    {
+      a -- { b, c, d, e -- {f, g, h} };
+      h -- [orient=30] a;
+    };
+  "]],[["
+    \tikz \graph [spring layout]
+    {
+      a -- { b, c, d[> orient=right], e -- {f, g, h} };
+      h -- a;
+    };
+  "]]
   }
 }
 
@@ -95,16 +93,16 @@
   type = "direction",
   default = 0,
 
-  summary = [["  
-       Same as |orient|, only the rest of the graph should be
-       flipped relative to the connection line.
+  summary = [["
+    Same as |orient|, only the rest of the graph should be
+    flipped relative to the connection line.
   "]],
   examples = [["
-       \tikz \graph [spring layout]
-       {
-         a -- { b, c, d[> orient'=right], e -- {f, g, h} };
-         h -- a;
-       };
+    \tikz \graph [spring layout]
+    {
+      a -- { b, c, d[> orient'=right], e -- {f, g, h} };
+      h -- a;
+    };
   "]]
 }
 
@@ -114,30 +112,28 @@
   key = "orient tail",
   type = "string",
 
-  summary = [["  
-       Specifies the tail vertex for the orientation of a graph. See
-       |orient| for details.
+  summary = [["
+    Specifies the tail vertex for the orientation of a graph. See
+    |orient| for details.
   "]],
-  examples = {
-    [["
-       \tikz \graph [spring layout] {
-         a [orient=|, orient tail=f] -- { b, c, d, e -- {f, g, h} };
-         { h, g } -- a;
-       };
-    "]],
-    [["
-       \tikz \graph [spring layout] {
-         a [orient=down, orient tail=h] -- { b, c, d, e -- {f, g, h} };
-         { h, g } -- a;
-       };
-    "]]
+  examples = {[["
+    \tikz \graph [spring layout] {
+      a [orient=|, orient tail=f] -- { b, c, d, e -- {f, g, h} };
+      { h, g } -- a;
+    };
+  "]],[["
+    \tikz \graph [spring layout] {
+      a [orient=down, orient tail=h] -- { b, c, d, e -- {f, g, h} };
+      { h, g } -- a;
+    };
+  "]]
   }
 }
-    
 
 
 
 
+
 ---
 
 declare {
@@ -144,23 +140,21 @@
   key = "orient head",
   type = "string",
 
-  summary = [["  
-       Specifies the head vertex for the orientation of a graph. See
-       |orient| for details.
+  summary = [["
+    Specifies the head vertex for the orientation of a graph. See
+    |orient| for details.
   "]],
-  examples = {     
-    [["
-       \tikz \graph [spring layout]
-       {
-         a [orient=|, orient head=f] -- { b, c, d, e -- {f, g, h} };
-         { h, g } -- a;
-       };
-    "]],
-    [["
-       \tikz \graph [spring layout] { a -- b -- c -- a };
-       \tikz \graph [spring layout, orient=10,
-                     orient tail=a, orient head=b] { a -- b -- c -- a };
-    "]]
+  examples = {[["
+    \tikz \graph [spring layout]
+    {
+      a [orient=|, orient head=f] -- { b, c, d, e -- {f, g, h} };
+      { h, g } -- a;
+    };
+  "]],[["
+    \tikz \graph [spring layout] { a -- b -- c -- a };
+    \tikz \graph [spring layout, orient=10,
+                  orient tail=a, orient head=b] { a -- b -- c -- a };
+  "]]
   }
 }
 
@@ -170,20 +164,20 @@
   key = "horizontal",
   type = "string",
 
-  summary = [["  
-       A shorthand for specifying |orient tail|, |orient head| and
-       |orient=0|. The tail will be everything before the part ``| to |''
-       and the head will be everything following it. 
+  summary = [["
+    A shorthand for specifying |orient tail|, |orient head| and
+    |orient=0|. The tail will be everything before the part ``| to |''
+    and the head will be everything following it.
   "]],
-  examples = [["     
-       \tikz \graph [spring layout]                    { a -- b -- c -- a };
-       \tikz \graph [spring layout, horizontal=a to b] { a -- b -- c -- a };
+  examples = [["
+    \tikz \graph [spring layout]                    { a -- b -- c -- a };
+    \tikz \graph [spring layout, horizontal=a to b] { a -- b -- c -- a };
   "]]
 }
-       
 
 
 
+
 ---
 
 declare {
@@ -190,11 +184,10 @@
   key = "horizontal'",
   type = "string",
 
-  summary = [["  
-       Like |horizontal|, but with a flip.
+  summary = [["
+    Like |horizontal|, but with a flip.
   "]]
 }
-    
 
 
 
@@ -201,6 +194,7 @@
 
 
 
+
 ---
 
 declare {
@@ -207,20 +201,19 @@
   key = "vertical",
   type = "string",
 
-  summary = [["  
-       A shorthand for specifying |orient tail|, |orient head| and
-       |orient=-90|.
+  summary = [["
+    A shorthand for specifying |orient tail|, |orient head| and |orient=-90|.
   "]],
   examples = [["
-       \tikz \graph [spring layout]                  { a -- b -- c -- a };
-       \tikz \graph [spring layout, vertical=a to b] { a -- b -- c -- a };
+    \tikz \graph [spring layout]                  { a -- b -- c -- a };
+    \tikz \graph [spring layout, vertical=a to b] { a -- b -- c -- a };
   "]]
 }
-       
 
 
 
 
+
 ---
 
 declare {
@@ -227,8 +220,8 @@
   key = "vertical'",
   type = "string",
 
-  summary = [["  
-       Like |vertical|, but with a flip.
+  summary = [["
+    Like |vertical|, but with a flip.
   "]]
 }
 
@@ -240,54 +233,50 @@
   key = "grow",
   type = "direction",
 
-  summary = [["  
-       This key specifies in which direction the neighbors of a node
-       ``should grow.'' For some graph drawing algorithms, especially for
-       those that layout trees, but also for those that produce layered
-       layouts, there is a natural direction in which the ``children'' of
-       a node should be placed. For instance, saying |grow=down| will cause
-       the children of a node in a tree to be placed in a left-to-right
-       line below the node (as always, you can replace the \meta{angle}
-       by direction texts). The children are requested to be placed in a
-       counter-clockwise fashion, the |grow'| key will place them in a
-       clockwise fashion.
+  summary = [["
+    This key specifies in which direction the neighbors of a node
+    ``should grow''. For some graph drawing algorithms, especially for
+    those that layout trees, but also for those that produce layered
+    layouts, there is a natural direction in which the ``children'' of
+    a node should be placed. For instance, saying |grow=down| will cause
+    the children of a node in a tree to be placed in a left-to-right
+    line below the node (as always, you can replace the \meta{angle}
+    by direction texts). The children are requested to be placed in a
+    counter-clockwise fashion, the |grow'| key will place them in a
+    clockwise fashion.
   "]],
-  documentation = [["        
-       Note that when you say |grow=down|, it is not necessarily the case
-       that any particular node is actually directly below the current
-       node; the key just requests that the direction of growth is
-       downward.
-        
-       In principle, you can specify the direction of growth for each node 
-       individually, but do not count on graph drawing algorithms to
-       honour these wishes.
-       
-       When you give the |grow=right| key to the graph as a whole, it will
-       be applied to all nodes. This happens to be exactly what you want:
+  documentation = [["
+    Note that when you say |grow=down|, it is not necessarily the case
+    that any particular node is actually directly below the current
+    node; the key just requests that the direction of growth is downward.
+
+    In principle, you can specify the direction of growth for each node
+    individually, but do not count on graph drawing algorithms to
+    honor these wishes.
+
+    When you give the |grow=right| key to the graph as a whole, it will
+    be applied to all nodes. This happens to be exactly what you want:
   "]],
-  examples = {     
-    [["
-       \tikz \graph [layered layout, sibling distance=5mm]
-       {
-         a [grow=right] -- { b, c, d, e -- {f, g, h} };
-         { h, g } -- a;
-       };
-    "]],      
-    [["
-       \tikz \graph [layered layout, grow=right, sibling distance=5mm]
-       {
-         a -- { b, c, d, e -- {f, g, h} };
-         { h, g } -- a;
-       };
-    "]],      
-    [["
-       \tikz
-         \graph [layered layout, grow=-80]
-         {
-           {a,b,c} --[complete bipartite] {e,d,f}
-                   --[complete bipartite] {g,h,i};
-         };
-    "]]
+  examples = {[["
+    \tikz \graph [layered layout, sibling distance=5mm]
+    {
+      a [grow=right] -- { b, c, d, e -- {f, g, h} };
+      { h, g } -- a;
+    };
+  "]],[["
+    \tikz \graph [layered layout, grow=right, sibling distance=5mm]
+    {
+      a -- { b, c, d, e -- {f, g, h} };
+      { h, g } -- a;
+    };
+  "]],[["
+    \tikz
+      \graph [layered layout, grow=-80]
+      {
+        {a,b,c} --[complete bipartite] {e,d,f}
+                --[complete bipartite] {g,h,i};
+      };
+  "]]
   }
 }
 
@@ -300,11 +289,11 @@
 
   summary = "Same as |grow|, only with the children in clockwise order.",
   examples = [["
-       \tikz \graph [layered layout, sibling distance=5mm]
-       {
-         a [grow'=right] -- { b, c, d, e -- {f, g, h} };
-         { h, g } -- a;
-       };
+    \tikz \graph [layered layout, sibling distance=5mm]
+    {
+      a [grow'=right] -- { b, c, d, e -- {f, g, h} };
+      { h, g } -- a;
+    };
   "]]
 }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Sublayouts.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Sublayouts.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/Sublayouts.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -15,7 +15,7 @@
   for _,v in ipairs(g.vertices) do
     s = s .. tostring(v) .. "[" .. tostring(v.pos) .. "]\n "
   end
-  
+
   s = s .. "\n"
 
   for _,a in ipairs(g.arcs) do
@@ -23,16 +23,16 @@
       s = s .. tostring(e) .. "(" .. tostring(e.path) .. ")\n"
     end
   end
-  
+
   pgf.debug((pref or "") .. s)
 end
 
 
 ---
--- The |Sublayouts| module handles graphs for which multiple layouts are defined. 
+-- The |Sublayouts| module handles graphs for which multiple layouts are defined.
 --
 -- Please see Section~\ref{section-gd-sublayouts} for an overview of
--- sublayouts. 
+-- sublayouts.
 --
 
 local Sublayouts = {}
@@ -80,7 +80,7 @@
 
 
 -- Nudge positioning. You can call this function  several times on the
--- same graph; nudging will be done only once. 
+-- same graph; nudging will be done only once.
 --
 -- @param graph A graph
 --
@@ -100,12 +100,12 @@
 --
 -- @param scope A scope
 -- @param syntactic_digraph The syntactic digraph.
--- @param test Only for vertices whose subgraph collection passes this test will we create subgraph nodes 
+-- @param test Only for vertices whose subgraph collection passes this test will we create subgraph nodes
 local function create_subgraph_node(scope, syntactic_digraph, vertex)
-  
+
   local subgraph_collection = vertex.subgraph_collection
   local binding = InterfaceCore.binding
-  
+
   local cloud = {}
   -- Add all points of n's collection, except for v itself, to the cloud:
   for _,v in ipairs(subgraph_collection.vertices) do
@@ -112,9 +112,9 @@
     if vertex ~= v then
       assert(syntactic_digraph:contains(v), "the layout must contain all nodes of the subgraph")
       for _,p in ipairs(v.path) do
-	if type(p) == "table" then
-	  cloud[#cloud+1] = p + v.pos
-	end
+        if type(p) == "table" then
+          cloud[#cloud+1] = p + v.pos
+        end
       end
     end
   end
@@ -121,7 +121,7 @@
   for _,e in ipairs(subgraph_collection.edges) do
     for _,p in ipairs(e.path) do
       if type(p) == "table" then
-	cloud[#cloud+1] = p:clone()
+        cloud[#cloud+1] = p:clone()
       end
     end
   end
@@ -137,13 +137,13 @@
   o[#o+1] = { key = "subgraph point cloud", value = table.concat(lib.imap(cloud, tostring)) }
   o[#o+1] = { key = "subgraph bounding box height", value = tostring(y_max-y_min) .. "pt" }
   o[#o+1] = { key = "subgraph bounding box width", value = tostring(x_max-x_min) .. "pt" }
-    
+
   -- And now, the "grand call":
   binding:createVertex(vertex.subgraph_info)
-  
+
   -- Shift it were it belongs
   vertex.pos:shift(c_x,c_y)
-  
+
   -- Remember all the subnodes for nudging and regardless
   -- positioning
   local s = {}
@@ -191,22 +191,22 @@
 -- @return A laid out graph.
 
 function Sublayouts.layoutRecursively(scope, layout, fun)
-  
+
   -- Step 1: Iterate over all sublayouts of the current layout:
   local resulting_graphs = {}
   local loc = Storage.new()
-   
+
   -- Now, iterate over all sublayouts
   for i,child in ipairs(layout:childrenOfKind(InterfaceCore.sublayout_kind)) do
     resulting_graphs[i] = Sublayouts.layoutRecursively(scope, child, fun)
     loc[resulting_graphs[i]] = child
   end
-  
+
   -- Step 2: Run the merge process:
   local merged_graphs = {}
-  
+
   while #resulting_graphs > 0 do
-    
+
     local n = #resulting_graphs
 
     -- Setup marked array:
@@ -214,7 +214,7 @@
     for i=1,n do
       marked[i] = false
     end
-    
+
     -- Mark first graph and copy everything from there
     marked[1] = true
     local touched = Storage.new()
@@ -221,50 +221,50 @@
     for _,v in ipairs(resulting_graphs[1].vertices) do
       v.pos = positions[v][resulting_graphs[1]]
       touched[v] = true
-    end    
+    end
 
     -- Repeatedly find a node that is connected to a marked node:
     local i = 1
     while i <= n do
       if not marked[i] then
-	for j=1,n do
-	  if marked[j] then
-	    local v = intersection(resulting_graphs[i], resulting_graphs[j])
-	    if v then
-	      -- Aha, they intersect at vertex v
+        for j=1,n do
+          if marked[j] then
+            local v = intersection(resulting_graphs[i], resulting_graphs[j])
+            if v then
+              -- Aha, they intersect at vertex v
 
-	      -- Mark the i-th graph:
-	      marked[i] = true
-	      connected_some_graph = true
-	      
-	      -- Shift the i-th graph:
-	      local x_offset = v.pos.x - positions[v][resulting_graphs[i]].x
-	      local y_offset = v.pos.y - positions[v][resulting_graphs[i]].y
-	      	      
-	      for _,u in ipairs(resulting_graphs[i].vertices) do
-		if not touched[u] then
-		  touched[u] = true
-		  u.pos = positions[u][resulting_graphs[i]]:clone()
-		  u.pos:shift(x_offset, y_offset)
+              -- Mark the i-th graph:
+              marked[i] = true
+              connected_some_graph = true
 
-		  for _,a in ipairs(resulting_graphs[i]:outgoing(u)) do
-		    for _,e in ipairs(a.syntactic_edges) do
-		      for _,p in ipairs(e.path) do
-			if type(p) == "table" then
-			  p:shift(x_offset, y_offset)
-			end
-		      end
-		    end
-		  end
-		end
-	      end
-	      
-	      -- Restart
-	      i = 0
-	      break
-	    end		
-	  end
-	end
+              -- Shift the i-th graph:
+              local x_offset = v.pos.x - positions[v][resulting_graphs[i]].x
+              local y_offset = v.pos.y - positions[v][resulting_graphs[i]].y
+
+              for _,u in ipairs(resulting_graphs[i].vertices) do
+                if not touched[u] then
+                  touched[u] = true
+                  u.pos = positions[u][resulting_graphs[i]]:clone()
+                  u.pos:shift(x_offset, y_offset)
+
+                  for _,a in ipairs(resulting_graphs[i]:outgoing(u)) do
+                    for _,e in ipairs(a.syntactic_edges) do
+                      for _,p in ipairs(e.path) do
+                        if type(p) == "table" then
+                          p:shift(x_offset, y_offset)
+                        end
+                      end
+                    end
+                  end
+                end
+              end
+
+              -- Restart
+              i = 0
+              break
+            end
+          end
+        end
       end
       i = i + 1
     end
@@ -273,19 +273,19 @@
     local merge = Digraph.new {}
     merge.syntactic_digraph = merge
     local remaining = {}
-    
+
     -- Add all vertices and edges:
     for i=1,n do
       if marked[i] then
-	merge:add (resulting_graphs[i].vertices)
-	for _,a in ipairs(resulting_graphs[i].arcs) do
-	  local ma = merge:connect(a.tail,a.head)
-	  for _,e in ipairs(a.syntactic_edges) do
-	    ma.syntactic_edges[#ma.syntactic_edges+1] = e
-	  end
-	end
-      else
-	remaining[#remaining + 1] = resulting_graphs[i]
+        merge:add (resulting_graphs[i].vertices)
+        for _,a in ipairs(resulting_graphs[i].arcs) do
+          local ma = merge:connect(a.tail,a.head)
+          for _,e in ipairs(a.syntactic_edges) do
+            ma.syntactic_edges[#ma.syntactic_edges+1] = e
+          end
+        end
+          else
+        remaining[#remaining + 1] = resulting_graphs[i]
       end
     end
 
@@ -294,25 +294,25 @@
 
     -- Restart with rest:
     merged_graphs[#merged_graphs+1] = merge
-    
+
     resulting_graphs = remaining
   end
-  
+
   -- Step 3: Run the algorithm on the layout:
-  
-  local class = layout.options.algorithm_phases.main 
+
+  local class = layout.options.algorithm_phases.main
   assert (type(class) == "table", "algorithm selection failed")
-  
+
   local algorithm = class
   local uncollapsed_subgraph_nodes = lib.imap(
     scope.collections[InterfaceCore.subgraph_node_kind] or {},
     function (c)
       if c.parent_layout == layout then
-	return c.subgraph_node
+        return c.subgraph_node
       end
     end)
 
-  
+
   -- Create a new syntactic digraph:
   local syntactic_digraph = Digraph.new {
     options = layout.options
@@ -319,12 +319,12 @@
   }
 
   syntactic_digraph.syntactic_digraph = syntactic_digraph
-  
+
   -- Copy all vertices and edges from the collection...
   syntactic_digraph:add (layout.vertices)
   for _,e in ipairs(layout.edges) do
     syntactic_digraph:add {e.head, e.tail}
-    local arc = syntactic_digraph:connect(e.tail, e.head)    
+    local arc = syntactic_digraph:connect(e.tail, e.head)
     arc.syntactic_edges[#arc.syntactic_edges+1] = e
   end
 
@@ -335,13 +335,13 @@
     -- Test, if all vertices of the subgraph are in one of the merged graphs.
     for _,g in ipairs(merged_graphs) do
       if special_vertex_subset(vertices, g) then
-	-- Ok, we can create a subgraph now
-	create_subgraph_node(scope, syntactic_digraph, v)
-	-- Make it part of the collapse!
-	g:add{v}
-	-- Do not consider again
-	uncollapsed_subgraph_nodes[i] = false
-	break
+        -- Ok, we can create a subgraph now
+        create_subgraph_node(scope, syntactic_digraph, v)
+        -- Make it part of the collapse!
+        g:add{v}
+        -- Do not consider again
+        uncollapsed_subgraph_nodes[i] = false
+        break
       end
     end
   end
@@ -353,7 +353,7 @@
     local intersection = {}
     for _,v in ipairs(g.vertices) do
       if syntactic_digraph:contains(v) then
-	intersection[#intersection+1] = v
+        intersection[#intersection+1] = v
       end
     end
     if #intersection > 0 then
@@ -361,33 +361,33 @@
       -- hull) Hmm...:
       local array = {}
       for _,v in ipairs(g.vertices) do
-	local min_x, min_y, max_x, max_y = v:boundingBox()
-	array[#array+1] = Coordinate.new(min_x + v.pos.x, min_y + v.pos.y)
-	array[#array+1] = Coordinate.new(max_x + v.pos.x, max_y + v.pos.y)
+        local min_x, min_y, max_x, max_y = v:boundingBox()
+        array[#array+1] = Coordinate.new(min_x + v.pos.x, min_y + v.pos.y)
+        array[#array+1] = Coordinate.new(max_x + v.pos.x, max_y + v.pos.y)
       end
       for _,a in ipairs(g.arcs) do
-	for _,e in ipairs(a.syntactic_edges) do
-	  for _,p in ipairs(e.path) do
-	    if type(p) == "table" then
-	      array[#array+1] = p
-	    end
-	  end
-	end
+        for _,e in ipairs(a.syntactic_edges) do
+          for _,p in ipairs(e.path) do
+            if type(p) == "table" then
+              array[#array+1] = p
+            end
+          end
+        end
       end
       local x_min, y_min, x_max, y_max, c_x, c_y = Coordinate.boundingBox(array)
 
       -- Shift the graph so that it is centered on the origin:
       for _,v in ipairs(g.vertices) do
-	v.pos:unshift(c_x,c_y)
+        v.pos:unshift(c_x,c_y)
       end
       for _,a in ipairs(g.arcs) do
-	for _,e in ipairs(a.syntactic_edges) do
-	  for _,p in ipairs(e.path) do
-	    if type(p) == "table" then
-	      p:unshift(c_x,c_y)
-	    end
-	  end
-	end
+        for _,e in ipairs(a.syntactic_edges) do
+          for _,p in ipairs(e.path) do
+            if type(p) == "table" then
+              p:unshift(c_x,c_y)
+            end
+          end
+        end
       end
 
       x_min = x_min - c_x
@@ -398,33 +398,33 @@
       local index = loc[g].event.index
 
       local v = Vertex.new {
-	-- Standard stuff
-	shape = "none",
-	kind  = "node",
-	path  = Path.new {
-	  "moveto",
-	  x_min, y_min,
-	  x_min, y_max, 
-	  x_max, y_max,
-	  x_max, y_min,
-	  "closepath"
-	},
-	options = {},
-	event = scope.events[index]
+        -- Standard stuff
+        shape = "none",
+        kind  = "node",
+        path  = Path.new {
+          "moveto",
+          x_min, y_min,
+          x_min, y_max,
+          x_max, y_max,
+          x_max, y_min,
+          "closepath"
+        },
+        options = {},
+        event = scope.events[index]
       }
-      
+
       -- Update node_event
       scope.events[index].parameters = v
-      
+
       local collapse_vertex = syntactic_digraph:collapse(
-	intersection,
-	v,
-	nil,
-	function (new_arc, arc)
-	  for _,e in ipairs(arc.syntactic_edges) do
-	    new_arc.syntactic_edges[#new_arc.syntactic_edges+1] = e
-	  end
-	end)
+        intersection,
+        v,
+        nil,
+        function (new_arc, arc)
+          for _,e in ipairs(arc.syntactic_edges) do
+            new_arc.syntactic_edges[#new_arc.syntactic_edges+1] = e
+          end
+        end)
 
       syntactic_digraph:remove(intersection)
       collapsed_vertices[#collapsed_vertices+1] = collapse_vertex
@@ -432,14 +432,14 @@
   end
 
   -- Sort the vertices
-  table.sort(syntactic_digraph.vertices, function(u,v) return u.event.index < v.event.index end) 
-  
+  table.sort(syntactic_digraph.vertices, function(u,v) return u.event.index < v.event.index end)
+
   -- Should we "hide" the subgraph nodes?
   local hidden_node
   if not algorithm.include_subgraph_nodes then
     local subgraph_nodes = lib.imap (syntactic_digraph.vertices,
-      function (v) if v.kind == "subgraph node" then return v end end) 
-    
+      function (v) if v.kind == "subgraph node" then return v end end)
+
     if #subgraph_nodes > 0 then
       hidden_node = Vertex.new {}
       syntactic_digraph:collapse(subgraph_nodes, hidden_node)
@@ -457,36 +457,36 @@
 
   -- Ok, everything setup! Run the algorithm...
   fun(scope, algorithm, syntactic_digraph, layout)
-    
+
   if hidden_node then
     syntactic_digraph:expand(hidden_node)
   end
-  
+
   -- Now, we need to expand the collapsed vertices once more:
   for i=#collapsed_vertices,1,-1 do
     syntactic_digraph:expand(
       collapsed_vertices[i],
       function (c, v)
-	v.pos:shiftByCoordinate(c.pos)
+        v.pos:shiftByCoordinate(c.pos)
       end,
       function (a, v)
-	for _,e in ipairs(a.syntactic_edges) do
-	  for _,p in ipairs(e.path) do
-	    if type(p) == "table" then
-	      p:shiftByCoordinate(v.pos)
-	    end
-	  end
-	end
+        for _,e in ipairs(a.syntactic_edges) do
+          for _,p in ipairs(e.path) do
+            if type(p) == "table" then
+              p:shiftByCoordinate(v.pos)
+            end
+          end
+        end
       end
     )
     for _,a in ipairs(syntactic_digraph:outgoing(collapsed_vertices[i])) do
       for _,e in ipairs(a.syntactic_edges) do
-	for _,p in ipairs(e.path) do
-	  if type(p) == "table" then
-	    p:shiftByCoordinate(a.tail.pos)
-	    p:unshiftByCoordinate(e.tail.pos)
-	  end
-	end
+        for _,p in ipairs(e.path) do
+          if type(p) == "table" then
+            p:shiftByCoordinate(a.tail.pos)
+            p:unshiftByCoordinate(e.tail.pos)
+          end
+        end
       end
     end
   end
@@ -498,16 +498,16 @@
       create_subgraph_node(scope, syntactic_digraph, uncollapsed_subgraph_nodes[i])
     end
   end
-  
+
   -- Now seems like a good time to nudge and do regardless positioning
   nudge(syntactic_digraph)
 
-  -- Step 5: Cleanup  
+  -- Step 5: Cleanup
   -- Push the computed position into the storage:
   for _,v in ipairs(syntactic_digraph.vertices) do
     positions[v][syntactic_digraph] = v.pos:clone()
   end
-  
+
   return syntactic_digraph
 end
 
@@ -531,6 +531,6 @@
 
 
 
--- Done 
+-- Done
 
-return Sublayouts
\ No newline at end of file
+return Sublayouts

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/doc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/doc.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/doc.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -30,6 +30,7 @@
 Now, when you set this key for a single node of a graph,
 then, by shifting the graph around, this ``wish'' can obviously
 always be fulfill:
+%
 \begin{codeexample}[]
 \begin{tikzpicture}
   \draw [help lines] (0,0) grid (3,2);
@@ -39,6 +40,7 @@
   };
 \end{tikzpicture}
 \end{codeexample}
+%
 \begin{codeexample}[]
 \begin{tikzpicture}
   \draw [help lines] (0,0) grid (3,2);
@@ -48,6 +50,7 @@
   };
 \end{tikzpicture}
 \end{codeexample}
+%
 Since the key's name is a bit long and since the many braces and
 parentheses are a bit cumbersome, there is a special support for
 this key inside a |graph|: The standard |/tikz/at| key is redefined
@@ -57,6 +60,7 @@
 by a graph drawing algorithm.) A nice side effect of this is that
 you can use the |x| and |y| keys (see
 Section~\ref{section-graphs-xy}) to specify desired positions:
+%
 \begin{codeexample}[]
 \begin{tikzpicture}
   \draw [help lines] (0,0) grid (3,2);
@@ -66,6 +70,7 @@
   };
 \end{tikzpicture}
 \end{codeexample}
+%
 \begin{codeexample}[]
 \begin{tikzpicture}
   \draw [help lines] (0,0) grid (3,2);
@@ -75,7 +80,7 @@
   };
 \end{tikzpicture}
 \end{codeexample}
-    
+
 A problem arises when two or more nodes have this key set, because
 then your ``desires'' for placement and the positions computed by
 the graph drawing algorithm may clash. Graph drawing algorithms are
@@ -83,10 +88,10 @@
 ignore these desired positions since they will be taken care of in
 the so-called post-anchoring phase, see below. However, for some
 algorithms it makes a lot of sense to fix the positions of some
-nodes and only compute the positions 
-of the other nodes relative to these nodes. For instance, for a
-|spring layout| it makes perfect sense that some nodes are
-``nailed to the canvas'' while other nodes can ``move freely''.
+nodes and only compute the positions of the other nodes relative
+to these nodes. For instance, for a |spring layout| it makes perfect
+sense that some nodes are ``nailed to the canvas'' while other
+nodes can ``move freely''.
 ]]
 
 example
@@ -134,7 +139,7 @@
 summary
 [[
 This option can be used with a graph to specify a node that
-should  be used for anchoring the whole graph.
+should be used for anchoring the whole graph.
 ]]
 
 documentation
@@ -141,12 +146,14 @@
 [[
 When this option is specified, after the layout has been computed, the
 whole graph will be shifted in such a way that the \meta{node name} is
-either 
+either
+%
 \begin{itemize}
-\item at the current value of |anchor at| or 
-\item at the position that is specified in the form of a
-  |desired at| for the \meta{node name}.
+  \item at the current value of |anchor at| or
+  \item at the position that is specified in the form of a
+    |desired at| for the \meta{node name}.
 \end{itemize}
+%
 Note how in the last example |c| is placed at |(1,1)| rather than
 |b| as would happen by default.
 ]]
@@ -163,7 +170,7 @@
 [[
 \begin{tikzpicture}
   \draw [help lines] (0,0) grid (3,2);
-  
+
   \graph [layered layout, anchor node=c, edges=rounded corners]
     { a -- {b [x=1,y=1], c [x=1,y=1] } -- d -- a};
 \end{tikzpicture}
@@ -178,8 +185,8 @@
 
 summary
 [[
-The coordinate at which the graph should be anchored when no 
-explicit anchor is given for any node. The initial value is the origin. 
+The coordinate at which the graph should be anchored when no
+explicit anchor is given for any node. The initial value is the origin.
 ]]
 
 example
@@ -186,7 +193,7 @@
 [[
 \begin{tikzpicture}
   \draw [help lines] (0,0) grid (2,2);
-  
+
   \graph [layered layout, edges=rounded corners, anchor at={(1,2)}]
     { a -- {b, c [anchor here] } -- d -- a};
 \end{tikzpicture}
@@ -216,7 +223,7 @@
 [[
 \begin{tikzpicture}
   \draw [help lines] (0,0) grid (2,2);
-  
+
   \graph [layered layout, edges=rounded corners]
     { a -- {b, c [anchor here] } -- d -- a};
 \end{tikzpicture}

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/library.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/library.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/control/library.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -38,29 +38,29 @@
   type = "boolean",
 
   summary = "Specifies, that nodes should be drawn behind the edges",
-  documentation = [["  
-       Once a graph drawing algorithm has determined positions for the nodes,
-       they are drawn \emph{before} the edges are drawn; after
-       all, it is hard to draw an edge between nodes when their positions
-       are not yet known. However, we typically want the nodes to be
-       rendered \emph{after} or rather \emph{on top} of the edges. For
-       this reason, the default behaviour is that the nodes at their
-       final positions are collected in a box that is inserted into the
-       output stream only after the edges have been drawn -- which has
-       the effect that the nodes will be placed ``on top'' of the
-       edges.
-      
-       This behaviour can be changed using this option. When the key is
-       invoked, nodes are placed \emph{behind} the edges.
+  documentation = [["
+    Once a graph drawing algorithm has determined positions for the nodes,
+    they are drawn \emph{before} the edges are drawn; after
+    all, it is hard to draw an edge between nodes when their positions
+    are not yet known. However, we typically want the nodes to be
+    rendered \emph{after} or rather \emph{on top} of the edges. For
+    this reason, the default behavior is that the nodes at their
+    final positions are collected in a box that is inserted into the
+    output stream only after the edges have been drawn -- which has
+    the effect that the nodes will be placed ``on top'' of the
+    edges.
+
+    This behavior can be changed using this option. When the key is
+    invoked, nodes are placed \emph{behind} the edges.
   "]],
   examples = [["
-      \tikz \graph [simple necklace layout, nodes={draw,fill=white},
-                    nodes behind edges]
-        { subgraph K_n [n=7], 1 [regardless at={(0,-1)}] };    
+    \tikz \graph [simple necklace layout, nodes={draw,fill=white},
+                  nodes behind edges]
+      { subgraph K_n [n=7], 1 [regardless at={(0,-1)}] };
   "]]
-}    
+}
 
-    
+
 ---
 
 declare {
@@ -69,13 +69,13 @@
     { key = "nodes behind edges", value = "false" },
   },
 
-  summary = [["  
-      This is the default placemenet of edges: Behind the nodes.
+  summary = [["
+    This is the default placement of edges: Behind the nodes.
   "]],
   examples = [["
-      \tikz \graph [simple necklace layout, nodes={draw,fill=white},
-                    edges behind nodes]
-        { subgraph K_n [n=7], 1 [regardless at={(0,-1)}] };    
+    \tikz \graph [simple necklace layout, nodes={draw,fill=white},
+                  edges behind nodes]
+      { subgraph K_n [n=7], 1 [regardless at={(0,-1)}] };
  "]]
 }
 
@@ -85,15 +85,15 @@
   type = "number",
   initial = "42",
 
-  summary = [["  
-       To ensure that the same is always shown in the same way when the
-       same algorithm is applied, the random is seed is reset on each call
-       of the graph drawing engine. To (possibly) get different results on
-       different runs, change this value.
+  summary = [["
+    To ensure that the same is always shown in the same way when the
+    same algorithm is applied, the random is seed is reset on each call
+    of the graph drawing engine. To (possibly) get different results on
+    different runs, change this value.
   "]]
 }
-    
 
+
 ---
 declare {
   key = "variation",
@@ -111,28 +111,26 @@
   type = "number",
   initial = 1,
 
-  summary = [["  
-       Sets the ``weight'' of an edge or a node. For many algorithms, this
-       number tells the algorithm how ``important'' the edge or node is.
-       For instance, in a |layered layout|, an edge with a large |weight|
-       will be as short as possible.
+  summary = [["
+    Sets the ``weight'' of an edge or a node. For many algorithms, this
+    number tells the algorithm how ``important'' the edge or node is.
+    For instance, in a |layered layout|, an edge with a large |weight|
+    will be as short as possible.
   "]],
-  examples = {
-    [["
-      \tikz \graph [layered layout] {
-        a -- {b,c,d} -- e -- a;
-      };
-   "]],
-   [["
-      \tikz \graph [layered layout] {
-        a -- {b,c,d} -- e --[weight=3] a;
-      };
-   "]]
+  examples = {[["
+    \tikz \graph [layered layout] {
+      a -- {b,c,d} -- e -- a;
+    };
+  "]],[["
+    \tikz \graph [layered layout] {
+      a -- {b,c,d} -- e --[weight=3] a;
+    };
+ "]]
   }
 }
 
-     
-     
+
+
 ---
 declare {
   key = "length",
@@ -139,17 +137,16 @@
   type = "length",
   initial = 1,
 
-  summary = [["  
-       Sets the ``length'' of an edge. Algorithms may take this value
-       into account when drawing a graph.
+  summary = [["
+    Sets the ``length'' of an edge. Algorithms may take this value
+    into account when drawing a graph.
   "]],
-  examples = {
-    [["
-      \tikz \graph [phylogenetic tree layout] {
-        a --[length=2] b --[length=1] {c,d};
-        a --[length=3] e
-      };
-   "]],
+  examples = {[["
+    \tikz \graph [phylogenetic tree layout] {
+      a --[length=2] b --[length=1] {c,d};
+      a --[length=3] e
+    };
+  "]],
   }
 }
 
@@ -161,24 +158,24 @@
   type = "number",
   initial = "0",
 
-  summary = [["  
-       The radius of a circular object used in graph drawing.
+  summary = [["
+    The radius of a circular object used in graph drawing.
   "]]
 }
-    
+
 ---
-    
+
 declare {
   key = "no layout",
   algorithm = {
     run =
       function (self)
-	for _,v in ipairs(self.digraph.vertices) do
-	  if v.options['desired at'] then
-	    v.pos.x = v.options['desired at'].x
-	    v.pos.y = v.options['desired at'].y
-	  end
-	end
+        for _,v in ipairs(self.digraph.vertices) do
+          if v.options['desired at'] then
+            v.pos.x = v.options['desired at'].x
+            v.pos.y = v.options['desired at'].y
+          end
+        end
       end },
   summary = "This layout does nothing.",
 }

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Cluster.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Cluster.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Cluster.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -12,7 +12,7 @@
 
 
 
---- The Cluser class defines a model of a cluster inside a graph.
+--- The Cluster class defines a model of a cluster inside a graph.
 --
 --
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Edge.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Edge.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Edge.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -43,7 +43,7 @@
 --               |nodes|: TODO \par
 --               |edge_nodes|: TODO \par
 --               |options|: TODO \par
---               |tikz_options|: TODO \par 
+--               |tikz_options|: TODO \par
 --               |direction|: TODO \par
 --               |bend_points|: TODO \par
 --               |bend_nodes|: TODO \par
@@ -90,14 +90,14 @@
 --- Returns the value of the edge option \meta{name}.
 --
 -- @param name Name of the option.
--- @param graph If this optional argument is given, 
---        in case the option is not set as a node parameter, 
+-- @param graph If this optional argument is given,
+--        in case the option is not set as a node parameter,
 --        we try to look it up as a graph parameter.
 --
 -- @return The value of the edge option \meta{name} or |nil|.
 --
 function Edge:getOption(name, graph)
-   return lib.lookup_option(name, self, graph) 
+   return lib.lookup_option(name, self, graph)
 end
 
 
@@ -134,7 +134,7 @@
 
 --- Returns all nodes of the edge.
 --
--- Instead of calling |edge:getNodes()| the nodes can alternatively be 
+-- Instead of calling |edge:getNodes()| the nodes can alternatively be
 -- accessed directly with |edge.nodes|.
 --
 -- @return All edges of the node.
@@ -168,11 +168,11 @@
 
 
 
---- Gets first neighbour of the node (disregarding hyperedges).
+--- Gets first neighbor of the node (disregarding hyperedges).
 --
--- @param node The node which first neighbour should be returned.
+-- @param node The node which first neighbor should be returned.
 --
--- @return The first neighbour of the node.
+-- @return The first neighbor of the node.
 --
 function Edge:getNeighbour(node)
   if node == self.nodes[1] then
@@ -199,7 +199,7 @@
   -- of <- edges is the first node
   local head_index = (self.direction == Edge.LEFT) and 1 or #self.nodes
 
-  -- if the edge should be assumed reversed, we simply switch head and 
+  -- if the edge should be assumed reversed, we simply switch head and
   -- tail positions
   if self.reversed then
     head_index = (head_index == 1) and #self.nodes or 1
@@ -230,9 +230,9 @@
 --
 -- This method only works for edges with two adjacent nodes.
 --
--- Edges may be reversed internally, so their head and tail might be switched. 
--- Whether or not this internal reversal is handled by this method 
--- can be specified with the optional second \meta{ignore\_reversed} parameter 
+-- Edges may be reversed internally, so their head and tail might be switched.
+-- Whether or not this internal reversal is handled by this method
+-- can be specified with the optional second \meta{ignore\_reversed} parameter
 -- which is |false| by default.
 --
 -- @param node            The node to check.
@@ -246,7 +246,7 @@
   -- of <- edges is the first node
   local head_index = (self.direction == Edge.LEFT) and 1 or #self.nodes
 
-  -- if the edge should be assumed reversed, we simply switch head and 
+  -- if the edge should be assumed reversed, we simply switch head and
   -- tail positions
   if self.reversed then
     head_index = (head_index == 1) and #self.nodes or 1
@@ -267,8 +267,8 @@
 -- This method only works for edges with two adjacent nodes.
 --
 -- Edges may be reversed internally, so their head and tail might be switched.
--- Whether or not this internal reversal is handled by this method 
--- can be specified with the optional second \meta{ignore\_reversed} parameter 
+-- Whether or not this internal reversal is handled by this method
+-- can be specified with the optional second \meta{ignore\_reversed} parameter
 -- which is |false| by default.
 --
 -- @param node            The node to check.
@@ -279,7 +279,7 @@
 --
 function Edge:isTail(node, ignore_reversed)
   local result = false
-  
+
   -- by default, the tail of -> edges is the first node and the tail
   -- of <- edges is the last node
   local tail_index = (self.direction == Edge.LEFT) and #self.nodes or 1
@@ -338,7 +338,7 @@
     result = result .. table.concat(node_strings, ', ')
   end
   --return result .. ")"
-  
+
   -- Note: the following lines generate a shorter string representation
   -- of the edge that is more readable and can be used for debugging.
   -- So please don't remove this:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Graph.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Graph.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Graph.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -127,9 +127,9 @@
    if not self:findNode(node.name) then
       -- Does the node have an index, yet?
       if not node.index then
-	 node.index = #self.nodes + 1
+        node.index = #self.nodes + 1
       end
-      
+
       table.insert(self.nodes, node)
    end
 end
@@ -143,8 +143,8 @@
 -- @return The removed node or |nil| if it was not found in the graph.
 --
 function Graph:removeNode(node)
-  local _, index = lib.find(self.nodes, function (other) 
-    return other.name == node.name 
+  local _, index = lib.find(self.nodes, function (other)
+    return other.name == node.name
   end)
   if index then
     table.remove(self.nodes, index)
@@ -170,7 +170,7 @@
 
 --- Looks up the first node for which the function \meta{test} returns |true|.
 --
--- @param test A function that takes one parameter (a |Node|) and returns 
+-- @param test A function that takes one parameter (a |Node|) and returns
 --             |true| or |false|.
 --
 -- @return The first node for which \meta{test} returns |true|.
@@ -183,7 +183,7 @@
 
 --- Like removeNode, but also deletes all adjacent edges of the removed node.
 --
--- This function also removes the deleted adjacent edges from all neighbours
+-- This function also removes the deleted adjacent edges from all neighbors
 -- of the removed node.
 --
 -- @param node The node to be deleted together with its adjacent edges.
@@ -293,7 +293,7 @@
 
 
 
---- Creates and adds a new edge to the graph. 
+--- Creates and adds a new edge to the graph.
 --
 -- @param first_node   The first node of the new edge.
 -- @param second_node  The second node of the new edge.
@@ -305,7 +305,7 @@
 --                     \item |Edge.BOTH| and
 --                     \item |Edge.NONE| (for invisible edges).
 --                     \end{itemize}
--- @param edge_nodes   A string of \tikzname\ edge nodes that needs to be passed 
+-- @param edge_nodes   A string of \tikzname\ edge nodes that needs to be passed
 --                     back to the \TeX layer unmodified.
 -- @param options      The options of the new edge.
 -- @param tikz_options A table of \tikzname\ options to be used by graph drawing
@@ -315,9 +315,9 @@
 --
 function Graph:createEdge(first_node, second_node, direction, edge_nodes, options, tikz_options)
   local edge = Edge.new{
-    direction = direction, 
+    direction = direction,
     edge_nodes = edge_nodes,
-    options = options, 
+    options = options,
     tikz_options = tikz_options
   }
   edge:addNode(first_node)
@@ -393,4 +393,4 @@
 
 -- Done
 
-return Graph
\ No newline at end of file
+return Graph

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Iterators.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Iterators.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Iterators.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -39,7 +39,7 @@
 -- @return An iterator for traversing \meta{graph} in a topological order.
 --
 function Iterators.topologicallySorted(dag)
-  -- track visited edges 
+  -- track visited edges
   local deleted_edges = {}
 
   -- collect all sources (nodes with no incoming edges) of the dag
@@ -46,7 +46,7 @@
   local sources = lib.imap(dag.nodes, function (node) if node:getInDegree() == 0 then return node end end)
 
   -- return the iterator function
-  return function () 
+  return function ()
     while #sources > 0 do
       -- fetch the next sink from the queue
       local source = table.remove(sources, 1)
@@ -53,26 +53,26 @@
 
       -- get its outgoing edges
       local out_edges = source:getOutgoingEdges()
-      
+
       -- iterate over all outgoing edges we haven't visited yet
       for _,edge in ipairs(out_edges) do
-	if not deleted_edges[edge] then 
-	  -- mark the edge as visited
-	  deleted_edges[edge] = true
-	  
-	  -- get the node at the other end of the edge
-	  local neighbour = edge:getNeighbour(source)
-	  
-	  -- get a list of all incoming edges of the neighbour that have
-	  -- not been visited yet
-	  local in_edges = lib.imap(neighbour:getIncomingEdges(),
-				    function (edge) if not deleted_edges[edge] then return edge end end)
-	  
-	  -- if there are no such edges then we have a new source
-	  if #in_edges == 0 then
-	    sources[#sources+1] = neighbour
-	  end
-	end
+        if not deleted_edges[edge] then
+          -- mark the edge as visited
+          deleted_edges[edge] = true
+
+          -- get the node at the other end of the edge
+          local neighbour = edge:getNeighbour(source)
+
+          -- get a list of all incoming edges of the neighbor that have
+          -- not been visited yet
+          local in_edges = lib.imap(neighbour:getIncomingEdges(),
+                        function (edge) if not deleted_edges[edge] then return edge end end)
+
+          -- if there are no such edges then we have a new source
+          if #in_edges == 0 then
+            sources[#sources+1] = neighbour
+          end
+        end
       end
 
       -- return the current source
@@ -88,4 +88,4 @@
 
 -- Done
 
-return Iterators
\ No newline at end of file
+return Iterators

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Node.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Node.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Node.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -48,12 +48,12 @@
   local new = {
     class = Node,
     name = nil,
-    tex = { 
+    tex = {
       -- texNode = nil,
       -- maxX = nil,
       -- minX = nil,
       -- maxY = nil,
-      -- minY = nil 
+      -- minY = nil
     },
     edges = {},
     -- pos = nil,
@@ -69,8 +69,8 @@
       new [k] = v
     end
   end
-  if not new.pos then 
-    new.pos = Vector.new(2) 
+  if not new.pos then
+    new.pos = Vector.new(2)
   end
   return new
 end
@@ -91,8 +91,8 @@
 --- Returns the value of the node option \meta{name}.
 --
 -- @param name Name of the node option.
--- @param graph If this optional argument is given, 
---        in case the option is not set as a node parameter, 
+-- @param graph If this optional argument is given,
+--        in case the option is not set as a node parameter,
 --        we try to look it up as a graph parameter.
 --
 -- @return The value of the node option \meta{name} or |nil|.
@@ -113,7 +113,7 @@
 
 
 
---- Computes the heigth of the node.
+--- Computes the height of the node.
 --
 -- @return Height of the node.
 --
@@ -155,7 +155,7 @@
 
 --- Returns all edges of the node.
 --
--- Instead of calling |node:getEdges()| the edges can alternatively be 
+-- Instead of calling |node:getEdges()| the edges can alternatively be
 -- accessed directly with |node.edges|.
 --
 -- @return All edges of the node.
@@ -168,7 +168,7 @@
 
 --- Returns the incoming edges of the node. Undefined result for hyperedges.
 --
--- @param ignore_reversed Optional parameter to consider reversed edges not 
+-- @param ignore_reversed Optional parameter to consider reversed edges not
 --                        reversed for this method call. Defaults to |false|.
 --
 -- @return Incoming edges of the node. This includes undirected edges
@@ -176,9 +176,9 @@
 --
 function Node:getIncomingEdges(ignore_reversed)
   return lib.imap(self.edges,
-		  function (edge) 
-		    if edge:isHead(self, ignore_reversed) then return edge end
-		  end)
+          function (edge)
+            if edge:isHead(self, ignore_reversed) then return edge end
+          end)
 end
 
 
@@ -185,7 +185,7 @@
 
 --- Returns the outgoing edges of the node. Undefined result for hyperedges.
 --
--- @param ignore_reversed Optional parameter to consider reversed edges not 
+-- @param ignore_reversed Optional parameter to consider reversed edges not
 --                        reversed for this method call. Defaults to |false|.
 --
 -- @return Outgoing edges of the node. This includes undirected edges
@@ -193,9 +193,9 @@
 --
 function Node:getOutgoingEdges(ignore_reversed)
   return lib.imap(self.edges,
-		  function (edge) 
-		    if edge:isTail(self, ignore_reversed) then return edge end
-		  end)
+          function (edge)
+            if edge:isTail(self, ignore_reversed) then return edge end
+          end)
 end
 
 
@@ -204,7 +204,7 @@
 --
 -- @see Node:getIncomingEdges(reversed)
 --
--- @param ignore_reversed Optional parameter to consider reversed edges not 
+-- @param ignore_reversed Optional parameter to consider reversed edges not
 --                        reversed for this method call. Defaults to |false|.
 --
 -- @return The number of incoming edges of the node.
@@ -219,7 +219,7 @@
 --
 -- @see Node:getOutgoingEdges()
 --
--- @param ignore_reversed Optional parameter to consider reversed edges not 
+-- @param ignore_reversed Optional parameter to consider reversed edges not
 --                        reversed for this method call. Defaults to |false|.
 --
 -- @return The number of outgoing edges of the node.
@@ -230,7 +230,7 @@
 
 
 
---- Creates a shallow copy of the node. 
+--- Creates a shallow copy of the node.
 --
 -- Most notably, the edges adjacent are not preserved in the copy.
 --
@@ -262,7 +262,7 @@
 --
 -- @ignore This should not appear in the documentation.
 --
--- @return String represenation of the node.
+-- @return String representation of the node.
 --
 function Node:__tostring()
   local tmp = Node.__tostring
@@ -277,4 +277,4 @@
 
 -- Done
 
-return Node
\ No newline at end of file
+return Node

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Vector.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Vector.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/deprecated/Vector.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -28,7 +28,7 @@
 -- Class setup
 Vector.__index =
   function (t, k)
-    if k == "x" then 
+    if k == "x" then
       return rawget(t,1)
     elseif k == "y" then
       return rawget(t,2)
@@ -37,8 +37,8 @@
     end
   end
 Vector.__newindex =
-  function (t, k, v) 
-    if k == "x" then 
+  function (t, k, v)
+    if k == "x" then
       rawset(t,1,v)
     elseif k == "y" then
       rawset(t,2,v)
@@ -52,9 +52,9 @@
 --- Creates a new vector with \meta{n} values using an optional \meta{fill\_function}.
 --
 -- @param n             The number of elements of the vector. (If omitted, then 2.)
--- @param fill_function Optional function that takes a number between 1 and \meta{n} 
+-- @param fill_function Optional function that takes a number between 1 and \meta{n}
 --                      and is expected to return a value for the corresponding element
---                      of the vector. If omitted, all elements of the vector will 
+--                      of the vector. If omitted, all elements of the vector will
 --                      be initialized with 0.
 --
 -- @return A newly-allocated vector with \meta{n} elements.
@@ -65,7 +65,7 @@
   setmetatable(vector, Vector)
 
   local n = n or 2
-  
+
   if type(n) == 'table' then
     for k,v in pairs(n) do
       vector[k] = v
@@ -74,7 +74,7 @@
     -- fill vector elements with values
     if not fill_function then
       for i = 1,n do
-	rawset(vector,i,0)
+        rawset(vector,i,0)
       end
     else
       for i = 1,n do
@@ -91,7 +91,7 @@
 --- Creates a copy of the vector that holds the same elements as the original.
 --
 -- @return A newly-allocated copy of the vector holding exactly the same elements.
--- 
+--
 function Vector:copy()
   return Vector.new(#self, function (n) return self[n] end)
 end
@@ -100,7 +100,7 @@
 
 --- Performs a vector addition and returns the result in a new vector.
 --
--- @param other The vector to add. 
+-- @param other The vector to add.
 --
 -- @return A new vector with the result of the addition.
 --
@@ -114,7 +114,7 @@
 
 --- Subtracts two vectors and returns the result in a new vector.
 --
--- @param other Vector to subtract. 
+-- @param other Vector to subtract.
 --
 -- @return A new vector with the result of the subtraction.
 --
@@ -196,7 +196,7 @@
 --- Updates the values of the vector in-place.
 --
 -- @param update_function A function that is called for each element of the
---                        vector. The elements are replaced by the values 
+--                        vector. The elements are replaced by the values
 --                        returned from this function.
 --
 function Vector:update(update_function)
@@ -253,4 +253,4 @@
 
 -- Done
 
-return Vector
\ No newline at end of file
+return Vector

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/FMMMLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/FMMMLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/FMMMLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,7 +20,7 @@
 key           "FMMMLayout"
 summary       "The fast multipole multilevel layout algorithm."
 
-documentation 
+documentation
 [[
 |FMMMLayout| implements a force-directed graph drawing
 method suited also for very large graphs. It is based on a
@@ -29,12 +29,12 @@
 evaluating potential fields.
 
 The implementation is based on the following publication:
-
+%
 \begin{itemize}
-\item Stefan Hachul, Michael J\"unger: Drawing Large Graphs with
-  a Potential-Field-Based Multilevel Algorithm. \emph{12th
-    International Symposium on Graph Drawing 1998 (GD '04)}, New York, LNCS 3383,
-  pp. 285--295, 2004.
+  \item Stefan Hachul, Michael J\"unger: Drawing Large Graphs with
+    a Potential-Field-Based Multilevel Algorithm. \emph{12th
+      International Symposium on Graph Drawing 1998 (GD '04)},
+      New York, LNCS 3383, pp. 285--295, 2004.
 \end{itemize}
 ]]
 
@@ -44,7 +44,7 @@
 ]]
 
 
-example     
+example
 [[
 \tikz [nodes={text height=.7em, text depth=.2em,
               draw=black!20, thick, fill=white, font=\footnotesize},
@@ -65,7 +65,7 @@
     { "USG 2.0" -> "USG 3.0", "PWB 2.0", "Unix/TS 1.0" } -> "Unix/TS 3.0";
     { "Unix/TS++", "CB Unix 3", "Unix/TS 3.0" } ->
       "TS 4.0" -> "System V.0" -> "System V.2" -> "System V.3";
-  };  
+  };
 ]]
 --------------------------------------------------------------------------------
 
@@ -74,7 +74,7 @@
 --------------------------------------------------------------------------------
 key           "FMMMLayout.randSeed"
 summary       "Sets the random seed for the |FMMMLayout|."
-documentation 
+documentation
 [[
 By changing this number, you can vary the appearance of the generated
 graph drawing. This key is an alias for |random seed|, which in turn
@@ -117,7 +117,7 @@
 [[
 \tikz {
   \graph [FMMMLayout, node sep=5mm] { subgraph C_n[n=6]; };
-  
+
   \draw [red, ultra thick, |-|] (1.south) -- ++(down:5mm);
 }
 ]]

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/FastMultipoleEmbedder.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/FastMultipoleEmbedder.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/FastMultipoleEmbedder.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,28 +18,28 @@
 
 --------------------------------------------------------------------------------
 key           "FastMultipoleEmbedder"
-summary       "Implementation of a fast multipole embedder by Martin Gronemann."                    
+summary       "Implementation of a fast multipole embedder by Martin Gronemann."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "FastMultipoleEmbedder.numIterations"
 summary       "sets the maximum number of iterations"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "FastMultipoleEmbedder.multipolePrec"
 summary       "sets the number of coefficients for the expansions. default = 4"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "FastMultipoleEmbedder.defaultEdgeLength"
 summary       ""
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "FastMultipoleEmbedder.defaultNodeSize"
 summary       ""
@@ -48,4 +48,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/GEMLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/GEMLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/GEMLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,80 +18,80 @@
 
 --------------------------------------------------------------------------------
 key           "GEMLayout"
-summary       "The energy-based GEM layout algorithm."                    
-                    
+summary       "The energy-based GEM layout algorithm."
+
 documentation [[
-The implementation used in |GEMLayout| is based on the following publication:
-\begin{itemize}
-\item Arne Frick, Andreas Ludwig, Heiko Mehldau: \emph{A Fast Adaptive Layout
- Algorithm for Undirected Graphs.} Proc. Graph Drawing 1994,
- LNCS 894, pp. 388-403, 1995.
-\end{itemize}
-    
+  The implementation used in |GEMLayout| is based on the following publication:
+  %
+  \begin{itemize}
+    \item Arne Frick, Andreas Ludwig, Heiko Mehldau: \emph{A Fast Adaptive Layout
+       Algorithm for Undirected Graphs.} Proc. Graph Drawing 1994,
+       LNCS 894, pp. 388-403, 1995.
+  \end{itemize}
 ]]
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.numberOfRounds"
 summary       "Sets the maximal number of round per node."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.minimalTemperature"
 summary       "Sets the minimal temperature."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.initialTemperature"
 summary       "Sets the initial temperature; must be $\\ge$ |minimalTemperature|."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.gravitationalConstant"
 summary       "Sets the gravitational constant; must be $\\ge 0$."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.desiredLength"
 summary       "Sets the desired edge length; must be $\\ge 0$."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.maximalDisturbance"
 summary       "Sets the maximal disturbance; must be $\\ge 0$."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.rotationAngle"
 summary       "Sets the opening angle for rotations ($0 \\le x \\le \\pi / 2$)."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.oscillationAngle"
 summary       "Sets the opening angle for oscillations ($0 \\le x \\le \\pi / 2$)."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.rotationSensitivity"
 summary       "Sets the rotation sensitivity ($0 \\le x \\le 1$)."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.oscillationSensitivity"
 summary       "Sets the oscillation sensitivity ($0 \\le x \\le 1$)."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "GEMLayout.attractionFormula"
 summary       "sets the formula for attraction (1 = Fruchterman / Reingold, 2 = GEM)."
@@ -100,4 +100,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/MultilevelLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/MultilevelLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/MultilevelLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,7 +18,7 @@
 
 --------------------------------------------------------------------------------
 key           "MultilevelLayout"
-summary       "A wrapper for the multilevel layout computation using the modular multi-level mixer."                    
+summary       "A wrapper for the multilevel layout computation using the modular multi-level mixer."
 
 example [[
 \tikz \graph [MultilevelLayout] {
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderFR.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderFR.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderFR.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,31 +18,30 @@
 
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFR"
-summary       "The spring-embedder layout algorithm by Fruchterman and Reingold."                    
-                    
+summary       "The spring-embedder layout algorithm by Fruchterman and Reingold."
+
 documentation [[
-The implementation used in SpringEmbedderFR is based on the following
-publication: 
+  The implementation used in SpringEmbedderFR is based on the following
+  publication:
 
-Thomas M. J. Fruchterman, Edward M. Reingold: \emph{Graph Drawing by Force-directed
-Placement}. Software - Practice and Experience 21(11), pp. 1129-1164, 1991.
-
+  Thomas M. J. Fruchterman, Edward M. Reingold: \emph{Graph Drawing by Force-directed
+  Placement}. Software - Practice and Experience 21(11), pp. 1129--1164, 1991.
 ]]
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFR.iterations"
 summary       "Sets the number of iterations."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFR.noise"
 summary       "Sets the parameter noise."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFR.scaleFunctionFactor"
 summary       "Sets the scale function factor."
@@ -51,4 +50,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderFRExact.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderFRExact.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderFRExact.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,34 +18,34 @@
 
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFRExact"
-summary       "Declaration of Spring-Embedder (Fruchterman,Reingold) algorithm with exact force computations."                    
+summary       "Declaration of Spring-Embedder (Fruchterman,Reingold) algorithm with exact force computations."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFRExact.iterations"
 summary       "Sets the number of iterations."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFRExact.noise"
 summary       "Sets the parameter noise."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFRExact.coolingFunction"
 summary       "Sets the parameter coolingFunction to |factor| or to |logarithmic|."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFRExact.idealEdgeLength"
 summary       "Sets the ideal edge length to a length."
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderFRExact.convTolerance"
 summary       ""
@@ -54,4 +54,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderKK.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderKK.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/SpringEmbedderKK.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,41 +18,39 @@
 
 --------------------------------------------------------------------------------
 key           "SpringEmbedderKK"
-summary       "The spring embedder of Kamada and Kawai"                    
-                    
+summary       "The spring embedder of Kamada and Kawai"
+
 documentation [[
- The implementation used in |SpringEmbedderKK| is based on
- the following publication:
- 
- Tomihisa Kamada, Satoru Kawai: \emph{An Algorithm for Drawing
- General Undirected Graphs.} Information Processing Letters 31, pp. 7--15, 1989.
- 
- There are some parameters that can be tuned to optimize the
- algorithm's behavior regarding runtime and layout quality.
- First of all note that the algorithm uses all pairs shortest path
- to compute the graph theoretic distance. This can be done either
- with BFS (ignoring node sizes) in quadratic time or by using
- e.g. Floyd's algorithm in cubic time with given edge lengths
- that may reflect the node sizes.  Also |m_computeMaxIt| decides
- if the computation is stopped after a fixed maximum number of
- iterations. The desirable edge length can either be set or computed
- from the graph and the given layout.
- 
+  The implementation used in |SpringEmbedderKK| is based on
+  the following publication:
+
+  Tomihisa Kamada, Satoru Kawai: \emph{An Algorithm for Drawing
+  General Undirected Graphs.} Information Processing Letters 31, pp. 7--15, 1989.
+
+  There are some parameters that can be tuned to optimize the
+  algorithm's behavior regarding runtime and layout quality.
+  First of all note that the algorithm uses all pairs shortest path
+  to compute the graph theoretic distance. This can be done either
+  with BFS (ignoring node sizes) in quadratic time or by using
+  e.g. Floyd's algorithm in cubic time with given edge lengths
+  that may reflect the node sizes. Also |m_computeMaxIt| decides
+  if the computation is stopped after a fixed maximum number of
+  iterations. The desirable edge length can either be set or computed
+  from the graph and the given layout.
 ]]
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderKK.stopTolerance"
 summary       "Sets the value for the stop tolerance."
-documentation
-[[
-Below this value, the system is regarded stable (balanced) and the
-optimization stopped.
+documentation [[
+  Below this value, the system is regarded stable (balanced) and the
+  optimization stopped.
 ]]
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SpringEmbedderKK.desLength"
 summary       "Sets desirable edge length directly"
@@ -61,4 +59,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/BarycenterPlacer.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/BarycenterPlacer.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/BarycenterPlacer.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "BarycenterPlacer"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "BarycenterPlacer.weightedPositionPriority"
 summary       ""
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/CirclePlacer.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/CirclePlacer.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/CirclePlacer.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,22 +18,22 @@
 
 --------------------------------------------------------------------------------
 key           "CirclePlacer"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "CirclePlacer.circleSize"
 summary       ""
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "CirclePlacer.radiusFixed"
 summary       ""
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "CirclePlacer.nodeSelection"
 summary       ""
@@ -42,4 +42,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/EdgeCoverMerger.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/EdgeCoverMerger.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/EdgeCoverMerger.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "EdgeCoverMerger"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "EdgeCoverMerger.factor"
 summary       ""
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/IndependentSetMerger.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/IndependentSetMerger.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/IndependentSetMerger.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "IndependentSetMerger"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "IndependentSetMerger.searchDepthBase"
 summary       ""
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/LocalBiconnectedMerger.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/LocalBiconnectedMerger.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/LocalBiconnectedMerger.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "LocalBiconnectedMerger"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "LocalBiconnectedMerger.factor"
 summary       ""
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/MatchingMerger.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/MatchingMerger.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/MatchingMerger.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "MatchingMerger"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "MatchingMerger.selectByNodeMass"
 summary       ""
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/MedianPlacer.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/MedianPlacer.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/MedianPlacer.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "MedianPlacer"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
 
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomMerger.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomMerger.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomMerger.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "RandomMerger"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "RandomMerger.factor"
 summary       ""
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomPlacer.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomPlacer.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/RandomPlacer.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "RandomPlacer"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "RandomPlacer.circleSize"
 summary       ""
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarMerger.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarMerger.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarMerger.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,16 +18,16 @@
 
 --------------------------------------------------------------------------------
 key           "SolarMerger"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SolarMerger.simple"
 summary       ""
 --------------------------------------------------------------------------------
-    
 
+
 --------------------------------------------------------------------------------
 key           "SolarMerger.massAsNodeRadius"
 summary       ""
@@ -36,4 +36,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarPlacer.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarPlacer.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/SolarPlacer.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,10 +18,10 @@
 
 --------------------------------------------------------------------------------
 key           "SolarPlacer"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
 
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/ZeroPlacer.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/ZeroPlacer.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased/multilevelmixer/ZeroPlacer.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,7 +18,7 @@
 
 --------------------------------------------------------------------------------
 key           "ZeroPlacer"
-summary       "?"                    
+summary       "?"
 --------------------------------------------------------------------------------
     
 
@@ -30,4 +30,4 @@
 
 -- Local Variables:
 -- mode:latex
--- End:                      
+-- End:

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/energybased.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -14,6 +14,6 @@
 ---
 -- @section subsection {Force-Based Algorithms}
 --
--- 
+--
 
 local _
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/CoffmanGrahamRanking.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/CoffmanGrahamRanking.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/CoffmanGrahamRanking.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -21,10 +21,10 @@
 summary       "The ranking algorithm due to Coffman and Graham."
 documentation
 [[
-|CoffmanGrahamRanking| implements a node ranking algorithmn based on
+|CoffmanGrahamRanking| implements a node ranking algorithm based on
 the Coffman--Graham scheduling algorithm, which can be used as first
 phase in |SugiyamaLayout|. The aim of the algorithm is to ensure that
-the height of the ranking (the number of layers) is kept small.   
+the height of the ranking (the number of layers) is kept small.
 ]]
 --------------------------------------------------------------------
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/FastHierarchyLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/FastHierarchyLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/FastHierarchyLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -23,21 +23,21 @@
 [[
 This class implements a hierarchy layout algorithm, that is, it
 layouts hierarchies with a given order of nodes on each
-layer. It is used as a third phase of the Sugiyama algorithm.  
+layer. It is used as a third phase of the Sugiyama algorithm.
 
 All edges of the layout will have at most two
 bends. Additionally, for each edge having exactly two bends, the
 segment between them is drawn vertically. This applies in
 particular to the long edges arising in the first phase of the
-Sugiyama algorithm. 
+Sugiyama algorithm.
 
 The implementation is based on:
-
+%
 \begin{itemize}
-\item 
-  Christoph Buchheim, Michael Jünger, Sebastian Leipert: A Fast
-  Layout Algorithm for k-Level Graphs. \emph{Proc. Graph
-    Drawing 2000}, volumne 1984 of LNCS, pages 229--240, 2001.
+  \item
+    Christoph Buchheim, Michael Jünger, Sebastian Leipert: A Fast
+    Layout Algorithm for k-Level Graphs. \emph{Proc. Graph
+    Drawing 2000}, volume 1984 of LNCS, pages 229--240, 2001.
 \end{itemize}
 ]]
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/FastSimpleHierarchyLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/FastSimpleHierarchyLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/FastSimpleHierarchyLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -24,29 +24,31 @@
 [[
 This class implements a hierarchy layout algorithm, that is, it
 layouts hierarchies with a given order of nodes on each
-layer. It is used as a third phase of the Sugiyama algorithm. 
+layer. It is used as a third phase of the Sugiyama algorithm.
 
 The algorithm runs in three phases:
+%
 \begin{enumerate}
-\item Alignment (4x)
-\item Horizontal Compactation (4x)
-\item Balancing
+  \item Alignment (4x)
+  \item Horizontal Compactation (4x)
+  \item Balancing
 \end{enumerate}
+%
 The alignment and horizontal compactification phases are calculated
 downward, upward, left-to-right and right-to-left. The four
-resulting layouts are combined in a balancing step. 
+resulting layouts are combined in a balancing step.
 
 Warning: The implementation is known to not always produce a
 correct layout. Therefore this Algorithm is for testing purpose
-only. 
+only.
 
 The implementation is based on:
-
+%
 \begin{itemize}
-\item 
-  Ulrik Brandes, Boris Köpf: Fast and Simple Horizontal
-  Coordinate Assignment. \emph{LNCS} 2002, Volume 2265/2002,
-  pp. 33--36  
+  \item
+    Ulrik Brandes, Boris Köpf: Fast and Simple Horizontal
+    Coordinate Assignment. \emph{LNCS} 2002, Volume 2265/2002,
+    pp. 33--36
 \end{itemize}
 ]]
 
@@ -62,7 +64,7 @@
 
 --------------------------------------------------------------------
 key           "FastSimpleHierarchyLayout.layerDistance"
-summary       "Distance between the cetners of nodes of two consecutive layers."
+summary       "Distance between the centers of nodes of two consecutive layers."
 
 documentation
 [[
@@ -80,7 +82,7 @@
 
 --------------------------------------------------------------------
 key           "FastSimpleHierarchyLayout.siblingDistance"
-summary       "Distance between the cetners of nodes of sibling nodes."
+summary       "Distance between the centers of nodes of sibling nodes."
 
 documentation
 [[

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/GreedyCycleRemoval.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/GreedyCycleRemoval.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/GreedyCycleRemoval.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -21,7 +21,7 @@
 summary      "Greedy algorithm for computing a maximal acyclic subgraph."
 documentation
 [[
-The algorithm applies a greedy heuristic to compute a maximal
-acyclic subgraph and works in linear-time. 
+  The algorithm applies a greedy heuristic to compute a maximal
+  acyclic subgraph and works in linear-time.
 ]]
 --------------------------------------------------------------------

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/LongestPathRanking.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/LongestPathRanking.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/LongestPathRanking.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -21,11 +21,11 @@
 summary      "The longest-path ranking algorithm."
 documentation
 [[
-|LongestPathRanking| implements the well-known longest-path ranking
-algorithm, which can be used as first phase in |SugiyamaLayout|. The
-implementation contains a special optimization for reducing edge
-lengths, as well as special treatment of mixed-upward graphs (for
-instance, \textsc{uml} class diagrams).
+  |LongestPathRanking| implements the well-known longest-path ranking
+  algorithm, which can be used as first phase in |SugiyamaLayout|. The
+  implementation contains a special optimization for reducing edge
+  lengths, as well as special treatment of mixed-upward graphs (for
+  instance, \textsc{uml} class diagrams).
 ]]
 --------------------------------------------------------------------
 
@@ -47,10 +47,10 @@
 key          "LongestPathRanking.optimizeEdgeLength"
 summary
 [[
-If set to true the ranking algorithm tries to reduce edge
-length even if this might increase the height of the layout. Choose
-false, if the longest-path ranking known from the literature should be
-used.
+  If set to true the ranking algorithm tries to reduce edge
+  length even if this might increase the height of the layout. Choose
+  false, if the longest-path ranking known from the literature should be
+  used.
 ]]
 --------------------------------------------------------------------
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/OptimalRanking.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/OptimalRanking.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/OptimalRanking.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -21,9 +21,9 @@
 summary       "The optimal ranking algorithm."
 documentation
 [[
-The |OptimalRanking| implements the LP-based algorithm for
-computing a node ranking with minimal edge lengths, which can
-be used as first phase in |SugiyamaLayout|. 
+  The |OptimalRanking| implements the LP-based algorithm for
+  computing a node ranking with minimal edge lengths, which can
+  be used as first phase in |SugiyamaLayout|.
 ]]
 --------------------------------------------------------------------
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/SiftingHeuristic.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/SiftingHeuristic.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/SiftingHeuristic.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -25,10 +25,10 @@
 
 --------------------------------------------------------------------
 key           "SiftingHeuristic.strategy"
-summary       "Sets a so-called ``sifting strategy.''"
+summary       "Sets a so-called ``sifting strategy''."
 documentation
 [[
-The following values are permissible: |left_to_right|, |desc_degree|,
-and |random|.       
+  The following values are permissible: |left_to_right|, |desc_degree|,
+  and |random|.
 ]]
 --------------------------------------------------------------------

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/SugiyamaLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/SugiyamaLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered/SugiyamaLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,19 +20,18 @@
 key           "SugiyamaLayout"
 summary       "The OGDF implementation of the Sugiyama algorithm."
 
-documentation 
-[[
-This layout represents a customizable implementation of Sugiyama's
-layout algorithm. The implementation used in |SugiyamaLayout| is based
-on the following publications:
-    
-\begin{itemize}
-\item Emden R. Gansner, Eleftherios Koutsofios, Stephen
-  C. North, Kiem-Phong Vo: A technique for drawing directed
-  graphs. \emph{IEEE Trans. Software Eng.} 19(3):214--230, 1993. 
-\item Georg Sander: \emph{Layout of compound directed graphs.}
-  Technical Report, Universität des Saarlandes, 1996. 
-\end{itemize}
+documentation [[
+  This layout represents a customizable implementation of Sugiyama's
+  layout algorithm. The implementation used in |SugiyamaLayout| is based
+  on the following publications:
+
+  \begin{itemize}
+    \item Emden R. Gansner, Eleftherios Koutsofios, Stephen
+      C. North, Kiem-Phong Vo: A technique for drawing directed
+      graphs. \emph{IEEE Trans. Software Eng.} 19(3):214--230, 1993.
+    \item Georg Sander: \emph{Layout of compound directed graphs.}
+      Technical Report, Universität des Saarlandes, 1996.
+  \end{itemize}
 ]]
 
 example
@@ -40,7 +39,7 @@
 \tikz \graph [SugiyamaLayout] { a -- {b,c,d} -- e -- a };
 ]]
 
-example     
+example
 [[
 \tikz \graph [SugiyamaLayout, grow=right] {
   a -- {b,c,d} -- e -- a
@@ -47,7 +46,7 @@
 };
 ]]
 
-example     
+example
 [[
 \tikz [nodes={text height=.7em, text depth=.2em,
               draw=black!20, thick, fill=white, font=\footnotesize},
@@ -68,7 +67,7 @@
     { "USG 2.0" -> "USG 3.0", "PWB 2.0", "Unix/TS 1.0" } -> "Unix/TS 3.0";
     { "Unix/TS++", "CB Unix 3", "Unix/TS 3.0" } ->
       "TS 4.0" -> "System V.0" -> "System V.2" -> "System V.3";
-  };  
+  };
 ]]
 --------------------------------------------------------------------------------
 
@@ -77,10 +76,10 @@
 --------------------------------------------------------------------------------
 key           "SugiyamaLayout.runs"
 summary       "Determines, how many times the crossing minimization is repeated."
-documentation 
+documentation
 [[
 Each repetition (except for the first) starts with
-randomly permuted nodes on each layer. Deterministic behaviour can
+randomly permuted nodes on each layer. Deterministic behavior can
 be achieved by setting |SugiyamaLayout.runs| to 1.
 ]]
 --------------------------------------------------------------------------------
@@ -89,12 +88,11 @@
 
 --------------------------------------------------------------------------------
 key           "SugiyamaLayout.transpose"
-documentation
-[[
-Determines whether the transpose step is performed
-after each 2-layer crossing minimization; this step tries to
-reduce the number of crossings by switching neighbored nodes on
-a layer.
+documentation [[
+  Determines whether the transpose step is performed
+  after each 2-layer crossing minimization; this step tries to
+  reduce the number of crossings by switching neighbored nodes on
+  a layer.
 ]]
 --------------------------------------------------------------------------------
 
@@ -102,11 +100,10 @@
 
 --------------------------------------------------------------------------------
 key           "SugiyamaLayout.fails"
-documentation
-[[
-The number of times that the number of crossings may
-not decrease after a complete top-down bottom-up traversal,
-before a run is terminated.
+documentation [[
+  The number of times that the number of crossings may
+  not decrease after a complete top-down bottom-up traversal,
+  before a run is terminated.
 ]]
 --------------------------------------------------------------------------------
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/layered.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -14,6 +14,6 @@
 ---
 -- @section subsection {Algorithms for Drawing Layered Graphs}
 --
--- 
+--
 
 local _
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout/BalloonLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout/BalloonLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout/BalloonLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,7 +20,7 @@
 key           "BalloonLayout"
 summary       "A ``balloon layout''."
 
-documentation 
+documentation
 [[
 This algorithm computes a radial (balloon) layout based on a
 spanning tree. The algorithm is partially based on the paper

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout/CircularLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout/CircularLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout/CircularLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,14 +20,14 @@
 key           "CircularLayout"
 summary       "The circular layout algorithm."
 
-documentation 
+documentation
 [[
-The implementation used in CircularLayout is based on the following publication: 
-      
+The implementation used in CircularLayout is based on the following publication:
+%
 \begin{itemize}
-\item Ugur Dogrus\"oz, Brendan Madden, Patrick Madden: Circular
-  Layout in the Graph Layout Toolkit. \emph{Proc. Graph Drawing 1996,}
-  LNCS 1190, pp. 92--100, 1997.
+  \item Ugur Dogrus\"oz, Brendan Madden, Patrick Madden: Circular
+    Layout in the Graph Layout Toolkit. \emph{Proc. Graph Drawing 1996,}
+    LNCS 1190, pp. 92--100, 1997.
 \end{itemize}
 ]]
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/misclayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -14,6 +14,6 @@
 ---
 -- @section subsection {Miscellaneous Algorithms for Graph Drawing}
 --
--- 
+--
 
 local _
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/planarity/PlanarizationLayout.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/planarity/PlanarizationLayout.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/planarity/PlanarizationLayout.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,17 +20,17 @@
 key           "PlanarizationLayout"
 summary       "The planarization layout algorithm."
 
-documentation 
+documentation
 [[
-A |PlanarizationLayout| represents a customizable implementation
-of the planarization approach for drawing graphs. The implementation
-used in PlanarizationLayout is based on the following  publication:
-
-\begin{itemize}
-\item C. Gutwenger, P. Mutzel: \emph{An Experimental Study of Crossing
- Minimization Heuristics.} 11th International Symposium on Graph
- Drawing 2003, Perugia (GD '03), LNCS 2912, pp. 13-24, 2004.
-\end{itemize}
+  A |PlanarizationLayout| represents a customizable implementation
+  of the planarization approach for drawing graphs. The implementation
+  used in PlanarizationLayout is based on the following  publication:
+  %
+  \begin{itemize}
+    \item C. Gutwenger, P. Mutzel: \emph{An Experimental Study of Crossing
+       Minimization Heuristics.} 11th International Symposium on Graph
+       Drawing 2003, Perugia (GD '03), LNCS 2912, pp. 13--24, 2004.
+  \end{itemize}
 ]]
 
 example
@@ -44,12 +44,12 @@
 --------------------------------------------------------------------------------
 key           "PlanarizationLayout.preprocessCliques"
 summary       "Configures, whether cliques are collapsed in a preprocessing step."
-documentation 
+documentation
 [[
-If set to true, a preprocessing for cliques (complete subgraphs)
-is performed and cliques will be laid out in a special form (straight-line,
-not orthogonal). The preprocessing may reduce running time and improve
-layout quality if the input graphs contains dense subgraphs.
+  If set to true, a preprocessing for cliques (complete subgraphs)
+  is performed and cliques will be laid out in a special form (straight-line,
+  not orthogonal). The preprocessing may reduce running time and improve
+  layout quality if the input graphs contains dense subgraphs.
 ]]
 --------------------------------------------------------------------------------
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/planarity.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/planarity.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc/ogdf/planarity.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -14,6 +14,6 @@
 ---
 -- @section subsection {Algorithms for Drawing Planar Graphs}
 --
--- 
+--
 
 local _
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/doc.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -17,16 +17,17 @@
 -- when the documentation is kept in a separate file.
 --
 -- Using the doc facility is easy:
---
+-- %
 -- \begin{enumerate}
--- \item In the |declare| statement of the key, you do not provide
--- fields like |documentation| or |summary|. Rather, you provide the
--- field |documentation_in|, which gets the name of a Lua file the
--- will be read whenever one of the fields |documentation|, |summary|,
--- or |examples| is requested for the key.
--- \item When the key is requested, |require| will be applied to the
--- filename given in the |documentation_in| field.
--- \item In this file, you start with the following code:
+--   \item In the |declare| statement of the key, you do not provide
+--     fields like |documentation| or |summary|. Rather, you provide the
+--     field |documentation_in|, which gets the name of a Lua file the
+--     will be read whenever one of the fields |documentation|, |summary|,
+--     or |examples| is requested for the key.
+--   \item When the key is requested, |require| will be applied to the
+--     filename given in the |documentation_in| field.
+--   \item In this file, you start with the following code:
+--     %
 --\begin{codeexample}[code only]
 --local doc           = require 'pgf.gd.doc'
 --local key           = doc.key
@@ -34,10 +35,12 @@
 --local summary       = doc.summary
 --local example       = doc.example
 --\end{codeexample}
--- This will setup nice shortcuts for the commands you are going to
--- use in your file.
--- \item Next, for each to-be-lazily-documented key, add a block to
--- the file like the following:
+--     %
+--     This will setup nice shortcuts for the commands you are going to
+--     use in your file.
+--   \item Next, for each to-be-lazily-documented key, add a block to
+--     the file like the following:
+--     %
 --\begin{codeexample}[code only]
 -- ---
 -- key           "my radius"
@@ -50,19 +53,18 @@
 -- example       "\tikz \graph [foo layout, my radius=3] { c--d };"
 --\end{codeexample}
 --
--- Note that |[[| and |]]| are used in Lua for raw multi-line
--- strings.
+--     Note that |[[| and |]]| are used in Lua for raw multi-line strings.
 --
--- The effect of the above code will be that for the key |my radius|
--- the different field like |summary| or |documentation| get
--- updated. The |key| function simple ``selects'' a key and subsequent
--- commands like |summary| will update this key until a different key
--- is selected through another use of |key|.
+--     The effect of the above code will be that for the key |my radius|
+--     the different field like |summary| or |documentation| get
+--     updated. The |key| function simple ``selects'' a key and subsequent
+--     commands like |summary| will update this key until a different key
+--     is selected through another use of |key|.
 -- \end{enumerate}
 
 local doc = {}
 
-local current_key 
+local current_key
 
 
 -- Namespace
@@ -107,7 +109,7 @@
 
 
 ---
--- Adds an example to the |examples| field of the last key selected 
+-- Adds an example to the |examples| field of the last key selected
 -- through the |key| command.
 --
 -- @param string An additional example string.

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/ASCIIDisplayer.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/ASCIIDisplayer.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/ASCIIDisplayer.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -5,7 +5,7 @@
 require "pgf.gd.force.library"
 
 local algorithm = io.read():match("%s*graph%s*%[(.-)%]")
-  
+
 InterfaceToDisplay.pushPhase(algorithm, "main", 1)
 InterfaceToDisplay.pushOption("level distance", 6, 2)
 InterfaceToDisplay.pushOption("sibling distance", 8, 3)
@@ -27,6 +27,6 @@
 InterfaceToDisplay.runGraphDrawingAlgorithm()
 InterfaceToDisplay.renderGraph()
 InterfaceToDisplay.endGraphDrawingScope()
-      
 
 
+

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/BindingToASCII.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/BindingToASCII.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/BindingToASCII.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -22,10 +22,10 @@
     for x=-30,30 do
       local s = canvas[x][y]
       for i=1,#s do
-	pos = x+30+i-math.floor(#s/2)
-	if not t[pos] or t[pos] == " " or t[pos] == "." then
-	  t[pos] = string.sub(s,i,i)
-	end
+        pos = x+30+i-math.floor(#s/2)
+        if not t[pos] or t[pos] == " " or t[pos] == "." then
+          t[pos] = string.sub(s,i,i)
+        end
       end
     end
     print(table.concat(t))
@@ -41,12 +41,12 @@
   local function connect (p,q)
 
     local x1, y1, x2, y2 = math.floor(p.x+0.5), math.floor(p.y+0.5), math.floor(q.x+0.5), math.floor(q.y+0.5)
-    
+
     -- Go upward with respect to x
     if x2 < x1 then
       x1, y1, x2, y2 = x2, y2, x1, y1
     end
-    
+
     local delta_x = x2-x1
     local delta_y = y2-y1
 
@@ -53,27 +53,27 @@
     if math.abs(delta_x) > math.abs(delta_y) then
       local slope = delta_y/delta_x
       for i=x1,x2 do
-	local x,y = i, math.floor(y1 + (i-x1)*slope + 0.5)
+        local x,y = i, math.floor(y1 + (i-x1)*slope + 0.5)
 
-	if canvas[x][y] == " " then
-	  canvas[x][y] = '.'
-	end
+        if canvas[x][y] == " " then
+          canvas[x][y] = '.'
+        end
       end
     elseif math.abs(delta_y) > 0 then
       local slope = delta_x/delta_y
       for i=y1,y2,(y1<y2 and 1) or -1 do
-	local x,y = math.floor(x1 + (i-y1)*slope + 0.5), i
+        local x,y = math.floor(x1 + (i-y1)*slope + 0.5), i
 
-	if canvas[x][y] == " " then
-	  canvas[x][y] = '.'
-	end
+        if canvas[x][y] == " " then
+          canvas[x][y] = '.'
+        end
       end
     end
   end
-  
-  
+
+
   local p = e.tail.pos
-  
+
   for i=1,#e.path do
     if type(e.path[i]) == "table" then
       connect(p, e.path[i])
@@ -80,7 +80,7 @@
       p = e.path[i]
     end
   end
-  
+
   connect(p, e.head.pos)
 end
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleDemo.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleDemo.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleDemo.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -29,7 +29,7 @@
       function (self)
         local g = self.digraph
         local alpha = (2 * math.pi) / #g.vertices
-        
+
         for i,vertex in ipairs(g.vertices) do
           local radius = vertex.options['radius'] or g.options['radius']
           vertex.pos.x = radius * math.cos(i * alpha)
@@ -39,19 +39,19 @@
   },
 
   summary = [["
-      This algorithm is the ``Hello World'' of graph drawing.
+    This algorithm is the ``Hello World'' of graph drawing.
   "]],
-  documentation = [=["  
-      The algorithm 
-      arranges nodes in a circle (without paying heed to the sizes of the
-      nodes or to the edges). In order to ``really'' layout nodes in a
-      circle, use |simple necklace layout|; the present layout is only intended
-      to demonstrate how much (or little) is needed to implement a graph
-      drawing algorithm.
+  documentation = [=["
+    The algorithm arranges nodes in a circle (without paying heed to the
+    sizes of the nodes or to the edges). In order to ``really'' layout
+    nodes in a circle, use |simple necklace layout|; the present layout
+    is only intended to demonstrate how much (or little) is needed to
+    implement a graph drawing algorithm.
+    %
 \begin{codeexample}[code only, tikz syntax=false]
 -- File pgf.gd.examples.SimpleDemo
 local declare = require "pgf.gd.interface.InterfaceToAlgorithms".declare
-      
+
 declare {
   key = "simple demo layout",
   algorithm = {
@@ -59,7 +59,7 @@
       function (self)
         local g = self.digraph
         local alpha = (2 * math.pi) / #g.vertices
-        
+
         for i,vertex in ipairs(g.vertices) do
           local radius = vertex.options['radius'] or g.options['radius']
           vertex.pos.x = radius * math.cos(i * alpha)
@@ -73,10 +73,10 @@
   "]]
 }
 \end{codeexample}
-      
-       On the display layer (\tikzname, that is) the algorithm can now
-       immediately be employed; you just need to say
-       |\usegdlibrary{examples.SimpleDemo}| at the beginning
-       somewhere.   
+
+    On the display layer (\tikzname, that is) the algorithm can now
+    immediately be employed; you just need to say
+    |\usegdlibrary{examples.SimpleDemo}| at the beginning
+    somewhere.
   "]=]
 }
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleEdgeDemo.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleEdgeDemo.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleEdgeDemo.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -31,33 +31,34 @@
   algorithm = SimpleEdgeDemo,
 
   summary = "This algorithm shows how edges can be created by an algorithm.",
-  documentation = [["  
-       For its job, the algorithm uses the function |createEdge|, which can be
-       called during the run of the algorithm to create edges in the
-       syntactic graph. The algorithm first does exactly the same as the
-       simple demo layout, then it creates an edge for every node where the
-       |new edge to| option is set. You will see in the code how this
-       option is declared and how we use it to look up a vertex in the
-       graph by its name. 
-      
+  documentation = [["
+    For its job, the algorithm uses the function |createEdge|, which can be
+    called during the run of the algorithm to create edges in the
+    syntactic graph. The algorithm first does exactly the same as the
+    simple demo layout, then it creates an edge for every node where the
+    |new edge to| option is set. You will see in the code how this
+    option is declared and how we use it to look up a vertex in the
+    graph by its name.
+    %
 \begin{codeexample}[]
 \tikz [simple edge demo layout]
 \graph [radius=2cm] {
   a, b, c, d, e, f;
-        
+
   e -> [red] f; % normal edge
-  
+
   % Edges generated by the algorithm:
-  a[new edge to=b]; 
+  a[new edge to=b];
   b[new edge to=d];
   c[new edge to=f];
 };
 \end{codeexample}
-      
-       And the algorithm:
+
+    And the algorithm:
+    %
 \begin{codeexample}[code only, tikz syntax=false]
  -- File pgf.gd.examples.SimpleEdgeDemo
-       
+
  -- Imports
  local InterfaceToAlgorithms = require "pgf.gd.interface.InterfaceToAlgorithms"
  local declare               = InterfaceToAlgorithms.declare
@@ -71,9 +72,9 @@
   summary = "This algorithm shows...",
 }
 \end{codeexample}
-       
-       Next comes the declaration of the new option |new edge to|:
-      
+
+    Next comes the declaration of the new option |new edge to|:
+    %
 \begin{codeexample}[code only, tikz syntax=false]
 declare {
   key = "new edge to",
@@ -81,9 +82,9 @@
   summary = "This option takes the name of a vertex..."
 }
 \end{codeexample}
-      
-       Finally, the algorithm's code:
-      
+
+    Finally, the algorithm's code:
+    %
 \begin{codeexample}[code only, tikz syntax=false]
 function SimpleEdgeDemo:run()
   -- As in a SimpleDemo:
@@ -108,15 +109,15 @@
   key = "new edge to",
   type = "string",
 
-  summary = [["  
-       This option takes the name of a vertex. An edge leading to this
-       vertex is added to the syntactic digraph.
-   "]]
+  summary = [["
+    This option takes the name of a vertex. An edge leading to this
+    vertex is added to the syntactic digraph.
+  "]]
 }
 
 
 function SimpleEdgeDemo:run()
-  
+
   -- As in a SimpleDemo:
   local g = self.digraph
   local alpha = (2 * math.pi) / #g.vertices

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleHuffman.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleHuffman.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/SimpleHuffman.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -31,27 +31,26 @@
 declare {
   key       = "simple Huffman layout",
   algorithm = SimpleHuffman,
-  
+
   postconditions = {
     upward_oriented = true
   },
 
   summary = [["
-      This algorithm demonstrates how an algorithm can generate new
-      nodes.
+    This algorithm demonstrates how an algorithm can generate new nodes.
   "]],
-  documentation = [["  
-      The input graph should just consist of some nodes (without
-      edges) and each node should have a |probability| key set. The nodes
-      will then be arranged in a line (as siblings) and a Huffman tree
-      will be constructed ``above'' these nodes. For the construction of
-      the Huffman tree, new nodes are created and connected.
-      
-      \pgfgdset{
-        HuffmanLabel/.style={/tikz/edge node={node[fill=white,font=\footnotesize,inner sep=1pt]{#1}}},
-        HuffmanNode/.style={/tikz/.cd,circle,inner sep=0pt,outer sep=0pt,draw,minimum size=3pt}
-      }
-      
+  documentation = [["
+    The input graph should just consist of some nodes (without
+    edges) and each node should have a |probability| key set. The nodes
+    will then be arranged in a line (as siblings) and a Huffman tree
+    will be constructed ``above'' these nodes. For the construction of
+    the Huffman tree, new nodes are created and connected.
+
+    \pgfgdset{
+      HuffmanLabel/.style={/tikz/edge node={node[fill=white,font=\footnotesize,inner sep=1pt]{#1}}},
+      HuffmanNode/.style={/tikz/.cd,circle,inner sep=0pt,outer sep=0pt,draw,minimum size=3pt}
+    }
+
 \begin{codeexample}[]
 \tikz \graph [simple Huffman layout,
               level distance=7mm, sibling distance=8mm, grow'=up]
@@ -61,14 +60,16 @@
   c ["0.2",  probability=0.2],
   d ["0.1",  probability=0.1],
   e ["0.11", probability=0.11]
-};    
+};
 \end{codeexample}
-     The file starts with some setups and declarations:
+    %
+    The file starts with some setups and declarations:
+    %
 \begin{codeexample}[code only, tikz syntax=false]
 -- File pgf.gd.examples.SimpleHuffman
-      
+
 local declare = require "pgf.gd.interface.InterfaceToAlgorithms".declare
-      
+
 -- The class
 local SimpleHuffman = {}
 
@@ -85,7 +86,7 @@
   initial = "1",
   summary = "..."
 }
-      
+
 -- Import
 local layered = require "pgf.gd.layered"
 local InterfaceToAlgorithms = require "pgf.gd.interface.InterfaceToAlgorithms"
@@ -97,15 +98,16 @@
 function SimpleHuffman:run()
   -- Construct a Huffman tree on top of the vertices...
 \end{codeexample}
-      
-         Next comes a setup, where we create the working list of vertices
-         that changes as the Huffman coding method proceeds:
+
+    Next comes a setup, where we create the working list of vertices
+    that changes as the Huffman coding method proceeds:
+    %
 \begin{codeexample}[code only, tikz syntax=false]
   -- Shorthand
   local function prop (v)
     return probability[v] or v.options['probability']
   end
-        
+
   -- Copy the vertex table, since we are going to modify it:
   local vertices = {}
   for i,v in ipairs(self.ugraph.vertices) do
@@ -112,14 +114,15 @@
     vertices[i] = v
   end
 \end{codeexample}
-      
-         The initial vertices are arranged in a line on the last layer. The
-         function |ideal_sibling_distance| takes care of the rather
-         complicated handling of the (possibly rotated) bounding boxes and
-         separations. The |props| and |layer| are tables used by
-         algorithms to ``store stuff'' at a vertex or at an arc. The
-         table will be accessed by |arrange_layers_by_baselines| to
-         determine the ideal vertical placements.
+
+    The initial vertices are arranged in a line on the last layer. The
+    function |ideal_sibling_distance| takes care of the rather
+    complicated handling of the (possibly rotated) bounding boxes and
+    separations. The |props| and |layer| are tables used by
+    algorithms to ``store stuff'' at a vertex or at an arc. The
+    table will be accessed by |arrange_layers_by_baselines| to
+    determine the ideal vertical placements.
+    %
 \begin{codeexample}[code only, tikz syntax=false]
   -- Now, arrange the nodes in a line:
   vertices [1].pos.x = 0
@@ -129,16 +132,17 @@
     vertices [i].pos.x = vertices[i-1].pos.x + d
     layer[ vertices [i] ] = #vertices
   end
-\end{codeexample}  
-      
-         Now comes the actual Huffman algorithm: Always find the vertices
-         with a minimal probability\dots
+\end{codeexample}
+
+    Now comes the actual Huffman algorithm: Always find the vertices
+    with a minimal probability\dots
+    %
 \begin{codeexample}[code only, tikz syntax=false]
   -- Now, do the Huffman thing...
   while #vertices > 1 do
     -- Find two minimum probabilities
     local min1, min2
-    
+
     for i=1,#vertices do
       if not min1 or prop(vertices[i]) < prop(vertices[min1]) then
         min2 = min1
@@ -148,9 +152,11 @@
       end
     end
 \end{codeexample}
-         \dots and connect them with a new node. This new node gets the
-         option |HuffmanNode|. It is now the job of the higher layers to map
-         this option to something ``nice''.
+    %
+    \dots and connect them with a new node. This new node gets the
+    option |HuffmanNode|. It is now the job of the higher layers to map
+    this option to something ``nice''.
+    %
 \begin{codeexample}[code only, tikz syntax=false]
     -- Create new node:
     local p = prop(vertices[min1]) + prop(vertices[min2])
@@ -159,27 +165,29 @@
     layer[v] = #vertices-1
     v.pos.x = (vertices[min1].pos.x + vertices[min2].pos.x)/2
     vertices[#vertices + 1] = v
-    
+
     InterfaceToAlgorithms.createEdge (self, v, vertices[min1],
         {generated_options = {{key="HuffmanLabel", value = "0"}}})
     InterfaceToAlgorithms.createEdge (self, v, vertices[min2],
         {generated_options = {{key="HuffmanLabel", value = "1"}}})
-      
+
     table.remove(vertices, math.max(min1, min2))
     table.remove(vertices, math.min(min1, min2))
   end
 \end{codeexample}
-         Ok, we are mainly done now. Finish by computing vertical placements
-         and do formal cleanup.
+    %
+    Ok, we are mainly done now. Finish by computing vertical placements
+    and do formal cleanup.
 \begin{codeexample}[code only, tikz syntax=false]
   layered.arrange_layers_by_baselines(layers, self.adjusted_bb, self.ugraph)
 end
 \end{codeexample}
-      
-       In order to use the class, we have to make sure that, on the
-       display layer, the options |HuffmanLabel| and |HuffmanNode| are
-       defined. This is done by adding, for instance, the following to
-       \tikzname:
+
+    In order to use the class, we have to make sure that, on the
+    display layer, the options |HuffmanLabel| and |HuffmanNode| are
+    defined. This is done by adding, for instance, the following to
+    \tikzname:
+    %
 \begin{codeexample}[code only]
 \pgfkeys{
   /graph drawing/HuffmanLabel/.style={
@@ -191,9 +199,9 @@
 }
 \end{codeexample}
   "]]
-}    
-    
+}
 
+
 ---
 
 declare {
@@ -201,18 +209,18 @@
   type = "number",
   initial = "1",
 
-  summary = [["  
-       The probability parameter. It is used by the Huffman algorithm to
-       group nodes.
-   "]]
+  summary = [["
+    The probability parameter. It is used by the Huffman algorithm to
+    group nodes.
+  "]]
 }
-  
+
 -- Imports
-    
+
 local Storage    =  require 'pgf.gd.lib.Storage'
-    
+
 -- Storages
-    
+
 local probability = Storage.new()
 local layer       = Storage.new()
 
@@ -224,13 +232,13 @@
   local function prop (v)
     return probability[v] or v.options['probability']
   end
-  
+
   -- Copy the vertex table, since we are going to modify it:
   local vertices = {}
   for i,v in ipairs(self.ugraph.vertices) do
     vertices[i] = v
   end
-  
+
   -- Now, arrange the nodes in a line:
   vertices [1].pos.x = 0
   layer[vertices [1]] = #vertices
@@ -239,7 +247,7 @@
     vertices [i].pos.x = vertices[i-1].pos.x + d
     layer[vertices [i]] = #vertices
   end
-  
+
   -- Now, do the Huffman thing...
   while #vertices > 1 do
     -- Find two minimum probabilities
@@ -261,7 +269,7 @@
     layer[v] = #vertices-1
     v.pos.x = (vertices[min1].pos.x + vertices[min2].pos.x)/2
     vertices[#vertices + 1] = v
-    
+
     InterfaceToAlgorithms.createEdge (self, v, vertices[min1],
                                  {generated_options = {{key="HuffmanLabel", value = "0"}}})
     InterfaceToAlgorithms.createEdge (self, v, vertices[min2],
@@ -270,7 +278,7 @@
     table.remove(vertices, math.max(min1, min2))
     table.remove(vertices, math.min(min1, min2))
   end
-  
+
   layered.arrange_layers_by_baselines(layer, self.adjusted_bb, self.ugraph)
 end
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/library.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/library.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/examples/library.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -16,7 +16,7 @@
 -- graph drawing engine can be used. In particular, the algorithms of
 -- this package are not really meant to be used to layout graphs
 -- (although they can be used, in principle); rather you are invited
--- to have a look at their implementation and to adapt them to your needs. 
+-- to have a look at their implementation and to adapt them to your needs.
 --
 -- @library
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/GraphAnimationCoordination.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/GraphAnimationCoordination.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/GraphAnimationCoordination.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -49,11 +49,11 @@
   type          = "boolean",
   Initial       = false,
   documentation = [["
-                     This key specifies, if a supernode changed its 
-                     visual properties since the last snapshot.
-                     The default value is |false| and prevent the algorithm
-                     to produce a lot of unnecessary animations.
-                  "]]
+    This key specifies, if a supernode changed its
+    visual properties since the last snapshot.
+    The default value is |false| and prevent the algorithm
+    to produce a lot of unnecessary animations.
+  "]]
 }
 
 declare {
@@ -70,12 +70,12 @@
   type    = "number",
   initial = 0.5,
   documentation = [["
-                     This key specifies a minimum time in which a single node 
-                     has to be prohibited to be animated.
-                     For a node with minimum rest time of 1s that exists in a snapshot 
-                     at time $t$ this means that all animations including movements and fadings
-                     are only allowed before $t$-0.5s and after $t$+0.5s.
-                  "]],
+    This key specifies a minimum time in which a single node
+    has to be prohibited to be animated.
+    For a node with minimum rest time of 1s that exists in a snapshot
+    at time $t$ this means that all animations including movements and fadings
+    are only allowed before $t$-0.5s and after $t$+0.5s.
+  "]],
 }
 
 declare {
@@ -83,9 +83,9 @@
   type    = "number",
   initial = math.huge,
   documentation = [["
-                     Use this key if you want to limit the time during nodes are allowed to move 
-                     when they changing their positions.
-                  "]],
+    Use this key if you want to limit the time during nodes are allowed to move
+    when they changing their positions.
+  "]],
 }
 
 declare {
@@ -93,7 +93,10 @@
   type    = "boolean",
   initial = true,
   documentation = [["
-                     Use this key if you want to allow that the fade animations for or dissappearing nodes may occurs while the mid time between two snapshots. If false then the appearing ends on the midtime and the disappering starts in this moment.
+    Use this key if you want to allow that the fade animations for or
+    disappearing nodes may occurs while the mid time between two snapshots.
+    If false then the appearing ends on the midtime and the disappearing
+    starts in this moment.
   "]]
 }
 
@@ -103,40 +106,39 @@
   algorithm = GraphAnimationCoordination,
   phase = "evolving graph animation",
   phase_default = true,
-  summary = [["  
-       This phase animates all vertices including movements and 
-       fade in or fade out animations given an evolving graph as sequence 
-       of single snapshot graphs.   
+  summary = [["
+      This phase animates all vertices including movements and
+      fade in or fade out animations given an evolving graph as sequence
+      of single snapshot graphs.
   "]],
-  documentation = [["  
-       This phase animates all vertices including movements and 
-       fade in or fade out animations given an evolving graph as sequence 
-       of single snapshot graphs. 
-       
-       Your algorithm needs to work on evolving graphs and has to use
-       the |evolving graph animation| phase. You do not need to use
-       this key by yourself then because this key starts the default 
-       algorithm algorithm of the phase.
+  documentation = [["
+    This phase animates all vertices including movements and
+    fade in or fade out animations given an evolving graph as sequence
+    of single snapshot graphs.
 
-       \begin{codeexample}[]
-       local ga_class = self.digraph.options.algorithm_phases['evolving graph animation']
-       -- animate graph
-       ga_class.new {
-         main_algorithm = self,
-         supergraph     = supergraph,
-         digraph        = self.digraph,
-         ugraph         = self.ugraph
-       }:run()
-       \end{codeexample}
+    Your algorithm needs to work on evolving graphs and has to use
+    the |evolving graph animation| phase. You do not need to use
+    this key by yourself then because this key starts the default
+    algorithm algorithm of the phase.
+    %
+    \begin{codeexample}[]
+     local ga_class = self.digraph.options.algorithm_phases['evolving graph animation']
+     -- animate graph
+     ga_class.new {
+       main_algorithm = self,
+       supergraph     = supergraph,
+       digraph        = self.digraph,
+       ugraph         = self.ugraph
+     }:run()
+     \end{codeexample}
 
-       This algorithm and phase require a supergraph instance and the original digraph and ugraph.
-       Note that you have to set the layout of the snapshot nodes before running algorithms of this
-       is useful.
-        
+    This algorithm and phase require a supergraph instance and the original
+    digraph and ugraph. Note that you have to set the layout of the snapshot
+    nodes before running algorithms of this is useful.
   "]],
 }
 
--- Helpfunctions
+-- Help functions
 
 --
 -- Appends a move animation to a given snapshot object such that the
@@ -146,7 +148,7 @@
 --
 -- This means if we want to move a node 1cm to the right the value of
 -- |c_from| has to be (0,0) while |c_to| must be (1,0).  The argument
--- |c_from| is usefull for a node which has a position but its
+-- |c_from| is useful for a node which has a position but its
 -- previous node related to the same supervertex is at a different
 -- position.  Then we can use this argument to move the new node to
 -- its origin position for smooth transitions.
@@ -170,16 +172,16 @@
     local t1 = (7*t_start + 5*t_end)/12
     local t2 = (5*t_start + 7*t_end)/12
     table.insert(animations, {
-		   attribute = "translate",
-		   entries = {
-		     { t = t_start, value = c_from},
---		     { t = t1,      value = c1 },
---		     { t = t2,      value = c2 },
-		     { t = t_end,   value = c_to }
-		   },
-		   options = { { key = "freeze at end",   },
---		     {key = "entry control", value="0}{1",}
-		   }
+           attribute = "translate",
+           entries = {
+             { t = t_start, value = c_from},
+--             { t = t1,      value = c1 },
+--             { t = t2,      value = c2 },
+             { t = t_end,   value = c_to }
+           },
+           options = { { key = "freeze at end",   },
+--             {key = "entry control", value="0}{1",}
+           }
     })
     object.animations = animations
   end
@@ -187,26 +189,26 @@
 
 local function append_fade_animation(object, v_start, v_end, t_start, t_end)
   local animations = object.animations or {}
-  
+
   if v_start == 0 then
     table.insert(animations, {
-		   attribute = "stage",
-		   entries = { { t = t_start, value = "true"}, },
-		   options = { { key = "freeze at end" } }
+           attribute = "stage",
+           entries = { { t = t_start, value = "true"}, },
+           options = { { key = "freeze at end" } }
     })
   elseif v_end == 0 and nil  then
     table.insert(animations, {
-		   attribute = "stage",
-		   entries = { { t = t_end, value = "false"}, },
-		   options = { --{ key = "freeze at end" }
-		   }
-    })    
+           attribute = "stage",
+           entries = { { t = t_end, value = "false"}, },
+           options = { --{ key = "freeze at end" }
+           }
+    })
   end
 
   table.insert(animations, {
     attribute = "opacity",
     entries = {
-      {	t = t_start, value = v_start },
+      {    t = t_start, value = v_start },
       { t = t_end,   value = v_end } },
     options = { { key = "freeze at end" } }
   })
@@ -221,13 +223,13 @@
   local dy = ((a1.y-a2.y) - (b1.y-b2.y))
   if dx<0 then dx = -dx end
   if dy<0 then dy = -dy end
-  return dx<0.001 and dy<0.001 
+  return dx<0.001 and dy<0.001
 end
 
 --
 -- Check if two arcs connect a pair of nodes at the same position.
 -- This can be used as an indicator that two consecutive arcs
--- can be representet by the same arc object.
+-- can be represented by the same arc object.
 --
 local function eq_arc(arc1, arc2)
   if not arc1 or not arc2 then
@@ -251,7 +253,7 @@
   self.next_node       = Storage.new()
   self.visible_objects = Storage.new()
 
-  
+
   self:precomputeNodes()
   self:precomputeEdges()
   self:animateNodeAppearing()
@@ -263,7 +265,7 @@
 function GraphAnimationCoordination:generateNodeMotions(node_types)
   local supergraph = self.supergraph
   local graph = self.digraph
-  
+
   for _, supervertex in ipairs(self.supergraph.vertices) do
     local lj = -1
     local last_v    = nil
@@ -272,25 +274,25 @@
       local vertex = supergraph:getSnapshotVertex(supervertex, s)
 
       if lj == j-1 and vertex and last_v then
-	local mrt1 = last_v.options["minimum rest time"]/2
-	local mrt2 = vertex.options["minimum rest time"]/2
-	
+    local mrt1 = last_v.options["minimum rest time"]/2
+    local mrt2 = vertex.options["minimum rest time"]/2
+
         local s1 = Coordinate.new(0,0)
-	local e1 = Coordinate.new(vertex.pos.x-last_v.pos.x,-vertex.pos.y+last_v.pos.y)
+    local e1 = Coordinate.new(vertex.pos.x-last_v.pos.x,-vertex.pos.y+last_v.pos.y)
 
-	local s2 = Coordinate.new(-vertex.pos.x+last_v.pos.x,vertex.pos.y-last_v.pos.y)
-	local e2 = Coordinate.new(0,0)
-	
-	local t_end   = s.timestamp - math.max(0, mrt2)
-	local t_start = last_time + math.max(0,mrt1)
+    local s2 = Coordinate.new(-vertex.pos.x+last_v.pos.x,vertex.pos.y-last_v.pos.y)
+    local e2 = Coordinate.new(0,0)
 
-	local representative =  self.visible_objects[supervertex][s]
-	if representative == vertex then
-	  append_move_animation(vertex,  s2, e2, t_start, t_end)
-	  append_move_animation(last_v, s1, e1, t_start, t_end)
-	else
-	  append_move_animation(representative,s1,e1,t_start,t_end)
-	end
+    local t_end   = s.timestamp - math.max(0, mrt2)
+    local t_start = last_time + math.max(0,mrt1)
+
+    local representative =  self.visible_objects[supervertex][s]
+    if representative == vertex then
+      append_move_animation(vertex,  s2, e2, t_start, t_end)
+      append_move_animation(last_v, s1, e1, t_start, t_end)
+    else
+      append_move_animation(representative,s1,e1,t_start,t_end)
+    end
       end
       last_time = s.timestamp
       lj = j
@@ -300,59 +302,59 @@
 end
 
 
-	
 
 
+
 function GraphAnimationCoordination:generateEdgeMotions()
   local supergraph = self.supergraph
   local graph = self.digraph
-  
+
   for i, arc in ipairs(supergraph.arcs) do
     local head = arc.head
     local tail = arc.tail
-   
+
     local last_arc  = nil
     local last_time = nil
     local last_v = nil
     local last_w = nil
-    
+
     for j, s in ipairs(supergraph.snapshots) do
       local v = supergraph:getSnapshotVertex(tail,s)
       local w = supergraph:getSnapshotVertex(head,s)
 
       if v and w then
-	local this_arc = graph:arc(v,w) --or graph:arc(w,v)
+    local this_arc = graph:arc(v,w) --or graph:arc(w,v)
         if this_arc then
-	  if this_arc and last_arc then
-	    local mrt1 = last_v.options["minimum rest time"]/2
-	    local mrt2 = v.options["minimum rest time"]/2
-	    
-	    local s1 = Coordinate.new(0,0)--lv.pos
-	    local e1 = Coordinate.new(v.pos.x-last_v.pos.x,-v.pos.y+last_v.pos.y)  
+      if this_arc and last_arc then
+        local mrt1 = last_v.options["minimum rest time"]/2
+        local mrt2 = v.options["minimum rest time"]/2
 
-	    local s2 = Coordinate.new(-v.pos.x+last_v.pos.x,v.pos.y-last_v.pos.y)
-	    local e2 = Coordinate.new(0,0)
+        local s1 = Coordinate.new(0,0)--lv.pos
+        local e1 = Coordinate.new(v.pos.x-last_v.pos.x,-v.pos.y+last_v.pos.y)
 
-	    local t_end     = s.timestamp - math.max(0,mrt2)
-	    local t_start   = last_time   + math.max(0,mrt1)
-	    
-	    local representative = self.visible_objects[arc][s]
-	    if representative == this_arc then
-	      append_move_animation(last_arc, s1, e1, t_start,t_end)
-	      append_move_animation(this_arc, s2, e2, t_start,t_end)
-	    else
-	      append_move_animation(representative,s1,e1,t_start,t_end)
-	    end
-	    this_arc = representative
-	  end
-	  last_arc = this_arc
-	  last_v = v
-	  last_time = s.timestamp
-	else
-	  last_arc = nil
-	end
+        local s2 = Coordinate.new(-v.pos.x+last_v.pos.x,v.pos.y-last_v.pos.y)
+        local e2 = Coordinate.new(0,0)
+
+        local t_end     = s.timestamp - math.max(0,mrt2)
+        local t_start   = last_time   + math.max(0,mrt1)
+
+        local representative = self.visible_objects[arc][s]
+        if representative == this_arc then
+          append_move_animation(last_arc, s1, e1, t_start,t_end)
+          append_move_animation(this_arc, s2, e2, t_start,t_end)
+        else
+          append_move_animation(representative,s1,e1,t_start,t_end)
+        end
+        this_arc = representative
+      end
+      last_arc = this_arc
+      last_v = v
+      last_time = s.timestamp
+    else
+      last_arc = nil
+    end
       else
-	last_arc = nil
+    last_arc = nil
       end
     end
   end
@@ -363,9 +365,9 @@
 -- @field t_transition  The mid time between two snapshot times.
 -- @field fade_duration The duration of the fade animation
 -- @field overlapping   A boolean defining if the animation occurs
---                      beofre and after the mid time (true) or if it
+--                      before and after the mid time (true) or if it
 --                      starts/end only in one interval (false)
--- @field closing       A boolean specifieng if this is a outfading time
+-- @field closing       A boolean specifying if this is an outfading time
 local function compute_fade_times(t_transition, fade_duration, overlapping, closing)
 
   if overlapping then
@@ -394,9 +396,9 @@
     local overlapping_out= true
     local minimum_rest_time = math.max(0,vertex.options["minimum rest time"])
     local allow_overlapping = vertex.options["overlapping transition"]
-    local fadein_duration = 0.01 
-    local fadeout_duration = 0.01 
-    
+    local fadein_duration = 0.01
+    local fadeout_duration = 0.01
+
     if self.is_first[vertex] then
       fadein_duration = self.ugraph.options["fadein time"]
       overlapping_in = false or allow_overlapping
@@ -414,7 +416,7 @@
       fadeout_duration = (interval.to-interval.from-minimum_rest_time)/2
       if overlapping then fadeout_duration = fadeout_duration*2 end
     end
-        
+
     local fin = compute_fade_times(interval.from, fadein_duration, overlapping_in, false)
     local fout = compute_fade_times(interval.to, fadeout_duration, overlapping_out, true)
 
@@ -422,23 +424,23 @@
 
     if representative~= vertex then
       table.insert(vertex.animations,{
-		     attribute = "stage",
-		     entries = { { t = 0, value = "false"}, },
-		     options = {}
+             attribute = "stage",
+             entries = { { t = 0, value = "false"}, },
+             options = {}
       })
     end
-    
+
     if interval.from > -math.huge and (vertex == representative or self.is_first[vertex]) then
       -- only appears if the snapshot node is its own repr. or if in the prev snapshot is
       -- no representative.
-      append_fade_animation(representative, 0, 1, fin.t_start, fin.t_end)    
+      append_fade_animation(representative, 0, 1, fin.t_start, fin.t_end)
     end
     if interval.to < math.huge and (self.is_last[vertex] or self.last_rep[vertex]) then
       -- The snapshot node only disappears when the node is not visible
-      -- in the next or (this=)last  snapshot: 
+      -- in the next or (this=)last  snapshot:
       append_fade_animation(representative, 1, 0, fout.t_start, fout.t_end)
     end
-  end  
+  end
 end
 
 
@@ -447,121 +449,119 @@
   local supergraph = self.supergraph
   local graph = self.digraph
   for _,edge in ipairs(graph.arcs) do
-      local snapshot = supergraph:getSnapshot(edge.head)
-      local int = snapshot.interval
-      local superarc = supergraph:getSuperarc(edge)
-      local representative = self.visible_objects[superarc][snapshot] or edge
+    local snapshot = supergraph:getSnapshot(edge.head)
+    local int = snapshot.interval
+    local superarc = supergraph:getSuperarc(edge)
+    local representative = self.visible_objects[superarc][snapshot] or edge
 
-      local minimum_rest_time = math.max(0,edge.head.options["minimum rest time"]/2,
-					 edge.tail.options["minimum rest time"]/2)
-      
-      local appears    = math.max(int.from, int.from)
-      local disappears = math.min(int.to,   int.to)
+    local minimum_rest_time = math.max(0,edge.head.options["minimum rest time"]/2,
+        edge.tail.options["minimum rest time"]/2)
 
-      local overlapping_in = true -- init true for crossfading
-      local overlapping_out= true
-      local fadein_duration = 0.01
-      local fadeout_duration = 0.01
-      local allow_overlapping = (edge.tail.options["overlapping transition"] and edge.head.options["overlapping transition"])
+    local appears    = math.max(int.from, int.from)
+    local disappears = math.min(int.to,   int.to)
 
-      if self.is_first[edge] and not self.move_on_enter[edge] and not self.move_on_enter[edge.head] then
-	fadein_duration = self.ugraph.options["fadein time"]
-	overlapping_in = false or allow_overlapping
-      end
-      
-      if self.is_last[edge] and not self.move_on_leave[edge]  then
-	fadeout_duration = self.ugraph.options["fadeout time"]
-	overlapping_out = false or allow_overlapping
-      end
-      
+    local overlapping_in = true -- init true for crossfading
+    local overlapping_out= true
+    local fadein_duration = 0.01
+    local fadeout_duration = 0.01
+    local allow_overlapping = (edge.tail.options["overlapping transition"] and edge.head.options["overlapping transition"])
 
-      if self.is_first[edge]
-	  and (self.move_on_enter[edge.head]
-	  or self.move_on_enter[edge.tail] )
-        then
-	  appears = snapshot.timestamp - minimum_rest_time
-      end
-      if self.is_last[edge] and
-	  (self.move_on_leave[edge.head]
-	     or self.move_on_leave[edge.tail]
-	) then
-	  disappears = snapshot.timestamp + minimum_rest_time
-	end
+    if self.is_first[edge] and not self.move_on_enter[edge] and not self.move_on_enter[edge.head] then
+      fadein_duration = self.ugraph.options["fadein time"]
+      overlapping_in = false or allow_overlapping
+    end
 
-      local fin = compute_fade_times(appears, fadein_duration, overlapping_in,false)
-      local fout = compute_fade_times(disappears,fadeout_duration,overlapping_out,true)
+    if self.is_last[edge] and not self.move_on_leave[edge]  then
+      fadeout_duration = self.ugraph.options["fadeout time"]
+      overlapping_out = false or allow_overlapping
+    end
 
-      edge.animations = edge.animations or {}
 
-      if representative~=edge then
-	table.insert(edge.animations,{
-		       attribute = "stage",
-		       entries = { { t = 0, value = "false"}, },
-		       options = {}})
-      end
-      
-      -- Fade in:
-      if appears > -math.huge and (edge == representative or self.is_first[edge]) then
-	append_fade_animation(representative, 0, 1, fin.t_start, fin.t_end )
-      end
-      
-      -- Fade out:
-      if disappears < math.huge and (self.is_last[edge] or self.last_rep[edge])then
-	append_fade_animation(representative, 1, 0, fout.t_start,fout.t_end )
-      end
-      
+    if self.is_first[edge]
+        and (self.move_on_enter[edge.head]
+        or self.move_on_enter[edge.tail] )
+    then
+      appears = snapshot.timestamp - minimum_rest_time
     end
-  
+    if self.is_last[edge] and
+        (self.move_on_leave[edge.head]
+         or self.move_on_leave[edge.tail]
+        ) then
+      disappears = snapshot.timestamp + minimum_rest_time
+    end
+
+    local fin = compute_fade_times(appears, fadein_duration, overlapping_in,false)
+    local fout = compute_fade_times(disappears,fadeout_duration,overlapping_out,true)
+
+    edge.animations = edge.animations or {}
+
+    if representative~=edge then
+      table.insert(edge.animations,{
+                   attribute = "stage",
+                   entries = { { t = 0, value = "false"}, },
+                   options = {}})
+    end
+
+    -- Fade in:
+    if appears > -math.huge and (edge == representative or self.is_first[edge]) then
+      append_fade_animation(representative, 0, 1, fin.t_start, fin.t_end )
+    end
+
+    -- Fade out:
+    if disappears < math.huge and (self.is_last[edge] or self.last_rep[edge])then
+      append_fade_animation(representative, 1, 0, fout.t_start,fout.t_end )
+    end
+  end
 end
 
 function GraphAnimationCoordination:precomputeNodes()
   local supergraph = self.supergraph
-  
+
   for _, supernode in ipairs(supergraph.vertices) do
-    
+
     local vis_nodes = {}
     self.visible_objects[supernode] = vis_nodes
-    
+
     local any_previous_node = nil
     local previous_representant = nil
     local node_before = nil
 
     for i, s in ipairs(supergraph.snapshots) do
-      local node = supergraph:getSnapshotVertex(supernode, s)   
+      local node = supergraph:getSnapshotVertex(supernode, s)
 
       if node then
-	-- assume the node is the last node
-	self.is_last[node] = true
-	
-	if node.options["modified"] then
-	  -- modified
-	  vis_nodes[s] = node
-	  previous_representant = node
-	  if any_previous_node then
-	    self.last_rep[any_previous_node] = true
-	  end
-	else
-	  -- unmodified
-	  previous_representant = previous_representant or node
-	  vis_nodes[s] = previous_representant
-	end
-	any_previous_node = node
-	
-	if node_before then
-	  self.is_last[node_before] = false
-	  self.previous_node[node]     = node_before
-	  self.next_node[node_before]  = node
-	  
-	  local do_move = (( node.pos.x ~= node_before.pos.x )
-	                or (node.pos.y ~= node_before.pos.y))
-	  self.move_on_enter[node]        = do_move
-	  self.move_on_leave[node_before] = do_move
-	else
-	  self.is_first[node] = true
-	end
-	node_before = node
+        -- assume the node is the last node
+        self.is_last[node] = true
+
+        if node.options["modified"] then
+          -- modified
+          vis_nodes[s] = node
+          previous_representant = node
+          if any_previous_node then
+            self.last_rep[any_previous_node] = true
+          end
+        else
+          -- unmodified
+          previous_representant = previous_representant or node
+          vis_nodes[s] = previous_representant
+        end
+        any_previous_node = node
+
+        if node_before then
+          self.is_last[node_before] = false
+          self.previous_node[node]     = node_before
+          self.next_node[node_before]  = node
+
+          local do_move = (( node.pos.x ~= node_before.pos.x )
+              or (node.pos.y ~= node_before.pos.y))
+          self.move_on_enter[node]        = do_move
+          self.move_on_leave[node_before] = do_move
+        else
+          self.is_first[node] = true
+        end
+        node_before = node
       else
-	node_before = nil 
+        node_before = nil
       end
     end
   end
@@ -574,8 +574,8 @@
     local tail = arc.tail
     if not ( self.is_first[head] or self.is_first[tail]) then
       if not self.digraph:arc(self.previous_node[tail], self.previous_node[head]) then
-	-- new arc connects existing nodes
-	self.is_first[arc] = true
+        -- new arc connects existing nodes
+        self.is_first[arc] = true
       end
     else
       -- arc and at least one node is new.
@@ -583,8 +583,8 @@
     end
     if not ( self.is_last[head] or self.is_last[tail]) then
       if not self.digraph:arc(self.next_node[tail],self.next_node[head]) then
-	-- arc disappears while nodes are still in the next snapshot
-	self.is_last[arc] = true
+        -- arc disappears while nodes are still in the next snapshot
+        self.is_last[arc] = true
       end
     else
       -- arc and at least one node disappears in the next snapshot
@@ -603,34 +603,34 @@
 
     local previous_arc
     local previous_representant
-    
+
     for _, s in ipairs(supergraph.arc_snapshots[superarc]) do
-       local head = supergraph:getSnapshotVertex(superarc.head, s)
-       local tail = supergraph:getSnapshotVertex(superarc.tail,  s)
-       -- use the digraph because the snapshot arc is not syncted
-       local arc = self.digraph:arc(tail, head)
-       
-       local modified = false
-       local opt_array = arc:optionsArray('modified')
-       for i = 1,#opt_array.aligned do
-	 modified = modified or opt_array[i]	 
-       end
- 
-       if modified  or
-       not eq_arc(arc, previous_arc) or self.is_first[arc] then
-	 --modified
-	 previous_representant = arc
-	 vis_objects[s] = arc
-	 if previous_arc then
-	   self.last_rep[previous_arc] = true
-	 end
+      local head = supergraph:getSnapshotVertex(superarc.head, s)
+      local tail = supergraph:getSnapshotVertex(superarc.tail,  s)
+      -- use the digraph because the snapshot arc is not synced
+      local arc = self.digraph:arc(tail, head)
+
+      local modified = false
+      local opt_array = arc:optionsArray('modified')
+      for i = 1,#opt_array.aligned do
+        modified = modified or opt_array[i]
+      end
+
+      if modified  or
+      not eq_arc(arc, previous_arc) or self.is_first[arc] then
+        --modified
+        previous_representant = arc
+        vis_objects[s] = arc
+        if previous_arc then
+          self.last_rep[previous_arc] = true
+        end
        else
-	 -- unmodified
-	 previous_representant = previous_representant or arc
-	 vis_objects[s] = previous_representant
-       end
-       previous_arc = arc
-     end
+        -- unmodified
+        previous_representant = previous_representant or arc
+        vis_objects[s] = previous_representant
+      end
+      previous_arc = arc
+    end
   end
 end
 -- Done

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/GreedyTemporalCycleRemoval.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/GreedyTemporalCycleRemoval.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/GreedyTemporalCycleRemoval.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -47,19 +47,19 @@
   algorithm = GreedyTemporalCycleRemoval,
   phase     = "temporal cycle removal",
   phase_default = true,
-  summary = [["  
-       A temporal dependency cycle is a cyclic path in the supergraph of 
-       an evolving graph. Use this key if you want remove all temporal 
-       dependency cycles by a greedy strategy which incrementally inserts
-       edge checks if this edge creates a cycle and splits at least one node
-       into two supernode at a given time.
+  summary = [["
+    A temporal dependency cycle is a cyclic path in the supergraph of
+    an evolving graph. Use this key if you want remove all temporal
+    dependency cycles by a greedy strategy which incrementally inserts
+    edge checks if this edge creates a cycle and splits at least one node
+    into two supernode at a given time.
   "]],
-  documentation = [["      
-       See ToDo
+  documentation = [["
+    See ToDo
   "]]
 }
 
--- Helpfunctions
+-- Help functions
 local function reachable(graph, v, w)
   local visited = {}
   local queue = PriorityQueue.new()
@@ -73,12 +73,12 @@
     for _, e in ipairs(outgoings) do
       local head = e.head
       if not visited[head] then
-	visited[head] = true
-	if head == w then
-	  return true
-	else
-	  queue:enqueue(head,1)
-	end
+        visited[head] = true
+        if head == w then
+          return true
+        else
+          queue:enqueue(head,1)
+        end
       end
     end
   end
@@ -101,13 +101,13 @@
 -- Resolves all dependencies by splitting supernodes into multiple supernodes.
 -- To resolve a cycle each edge will be inserted into a dependency graph
 -- successively. Each time such edge closes a cycle the head and tail will
--- be splitet at the related snapshot.
+-- be split at the related snapshot.
 --
 -- @param supergraph
 --
 function GreedyTemporalCycleRemoval:iterativeCycleRemoval(supergraph, split_tail, split_head)
   -- Build up the global dependency graph
-  -- A supernode v directly depends on another supernode w iff
+  -- A supernode v directly depends on another supernode w if
   -- there is a snapshot in which w is a child of w
   local dependency_graph = Digraph.new(supergraph)
   local stable_arcs = {}
@@ -115,57 +115,57 @@
     --local tree = snapshot.spanning_tree
   for _,tree in ipairs(snapshot.spanning_trees) do
     local new_arcs      = {}
-    
+
     for _, e in ipairs(tree.arcs) do
       if e.head.kind ~= "dummy" and e.tail.kind~="dummy" then
-	table.insert(new_arcs, e)
-	
-	local sv = supergraph:getSupervertex(e.tail)
-	local sw = supergraph:getSupervertex(e.head) 
-	local dep_arc = dependency_graph:arc(sv, sw)
-	
+        table.insert(new_arcs, e)
 
-	if (not dep_arc)   then
-	  -- check if the edge v->w closes a cycle in the dependencygraph
-	  --pgf.debug{dependency_graph}
-	  local cycle_arc = reachable(dependency_graph, sw, sv)
-	  dep_arc = dependency_graph:connect(sv,sw)
---	   texio.write("\ncheck ".. sv.name.."->" .. sw.name)
-	  if cycle_arc then
-	    if split_tail then
-	      supergraph:splitSupervertex(sv, { [1]=snapshot })
-	    end
-	    if split_head then
-	      supergraph:splitSupervertex(sw, { [1]=snapshot })
-	    end
+        local sv = supergraph:getSupervertex(e.tail)
+        local sw = supergraph:getSupervertex(e.head)
+        local dep_arc = dependency_graph:arc(sv, sw)
 
-	    -- rebuild dependency graph
-	    dependency_graph = Digraph.new(supergraph)
 
-	    for _, arc in ipairs(stable_arcs) do
-	      dependency_graph:connect(arc.tail, arc.head)
-	    end
-	    
-	    for _, arc in ipairs(new_arcs) do
-	      local sv = supergraph:getSupervertex(arc.tail)
-	      local sw = supergraph:getSupervertex(arc.head)
-	      dependency_graph:connect(sv, sw)	    
-	    end
-	  end -- end of resovle cycle_arc
-	end
+        if (not dep_arc)   then
+          -- check if the edge v->w closes a cycle in the dependency graph
+          --pgf.debug{dependency_graph}
+          local cycle_arc = reachable(dependency_graph, sw, sv)
+          dep_arc = dependency_graph:connect(sv,sw)
+--          texio.write("\ncheck ".. sv.name.."->" .. sw.name)
+          if cycle_arc then
+            if split_tail then
+              supergraph:splitSupervertex(sv, { [1]=snapshot })
+            end
+            if split_head then
+              supergraph:splitSupervertex(sw, { [1]=snapshot })
+            end
+
+            -- rebuild dependency graph
+            dependency_graph = Digraph.new(supergraph)
+
+            for _, arc in ipairs(stable_arcs) do
+              dependency_graph:connect(arc.tail, arc.head)
+            end
+
+            for _, arc in ipairs(new_arcs) do
+              local sv = supergraph:getSupervertex(arc.tail)
+              local sw = supergraph:getSupervertex(arc.head)
+              dependency_graph:connect(sv, sw)
+            end
+          end -- end of resolve cycle_arc
+        end
       end
     end
     -- Stable Arcs:
     for _, arc in ipairs(new_arcs) do
-      
+
       local sv = supergraph:getSupervertex(arc.tail)
       local sw = supergraph:getSupervertex(arc.head)
       local deparc = dependency_graph:arc(sv, sw)
 --      if not deparc or not stable_arcs[deparc] then
---	stable_arcs[deparc] = true
-	table.insert(stable_arcs, deparc)
+--        stable_arcs[deparc] = true
+        table.insert(stable_arcs, deparc)
 --      end
-      
+
     end
   end -- end for spanning_tree
   end -- end for snapshot

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/Skambath2016.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/Skambath2016.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/Skambath2016.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -6,7 +6,7 @@
 -- 2. under the GNU Public License
 --
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
--- 
+--
 
 -- Imports
 require "pgf.gd.trees.ChildSpec"
@@ -17,7 +17,7 @@
 local declare                 = require("pgf.gd.interface.InterfaceToAlgorithms").declare
 local layered                 = require "pgf.gd.layered"
 local tlayered                = require "pgf.gd.experimental.evolving.layered"
-local SpanningTreeComputation = require "pgf.gd.trees.SpanningTreeComputation" 
+local SpanningTreeComputation = require "pgf.gd.trees.SpanningTreeComputation"
 local lib                     = require "pgf.gd.lib"
 
 local Storage                 = require "pgf.gd.lib.Storage"
@@ -71,19 +71,19 @@
 
 
 
--- Helpfunctions
+-- Help functions
 
 ---
 -- Borders models the borderlines / the line of border vertices
 -- of a tree or subtree structure which can change over time.
 -- Each ordered and rooted tree or subtree has vertices per layer for which they
--- are on the outer places. On the left or respectivly on the right.
+-- are on the outer places. On the left or respectively on the right.
 -- The field |left| and |right| stores the both borderlines.
 -- A \emph{borderline} is an array. This array contains for each layer of the tree
 -- a table mapping a given snapshot to the related border-vertex of the layer
 -- in the snapshot.
--- 
--- @field left 
+--
+-- @field left
 -- @field right
 --
 local Borders = {}
@@ -136,7 +136,7 @@
     level_border_left  = target.left[i]  or {}
     level_border_right = target.right[i] or {}
     assert(not level_border_left[snapshot] and not level_border_right[snapshot],
-	   "border for a given snapshat already defined")
+       "border for a given snapshot already defined")
     level_border_left[snapshot]  = source.left[i][snapshot]
     level_border_right[snapshot] = source.right[i][snapshot]
     target.left[i]  = level_border_left
@@ -149,7 +149,7 @@
 -- placed on the right next to the existing borders. For each level
 -- and time in which the group has a border the borders  on the right
 -- will be replaced with this border. If it is not existing in the old
--- borders then also the left border will be adapted 
+-- borders then also the left border will be adapted
 --
 -- @param borders The existing borders. These will be modified with
 -- the borders of
@@ -164,27 +164,27 @@
     local r = borders.right[level] or {}
     for _, s in pairs(snapshots) do
       if ignore_dummies then
-	local gls,grs = group_borders.left[level][s], group_borders.right[level][s]
-	if gls~=nil then
-	  if gls.kind~="dummy" then
-	    l[s] = l[s] or gls 
-	  end
-	end
-	if grs~=nil then
-	  if grs.kind~="dummy" then
-	    r[s] = grs or r[s]
-	  end
-	end
+        local gls,grs = group_borders.left[level][s], group_borders.right[level][s]
+        if gls~=nil then
+          if gls.kind~="dummy" then
+            l[s] = l[s] or gls
+          end
+        end
+        if grs~=nil then
+          if grs.kind~="dummy" then
+            r[s] = grs or r[s]
+          end
+        end
       else
-	l[s] = l[s] or group_borders.left[level][s]
-	r[s] = group_borders.right[level][s] or r[s]
+        l[s] = l[s] or group_borders.left[level][s]
+        r[s] = group_borders.right[level][s] or r[s]
       end
-      
+
     end
     borders.left[level] = l
     borders.right[level] = r
   end
-  
+
 end
 
 --
@@ -211,16 +211,16 @@
 local function shift_group(shift, group, snapshots, descendants)
   assert(group,"no group passed")
   assert(shift~=math.huge and shift ~=-math.huge,
-	 "shift must be a valid finit length")
+      "shift must be a valid finite length")
   local shifted = {} -- remember which vertex was shifted during this run
   local anchor = -math.huge
   for _, s in ipairs(snapshots) do
-    local v = group[s] 
-    if not shifted[v] and v then 
+    local v = group[s]
+    if not shifted[v] and v then
       v.pos.x = v.pos.x + shift
       shifted[v] = true
 
-      -- also shift all descendants of the group vertex 
+      -- also shift all descendants of the group vertex
       for _, d in ipairs(descendants[v]) do
         if not shifted[d] then
           d.pos.x = d.pos.x + shift
@@ -228,14 +228,14 @@
         end
       end
       anchor = math.max(anchor, v.pos.x )
-    end   
+    end
   end
   return anchor
 end
 
 --
--- Traverse through the spanneng tree |tree| of a snapshot and sort
--- the child nodes into groups. A group summarises for a given parent
+-- Traverse through the spanning tree |tree| of a snapshot and sort
+-- the child nodes into groups. A group summarizes for a given parent
 -- node all  children node over time that are at the same child
 -- position. The k-th child group groups[i] maps each snapshot to the
 -- k-th node in the related snapshot.
@@ -242,7 +242,7 @@
 --
 --
 -- @field supergraph the supergraph
--- 
+--
 -- @field tree the tree or spanning tree to decide the indices of the
 -- child nodes
 --
@@ -249,7 +249,7 @@
 -- @field childgroups a Storage which contains the list of childgroups
 -- for each supernode
 --
--- @field snapshot 
+-- @field snapshot
 --
 local function precompute_childgroups(supergraph, tree, node, childgroups, snapshot)
   local outgoings  = tree:outgoing(node)
@@ -257,7 +257,7 @@
     local supervertex = supergraph:getSupervertex(node)
     local groups     = childgroups[supervertex] or {}
     for i, e in ipairs(outgoings) do
-      
+
       group = groups[i] or {}
       assert(e.head, "no edge")
       group[snapshot] = e.head
@@ -274,7 +274,7 @@
 -- vertices in a tree by accumulation of the relative shifts on the
 -- path from the root to the vertex recursively.
 --
--- @param tree the tree in which the vertice's position should be
+-- @param tree the tree in which the vertex's position should be
 --   computed.
 --
 -- @param vertex the next vertex that gets its absolute coordinate.
@@ -302,7 +302,7 @@
   local nr = next.right[border_pair.right]
   assert ((nl and nr) or (not nl and not nr))
   return {left = nl,  right = nr,
-	 }
+  }
 end
 
 local function add_shift(abs_shift, border_pair, next)
@@ -325,13 +325,13 @@
     if clumb.right.kind=="dummy" then shifts[clumb.right] = 0 end
     local v0     = outgoings[i].head
     local v1     = outgoings[i+1].head
-    local shift = layered.ideal_sibling_distance(self.adjusted_bb, self.ugraph, v0, v1) + shifts[clumb.right]   
+    local shift = layered.ideal_sibling_distance(self.adjusted_bb, self.ugraph, v0, v1) + shifts[clumb.right]
     local last0 = {left = clumb.left, right = clumb.right}
-    local last1 = {left = v1, right = v1}	
+    local last1 = {left = v1, right = v1}
     local next0 = get_next(last0, next)
     local next1 = get_next(last1, next)
     local abs_shift0 = {left = shifts[clumb.left], right = shifts[clumb.right]}
-    local abs_shift1 = {left = 0, right = 0} 
+    local abs_shift1 = {left = 0, right = 0}
 
     while (next0.left and next1.left) do
       add_shift(abs_shift0, last0, next)
@@ -338,12 +338,12 @@
       add_shift(abs_shift1, last1, next)
 
       shift = math.max(shift,
-		       layered.ideal_sibling_distance(self.adjusted_bb,
-						      self.ugraph,
-						      next0.right,
-						      next1.left)
-		       + abs_shift0.right - abs_shift1.left)
---      texio.write("\n   | "..(next0.right.name or "dummy").."<->"..(next1.left.name or "dummy").." :\t"..shift)      
+               layered.ideal_sibling_distance(self.adjusted_bb,
+                              self.ugraph,
+                              next0.right,
+                              next1.left)
+               + abs_shift0.right - abs_shift1.left)
+--      texio.write("\n   | "..(next0.right.name or "dummy").."<->"..(next1.left.name or "dummy").." :\t"..shift)
       last0, last1 = next0, next1
       next0  = get_next(next0, next)
       next1  = get_next(next1, next)
@@ -383,7 +383,7 @@
       next.left[last0.left] = next1.left
 --      pgf.debug{last0,abs0,abs1,last1}
       next.left_shift[last0.left]  =   shift - abs0.left + (abs1.left + next.left_shift[last1.left] )
-      
+
     else
       -- both trees have the same height
     end
@@ -398,11 +398,11 @@
   local childgroups  = Storage.new()
 
   local phases = self.digraph.options.algorithm_phases
-  
+
   local so_class = phases['supergraph optimization']
   local ga_class = phases['evolving graph animation']
   local cr_class = phases['temporal cycle removal']
- 
+
   self.extended_version = self.digraph.options['missing nodes get space']
   self.supergraph           = Supergraph.generateSupergraph(self.digraph)
   local supergraph_original = Supergraph.generateSupergraph(self.digraph)
@@ -414,8 +414,8 @@
     digraph        = self.digraph,
     ugraph         = self.ugraph
   }:run()
-  
-  
+
+
   self:precomputeSpanningTrees()
 
   -- Resolve cyclic dependencies if exists.
@@ -432,13 +432,13 @@
 
   self:computeHorizontalLayout(childgroups, descendants)
 --  self:computeHorizontalLayoutFast()
-    
-  -- vertical positions  
+
+  -- vertical positions
   tlayered.arrange_layers_by_baselines(layers,
-				       self.adjusted_bb,
-				       self.ugraph,
-				       self.supergraph.snapshots,
-				       self.supergraph.vertex_snapshots)
+                                       self.adjusted_bb,
+                                       self.ugraph,
+                                       self.supergraph.snapshots,
+                                       self.supergraph.vertex_snapshots)
 
   -- animate graph
   ga_class.new {
@@ -446,11 +446,11 @@
     supergraph     = supergraph_original,
     digraph        = self.digraph,
     ugraph         = self.ugraph
-	       }:run()
+           }:run()
 end
 
 --
--- Compute the required shift value for a second tree to garuantee
+-- Compute the required shift value for a second tree to guarantee
 -- a required node distance.
 -- @field right_borders The Border data structure for the right border of
 --                      the left tree
@@ -465,11 +465,11 @@
   local max_level   = math.min(#right_borders, #left_borders)
   local first_shift = 0
   local snapshots   = selected_snapshots or self.supergraph.snapshots
-  
+
   for layer = 1, max_level do
     local rb, lb = right_borders[layer], left_borders[layer]
     for _,s in ipairs(snapshots)  do
-      
+
       local v1,v2 = rb[s],lb[s]
       if v1 and v2 then
         local local_shift = layered.ideal_sibling_distance(self.adjusted_bb, self.ugraph, v1, v2) + v1.pos.x - v2.pos.x
@@ -497,7 +497,7 @@
   if is_significant then
     shift = shift + self.ugraph.options['significant sep']
   end
-  
+
   return shift
 end
 
@@ -521,22 +521,22 @@
   end
 
   -- 1. Initialize Dependencies
-  
+
   for _, snapshot in ipairs(self.supergraph.snapshots) do
     for _, spanning_tree in ipairs(snapshot.spanning_trees) do
       for _, arc in ipairs(spanning_tree.arcs) do
-	
-	local head = self.supergraph:getSupervertex(arc.head)
-	local tail = self.supergraph:getSupervertex(arc.tail)
 
-	if(head and tail) then
-	  if not dependency_graph:arc(tail, head) then
-	    dependency_graph:connect(tail, head)
-	    dep_counter[tail] = dep_counter[tail] + 1
-	  end
-	end
+    local head = self.supergraph:getSupervertex(arc.head)
+    local tail = self.supergraph:getSupervertex(arc.tail)
+
+    if(head and tail) then
+      if not dependency_graph:arc(tail, head) then
+        dependency_graph:connect(tail, head)
+        dep_counter[tail] = dep_counter[tail] + 1
       end
     end
+      end
+    end
   end
 
   -- 2. Find independent vertices
@@ -546,19 +546,19 @@
       queue:enqueue(vertex, 1)
     end
   end
-  
-  -- 2. 
+
+  -- 2.
   while not queue:isEmpty() do
-    local vertex = queue:dequeue()  
+    local vertex = queue:dequeue()
     local vertex_snapshots = self.supergraph:getSnapshots(vertex)
-    
+
     -- a. Resolve dependencies on this vertex:
     local incomings = dependency_graph:incoming(vertex)
-    for _, e in ipairs(incomings) do     
+    for _, e in ipairs(incomings) do
       dep_counter[e.tail] = dep_counter[e.tail] - 1
       if dep_counter[e.tail] == 0 then
-	queue:enqueue(e.tail, 1)
-      end   
+        queue:enqueue(e.tail, 1)
+      end
     end
 
     -- b. Compute borders of this supervertex:
@@ -569,7 +569,7 @@
       snapshot_vertex.pos.x = 0
       snapshot_vertex.pos.y = 0
     end
-    
+
     local vertex_groups = groups[vertex]
     local last_pos_x = 0
     if vertex_groups then
@@ -576,26 +576,26 @@
       -- c. Compute borders of groups:
       local all_group_borders = {}
       for i, group in ipairs(vertex_groups) do
-	local group_boders = Borders.new()
-	for _,s in ipairs(vertex_snapshots) do
-	  local child = group[s]
-	  if child then
-	    local child_borders
-	    if not (child.kind == "dummy") then
-	      local superchild = self.supergraph:getSupervertex(child)
-	      child_borders = subtree_borders[superchild] or Borders.new()
-	    else
-	      child_borders = Borders.new()
-	      child_borders:addBoth(1, s, child)
-	    end
-	    assert(child.pos~=math.huge, "invalid child pos")
-	    shift_group(-child.pos.x,{[s]=child},{[1]=s}, descendants)
-	    Borders.copyBordersAtSnapshot(child_borders, group_boders, s)
-	  end
-	end
-	all_group_borders[i] = group_boders
+        local group_boders = Borders.new()
+        for _,s in ipairs(vertex_snapshots) do
+          local child = group[s]
+          if child then
+            local child_borders
+            if not (child.kind == "dummy") then
+              local superchild = self.supergraph:getSupervertex(child)
+              child_borders = subtree_borders[superchild] or Borders.new()
+            else
+              child_borders = Borders.new()
+              child_borders:addBoth(1, s, child)
+            end
+            assert(child.pos~=math.huge, "invalid child pos")
+            shift_group(-child.pos.x,{[s]=child},{[1]=s}, descendants)
+            Borders.copyBordersAtSnapshot(child_borders, group_boders, s)
+          end
+        end
+        all_group_borders[i] = group_boders
       end
-      
+
       -- d. Place groups and merge borders of groups:
       local last_group = nil
       last_pos_x = 0
@@ -602,30 +602,30 @@
       local merged_borders = Borders.new()
       local final_borders  = Borders.new()
       for i, group in ipairs(vertex_groups) do
-	local group_borders = all_group_borders[i]
-	if  last_group_borders then
-	  -- i.   compute minimal shift
+        local group_borders = all_group_borders[i]
+        if  last_group_borders then
+          -- i.   compute minimal shift
 
-	  local shift
-	  shift = self:computeMinShift(merged_borders.right, group_borders.left)
+          local shift
+          shift = self:computeMinShift(merged_borders.right, group_borders.left)
 
-	  
-	  assert(shift ~= math.huge and shift~=-math.huge, "invalid shift")
 
-	  -- ii.  shift group
-	  local anchor = shift_group(shift, group,vertex_snapshots, descendants)
-	  last_pos_x = anchor
-	end
-	last_group_borders = group_borders
-	
-	-- iii. adapt borders
-	adapt_borders(merged_borders,
-                      group_borders,
-                      self.supergraph.snapshots)
-	adapt_borders(final_borders,
-		      group_borders,
-                      self.supergraph.snapshots,
-                      not self.extended_version)
+          assert(shift ~= math.huge and shift~=-math.huge, "invalid shift")
+
+          -- ii.  shift group
+          local anchor = shift_group(shift, group,vertex_snapshots, descendants)
+          last_pos_x = anchor
+        end
+        last_group_borders = group_borders
+
+        -- iii. adapt borders
+        adapt_borders(merged_borders,
+                          group_borders,
+                          self.supergraph.snapshots)
+        adapt_borders(final_borders,
+                  group_borders,
+                  self.supergraph.snapshots,
+                  not self.extended_version)
       end -- for (group)
       vertex_borders:appendBelow(1, final_borders)
     end
@@ -637,24 +637,24 @@
       local snapshot_vertex = self.supergraph:getSnapshotVertex(vertex, s)
       snapshot_vertex.pos.x = x
     end
-    
-    subtree_borders[vertex] = vertex_borders 
+
+    subtree_borders[vertex] = vertex_borders
   end
 
-  -- align roots 
+  -- align roots
   for _, s in ipairs(self.supergraph.snapshots) do
     local lastroot
-    local rborder 
+    local rborder
     for i, spanning_tree in ipairs(s.spanning_trees) do
       local root = spanning_tree.root
       local rootborders = subtree_borders[self.supergraph:getSupervertex(root)]
       shift_group(-root.pos.x,{[s]=root},{[1]=s}, descendants)
       if i>1 then
-	local l = subtree_borders[self.supergraph:getSupervertex(lastroot)]
-	local r = rootborders
-	shift = math.max(self:computeMinShift(l.right, r.left, {[1]=s}),
-			 self:computeMinShift(rborder.right,r.left, {[1]=s}))
-	shift_group(shift,{[s]=root},{[1]=s}, descendants)
+        local l = subtree_borders[self.supergraph:getSupervertex(lastroot)]
+        local r = rootborders
+        shift = math.max(self:computeMinShift(l.right, r.left, {[1]=s}),
+                 self:computeMinShift(rborder.right,r.left, {[1]=s}))
+        shift_group(shift,{[s]=root},{[1]=s}, descendants)
       else
         rborder = Borders.new()
       end
@@ -684,7 +684,7 @@
     dependency_graph:add {vertex}
   end
 
-  
+
   -- I. Initialize Dependencies (Build Dependency Graph)
   for _, snapshot in ipairs(self.supergraph.snapshots) do
     for _, spanning_tree in ipairs(snapshot.spanning_trees) do
@@ -691,21 +691,21 @@
       table.insert(all_trees, spanning_tree)
       shifts[spanning_tree] = Storage.new()
       next[spanning_tree] = {left= Storage.new(),
-			     right= Storage.new(),
-			     left_shift = Storage.new(),
-			     right_shift = Storage.new()
+                 right= Storage.new(),
+                 left_shift = Storage.new(),
+                 right_shift = Storage.new()
       }
-      
+
       for _, arc in ipairs(spanning_tree.arcs) do
-	local head = self.supergraph:getSupervertex(arc.head)
-	local tail = self.supergraph:getSupervertex(arc.tail)
+        local head = self.supergraph:getSupervertex(arc.head)
+        local tail = self.supergraph:getSupervertex(arc.tail)
 
-	if(head and tail) then
-	  if not dependency_graph:arc(tail, head) then
-	    dependency_graph:connect(tail, head)
-	    dep_counter[tail] = dep_counter[tail] + 1
-	  end
-	end
+        if(head and tail) then
+          if not dependency_graph:arc(tail, head) then
+            dependency_graph:connect(tail, head)
+            dep_counter[tail] = dep_counter[tail] + 1
+          end
+        end
       end
     end
   end
@@ -718,7 +718,7 @@
       queue:enqueue(vertex, 1)
     end
   end
-   
+
   while not queue:isEmpty() do
     -- Next node in topological order
     local vertex = queue:dequeue()
@@ -725,14 +725,14 @@
 --    texio.write("\n\n --- "..vertex.name .. " ---")
     --pgf.debug{next}
     local vertex_snapshots = self.supergraph:getSnapshots(vertex)
-      
+
     -- a. Resolve dependencies on this vertex:
     local incomings = dependency_graph:incoming(vertex)
-    for _, e in ipairs(incomings) do     
+    for _, e in ipairs(incomings) do
       dep_counter[e.tail] = dep_counter[e.tail] - 1
       if dep_counter[e.tail] == 0 then
-	queue:enqueue(e.tail, 1)
-      end   
+        queue:enqueue(e.tail, 1)
+      end
     end
 
     -- b. Compute maximum number of children over time:
@@ -743,7 +743,7 @@
       num_children = math.max(num_children, #(tree:outgoing(v)))
       shifts[tree][v] = 0
     end
-    
+
     -- c. Shift all subtrees in all snapshots:
     local hlp_ptr = Storage.new()
     local max_shift = 0
@@ -751,27 +751,27 @@
       -- i)    Compute the necessary shift between the i-th and (i+1)-th subtrees (per snapshot):
       local min_shift = 0
       for t, s in ipairs(vertex_snapshots) do
-	local snapshot_vertex = self.supergraph:getSnapshotVertex(vertex, s)
-	local tree = s.spanning_trees[1]
-	local req_shift, hptr
-	req_shift, hptr = self:computeRequiredDistance(tree,
-						       snapshot_vertex,
-						       i,
-						       shifts[tree],
-						       next[tree]
-						      )
-	hlp_ptr[t] = hptr
---	texio.write(" -> \t"..req_shift)
-	min_shift = math.max(min_shift, req_shift)
+    local snapshot_vertex = self.supergraph:getSnapshotVertex(vertex, s)
+    local tree = s.spanning_trees[1]
+    local req_shift, hptr
+    req_shift, hptr = self:computeRequiredDistance(tree,
+                               snapshot_vertex,
+                               i,
+                               shifts[tree],
+                               next[tree]
+                              )
+    hlp_ptr[t] = hptr
+--    texio.write(" -> \t"..req_shift)
+    min_shift = math.max(min_shift, req_shift)
       end
 
 --      texio.write("\n \t\t".. min_shift )
-      
-      -- ii)   Synchronize distance between neigbored subtrees and apply shifts
+
+      -- ii)   Synchronize distance between neighbored subtrees and apply shifts
       for t, s in ipairs(vertex_snapshots) do
-	local snapshot_vertex = self.supergraph:getSnapshotVertex(vertex, s)
-	local tree = s.spanning_trees[1]
-	apply_shift(tree, snapshot_vertex, i, shifts[tree], next[tree], hlp_ptr[t], min_shift)
+        local snapshot_vertex = self.supergraph:getSnapshotVertex(vertex, s)
+        local tree = s.spanning_trees[1]
+        apply_shift(tree, snapshot_vertex, i, shifts[tree], next[tree], hlp_ptr[t], min_shift)
       end
 
       max_shift = min_shift
@@ -781,22 +781,22 @@
       local snapshot_vertex = self.supergraph:getSnapshotVertex(vertex, s)
       local tree = s.spanning_trees[1]
       local outgoings = tree:outgoing(snapshot_vertex)
-      
+
 --      next[tree].left[snapshot_vertex] = outgoings[1].head
 
 
       for i = 1,#outgoings do
-	if i==1 then
-	  next[tree].left_shift[snapshot_vertex] = - max_shift / 2
-	  next[tree].left[snapshot_vertex]= outgoings[i].head	  
-	end
-	shifts[tree][outgoings[i].head] = shifts[tree][outgoings[i].head] - max_shift / 2
-	next[tree].right[snapshot_vertex] = outgoings[i].head
-	next[tree].right_shift[snapshot_vertex] =  shifts[tree][outgoings[i].head]
+        if i==1 then
+          next[tree].left_shift[snapshot_vertex] = - max_shift / 2
+          next[tree].left[snapshot_vertex]= outgoings[i].head
+        end
+        shifts[tree][outgoings[i].head] = shifts[tree][outgoings[i].head] - max_shift / 2
+        next[tree].right[snapshot_vertex] = outgoings[i].head
+        next[tree].right_shift[snapshot_vertex] =  shifts[tree][outgoings[i].head]
       end
-	
+
     end
-    
+
   end -- end while (all vertices have been processed)
 
   -- III. Accumulate absolute horizontal coordinates
@@ -832,8 +832,8 @@
 
 
 --
--- 
 --
+--
 function Skambath2016:precomputeChildgroups(childgroups)
   for _,s in ipairs(self.supergraph.snapshots) do
     for _,spanning_tree in ipairs(s.spanning_trees) do
@@ -849,8 +849,8 @@
 --
 function Skambath2016:precomputeSpanningTrees()
   local events = assert(self.scope.events,
-			"no events found for the spanning tree computation")
-  
+            "no events found for the spanning tree computation")
+
   for i, s in ipairs(self.supergraph.snapshots) do
     -- The involved snapshot graph:
     local s_copy = Digraph.new(s)

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/Supergraph.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/Supergraph.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/Supergraph.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -27,12 +27,12 @@
 -- and if there is a single snapshot in which two vertices are
 -- connected by an edge they are connected in the supergraph.
 --
--- Note that in TikZ a \emph{node} is more than a single dot. A node
+-- Note that in \tikzname\ a \emph{node} is more than a single dot. A node
 -- has a content and different properties like background-color or a
--- shape. Formally this can be modelled by function mapping vertices
+-- shape. Formally this can be modeled by function mapping vertices
 -- to their properties. For evolving graphs this could be done in the
--- same way. As this is difficult to be realised in PGF  because there
--- is no basic support for time dependend properties on nodes, each
+-- same way. As this is difficult to be realized in PGF  because there
+-- is no basic support for time dependent properties on nodes, each
 -- vertex will be displayed over time by different single
 -- (snapshot-)nodes which can have different visual properties. This
 -- means for a vertex which we call |supervertex| in the following we
@@ -53,7 +53,7 @@
 -- @field supervertices_by_id This storage maps a node identifier to the
 --        related supervertex such that PGF-nodes which belonging to
 --        the same superverticex can be identified
--- 
+--
 -- @field snapshots An array of all snapshots. Sorted in ascending order
 -- over the timestamps of the snapshots.
 --
@@ -64,6 +64,7 @@
 --        Assume we want to iterate over all snapshots
 --        for a certain pair of supernodes in which they are connected
 --        by an arc. The arc_snapshots  storage helps in this case:
+--        %
 --        \begin{codeexample}[code only, tikz syntax=false]
 --           local supergraph = Supergraph.generateSupergraph(self.digraph)
 --           local u = supergraph.vertices[1]
@@ -110,24 +111,24 @@
 --
 -- @param snapshots  An array of all existing snapshots
 -- @param timestamps A table which maps known timestamps to their
--- related snapshots 
+-- related snapshots
 -- @param ugraph     The ugraph of the underlying graph structure
 -- @param snapshot_time
 --
 -- @return The snapshot instance found in the snapshots array for the
--- wanted timestamp snapshot_time if it does'nt exists  a new snapshot
--- will be generated and added to the arrays 
+-- wanted timestamp snapshot_time if it doesn't exists a new snapshot
+-- will be generated and added to the arrays
 --
 function get_snapshot(snapshots, timestamps, ugraph, snapshot_time)
   local snapshot
   local snapshot_idx = timestamps[snapshot_time]
-    
+
   if not snapshot_idx then
     -- store snapshot if it doesn't exists
-    snapshot_idx = timestamps.n + 1 
+    snapshot_idx = timestamps.n + 1
     timestamps[snapshot_time] = snapshot_idx
     timestamps.n = timestamps.n + 1
-    snapshot = Digraph.new { 
+    snapshot = Digraph.new {
       syntactic_digraph = ugraph.syntactic_digraph,
       options           = ugraph.options
     }
@@ -136,7 +137,7 @@
   else
     snapshot = snapshots[snapshot_idx]
   end
-  assert(snapshot~=nil, "an unexpected error occured")
+  assert(snapshot~=nil, "an unexpected error occurred")
   return snapshot
 end
 
@@ -152,7 +153,7 @@
 --
 -- @return The supergraph which is a |Digraph| that has a supervertex
 -- for each set of snapshot-vertices with the same |supernode|
--- attribute. 
+-- attribute.
 --
 function Supergraph.generateSupergraph(digraph)
   local new_supergraph
@@ -161,35 +162,35 @@
     options           = digraph.options,
     digraph           = digraph,
   }
-    
-  -- array to store the supervertices for a given vertex name  
+
+  -- array to store the supervertices for a given vertex name
   local local_snapshots = {}       -- array to store each snapshot graphs
-  
+
   local timestamps = { n = 0 }     -- set of snapshot times
 
-  -- separate and assign vertices to their snapshots and supervertives
+  -- separate and assign vertices to their snapshots and supervertices
   for i,vertex in ipairs(digraph.vertices) do
     local snapshot_time  = assert(vertex.options["snapshot"], "Missing option 'snapshot' for vertex ".. vertex.name ..". ")
     local supernode_name = assert(vertex.options["supernode"], "Missing option 'supernode' for vertex"..vertex.name..". ")
-       
+
     local snapshot    = get_snapshot(local_snapshots, timestamps, digraph, snapshot_time)
     local supervertex = new_supergraph.supervertices_by_id[supernode_name]
-    
+
     if not supervertex then
-      -- first appeareance of the supernode id
-      supervertex = Vertex.new { 
-        kind = "super", 
-        name = supernode_name 
+      -- first appearance of the supernode id
+      supervertex = Vertex.new {
+        kind = "super",
+        name = supernode_name
       }
       supervertex.snapshots = {}
       supervertex.subvertex = {}
-      new_supergraph.supervertices_by_id[supernode_name] = supervertex 
+      new_supergraph.supervertices_by_id[supernode_name] = supervertex
       new_supergraph:add{supervertex}
 
       supervertex.options = {}
       supervertex.options = vertex.options
-    end 
-    
+    end
+
     snapshot:add{vertex}
 
     new_supergraph.supervertices[vertex] = supervertex
@@ -198,11 +199,11 @@
   end
 
   -- Create edges
-  for i, e in ipairs(digraph.arcs) do  
+  for i, e in ipairs(digraph.arcs) do
     local u,v = e.tail, e.head
     local snapshot_tail = new_supergraph.vertex_snapshots[e.tail]
     local snapshot_head = new_supergraph.vertex_snapshots[e.head]
-        
+
     assert(snapshot_head == snapshot_tail, "Arcs must connect nodes that exist at the same time.")
 
     -- connect in the snapshot graph
@@ -211,18 +212,18 @@
     -- connect in the supergraph:
     local super_tail = new_supergraph.supervertices[u]
     local super_head = new_supergraph.supervertices[v]
-    
+
     new_supergraph:assignToSuperarc(super_tail, super_head, snapshot_tail)
   end
-  
+
   -- snapshots in temporal order
-  table.sort(local_snapshots, 
+  table.sort(local_snapshots,
     function(s1,s2)
       return s1.timestamp < s2.timestamp
     end )
-  
-  local previous_snapshot 
-  
+
+  local previous_snapshot
+
   for i,s in ipairs(local_snapshots) do
     local start = -math.huge
     if previous_snapshot then
@@ -235,11 +236,11 @@
 
   new_supergraph.snapshots = local_snapshots
   new_supergraph.snapshots_indices = Storage.new()
-  
+
   for i, s in ipairs(new_supergraph.snapshots) do
     new_supergraph.snapshots_indices[s] = i
   end
-  
+
   return new_supergraph
 end
 
@@ -246,7 +247,7 @@
 
 function Supergraph:getSnapshotStaticDuration(snapshot)
   assert(snapshot, "a snapshot as parameter expected, but got nil")
-  local idur = snapshot.interval.to - snapshot.interval.from 
+  local idur = snapshot.interval.to - snapshot.interval.from
   assert(idur, "unexpected nil-value")
   local d1 = snapshot.interval.to - snapshot.timestamp
   local d2 = snapshot.timestamp - snapshot.interval.from
@@ -272,9 +273,9 @@
 end
 
 ---
--- 
+--
 -- @return The ratio of the time of a snapshot related to the global duration of the whole
---          evlolving trees. (The time between the last and first snapshot)
+--          evolving trees. (The time between the last and first snapshot)
 function Supergraph:getSnapshotRelativeDuration(snapshot)
   if self:getDuration() == 0 then
     return 1
@@ -294,7 +295,7 @@
 function Supergraph:getSupervertex(vertex)
   assert(vertex, "vertex required")
   assert(self.supervertices, "supervertex table is not defined")
-  return self.supervertices[vertex]  
+  return self.supervertices[vertex]
 end
 
 function Supergraph:getSuperarc(arc)
@@ -322,7 +323,7 @@
 ---
 -- For a given supervertex get the related vertex for a snapshot
 --
--- @param supervertex 
+-- @param supervertex
 --
 -- @param snapshot
 --
@@ -340,7 +341,7 @@
   local idx1 = self.snapshots_indices[snapshot1] --or -1
   local idx2 = self.snapshots_indices[snapshot2] --or -1
   local d = n or 1
-  
+
   return (idx2-idx1 <= d) or (idx1-idx2 <= d)
 end
 
@@ -358,7 +359,7 @@
 -- their positions from the supergraph.
 --
 function Supergraph:sharePositions(ugraph, ignore)
-  
+
   for _,vertex in ipairs(ugraph.vertices) do
     if not ignore then
       vertex.pos.x = self.supervertices[vertex].pos.x
@@ -365,14 +366,14 @@
       vertex.pos.y = self.supervertices[vertex].pos.y
     else
       if not ignore.x then
-	vertex.pos.x = self.supervertices[vertex].pos.x
+        vertex.pos.x = self.supervertices[vertex].pos.x
       end
       if not ignore.y then
-	vertex.pos.y = self.supervertices[vertex].pos.y
+        vertex.pos.y = self.supervertices[vertex].pos.y
       end
     end
-    
-    
+
+
   end
 end
 
@@ -380,7 +381,7 @@
   for _,vertex in ipairs(ugraph.vertices) do
     local snapshot_vertex = self.supertvertices[vertex]
     if snapshot_vertex then
-      f(vertex, snapshot_vertex)  
+      f(vertex, snapshot_vertex)
     end
   end
 end
@@ -394,10 +395,10 @@
 -- the original vertex.
 -- If a supervertex has no subvertices then it will not be added to the graph.
 --
--- @param supervertex The supervertex which should be splitted.
+-- @param supervertex The supervertex which should be split.
 --
 -- @param snapshots An array of snapshots at which the supervertex
--- should be splitted into a new one with the corresponding pgf-vertices.
+-- should be split into a new one with the corresponding pgf-vertices.
 -- If there are more than one snapshots passed to the function
 -- for each snapshot there will be a new pseudo-vertex
 --
@@ -404,13 +405,13 @@
 function Supergraph:splitSupervertex(supervertex, snapshots)
   assert(supervertex, "no supervertex defined")
   -- snapshots in temporal order
-  table.sort(snapshots, 
+  table.sort(snapshots,
     function(s1,s2)
       return s1.timestamp < s2.timestamp
   end )
 
   assert(#snapshots~=0)
-  
+
   local edit_snapshots = supervertex.snapshots
   local first_removed  = math.huge
   local rem_arcs = {}
@@ -437,42 +438,42 @@
       local s = self.snapshots[j]
       local vertex = self:getSnapshotVertex(supervertex, s)
       if vertex then
-	self.supervertices[vertex] = pseudovertex
-	self:addSnapshotVertex(pseudovertex, s, vertex)
-	self:removeSnapshotVertex(supervertex, s)
-	
-	if not has_subvertices then
-	  has_subvertices = true
-	  self:add{pseudovertex}
-	end
+        self.supervertices[vertex] = pseudovertex
+        self:addSnapshotVertex(pseudovertex, s, vertex)
+        self:removeSnapshotVertex(supervertex, s)
 
-	-- update edges:
-	local incoming = self.digraph:incoming(vertex)
-	local outgoing = self.digraph:outgoing(vertex)
-	
-	for _, arc in ipairs(incoming) do
-	  local tail = self.supervertices[arc.tail]
-	  local head = self.supervertices[arc.head]
-	  self:assignToSuperarc(tail, pseudovertex, s)
-	  
-	  local super_arc = self:arc(tail, supervertex)
-	  if not rem_arcs[super_arc] then
-	    table.insert(rem_arcs, {arc = super_arc, snapshot = s})
-	    rem_arcs[super_arc] = true
-	  end
-	end
-	
-	for _, arc in ipairs(outgoing) do
- 	  local tail = self.supervertices[arc.tail]
-	  local head = self.supervertices[arc.head]
-	  self:assignToSuperarc(pseudovertex, head, s)
+        if not has_subvertices then
+          has_subvertices = true
+          self:add{pseudovertex}
+        end
 
-	  local super_arc = self:arc(supervertex, head)
-	  if not rem_arcs[super_arc] then
-	    table.insert(rem_arcs, {arc = super_arc, snapshot = s})
-	    rem_arcs[super_arc] = true
-	  end
-	end
+        -- update edges:
+        local incoming = self.digraph:incoming(vertex)
+        local outgoing = self.digraph:outgoing(vertex)
+
+        for _, arc in ipairs(incoming) do
+          local tail = self.supervertices[arc.tail]
+          local head = self.supervertices[arc.head]
+          self:assignToSuperarc(tail, pseudovertex, s)
+
+          local super_arc = self:arc(tail, supervertex)
+          if not rem_arcs[super_arc] then
+            table.insert(rem_arcs, {arc = super_arc, snapshot = s})
+            rem_arcs[super_arc] = true
+          end
+        end
+
+        for _, arc in ipairs(outgoing) do
+          local tail = self.supervertices[arc.tail]
+          local head = self.supervertices[arc.head]
+          self:assignToSuperarc(pseudovertex, head, s)
+
+          local super_arc = self:arc(supervertex, head)
+          if not rem_arcs[super_arc] then
+            table.insert(rem_arcs, {arc = super_arc, snapshot = s})
+            rem_arcs[super_arc] = true
+          end
+        end
       end
     end
   end
@@ -481,14 +482,14 @@
     for _, removed_arc in ipairs(rem_arcs) do
       local snapshots = self.arc_snapshots[removed_arc.arc]
       for i=#snapshots,1,-1 do
-	local s = snapshots[i]
-	if s.timestamp >= removed_arc.snapshot.timestamp then
-	  table.remove(snapshots, i)
-	end
+        local s = snapshots[i]
+        if s.timestamp >= removed_arc.snapshot.timestamp then
+          table.remove(snapshots, i)
+        end
       end
 
       if #snapshots==0 then
-	self:disconnect(removed_arc.arc.tail, removed_arc.arc.head)
+        self:disconnect(removed_arc.arc.tail, removed_arc.arc.head)
       end
     end
   end
@@ -553,16 +554,16 @@
 --
 function Supergraph:assignToSuperarc(super_tail, super_head, snapshot)
   assert(self:contains(super_tail) and self:contains(super_head),
-	 "tried to connect supernodes not in the supergraph")
-  
+      "tried to connect supernodes not in the supergraph")
+
   local super_arc = self:arc(super_tail, super_head)
   if not super_arc then
-    super_arc = self:connect(super_tail, super_head)      
+    super_arc = self:connect(super_tail, super_head)
   end
-  
+
   table.insert(self.arc_snapshots[super_arc], snapshot)
   self.arc_snapshots[super_arc][snapshot] = true
-  
+
   return super_arc
 end
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/SupergraphVertexSplitOptimization.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/SupergraphVertexSplitOptimization.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/SupergraphVertexSplitOptimization.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -59,19 +59,19 @@
   algorithm = SupergraphVertexSplitOptimization,
   phase     = "supergraph optimization",
   phase_default = true,
-  summary = [["  
-       Use this key if you want to disable animations. 
-       Instead of producing animations the evolving graph animation phasephase animates all vertices including movements and 
-       fade in or fade out animations.
+  summary = [["
+    Use this key if you want to disable animations.
+    Instead of producing animations the evolving graph animation phasephase animates all vertices including movements and
+    fade in or fade out animations.
   "]],
-  documentation = [["      
-       See ToDo
+  documentation = [["
+    See ToDo
   "]]
 }
 
 
 
--- Helpfunctions
+-- Help functions
 
 
 -- Implementation
@@ -84,12 +84,12 @@
   local split_on_no_common_child    = self.digraph.options["split on disjoint children"]
   local split_on_no_common_parent   = self.digraph.options["split on disjoint parents"]
   local split_all                   = self.digraph.options["split all supervertices"]
-  
+
   for _, supernode in ipairs(supergraph.vertices) do
     -- follow trace of the supernode
     local snapshots      = supergraph:getSnapshots(supernode)
     local splitsnapshots = {}
-    
+
     for i=2, #snapshots do
       local s = snapshots[i]
       local s_prev = snapshots[i - 1]
@@ -96,91 +96,91 @@
       local can_split = false
 
       if supergraph:consecutiveSnapshots(s_prev, s) then
-	local v1 = supergraph:getSnapshotVertex(supernode, s_prev)
-	local v2 = supergraph:getSnapshotVertex(supernode, s)
-	local is_child1 = {}
-	local is_parent1   = {}
-	local is_neighbor1  = {}
-	
-	local incoming1 = s_prev:incoming(v1)
-	local outgoing1 = s_prev:outgoing(v1)
-	
-	for _,e in ipairs(incoming1) do
-	  local p = supergraph:getSupervertex(e.tail)
-	  if p then
-	    is_parent1[p]   = true
-	    is_neighbor1[p] = true
-	  end
-	end
+        local v1 = supergraph:getSnapshotVertex(supernode, s_prev)
+        local v2 = supergraph:getSnapshotVertex(supernode, s)
+        local is_child1 = {}
+        local is_parent1   = {}
+        local is_neighbor1  = {}
 
-	for _,e in ipairs(outgoing1) do
-	  local p = supergraph:getSupervertex(e.head)
-	  if p then
-	    is_child1[p] = true
-	    is_neighbor1[p] = true
-	  end
-	end
-	
-	local incoming2 = s:incoming(v2)
-	local outgoing2 = s:outgoing(v2)
+        local incoming1 = s_prev:incoming(v1)
+        local outgoing1 = s_prev:outgoing(v1)
 
-	no_common_parent   = true
-	no_common_child    = true
-	no_common_neighbor = true
-	for _,e in ipairs(incoming2) do
-	  local p = supergraph:getSupervertex(e.tail)
-	  if p then
-	    if is_neighbor1[p] then
-	      no_common_neighbor = false
-	    end
-	    if is_parent1[p] then
-	      no_common_parent = false
-	    end
-	    if (not no_common_neighbor) and (not no_common_parent) then
-	      break
-	    end
-	  end
-	end
+        for _,e in ipairs(incoming1) do
+          local p = supergraph:getSupervertex(e.tail)
+          if p then
+            is_parent1[p]   = true
+            is_neighbor1[p] = true
+          end
+        end
 
-	for _,e in ipairs(outgoing2) do
-	  local p = supergraph:getSupervertex(e.head)
-	  if p then
-	    if is_neighbor1[p] then
-	      no_common_neighbor = false
-	    end
-	    if is_child1[p] then
-	      no_common_child = false
-	    end
-	     if (not no_common_neighbor) and (not no_common_child) then
-	      break
-	    end
-	  end
-	end
+        for _,e in ipairs(outgoing1) do
+          local p = supergraph:getSupervertex(e.head)
+          if p then
+            is_child1[p] = true
+            is_neighbor1[p] = true
+          end
+        end
 
-	
-	
-	if no_common_neighbor and split_on_no_common_neighbor then
-	  can_split = true
-	  --texio.write("[N@".. s.timestamp .."]")
-	end
-	if no_common_parent and split_on_no_common_parent then
-	  can_split = true
-	  --texio.write("[P@".. s.timestamp .."]")
-	end
-	if no_common_child and split_on_no_common_child then
-	  can_split = true
-	  --texio.write("[N@".. s.timestamp .."]")
-	end
-	if v2.options["split me"] then
-	  can_split = true
-	end
-      else
-	can_split = true
-	--texio.write("[R@".. s.timestamp .."]")
+        local incoming2 = s:incoming(v2)
+        local outgoing2 = s:outgoing(v2)
+
+        no_common_parent   = true
+        no_common_child    = true
+        no_common_neighbor = true
+        for _,e in ipairs(incoming2) do
+          local p = supergraph:getSupervertex(e.tail)
+          if p then
+            if is_neighbor1[p] then
+              no_common_neighbor = false
+            end
+            if is_parent1[p] then
+              no_common_parent = false
+            end
+            if (not no_common_neighbor) and (not no_common_parent) then
+              break
+            end
+          end
+        end
+
+        for _,e in ipairs(outgoing2) do
+          local p = supergraph:getSupervertex(e.head)
+          if p then
+            if is_neighbor1[p] then
+              no_common_neighbor = false
+            end
+            if is_child1[p] then
+              no_common_child = false
+            end
+             if (not no_common_neighbor) and (not no_common_child) then
+              break
+            end
+          end
+        end
+
+
+
+        if no_common_neighbor and split_on_no_common_neighbor then
+          can_split = true
+          --texio.write("[N@".. s.timestamp .."]")
+        end
+        if no_common_parent and split_on_no_common_parent then
+          can_split = true
+          --texio.write("[P@".. s.timestamp .."]")
+        end
+        if no_common_child and split_on_no_common_child then
+          can_split = true
+          --texio.write("[N@".. s.timestamp .."]")
+        end
+        if v2.options["split me"] then
+          can_split = true
+        end
+          else
+        can_split = true
+        --texio.write("[R@".. s.timestamp .."]")
+          end
+          if can_split or split_all  then
+        table.insert(splitsnapshots, s)
       end
-      if can_split or split_all  then
-	table.insert(splitsnapshots, s)
-      end
     end
     if #splitsnapshots>0 then
       supergraph:splitSupervertex(supernode, splitsnapshots)

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/TimeSpec.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/TimeSpec.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/TimeSpec.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -14,47 +14,49 @@
 ---
 
 declare {
-   key     = "snapshot",
-   type    = "time",
-   initial = "0s",
-   summary = "The time of the snapshot in which a PGF node should be visible.",
-   documentation = [["
-   This option defines the time in seconds when respectively in which
-   state or snapshot of the graph the PGF represents a graph node.
-"]]
+  key     = "snapshot",
+  type    = "time",
+  initial = "0s",
+  summary = "The time of the snapshot in which a PGF node should be visible.",
+  documentation = [["
+    This option defines the time in seconds when respectively in which
+    state or snapshot of the graph the PGF represents a graph node.
+  "]],
 }
 
 ---
 
 declare {
-   key     = "supernode",
-   type    = "string",
-   initial = "null",
-   summary = "A unique name for a node a given PGF node should be assigned to.",
-   documentation = [["
-     Because it should be possible that nodes can change their
-     appearance, they are represented by separate PGF nodes in each
-     snapshot. To identify PGF nodes of the same supernode we have to
-     specify this key.
-"]]
+  key     = "supernode",
+  type    = "string",
+  initial = "null",
+  summary = "A unique name for a node a given PGF node should be assigned to.",
+  documentation = [["
+    Because it should be possible that nodes can change their
+    appearance, they are represented by separate PGF nodes in each
+    snapshot. To identify PGF nodes of the same supernode we have to
+    specify this key.
+  "]],
 }
 
 ---
 
 declare {
-   key     = "fadein time",
-   type    = "time",
-   initial = "0.5s",
-   summary = [["The time in seconds it should take that a nodes will be fade in
-   when it disappears in the graph"]],
+  key     = "fadein time",
+  type    = "time",
+  initial = "0.5s",
+  summary = [["
+    The time in seconds it should take that a nodes will be fade in
+    when it disappears in the graph.
+  "]],
 }
 
 ---
 
 declare {
-   key     = "fadeout time",
-   type    = "time",
-   initial = "0.5s",
-   summary = "",
-   documentation = "The same as |fadein time| but for disappearing nodes."
+  key     = "fadeout time",
+  type    = "time",
+  initial = "0.5s",
+  summary = "",
+  documentation = "The same as |fadein time| but for disappearing nodes.",
 }

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/doc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/doc.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/doc.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -26,26 +26,27 @@
 A method to create layouts for evolving graphs as an SVG animation.The Reingold--Tilford method is a standard method for drawing
 trees. It is described in:
 
-The algorithm, which is based on the Reingold--Tilford algorithm and 
+The algorithm, which is based on the Reingold--Tilford algorithm and
 its implementation in |graphdrawing.trees|, is introduced in my Masthesis:
+%
 \begin{itemize}
-\item
-  M.\ Skambath,
-  \newblock Algorithmic Drawing of Evolving Trees, Masterthesis, 2016
+  \item
+    M.\ Skambath,
+    \newblock Algorithmic Drawing of Evolving Trees, Masterthesis, 2016
 \end{itemize}
 
-You can use the same known graph macros as for other graph drawing 
-algorithms in Ti\emph{k}Z. In addition all keys and features that 
+You can use the same known graph macros as for other graph drawing
+algorithms in Ti\emph{k}Z. In addition all keys and features that
 are available for the static tree algorithm can be used:
-
+%
 \begin{codeexample}[animation list={1,1.5,2,2.5,3,3.5,4}]
   \tikz \graph[animated binary tree layout,
           nodes={draw,circle}, auto supernode,
-        ] {         
-	  {[when=1] 15 -> {10	-> { ,11},	20       }},
-	  {[when=2] 15 -> {10	-> {3,11},	20       }},	
-	  {[when=3] 15 -> {10	-> {3,  },	20       }},
-	  {[when=4] 15 -> {10   -> {3,  },	20 -> 18 }},
+        ] {
+            {[when=1] 15 -> {10 -> { ,11}, 20       }},
+            {[when=2] 15 -> {10 -> {3,11}, 20       }},
+            {[when=3] 15 -> {10 -> {3,  }, 20       }},
+            {[when=4] 15 -> {10 -> {3,  }, 20 -> 18 }},
         };
 \end{codeexample}
 ]]
@@ -54,11 +55,11 @@
 example
 [[
 \tikz[animated binary tree layout]
-  \graph[nodes={draw,circle}, auto supernode] {         
-	  {[when=1] 15 -> {10	-> { ,11},	20       }},
-	  {[when=2] 15 -> {10	-> {3,11},	20       }},	
-	  {[when=3] 15 -> {10	-> {3,  },	20       }},
-	  {[when=4] 15 -> {10   -> {3,  },	20 -> 18 }},
+  \graph[nodes={draw,circle}, auto supernode] {
+          {[when=1] 15 -> {10 -> { ,11}, 20       }},
+          {[when=2] 15 -> {10 -> {3,11}, 20       }},
+          {[when=3] 15 -> {10 -> {3,  }, 20       }},
+          {[when=4] 15 -> {10 -> {3,  }, 20 -> 18 }},
         };
 ]]
 --------------------------------------------------------------------
@@ -76,15 +77,17 @@
 
 summary
 [[ A layout based on the Reingold--Tilford method for drawing
-binary trees. ]]
+binary trees.
+]]
 
 documentation
 [[
 This key executes:
+%
 \begin{enumerate}
-\item |animated tree layout|, thereby selecting the Reingold--Tilford method,
-\item |minimum number of children=2|, thereby ensuring the all nodes
-  have (at least) two children or none at all, and
+  \item |animated tree layout|, thereby selecting the Reingold--Tilford method,
+  \item |minimum number of children=2|, thereby ensuring the all nodes
+    have (at least) two children or none at all, and
 \end{enumerate}
 ]]
 
@@ -99,7 +102,7 @@
 --------------------------------------------------------------------
 
 
-  
+
 --------------------------------------------------------------------
 key          "extended animated binary tree layout"
 
@@ -106,7 +109,8 @@
 summary
 [[ This algorithm is similar to |animated binary tree layout|, only the
 option \texttt{missing nodes get space} is executed and the
-\texttt{significant sep} is zero. ]]
+\texttt{significant sep} is zero.
+]]
 
 example
 [[

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/layered.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/layered.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/experimental/evolving/layered.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -23,7 +23,7 @@
 local Storage = require "pgf.gd.lib.Storage"
 local layered = require "pgf.gd.layered"
 
--- 
+--
 -- This file defines some basic functions to compute and/or set the
 -- ideal distances between nodes of any kind of layered drawing of a
 -- graph.
@@ -35,7 +35,7 @@
 --
 -- @param layers A |Storage| object assigning layers to vertices.
 -- @param paddings A |Storage| object storing the computed distances
--- (paddings). 
+-- (paddings).
 -- @param graph The graph in which the nodes reside
 -- @param snapshots The list of snapshots over which the overlaying evolving
 --                  graph exists
@@ -56,47 +56,47 @@
   end
 
   if count_layers > 0 then
-    
-    
+
+
     -- Now compute ideal distances and store
     local height = 0
-    
+
     for _, s in ipairs(snapshots) do
       local layer_vertices = snapshots_layers[s]
       if #layer_vertices > 0 then -- sanity check
-	for _,v in ipairs(layer_vertices[1]) do
-	  v.pos.y = 0
-	end
+        for _,v in ipairs(layer_vertices[1]) do
+          v.pos.y = 0
+        end
       end
     end
-    
+
     for i=2, count_layers do
       local distance = 0
       for _, s in ipairs(snapshots) do
-	local layer_vertices = snapshots_layers[s]
-	if #layer_vertices >= i then
-	  distance = math.max(
-	    distance,
-	    layered.baseline_distance(
-	      paddings,
-	      s,
-	      layer_vertices[i-1],
-	      layer_vertices[i]))
-	end
+        local layer_vertices = snapshots_layers[s]
+        if #layer_vertices >= i then
+          distance = math.max(
+            distance,
+            layered.baseline_distance(
+              paddings,
+              s,
+              layer_vertices[i-1],
+              layer_vertices[i]))
+        end
       end
-      
+
       height = height + distance
-      
+
       for _, s in ipairs(snapshots) do
-	local layer_vertices = snapshots_layers[s]
-	if #layer_vertices >= i then
-	  for _,v in ipairs(layer_vertices[i]) do
-	    v.pos.y = height 
-	  end
-	end
+        local layer_vertices = snapshots_layers[s]
+        if #layer_vertices >= i then
+          for _,v in ipairs(layer_vertices[i]) do
+            v.pos.y = height
+          end
+        end
       end
     end
-  end  
+  end
 end
 
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/CoarseGraph.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/CoarseGraph.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/CoarseGraph.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -12,7 +12,7 @@
 
 
 --- A class for handling "coarse" versions of a graph. Such versions contain
--- less nodes and edges than the original graph while retaining the overall 
+-- less nodes and edges than the original graph while retaining the overall
 -- structure.
 
 local Graph = require "pgf.gd.deprecated.Graph"   -- we subclass from here
@@ -43,12 +43,12 @@
 
 --- Creates a new coarse graph derived from an existing graph.
 --
--- Generates a coarse graph for the input |Graph|. 
+-- Generates a coarse graph for the input |Graph|.
 --
--- Coarsening describes the process of reducing the amount of nodes in a graph 
--- by merging nodes into supernodes. There are different strategies, called 
--- schemes, that can be applied, like merging nodes that belong to edges in a 
--- maximal independent edge set or by creating supernodes based on a maximal 
+-- Coarsening describes the process of reducing the amount of nodes in a graph
+-- by merging nodes into supernodes. There are different strategies, called
+-- schemes, that can be applied, like merging nodes that belong to edges in a
+-- maximal independent edge set or by creating supernodes based on a maximal
 -- independent node set.
 --
 -- Coarsening is not performed automatically. The functions |CoarseGraph:coarsen|
@@ -57,28 +57,28 @@
 -- the coarser version of the graph).
 --
 -- Note, however, that the input \meta{graph} is always modified in-place, so
--- if the original version of \meta{graph} is needed in parallel to its 
--- coarse representations, a deep copy of \meta{grpah} needs to be passed over
+-- if the original version of \meta{graph} is needed in parallel to its
+-- coarse representations, a deep copy of \meta{graph} needs to be passed over
 -- to |CoarseGraph.new|.
 --
 -- @param graph  An existing graph that needs to be coarsened.
 -- @param scheme Coarsening scheme to use. Possible values are:\par
---               |CoarseGraph.COARSEN_INDEPENDENT_EDGES|: 
+--               |CoarseGraph.COARSEN_INDEPENDENT_EDGES|:
 --                 Coarsen the input graph by computing a maximal independent edge set
 --                 and collapsing edges from this set. The resulting coarse graph has
 --                 at least 50% of the nodes of the input graph. This coarsening scheme
---                 gives slightly better results than 
+--                 gives slightly better results than
 --                 |CoarseGraph.COARSEN_INDEPENDENT_NODES| because it is less aggressive.
 --                 However, this comes at higher computational cost.\par
 --               |CoarseGraph.COARSEN_INDEPENDENT_NODES|:
 --                 Coarsen the input graph by computing a maximal independent node set,
 --                 making nodes from this set supernodes in the coarse graph, merging
---                 adjacent nodes into the supernodes and connecting the supernodes 
---                 if their grpah distance is no greater than three. This scheme gives
+--                 adjacent nodes into the supernodes and connecting the supernodes
+--                 if their graph distance is no greater than three. This scheme gives
 --                 slightly worse results than |CoarseGraph.COARSEN_INDEPENDENT_EDGES|
 --                 but is computationally more efficient.\par
 --               |CoarseGraph.COARSEN_HYBRID|: Combines the other schemes by starting
---                 with |CoarseGraph.COARSEN_INDEPENDENT_EDGES| and switching to 
+--                 with |CoarseGraph.COARSEN_INDEPENDENT_EDGES| and switching to
 --                 |CoarseGraph.COARSEN_INDEPENDENT_NODES| as soon as the first scheme
 --                 does not reduce the amount of nodes by a factor of 25%.
 --
@@ -114,14 +114,14 @@
 
 
 local function pairs_by_sorted_keys (t, f)
-   local a = {}
-   for n in pairs(t) do a[#a + 1] = n end
-   table.sort (a, f)
-   local i = 0
-   return function ()
-	     i = i + 1
-	     return a[i], t[a[i]]
-	  end
+  local a = {}
+  for n in pairs(t) do a[#a + 1] = n end
+  table.sort (a, f)
+  local i = 0
+  return function ()
+    i = i + 1
+    return a[i], t[a[i]]
+  end
 end
 
 
@@ -153,33 +153,33 @@
       -- add the supernode to the graph
       self.graph:addNode(supernode)
 
-      -- collact all neighbours of the nodes to merge, create a node -> edge mapping
+      -- collect all neighbors of the nodes to merge, create a node -> edge mapping
       local u_neighbours = lib.map(u.edges, function(edge) return edge, edge:getNeighbour(u) end)
       local v_neighbours = lib.map(v.edges, function(edge) return edge, edge:getNeighbour(v) end)
 
-      -- remove the two nodes themselves from the neighbour lists
+      -- remove the two nodes themselves from the neighbor lists
       u_neighbours = lib.map(u_neighbours, function (edge,node) if node ~= v then return edge,node end end)
       v_neighbours = lib.map(v_neighbours, function (edge,node) if node ~= u then return edge,node end end)
 
-      -- compute a list of neighbours u and v have in common
+      -- compute a list of neighbors u and v have in common
       local common_neighbours = lib.map(u_neighbours,
-					function (edge,node)
-					  if v_neighbours[node] ~= nil then return edge,node end
-					end)
+        function (edge,node)
+        if v_neighbours[node] ~= nil then return edge,node end
+      end)
 
-      -- create a node -> edges mapping for common neighbours
+      -- create a node -> edges mapping for common neighbors
       common_neighbours = lib.map(common_neighbours, function (edge, node)
         return { edge, v_neighbours[node] }, node
       end)
 
-      -- drop common edges from the neighbour mappings
+      -- drop common edges from the neighbor mappings
       u_neighbours = lib.map(u_neighbours, function (val,node) if not common_neighbours[node] then return val,node end end)
       v_neighbours = lib.map(v_neighbours, function (val,node) if not common_neighbours[node] then return val,node end end)
 
-      -- merge neighbour lists
+      -- merge neighbor lists
       local disjoint_neighbours = custom_merge(u_neighbours, v_neighbours)
 
-      -- create edges between the supernode and the neighbours of the merged nodes
+      -- create edges between the supernode and the neighbors of the merged nodes
       for neighbour, edge in pairs_by_sorted_keys(disjoint_neighbours, function (n,m) return n.index < m.index end) do
 
         -- create a superedge to replace the existing one
@@ -190,11 +190,11 @@
           level = self.level,
         }
 
-        -- add the supernode and the neighbour to the edge
+        -- add the supernode and the neighbor to the edge
         if u_neighbours[neighbour] then
           superedge:addNode(neighbour)
           superedge:addNode(supernode)
-          
+
         else
           superedge:addNode(supernode)
           superedge:addNode(neighbour)
@@ -206,14 +206,14 @@
         self.graph:deleteEdge(edge)
       end
 
-      -- do the same for all neighbours that the merged nodes have
+      -- do the same for all neighbors that the merged nodes have
       -- in common, except that the weights of the new edges are the
-      -- sums of the of the weights of the edges to the common neighbours
+      -- sums of the of the weights of the edges to the common neighbors
       for neighbour, edges in pairs_by_sorted_keys(common_neighbours, function (n,m) return n.index < m.index end) do
         local weights = 0
-	for _,e in ipairs(edges) do
-	  weights = weights + edge.weight
-	end
+        for _,e in ipairs(edges) do
+          weights = weights + edge.weight
+        end
 
         local superedge = Edge.new{
           direction = Edge.UNDIRECTED,
@@ -222,7 +222,7 @@
           level = self.level,
         }
 
-        -- add the supernode and the neighbour to the edge
+        -- add the supernode and the neighbor to the edge
         superedge:addNode(supernode)
         superedge:addNode(neighbour)
 
@@ -253,7 +253,7 @@
   -- TODO we can probably skip adding edges that have one or more
   -- subedges with the same level. But that needs more testing.
 
-  -- TODO we might have to pass the corresponding supernode to 
+  -- TODO we might have to pass the corresponding supernode to
   -- this method so that we can move subnodes to the same
   -- position, right? Interpolating seems to work fine without
   -- though...
@@ -345,7 +345,7 @@
       self.graph:deleteNode(supernode)
     end
   end
-  
+
   -- Make sure that the nodes and edges are in the correct order:
   table.sort (self.graph.nodes, function (a, b) return a.index < b.index end)
   table.sort (self.graph.edges, function (a, b) return a.index < b.index end)
@@ -352,7 +352,7 @@
   for _, n in pairs(self.graph.nodes) do
      table.sort (n.edges,  function (a, b) return a.index < b.index end)
   end
-  
+
   -- update the level
   self.level = self.level - 1
 end
@@ -396,22 +396,22 @@
       -- mark the node as matched
       matched_nodes[node] = true
 
-      -- filter out edges adjacent to neighbours already matched
+      -- filter out edges adjacent to neighbors already matched
       local edges = lib.imap(node.edges,
-			     function (edge)
-			       if not matched_nodes[edge:getNeighbour(node)] then return edge end
-			     end)
+        function (edge)
+          if not matched_nodes[edge:getNeighbour(node)] then return edge end
+        end)
 
       -- FIXME TODO We use a light-vertex matching here. This is
       -- different from the algorithm proposed by Hu which collapses
       -- edges based on a heavy-edge matching...
       if #edges > 0 then
-        -- sort edges by the weights of the node's neighbours
+        -- sort edges by the weights of the node's neighbors
         table.sort(edges, function (a, b)
           return a:getNeighbour(node).weight < b:getNeighbour(node).weight
         end)
 
-        -- match the node against the neighbour with minimum weight
+        -- match the node against the neighbor with minimum weight
         matched_nodes[edges[1]:getNeighbour(node)] = true
         table.insert(matching, edges[1])
       end
@@ -432,4 +432,4 @@
 
 -- done
 
-return CoarseGraph
\ No newline at end of file
+return CoarseGraph

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlCoarsening.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlCoarsening.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlCoarsening.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -28,48 +28,48 @@
   type = "boolean",
   initial = "true",
 
-  summary = [["  
-       Defines whether or not a multilevel approach is used that
-       iteratively coarsens the input graph into graphs $G_1,\dots,G_l$
-       with a smaller and smaller number of nodes. The coarsening stops as
-       soon as a minimum number of nodes is reached, as set via the
-       |minimum coarsening size| option, or if, in the last iteration, the
-       number of nodes was not reduced by at least the ratio specified via
-       |downsize ratio|. 
+  summary = [["
+    Defines whether or not a multilevel approach is used that
+    iteratively coarsens the input graph into graphs $G_1,\dots,G_l$
+    with a smaller and smaller number of nodes. The coarsening stops as
+    soon as a minimum number of nodes is reached, as set via the
+    |minimum coarsening size| option, or if, in the last iteration, the
+    number of nodes was not reduced by at least the ratio specified via
+    |downsize ratio|.
   "]],
   documentation = [["
-       A random initial layout is computed for the coarsest graph $G_l$ first.
-       Afterwards, it is laid out by computing the attractive and repulsive
-       forces between its nodes. 
-      
-       In the subsequent steps, the previous coarse graph $G_{l-1}$ is 
-       restored and its node positions are interpolated from the nodes
-       in~$G_l$. The graph $G_{l-1}$ is again laid out by computing the forces
-       between its nodes. These steps are repeated with $G_{l-2},\dots,G_1$ until 
-       the original input graph $G_0$ has been restored, interpolated 
-       and laid out.
-      
-       The idea behind this approach is that, by arranging recursively 
-       formed supernodes first and then interpolating and arranging their
-       subnodes step by step, the algorithm is less likely to settle in a
-       local energy minimum (of which there can be many, particularly for
-       large graphs). The quality of the drawings with coarsening enabled is
-       expected to be higher than graphics where this feature is not applied.
-      
-       The following example demonstrates how coarsening can improve the
-       quality of graph drawings generated with Walshaw's algorihtm 
-       |spring electrical layout'|.
- "]],
+    A random initial layout is computed for the coarsest graph $G_l$ first.
+    Afterwards, it is laid out by computing the attractive and repulsive
+    forces between its nodes.
+
+    In the subsequent steps, the previous coarse graph $G_{l-1}$ is
+    restored and its node positions are interpolated from the nodes
+    in~$G_l$. The graph $G_{l-1}$ is again laid out by computing the forces
+    between its nodes. These steps are repeated with $G_{l-2},\dots,G_1$ until
+    the original input graph $G_0$ has been restored, interpolated
+    and laid out.
+
+    The idea behind this approach is that, by arranging recursively
+    formed supernodes first and then interpolating and arranging their
+    subnodes step by step, the algorithm is less likely to settle in a
+    local energy minimum (of which there can be many, particularly for
+    large graphs). The quality of the drawings with coarsening enabled is
+    expected to be higher than graphics where this feature is not applied.
+
+    The following example demonstrates how coarsening can improve the
+    quality of graph drawings generated with Walshaw's algorihtm
+    |spring electrical layout'|.
+  "]],
   examples = [["
-       \tikz \graph [spring electrical layout', coarsen=false, vertical=3 to 4] 
-       { 
-         { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 }
-       };
-       
-       \tikz \graph [spring electrical layout', coarsen, vertical=3 to 4] 
-       { 
-         { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 }
-       };
+    \tikz \graph [spring electrical layout', coarsen=false, vertical=3 to 4]
+      {
+        { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 }
+      };
+
+    \tikz \graph [spring electrical layout', coarsen, vertical=3 to 4]
+      {
+        { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 }
+      };
   "]]
 }
 
@@ -80,29 +80,29 @@
   type = "number",
   initial = 2,
 
-  summary = [["  
-       Defines the minimum number of nodes down to which the graph is 
-       coarsened iteratively. The first graph that has a smaller or equal 
-       number of nodes becomes the coarsest graph $G_l$, where $l$ is the 
-       number of coarsening steps. The algorithm proceeds with the steps 
-       described in the documentation of the |coarsen| option.
-  "]],      
-  documentation = [["  
-       In the following example the same graph is coarsened down to two
-       and four nodes, respectively. The layout of the original graph is 
-       interpolated from the random initial layout and is not improved
-       further because the forces are not computed (0 iterations). Thus, 
-       in the two graphs, the nodes are placed at exactly two and four
-       coordinates in the final drawing.
- "]],
+  summary = [["
+    Defines the minimum number of nodes down to which the graph is
+    coarsened iteratively. The first graph that has a smaller or equal
+    number of nodes becomes the coarsest graph $G_l$, where $l$ is the
+    number of coarsening steps. The algorithm proceeds with the steps
+    described in the documentation of the |coarsen| option.
+  "]],
+  documentation = [["
+    In the following example the same graph is coarsened down to two
+    and four nodes, respectively. The layout of the original graph is
+    interpolated from the random initial layout and is not improved
+    further because the forces are not computed (0 iterations). Thus,
+    in the two graphs, the nodes are placed at exactly two and four
+    coordinates in the final drawing.
+  "]],
   examples = [["
-      \tikz \graph [spring layout, iterations=0,
-	            minimum coarsening size=2] 
-        { subgraph C_n [n=8] };
-      
-      \tikz \graph [spring layout, iterations=0,
-                    minimum coarsening size=4] 
-        { subgraph C_n [n=8] };
+    \tikz \graph [spring layout, iterations=0,
+                  minimum coarsening size=2]
+      { subgraph C_n [n=8] };
+
+    \tikz \graph [spring layout, iterations=0,
+                  minimum coarsening size=4]
+      { subgraph C_n [n=8] };
   "]]
 }
 
@@ -113,36 +113,36 @@
   type = "number",
   initial = "0.25",
 
-  summary = [["  
-       Minimum ratio between 0 and 1 by which the number of nodes between 
-       two coarse graphs $G_i$ and $G_{i+1}$ need to be reduced in order for 
-       the coarsening to stop and for the algorithm to use $G_{i+1}$ as the 
-       coarsest graph $G_l$. Aside from the input graph, the optimal value 
-       of |downsize ratio| mostly depends on the coarsening scheme being
-       used. Possible schemes are |collapse independent edges| and 
-       |connect independent nodes|.
-  "]],      
-  documentation = [["        
-       Increasing this option possibly reduces the number of coarse
-       graphs computed during the coarsening phase as coarsening will stop as
-       soon as a coarse graph does not reduce the number of nodes
-       substantially. This may speed up the algorithm but if the size of the 
-       coarsest graph $G_l$ is much larger than |minimum coarsening size|, the 
-       multilevel approach may not produce drawings as good as with a lower
-       |downsize ratio|.
- "]],
+  summary = [["
+    Minimum ratio between 0 and 1 by which the number of nodes between
+    two coarse graphs $G_i$ and $G_{i+1}$ need to be reduced in order for
+    the coarsening to stop and for the algorithm to use $G_{i+1}$ as the
+    coarsest graph $G_l$. Aside from the input graph, the optimal value
+    of |downsize ratio| mostly depends on the coarsening scheme being
+    used. Possible schemes are |collapse independent edges| and
+    |connect independent nodes|.
+  "]],
+  documentation = [["
+    Increasing this option possibly reduces the number of coarse
+    graphs computed during the coarsening phase as coarsening will stop as
+    soon as a coarse graph does not reduce the number of nodes
+    substantially. This may speed up the algorithm but if the size of the
+    coarsest graph $G_l$ is much larger than |minimum coarsening size|, the
+    multilevel approach may not produce drawings as good as with a lower
+    |downsize ratio|.
+  "]],
   examples = [["
-       % 1. ratio too high, coarsening stops early, benefits are lost
-       \tikz \graph [spring electrical layout',
-                     downsize ratio=1.0,
-                     node distance=7mm, vertical=3 to 4] 
-         { { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 } };
-      
-       % 2. ratio set to default, coarsening benefits are visible
-       \tikz \graph [spring electrical layout',
-                     downsize ratio=0.2,
-                     node distance=7mm, vertical=3 to 4] 
-         { { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 } };
+    % 1. ratio too high, coarsening stops early, benefits are lost
+    \tikz \graph [spring electrical layout',
+                  downsize ratio=1.0,
+                  node distance=7mm, vertical=3 to 4]
+      { { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 } };
+
+    % 2. ratio set to default, coarsening benefits are visible
+    \tikz \graph [spring electrical layout',
+                  downsize ratio=0.2,
+                  node distance=7mm, vertical=3 to 4]
+      { { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 } };
   "]]
 }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlDeclare.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlDeclare.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlDeclare.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -19,7 +19,7 @@
 --
 -- All force-based algorithms are based on
 -- a general pattern which we detail in the following. Numerous options
--- can be used to influence the behaviour of this general pattern; more
+-- can be used to influence the behavior of this general pattern; more
 -- specific options that apply only to individual algorithms are
 -- explained along with these algorithms.
 --

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlElectric.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlElectric.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlElectric.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -29,29 +29,26 @@
   type = "number",
   initial = 1,
 
-  summary = [["  
-       Defines the electric charge of the node. The stronger the 
-       |electric charge| of a node the stronger the repulsion between the
-       node and others in the graph. A negative |electric charge| means that
-       other nodes are further attracted to the node rather than repulsed,
-       although in theory this effect strongly depends on how the 
-       |spring electrical layout| algorithm works.
-       Two typcal effects of increasing the |electric charge| are distortion
-       of symmetries and an upscaling of the drawings.
+  summary = [["
+    Defines the electric charge of the node. The stronger the
+    |electric charge| of a node the stronger the repulsion between the
+    node and others in the graph. A negative |electric charge| means that
+    other nodes are further attracted to the node rather than repulsed,
+    although in theory this effect strongly depends on how the
+    |spring electrical layout| algorithm works.
+    Two typical effects of increasing the |electric charge| are distortion
+    of symmetries and an upscaling of the drawings.
   "]],
-  examples = {
-    [["
-       \tikz \graph [spring electrical layout, horizontal=0 to 1] 
-         { 0 [electric charge=1] -- subgraph C_n [n=10] };
-    "]],
-    [["
-       \tikz \graph [spring electrical layout, horizontal=0 to 1] 
-         { 0 [electric charge=5] -- subgraph C_n [n=10] };
-    "]],
-    [["
-       \tikz \graph [spring electrical layout, horizontal=0 to 1] 
-         { [clique] 1 [electric charge=5], 2, 3, 4 };
-    "]]
+  examples = {[["
+    \tikz \graph [spring electrical layout, horizontal=0 to 1]
+      { 0 [electric charge=1] -- subgraph C_n [n=10] };
+  "]],[["
+    \tikz \graph [spring electrical layout, horizontal=0 to 1]
+      { 0 [electric charge=5] -- subgraph C_n [n=10] };
+  "]],[["
+    \tikz \graph [spring electrical layout, horizontal=0 to 1]
+      { [clique] 1 [electric charge=5], 2, 3, 4 };
+  "]]
   }
 }
 
@@ -63,16 +60,16 @@
   type = "number",
   initial = "1",
 
-  summary = [["  
-       Sometimes, when drawing symmetric and mesh-like graphs, the
-       peripheral distortion caused by long-range electric forces may be
-       undesired. Some electric force models allow to reduce long-range
-       forces and distortion effects by increasing 
-       the order (epxonent) of electric forces. Values between 0 and 1
-       increase long-range electric forces and the scaling of the
-       generated layouts. Value greater than 1 decrease long-range
-       electric forces and results in shrinking drawings.
-    "]]
+  summary = [["
+    Sometimes, when drawing symmetric and mesh-like graphs, the
+    peripheral distortion caused by long-range electric forces may be
+    undesired. Some electric force models allow to reduce long-range
+    forces and distortion effects by increasing
+    the order (exponent) of electric forces. Values between 0 and 1
+    increase long-range electric forces and the scaling of the
+    generated layouts. Value greater than 1 decrease long-range
+    electric forces and results in shrinking drawings.
+  "]]
   }
 
 
@@ -82,19 +79,19 @@
   key = "approximate remote forces",
   type = "boolean",
 
-  summary = [["  
-       Force based algorithms often need to compute a force for each pair
-       of vertices, which, for larger numbers of vertices, can lead to a
-       significant time overhead. This problem can be addressed by
-       approximating these forces: For a vertex far removed from a cluster
-       of vertices, instead of computing the force contribution of each
-       vertex of the cluster indiviually, we form a sort of
-       ``supervertex'' at the ``gravitational center'' of the cluster and
-       then compute only the force between this supervertex and the single
-       vertex.
-      
-       \emph{Remark:} Currently, the implementation seems to be broken, at
-       least the results are somewhat strange when this key is used.
-    "]]
+  summary = [["
+    Force based algorithms often need to compute a force for each pair
+    of vertices, which, for larger numbers of vertices, can lead to a
+    significant time overhead. This problem can be addressed by
+    approximating these forces: For a vertex far removed from a cluster
+    of vertices, instead of computing the force contribution of each
+    vertex of the cluster individually, we form a sort of
+    ``supervertex'' at the ``gravitational center'' of the cluster and
+    then compute only the force between this supervertex and the single
+    vertex.
+
+    \emph{Remark:} Currently, the implementation seems to be broken, at
+    least the results are somewhat strange when this key is used.
+  "]]
   }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlIteration.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlIteration.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlIteration.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -30,38 +30,34 @@
   type    = "number",
   initial = "500",
 
-  summary = [["  
-       Limits the number of iterations of algorithms for force-based
-       layouts to \meta{number}. 
-  "]],      
-  documentation = [["  
-       Depending on the characteristics of the input graph and the parameters
-       chosen for the algorithm, minimizing the system energy may require
-       many iterations. 
-      
-       In these situations it may come in handy to limit the number of
-       iterations. This feature can also be useful to draw the same graph
-       after different iterations and thereby demonstrate how the spring or
-       spring-electrical algorithm improves the drawing step by step.
-      
-       The examples shows two drawings generated using two
-       different |iteration| limits.
+  summary = [["
+    Limits the number of iterations of algorithms for force-based
+    layouts to \meta{number}.
   "]],
-  examples = {
-    [["
-       \tikz \graph [spring layout, iterations=10]  { subgraph K_n [n=4] };
-    "]],
-    [["
-       \tikz \graph [spring layout, iterations=500] { subgraph K_n [n=4] };
-    "]],
-    [["
-       \tikz \graph [spring electrical layout, iterations=10]
-         { subgraph K_n [n=4] };
-    "]],
-    [["
-       \tikz \graph [spring electrical layout, iterations=500]
-         { subgraph K_n [n=4] };
-   "]]
+  documentation = [["
+    Depending on the characteristics of the input graph and the parameters
+    chosen for the algorithm, minimizing the system energy may require
+    many iterations.
+
+    In these situations it may come in handy to limit the number of
+    iterations. This feature can also be useful to draw the same graph
+    after different iterations and thereby demonstrate how the spring or
+    spring-electrical algorithm improves the drawing step by step.
+
+    The examples shows two drawings generated using two
+    different |iteration| limits.
+  "]],
+  examples = {[["
+    \tikz \graph [spring layout, iterations=10]  { subgraph K_n [n=4] };
+  "]],[["
+    \tikz \graph [spring layout, iterations=500] { subgraph K_n [n=4] };
+  "]],[["
+    \tikz \graph [spring electrical layout, iterations=10]
+      { subgraph K_n [n=4] };
+  "]],[["
+    \tikz \graph [spring electrical layout, iterations=500]
+      { subgraph K_n [n=4] };
+  "]]
   }
 }
 
@@ -72,11 +68,11 @@
   type    = "length",
   initial = "0",
 
-  summary = [["  
-       This parameter specifies the amount by which nodes will be
-       displaced in each iteration, initially. If set to |0| (which is the
-       default), an appropriate value is computed automatically.
-    "]]
+  summary = [["
+    This parameter specifies the amount by which nodes will be
+    displaced in each iteration, initially. If set to |0| (which is the
+    default), an appropriate value is computed automatically.
+  "]]
   }
 
 ---
@@ -86,30 +82,28 @@
   type = "number",
   initial = "0.95",
 
-  summary = [["  
-      This parameter helps in controlling how layouts evolve over
-      time. It is used to gradually reduce the step size 
-      between one iteration to the next.
+  summary = [["
+    This parameter helps in controlling how layouts evolve over
+    time. It is used to gradually reduce the step size
+    between one iteration to the next.
   "]],
   documentation = [["
-      A small positive cooling factor
-      $\ge 0$ means that the movement of nodes is quickly or abruptly
-      reduced, while a large cooling factor $\le 1$ allows for a smoother
-      step by step layout refinement at the cost of more iterations. The
-      following example demonstrates how a smaller cooling factor may
-      result in a less balanced drawing. By default, Hu2006 spring,
-      Hu2006 spring electrical, and Walshaw2000 spring electrical use a
-      cooling factor of |0.95|.
+    A small positive cooling factor
+    $\ge 0$ means that the movement of nodes is quickly or abruptly
+    reduced, while a large cooling factor $\le 1$ allows for a smoother
+    step by step layout refinement at the cost of more iterations. The
+    following example demonstrates how a smaller cooling factor may
+    result in a less balanced drawing. By default, Hu2006 spring,
+    Hu2006 spring electrical, and Walshaw2000 spring electrical use a
+    cooling factor of |0.95|.
   "]],
-  examples = {
-    [["
-	\tikz \graph [spring layout, cooling factor=0.1]
-	{ a -> b -> c -> a };
-    "]],
-    [["
-       \tikz \graph [spring layout, cooling factor=0.5]
-       { a -> b -> c -> a };
-    "]]
+  examples = {[["
+    \tikz \graph [spring layout, cooling factor=0.1]
+      { a -> b -> c -> a };
+  "]],[["
+    \tikz \graph [spring layout, cooling factor=0.5]
+      { a -> b -> c -> a };
+  "]]
   }
 }
 
@@ -120,21 +114,19 @@
   type = "number",
   initial = "0.01",
 
-  summary = [["  
-       All spring and spring-electrical algorithms implemented in the
-       thesis terminate as soon as the maximum movement of any node drops
-       below $k \cdot \meta{tolerance}$. This tolerance factor can be changed
-       with the convergence tolerance option:
+  summary = [["
+      All spring and spring-electrical algorithms implemented in the
+      thesis terminate as soon as the maximum movement of any node drops
+      below $k \cdot \meta{tolerance}$. This tolerance factor can be changed
+      with the convergence tolerance option:
   "]],
-  examples = {
-    [["
-       \tikz \graph [spring layout, convergence tolerance=0.001]
-         { { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 } };
-    "]],
-    [["
-       \tikz \graph [spring layout, convergence tolerance=1.0]
-         { { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 } };
-    "]]
+  examples = {[["
+    \tikz \graph [spring layout, convergence tolerance=0.001]
+      { { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 } };
+  "]],[["
+    \tikz \graph [spring layout, convergence tolerance=1.0]
+      { { [clique] 1, 2 } -- 3 -- 4 -- { 5, 6, 7 } };
+  "]]
   }
 }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlSprings.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlSprings.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlSprings.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -21,15 +21,17 @@
 -- length'', which can be configured using the general-purpose
 -- |node distance| parameter. It is the ``equilibrium length'' of a
 -- spring between two nodes in the graph. When an edge has this
--- lenght, no forces will ``push'' or ``pull'' along the edge.
+-- length, no forces will ``push'' or ``pull'' along the edge.
 --
 -- The following examples shows how a simple graph can be scaled by
 -- changing the |node distance|:
+-- %
 -- \begin{codeexample}[]
 -- \tikz \graph [spring layout, node distance=7mm] { subgraph C_n[n=3] };
 -- \tikz \graph [spring layout]                    { subgraph C_n[n=3] };
 -- \tikz \graph [spring layout, node distance=15mm]{ subgraph C_n[n=3] };
 -- \end{codeexample}
+-- %
 -- \begin{codeexample}[]
 -- \tikz \graph [spring electrical layout, node distance=0.7cm] { subgraph C_n[n=3] };
 -- \tikz \graph [spring electrical layout]                      { subgraph C_n[n=3] };
@@ -47,12 +49,12 @@
   type = "number",
   initial = "0.01",
 
-  summary = [["  
-       The ``spring constant'' is a factor from Hooke's law describing the
-       ``stiffness'' of a spring. This factor is used inside spring-based
-       algorithms to determine how strongly edges ``pull'' and ``push'' at
-       the nodes they connect.
-   "]]
- }
+  summary = [["
+    The ``spring constant'' is a factor from Hooke's law describing the
+    ``stiffness'' of a spring. This factor is used inside spring-based
+    algorithms to determine how strongly edges ``pull'' and ``push'' at
+    the nodes they connect.
+  "]]
+}
 
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlStart.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlStart.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/ControlStart.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -22,12 +22,13 @@
 -- Currently, the start configuration for force-based algorithms is a
 -- random distribution of the vertices. You can influence it by
 -- changing the |random seed|:
---
+-- %
 --\begin{codeexample}[]
 --\tikz \graph [random seed=10, spring layout] {
 --  a -- {b, c, d} -- e -- f -- {g,h} -- {a,b,e};
 --};
 --\end{codeexample}
+-- %
 --\begin{codeexample}[]
 --\tikz \graph [random seed=11, spring layout] {
 --  a -- {b, c, d} -- e -- f -- {g,h} -- {a,b,e};
@@ -35,6 +36,6 @@
 --\end{codeexample}
 --
 -- Other methods, like a planar preembedding, are not implemented
--- currently. 
+-- currently.
 --
 -- @end
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/QuadTree.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/QuadTree.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/QuadTree.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -14,12 +14,12 @@
 --- An implementation of a quad trees.
 --
 -- The class QuadTree provides methods form handling quadtrees.
--- 
+--
 
 local QuadTree = {
-  -- Subclases
+  -- Subclasses
   Particle = {},
-  Cell = {} 
+  Cell = {}
 }
 QuadTree.__index = QuadTree
 
@@ -45,7 +45,7 @@
 
 
 
---- Inserts a particle 
+--- Inserts a particle
 --
 -- @param param A particle of type QuadTree.Particle
 --
@@ -76,7 +76,7 @@
 
 
 
---- Partical subclass
+--- Particle subclass
 QuadTree.Particle.__index = QuadTree.Particle
 
 
@@ -176,7 +176,7 @@
       if #self.subcells == 0 then
         self:createSubcells()
       end
-        
+
       -- move particles to the new subcells
       for _,existing in ipairs(self.particles) do
         local cell = self:findSubcell(existing)
@@ -210,7 +210,7 @@
     for _,particle in ipairs(self.particles) do
       self.mass = self.mass + particle.mass
       for _,subparticle in ipairs(particle.subparticles) do
-	self.mass = self.mass + subparticle.mass
+        self.mass = self.mass + subparticle.mass
       end
     end
   else
@@ -226,7 +226,7 @@
 function QuadTree.Cell:updateCenterOfMass()
   -- reset center of mass, assuming the cell is empty
   self.center_of_mass = nil
-  
+
   if #self.subcells == 0 then
     -- the center of mass is the average position of the particles
     -- weighted by their masses
@@ -233,20 +233,20 @@
     self.center_of_mass = Vector.new (2)
     for _,p in ipairs(self.particles) do
       for _,sp in ipairs(p.subparticles) do
-	self.center_of_mass = self.center_of_mass:plus(sp.pos:timesScalar(sp.mass))
+        self.center_of_mass = self.center_of_mass:plus(sp.pos:timesScalar(sp.mass))
       end
       self.center_of_mass = self.center_of_mass:plus(p.pos:timesScalar(p.mass))
     end
     self.center_of_mass = self.center_of_mass:dividedByScalar(self.mass)
   else
-    -- the center of mass is the average of the weighted centers of mass 
+    -- the center of mass is the average of the weighted centers of mass
     -- of the subcells
     self.center_of_mass = Vector.new(2)
     for _,sc in ipairs(self.subcells) do
       if sc.center_of_mass then
-	self.center_of_mass = self.center_of_mass:plus(sc.center_of_mass:timesScalar(sc.mass))
+        self.center_of_mass = self.center_of_mass:plus(sc.center_of_mass:timesScalar(sc.mass))
       else
-	assert(sc.mass == 0)
+        assert(sc.mass == 0)
       end
     end
     self.center_of_mass = self.center_of_mass:dividedByScalar(self.mass)
@@ -268,7 +268,7 @@
 
 function QuadTree.Cell:__tostring()
   return '((' .. self.x .. ', ' .. self.y .. ') '
-      .. 'to (' .. self.x + self.width .. ', ' .. self.y + self.height .. '))' 
+      .. 'to (' .. self.x + self.width .. ', ' .. self.y + self.height .. '))'
       .. (self.particle and ' => ' .. self.particle.name or '')
       .. (self.center_of_mass and ' mass ' .. self.mass .. ' at ' .. tostring(self.center_of_mass) or '')
 end
@@ -277,4 +277,4 @@
 
 -- done
 
-return QuadTree
\ No newline at end of file
+return QuadTree

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalHu2006.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalHu2006.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalHu2006.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -23,7 +23,7 @@
 declare {
   key       = "spring electrical Hu 2006 layout",
   algorithm = SpringElectricalHu2006,
-  
+
   preconditions = {
     connected = true,
     loop_free = true,
@@ -32,20 +32,20 @@
 
   old_graph_model = true,
 
-  summary = [["  
-       Implementation of a spring electrical graph drawing algorithm based on
-       a paper by Hu.
- "]],
-  documentation = [["  
-       \begin{itemize}
-       \item
-         Y. Hu.
-         \newblock Efficient, high-quality force-directed graph drawing.
-         \newblock \emph{The Mathematica Journal}, 2006.
-       \end{itemize}
-      
-       There are some modifications compared to the original algorithm,
-       see the Diploma thesis of Pohlmann for details.
+  summary = [["
+    Implementation of a spring electrical graph drawing algorithm based on
+    a paper by Hu.
+  "]],
+  documentation = [["
+    \begin{itemize}
+      \item
+        Y. Hu.
+        \newblock Efficient, high-quality force-directed graph drawing.
+        \newblock \emph{The Mathematica Journal}, 2006.
+    \end{itemize}
+
+    There are some modifications compared to the original algorithm,
+    see the Diploma thesis of Pohlmann for details.
   "]]
 }
 
@@ -64,7 +64,7 @@
 
   -- Setup properties
   local options = self.digraph.options
-  
+
   self.iterations = options['iterations']
   self.cooling_factor = options['cooling factor']
   self.initial_step_length = options['initial step length']
@@ -75,11 +75,11 @@
 
   self.approximate_repulsive_forces = options['approximate remote forces']
   self.repulsive_force_order = options['electric force order']
-   
+
   self.coarsen = options['coarsen']
   self.downsize_ratio = options['downsize ratio']
   self.minimum_graph_size = options['minimum coarsening size']
-  
+
   -- Adjust types
   self.downsize_ratio = math.max(0, math.min(1, self.downsize_ratio))
   self.graph_size = #self.graph.nodes
@@ -103,7 +103,7 @@
       node.weight = 1
     end
   end
-  
+
   -- initialize edge weights
   for _,edge in ipairs(self.graph.edges) do
     edge.weight = 1
@@ -110,17 +110,17 @@
   end
 
   -- initialize the coarse graph data structure. note that the algorithm
-  -- is the same regardless whether coarsening is used, except that the 
+  -- is the same regardless whether coarsening is used, except that the
   -- number of coarsening steps without coarsening is 0
   local coarse_graph = CoarseGraph.new(self.graph)
 
   -- check if the multilevel approach should be used
   if self.coarsen then
-    -- coarsen the graph repeatedly until only minimum_graph_size nodes 
-    -- are left or until the size of the coarse graph was not reduced by 
+    -- coarsen the graph repeatedly until only minimum_graph_size nodes
+    -- are left or until the size of the coarse graph was not reduced by
     -- at least the downsize ratio configured by the user
-    while coarse_graph:getSize() > self.minimum_graph_size 
-      and coarse_graph:getRatio() <= (1 - self.downsize_ratio) 
+    while coarse_graph:getSize() > self.minimum_graph_size
+      and coarse_graph:getRatio() <= (1 - self.downsize_ratio)
     do
       coarse_graph:coarsen()
     end
@@ -188,8 +188,8 @@
 
 
 function SpringElectricalHu2006:computeInitialLayout(graph, spring_length)
-  -- TODO how can supernodes and fixed nodes go hand in hand? 
-  -- maybe fix the supernode if at least one of its subnodes is 
+  -- TODO how can supernodes and fixed nodes go hand in hand?
+  -- maybe fix the supernode if at least one of its subnodes is
   -- fixated?
 
   -- fixate all nodes that have a 'desired at' option. this will set the
@@ -204,7 +204,7 @@
       if not graph.nodes[1].fixed and not graph.nodes[2].fixed then
         -- both nodes can be moved, so we assume node 1 is fixed at (0,0)
         graph.nodes[1].pos.x = 0
-	graph.nodes[1].pos.y = 0
+        graph.nodes[1].pos.y = 0
       end
 
       -- position the loose node relative to the fixed node, with
@@ -220,7 +220,7 @@
   else
 
     -- use a random positioning technique
-    local function positioning_func(n) 
+    local function positioning_func(n)
       local radius = 3 * spring_length * self.graph_density * math.sqrt(self.graph_size) / 2
       return lib.random(-radius, radius)
     end
@@ -228,8 +228,8 @@
     -- compute initial layout based on the random positioning technique
     for _,node in ipairs(graph.nodes) do
       if not node.fixed then
-	node.pos.x = positioning_func(1)
-	node.pos.y = positioning_func(2)
+        node.pos.x = positioning_func(1)
+        node.pos.y = positioning_func(2)
       end
     end
   end
@@ -268,7 +268,7 @@
 
   -- adjust the initial step length automatically if desired by the user
   local step_length = self.initial_step_length == 0 and spring_length or self.initial_step_length
- 
+
   -- convergence criteria etc.
   local converged = false
   local energy = math.huge
@@ -293,6 +293,114 @@
 
     for _,v in ipairs(graph.nodes) do
       if not v.fixed then
+        -- vector for the displacement of v
+        local d = Vector.new(2)
+
+        -- compute repulsive forces
+        if self.approximate_repulsive_forces then
+          -- determine the cells that have a repulsive influence on v
+          local cells = quadtree:findInteractionCells(v, barnes_hut_criterion)
+
+          -- compute the repulsive force between these cells and v
+          for _,cell in ipairs(cells) do
+            -- check if the cell is a leaf
+            if #cell.subcells == 0 then
+              -- compute the forces between the node and all particles in the cell
+              for _,particle in ipairs(cell.particles) do
+            local real_particles = lib.copy(particle.subparticles)
+            table.insert(real_particles, particle)
+
+            for _,real_particle in ipairs(real_particles) do
+              local delta = real_particle.pos:minus(v.pos)
+
+              -- enforce a small virtual distance if the node and the cell's
+              -- center of mass are located at (almost) the same position
+              if delta:norm() < 0.1 then
+                delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+              end
+
+              -- compute the repulsive force vector
+              local repulsive_force = approximated_repulsive_force(delta:norm(), real_particle.mass)
+              local force = delta:normalized():timesScalar(repulsive_force)
+
+              -- move the node v accordingly
+              d = d:plus(force)
+            end
+              end
+            else
+              -- compute the distance between the node and the cell's center of mass
+              local delta = cell.center_of_mass:minus(v.pos)
+
+              -- enforce a small virtual distance if the node and the cell's
+              -- center of mass are located at (almost) the same position
+              if delta:norm() < 0.1 then
+            delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+              end
+
+              -- compute the repulsive force vector
+              local repulsive_force = approximated_repulsive_force(delta:norm(), cell.mass)
+              local force = delta:normalized():timesScalar(repulsive_force)
+
+              -- move the node v accordingly
+              d = d:plus(force)
+            end
+          end
+        else
+          for _,u in ipairs(graph.nodes) do
+            if v ~= u then
+              -- compute the distance between u and v
+              local delta = u.pos:minus(v.pos)
+
+              -- enforce a small virtual distance if the nodes are
+              -- located at (almost) the same position
+              if delta:norm() < 0.1 then
+            delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+              end
+
+              -- compute the repulsive force vector
+              local repulsive_force = accurate_repulsive_force(delta:norm(), u.weight)
+              local force = delta:normalized():timesScalar(repulsive_force)
+
+              -- move the node v accordingly
+              d = d:plus(force)
+            end
+          end
+        end
+
+        -- compute attractive forces between v and its neighbors
+        for _,edge in ipairs(v.edges) do
+          local u = edge:getNeighbour(v)
+
+          -- compute the distance between u and v
+          local delta = u.pos:minus(v.pos)
+
+          -- enforce a small virtual distance if the nodes are
+          -- located at (almost) the same position
+          if delta:norm() < 0.1 then
+            delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+          end
+
+          -- compute the spring force vector between u and v
+          local attr_force = attractive_force(delta:norm())
+          local force = delta:normalized():timesScalar(attr_force)
+
+          -- move the node v accordingly
+          d = d:plus(force)
+        end
+
+        -- really move the node now
+        -- TODO note how all nodes are moved by the same amount  (step_length)
+        -- while Walshaw multiplies the normalized force with min(step_length,
+        -- d:norm()). could that improve this algorithm even further?
+        v.pos = v.pos:plus(d:normalized():timesScalar(step_length))
+
+        -- TODO Hu doesn't mention this but the energy of a particle is
+        -- typically considered as the product of its mass and the square of
+        -- its forces. This means we should probably take the weight of
+        -- the node v into the equation, doesn't it?
+        --
+        -- update the energy function
+        energy = energy + math.pow(d:norm(), 2)
 	-- vector for the displacement of v
 	local d = Vector.new(2)
 	
@@ -316,7 +424,7 @@
 		  -- enforce a small virtual distance if the node and the cell's 
 		  -- center of mass are located at (almost) the same position
 		  if delta:norm() < 0.1 then
-		    delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
+		    delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
 		  end
 		  
 		  -- compute the repulsive force vector
@@ -334,7 +442,7 @@
 	      -- enforce a small virtual distance if the node and the cell's 
 	      -- center of mass are located at (almost) the same position
 	      if delta:norm() < 0.1 then
-		delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
+		delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
 	      end
 	      
 	      -- compute the repulsive force vector
@@ -354,7 +462,7 @@
 	      -- enforce a small virtual distance if the nodes are
 	      -- located at (almost) the same position
 	      if delta:norm() < 0.1 then
-		delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
+		delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
 	      end
 	      
 	      -- compute the repulsive force vector
@@ -377,7 +485,7 @@
 	  -- enforce a small virtual distance if the nodes are
 	  -- located at (almost) the same position
 	  if delta:norm() < 0.1 then
-	    delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
+	    delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
 	  end
 	  
 	  -- compute the spring force vector between u and v
@@ -413,9 +521,9 @@
       local delta = x.pos:minus(old_positions[x])
       max_movement = math.max(delta:norm(), max_movement)
     end
-    
-    -- the algorithm will converge if the maximum movement is below a 
-    -- threshold depending on the spring length and the convergence 
+
+    -- the algorithm will converge if the maximum movement is below a
+    -- threshold depending on the spring length and the convergence
     -- tolerance
     if max_movement < spring_length * self.convergence_tolerance then
       converged = true
@@ -472,7 +580,7 @@
   -- larger than the minimum position
   if min_pos:equals(max_pos) then
     max_pos = max_pos:plus(Vector.new(2, function (n)
-      return 0.1 + math.random() * 0.1
+      return 0.1 + lib.random() * 0.1
     end))
   end
 
@@ -484,8 +592,8 @@
 
   -- create the quadtree
   quadtree = QuadTree.new(min_pos.x, min_pos.y,
-			      max_pos.x - min_pos.x,
-			      max_pos.y - min_pos.y)
+                          max_pos.x - min_pos.x,
+                          max_pos.y - min_pos.y)
 
   -- insert nodes into the quadtree
   for _,node in ipairs(graph.nodes) do

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalLayouts.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalLayouts.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalLayouts.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -30,11 +30,11 @@
     { key = "spring constant", value = "0.2" }
   },
 
-  summary = [["  
-       This key selects Hu's 2006 spring electrical layout with
-       appropriate settings for some parameters.
-   "]]
- }
+  summary = [["
+    This key selects Hu's 2006 spring electrical layout with
+    appropriate settings for some parameters.
+  "]]
+}
 
 
 ---
@@ -47,8 +47,8 @@
     { key = "convergence tolerance", value = "0.001" },
   },
 
-  summary = [["  
-       This key selects Walshaw's 2000 spring electrical layout with
-       appropriate settings for some parameters.
-   "]]
- }
+  summary = [["
+    This key selects Walshaw's 2000 spring electrical layout with
+    appropriate settings for some parameters.
+  "]]
+}

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalWalshaw2000.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalWalshaw2000.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringElectricalWalshaw2000.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -26,7 +26,7 @@
 declare {
   key       = "spring electrical Walshaw 2000 layout",
   algorithm = SpringElectricalWalshaw2000,
-  
+
   preconditions = {
     connected = true,
     loop_free = true,
@@ -35,42 +35,42 @@
 
   old_graph_model = true,
 
-  summary = [["  
-       Implementation of a spring electrical graph drawing algorithm based on
-       a paper by Walshaw.
- "]],
-  documentation = [["        
-       \begin{itemize}
-       \item
-         C. Walshaw.
-         \newblock A multilevel algorithm for force-directed graph
-         drawing.
-         \newblock In J. Marks, editor, \emph{Graph Drawing}, Lecture Notes in
-         Computer Science, 1984:31--55, 2001. 
-       \end{itemize}
-      
-       The following modifications compared to the original algorithm were applied:
-       \begin{itemize}
-       \item An iteration limit was added.
-       \item The natural spring length for all coarse graphs is computed based
-           on the formula presented by Walshaw, so that the natural spring
-           length of the original graph (coarse graph 0) is the same as
-           the value requested by the user.
-       \item Users can define custom node and edge weights.
-       \item Coarsening stops when $|V(G_i+1)|/|V(G_i)| < p$ where $p = 0.75$.
-       \item Coarsening stops when the maximal matching is empty.
-       \item Theruntime of the algorithm is improved by use of a quadtree
-           data structure like Hu does in his algorithm.
-       \item A limiting the number of levels of the quadtree is not implemented.
-       \end{itemize}
+  summary = [["
+    Implementation of a spring electrical graph drawing algorithm based on
+    a paper by Walshaw.
+  "]],
+  documentation = [["
+    \begin{itemize}
+      \item
+        C. Walshaw.
+        \newblock A multilevel algorithm for force-directed graph drawing.
+        \newblock In J. Marks, editor, \emph{Graph Drawing}, Lecture Notes in
+          Computer Science, 1984:31--55, 2001.
+    \end{itemize}
+
+    The following modifications compared to the original algorithm were applied:
+    %
+    \begin{itemize}
+      \item An iteration limit was added.
+      \item The natural spring length for all coarse graphs is computed based
+        on the formula presented by Walshaw, so that the natural spring
+        length of the original graph (coarse graph 0) is the same as
+        the value requested by the user.
+      \item Users can define custom node and edge weights.
+      \item Coarsening stops when $|V(G_i+1)|/|V(G_i)| < p$ where $p = 0.75$.
+      \item Coarsening stops when the maximal matching is empty.
+      \item The runtime of the algorithm is improved by use of a quadtree
+        data structure like Hu does in his algorithm.
+      \item A limiting the number of levels of the quadtree is not implemented.
+    \end{itemize}
   "]]
 }
-    
+
 -- TODO Implement the following keys (or whatever seems appropriate
 -- and doable for this algorithm):
 --   - /tikz/desired at
 --   - /tikz/influence cutoff distance
---   - /tikz/spring stiffness (could this be the equivalent to the electric 
+--   - /tikz/spring stiffness (could this be the equivalent to the electric
 --       charge of nodes?
 --   - /tikz/natural spring dimension per edge
 --
@@ -91,10 +91,10 @@
 
 
 function SpringElectricalWalshaw2000:run()
-  
+
   -- Setup parameters
   local options = self.digraph.options
-  
+
   self.iterations = options['iterations']
   self.cooling_factor = options['cooling factor']
   self.initial_step_length = options['initial step length']
@@ -105,7 +105,7 @@
 
   self.approximate_repulsive_forces = options['approximate remote forces']
   self.repulsive_force_order = options['electric force order']
-   
+
   self.coarsen = options['coarsen']
   self.downsize_ratio = options['downsize ratio']
   self.minimum_graph_size = options['minimum coarsening size']
@@ -133,7 +133,7 @@
       node.weight = 1
     end
 
-    -- a node is charged if its weight derives from the default setting 
+    -- a node is charged if its weight derives from the default setting
     -- of 1 (where it has no influence on the forces)
     node.charged = node.weight ~= 1
   end
@@ -142,17 +142,17 @@
   for _,edge in ipairs(self.graph.edges) do
     edge.weight = 1
   end
-  
-  
+
+
   -- initialize the coarse graph data structure. note that the algorithm
-  -- is the same regardless whether coarsening is used, except that the 
+  -- is the same regardless whether coarsening is used, except that the
   -- number of coarsening steps without coarsening is 0
   local coarse_graph = CoarseGraph.new(self.graph)
 
   -- check if the multilevel approach should be used
   if self.coarsen then
-    -- coarsen the graph repeatedly until only minimum_graph_size nodes 
-    -- are left or until the size of the coarse graph was not reduced by 
+    -- coarsen the graph repeatedly until only minimum_graph_size nodes
+    -- are left or until the size of the coarse graph was not reduced by
     -- at least the downsize ratio configured by the user
     while coarse_graph:getSize() > self.minimum_graph_size
       and coarse_graph:getRatio() < (1 - self.downsize_ratio)
@@ -162,7 +162,7 @@
   end
 
   -- compute the natural spring length for the coarsest graph in a way
-  -- that will result in the desired natural spring length in the 
+  -- that will result in the desired natural spring length in the
   -- original graph
   local spring_length = self.natural_spring_length / math.pow(math.sqrt(4/7), coarse_graph:getLevel())
 
@@ -186,17 +186,17 @@
   else
     -- generate a random initial layout for the coarsest graph
     self:computeInitialLayout(coarse_graph.graph, spring_length)
-    
+
     -- apply the force-based algorithm to improve the layout
     self:computeForceLayout(coarse_graph.graph, spring_length)
-  end    
+  end
 end
 
 
 
 function SpringElectricalWalshaw2000:computeInitialLayout(graph, spring_length)
-  -- TODO how can supernodes and fixed nodes go hand in hand? 
-  -- maybe fix the supernode if at least one of its subnodes is 
+  -- TODO how can supernodes and fixed nodes go hand in hand?
+  -- maybe fix the supernode if at least one of its subnodes is
   -- fixated?
 
   -- fixate all nodes that have a 'desired at' option. this will set the
@@ -237,8 +237,8 @@
     -- compute initial layout based on the random positioning technique
     for _,node in ipairs(graph.nodes) do
       if not node.fixed then
-	node.pos.x = positioning_func(1)
-	node.pos.y = positioning_func(2)
+        node.pos.x = positioning_func(1)
+        node.pos.y = positioning_func(2)
       end
     end
   end
@@ -248,9 +248,9 @@
 
 function SpringElectricalWalshaw2000:computeForceLayout(graph, spring_length)
   -- global (=repulsive) force function
-  local function accurate_repulsive_force(distance, weight) 
+  local function accurate_repulsive_force(distance, weight)
     return - self.spring_constant * weight * math.pow(spring_length, self.repulsive_force_order + 1) / math.pow(distance, self.repulsive_force_order)
-  end 
+  end
 
   -- global (=repulsive, approximated) force function
   local function approximated_repulsive_force(distance, mass)
@@ -258,8 +258,8 @@
   end
 
   -- local (spring) force function
-  local function attractive_force(distance, d, weight, charged, repulsive_force) 
-    -- for charged nodes, never subtract the repulsive force; we want ALL other 
+  local function attractive_force(distance, d, weight, charged, repulsive_force)
+    -- for charged nodes, never subtract the repulsive force; we want ALL other
     -- nodes to be attracted more / repulsed less (not just non-adjacent ones),
     -- depending on the charge of course
     if charged then
@@ -285,9 +285,9 @@
   -- convergence criteria
   local converged = false
   local i = 0
-    
+
   while not converged and i < self.iterations do
-  
+
     -- assume that we are converging
     converged = true
     i = i + 1
@@ -303,137 +303,137 @@
     -- iterate over all nodes
     for _,v in ipairs(graph.nodes) do
       if not v.fixed then
-	-- vector for the displacement of v
-	local d = Vector.new(2)
+        -- vector for the displacement of v
+        local d = Vector.new(2)
 
-	-- repulsive force induced by other nodes
-	local repulsive_forces = {}
+        -- repulsive force induced by other nodes
+        local repulsive_forces = {}
 
-	-- compute repulsive forces
-	if self.approximate_repulsive_forces then
-	  -- determine the cells that have an repulsive influence on v
-	  local cells = quadtree:findInteractionCells(v, barnes_hut_criterion)
+        -- compute repulsive forces
+        if self.approximate_repulsive_forces then
+          -- determine the cells that have an repulsive influence on v
+          local cells = quadtree:findInteractionCells(v, barnes_hut_criterion)
 
-	  -- compute the repulsive force between these cells and v
-	  for _,cell in ipairs(cells) do
-	    -- check if the cell is a leaf
-	    if #cell.subcells == 0 then
-	      -- compute the forces between the node and all particles in the cell
-	      for _,particle in ipairs(cell.particles) do
-		-- build a table that contains the particle plus all its subparticles 
-		-- (particles at the same position)
-		local real_particles = lib.copy(particle.subparticles)
-		table.insert(real_particles, particle)
+          -- compute the repulsive force between these cells and v
+          for _,cell in ipairs(cells) do
+            -- check if the cell is a leaf
+            if #cell.subcells == 0 then
+              -- compute the forces between the node and all particles in the cell
+              for _,particle in ipairs(cell.particles) do
+                -- build a table that contains the particle plus all its subparticles
+                -- (particles at the same position)
+                local real_particles = lib.copy(particle.subparticles)
+                table.insert(real_particles, particle)
 
-		for _,real_particle in ipairs(real_particles) do
-		  local delta = real_particle.pos:minus(v.pos)
-		  
-		  -- enforce a small virtual distance if the node and the cell's 
-		  -- center of mass are located at (almost) the same position
-		  if delta:norm() < 0.1 then
-		    delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
-		  end
+                for _,real_particle in ipairs(real_particles) do
+                  local delta = real_particle.pos:minus(v.pos)
 
-		  -- compute the repulsive force vector
-		  local repulsive_force = approximated_repulsive_force(delta:norm(), real_particle.mass)
-		  local force = delta:normalized():timesScalar(repulsive_force)
+                  -- enforce a small virtual distance if the node and the cell's
+                  -- center of mass are located at (almost) the same position
+                  if delta:norm() < 0.1 then
+                    delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+                  end
 
-		  -- remember the repulsive force for the particle so that we can 
-		  -- subtract it later when computing the attractive forces with
-		  -- adjacent nodes
-		  repulsive_forces[real_particle.node] = repulsive_force
+                  -- compute the repulsive force vector
+                  local repulsive_force = approximated_repulsive_force(delta:norm(), real_particle.mass)
+                  local force = delta:normalized():timesScalar(repulsive_force)
 
-		  -- move the node v accordingly
-		  d = d:plus(force)
-		end
-	      end
-	    else
-	      -- compute the distance between the node and the cell's center of mass
-	      local delta = cell.center_of_mass:minus(v.pos)
+                  -- remember the repulsive force for the particle so that we can
+                  -- subtract it later when computing the attractive forces with
+                  -- adjacent nodes
+                  repulsive_forces[real_particle.node] = repulsive_force
 
-	      -- enforce a small virtual distance if the node and the cell's 
-	      -- center of mass are located at (almost) the same position
-	      if delta:norm() < 0.1 then
-		delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
-	      end
+                  -- move the node v accordingly
+                  d = d:plus(force)
+                end
+              end
+            else
+              -- compute the distance between the node and the cell's center of mass
+              local delta = cell.center_of_mass:minus(v.pos)
 
-	      -- compute the repulsive force vector
-	      local repulsive_force = approximated_repulsive_force(delta:norm(), cell.mass)
-	      local force = delta:normalized():timesScalar(repulsive_force)
+              -- enforce a small virtual distance if the node and the cell's
+              -- center of mass are located at (almost) the same position
+              if delta:norm() < 0.1 then
+                delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+              end
 
-	      -- TODO for each neighbour of v, check if it is in this cell.
-	      -- if this is the case, compute the quadtree force for the mass
-	      -- 'node.weight / cell.mass' and remember this as the repulsive
-	      -- force of the neighbour;  (it is not necessarily at
-	      -- the center of mass of the cell, so the result is only an
-	      -- approximation of the real repulsive force generated by the
-	      -- neighbour)
+              -- compute the repulsive force vector
+              local repulsive_force = approximated_repulsive_force(delta:norm(), cell.mass)
+              local force = delta:normalized():timesScalar(repulsive_force)
 
-	      -- move te node v accordingly
-	      d = d:plus(force)
-	    end
-	  end
-	else
-	  for _,u in ipairs(graph.nodes) do
-	    if u.name ~= v.name then
-	      -- compute the distance between u and v
-	      local delta = u.pos:minus(v.pos)
+              -- TODO for each neighbor of v, check if it is in this cell.
+              -- if this is the case, compute the quadtree force for the mass
+              -- 'node.weight / cell.mass' and remember this as the repulsive
+              -- force of the neighbor;  (it is not necessarily at
+              -- the center of mass of the cell, so the result is only an
+              -- approximation of the real repulsive force generated by the
+              -- neighbor)
 
-	      -- enforce a small virtual distance if the nodes are
-	      -- located at (almost) the same position
-	      if delta:norm() < 0.1 then
-		delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
-	      end
+              -- move the node v accordingly
+              d = d:plus(force)
+            end
+          end
+        else
+          for _,u in ipairs(graph.nodes) do
+            if u.name ~= v.name then
+              -- compute the distance between u and v
+              local delta = u.pos:minus(v.pos)
 
-	      -- compute the repulsive force vector
-	      local repulsive_force = accurate_repulsive_force(delta:norm(), u.weight)
-	      local force = delta:normalized():timesScalar(repulsive_force)
+              -- enforce a small virtual distance if the nodes are
+              -- located at (almost) the same position
+              if delta:norm() < 0.1 then
+                delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+              end
 
-	      -- remember the repulsive force so we can later subtract them
-	      -- when computing the attractive forces
-	      repulsive_forces[u] = repulsive_force
+              -- compute the repulsive force vector
+              local repulsive_force = accurate_repulsive_force(delta:norm(), u.weight)
+              local force = delta:normalized():timesScalar(repulsive_force)
 
-	      -- move the node v accordingly
-	      d = d:plus(force)
-	    end
-	  end
-	end
+              -- remember the repulsive force so we can later subtract them
+              -- when computing the attractive forces
+              repulsive_forces[u] = repulsive_force
 
-	-- compute attractive forces between v and its neighbours
-	for _,edge in ipairs(v.edges) do
-	  local u = edge:getNeighbour(v)
+              -- move the node v accordingly
+              d = d:plus(force)
+            end
+          end
+        end
 
-	  -- compute the distance between u and v
-	  local delta = u.pos:minus(v.pos)
+        -- compute attractive forces between v and its neighbors
+        for _,edge in ipairs(v.edges) do
+          local u = edge:getNeighbour(v)
 
-	  -- enforce a small virtual distance if the nodes are
-	  -- located at (almost) the same position
-	  if delta:norm() < 0.1 then
-	    delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
-	  end
+          -- compute the distance between u and v
+          local delta = u.pos:minus(v.pos)
 
-	  -- compute the spring force between them
-	  local attr_force = attractive_force(delta:norm(), #v.edges, u.weight, u.charged, repulsive_forces[u])
-	  local force = delta:normalized():timesScalar(attr_force)
+          -- enforce a small virtual distance if the nodes are
+          -- located at (almost) the same position
+          if delta:norm() < 0.1 then
+            delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+          end
 
-	  -- move the node v accordingly
-	  d = d:plus(force)
-	end
+          -- compute the spring force between them
+          local attr_force = attractive_force(delta:norm(), #v.edges, u.weight, u.charged, repulsive_forces[u])
+          local force = delta:normalized():timesScalar(attr_force)
 
-	-- remember the previous position of v
-	old_position = v.pos:copy()
+          -- move the node v accordingly
+          d = d:plus(force)
+        end
 
-	if d:norm() > 0 then
-	  -- reposition v according to the force vector and the current temperature
-	  v.pos = v.pos:plus(d:normalized():timesScalar(math.min(step_length, d:norm())))
-	end
+        -- remember the previous position of v
+        old_position = v.pos:copy()
 
-	-- we need to improve the system energy as long as any of
-	-- the node movements is large enough to assume we're far
-	-- away from the minimum system energy
-	if v.pos:minus(old_position):norm() > spring_length * self.convergence_tolerance then
-	  converged = false
-	end
+        if d:norm() > 0 then
+          -- reposition v according to the force vector and the current temperature
+          v.pos = v.pos:plus(d:normalized():timesScalar(math.min(step_length, d:norm())))
+        end
+
+        -- we need to improve the system energy as long as any of
+        -- the node movements is large enough to assume we're far
+        -- away from the minimum system energy
+        if v.pos:minus(old_position):norm() > spring_length * self.convergence_tolerance then
+          converged = false
+        end
       end
     end
 
@@ -488,7 +488,7 @@
   -- larger than the minimum position
   if min_pos:equals(max_pos) then
     max_pos = max_pos:plus(Vector.new(2, function (n)
-      return 0.1 + math.random() * 0.1
+      return 0.1 + lib.random() * 0.1
     end))
   end
 
@@ -500,8 +500,8 @@
 
   -- create the quadtree
   quadtree = QuadTree.new(min_pos.x, min_pos.y,
-			  max_pos.x - min_pos.x,
-			  max_pos.y - min_pos.y)
+                          max_pos.x - min_pos.x,
+                          max_pos.y - min_pos.y)
 
   -- insert nodes into the quadtree
   for _,node in ipairs(graph.nodes) do

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringHu2006.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringHu2006.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringHu2006.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -25,7 +25,7 @@
 declare {
   key       = "spring Hu 2006 layout",
   algorithm = SpringHu2006,
-  
+
   preconditions = {
     connected = true,
     loop_free = true,
@@ -34,20 +34,20 @@
 
   old_graph_model = true,
 
-  summary = [["  
-       Implementation of a spring graph drawing algorithm based on
-       a paper by Hu.
- "]],
-  documentation = [["        
-       \begin{itemize}
-       \item
-         Y. Hu.
-         \newblock Efficient, high-quality force-directed graph drawing.
-         \newblock \emph{The Mathematica Journal}, 2006.
-       \end{itemize}
-      
-       There are some modifications compared to the original algorithm,
-       see the Diploma thesis of Pohlmann for details.
+  summary = [["
+    Implementation of a spring graph drawing algorithm based on
+    a paper by Hu.
+  "]],
+  documentation = [["
+    \begin{itemize}
+      \item
+        Y. Hu.
+        \newblock Efficient, high-quality force-directed graph drawing.
+        \newblock \emph{The Mathematica Journal}, 2006.
+    \end{itemize}
+
+    There are some modifications compared to the original algorithm,
+    see the Diploma thesis of Pohlmann for details.
   "]]
 }
 
@@ -65,10 +65,10 @@
 
 
 function SpringHu2006:run()
-  
+
   -- Setup some parameters
   local options = self.digraph.options
-  
+
   self.iterations = options['iterations']
   self.cooling_factor = options['cooling factor']
   self.initial_step_length = options['initial step length']
@@ -75,7 +75,7 @@
   self.convergence_tolerance = options['convergence tolerance']
 
   self.natural_spring_length = options['node distance']
-   
+
   self.coarsen = options['coarsen']
   self.downsize_ratio = options['downsize ratio']
   self.minimum_graph_size = options['minimum coarsening size']
@@ -82,9 +82,9 @@
 
 
   -- Setup
-  
+
   self.downsize_ratio = math.max(0, math.min(1, tonumber(self.downsize_ratio)))
-  
+
   self.graph_size = #self.graph.nodes
   self.graph_density = (2 * #self.graph.edges) / (#self.graph.nodes * (#self.graph.nodes - 1))
 
@@ -96,7 +96,7 @@
   assert(self.natural_spring_length >= 0, 'the natural spring dimension (value: ' .. self.natural_spring_length .. ') needs to be greater than or equal to 0')
   assert(self.downsize_ratio >= 0 and self.downsize_ratio <= 1, 'the downsize ratio (value: ' .. self.downsize_ratio .. ') needs to be between 0 and 1')
   assert(self.minimum_graph_size >= 2, 'the minimum coarsening size of coarse graphs (value: ' .. self.minimum_graph_size .. ') needs to be greater than or equal to 2')
-  
+
   -- initialize node weights
   for _,node in ipairs(self.graph.nodes) do
     node.weight = 1
@@ -106,20 +106,20 @@
   for _,edge in ipairs(self.graph.edges) do
     edge.weight = 1
   end
-  
-  
+
+
   -- initialize the coarse graph data structure. note that the algorithm
-  -- is the same regardless whether coarsening is used, except that the 
+  -- is the same regardless whether coarsening is used, except that the
   -- number of coarsening steps without coarsening is 0
   local coarse_graph = CoarseGraph.new(self.graph)
 
   -- check if the multilevel approach should be used
   if self.coarsen then
-    -- coarsen the graph repeatedly until only minimum_graph_size nodes 
-    -- are left or until the size of the coarse graph was not reduced by 
+    -- coarsen the graph repeatedly until only minimum_graph_size nodes
+    -- are left or until the size of the coarse graph was not reduced by
     -- at least the downsize ratio configured by the user
-    while coarse_graph:getSize() > self.minimum_graph_size 
-      and coarse_graph:getRatio() <= (1 - self.downsize_ratio) 
+    while coarse_graph:getSize() > self.minimum_graph_size
+      and coarse_graph:getRatio() <= (1 - self.downsize_ratio)
     do
       coarse_graph:coarsen()
     end
@@ -192,8 +192,8 @@
 
 
 function SpringHu2006:computeInitialLayout(graph, spring_length)
-  -- TODO how can supernodes and fixed nodes go hand in hand? 
-  -- maybe fix the supernode if at least one of its subnodes is 
+  -- TODO how can supernodes and fixed nodes go hand in hand?
+  -- maybe fix the supernode if at least one of its subnodes is
   -- fixated?
 
   -- fixate all nodes that have a 'desired at' option. this will set the
@@ -208,7 +208,7 @@
       if not graph.nodes[1].fixed and not graph.nodes[2].fixed then
         -- both nodes can be moved, so we assume node 1 is fixed at (0,0)
         graph.nodes[1].pos.x = 0
-	graph.nodes[1].pos.y = 0
+        graph.nodes[1].pos.y = 0
       end
 
       -- position the loose node relative to the fixed node, with
@@ -223,7 +223,7 @@
     end
   else
     -- use a random positioning technique
-    local function positioning_func(n) 
+    local function positioning_func(n)
       local radius = 2 * spring_length * self.graph_density * math.sqrt(self.graph_size) / 2
       return lib.random(-radius, radius)
     end
@@ -230,9 +230,9 @@
 
     -- compute initial layout based on the random positioning technique
     for _,node in ipairs(graph.nodes) do
-      if not node.fixed then 
-	node.pos.x = positioning_func(1)
-	node.pos.y = positioning_func(2)
+      if not node.fixed then
+        node.pos.x = positioning_func(1)
+        node.pos.y = positioning_func(2)
       end
     end
   end
@@ -253,7 +253,7 @@
 
   -- adjust the initial step length automatically if desired by the user
   local step_length = self.initial_step_length == 0 and spring_length or self.initial_step_length
- 
+
   -- convergence criteria etc.
   local converged = false
   local energy = math.huge
@@ -273,6 +273,39 @@
 
     for _,v in ipairs(graph.nodes) do
       if not v.fixed then
+        -- vector for the displacement of v
+        local d = Vector.new(2)
+
+        for _,u in ipairs(graph.nodes) do
+          if v ~= u then
+            -- compute the distance between u and v
+            local delta = u.pos:minus(v.pos)
+
+            -- enforce a small virtual distance if the nodes are
+            -- located at (almost) the same position
+            if delta:norm() < 0.1 then
+              delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
+            end
+
+            local graph_distance = (distances[u] and distances[u][v]) and distances[u][v] or #graph.nodes + 1
+
+            -- compute the repulsive force vector
+            local force = repulsive_force(delta:norm(), graph_distance, v.weight)
+            local force = delta:normalized():timesScalar(force)
+
+            -- move the node v accordingly
+            d = d:plus(force)
+          end
+        end
+
+        -- really move the node now
+        -- TODO note how all nodes are moved by the same amount  (step_length)
+        -- while Walshaw multiplies the normalized force with min(step_length,
+        -- d:norm()). could that improve this algorithm even further?
+        v.pos = v.pos:plus(d:normalized():timesScalar(step_length))
+
+        -- update the energy function
+        energy = energy + math.pow(d:norm(), 2)
 	-- vector for the displacement of v
 	local d = Vector.new(2)
 	
@@ -284,7 +317,7 @@
 	    -- enforce a small virtual distance if the nodes are
 	    -- located at (almost) the same position
 	    if delta:norm() < 0.1 then
-	      delta:update(function (n, value) return 0.1 + math.random() * 0.1 end)
+	      delta:update(function (n, value) return 0.1 + lib.random() * 0.1 end)
 	    end
 	    
 	    local graph_distance = (distances[u] and distances[u][v]) and distances[u][v] or #graph.nodes + 1
@@ -318,9 +351,9 @@
       local delta = x.pos:minus(old_positions[x])
       max_movement = math.max(delta:norm(), max_movement)
     end
-    
-    -- the algorithm will converge if the maximum movement is below a 
-    -- threshold depending on the spring length and the convergence 
+
+    -- the algorithm will converge if the maximum movement is below a
+    -- threshold depending on the spring length and the convergence
     -- tolerance
     if max_movement < spring_length * self.convergence_tolerance then
       converged = true

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringLayouts.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringLayouts.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/SpringLayouts.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -29,8 +29,8 @@
     { key = "spring Hu 2006 layout" },
   },
 
-  summary = [["  
-       This key selects Hu's 2006 spring layout with appropriate settings
-       for some parameters.
-   "]]
- }
+  summary = [["
+    This key selects Hu's 2006 spring layout with appropriate settings
+    for some parameters.
+  "]]
+}

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/FruchtermanReingold.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/FruchtermanReingold.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/FruchtermanReingold.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,33 +20,39 @@
 declare {
   key = "spring electric no coarsen layout",
   algorithm = SpringElectricNoCoarsenClass,
-  preconditions = { connected = true }, 
+  preconditions = { connected = true },
   postconditions = {fixed = true},
 
-  summary = [[This layout uses the algorithm proposed by Fruchterman and Reingold to draw graphs."]], 
+  summary = [[
+    This layout uses the algorithm proposed by Fruchterman and Reingold to draw graphs."
+   ]],
 
-  documentation =
-  [[The Fruchterman-Reingold algorithm is one if the oldest methods 
-  for force-based graph drawing. It is described in:
-  \begin{itemize}
-    \item 
-    Thomas M.~J.~ Fruchterman and Edward M.~ Reingold,
-    \newblock Graph Drawing by Force-directed Placement,
-    \newblock \emph{Software -- practice and experience,}
-    21(1 1), 1129-1164, 1991.
-  \end{itemize}
-  Fruchterman and Reingold had to principles in graph drawing:
-  \begin{enumerate} 
-  \item Vertices connected by an edge should be drawn close toa another and
-  \item in general, vertices should not be drawn too close to each other.
-  \end{itemize}
-  The spring electric no coarsen layout uses spring forces as attractive 
-  forces influecing vertex pairs connected by an edge and electric forces 
-  as repulsive forces between all vertex pairs. The original algorithm 
-  also contained a frame that stopped the vertices from drifting too far 
-  apart, but this concept was not implemented. This algorithm will not be affected 
-  by coarsening. This layout was implemented 
-  by using the Jedi framework.
+  documentation = [[
+    The Fruchterman-Reingold algorithm is one if the oldest methods
+    for force-based graph drawing. It is described in:
+    %
+    \begin{itemize}
+      \item
+        Thomas M.~J.~ Fruchterman and Edward M.~ Reingold,
+        \newblock Graph Drawing by Force-directed Placement,
+        \newblock \emph{Software -- practice and experience,}
+        21(1 1), 1129-1164, 1991.
+    \end{itemize}
+    %
+    Fruchterman and Reingold had to principles in graph drawing:
+    %
+    \begin{enumerate}
+      \item Vertices connected by an edge should be drawn close to another and
+      \item in general, vertices should not be drawn too close to each other.
+    \end{itemize}
+    %
+    The spring electric no coarsen layout uses spring forces as attractive
+    forces influencing vertex pairs connected by an edge and electric forces
+    as repulsive forces between all vertex pairs. The original algorithm
+    also contained a frame that stopped the vertices from drifting too far
+    apart, but this concept was not implemented. This algorithm will not be
+    affected by coarsening. This layout was implemented by using the Jedi
+    framework.
   ]],
 
   example =
@@ -62,7 +68,7 @@
       g -- {h, i, j},
       h -- {i, j},
       i -- j
-    }; 
+    };
   ]],
 
   example =
@@ -69,7 +75,7 @@
   [[
   \graph[spring electric no coarsen layout, speed = 0.25, node distance = 0.25cm, horizontal = c to l, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, coarsen = false, maximum step = 1]{
       a -> b -> c -> {d1 -> e  -> f -> g -> h -> i -> {j1 -> e, j2 -> l}, d2 -> l -> m}, m -> a
-    }; 
+    };
   ]]
 }
 
@@ -80,7 +86,7 @@
 
 --define a local time function
 local time_fun_1
-function time_fun_1 (t_total, t_now) 
+function time_fun_1 (t_total, t_now)
   if t_now/t_total <= 0.5 then
     return 0.5
   else
@@ -112,7 +118,7 @@
   }
 
   -- run algorithm
-  spring_electric_no_coarsen:run()  
+  spring_electric_no_coarsen:run()
 end
 
 return SpringElectricNoCoarsenClass
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/HuSpringElectricalFW.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/HuSpringElectricalFW.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/HuSpringElectricalFW.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,29 +20,31 @@
   key = "jedi spring electric layout",
   algorithm = HuClass,
   documentation_in = "documentation_hu_layout",
-  preconditions = { connected = true }, 
+  preconditions = { connected = true },
   postconditions = {fixed = true},
 
-  summary = "This layout uses the spring electric algorithm proposed by Hu to draw graphs.", 
+  summary = "This layout uses the spring electric algorithm proposed by Hu to draw graphs.",
 
-  documentation =
-  [[The spring electric algorithm by Hu uses two kinds of forces and coarsening. 
-  It is described in:
-  \begin{itemize}
-    \item 
-    Yifan Hu,
-    \newblock Efficient, high quality force-directed graph drawing,
-    \newblock \emph{The Mathematica Journal,}
-    10(1), 37-71, 2006.
-  \end{itemize}
-  This algorithm uses spring forces as attractive forces between vertices 
-  connected by an edge and electric forces as repulsive forces between 
-  all vertex pairs. Hu introduces coarsening, a procedure which repeatedly 
-  merges vertices in order to obtain a smaller version of the graph, to 
-  overcome local minima. He also uses the Barnes-Hut algorithm to enhance 
-  the runtime of his algorithms. This algorithm is not used in this 
-  implementation. This layout was implemented by using the Jedi framework.
-  ]], 
+  documentation = [[
+    The spring electric algorithm by Hu uses two kinds of forces and coarsening.
+    It is described in:
+    %
+    \begin{itemize}
+      \item
+        Yifan Hu,
+        \newblock Efficient, high quality force-directed graph drawing,
+        \newblock \emph{The Mathematica Journal,}
+        10(1), 37--71, 2006.
+    \end{itemize}
+    %
+    This algorithm uses spring forces as attractive forces between vertices
+    connected by an edge and electric forces as repulsive forces between
+    all vertex pairs. Hu introduces coarsening, a procedure which repeatedly
+    merges vertices in order to obtain a smaller version of the graph, to
+    overcome local minima. He also uses the Barnes-Hut algorithm to enhance
+    the runtime of his algorithms. This algorithm is not used in this
+    implementation. This layout was implemented by using the Jedi framework.
+  ]],
 
   example =
   [[
@@ -52,8 +54,8 @@
       b -- {c, d, e},
       c -- {d, e},
       d --e
-    }; 
-  ]], 
+    };
+  ]],
 
   example =
   [[
@@ -60,7 +62,7 @@
   \tikz
     \graph[spring electric fw layout, speed = 0.35, node distance = 1cm, horizontal = c to l, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, maximum displacement per step = 10]{
       a -> b -> c -> {d1 -> e  -> f -> g -> h -> i -> {j1 -> e, j2 -> l}, d2 -> l -> m}, m -> a
-    }; 
+    };
   ]]
 }
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SimpleSpring.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SimpleSpring.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SimpleSpring.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -19,35 +19,34 @@
   key = "trivial spring layout",
   algorithm = SimpleSpringClass,
   documentation_in = "pgf.gd.doc.jedi.algorithms.SimpleSpringLayout",
-  preconditions = { connected = true }, 
+  preconditions = { connected = true },
   postconditions = {fixed = true},
 
-  summary = "This layout uses only spring forces to draw graphs.", 
+  summary = "This layout uses only spring forces to draw graphs.",
 
-  documentation =
-  [[The simple spring algorithm only uses one force kind: A spring force 
-  that serves as both attracitve and repuslive force. The edges are modeled as 
-  springs and act according to Hoke's law: They have an ideal length and will 
-  expand if they are contracted below this length, pushing the adjacent 
-  vertices away from each other, and contract if it is stretched, pulling the 
-  adjacent vertices towards each other. This ideal length is given by the 
-  parameter |node distance|. There is no force repelling vertices that are not 
-  connected to each other, which can lead to vertices being placed at the same 
-  point. It is not a very powerfull layout and will probably fail with large 
-  graphs, especially if they have few edges. It can however be used to 
-  demonstrate the effect of spring forces. This layout was implemented by using
-   the Jedi framework.
-  ]], 
+  documentation = [[
+    The simple spring algorithm only uses one force kind: A spring force
+    that serves as both attractive and repulsive force. The edges are modeled as
+    springs and act according to Hoke's law: They have an ideal length and will
+    expand if they are contracted below this length, pushing the adjacent
+    vertices away from each other, and contract if it is stretched, pulling the
+    adjacent vertices towards each other. This ideal length is given by the
+    parameter |node distance|. There is no force repelling vertices that are not
+    connected to each other, which can lead to vertices being placed at the same
+    point. It is not a very powerful layout and will probably fail with large
+    graphs, especially if they have few edges. It can however be used to
+    demonstrate the effect of spring forces. This layout was implemented by using
+    the Jedi framework.
+  ]],
 
-  example = 
-  [[
-  \tikz
-    \graph[simple spring layout, node distance = 3cm, speed = 2, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, coarsen = true, maximum step = 1]{
-      a -- {b, c, d, e},
-      b -- {c, d, e},
-      c -- {d, e},
-      d --e
-    }; 
+  example = [[
+    \tikz
+      \graph[simple spring layout, node distance = 3cm, speed = 2, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, coarsen = true, maximum step = 1]{
+        a -- {b, c, d, e},
+        b -- {c, d, e},
+        c -- {d, e},
+        d --e
+      };
   ]]
 }
 
@@ -69,7 +68,7 @@
   }
 
   -- run algorithm
-  simple_spring:run()   
+  simple_spring:run()
 end
 
 return SimpleSpringClass
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SocialGravityCloseness.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SocialGravityCloseness.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SocialGravityCloseness.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -24,63 +24,64 @@
   algorithm = SocialClass,
   postconditions = {fixed = true},
 
-  summary = [[This layout uses the social gravity algorithm proposed by Bannister 
-  with closeness mass to draw graphs.]], 
+  summary = [[
+    This layout uses the social gravity algorithm proposed by Bannister
+    with closeness mass to draw graphs.
+  ]],
 
-  documentation = 
-  [[Bannister et all described a social gravity algorithm that can be 
-  implemented with different kinds of gravity. 
-  It is described in:
-  \begin{itemize}
-    \item 
-    Michael J.~ Bannister and David Eppstein and Michael T~. Goodrich and
-               Lowell Trott,
-    \newblock Force-Directed Graph Drawing Using Social Gravity and Scaling,
-    \newblock \emph{CoRR,}
-    abs/1209.0748, 2012.
-  \end{itemize}
-  This implementation uses the closeness mass to determine the gravity of each 
-  vertex. There are three forces in this algorithm: A spring force as 
-  attractive force between vertices connected by an edge, an electric force as 
-  repulsive force between all vertex pairs, and a gravitational force pulling 
-  all vertices closer to their midpoint. The gravitational force depends on 
-  the social mass of a vertex, which can be determined in different ways. This 
-  algorithm uses the closeness mass. The closeness of a vertex $u$ is the 
-  reciprocal of the sum of the shortest path from $u$ to every other vertex 
-  $v$. The gravitational force leads to more "important" vertices ending up 
-  closer to the middle of the drawing, since the social mass of a vertex is 
-  proportinal to its importance. The social layouts work especially well on 
-  unconnected graphs like forests. This layout was implemented by using the 
-  Jedi framework.
-  ]], 
+  documentation = [[
+    Bannister et all described a social gravity algorithm that can be
+    implemented with different kinds of gravity.
+    It is described in:
+    %
+    \begin{itemize}
+      \item Michael J.~ Bannister and David Eppstein and Michael T~. Goodrich
+        and Lowell Trott,
+        \newblock Force-Directed Graph Drawing Using Social Gravity and Scaling,
+        \newblock \emph{CoRR,}
+        abs/1209.0748, 2012.
+    \end{itemize}
+    %
+    This implementation uses the closeness mass to determine the gravity of each
+    vertex. There are three forces in this algorithm: A spring force as
+    attractive force between vertices connected by an edge, an electric force as
+    repulsive force between all vertex pairs, and a gravitational force pulling
+    all vertices closer to their midpoint. The gravitational force depends on
+    the social mass of a vertex, which can be determined in different ways. This
+    algorithm uses the closeness mass. The closeness of a vertex $u$ is the
+    reciprocal of the sum of the shortest path from $u$ to every other vertex
+    $v$. The gravitational force leads to more "important" vertices ending up
+    closer to the middle of the drawing, since the social mass of a vertex is
+    proportional to its importance. The social layouts work especially well on
+    unconnected graphs like forests. This layout was implemented by using the
+    Jedi framework.
+  ]],
 
-  example = 
-  [[
-  \tikz
-   \graph[social closeness layout, speed = 0.9, gravity = 0.2, node distance = 0.65cm, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, find equilibrium = true, maximum step = 5]{
-    a -- a1 -- a2 -- a,
-    b -- b1 -- b2 -- b,
-    c -- c1 -- c2 -- c,
-    d -- d1 -- d2 -- d,
-    e -- e1 -- e2 -- e,
-    f -- f1 -- f2 -- f,
-    g -- g1 -- g2 -- g,
-    h -- h1 -- h2 -- h,
-    i -- i1 -- i2 -- i,
-    j -- j1 -- j2 -- j,
-    a -- b -- c -- d -- e -- f -- g -- h -- i -- j -- a 
-    }; 
-  ]], 
+  example = [[
+    \tikz
+      \graph[social closeness layout, speed = 0.9, gravity = 0.2, node distance = 0.65cm, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, find equilibrium = true, maximum step = 5]{
+        a -- a1 -- a2 -- a,
+        b -- b1 -- b2 -- b,
+        c -- c1 -- c2 -- c,
+        d -- d1 -- d2 -- d,
+        e -- e1 -- e2 -- e,
+        f -- f1 -- f2 -- f,
+        g -- g1 -- g2 -- g,
+        h -- h1 -- h2 -- h,
+        i -- i1 -- i2 -- i,
+        j -- j1 -- j2 -- j,
+        a -- b -- c -- d -- e -- f -- g -- h -- i -- j -- a
+      };
+  ]],
 
-  example = 
-  [[
-  \tikz
-    \graph[social closeness layout, speed = 0.35, node distance = 0.7cm, maximum step = 5, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, radius = 1cm, gravity = 2]{
-      a -- {a1 -- a2, a3}, 
-      b -- {b1, b2 -- b3 -- b4 --{b5, b6}}, 
-      c -- {c1--c2},
-      d -- {d1, d2, d3 -- {d4, d5}, d6 --{d7, d8}}
-    };  
+  example = [[
+    \tikz
+      \graph[social closeness layout, speed = 0.35, node distance = 0.7cm, maximum step = 5, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, radius = 1cm, gravity = 2]{
+        a -- {a1 -- a2, a3},
+        b -- {b1, b2 -- b3 -- b4 --{b5, b6}},
+        c -- {c1--c2},
+        d -- {d1, d2, d3 -- {d4, d5}, d6 --{d7, d8}}
+      };
   ]]
 }
 
@@ -93,7 +94,7 @@
     tmp =  fw_attributes[vertex]
     local sum = 0
     for i, w in pairs(n) do
-      sum = sum + w 
+      sum = sum + w
     end
     sum = sum / # self.ugraph.vertices
     tmp.mass = 1/sum
@@ -108,21 +109,21 @@
  social_gravity:addForce{
     force_type = ForceCanvasDistance,
     fun_u      = function (data) return data.k/(data.d*data.d) end,
-	epoch     = {"after expand", "during expand"}
+    epoch      = {"after expand", "during expand"}
   }
   social_gravity:addForce{
     force_type = ForceCanvasPosition,
     fun_u      = function (data) return  data.attributes[data.u].mass*data.attributes.options.gravity end,
-	epoch     = {"after expand", "during expand"}
+    epoch      = {"after expand", "during expand"}
   }
   social_gravity:addForce{
     force_type = ForceGraphDistance,
     fun_u      = function (data) return -data.d/(data.k*data.k) end,
     n          = 1,
-	epoch     = {"after expand", "during expand"}
+    epoch      = {"after expand", "during expand"}
   }
 
   social_gravity:run()
 end
 
-return SocialClass
\ No newline at end of file
+return SocialClass

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SocialGravityDegree.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SocialGravityDegree.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/algorithms/SocialGravityDegree.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -23,60 +23,63 @@
   algorithm = SocialClass,
   postconditions = {fixed = true},
 
-  summary = [[This layout uses the social gravity algorithm proposed by Bannister 
-  with closeness mass to draw graphs.]], 
+  summary = [[
+    This layout uses the social gravity algorithm proposed by Bannister
+    with closeness mass to draw graphs.]],
 
-  documentation = 
-  [[Bannister et all described a social gravity algorithm that can be 
-  implemented with different kinds of gravity. 
-  It is described in:
-  \begin{itemize}
-    \item 
-    Michael J.~ Bannister and David Eppstein and Michael T~. Goodrich and
-               Lowell Trott,
-    \newblock Force-Directed Graph Drawing Using Social Gravity and Scaling,
-    \newblock \emph{CoRR,}
-    abs/1209.0748, 2012.
-  \end{itemize}
-  This implementation uses the degree mass to determine the gravity of each 
-  vertex. There are three forces in this algorithm: A spring force as 
-  attractive force between vertices connected by an edge, an electric force as 
-  repulsive force between all vertex pairs, and a gravitational force pulling 
-  all vertices closer to their midpoint. The gravitational force depends on 
-  the social mass of a vertex, which can be determined in different ways. This 
-  algorithm uses the degree of each vertex as its mass. The gravitational 
-  force leads to more "important" vertices ending up closer to the middle of 
-  the drawing, since the social mass of a vertex is proportinal to its 
-  importance. The social layouts work especially well on unconnected graphs 
-  like forests. This layout was implemented by using the Jedi framework.
-  ]], 
+  documentation = [[
+    Bannister et all described a social gravity algorithm that can be
+    implemented with different kinds of gravity.
+    It is described in:
+    %
+    \begin{itemize}
+      \item
+        Michael J.~ Bannister and David Eppstein and Michael T~. Goodrich and
+        Lowell Trott,
+        \newblock Force-Directed Graph Drawing Using Social Gravity and Scaling,
+        \newblock \emph{CoRR,} abs/1209.0748, 2012.
+    \end{itemize}
+    %
+    This implementation uses the degree mass to determine the gravity of each
+    vertex. There are three forces in this algorithm: A spring force as
+    attractive force between vertices connected by an edge, an electric force as
+    repulsive force between all vertex pairs, and a gravitational force pulling
+    all vertices closer to their midpoint. The gravitational force depends on
+    the social mass of a vertex, which can be determined in different ways. This
+    algorithm uses the degree of each vertex as its mass. The gravitational
+    force leads to more "important" vertices ending up closer to the middle of
+    the drawing, since the social mass of a vertex is proportional to its
+    importance. The social layouts work especially well on unconnected graphs
+    like forests. This layout was implemented by using the Jedi framework.
+  ]],
 
   example = 
   [[
-  \graph[social degree layout, speed = 0.9, gravity = 0.2, node distance = 0.65cm, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, find equilibrium = true, maximum step = 5]{
-    a -- a1 -- a2 -- a,
-    b -- b1 -- b2 -- b,
-    c -- c1 -- c2 -- c,
-    d -- d1 -- d2 -- d,
-    e -- e1 -- e2 -- e,
-    f -- f1 -- f2 -- f,
-    g -- g1 -- g2 -- g,
-    h -- h1 -- h2 -- h,
-    i -- i1 -- i2 -- i,
-    j -- j1 -- j2 -- j,
-    a -- b -- c -- d -- e -- f -- g -- h -- i -- j -- a 
-    }; 
-  ]], 
+    \tikz
+      \graph[social degree layout, speed = 0.9, gravity = 0.2, node distance = 0.65cm, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, find equilibrium = true, maximum step = 5]{
+        a -- a1 -- a2 -- a,
+        b -- b1 -- b2 -- b,
+        c -- c1 -- c2 -- c,
+        d -- d1 -- d2 -- d,
+        e -- e1 -- e2 -- e,
+        f -- f1 -- f2 -- f,
+        g -- g1 -- g2 -- g,
+        h -- h1 -- h2 -- h,
+        i -- i1 -- i2 -- i,
+        j -- j1 -- j2 -- j,
+        a -- b -- c -- d -- e -- f -- g -- h -- i -- j -- a
+      };
+  ]],
 
   example =
   [[
-  \tikz
-    \graph[social degree layout, speed = 0.35, node distance = 0.7cm, maximum step = 15, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, radius = 1cm, gravity = 0.2]{
-      a -- {a1 -- a2, a3}, 
-      b -- {b1, b2 -- b3 -- b4 --{b5, b6}}, 
-      c -- {c1--c2},
-      d -- {d1, d2, d3 -- {d4, d5}, d6 --{d7, d8}}
-    };  
+    \tikz
+      \graph[social degree layout, speed = 0.35, node distance = 0.7cm, maximum step = 15, nodes={as=,circle, draw, inner sep=3pt,outer sep=0pt}, radius = 1cm, gravity = 0.2]{
+        a -- {a1 -- a2, a3},
+        b -- {b1, b2 -- b3 -- b4 --{b5, b6}},
+        c -- {c1--c2},
+        d -- {d1, d2, d3 -- {d4, d5}, d6 --{d7, d8}}
+      };
   ]]
 }
 
@@ -85,30 +88,30 @@
   key = "gravity",
   type = "number",
   initial = 0.2,
-  
+
   summary = "The gravity key describes the magnitude of the gravitational force.",
 
-  documentation =
-  [[
-  This parameter currently only affects the \lstinline{social degree layout} 
-  and the \lstinline{social closeness layout}. The gravity key determines the 
-  strength used to pull the vertices to the center of the canvas. 
-  ]], 
+  documentation = [[
+    This parameter currently only affects the \lstinline{social degree layout}
+    and the \lstinline{social closeness layout}. The gravity key determines the
+    strength used to pull the vertices to the center of the canvas.
+  ]],
 
   example =
   [[
-  \graph[social degree layout, iterations = 100, maximum time = 100, maximum step = 10]{
-    a1[weight = 2] -- {a2, a3, a4, a5},
-    b1 -- {b2 -- {b3, b4}, b5}
-  };    
-  ]], 
+    \tikz
+      \graph[social degree layout, iterations = 100, maximum time = 100, maximum step = 10]{
+        a1[weight = 2] -- {a2, a3, a4, a5},
+        b1 -- {b2 -- {b3, b4}, b5}
+      };
+  ]],
 
-  example = 
-  [[
-  \graph[social degree layout, iterations = 100, maximum time = 100, gravity = 0.5, maximum step = 10]{
-    a1 -- {a2 [mass = 2], a3, a4, a5},
-    b1 -- {b2 -- {b3, b4}, b5}
-  };  
+  example = [[
+    \tikz
+      \graph[social degree layout, iterations = 100, maximum time = 100, gravity = 0.5, maximum step = 10]{
+        a1 -- {a2 [mass = 2], a3, a4, a5},
+        b1 -- {b2 -- {b3, b4}, b5}
+      };
   ]]
 }
 
@@ -135,7 +138,7 @@
   end
 end
 
--- define table to store variables if needed 
+-- define table to store variables if needed
 local fw_attributes = Storage.newTableStorage()
 
 function SocialClass:run()
@@ -148,7 +151,7 @@
 
   -- add options to storage table
   fw_attributes.options = self.ugraph.options
-  
+
   -- generate new force class
   local social_gravity = ForceController.new(self.ugraph, fw_attributes)
 
@@ -174,7 +177,7 @@
   }
 
   -- run algorithm
-  social_gravity:run() 
+  social_gravity:run()
 end
 
 return SocialClass
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/CoarseGraphFW.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/CoarseGraphFW.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/CoarseGraphFW.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -9,12 +9,12 @@
 
 
 --- A class for creating and handling "coarse" versions of a graph. Such versions contain
--- less nodes and edges than the original graph while retaining the overall 
--- structure. This class offers functions to create coarse graphs and to expand them 
--- to regain their original size. 
+-- less nodes and edges than the original graph while retaining the overall
+-- structure. This class offers functions to create coarse graphs and to expand them
+-- to regain their original size.
 
 -- Imports
-local Digraph = require "pgf.gd.model.Digraph" 
+local Digraph = require "pgf.gd.model.Digraph"
 local Vertex = require "pgf.gd.model.Vertex"
 local Arc = require "pgf.gd.model.Arc"
 
@@ -25,14 +25,14 @@
 
 --- Creates a new coarse graph derived from an existing graph.
 --
--- Generates a coarse graph for the input |Digraph|. 
+-- Generates a coarse graph for the input |Digraph|.
 --
--- Coarsening describes the process of reducing the amount of vertices in a graph 
--- by merging vertices into pseudo-vertices. There are different strategies, 
--- to decide which vertices should be merged, like merging vertices that belong to edges in a 
--- maximal independent edge set or by creating pseudo-verties based on a maximal 
--- independent node set. Those strategies are called 
--- schemes. 
+-- Coarsening describes the process of reducing the amount of vertices in a graph
+-- by merging vertices into pseudo-vertices. There are different strategies,
+-- to decide which vertices should be merged, like merging vertices that belong to edges in a
+-- maximal independent edge set or by creating pseudo-vertices based on a maximal
+-- independent node set. Those strategies are called
+-- schemes.
 --
 -- Coarsening is not performed automatically. The function |CoarseGraph:coarsen|
 -- can be used to further coarsen the graph, or the function |CoarseGraph:uncoarsen|
@@ -39,12 +39,12 @@
 -- can be used to restore the previous state.
 --
 -- Note, however, that the input \meta{graph} is always modified in-place, so
--- if the original version of \meta{graph} is needed in parallel to its 
--- coarse representations, a deep copy of \meta{grpah} needs to be passed over
+-- if the original version of \meta{graph} is needed in parallel to its
+-- coarse representations, a deep copy of \meta{graph} needs to be passed over
 -- to |CoarseGraph.new|.
 --
 -- @param graph  An existing graph that needs to be coarsened.
--- @param fw_attributes The user defined attributes, possibly attached to vertices. 
+-- @param fw_attributes The user defined attributes, possibly attached to vertices.
 
 function CoarseGraph.new(ugraph, fw_attributes)
   local coarse_graph = {
@@ -62,10 +62,10 @@
 -- locals for performance
 local find_maximal_matching, arc_function
 
--- This function performs one coarsening step: It finds all independent vertex 
--- set according to |scheme|, coarsens them and adds the newly created 
--- vertices to the collapsed_vertices table, associating them with the current 
--- level.  
+-- This function performs one coarsening step: It finds all independent vertex
+-- set according to |scheme|, coarsens them and adds the newly created
+-- vertices to the collapsed_vertices table, associating them with the current
+-- level.
 function CoarseGraph:coarsen()
   -- update the level
   self.level = self.level + 1
@@ -87,32 +87,32 @@
       local collapse_vertices = {a_h, a_t}
       collapse_vertex = Vertex.new {weight = 0, mass = 0}
 
-      ugraph:collapse(collapse_vertices, 
-                            collapse_vertex,  
-                            function (a,b) 
-                              a.weight = a.weight + b.weight
-                              a.mass = a.mass + b.mass
-                              if fw_attributes then
-                                for key,value in pairs(fw_attributes[b]) do
-                                  if fw_attributes.functions[key] then
-                                    fw_attributes.functions[key](a,b)
-                                  elseif type(value) == "number" then
-                                    local tmp = fw_attributes[a]
-                                    if not tmp[key] then
-                                      tmp[key] = 0
-                                    end
-                                    tmp[key] = tmp[key] + value
-                                  end
-                                end
-                              end 
-                            end,
-                            function (a,b) 
-                              if a.weight == nil then 
-                                a.weight = b.weight
-                              else 
-                                a.weight = a.weight + b.weight 
+      ugraph:collapse(collapse_vertices,
+                      collapse_vertex,
+                      function (a,b)
+                        a.weight = a.weight + b.weight
+                        a.mass = a.mass + b.mass
+                        if fw_attributes then
+                          for key,value in pairs(fw_attributes[b]) do
+                            if fw_attributes.functions[key] then
+                              fw_attributes.functions[key](a,b)
+                            elseif type(value) == "number" then
+                              local tmp = fw_attributes[a]
+                              if not tmp[key] then
+                                tmp[key] = 0
                               end
-                            end)
+                              tmp[key] = tmp[key] + value
+                            end
+                          end
+                        end
+                      end,
+                      function (a,b)
+                        if a.weight == nil then
+                          a.weight = b.weight
+                        else
+                          a.weight = a.weight + b.weight
+                        end
+                      end)
 
       local c_v_p = collapse_vertex.pos
       local a_h_p = a_h.pos
@@ -133,19 +133,19 @@
   self.ratio = #vertices / old_graph_size
 end
 
--- This function expands all vertices assoicated with the current level, then 
+-- This function expands all vertices associated with the current level, then
 -- updates the level.
 function CoarseGraph:uncoarsen()
   local a = self.collapsed_vertices[self.level]
   local ugraph = self.ugraph
-  local random = math.random
-  local randomseed = math.randomseed
+  local random = lib.random
+  local randomseed = lib.randomseed
 
   for j=#a,1,-1 do
     randomseed(42)
     local to_expand = a[j]
 
-    ugraph:expand(to_expand, function(a,b) 
+    ugraph:expand(to_expand, function(a,b)
       b.pos.x = a.pos.x + random()*10
       b.pos.y = a.pos.y + random()*10
       end)
@@ -176,13 +176,13 @@
   return self.ugraph
 end
 
--- Private helper function to determine whether the second vertex in the 
+-- Private helper function to determine whether the second vertex in the
 -- current arc has been matched already
 --
 -- @param arc The arc in question
 -- @param vertex One of the arc's endpoints, either head or tail
 -- @param matched_vertices The table holding all matched vertices
--- 
+--
 -- @return The arc if the other endpoint has not been matched yet
 function arc_function (arc, vertex, matched_vertices)
   local x
@@ -191,22 +191,22 @@
   else
     x = arc.tail
   end
-  if not matched_vertices[x] then 
-    return arc 
+  if not matched_vertices[x] then
+    return arc
   end
 end
 
--- The function finding a maximum matching of independent arcs. 
+-- The function finding a maximum matching of independent arcs.
 --
 -- @param ugraph The current graph
 --
--- @return A table of arcs wich are in the matching
+-- @return A table of arcs which are in the matching
 function find_matching(ugraph)
   local matching = {}
   local matched_vertices = {}
   local unmatched_vertices = {}
   local vertices = ugraph.vertices
-  
+
   -- iterate over nodes in random order
   for _,j in ipairs(lib.random_permutation(#vertices)) do
     local vertex = vertices[j]
@@ -240,7 +240,7 @@
           return x.weight < y.weight
         end)
 
-        -- match the node against the neighbour with minimum weight
+        -- match the node against the neighbor with minimum weight
         matched_vertices[arcs[1].head] = true
         matched_vertices[arcs[1].tail] = true
         table.insert(matching, arcs[1])
@@ -261,4 +261,4 @@
 
 -- done
 
-return CoarseGraph
\ No newline at end of file
+return CoarseGraph

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/ForceController.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/ForceController.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/ForceController.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -8,26 +8,27 @@
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
 
---- This class is the most basic class for the Jedi framework. It manages the  
--- forces, epochs, options and streamlines the graph drawing process. 
+--- This class is the most basic class for the Jedi framework. It manages the
+-- forces, epochs, options and streamlines the graph drawing process.
 -- In detail, the force template will do the following:
+-- %
 -- \begin{itemize}
--- \item Hold the table with all epochs currently defined, and provide 
--- a function to add new ones
--- \item Hold the table associating forces with the epochs, and provide a 
--- function to add new ones
--- \item Define all the non-algorithm-specific options provided by Jedi
--- \item Assert user options to catch exceptions
--- \item Save user options and library functions to local variables to enchance 
--- runtime. 
--- \item Add any forces that are indicated by set options
--- \item Find and call the initial positioning algorithm requested
--- \item Determine if coarsening is enabled, and manage coarsening process if so
--- \item Call the proprocesing function of each force to obtain a vertex list the 
--- force will be applied to
--- \item Calculate the forces affecting each vertex.
--- \item Move the vertices, check for equilibria/used up iterations, update 
--- virtual time
+--   \item Hold the table with all epochs currently defined, and provide
+--     a function to add new ones
+--   \item Hold the table associating forces with the epochs, and provide a
+--     function to add new ones
+--   \item Define all the non-algorithm-specific options provided by Jedi
+--   \item Assert user options to catch exceptions
+--   \item Save user options and library functions to local variables to enhance
+--     runtime.
+--   \item Add any forces that are indicated by set options
+--   \item Find and call the initial positioning algorithm requested
+--   \item Determine if coarsening is enabled, and manage coarsening process if so
+--   \item Call the preprocessing function of each force to obtain a vertex list the
+--     force will be applied to
+--   \item Calculate the forces affecting each vertex.
+--   \item Move the vertices, check for equilibria/used up iterations, update
+--     virtual time
 -- \end{itemize}
 
 local ForceController = {}
@@ -42,7 +43,7 @@
 local ForcePullToGrid = require "pgf.gd.force.jedi.forcetypes.ForcePullToGrid"
 
 local epochs = {
-  [1] = "preprocessing", 
+  [1] = "preprocessing",
   [2] = "initial layout",
   [3] = "start coarsening process",
   [4] = "before coarsen",
@@ -59,14 +60,14 @@
 }
 
 -- Automatic parameter generation for epoch-variables
-for _,e in ipairs(epochs) do 
-  --- 
+for _,e in ipairs(epochs) do
+  ---
   declare {
     key = "iterations " .. e,
     type = "number"
   }
 
-  --- 
+  ---
   declare {
     key = "maximum displacement per step " .. e,
     type = "number"
@@ -115,9 +116,9 @@
 -- @return An integer value matching the epch's index, or $-1$ if epoch was not found
 
 function ForceController:findEpoch(epoch)
-  for j, e in ipairs(epochs) do 
+  for j, e in ipairs(epochs) do
     if e == epoch then
-      return j 
+      return j
     end
   end
   return -1
@@ -132,17 +133,17 @@
 
 --- Creating a new force algorithm
 -- @params ugraph The ugraph object the graph drawing algorithm will run on
--- @params fw_attributes The storage object holding the additional attributes defined by 
+-- @params fw_attributes The storage object holding the additional attributes defined by
 --         the engineer
 --
 -- @returns A new instance of force template
 function ForceController.new(ugraph, fw_attributes)
-  return setmetatable( 
+  return setmetatable(
   {epoch_forces = {},
     ugraph              = ugraph,
     fw_attributes       = fw_attributes,
     pull_to_point       = false,
-  }, ForceController)  
+  }, ForceController)
 end
 
 --- Running the force algorithm
@@ -178,16 +179,16 @@
   end
 
   -- Initialize epoch_forces table entries as empty tables
-  for _, e in ipairs(epochs) do 
+  for _, e in ipairs(epochs) do
     if not self.epoch_forces[e] then
       self.epoch_forces[e] = {}
     end
   end
 
-  -- Find inital positioning algorithm 
+  -- Find initial positioning algorithm
   local initial_positioning_class = options.algorithm_phases['initial positioning force framework'] -- initial_types[self.initial_layout]
 
-  -- If snap to grid option is set and no force was added yet, add an extra 
+  -- If snap to grid option is set and no force was added yet, add an extra
   -- force to post-processing
   if snap_to_grid then
     self:addForce{
@@ -211,15 +212,15 @@
   local end_coarsen = self:findEpoch("end coarsen")
   local start_expand = self:findEpoch("start expand")
   local end_expand = self:findEpoch("end expand")
-  
 
+
   -- iterate over epoch table
   local i = 1
-  while i <= #epochs do 
+  while i <= #epochs do
     local e = epochs[i]
 
     local iterations = options["iterations "..e] or options["iterations"]
-    -- assert input 
+    -- assert input
     assert(iterations >= 0, 'iterations (value: ' .. iterations .. ') needs to be greater than 0')
 
     -- Check for desired vertices and collect them in a table if any are found
@@ -227,7 +228,7 @@
     local desired_vertices = {}
     -- initialize node weights
     for _,vertex in ipairs(vertices) do
-      if vertex.options then 
+      if vertex.options then
         if vertex.options["desired at"] then
           desired = true
           desired_vertices[vertex] = vertex.options["desired at"]
@@ -235,7 +236,7 @@
       end
     end
 
-    -- Add pull to point force if desired vertices were found and engineer did not add 
+    -- Add pull to point force if desired vertices were found and engineer did not add
     -- this force
     if desired and not self.pull_to_point then
       self:addForce{
@@ -249,9 +250,9 @@
       -- vertices = coarse_graph.ugraph.vertices
       -- arcs = coarse_graph.ugraph.arcs
       if i >= start_coarsening and i < end_coarsening then
-        -- coarsen the graph repeatedly until only minimum_graph_size nodes 
-        -- are left or until the size of the coarse graph was not reduced by 
-        -- at least the downsize ratio configured by the user        
+        -- coarsen the graph repeatedly until only minimum_graph_size nodes
+        -- are left or until the size of the coarse graph was not reduced by
+        -- at least the downsize ratio configured by the user
         if i >= start_coarsen and i < start_expand then
           if coarse_graph:getSize() > minimum_graph_size and coarse_graph:getRatio() <= (1 - downsize_ratio) then
             if i == start_coarsen then
@@ -259,9 +260,9 @@
             elseif i < end_coarsen then
               preprocessing(coarse_graph.ugraph.vertices, coarse_graph.ugraph.arcs, e, coarse_graph.ugraph)
               move_vertices(coarse_graph.ugraph.vertices, e)
-            else 
+            else
               i = start_coarsen - 1
-            end         
+            end
           end
         end
 
@@ -271,13 +272,13 @@
           local spring_length = natural_spring_length
 
           if not vertices_initalized then
-            initial_positioning_class.new { vertices = coarse_graph.ugraph.vertices, 
-                                            options = options, 
-                                            desired_vertices = desired_vertices 
+            initial_positioning_class.new { vertices = coarse_graph.ugraph.vertices,
+                                            options = options,
+                                            desired_vertices = desired_vertices
                                           }:run()
             vertices_initalized = true
           end
-    
+
           preprocessing(coarse_graph.ugraph.vertices, coarse_graph.ugraph.arcs, e, coarse_graph.ugraph)
 
           -- set the spring length to the average arc length of the initial layout
@@ -305,9 +306,9 @@
             elseif i < end_expand then
               preprocessing(coarse_graph.ugraph.vertices, coarse_graph.ugraph.arcs, e, coarse_graph.ugraph)
               move_vertices(coarse_graph.ugraph.vertices, e)
-            else 
+            else
               i = start_expand - 1
-            end         
+            end
           else
             preprocessing(coarse_graph.ugraph.vertices, coarse_graph.ugraph.arcs, e, coarse_graph.ugraph)
             move_vertices(coarse_graph.ugraph.vertices, e)
@@ -317,9 +318,9 @@
       elseif i < start_coarsening or i > end_coarsening then
         if not vertices_initalized then
           initial_positioning_class.new {
-	    vertices = coarse_graph.ugraph.vertices,
-	    options = options,
-	    desired_vertices = desired_vertices }:run()
+            vertices = coarse_graph.ugraph.vertices,
+            options = options,
+            desired_vertices = desired_vertices }:run()
           vertices_initalized = true
         end
         preprocessing(coarse_graph.ugraph.vertices, coarse_graph.ugraph.arcs, e, coarse_graph.ugraph)
@@ -330,9 +331,9 @@
       if i < start_coarsening or i > end_coarsening then
         if not vertices_initalized then
           initial_positioning_class.new {
-	    vertices = vertices,
-	    options = options,
-	    desired_vertices = desired_vertices }:run()
+            vertices = vertices,
+            options = options,
+            desired_vertices = desired_vertices }:run()
           vertices_initalized = true
         end
         preprocessing(vertices, arcs, e, ugraph)
@@ -348,7 +349,7 @@
 --
 -- @params v The vertices of the current graph
 -- @params a The arcs of the current graph
--- @params epoch The preprocessing algorithm will only be applied to the forces 
+-- @params epoch The preprocessing algorithm will only be applied to the forces
 --                associated with this epoch.
 -- @params ugraph The current graph object
 
@@ -359,8 +360,8 @@
 end
 
 
---- Adding forces to the algorithm. 
--- 
+--- Adding forces to the algorithm.
+--
 -- @params force_data A table containing force type, time function, force function,
 --                    capping thresholds and the epochs in which this force will be active
 
@@ -374,7 +375,7 @@
   if force_data.epoch == nil then
     force_data.epoch = {}
   end
-  for _,e in ipairs(force_data.epoch) do 
+  for _,e in ipairs(force_data.epoch) do
     local tab = self.epoch_forces[e]
     if not tab then
       tab = {}
@@ -382,10 +383,10 @@
     tab[#tab +1] = f
     self.epoch_forces[e] = tab
   end
-end 
+end
 
 
---- Moving vertices according to force functions until the maximum number of 
+--- Moving vertices according to force functions until the maximum number of
 -- iterations is reached
 --
 -- @params vertices The vertices in the current graph
@@ -408,16 +409,16 @@
   local max_time = options["maximum time ".. epoch] or options["maximum time"]
   local d_t = max_time/iterations
   local t_now = 0
-  local random = math.random
-  local randomseed = math.randomseed
-  
+  local random = lib.random
+  local randomseed = lib.randomseed
+
   for j = 1 , iterations do
     t_now = t_now + d_t
     net_forces =  get_net_force(vertices, j, t_now, epoch)
-    
+
     -- normalize the force vector if necessary
     for v, c in pairs(net_forces) do
-      local n = sqrt(c.x*c.x+c.y*c.y) 
+      local n = sqrt(c.x*c.x+c.y*c.y)
       if n > max_step then
         local factor = max_step/n
         c.x = c.x*factor
@@ -429,7 +430,7 @@
     if not find_equilibrium or sum_up(net_forces)*d_t > epsilon then
       local cool_down_dt = d_t
       if cool_down_dt > 1 then
-	cool_down_dt = 1 + 1/d_t
+        cool_down_dt = 1 + 1/d_t
       end
       for _, v in ipairs(vertices) do
         local factor = 1/(v.mass or 1)
@@ -454,9 +455,9 @@
 -- @params t_now The current virtual time
 -- @params epoch The current epoch
 --
--- @return A table of coordinate-objects associated with vertices. The 
---          coordinate object hold the calculated net displacement for 
---          the $x$ and $y$ coordinate.  
+-- @return A table of coordinate-objects associated with vertices. The
+--          coordinate object hold the calculated net displacement for
+--          the $x$ and $y$ coordinate.
 function get_net_force(vertices, j, t_now, epoch)
   local net_forces = {}
   local natural_spring_length = options["node distance"]
@@ -464,11 +465,11 @@
   for _,v in ipairs(vertices) do
     net_forces[v] = Coordinate.new(0,0)
   end
-  
+
   for _,force_class in ipairs(epoch_forces[epoch]) do
     force_class:applyTo{net_forces = net_forces, options = options, j = j, t_now = t_now, k = natural_spring_length}
   end
-  
+
   return net_forces
 end
 
@@ -485,4 +486,4 @@
   return sum
 end
 
-return ForceController
\ No newline at end of file
+return ForceController

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/ForceTemplate.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/ForceTemplate.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/ForceTemplate.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -8,8 +8,8 @@
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
 
---- This is the parent class for forces. It provides a constructor and methods 
--- stubs to be overwritten in the subclasses. 
+--- This is the parent class for forces. It provides a constructor and methods
+-- stubs to be overwritten in the subclasses.
 
 -- Imports
 local lib = require "pgf.gd.lib"
@@ -33,11 +33,11 @@
 end
 
 -- Method stub for applying the forces
--- 
--- @param data A table holding data like the table the forces are  collected 
+--
+-- @param data A table holding data like the table the forces are  collected
 --             in, the current iteration, the current time stamp, some options
 --             or the natural spring length
-  
+
 function ForceTemplate:applyTo(data)
 end
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/InitialTemplate.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/InitialTemplate.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/InitialTemplate.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -8,11 +8,11 @@
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
 
---- This is the parent class for initial layout algorithms. It provides a 
--- constructor and methods stubs to be overwritten in the subclasses as well 
+--- This is the parent class for initial layout algorithms. It provides a
+-- constructor and methods stubs to be overwritten in the subclasses as well
 -- as placing vertices which are |desired at| a certain point.
 
--- Imports 
+-- Imports
 local lib = require "pgf.gd.lib"
 
 local InitialTemplate = lib.class {}
@@ -21,14 +21,14 @@
 function InitialTemplate:constructor()
   self.vertices = self.vertices
   self.options = self.options
-  self.desired_vertices = self.desired_vertices 
+  self.desired_vertices = self.desired_vertices
 end
 
 -- Method placing |desired at| vertices at the point they are desired
 --
--- @params desired_vertices A table containing all the vertices where the 
+-- @params desired_vertices A table containing all the vertices where the
 -- |desired at| option is set.
--- 
+--
 -- @return |placed| A boolean array stating if vertices have been placed yet
 -- @return |centroid_x| The x-coordinate of the midpoint of all placed vertices
 -- @return |centroid_y| The y-coordinate of the midpoint of all placed vertices
@@ -37,7 +37,7 @@
   local placed = {}
 
   local centroid_x, centroid_y = 0, 0
-    
+
   local size = 0
   for v, da in pairs(desired_vertices) do
     local p = v.pos
@@ -53,7 +53,7 @@
     centroid_x = centroid_x / size
     centroid_y = centroid_y / size
   end
-  
+
   return placed, centroid_x, centroid_y
 end
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/PathLengthsFW.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/PathLengthsFW.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/PathLengthsFW.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -7,9 +7,9 @@
 --
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
---- This is a helper class providing different functions that deal with graph 
--- distances. This class can be used by engineers and implementers if they 
--- need to calculate anything regarding graph distances. 
+--- This is a helper class providing different functions that deal with graph
+-- distances. This class can be used by engineers and implementers if they
+-- need to calculate anything regarding graph distances.
 
 local PathLengths = {}
 
@@ -17,12 +17,12 @@
 local PriorityQueue = require "pgf.gd.lib.PriorityQueue"
 local Preprocessing = require "pgf.gd.force.jedi.base.Preprocessing"
 
--- This algorithm conducts a breadth first search on the graph it is given. 
--- 
+-- This algorithm conducts a breadth first search on the graph it is given.
+--
 -- @param ugraph The graph on which the search should be conducted
 --
--- @return A table holding every vertex $v$ as key and a table as value. The 
---         value table holds all other vertices $u$ as keys and their shortest 
+-- @return A table holding every vertex $v$ as key and a table as value. The
+--         value table holds all other vertices $u$ as keys and their shortest
 --         distance to $v$ as value
 
 function PathLengths:breadthFirstSearch(ugraph)
@@ -57,12 +57,12 @@
 -- @param ugraph The graph where the paths should be found
 -- @param source The source vertex
 --
--- @return |distance| A table holding every vertex $v$ as key and a table as 
---                    value. The value table holds all other vertices $u$ as 
+-- @return |distance| A table holding every vertex $v$ as key and a table as
+--                    value. The value table holds all other vertices $u$ as
 --                    keys and their shortest distance to $v$ as value
--- @return |levels| A table holding the levels of the graph as keys and a 
+-- @return |levels| A table holding the levels of the graph as keys and a
 --                  table holding the vertices found on that level as values
--- @return |parent| A tbale holding each vertex as key and it's parent vertex 
+-- @return |parent| A table holding each vertex as key and it's parent vertex
 --                  as value
 
 function PathLengths:dijkstra(ugraph, source)
@@ -113,13 +113,13 @@
   return distance, levels, parent
 end
 
--- This function finds the pseudo diameter of the graph, which is the longest 
--- shortest path in the graph 
+-- This function finds the pseudo diameter of the graph, which is the longest
+-- shortest path in the graph
 --
 -- @param ugraph The graph who's pseudo diameter is wanted
 --
 -- @ return |diameter| The pseudo diameter of the graph
--- @ return |start_node| The start node of the longest shortest path in the 
+-- @ return |start_node| The start node of the longest shortest path in the
 --                       graph
 -- @ return |end_node| The end node of the longest shortest path in the graph
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/Preprocessing.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/Preprocessing.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/base/Preprocessing.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -8,10 +8,10 @@
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
 
---- This file holds functions to create lists of vertex pairs. All 
--- functions return a Graph object containing the vertices of the 
--- original graph and an edge between the vertices forming a pair 
--- under the specified conditions. The lists can be precomouted to 
+--- This file holds functions to create lists of vertex pairs. All
+-- functions return a Graph object containing the vertices of the
+-- original graph and an edge between the vertices forming a pair
+-- under the specified conditions. The lists can be precomputed to
 -- enhance performance.
 
 local PreprocessClass = {}
@@ -21,7 +21,7 @@
 local Digraph = require "pgf.gd.model.Digraph"
 
 
--- Creates a graph object with an arc between all pairwise disjoint vertex 
+-- Creates a graph object with an arc between all pairwise disjoint vertex
 -- pairs and returns the arc table
 --
 -- @param vertices The vertices of the original graph
@@ -29,94 +29,94 @@
 -- @return An arc table
 
 function PreprocessClass.allPairs(vertices)
-	local aP = Digraph.new{}
-	for _, vertex in ipairs(vertices) do
-		for _, vertex2 in ipairs(vertices) do
-			if vertex ~= vertex2 then
-				if not aP:contains(vertex) then
-					aP:add {vertex}
-				end
-				if not aP:contains(vertex2) then 
-					aP:add {vertex2}
-				end
-				if not aP:arc(vertex, vertex2) and not aP:arc(vertex2, vertex) then
-					aP:connect(vertex, vertex2)
-				end
-			end
-		end
-	end
-	return aP.arcs
+    local aP = Digraph.new{}
+    for _, vertex in ipairs(vertices) do
+        for _, vertex2 in ipairs(vertices) do
+            if vertex ~= vertex2 then
+                if not aP:contains(vertex) then
+                    aP:add {vertex}
+                end
+                if not aP:contains(vertex2) then
+                    aP:add {vertex2}
+                end
+                if not aP:arc(vertex, vertex2) and not aP:arc(vertex2, vertex) then
+                    aP:connect(vertex, vertex2)
+                end
+            end
+        end
+    end
+    return aP.arcs
 end
 
 
--- Creates a graph object with an arc between all pairwise disjoint vertex 
--- pairs that are connected by a shortest path of length n in the original 
+-- Creates a graph object with an arc between all pairwise disjoint vertex
+-- pairs that are connected by a shortest path of length n in the original
 -- graph and returns the arc table
 --
 -- @param vertices The vertices of the original graph
 -- @param arcs The arcs of the original graph
--- @param n The length of the shortest path we are looking for  
+-- @param n The length of the shortest path we are looking for
 --
 -- @return An arc table
 
 function PreprocessClass.overExactlyNPairs(vertices, arcs, n)
-	local waste, p_full = PreprocessClass.overMaxNPairs(vertices, arcs, n)
-	local waste, p_small = PreprocessClass.overMaxNPairs(vertices, arcs, n-1)
-	for _, paar in ipairs(p_full.arcs) do
-		if p_small:arc(paar.head, paar.tail) ~= nil or p_small:arc(paar.tail, paar.head) ~= nil then
-			p_full:disconnect(paar.head, paar.tail)
-			p_full:disconnect(paar.tail, paar.head)
-		end
-	end
-	return p_full.arcs
+    local waste, p_full = PreprocessClass.overMaxNPairs(vertices, arcs, n)
+    local waste, p_small = PreprocessClass.overMaxNPairs(vertices, arcs, n-1)
+    for _, paar in ipairs(p_full.arcs) do
+        if p_small:arc(paar.head, paar.tail) ~= nil or p_small:arc(paar.tail, paar.head) ~= nil then
+            p_full:disconnect(paar.head, paar.tail)
+            p_full:disconnect(paar.tail, paar.head)
+        end
+    end
+    return p_full.arcs
 end
 
 
--- Creates a graph object with an arc between all pairwise disjoint vertex 
--- pairs that are connected by a shortest path of length n or shorter in the 
+-- Creates a graph object with an arc between all pairwise disjoint vertex
+-- pairs that are connected by a shortest path of length n or shorter in the
 -- original graph and returns the arc table
--- 
+--
 -- @param vertices The vertices of the original graph
 -- @param arcs The arcs of the original graph
--- @param n The length of the shortest path we are looking for  
+-- @param n The length of the shortest path we are looking for
 --
 -- @return An arc table
 
 function PreprocessClass.overMaxNPairs(vertices, arcs, n)
-	assert(n >= 0, 'n (value: ' .. n.. ') needs to be greater or equal 0')
-	local p = Digraph.new{}	
-	local oneHop = Digraph.new{}
-	if n> 0 then
-		for _, arc in ipairs(arcs) do
-			local vertex = arc.head
-			local vertex2 = arc.tail
-			if not p:contains(vertex) then
-				p:add {vertex}
-				oneHop:add {vertex}
-			end
-			if not p:contains(vertex2) then 
-				p:add {vertex2}
-				oneHop:add {vertex2}
-			end
-			if p:arc(vertex, vertex2) == nil and p:arc(vertex2, vertex) == nil then
-					p:connect(vertex, vertex2)
-					oneHop:connect(vertex, vertex2)
-			end
-		end
-	end
+    assert(n >= 0, 'n (value: ' .. n.. ') needs to be greater or equal 0')
+    local p = Digraph.new{}
+    local oneHop = Digraph.new{}
+    if n> 0 then
+        for _, arc in ipairs(arcs) do
+            local vertex = arc.head
+            local vertex2 = arc.tail
+            if not p:contains(vertex) then
+                p:add {vertex}
+                oneHop:add {vertex}
+            end
+            if not p:contains(vertex2) then
+                p:add {vertex2}
+                oneHop:add {vertex2}
+            end
+            if p:arc(vertex, vertex2) == nil and p:arc(vertex2, vertex) == nil then
+                p:connect(vertex, vertex2)
+                oneHop:connect(vertex, vertex2)
+            end
+        end
+    end
 
-	n = n-1
-	while n > 0 do
-		for _, paar in ipairs(p.arcs) do
-			for _, vertex in ipairs(vertices) do
-				if paar.head ~= vertex and p:arc(paar.head, vertex) == nil  and  p:arc(vertex, paar.head) == nil and (oneHop:arc(paar.tail, vertex) ~= nil or oneHop:arc(vertex, paar.tail) ~= nil) then
-					p:connect(paar.head, vertex)
-				end
-			end
-		end 
-		n = n-1
-	end
-	return p.arcs, p
+    n = n-1
+    while n > 0 do
+        for _, paar in ipairs(p.arcs) do
+            for _, vertex in ipairs(vertices) do
+                if paar.head ~= vertex and p:arc(paar.head, vertex) == nil  and  p:arc(vertex, paar.head) == nil and (oneHop:arc(paar.tail, vertex) ~= nil or oneHop:arc(vertex, paar.tail) ~= nil) then
+                    p:connect(paar.head, vertex)
+                end
+            end
+        end
+        n = n-1
+    end
+    return p.arcs, p
 end
 
-return PreprocessClass
\ No newline at end of file
+return PreprocessClass

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/doc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/doc.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/doc.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -19,17 +19,17 @@
 
 summary
 [[
-This option determines the maximum ditance every vertex is allowed to travel 
-in one iteration. 
+This option determines the maximum distance every vertex is allowed to travel
+in one iteration.
 ]]
 
 documentation
 [[
-No matter how large the forces influencing a vertex, the effect 
-on the drawing should be limited to avoid vertices "jumping" from one side of 
-the canvas to each other due to a strong force pulling them further than their 
-ideal destination. The amount of space a vertex is allowed to travel in one 
-iteration is limited by the \lstinline{maximum step} parameter. It is $5000$ 
+No matter how large the forces influencing a vertex, the effect
+on the drawing should be limited to avoid vertices "jumping" from one side of
+the canvas to each other due to a strong force pulling them further than their
+ideal destination. The amount of space a vertex is allowed to travel in one
+iteration is limited by the \lstinline{maximum step} parameter. It is $5000$
 by default. That means by default, this parameter should not get in your way.
 ]]
 
@@ -40,7 +40,7 @@
   \graph[social degree layout, iterations = 2, maximum time = 2, maximum step = 6pt, coarsen = false]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  };    
+  };
 ]]
 
 example
@@ -49,7 +49,7 @@
   \graph[social degree layout, iterations = 2, maximum time = 2, maximum step = 12pt, coarsen = false]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 --------------------------------------------------------------------
 
@@ -61,13 +61,15 @@
 key          "speed"
 
 summary
-[[ This is a factor every calculated step is multiplied by.]]
+[[
+This is a factor every calculated step is multiplied by.
+]]
 
 documentation
 [[
 The speed is the distance a vertex travels if it is influenced by a force of
-$1$N$\cdot\gamma$. The speed is only a factor that will influence the total 
-amount every vertex can move: Half the speed makes half the movement, twice 
+$1$N$\cdot\gamma$. The speed is only a factor that will influence the total
+amount every vertex can move: Half the speed makes half the movement, twice
 the speed doubles the distance traveled.
 ]]
 
@@ -77,7 +79,7 @@
   \graph[social degree layout, iterations = 1, maximum time = 1, maximum step = 100, speed = 0.2, coarsen = false]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  };    
+  };
 ]]
 
 example
@@ -86,7 +88,7 @@
   \graph[social degree layout, iterations = 1, maximum time= 1, maximum step = 100, speed = 0.4, coarsen = false]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 --------------------------------------------------------------------
 
@@ -96,17 +98,19 @@
 key          "maximum time"
 
 summary
-[[ The highest amount of virtual time the algorithm is allowed to take.]]
+[[
+The highest amount of virtual time the algorithm is allowed to take.
+]]
 
 documentation
 [[
-This option is part of the virtual time construct of Jedi. The virtual time 
-concept allows graph drawing algorithm engineers to switch forces on and of 
-after a relative or absolute amount of time has elapsed. If the iterations 
-stay the same, doubling the maximum time has the same effect as doubling the 
-speed: Vertices move faster, but it is possible they miss their intended 
-destination. Also increasing the iterations changes the "resolution" of the 
-graph drawing algorithm: More steps are simulated in the same time. 
+This option is part of the virtual time construct of Jedi. The virtual time
+concept allows graph drawing algorithm engineers to switch forces on and of
+after a relative or absolute amount of time has elapsed. If the iterations
+stay the same, doubling the maximum time has the same effect as doubling the
+speed: Vertices move faster, but it is possible they miss their intended
+destination. Also increasing the iterations changes the "resolution" of the
+graph drawing algorithm: More steps are simulated in the same time.
 ]]
 
 example
@@ -115,7 +119,7 @@
   \graph[social degree layout, iterations = 20, maximum time = 100, coarsen = false, maximum step = 0.5, gravity = 2]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  };  
+  };
 ]]
 
 example
@@ -124,29 +128,31 @@
   \graph[social degree layout, iterations = 20, maximum time = 200, coarsen = false, maximum step = 0.5, gravity = 2]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 --------------------------------------------------------------------
 
 
-  
+
 --------------------------------------------------------------------
 key          "find equilibrium"
 
 summary
-[[ If this option is |true|, the framework checks the vertex movment to detect 
-low movement near the equilibrium and stop the algorithm]]
+[[
+If this option is |true|, the framework checks the vertex movement to detect
+low movement near the equilibrium and stop the algorithm.
+]]
 
 documentation
 [[
-Since we often do not know how many iterations are enough, the framework will 
-detect when the vertices (almost) stop moving and stop the algorithm. After 
-each iteration, the framework adds up the net force influencing all the 
-vertices. If it falls below the threshold |epsilon|, the algorithm 
-will ignore the left over iterations and terminate. You can disable this 
-behavior by setting this parameter to |false|. Allowing the framework to find 
-the equilibrium usually saves you time, while allowing more iterations (or a 
-  lower threshold) generates higher quality drawings.
+Since we often do not know how many iterations are enough, the framework will
+detect when the vertices (almost) stop moving and stop the algorithm. After
+each iteration, the framework adds up the net force influencing all the
+vertices. If it falls below the threshold |epsilon|, the algorithm
+will ignore the left over iterations and terminate. You can disable this
+behavior by setting this parameter to |false|. Allowing the framework to find
+the equilibrium usually saves you time, while allowing more iterations (or a
+lower threshold) generates higher quality drawings.
 ]]
 
 example
@@ -155,7 +161,7 @@
   \graph[social degree layout, iterations = 300, maximum time = 300, coarsen = false,  maximum step = 10, epsilon = 10]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  };    
+  };
 ]]
 
 example
@@ -164,7 +170,7 @@
   \graph[social degree layout, iterations = 300, maximum time = 300,  maximum step = 10, find equilibrium = false]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 --------------------------------------------------------------------
 
@@ -174,13 +180,15 @@
 key          "epsilon"
 
 summary
-[[ The threshold for the |find equilibrium| option.]]
+[[
+The threshold for the |find equilibrium| option.
+]]
 
 documentation
 [[
-This key specifies the threshold for the |find equilibrium| option. The lower 
-epsilon, the longer the graph drawing algorithm will take, but the closer the 
-resulting drawing will be to the true energy minimum. 
+This key specifies the threshold for the |find equilibrium| option. The lower
+epsilon, the longer the graph drawing algorithm will take, but the closer the
+resulting drawing will be to the true energy minimum.
 ]]
 
 example
@@ -189,7 +197,7 @@
   \graph[social degree layout, iterations = 200, maximum time = 200, maximum step = 10, coarsen = false, epsilon = 2]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 
 example
@@ -198,7 +206,7 @@
   \graph[social degree layout, iterations = 200, maximum time = 200, maximum step = 10, epsilon = 12, coarsen = false]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 --------------------------------------------------------------------
 
@@ -208,15 +216,17 @@
 key          "snap to grid"
 
 summary
-[[ This option enables the post-processing step |snap to grid|.]]
+[[
+This option enables the post-processing step |snap to grid|.
+]]
 
 documentation
 [[
-This key is the on/off-switch for the grid forces. The |snap to grid| option 
-triggers a form of post-processing were all vertices are pulled to the closest 
-point on a virtual grid. Please note that there is no repulsive force between 
-the vertices, so it is possible that two vertices are pulled to the same grid 
-point. The grid size is determined by the parameters |grid x length| and 
+This key is the on/off-switch for the grid forces. The |snap to grid| option
+triggers a form of post-processing were all vertices are pulled to the closest
+point on a virtual grid. Please note that there is no repulsive force between
+the vertices, so it is possible that two vertices are pulled to the same grid
+point. The grid size is determined by the parameters |grid x length| and
 |grid y length|.
 ]]
 
@@ -226,7 +236,7 @@
   \graph[social degree layout, iterations = 100, maximum time = 100, maximum step = 10]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 
 example
@@ -235,7 +245,7 @@
   \graph[social degree layout, iterations = 100, maximum time = 100, snap to grid =true, grid x length = 5mm, grid y length = 5mm, maximum step = 10]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 --------------------------------------------------------------------
 
@@ -245,13 +255,15 @@
 key          "grid x length"
 
 summary
-[[ This option determines the cell size in $x$ direction for the |snap to grid| 
-option.]]
+[[
+This option determines the cell size in $x$ direction for the |snap to grid|
+option.
+]]
 
 documentation
 [[
-The size of the cells of the virtual grid can be configured by the user. This 
-key allows a configuration of the horizontal cell width. 
+The size of the cells of the virtual grid can be configured by the user. This
+key allows a configuration of the horizontal cell width.
 ]]
 
 example
@@ -260,7 +272,7 @@
   \graph[social degree layout, iterations = 100, maximum time = 100, snap to grid =true, grid x length = 5mm, grid y length = 5mm, maximum step = 10]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  };   
+  };
 ]]
 
 example
@@ -269,7 +281,7 @@
   \graph[social degree layout, iterations = 100, maximum time = 100, snap to grid =true, grid x length = 9mm, grid y length = 5mm, maximum step = 10]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  };   
+  };
 ]]
 --------------------------------------------------------------------
 
@@ -279,8 +291,10 @@
 key          "grid y length"
 
 summary
-[[ This option determines the cell size in $x$ direction for the |snap to grid| 
-option.]]
+[[
+This option determines the cell size in $x$ direction for the |snap to grid|
+option.
+]]
 
 documentation
 [[
@@ -293,7 +307,7 @@
   \graph[social degree layout, iterations = 100, maximum time = 100, snap to grid =true, grid x length = 5mm, grid y length = 5mm, maximum step = 10]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  };  
+  };
 ]]
 
 example
@@ -302,7 +316,7 @@
   \graph[social degree layout, iterations = 100, maximum time = 100, snap to grid =true, grid x length = 5mm, grid y length = 9mm, maximum step = 10]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 --------------------------------------------------------------------
 
@@ -312,18 +326,18 @@
 
 summary
 [[
-    The mass of a vertex determines how fast it can move. Vertices 
-    with higher mass move slower.
+  The mass of a vertex determines how fast it can move. Vertices
+  with higher mass move slower.
 ]]
 
 documentation
 [[
-    The mass of a vertex determines how fast this vertex 
-    moves. Mass is directly inverse proportional to the distance the vertex 
-    moves. In contrast to the global speed factor, mass usually only affects a 
-    single vertex. A vertex with a higher mass will move slower if affected by 
-    the same mass than a vertex with a lower mass. By default, each vertex has a 
-    mass of $1$. 
+  The mass of a vertex determines how fast this vertex
+  moves. Mass is directly inverse proportional to the distance the vertex
+  moves. In contrast to the global speed factor, mass usually only affects a
+  single vertex. A vertex with a higher mass will move slower if affected by
+  the same mass than a vertex with a lower mass. By default, each vertex has a
+  mass of $1$.
 ]]
 
 example
@@ -332,7 +346,7 @@
   \graph[social degree layout, iterations = 100, maximum time = 100, maximum displacement per step = 10]{
     a1 -- {a2, a3, a4, a5},
     b1 -- {b2 -- {b3, b4}, b5}
-  };       
+  };
 ]]
 
 example
@@ -341,7 +355,7 @@
   \graph[social degree layout, iterations = 100, maximum time = 100, maximum displacement per step = 10]{
     a1 -- {a2, a3, a4, a5},
     b1[mass = 4] -- {b2 -- {b3, b4}, b5}
-  }; 
+  };
 ]]
 --------------------------------------------------------------------
 
@@ -351,13 +365,13 @@
 
 summary
 [[
-    The coarsening weight of a vertex determines when it will be 
-    coarsened.
+  The coarsening weight of a vertex determines when it will be
+  coarsened.
 ]]
 
 documentation
 [[
-    Vertices with higher coarsening weight are considered more important and 
-    will be coarsened later, or not at all.
+  Vertices with higher coarsening weight are considered more important and
+  will be coarsened later, or not at all.
 ]]
 --------------------------------------------------------------------

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceAbsoluteValue.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceAbsoluteValue.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceAbsoluteValue.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -7,9 +7,9 @@
 --
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
---- This is a subclass of ForceTemplate, which is used to implement forces 
--- that work on individual vertices. Forces of this kind simply add an 
--- absolute value set in the force data to each vertex' $x$ and $y$ coodinate
+--- This is a subclass of ForceTemplate, which is used to implement forces
+-- that work on individual vertices. Forces of this kind simply add an
+-- absolute value set in the force data to each vertex' $x$ and $y$ coordinate
 
 -- Imports
 local ForceTemplate = require "pgf.gd.force.jedi.base.ForceTemplate"
@@ -31,11 +31,11 @@
 end
 
 
--- This force class works on a vertex array that is part of the force data 
--- defined when adding the force. This array is copied into p. All vertices of 
--- the graph are saved in the local variable |ver|.  
+-- This force class works on a vertex array that is part of the force data
+-- defined when adding the force. This array is copied into p. All vertices of
+-- the graph are saved in the local variable |ver|.
 --
--- @param v The vertices of the graph we are trying to find a layout for. 
+-- @param v The vertices of the graph we are trying to find a layout for.
 
 function ForceAbsoluteValue:preprocess(v)
   self.ver = v
@@ -43,12 +43,12 @@
 end
 
 
--- Applying the force to the vertices and adding the effect to the passed net 
+-- Applying the force to the vertices and adding the effect to the passed net
 -- force array
--- 
--- @param data The parameters needed to aplly the force: The options table, 
---              the current time stamp, an array containing the summed up net 
---              forces
+--
+-- @param data The parameters needed to apply the force: The options table,
+--             the current time stamp, an array containing the summed up net
+--             forces
 
 function ForceAbsoluteValue:applyTo(data)
   -- locals for speed
@@ -61,13 +61,13 @@
   local time_fun = self.force.time_fun
 
   -- Evaluate time function
-  local time_factor = time_fun(t_max, t_now) 
+  local time_factor = time_fun(t_max, t_now)
   if time_factor == 0 then
     return
   end
 
   for _,v in ipairs(self.ver) do
-    for _, i in ipairs (self.p) do 
+    for _, i in ipairs (self.p) do
       -- Is the vertex in the list?
       if v.name == i then
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceCanvasDistance.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceCanvasDistance.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceCanvasDistance.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -8,9 +8,9 @@
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
 
---- This is a subclass of ForceTemplate, which is used to implement forces between 
--- vertex pairs. The forces depend on the canvas distance of the vertices in 
--- the pair. This class is e.~g.~ used for electric forces. 
+--- This is a subclass of ForceTemplate, which is used to implement forces between
+-- vertex pairs. The forces depend on the canvas distance of the vertices in
+-- the pair. This class is e.~g.~ used for electric forces.
 
 -- Imports
 local ForceTemplate = require "pgf.gd.force.jedi.base.ForceTemplate"
@@ -22,7 +22,7 @@
 local sqrt = math.sqrt
 local min = math.min
 
--- Implementation starts here: 
+-- Implementation starts here:
 local ForceCanvasDistance = lib.class { base_class = ForceTemplate }
 
 function ForceCanvasDistance:constructor ()
@@ -31,12 +31,12 @@
 end
 
 
--- This force class works on all pairwise disjoint vertex pairs. This 
--- function generates a new graph object containing all vertices from the 
--- original graph and arcs between all pairwise disjoint vertex pairs. The 
--- arcs-table of this new object will be saved in the variable |p|. 
--- 
---  @param v The vertices of the graph we are trying to find a layout for. 
+-- This force class works on all pairwise disjoint vertex pairs. This
+-- function generates a new graph object containing all vertices from the
+-- original graph and arcs between all pairwise disjoint vertex pairs. The
+-- arcs-table of this new object will be saved in the variable |p|.
+--
+-- @param v The vertices of the graph we are trying to find a layout for.
 
 function ForceCanvasDistance:preprocess(v)
   self.p = Preprocessing.allPairs(v)
@@ -43,12 +43,12 @@
 end
 
 
--- Applying the force to the vertices and adding the effect to the passed net 
+-- Applying the force to the vertices and adding the effect to the passed net
 -- force array
--- 
--- @param data The parameters needed to aplly the force: The options table, 
---              the current time stamp, an array containing the summed up net 
---              forces
+--
+-- @param data The parameters needed to apply the force: The options table,
+--             the current time stamp, an array containing the summed up net
+--             forces
 
 function ForceCanvasDistance:applyTo(data)
   -- locals for speed
@@ -68,7 +68,7 @@
   if time_factor == 0 then
     return
   end
-  
+
   if not fun_v then
     local data = { k = k, attributes = fw_attributes }
     for _, i in ipairs(p) do
@@ -103,7 +103,7 @@
         else
           x = min(cap, g)
         end
-        
+
         if h <= 0 then
           y = max(-cap, h)
         else
@@ -168,7 +168,7 @@
         else
           x_tail = min(cap, g_tail)
         end
-        
+
         if h_head <= 0 then
           y_head = max(-cap, h_head)
         else

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceCanvasPosition.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceCanvasPosition.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceCanvasPosition.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -8,9 +8,9 @@
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
 
---- This is a subclass of ForceTemplate, which is used to implement forces 
--- that work on individual vertices. The forces depend on the canvas position  
--- of the vertices. This class is e.~g.~ used for gravitational forces. 
+--- This is a subclass of ForceTemplate, which is used to implement forces
+-- that work on individual vertices. The forces depend on the canvas position
+-- of the vertices. This class is e.~g.~ used for gravitational forces.
 
 local ForceTemplate = require "pgf.gd.force.jedi.base.ForceTemplate"
 local lib = require "pgf.gd.lib"
@@ -30,11 +30,11 @@
 end
 
 
--- This force class works on individual vertices and only depends on their 
--- current position. Thus the vertex table of the current graph is simply 
--- copied to the variable |p|. 
--- 
---  @param v The vertices of the graph we are trying to find a layout for. 
+-- This force class works on individual vertices and only depends on their
+-- current position. Thus the vertex table of the current graph is simply
+-- copied to the variable |p|.
+--
+--  @param v The vertices of the graph we are trying to find a layout for.
 
 function ForceCanvasPosition:preprocess(v)
   self.p = v
@@ -41,12 +41,12 @@
 end
 
 
--- Applying the force to the vertices and adding the effect to the passed net 
+-- Applying the force to the vertices and adding the effect to the passed net
 -- force array
--- 
--- @param data The parameters needed to aplly the force: The options table, 
---              the current time stamp, an array containing the summed up net 
---              forces
+--
+-- @param data The parameters needed to apply the force: The options table,
+--             the current time stamp, an array containing the summed up net
+--             forces
 
 function ForceCanvasPosition:applyTo(data)
   --localize

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceGraphDistance.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceGraphDistance.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForceGraphDistance.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -8,9 +8,9 @@
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
 
---- This is a subclass of ForceTemplate, which is used to implement forces between 
--- vertex pairs. The forces depend on the graph distance of the vertices in 
--- the pair. This class is e.~g.~ used for spring forces. 
+--- This is a subclass of ForceTemplate, which is used to implement forces between
+-- vertex pairs. The forces depend on the graph distance of the vertices in
+-- the pair. This class is e.\,g.\ used for spring forces.
 
 
 local ForceTemplate = require "pgf.gd.force.jedi.base.ForceTemplate"
@@ -32,14 +32,14 @@
 end
 
 
--- This force class works on all pairwise disjoint vertex pairs connected by 
--- a path of length maximum $n$. The parameter $n$ is given by the engineer in 
--- the force declaration. This function generates a new graph object 
--- containing all vertices from the original graph and arcs between all 
--- pairwise disjoint vertex pairs. The arcs-table of this new object will be 
--- saved in the variable |p|. 
--- 
---  @param v The vertices of the graph we are trying to find a layout for. 
+-- This force class works on all pairwise disjoint vertex pairs connected by
+-- a path of length maximum $n$. The parameter $n$ is given by the engineer in
+-- the force declaration. This function generates a new graph object
+-- containing all vertices from the original graph and arcs between all
+-- pairwise disjoint vertex pairs. The arcs-table of this new object will be
+-- saved in the variable |p|.
+--
+--  @param v The vertices of the graph we are trying to find a layout for.
 
 function ForceGraphDistance:preprocess(v, a)
   self.p = Preprocessing.overExactlyNPairs(v, a, self.force.n)
@@ -46,12 +46,12 @@
 end
 
 
--- Applying the force to the vertices andadding the effect to the passed net 
+-- Applying the force to the vertices and adding the effect to the passed net
 -- force array
--- 
--- @param data The parameters needed to aplly the force: The options table, 
---              the current time stamp, an array containing the summed up net 
---              forces
+--
+-- @param data The parameters needed to apply the force: The options table,
+--             the current time stamp, an array containing the summed up net
+--             forces
 
 function ForceGraphDistance:applyTo(data)
   -- locals for speed
@@ -86,12 +86,12 @@
       local y = p2_pos.y - p1_pos.y
       local d = max(sqrt(x*x+y*y),0.1)
 
-      -- apply force function to distance and k (natural spring length) 
+      -- apply force function to distance and k (natural spring length)
       data.u = p2
       data.v = p1
       data.d = d
       local e = fun_u(data)
-      
+
       -- Include time function
       local f = e * time_factor / d
 
@@ -106,7 +106,7 @@
         else
           x = min(cap, g)
         end
-        
+
         if g <= 0 then
           y = max(-cap, h)
         else
@@ -147,7 +147,7 @@
       data.d = d
       local e_head = fun_u(data)
       local e_tail = fun_v(data)
-      
+
       -- Include time function
       local f_head = time_factor * e_head / d
       local f_tail = time_factor * e_tail / d
@@ -172,7 +172,7 @@
         else
           x_tail = min(cap, g_tail)
         end
-        
+
         if h_head <= 0 then
           y_head = max(-cap, h_head)
         else

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForcePullToGrid.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForcePullToGrid.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForcePullToGrid.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -8,12 +8,12 @@
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
 
---- This is a subclass of ForceTemplate, which is used to implement forces 
--- that work on individual vertices and pulls them to a virtual grid with 
--- cells of the size determined by the user options |grid x length| and 
--- |grid y length|. The forces depend on the canvas position  
--- of the vertices relative to th next grid point. This class is e.~g.~ used 
--- for the post-processing technique |snap to grid|. 
+--- This is a subclass of ForceTemplate, which is used to implement forces
+-- that work on individual vertices and pulls them to a virtual grid with
+-- cells of the size determined by the user options |grid x length| and
+-- |grid y length|. The forces depend on the canvas position
+-- of the vertices relative to th next grid point. This class is e.\,g.\ used
+-- for the post-processing technique |snap to grid|.
 
 
 -- Imports
@@ -40,11 +40,11 @@
   self.p = {}
 end
 
--- This force class works on individual vertices and only depends on their 
--- current position. Thus the vertex table of the current graph is simply 
--- copied to the variable |p|. 
--- 
---  @param v The vertices of the graph we are trying to find a layout for. 
+-- This force class works on individual vertices and only depends on their
+-- current position. Thus the vertex table of the current graph is simply
+-- copied to the variable |p|.
+--
+--  @param v The vertices of the graph we are trying to find a layout for.
 
 function ForcePullToGrid:preprocess(v)
   self.p = v
@@ -51,11 +51,11 @@
 end
 
 
--- Applying the force to the vertices andadding the effect to the passed net 
+-- Applying the force to the vertices and adding the effect to the passed net
 -- force array
--- 
--- @param data The parameters needed to aplly the force: The options table, 
---              the current time stamp, an array containing the summed up net 
+--
+-- @param data The parameters needed to apply the force: The options table,
+--              the current time stamp, an array containing the summed up net
 --              forces
 
 function ForcePullToGrid:applyTo(data)
@@ -71,7 +71,7 @@
   local length = 5--self.options["node distance"]
 
   -- Evaluate time function
-  local time_factor = time_fun(t_max, t_now) 
+  local time_factor = time_fun(t_max, t_now)
   if time_factor == 0 then
     return
   end
@@ -89,7 +89,7 @@
     local l = -d/(length*length)
 
     -- Include time function
-    local h = l * time_factor 
+    local h = l * time_factor
 
     -- scale effect according to direction
     local f = x * h
@@ -102,7 +102,7 @@
       else
         x = min(cap, f)
       end
-        
+
       if g <= 0 then
         y = max(-cap, g)
       else

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForcePullToPoint.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForcePullToPoint.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/forcetypes/ForcePullToPoint.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -7,11 +7,11 @@
 --
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
---- This is a subclass of ForceTemplate, which is used to implement forces 
--- that work on individual vertices and pulls them to a specific point on the 
--- canvas. This point is given by the |desired at| option. The forces depend 
--- on the canvas position of the vertices relative to the canvas point it is 
--- pulled to. 
+--- This is a subclass of ForceTemplate, which is used to implement forces
+-- that work on individual vertices and pulls them to a specific point on the
+-- canvas. This point is given by the |desired at| option. The forces depend
+-- on the canvas position of the vertices relative to the canvas point it is
+-- pulled to.
 
 
 -- Imports
@@ -33,17 +33,17 @@
   self.p = {}
 end
 
--- This force class works on individual vertices and depends on their 
--- current position as well as the point it is desired at. Thus all vertices 
--- where the |desired at| option is set are added to the table |p| together 
--- with the point where they are wanted.  
--- 
---  @param v The vertices of the graph we are trying to find a layout for. 
+-- This force class works on individual vertices and depends on their
+-- current position as well as the point it is desired at. Thus all vertices
+-- where the |desired at| option is set are added to the table |p| together
+-- with the point where they are wanted.
+--
+--  @param v The vertices of the graph we are trying to find a layout for.
 
 function ForcePullToPoint:preprocess(v)
   for _,vertex in ipairs(v) do
     if vertex.options then
-      local da = vertex.options["desired at"] 
+      local da = vertex.options["desired at"]
         if da then
           self.p[vertex]= {da}
       end
@@ -52,12 +52,12 @@
 end
 
 
--- Applying the force to the vertices andadding the effect to the passed net 
+-- Applying the force to the vertices and adding the effect to the passed net
 -- force array
--- 
--- @param data The parameters needed to aplly the force: The options table, 
---              the current time stamp, an array containing the summed up net 
---              forces
+--
+-- @param data The parameters needed to apply the force: The options table,
+--             the current time stamp, an array containing the summed up net
+--             forces
 
 function ForcePullToPoint:applyTo(data)
   -- locals for speed
@@ -69,7 +69,7 @@
   local time_fun = self.force.time_fun
 
   -- Evaluate time function
-  local time_factor = time_fun(t_max, t_now) 
+  local time_factor = time_fun(t_max, t_now)
   if time_factor == 0 then
     return
   end
@@ -85,7 +85,7 @@
     local d = max(sqrt(x*x+y*y),0.1)
 
     -- Include time function
-    local h = d * time_factor 
+    local h = d * time_factor
 
     -- scale effect according to direction
     local f = x * h
@@ -98,7 +98,7 @@
       else
         x = min(cap, f)
       end
-        
+
       if g <= 0 then
         y = max(-cap, g)
       else

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/CircularInitialPositioning.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/CircularInitialPositioning.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/CircularInitialPositioning.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -7,7 +7,7 @@
 --
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
---- This class implements an inital position algorithm for graph drawing, placing the vertices on  
+--- This class implements an initial position algorithm for graph drawing, placing the vertices on
 -- a circle with th radius given by the |radius| key
 local declare = require "pgf.gd.interface.InterfaceToAlgorithms".declare
 local InitialTemplate = require "pgf.gd.force.jedi.base.InitialTemplate"
@@ -21,7 +21,7 @@
   key = "circular initial position",
   algorithm = CircularInitialPositioning,
   phase = "initial positioning force framework",
-  phase_default = true 
+  phase_default = true
 }
 
 -- Implementation starts here:
@@ -33,7 +33,7 @@
 function CircularInitialPositioning:run()
   -- locals for speed
   local vertices = self.vertices
-  local tmp =  (self.options["node pre sep"] + self.options["node post sep"]) + 
+  local tmp =  (self.options["node pre sep"] + self.options["node post sep"]) +
     (self.options["sibling pre sep"] + self.options["sibling post sep"])
   local min_radius = tmp * #self.vertices/2/math.pi
   local radius = math.max(self.options.radius, min_radius)

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/GridInitialPositioning.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/GridInitialPositioning.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/GridInitialPositioning.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -7,8 +7,8 @@
 --
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
---- This class implements an inital position algorithm for graph drawing, placing the vertices on  
--- a grid with square cells with width |node distance|
+--- This class implements an initial position algorithm for graph drawing,
+-- placing the vertices on a grid with square cells with width |node distance|
 local declare = require "pgf.gd.interface.InterfaceToAlgorithms".declare
 local InitialTemplate = require "pgf.gd.force.jedi.base.InitialTemplate"
 local lib = require "pgf.gd.lib"
@@ -45,7 +45,7 @@
     if placed[vertex] == nil then
       if i <= (y/dist+1)*n then
         x = x + dist
-      else 
+      else
         x = 0
         y = y + dist
       end

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/RandomInitialPositioning.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/RandomInitialPositioning.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/initialpositioning/RandomInitialPositioning.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -7,8 +7,8 @@
 --
 -- See the file doc/generic/pgf/licenses/LICENSE for more information
 
---- This class implements an inital position algorithm for graph drawing, placing the vertices at 
--- random positions.
+--- This class implements an initial position algorithm for graph drawing,
+-- placing the vertices at random positions.
 local declare = require "pgf.gd.interface.InterfaceToAlgorithms".declare
 local InitialTemplate = require "pgf.gd.force.jedi.base.InitialTemplate"
 local lib = require "pgf.gd.lib"
@@ -30,7 +30,7 @@
 
 function RandomInitialPositioning:run()
   -- locals for speed
-  local random = math.random
+  local random = lib.random
   local vertices = self.vertices
   local desired_vertices = self.desired_vertices
   -- place vertices where the |desired at | option has been set first
@@ -39,7 +39,7 @@
   for _, vertex in ipairs(vertices) do
     -- place all other vertices with respect to the one already placed
     if placed[vertex] == nil then
-      p = vertex.pos 
+      p = vertex.pos
       p.x = 100 * random() + centroid_x
       p.y = 100 * random() + centroid_y
     end
@@ -46,4 +46,4 @@
   end
 end
 
-return RandomInitialPositioning
\ No newline at end of file
+return RandomInitialPositioning

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/library.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/library.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/jedi/library.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -9,14 +9,14 @@
 
 
 --- The library providing the graph drawing framework Jedi
--- This labrary requires all graph drawing algorithms and inital 
--- positioning algorithms provided with the first release of Jedi. 
--- It also defines the mass key attached to all vertices. 
+-- This library requires all graph drawing algorithms and initial
+-- positioning algorithms provided with the first release of Jedi.
+-- It also defines the mass key attached to all vertices.
 
 -- Library name
 local jedi
 
--- require inital positioning algorithms
+-- require initial positioning algorithms
 require "pgf.gd.force.jedi.initialpositioning.CircularInitialPositioning"
 require "pgf.gd.force.jedi.initialpositioning.RandomInitialPositioning"
 require "pgf.gd.force.jedi.initialpositioning.GridInitialPositioning"
@@ -101,7 +101,7 @@
   key = "mass",
   type = "number",
   initial = "1",
-  
+
   documentation_in = "pgf.gd.force.jedi.doc"
 }
 
@@ -110,6 +110,6 @@
   key = "coarsening weight",
   type = "number",
   initial = "1",
-  
+
   documentation_in = "pgf.gd.force.jedi.doc"
 }

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/library.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/library.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/force/library.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -24,43 +24,43 @@
 -- When you start thinking about for a moment, it turns out that there
 -- are endless variations of the force model. All of these models have
 -- the following in common, however:
+-- %
 -- \begin{itemize}
--- \item ``Forces'' pull and push at the nodes in different
---   directions.
--- \item The effect of these forces is simulated by iteratively moving
---   all the nodes simultaneously a little in the direction of the forces
---   and by then recalculating the forces.
--- \item The iteration is stopped either after a certain number of
---   iterations or when a \emph{global energy minimum} is reached (a very
---   scientific way of saying that nothing happens anymore). 
+--   \item ``Forces'' pull and push at the nodes in different directions.
+--   \item The effect of these forces is simulated by iteratively moving
+--     all the nodes simultaneously a little in the direction of the forces
+--     and by then recalculating the forces.
+--   \item The iteration is stopped either after a certain number of
+--     iterations or when a \emph{global energy minimum} is reached (a very
+--     scientific way of saying that nothing happens anymore).
 -- \end{itemize}
 --
 -- The main difference between the different force-based approaches is
 -- how the forces are determined. Here are some ideas what could cause a
 -- force to be exerted between two nodes (and there are more):
+-- %
 -- \begin{itemize}
--- \item If the nodes are connected by an edge, one can treat the edge as
---   a ``spring'' that has a ``natural spring dimension.'' If the nodes
---   are nearer than the spring dimension, they are push apart; if they
---   are farther aways than the spring dimension, they are pulled
---   together.
--- \item If two nodes are connected by a path of a certain length, the
---   nodes may ``wish to be at a distance proportional to the path
---   length''. If they are nearer, they are pushed apart; if they are
---   farther, they are pulled together. (This is obviously a
---   generalization of the previous idea.)
--- \item There may be a general force field that pushes nodes apart (an
---   electrical field), so that nodes do not tend to ``cluster''.
--- \item There may be a general force field that pulls nodes together (a
---   gravitational field), so that nodes are not too loosely scattered.
--- \item There may be highly nonlinear forces depending on the distance of
---   nodes, so that nodes very near to each get pushed apart strongly,
---   but the effect wears of rapidly at a distance. (Such forces are
---   known as strong nuclear forces.)
--- \item There rotational forces caused by the angles between the edges
---   leaving a node. Such forces try to create a \emph{perfect angular
---   resolution} (a very scientific way of saying that all angles
---   at a node are equal).
+--   \item If the nodes are connected by an edge, one can treat the edge as
+--     a ``spring'' that has a ``natural spring dimension''. If the nodes
+--     are nearer than the spring dimension, they are push apart; if they
+--     are farther aways than the spring dimension, they are pulled together.
+--   \item If two nodes are connected by a path of a certain length, the
+--     nodes may ``wish to be at a distance proportional to the path
+--     length''. If they are nearer, they are pushed apart; if they are
+--     farther, they are pulled together. (This is obviously a
+--     generalization of the previous idea.)
+--   \item There may be a general force field that pushes nodes apart (an
+--     electrical field), so that nodes do not tend to ``cluster''.
+--   \item There may be a general force field that pulls nodes together (a
+--     gravitational field), so that nodes are not too loosely scattered.
+--   \item There may be highly nonlinear forces depending on the distance of
+--     nodes, so that nodes very near to each get pushed apart strongly,
+--     but the effect wears of rapidly at a distance. (Such forces are
+--     known as strong nuclear forces.)
+--   \item There rotational forces caused by the angles between the edges
+--     leaving a node. Such forces try to create a \emph{perfect angular
+--     resolution} (a very scientific way of saying that all angles
+--     at a node are equal).
 -- \end{itemize}
 --
 -- Force-based algorithms combine one or more of the above ideas into a
@@ -70,33 +70,33 @@
 -- Currently, three algorithms are implemented in this library, two of
 -- which are from the first of the following paper, while the third is
 -- from the third paper:
---
+-- %
 -- \begin{itemize}
--- \item
---   Y. Hu.
---   \newblock Efficient, high-quality force-directed graph drawing.
---   \newblock \emph{The Mathematica Journal}, 2006.
--- \item
---   C. Walshaw.
---   \newblock A multilevel algorithm for force-directed graph
---   drawing.
---   \newblock In J. Marks, editor, \emph{Graph Drawing}, Lecture Notes in
---   Computer Science, 1984:31--55, 2001. 
+--   \item
+--     Y. Hu.
+--     \newblock Efficient, high-quality force-directed graph drawing.
+--     \newblock \emph{The Mathematica Journal}, 2006.
+--   \item
+--     C. Walshaw.
+--     \newblock A multilevel algorithm for force-directed graph
+--     drawing.
+--     \newblock In J. Marks, editor, \emph{Graph Drawing}, Lecture Notes in
+--     Computer Science, 1984:31--55, 2001.
 -- \end{itemize}
 --
 -- Our implementation is described in detail in the following
 -- diploma thesis:
---
+-- %
 -- \begin{itemize}
--- \item
---   Jannis Pohlmann,
---   \newblock \emph{Configurable Graph Drawing Algorithms
---     for the \tikzname\ Graphics Description Language,}
---   \newblock Diploma Thesis,
---   \newblock Institute of Theoretical Computer Science, Univerist\"at
---   zu L\"ubeck, 2011.\\[.5em]
---   \newblock Online at 
---   \url{http://www.tcs.uni-luebeck.de/downloads/papers/2011/}\\ \url{2011-configurable-graph-drawing-algorithms-jannis-pohlmann.pdf}
+--   \item
+--     Jannis Pohlmann,
+--     \newblock \emph{Configurable Graph Drawing Algorithms
+--       for the \tikzname\ Graphics Description Language,}
+--     \newblock Diploma Thesis,
+--     \newblock Institute of Theoretical Computer Science, Universit\"at
+--       zu L\"ubeck, 2011.\\[.5em]
+--     \newblock Online at
+--       \url{http://www.tcs.uni-luebeck.de/downloads/papers/2011/}\\ \url{2011-configurable-graph-drawing-algorithms-jannis-pohlmann.pdf}
 -- \end{itemize}
 --
 -- In the future, I hope that most, if not all, of the force-based

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceCore.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceCore.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceCore.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,7 +18,7 @@
 -- |InterfaceToDisplay| use, in particular, the data structures
 -- provided by this class.
 --
--- @field binding This field stores the ``binding.'' The graph drawing
+-- @field binding This field stores the ``binding''. The graph drawing
 -- system is ``bound'' to the display layer through such a binding (a
 -- subclass of |Binding|). Such a binding can be thought of as a
 -- ``driver'' in operating systems terminology: It is a small set of
@@ -28,7 +28,7 @@
 -- completely new Lua instance.
 --
 -- @field scopes This is a stack of graph drawing scopes. All
--- interface methods refer to the top of this stack. 
+-- interface methods refer to the top of this stack.
 --
 -- @field collection_kinds This table stores which collection kinds
 -- have been defined together with their properties.
@@ -59,7 +59,7 @@
 
   -- The phase kinds
   phase_kinds         = {},
-  
+
   -- Internals for handling the options stack
   option_stack        = {},
   option_cache_height = nil,
@@ -186,6 +186,6 @@
 end
 
 
--- Done 
+-- Done
 
 return InterfaceCore

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToAlgorithms.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToAlgorithms.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToAlgorithms.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -15,13 +15,13 @@
 -- This class provides the interface between the graph drawing system
 -- and algorithms. Another class, |InterfaceToDisplay|, binds the
 -- display layers (like \tikzname\ or a graph drawing editor) to the
--- graph drawing system ``from the other side''. 
+-- graph drawing system ``from the other side''.
 --
 -- The functions declared here can be used by algorithms to
 -- communicate with the graph drawing system, which will usually
 -- forward the ``requests'' of the algorithms to the display layers in
 -- some way. For instance, when you declare a new parameter, this
--- parameter will become available on the display layer. 
+-- parameter will become available on the display layer.
 
 local InterfaceToAlgorithms = {}
 
@@ -58,7 +58,7 @@
 -- registered handler, we call the |test| function. If it returns
 -- neither |nil| nor |false|, the |handler| field of this handler is
 -- called. If it returns |true|, the handler immediately
--- finishes. Otherwise, the next handler is tried. 
+-- finishes. Otherwise, the next handler is tried.
 
 function InterfaceToAlgorithms.addHandler(test, handler)
   table.insert(declare_handlers, 1, { test = test, handler = handler })
@@ -76,7 +76,7 @@
 -- for use on the display layer. There is just one function for
 -- handling all declarations in order to make the declarations
 -- easy-to-use since you just need to import a single function:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --local declare = require "pgf.gd.interface.InterfaceToAlgorithms".declare
 --\end{codeexample}
@@ -84,11 +84,11 @@
 -- You can now use |declare| it as follows: You pass it a table
 -- containing information about the to-be-declared key. The table
 -- \emph{must} have a field |key| whose value is unique and must be a
--- string. If the value of |key| is, say, |"foo"|, the 
--- parameter can be set on the display layer such as, say, the 
+-- string. If the value of |key| is, say, |"foo"|, the
+-- parameter can be set on the display layer such as, say, the
 -- \tikzname\ layer, using |/graph drawing/foo|. Here is a typical
--- example of how a declaration is done: 
---
+-- example of how a declaration is done:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- ---
 -- declare {
@@ -126,7 +126,7 @@
 -- faster to read (both for humans and for computers). Second, for C
 -- code, it is quite inconvenient to have long strings inside a C
 -- file. In such cases, you can use the |documentation_in| field:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- ---
 -- declare {
@@ -138,7 +138,7 @@
 --\end{codeexample}
 --
 -- The |some_filename| must be the name of a Lua file that will be
--- read ``on demand,'' that is, whenever someone tries to access the
+-- read ``on demand'', that is, whenever someone tries to access the
 -- documentation, summary, or examples field of the key, this file
 -- will be loaded using |require|. The file should then use
 -- |pgf.gd.doc| to install the missing information in the keys.
@@ -146,14 +146,15 @@
 -- \medskip\noindent\textbf{The Use Field.}
 -- When you declare a key, you can provide a |use| field. If present,
 -- you must set it to an array of small tables which have two fields:
+-- %
 -- \begin{itemize}
--- \item |key| This is the name of another key or a function.
--- \item |value| This is either a value (like a string or a number) or
---   a function or |nil|.
+--   \item |key| This is the name of another key or a function.
+--   \item |value| This is either a value (like a string or a number) or
+--     a function or |nil|.
 -- \end{itemize}
 --
 -- Here is an example:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- ---
 -- declare {
@@ -176,8 +177,8 @@
 -- the array had been set explicitly to the value given by the |value|
 -- field. If the |value| is a function, we pass a different value to
 -- the key, namely the result of applying the function to the value
--- originally passed to the original key. Here is a typical example: 
---
+-- originally passed to the original key. Here is a typical example:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- ---
 -- declare {
@@ -193,7 +194,7 @@
 --
 -- Just like the value, the key itself can also be a function. In this
 -- case, the to-be-used key is also computed by applying the function
--- to the value passed to the original key. 
+-- to the value passed to the original key.
 --
 -- As mentioned at the beginning, |declare| is a work-horse that will call
 -- different internal functions depending on whether you declare a
@@ -209,7 +210,7 @@
 
 function InterfaceToAlgorithms.declare (t)
   local keys = InterfaceCore.keys
-  
+
   -- Sanity check:
   assert (type(t.key) == "string" and t.key ~= "", "parameter key may not be the empty string")
   if keys[t.key] or t.keys == "algorithm_phases" then
@@ -219,7 +220,7 @@
   for _,h in ipairs (declare_handlers) do
     if h.test(t) then
       if h.handler(t) then
-	break
+        break
       end
     end
   end
@@ -226,7 +227,7 @@
 
   -- Attach metatable:
   setmetatable (t, key_metatable)
-    
+
   -- Set!
   keys[t.key]     = t
   keys[#keys + 1] = t
@@ -246,10 +247,10 @@
 
 
 ---
--- This function is called by |declare| for ``normal parameter keys,''
+-- This function is called by |declare| for ``normal parameter keys'',
 -- which are all keys for which no special field like |algorithm| or
 -- |layer| is declared. You write
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- ---
 -- declare {
@@ -266,6 +267,7 @@
 -- When an author writes |my node[electrical charge=5-3]| in the
 -- description of her graph, the object |vertex| corresponding to the
 -- node |my node| will have a field |options| attached to it with
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --vertex.options["electrical charge"] == 2
 --\end{codeexample}
@@ -273,40 +275,40 @@
 -- The |type| field does not refer to Lua types. Rather, these types are
 -- sensible types for graph drawing and they are mapped by the higher
 -- layers to Lua types. In detail, the following types are available:
---
+-- %
 -- \begin{itemize}
--- \item |number| A dimensionless number. Will be mapped to a normal
--- Lua |number|. So, when the author writes |foo=5*2|, the |foo| key
--- of the |options| field of the corresponding object will be set to
--- |10.0|.
--- \item |length| A ``dimension'' in the sense of \TeX\ (a number with
--- a dimension like |cm| attached to it). It is the job of the display
--- layer to map this to a number in ``\TeX\ points,'' that is, to a
--- multiple of $1/72.27$th of an inch.
--- \item |time| A ``time'' in the sense of |\pgfparsetime|. Examples
--- are |6s| or |0.1min| or |6000ms|, all of which will map to |6|. 
--- \item |string| Some text. Will be mapped to a Lua |string|.
--- \item |canvas coordinate| A position on the canvas. Will be mapped
--- to a |model.Coordinate|.
--- \item |boolean| A Boolean value.
--- \item |raw| Some to-be-executed Lua text.
--- \item |direction| Normally, an angle; however,
--- the special values of |down|, |up|, |left|, |right| as well as the
--- directions |north|, |north west|, and so on are also legal on the
--- display layer. All of them will be mapped to a number. Furthermore,
--- a vertical bar (\verb!|!) will be mapped to |-90| and a minus sign
--- (|-|) will be mapped to |0|.
--- \item |hidden| A key of this type ``cannot be set,'' that is,
--- users cannot set this key at all. However algorithms can still read
--- this key and, through the use of |alias|, can use the key as a
--- handle to another key.
--- \item |user value| The key stores a Lua user value (userdata). Such
--- keys can only be set from C since user values cannot be created in
--- Lua (let alone in \tikzname).
+--   \item |number| A dimensionless number. Will be mapped to a normal
+--     Lua |number|. So, when the author writes |foo=5*2|, the |foo| key
+--     of the |options| field of the corresponding object will be set to
+--     |10.0|.
+--   \item |length| A ``dimension'' in the sense of \TeX\ (a number with
+--     a dimension like |cm| attached to it). It is the job of the display
+--     layer to map this to a number in ``\TeX\ points'', that is, to a
+--     multiple of $1/72.27$th of an inch.
+--   \item |time| A ``time'' in the sense of |\pgfparsetime|. Examples
+--     are |6s| or |0.1min| or |6000ms|, all of which will map to |6|.
+--   \item |string| Some text. Will be mapped to a Lua |string|.
+--   \item |canvas coordinate| A position on the canvas. Will be mapped
+--     to a |model.Coordinate|.
+--   \item |boolean| A Boolean value.
+--   \item |raw| Some to-be-executed Lua text.
+--   \item |direction| Normally, an angle; however,
+--     the special values of |down|, |up|, |left|, |right| as well as the
+--     directions |north|, |north west|, and so on are also legal on the
+--     display layer. All of them will be mapped to a number. Furthermore,
+--     a vertical bar (\verb!|!) will be mapped to |-90| and a minus sign
+--     (|-|) will be mapped to |0|.
+--   \item |hidden| A key of this type ``cannot be set'', that is,
+--     users cannot set this key at all. However algorithms can still read
+--     this key and, through the use of |alias|, can use the key as a
+--     handle to another key.
+--   \item |user value| The key stores a Lua user value (userdata). Such
+--     keys can only be set from C since user values cannot be created in
+--     Lua (let alone in \tikzname).
 -- \end{itemize}
 --
 -- If the |type| field is missing, it is automatically set to
--- |"string"|. 
+-- |"string"|.
 --
 -- A parameter can have an |initial| value. This value will be used
 -- whenever the parameter has not been set explicitly for an object.
@@ -316,7 +318,7 @@
 -- no value is provided. For a key of type |"boolean"|, if no
 -- |default| is provided, |"true"| will be used automatically.
 --
--- A parameter can habe an |alias| field. This field must be set to
+-- A parameter can have an |alias| field. This field must be set to
 -- the name of another key or to a function. Whenever you access the
 -- current key and this key is not set, the |alias| key is tried
 -- instead. If it is  set, its value will be returned (if the |alias|
@@ -324,7 +326,7 @@
 -- alias is not set either and neither does it have an initial value,
 -- the |initial| value is used. Note that in case the alias has its
 -- |initial| field set, the |initial| value of the current key will
--- never be used. 
+-- never be used.
 --
 -- The main purpose of the current key is to allow algorithms to
 -- introduce their own terminology for keys while still having access
@@ -332,7 +334,7 @@
 -- class uses the name |layerDistance| for what would be called
 -- |level distance| in the rest of the graph drawing system. In this
 -- case, we can declare the |layerDistance| key as follows:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- declare {
 --   key     = "layerDistance",
@@ -349,7 +351,7 @@
 --
 -- Note that there is a difference between |alias| and the |use|
 -- field: Suppose we write
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- declare {
 --   key     = "layerDistance",
@@ -366,7 +368,7 @@
 --
 -- If the alias is a function, it will be called with the option table
 -- as its parameter. You can thus say things like
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- declare {
 --   key     = "layerDistance",
@@ -377,9 +379,9 @@
 -- }
 --\end{codeexample}
 --
--- As a special curtesy to C code, you can also set the key
+-- As a special courtesy to C code, you can also set the key
 -- |alias_function_string|, which allows you to put the function into
--- a string that is read using |loadstring|. 
+-- a string that is read using |loadstring|.
 --
 -- (You cannot call this function directly, it is included for
 -- documentation purposes only.)
@@ -389,36 +391,36 @@
 local function declare_parameter (t)
 
   t.type = t.type or "string"
-  
+
   if t.type == "boolean" and t.default == nil then
     t.default = true
   end
-  
+
   -- Normal key
   assert (type(t.type) == "string", "key type must be a string")
-  
+
   -- Declare via the hub:
-  if t.type ~= "hidden" then 
+  if t.type ~= "hidden" then
     InterfaceCore.binding:declareCallback(t)
-  
+
     -- Handle initials:
     if t.initial then
       InterfaceCore.option_initial[t.key] = InterfaceCore.convert(t.initial, t.type)
     end
   end
-  
+
   if t.alias_function_string and not t.alias then
     local count = 0
     t.alias = load (
       function ()
- 	count = count + 1
- 	if count == 1 then
- 	  return "return "
- 	elseif count == 2 then
- 	  return t.alias_function_string
- 	else
- 	  return nil
- 	end
+        count = count + 1
+        if count == 1 then
+          return "return "
+        elseif count == 2 then
+          return t.alias_function_string
+        else
+          return nil
+        end
       end)()
   end
 
@@ -435,16 +437,17 @@
 
 ---
 -- This function is called by |declare| for ``algorithm
--- keys.'' These keys are normally used without a value as in just
+-- keys''. These keys are normally used without a value as in just
 -- |\graph[tree layout]|, but you can optionally pass a value to
 -- them. In this case, this value must be the name of a \emph{phase}
 -- and the algorithm of this phase will be set (and not the
 -- default phase of the key), see the description of phases below for
--- details. 
+-- details.
 --
 -- Algorithm keys are detected by the presence of the field |algorithm|
 -- in the table |t| passed to |declare|. Here is an example of how it
 -- is used:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- local ReingoldTilford1981 = {}
 --
@@ -497,7 +500,7 @@
 -- drawing engine which ``phase'' of the graph drawing process your
 -- option applies to. Each time you select an algorithm later on
 -- through use of the algorithm's key, the algorithm for this phase
--- will be set; algorithms of other phases will not be changed. 
+-- will be set; algorithms of other phases will not be changed.
 -- For instance, when an algorithm is part of the spanning tree
 -- computation, its phase will be |"spanning tree computation"| and
 -- using its key does not change the main algorithm, but only the
@@ -505,7 +508,7 @@
 -- current graph (in case this is needed by the main algorithm). In
 -- case the |phase| field is missing, the phase |main| is used. Thus,
 -- when no phase field is given, the key will change the main
--- algorithm used to draw the graph. 
+-- algorithm used to draw the graph.
 --
 -- Later on, the algorithm set for the current phase can be accessed
 -- through the special |algorithm_phases| field of |options|
@@ -519,12 +522,12 @@
 --
 -- The following example shows the declaration of an algorithm that is
 -- the default for the phase |"spanning tree computation"|:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- ---
 -- declare {
 --   key = "breadth first spanning tree",
---   algorithm = { 
+--   algorithm = {
 --     run =
 --       function (self)
 --         return SpanningTreeComputation.computeSpanningTree(self.ugraph, false, self.events)
@@ -538,7 +541,7 @@
 --
 -- The algorithm is called as follows during a run of the main
 -- algorithms:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- local graph = ... -- the graph object
 -- local spanning_algorithm_class = graph.options.algorithm_phases["spanning tree computation"]
@@ -567,7 +570,7 @@
 local function declare_algorithm (t)
   -- Algorithm declaration!
   assert(type(t.algorithm) == "table" or type(t.algorithm) == "string")
-  
+
   t.phase = t.phase or "main"
 
   local function make_class ()
@@ -578,7 +581,7 @@
     else
       class = lib.class(require(t.algorithm))
     end
-      
+
     -- Now, save pre- and postconditions
     class.preconditions  = t.preconditions or {}
     class.postconditions = t.postconditions or {}
@@ -602,26 +605,26 @@
 
   -- Save in the algorithm_classes table:
   InterfaceCore.algorithm_classes[t.key] = store_me
-  
+
   assert(t.type == nil, "type may not be set for an algorithm key")
   t.type = "string"
-  
+
   -- Install!
   InterfaceCore.binding:declareCallback(t)
-  
+
   if t.phase_default then
     assert (not InterfaceCore.option_initial.algorithm_phases[t.phase],
-	    "default algorithm for phase already set")
+        "default algorithm for phase already set")
     assert (type(store_me) == "table",
-	    "default algorithms must be loaded immediately")
+        "default algorithms must be loaded immediately")
     InterfaceCore.option_initial.algorithm_phases[t.phase] = store_me
     InterfaceCore.option_initial.algorithm_phases[t.phase .. " stack"] = { store_me }
   else
     InterfaceCore.option_initial.algorithm_phases[t.phase .. " stack"] = {
       dummy = true -- Remove once Lua Link Bug is fixed
-    } 
-  end 
-  
+    }
+  end
+
   return true
 end
 
@@ -629,8 +632,8 @@
 
 
 ---
--- This function is called by |declare| for ``collection kinds.'' They
--- are detected by the presence of the field |layer| 
+-- This function is called by |declare| for ``collection kinds''. They
+-- are detected by the presence of the field |layer|
 -- in the table |t| passed to |declare|. See the class |Collection|
 -- for details on what a collection and a collection kind is.
 --
@@ -637,22 +640,24 @@
 -- The |key| field of the table |t| passed to this function is both
 -- the name of the to-be-declared collection kind as well as the key
 -- that is used on the display layer to indicate that a node or edge
--- belongs to a collection. 
+-- belongs to a collection.
 --
 -- \medskip
 -- \noindent\textbf{The Display Layer.}
--- Let us first have a look at what happens on the display layer: 
+-- Let us first have a look at what happens on the display layer:
 -- A key |t.key| is setup on the display layer that, when used inside
 -- a graph drawing scope, starts a new collection of the specified
 -- kind. ``Starts'' means that all nodes and edges mentioned in the
 -- rest of the current option scope will belong to a new collection
--- of kind |t.key|. 
--- 
+-- of kind |t.key|.
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --declare { key = "hyper", layer = 1 }
 --\end{codeexample}
+-- %
 -- you can say on the \tikzname\ layer
---\begin{codeexample}[code only] 
+-- %
+--\begin{codeexample}[code only]
 -- \graph {
 --   a, b, c, d;
 --   { [hyper] a, b, c }
@@ -659,12 +664,12 @@
 --   { [hyper] b, c, d }
 -- };
 --\end{codeexample}
--- 
+--
 -- In this case, the nodes |a|, |b|, |c| will belong to a collection of
 -- kind |hyper|. The nodes |b|, |c|, and |d| will (also) belong to
 -- another collection of the same kind |hyper|. You can nest
 -- collections; in this case, nodes will belong to several
--- collections. 
+-- collections.
 --
 -- The effect of declaring a collection kind on the algorithm layer
 -- it, first of all, that |scope.collections| will have a field named
@@ -674,30 +679,30 @@
 -- hyperedges, each of which is a table with the following fields: The
 -- |vertices| and |edges| fields each contain arrays of all objects
 -- being part of the collection. The |sub| field is an array of
--- ``subcollections,'' that is, all collections that were started
+-- ``subcollections'', that is, all collections that were started
 -- inside another collection. (For the collection kinds |hyper| and
 -- |same layer| this makes no sense, but subgraphs could, for instance,
 -- be nested.)
--- 
+--
 -- \medskip
 -- \noindent\textbf{Rendering of Collections.}
 -- For some kinds of collections, it makes sense to \emph{render} them,
 -- but only after the graph drawing algorithm has run. For this
 -- purpose, the binding layer will use a callback for each collection
--- kind and each collection, see the |Binding| class for details. 
+-- kind and each collection, see the |Binding| class for details.
 -- Suppose, for instance, you would
 -- like hyperedges to be rendered. In this case, a graph drawing
 -- algorithm should iterate over all collections of type |hyper| and
 -- compute some hints on how to render the hyperedge and store this
 -- information in the |generated_options| table of the hyperedge. Then,
--- the binding layer will ask the dislay layer to run some some code
--- that is able to read key--value pairs passed to 
+-- the binding layer will ask the display layer to run some some code
+-- that is able to read key--value pairs passed to
 -- it (which are the key--value pairs of the |generated_options| table)
 -- and use this information to nicely draw the hyperedge.
 --
 -- The number |t.layer| determines in which order the different
 -- collection kinds are rendered.
--- 
+--
 -- The last parameter, the layer number, is used to specify the order
 -- in which the different collection kinds are rendered. The higher the
 -- number, the later the collection will be rendered. Thus, if there is
@@ -704,7 +709,7 @@
 -- a collection kind with layer number 10 and another with layer number
 -- 20, all collections of the first kind will be rendered first,
 -- followed by all collections of the second kind.
--- 
+--
 -- Collections whose layer kinds are non-negative get rendered
 -- \emph{after} the nodes and edges have already been rendered. In
 -- contrast, collections with a negative layer number get shown
@@ -712,7 +717,7 @@
 --
 -- (You cannot call this function directly, it is included for
 -- documentation purposes only.)
--- 
+--
 -- @param t The table originally passed to |declare|.
 
 local function declare_collection_kind (t)
@@ -722,11 +727,11 @@
   local kind  = t.key
   local kinds = InterfaceCore.collection_kinds
   local new_entry = { kind = kind, layer = layer }
-  
+
   -- Insert into table part:
   kinds[kind] = new_entry
 
-  -- Insert into array part:  
+  -- Insert into array part:
   local found
   for i=1,#kinds do
     if kinds[i].layer > layer or (kinds[i].layer == layer and kinds[i].kind > kind) then
@@ -736,7 +741,7 @@
   end
 
   kinds[#kinds+1] = new_entry
-  
+
   -- Bind
   InterfaceCore.binding:declareCallback(t)
 
@@ -808,22 +813,22 @@
 --
 -- For these reasons, the following happens, when a new vertex is
 -- created using the function:
---
+-- %
 -- \begin{enumerate}
--- \item The vertex is added to the syntactic digraph.
--- \item It is added to all layouts on the current layout stack. When
--- a graph drawing algorithm is run, it is not necessarily run on the
--- original syntactic digraph. Rather, a sequence / stack of nested
--- layouts may currently 
--- be processed and the vertex is added to all of them.
--- \item The vertex is added to both the |digraph| and the |ugraph| of
--- the current algorithm.
+--   \item The vertex is added to the syntactic digraph.
+--   \item It is added to all layouts on the current layout stack. When
+--     a graph drawing algorithm is run, it is not necessarily run on the
+--     original syntactic digraph. Rather, a sequence / stack of nested
+--     layouts may currently
+--     be processed and the vertex is added to all of them.
+--   \item The vertex is added to both the |digraph| and the |ugraph| of
+--    the current algorithm.
 -- \end{enumerate}
 --
 -- @param algorithm An algorithm for whose syntactic digraph the node
--- should be added  
+-- should be added
 -- @param init  A table of initial values for the node that is passed
--- to |Binding:createVertex|, see that function for details. 
+-- to |Binding:createVertex|, see that function for details.
 --
 -- @return The newly created node
 --
@@ -832,7 +837,7 @@
   -- Setup
   local scope = InterfaceCore.topScope()
   local binding = InterfaceCore.binding
-    
+
   -- Setup node
   if not init.name then
     init.name = "internal at gd@node@" .. unique_count
@@ -841,29 +846,29 @@
 
   -- Does vertex already exist?
   assert (not scope.node_names[name], "node already created")
-  
+
   if not init.shape or init.shape == "none" then
     init.shape = "rectangle"
   end
-  
+
   -- Call binding
   binding:createVertex(init)
-  
+
   local v = assert(scope.node_names[init.name], "internal node creation failed")
-  
+
   -- Add vertex to the algorithm's digraph and ugraph
-  algorithm.syntactic_component:add {v}  
-  algorithm.digraph:add {v}  
+  algorithm.syntactic_component:add {v}
+  algorithm.digraph:add {v}
   algorithm.ugraph:add {v}
-  
-  -- Compute bounding boxes:  
+
+  -- Compute bounding boxes:
   LayoutPipeline.prepareBoundingBoxes(algorithm.rotation_info, algorithm.adjusted_bb, algorithm.digraph, {v})
-  
+
   -- Add the node to the layout stack:
   add_to_collections(algorithm.layout, "vertices", v)
 
   algorithm.layout_graph:add { v }
-  
+
   return v
 end
 
@@ -873,40 +878,41 @@
 -- Generate a new edge in the syntactic digraph. This method is quite
 -- similar to |createVertex| and has the same effects with respect to
 -- the edge: The edge is added to the syntactic digraph and also to
--- all layouts on the layout stack. Forthermore, appropriate edges are
+-- all layouts on the layout stack. Furthermore, appropriate edges are
 -- added to the |digraph| and the |ugraph| of the algorithm currently
--- running. 
+-- running.
 --
--- @param algorithm An algorithm for whose syntactic digraph the node should be added 
+-- @param algorithm An algorithm for whose syntactic digraph the node should be added
 -- @param tail A syntactic tail vertex
 -- @param head A syntactic head vertex
 -- @param init A table of initial values for the edge.
 --
 -- The following fields are useful for |init|:
+-- %
 -- \begin{itemize}
--- \item |init.direction| If present, a direction for the edge. Defaults to "--".
--- \item |init.options| If present, some options for the edge.
--- \item |init.generated_options| A table that is passed back to the
--- display layer as a list of key-value pairs in the syntax of
--- |declare_parameter|. 
+--   \item |init.direction| If present, a direction for the edge. Defaults to "--".
+--   \item |init.options| If present, some options for the edge.
+--   \item |init.generated_options| A table that is passed back to the
+--     display layer as a list of key-value pairs in the syntax of
+--     |declare_parameter|.
 -- \end{itemize}
 
 function InterfaceToAlgorithms.createEdge(algorithm, tail, head, init)
 
   init = init or {}
-  
+
   -- Setup
   local scope = InterfaceCore.topScope()
   local binding = InterfaceCore.binding
   local syntactic_digraph   = algorithm.layout_graph
   local syntactic_component = algorithm.syntactic_component
-  
+
   assert (syntactic_digraph:contains(tail) and
-	  syntactic_digraph:contains(head),
-	  "attempting to create edge between nodes that are not in the syntactic digraph")
-  
+      syntactic_digraph:contains(head),
+      "attempting to create edge between nodes that are not in the syntactic digraph")
+
   local arc = syntactic_digraph:connect(tail, head)
-  
+
   local edge = Edge.new {
     head = head,
     tail = tail,
@@ -916,16 +922,16 @@
     generated_options = init.generated_options
   }
 
-  -- Add to arc    
+  -- Add to arc
   arc.syntactic_edges[#arc.syntactic_edges+1] = edge
-  
+
   local s_arc = syntactic_component:connect(tail, head)
   s_arc.syntactic_edges = arc.syntactic_edges
-  
+
   -- Create Event
   local e = InterfaceToDisplay.createEvent ("edge", { arc, #arc.syntactic_edges })
   edge.event = e
-  
+
   -- Make part of collections
   for _,c in ipairs(edge.options.collections) do
     LookupTable.addOne(c.edges, edge)
@@ -934,7 +940,7 @@
   -- Call binding
   binding.storage[edge] = {}
   binding:everyEdgeCreation(edge)
-  
+
   -- Add edge to digraph and ugraph
   local direction = edge.direction
   if direction == "->" then
@@ -950,7 +956,7 @@
 
   -- Add edge to layouts
   add_to_collections(algorithm.layout, "edges", edge)
-  
+
 end
 
 
@@ -957,6 +963,6 @@
 
 
 
--- Done 
+-- Done
 
 return InterfaceToAlgorithms

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToC.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToC.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToC.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -32,16 +32,17 @@
 -- |algorithm| field is set to an algorithm class object whose |run|
 -- method calls the function passed via the
 -- |algorithm_written_in_c| field. It will be called with the
--- following parameters (in that order):   
+-- following parameters (in that order):
+-- %
 -- \begin{enumerate}
--- \item The to-be-laid out digraph. This will not be the whole layout
--- graph (syntactic digraph) if preprocessing like decomposition into
--- connected components is used.
--- \item An array of the digraph's vertices, but with the table part
--- hashing vertex objects to their indices in the array part.
--- \item An array of the syntactic edges of the digraph. Like the
--- array, the table part will hash back the indices of the edge objects.
--- \item The algorithm object.
+--   \item The to-be-laid out digraph. This will not be the whole layout
+--     graph (syntactic digraph) if preprocessing like decomposition into
+--     connected components is used.
+--   \item An array of the digraph's vertices, but with the table part
+--     hashing vertex objects to their indices in the array part.
+--   \item An array of the syntactic edges of the digraph. Like the
+--     array, the table part will hash back the indices of the edge objects.
+--   \item The algorithm object.
 -- \end{enumerate}
 --
 -- @param t The table originally passed to |declare|.
@@ -49,25 +50,25 @@
 function InterfaceToC.declare_algorithm_written_in_c (t)
   t.algorithm = {
     run = function (self)
-	    local back_table = lib.icopy(self.ugraph.vertices)
-	    for i,v in ipairs(self.ugraph.vertices) do
-	      back_table[v] = i
-	    end
-	    local edges = {}
-	    for _,a in ipairs(self.ugraph.arcs) do
-	      local b = self.layout_graph:arc(a.tail,a.head)
-	      if b then
-		lib.icopy(b.syntactic_edges, edges)
-	      end
-	    end
-	    for i=1,#edges do
-	      edges[edges[i]] = i
-	    end
-	    collectgarbage("stop") -- Remove once Lua Link Bug is fixed
-	    t.algorithm_written_in_c (self.digraph, back_table, edges, self)
-	    collectgarbage("restart") -- Remove once Lua Link Bug is fixed
-	  end
-  }  
+      local back_table = lib.icopy(self.ugraph.vertices)
+      for i,v in ipairs(self.ugraph.vertices) do
+        back_table[v] = i
+      end
+      local edges = {}
+      for _,a in ipairs(self.ugraph.arcs) do
+        local b = self.layout_graph:arc(a.tail,a.head)
+        if b then
+          lib.icopy(b.syntactic_edges, edges)
+        end
+      end
+      for i=1,#edges do
+        edges[edges[i]] = i
+      end
+      collectgarbage("stop") -- Remove once Lua Link Bug is fixed
+      t.algorithm_written_in_c (self.digraph, back_table, edges, self)
+      collectgarbage("restart") -- Remove once Lua Link Bug is fixed
+    end
+  }
 end
 
 
@@ -74,4 +75,4 @@
 
 -- Done
 
-return InterfaceToC
\ No newline at end of file
+return InterfaceToC

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToDisplay.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToDisplay.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/InterfaceToDisplay.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -73,10 +73,10 @@
 
 
 ---
--- Initiliaze the binding. This function is called once by the display
+-- Initialize the binding. This function is called once by the display
 -- layer at the very beginning. For instance, \tikzname\ does the
 -- following call:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --InterfaceToDisplay.bind(require "pgf.gd.bindings.BindingToPGF")
 --\end{codeexample}
@@ -90,10 +90,10 @@
 
 function InterfaceToDisplay.bind(class)
   assert (not InterfaceCore.binding, "binding already initialized")
-  
+
   -- Create a new object
   InterfaceCore.binding = setmetatable({}, class)
-  
+
   -- Load these libraries, which contain many standard declarations:
   require "pgf.gd.model.library"
   require "pgf.gd.control.library"
@@ -113,7 +113,7 @@
 -- once more.
 --
 -- Each graph drawing scope comes with a syntactic digraph that is
--- build using methods like |addVertex| or |addEdge|. 
+-- build using methods like |addVertex| or |addEdge|.
 --
 -- @param height The to-be-used height of the options stack. All
 -- options above this height will be popped prior to attacking the
@@ -123,14 +123,14 @@
 
   -- Create a new scope table
   local scope = Scope.new {}
-  
+
   -- Setup syntactic digraph:
   local g = scope.syntactic_digraph
-  
+
   g.options = get_current_options_table(height)
   g.syntactic_digraph = g
   g.scope = scope
-  
+
   -- Push scope:
   InterfaceCore.scopes[#InterfaceCore.scopes + 1] = scope
 end
@@ -138,7 +138,7 @@
 
 
 ---
--- Arranges the current graph using the specified algorithm and options. 
+-- Arranges the current graph using the specified algorithm and options.
 --
 -- This function should be called after the graph drawing scope has
 -- been opened and the syntactic digraph has been completely
@@ -165,7 +165,7 @@
   -- Setup
   local scope = InterfaceCore.topScope()
   assert(not scope.coroutine, "coroutine already created for current gd scope")
-  
+
   -- The actual drawing function
   local function run ()
     if #scope.syntactic_digraph.vertices == 0 then
@@ -172,15 +172,15 @@
       -- Nothing needs to be done
       return
     end
-    
+
     LayoutPipeline.run(scope)
   end
-	 
+
   scope.coroutine = coroutine.create(run)
 
   -- Run it:
-  InterfaceToDisplay.resumeGraphDrawingCoroutine()  
-  
+  InterfaceToDisplay.resumeGraphDrawingCoroutine()
+
   -- End timing:
   local stop = os.clock()
 
@@ -204,10 +204,10 @@
   -- Setup
   local scope = InterfaceCore.topScope()
   local binding = InterfaceCore.binding
-  
+
   -- Asserts
   assert(scope.coroutine, "coroutine not created for current gd scope")
-  
+
   -- Run
   local ok, text = coroutine.resume(scope.coroutine)
   assert(ok, text)
@@ -258,7 +258,7 @@
 -- to the current |Binding|.
 --
 -- @param anchors A table of anchors (mapping anchor positions to
--- |Coordinates|). 
+-- |Coordinates|).
 
 
 function InterfaceToDisplay.createVertex(name, shape, path, height, binding_infos, anchors)
@@ -266,7 +266,7 @@
   -- Setup
   local scope = InterfaceCore.topScope()
   local binding = InterfaceCore.binding
-  
+
   -- Does vertex already exist?
   local v = scope.node_names[name]
   assert (not v or not v.created_on_display_layer, "node already created")
@@ -304,18 +304,18 @@
   -- Create Event
   local e = InterfaceToDisplay.createEvent ("node", v)
   v.event = e
-  
+
   -- Create name lookup
   scope.node_names[v.name] = v
-  
+
   -- Add vertex to graph
   scope.syntactic_digraph:add {v}
-  
+
   -- Add to collections
   for _,c in ipairs(v.options.collections) do
     LookupTable.addOne(c.vertices, v)
   end
-  
+
 end
 
 
@@ -326,9 +326,9 @@
 -- ``surrounds'' the vertices of a subgraph. The special property of a
 -- subgraph node opposed to a normal node is that it is created only
 -- after the subgraph has been laid out. However, the difference to a
--- collection like |hyper| is that the node is availble immediately as
+-- collection like |hyper| is that the node is available immediately as
 -- a normal node in the sense that you can connect edges to it.
--- 
+--
 -- What happens internally is that subgraph nodes get ``registered''
 -- immediately both on the display level and on the algorithm level,
 -- but the actual node is only created inside the layout pipeline
@@ -339,7 +339,7 @@
 -- contains all vertices (and edges) being part of the subgraph. For
 -- this reason, this method is a |push...| method, since it pushes
 -- something on the options stack.
--- 
+--
 -- The |init| parameter will be used during the creation of the node,
 -- see |Binding:createVertex| for details on the fields. Note that
 -- |init.text| is often not displayed for such ``vast'' nodes as those
@@ -350,23 +350,23 @@
 --
 -- The |init.generated_options| will be augmented by additional
 -- key--value pairs when the vertex is created:
+-- %
+-- \begin{itemize}
+--   \item The key |subgraph point cloud| will have as its value a
+--     string that is be a list of points (without separating commas)
+--     like |"(10pt,20pt)(0pt,0pt)(30pt,40pt)"|, always in
+--     this syntax. The list will contain all points inside the
+--     subgraph. In particular, a bounding box around these points will
+--     encompass all nodes and bend points of the subgraph.
+--     The bounding box of this point cloud is guaranteed to be centered on
+--     the origin.
+--   \item The key |subgraph bounding box width| will have as its value
+--     the width of a bounding box (in \TeX\ points, as a string with the
+--     suffix |"pt"|).
+--   \item The key |subgraph bounding box height| stores the height of a
+--     bounding box.
+-- \end{itemize}
 --
--- \begin{itemize}
--- \item The key |subgraph point cloud| will have as its value a
--- string that is be a list of points (without
--- separating commas) like |"(10pt,20pt)(0pt,0pt)(30pt,40pt)"|, always in
--- this syntax. The list will contain all points inside the
--- subgraph. In particular, a bounding box around these points will
--- encompass all nodes and bend points of the subgraph.
--- The bounding box of this point cloud is guaranteed to be centered on
--- the origin.
--- \item The key |subgraph bounding box width| will have as its value
--- the width of a bounding box (in \TeX\ points, as a string with the
--- suffix |"pt"|). 
--- \item The key |subgraph bounding box height| stores the height of a
--- bounding box.
--- \end{itemize} 
--- 
 -- @param name The name of the node.
 -- @param height Height of the options stack. Note that this method
 -- pushes something (namely a collection) on the options stack.
@@ -373,11 +373,11 @@
 -- @param info A table passed to |Binding:createVertex|, see that function.
 --
 function InterfaceToDisplay.pushSubgraphVertex(name, height, info)
-  
+
   -- Setup
   local scope = InterfaceCore.topScope()
   local binding = InterfaceCore.binding
-  
+
   -- Does vertex already exist?
   assert (not scope.node_names[name], "node already created")
 
@@ -387,7 +387,7 @@
     kind    = "subgraph node",
     options = get_current_options_table(height-1)
   }
-  
+
   vertex_created(v,scope)
 
   -- Store info
@@ -429,12 +429,12 @@
 
   -- Setup
   local scope = InterfaceCore.topScope()
-  
+
   -- Does vertex already exist?
   local v = assert (scope.node_names[name], "node is missing, cannot add options")
-  
+
   v.options = get_current_options_table(height, v.options)
-  
+
   -- Add to collections
   for _,c in ipairs(v.options.collections) do
     LookupTable.addOne(c.vertices, v)
@@ -464,8 +464,8 @@
 --
 -- @param tail           Name of the node the edge begins at.
 -- @param head           Name of the node the edge ends at.
--- @param direction      Direction of the edge (e.g. |--| for an undirected edge 
---                       or |->| for a directed edge from the first to the second 
+-- @param direction      Direction of the edge (e.g. |--| for an undirected edge
+--                       or |->| for a directed edge from the first to the second
 --                       node).
 -- @param height         The option stack height, see for instance |createVertex|.
 --
@@ -477,12 +477,12 @@
   -- Setup
   local scope = InterfaceCore.topScope()
   local binding = InterfaceCore.binding
-  
+
   -- Does vertex already exist?
   local h = scope.node_names[head]
   local t = scope.node_names[tail]
   assert (h and t, "attempting to create edge between nodes that are not in the graph")
-  
+
   -- Create Arc object
   local arc = scope.syntactic_digraph:connect(t, h)
 
@@ -493,14 +493,14 @@
     direction = direction,
     options = get_current_options_table(height)
   }
-  
-  -- Add to arc    
+
+  -- Add to arc
   arc.syntactic_edges[#arc.syntactic_edges+1] = edge
-  
+
   -- Create Event
   local e = InterfaceToDisplay.createEvent ("edge", { arc, #arc.syntactic_edges })
   edge.event = e
-  
+
   -- Make part of collections
   for _,c in ipairs(edge.options.collections) do
     LookupTable.addOne(c.edges, edge)
@@ -509,15 +509,15 @@
   -- Call binding
   binding.storage[edge] = binding_infos
   binding:everyEdgeCreation(edge)
-  
+
 end
-  
 
 
 
 
+
 ---
--- Push an option to the stack of options. 
+-- Push an option to the stack of options.
 --
 -- As a graph is parsed, a stack of ``current options''
 -- is created. To add something to this table, the display layers may
@@ -533,7 +533,7 @@
 -- resulting stack height.
 --
 -- In addition to this stack height, this function returns a Boolean
--- value indicating whether a ``main algorithm phase was set.'' This
+-- value indicating whether a ``main algorithm phase was set''. This
 -- happens whenever a key is executed (directly or indirectly through
 -- the |use| field) that selects an algorithm for the ``main''
 -- algorithm phase. This information may help the caller to setup the
@@ -546,7 +546,7 @@
 -- above this height will be removed.
 --
 -- @return A new stack height
--- @return A Boolean that is |true| iff the main algorithm phase was
+-- @return A Boolean that is |true| if the main algorithm phase was
 -- set by the option or one option |use|d by it.
 -- @return The newly created entry on the stack. If more entries are
 -- created through the use of the |use| field, the original entry is
@@ -555,65 +555,65 @@
 
 function InterfaceToDisplay.pushOption(key, value, height)
   assert(type(key) == "string", "illegal key")
-  
+
   local key_record = assert(InterfaceCore.keys[key], "unknown key")
   local main_phase_set = false
-  
+
   if value == nil and key_record.default then
     value = key_record.default
   end
-  
+
   -- Find out what kind of key we are pushing:
-  
+
   if key_record.algorithm then
     -- Push a phase
     if type(InterfaceCore.algorithm_classes[key]) == "function" then
-      -- Call the constructor function 
+      -- Call the constructor function
       InterfaceCore.algorithm_classes[key] = InterfaceCore.algorithm_classes[key]()
     end
 
     local algorithm = InterfaceCore.algorithm_classes[key]
-    
+
     assert (algorithm, "algorithm class not found")
-    
+
     push_on_option_stack(phase_unique,
-			 { phase = value or key_record.phase, algorithm = algorithm },
-			 height)
-    
+            { phase = value or key_record.phase, algorithm = algorithm },
+            height)
+
     if key_record.phase == "main" then
       main_phase_set = true
     end
-    
+
   elseif key_record.layer then
     -- Push a collection
     local stack = InterfaceCore.option_stack
     local scope = InterfaceCore.topScope()
-    
+
     -- Get the stack above "height":
     local options = get_current_options_table(height-1)
-    
+
     -- Create the collection event
     local event = InterfaceToDisplay.createEvent ("collection", key)
-    
+
     -- Create collection object:
     local collection = Collection.new { kind = key, options = options, event = event }
-    
+
     -- Store in collections table of current scope:
     local collections = scope.collections[key] or {}
     collections[#collections + 1] = collection
     scope.collections[key] = collections
-    
+
     -- Build collection tree
     collection:registerAsChildOf(options.collections[#options.collections])
-    
+
     -- Push on stack
     push_on_option_stack(collections_unique, collection, height)
-    
+
   else
-    
+
     -- A normal key
     push_on_option_stack(key, InterfaceCore.convert(value, InterfaceCore.keys[key].type), height)
-    
+
   end
 
   local newly_created = InterfaceCore.option_stack[#InterfaceCore.option_stack]
@@ -626,10 +626,10 @@
       local use_k = u.key
       local use_v = u.value
       if type(use_k) == "function" then
-	use_k = use_k(value)
+        use_k = use_k(value)
       end
       if type(use_v) == "function" then
-	use_v = use_v(value)
+        use_v = use_v(value)
       end
       height, flag = InterfaceToDisplay.pushOption(use_k, use_v, height+1)
       main_phase_set = main_phase_set or flag
@@ -655,7 +655,7 @@
 
 
 ---
--- Creates an event and adds it to the event string of the current scope. 
+-- Creates an event and adds it to the event string of the current scope.
 --
 -- @param kind         Name/kind of the event.
 -- @param parameters   Parameters of the event.
@@ -679,7 +679,7 @@
 -- keys's names. In particular, you can then iterate over it using
 -- |ipairs| and you can  check whether a key is defined by accessing
 -- the table at the key's name. Each entry of the table is the
--- original table passed to |InterfaceToAlgorithms.declare|. 
+-- original table passed to |InterfaceToAlgorithms.declare|.
 --
 -- @return A lookup table of all declared keys.
 
@@ -699,7 +699,7 @@
 -- whole graph.
 --
 -- In detail, this function calls:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --local binding = InterfaceCore.binding
 --
@@ -719,14 +719,14 @@
 function InterfaceToDisplay.renderGraph()
   local scope = InterfaceCore.topScope()
   local syntactic_digraph = scope.syntactic_digraph
-  
+
   local binding = InterfaceCore.binding
-  
+
   binding:renderStart()
   render_vertices(syntactic_digraph.vertices)
   render_edges(syntactic_digraph.arcs)
   render_collections(scope.collections)
-  binding:renderStop()  
+  binding:renderStop()
 end
 
 
@@ -743,15 +743,16 @@
 -- binding layer.
 --
 -- Consider the following code:
---\begin{codeexample}[code only] 
+-- %
+--\begin{codeexample}[code only]
 --\graph [... layout] {
 --  a -- b -- c -- d;
 --};
 --\end{codeexample}
---  
+--
 -- In this case, after the graph drawing algorithm has run, the
 -- present function will call:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --local binding = InterfaceCore.binding
 --
@@ -779,17 +780,18 @@
 -- function is called to render the different collection kinds.
 --
 -- Collection kinds rendered in the order provided by the |layer|
--- field passed to |declare| during the declaration of the colleciton
+-- field passed to |declare| during the declaration of the collection
 -- kind, see also |declare_collection|. If several collection kinds
 -- have the same layer, they are rendered in lexicographical ordering
 -- (to ensure that they are always rendered in the same order).
 --
 -- Consider the following code:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --declare { key = "hyper", layer = 1 }
 --\end{codeexample}
 -- you can say on the \tikzname\ layer
---\begin{codeexample}[code only] 
+--\begin{codeexample}[code only]
 --\graph {
 --  a, b, c, d;
 --  { [hyper] a, b, c }
@@ -796,7 +798,7 @@
 --  { [hyper] b, c, d }
 --};
 --\end{codeexample}
---  
+--
 -- In this case, after the graph drawing algorithm has run, the
 -- present function will call:
 --
@@ -809,12 +811,12 @@
 --binding:renderCollectionStopKind("hyper", 1)
 --\end{codeexample}
 --
--- @param collections The |collections| table of the current scope. 
+-- @param collections The |collections| table of the current scope.
 
 function render_collections(collections)
   local kinds = InterfaceCore.collection_kinds
   local binding = InterfaceCore.binding
-  
+
   for i=1,#kinds do
     local kind = kinds[i].kind
     local layer = kinds[i].layer
@@ -822,7 +824,7 @@
     if layer ~= 0 then
       binding:renderCollectionStartKind(kind, layer)
       for _,c in ipairs(collections[kind] or {}) do
-	binding:renderCollection(c)
+        binding:renderCollection(c)
       end
       binding:renderCollectionStopKind(kind, layer)
     end
@@ -837,19 +839,20 @@
 --
 -- When the graph drawing algorithm is done, the interface will first
 -- rendering the vertices using |render_vertices|, followed by calling
--- this function, which in turn calls appropriate callbacks to the 
+-- this function, which in turn calls appropriate callbacks to the
 -- binding layer.
 --
 -- Consider the following code:
---\begin{codeexample}[code only] 
+-- %
+--\begin{codeexample}[code only]
 -- \graph [... layout] {
 --   a -- b -- c -- d;
 -- };
 --\end{codeexample}
---  
+--
 -- In this case, after the graph drawing algorithm has run, the
 -- present function will call:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 -- local binding = InterfaceCore.binding
 --
@@ -877,14 +880,14 @@
 local option_initial = InterfaceCore.option_initial
 
 local option_metatable = {
-  __index = 
+  __index =
     function (t, key)
       local k = aliases[key]
       if k then
-	local v = (type(k) == "string" and t[k]) or (type(k) == "function" and k(t)) or nil
-	if v ~= nil then
-	  return v
-	end
+        local v = (type(k) == "string" and t[k]) or (type(k) == "function" and k(t)) or nil
+        if v ~= nil then
+          return v
+        end
       end
       return option_initial[key]
     end
@@ -901,12 +904,12 @@
 -- with object.)
 --
 -- (This function is local and internal and included only for documentation
--- purposes.) 
+-- purposes.)
 --
 -- @param height The stack height for which the option table is
 -- required.
 -- @param table If non |nil|, the options will be added to this
--- table. 
+-- table.
 --
 -- @return The option table as described above.
 
@@ -913,7 +916,7 @@
 function get_current_options_table (height, table)
   local stack = InterfaceCore.option_stack
   assert (height >= 0 and height <= #stack, "height value out of bounds")
-  
+
   if height == InterfaceCore.option_cache_height and not table then
     return option_cache
   else
@@ -926,49 +929,49 @@
     local cache
     if not table then
       cache = setmetatable(
-	{
-	  algorithm_phases = setmetatable({}, InterfaceCore.option_initial.algorithm_phases),
-	  collections = {}
-	}, option_metatable)
+        {
+          algorithm_phases = setmetatable({}, InterfaceCore.option_initial.algorithm_phases),
+          collections = {}
+        }, option_metatable)
     else
       cache = lib.copy(table)
       cache.algorithm_phases = lib.copy(cache.algorithm_phases)
       cache.collections = lib.copy(cache.collections)
     end
-      
+
     local algorithm_phases = cache.algorithm_phases
     local collections = cache.collections
     local keys = InterfaceCore.keys
-    
+
     local function handle (k, v)
       if k == phase_unique then
-	algorithm_phases[v.phase] = v.algorithm
-	local phase_stack = v.phase .. " stack"
-	local t = rawget(algorithm_phases, phase_stack)
-	if not t then
-	  t = algorithm_phases[phase_stack]
-	  assert(type(t) == "table", "unknown phase")
-	  t = lib.copy(t)
-	  algorithm_phases[phase_stack] = t
-	end
-	t[#t + 1] = v.algorithm	  
+        algorithm_phases[v.phase] = v.algorithm
+        local phase_stack = v.phase .. " stack"
+        local t = rawget(algorithm_phases, phase_stack)
+        if not t then
+          t = algorithm_phases[phase_stack]
+          assert(type(t) == "table", "unknown phase")
+          t = lib.copy(t)
+          algorithm_phases[phase_stack] = t
+        end
+        t[#t + 1] = v.algorithm
       elseif k == collections_unique then
-	LookupTable.addOne(collections, v)
+        LookupTable.addOne(collections, v)
       else
-	cache[k] = v
+        cache[k] = v
       end
     end
-    
+
     for _,s in ipairs(stack) do
       handle (s.key, s.value)
     end
-    
+
     -- Cache it, if this was not added:
     if not table then
       InterfaceCore.option_cache_height = height
       option_cache                      = cache
     end
-    
+
     return cache
   end
 end
@@ -979,10 +982,10 @@
 
 function push_on_option_stack(key, value, height)
   local stack = InterfaceCore.option_stack
-  
-  assert (type(height) == "number" and height > 0 and height <= #stack + 1, 
-	  "height value out of bounds")
-  
+
+  assert (type(height) == "number" and height > 0 and height <= #stack + 1,
+      "height value out of bounds")
+
   -- Clear superfluous part of stack
   for i=#stack,height+1,-1 do
     stack[i] = nil
@@ -989,11 +992,11 @@
   end
 
   stack[height] = { key = key, value = value }
-  InterfaceCore.option_cache_height = nil   -- invalidate cache  
+  InterfaceCore.option_cache_height = nil   -- invalidate cache
 end
 
 
 
--- Done 
+-- Done
 
-return InterfaceToDisplay
\ No newline at end of file
+return InterfaceToDisplay

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/Scope.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/Scope.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/interface/Scope.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -25,8 +25,8 @@
 -- inform an algorithm about the input.
 --
 -- For each graph drawing scope, a new |Scope| object is
--- created. Graph drawing scopes are kepts track of using a stack, but
--- only the top of this stack is available to the interface classes. 
+-- created. Graph drawing scopes are kept track of using a stack, but
+-- only the top of this stack is available to the interface classes.
 --
 -- @field syntactic_digraph The syntactic digraph is a digraph that
 -- faithfully encodes the way the input graph is represented
@@ -77,16 +77,16 @@
 
 function Scope.new(initial)
   return setmetatable(lib.copy(initial,
-			       {
-				  syntactic_digraph = Digraph.new{},
-				  events            = {},
-				  node_names        = {},
-				  coroutine         = nil,
-				  collections       = {},
-				}), Scope)
+    {
+      syntactic_digraph = Digraph.new{},
+      events            = {},
+      node_names        = {},
+      coroutine         = nil,
+      collections       = {},
+    }), Scope)
 end
 
 
--- Done 
+-- Done
 
-return Scope
\ No newline at end of file
+return Scope

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CrossingMinimizationGansnerKNV1993.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CrossingMinimizationGansnerKNV1993.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CrossingMinimizationGansnerKNV1993.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -58,7 +58,7 @@
 
     local function init(search)
       for i=#self.graph.nodes,1,-1 do
-	local node = self.graph.nodes[i]
+        local node = self.graph.nodes[i]
         if direction == 'down' then
           if node:getInDegree() == 0 then
             search:push(node)
@@ -81,7 +81,7 @@
       self.ranking:setRankPosition(node, pos)
 
       if direction == 'down' then
-	local out = node:getOutgoingEdges()
+        local out = node:getOutgoingEdges()
         for i=#out,1,-1 do
           local neighbour = out[i]:getNeighbour(node)
           if not search:getDiscovered(neighbour) then
@@ -90,9 +90,9 @@
           end
         end
       else
-	local into = node:getIncomingEdges()
-        for i=#into,1,-1 do 
-	    local neighbour = into[i]:getNeighbour(node)
+        local into = node:getIncomingEdges()
+        for i=#into,1,-1 do
+          local neighbour = into[i]:getNeighbour(node)
           if not search:getDiscovered(neighbour) then
             search:push(neighbour)
             search:setDiscovered(neighbour)
@@ -122,7 +122,7 @@
   local crossings = 0
 
   local ranks = ranking:getRanks()
-  
+
   for rank_index = 2, #ranks do
     local nodes = ranking:getNodes(ranks[rank_index])
     for i = 1, #nodes-1 do
@@ -170,7 +170,7 @@
     left_edges = left_node:getOutgoingEdges()
     right_edges = right_node:getOutgoingEdges()
   end
-  
+
   local crossings = 0
 
   local function left_neighbour_on_other_rank(edge)
@@ -186,20 +186,20 @@
   for _,left_edge in ipairs(left_edges) do
     if left_neighbour_on_other_rank(left_edge) then
       local left_neighbour = left_edge:getNeighbour(left_node)
-      
+
       for _,right_edge in ipairs(right_edges) do
-	if right_neighbour_on_other_rank(right_edge) then
-	  local right_neighbour = right_edge:getNeighbour(right_node)
-	  
-	  local left_position = ranking:getRankPosition(left_neighbour)
-	  local right_position = ranking:getRankPosition(right_neighbour)
-	  
-	  local neighbour_diff = right_position - left_position
-	  
-	  if neighbour_diff < 0 then
-	    crossings = crossings + 1
-	  end
-	end
+        if right_neighbour_on_other_rank(right_edge) then
+          local right_neighbour = right_edge:getNeighbour(right_node)
+
+          local left_position = ranking:getRankPosition(left_neighbour)
+          local right_position = ranking:getRankPosition(right_neighbour)
+
+          local neighbour_diff = right_position - left_position
+
+          if neighbour_diff < 0 then
+            crossings = crossings + 1
+          end
+        end
       end
     end
   end
@@ -252,7 +252,7 @@
     function (edge)
       local n = edge:getNeighbour(node)
       if self.ranking:getRank(n) == prev_rank then
-	return self.ranking:getRankPosition(n)
+        return self.ranking:getRankPosition(n)
       end
     end)
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalBergerS1990a.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalBergerS1990a.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalBergerS1990a.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -10,7 +10,6 @@
 -- @release $Header$
 
 
-
 local CycleRemovalBergerS1990a = {}
 
 local lib = require("pgf.gd.lib")
@@ -27,20 +26,20 @@
   for _,node in ipairs(self.graph.nodes) do
     -- get all outgoing edges that have not been removed yet
     local out_edges = lib.imap(node:getOutgoingEdges(),
-			       function (edge)
-				 if not removed[edge] then return edge end
-			       end)
+       function (edge)
+         if not removed[edge] then return edge end
+       end)
 
     -- get all incoming edges that have not been removed yet
     local in_edges = lib.imap(node:getIncomingEdges(),
-			      function (edge)
-				if not removed[edge] then return edge end
-			      end)
+      function (edge)
+        if not removed[edge] then return edge end
+      end)
 
     if #out_edges >= #in_edges then
-      -- we have more outgoing than incoming edges, reverse all incoming 
+      -- we have more outgoing than incoming edges, reverse all incoming
       -- edges and mark all incident edges as removed
-      
+
       for _,edge in ipairs(out_edges) do
         removed[edge] = true
       end
@@ -72,4 +71,4 @@
 
 -- done
 
-return CycleRemovalBergerS1990a
\ No newline at end of file
+return CycleRemovalBergerS1990a

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalBergerS1990b.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalBergerS1990b.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalBergerS1990b.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -28,20 +28,20 @@
     -- get all outgoing edges that have not been removed yet
     -- get all outgoing edges that have not been removed yet
     local out_edges = lib.imap(node:getOutgoingEdges(),
-			       function (edge)
-				 if not removed[edge] then return edge end
-			       end)
+      function (edge)
+        if not removed[edge] then return edge end
+      end)
 
     -- get all incoming edges that have not been removed yet
     local in_edges = lib.imap(node:getIncomingEdges(),
-			      function (edge)
-				if not removed[edge] then return edge end
-			      end)
+      function (edge)
+        if not removed[edge] then return edge end
+      end)
 
     if #out_edges >= #in_edges then
-      -- we have more outgoing than incoming edges, reverse all incoming 
+      -- we have more outgoing than incoming edges, reverse all incoming
       -- edges and mark all incident edges as removed
-      
+
       for _,edge in ipairs(out_edges) do
         removed[edge] = true
       end
@@ -73,4 +73,4 @@
 
 -- done
 
-return CycleRemovalBergerS1990b
\ No newline at end of file
+return CycleRemovalBergerS1990b

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalGansnerKNV1993.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalGansnerKNV1993.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/CycleRemovalGansnerKNV1993.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -23,10 +23,10 @@
   --
   -- ignore self-loops
   --
-  -- merge multiple edges into one edge each, whose weight is the sum of the 
+  -- merge multiple edges into one edge each, whose weight is the sum of the
   --   individual edge weights
   --
-  -- ignore leaf nodes that are not part of the user-defined sets (their ranks 
+  -- ignore leaf nodes that are not part of the user-defined sets (their ranks
   --   are trivially determined)
   --
   -- ensure that supernodes S_min and S_max are assigned first and last ranks
@@ -36,10 +36,10 @@
   -- ensure the supernodes S_min and S_max are are the only nodes in these ranks
   --   for all nodes with indegree of 0, insert temporary edge (S_min, v) with delta=0
   --   for all nodes with outdegree of 0, insert temporary edge (v, S_max) with delta=0
-  
+
   -- classify edges as tree/forward, cross and back edges using a DFS traversal
   local tree_or_forward_edges, cross_edges, back_edges = Simplifiers:classifyEdges(self.graph)
-  
+
   -- reverse the back edges in order to make the graph acyclic
   for _,edge in ipairs(back_edges) do
     edge.reversed = true

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NetworkSimplex.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NetworkSimplex.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NetworkSimplex.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -14,10 +14,10 @@
 
 
 --- This file contains an implementation of the network simplex method
---- for node ranking and x coordinate optimization in layered drawing 
+--- for node ranking and x coordinate optimization in layered drawing
 --- algorithms, as proposed in
 ---
---- "A Technique for Drawing Directed Graphs" 
+--- "A Technique for Drawing Directed Graphs"
 --  by Gansner, Koutsofios, North, Vo, 1993.
 
 
@@ -57,7 +57,7 @@
 function NetworkSimplex:run()
 
   assert (#self.graph.nodes > 0, "graph must contain at least one node")
-  
+
   -- initialize the tree edge search index
   self.search_index = 1
 
@@ -72,7 +72,7 @@
   self.low = {}
   self.parent_edge = {}
   self.ranking = Ranking.new()
-  
+
   if #self.graph.nodes == 1 then
     self.ranking:setRank(self.graph.nodes[1], 1)
   else
@@ -86,12 +86,12 @@
   -- construct feasible tree of tight edges
   self:constructFeasibleTree()
 
-  -- iteratively replace edges with negative cut values 
+  -- iteratively replace edges with negative cut values
   -- with non-tree edges (chosen by minimum slack)
   local leave_edge = self:findNegativeCutEdge()
   while leave_edge do
     local enter_edge = self:findReplacementEdge(leave_edge)
-    
+
     assert(enter_edge, 'no non-tree edge to replace ' .. tostring(leave_edge) .. ' could be found')
 
     -- exchange leave_edge and enter_edge in the tree, updating
@@ -98,7 +98,7 @@
     -- the ranks and cut values of all nodes
     self:exchangeTreeEdges(leave_edge, enter_edge)
 
-    -- find the next tree edge with a negative cut value, if 
+    -- find the next tree edge with a negative cut value, if
     -- there are any left
     leave_edge = self:findNegativeCutEdge()
   end
@@ -108,7 +108,7 @@
     self.ranking:normalizeRanks()
 
     -- move nodes to feasible ranks with the least number of nodes
-    -- in order to avoid crowding and to improve the overall aspect 
+    -- in order to avoid crowding and to improve the overall aspect
     -- ratio of the drawing
     self:balanceRanksTopBottom()
   elseif self.balancing == NetworkSimplex.BALANCE_LEFT_RIGHT then
@@ -140,7 +140,7 @@
 
     if min_slack_edge then
       local delta = self:edgeSlack(min_slack_edge)
-      
+
       if delta > 0 then
         local head = min_slack_edge:getHead()
         local tail = min_slack_edge:getTail()
@@ -193,7 +193,7 @@
 
   local v = nil
   local direction = nil
-  
+
   if self.lim[tail] < self.lim[head] then
     v = tail
     direction = 'in'
@@ -206,7 +206,7 @@
   local enter_edge = nil
   local slack = math.huge
 
-  -- TODO Janns: Get rid of this recursion:
+  -- TODO Jannis: Get rid of this recursion:
 
   local function find_edge(v, direction)
 
@@ -250,7 +250,7 @@
         local tree_tail = self.tree_node[tail]
 
         assert(tail and tree_tail)
-        
+
         if not self.tree_edge[edge] then
           if not self:inTailComponentOf(tree_tail, search_root) then
             if self:edgeSlack(edge) < slack or not enter_edge then
@@ -280,7 +280,7 @@
   end
 
   find_edge(v, direction)
-  
+
   return enter_edge
 end
 
@@ -293,7 +293,7 @@
   local cutval = self.cut_value[leave_edge]
   local head = self.tree_node[enter_edge:getHead()]
   local tail = self.tree_node[enter_edge:getTail()]
-  
+
   local ancestor = self:updateCutValuesUpToCommonAncestor(tail, head, cutval, true)
   local other_ancestor = self:updateCutValuesUpToCommonAncestor(head, tail, cutval, false)
 
@@ -322,7 +322,7 @@
   -- node to in/out weight mappings
   local in_weight = {}
   local out_weight = {}
-  
+
   -- node to lowest/highest possible rank mapping
   local min_rank = {}
   local max_rank = {}
@@ -335,22 +335,22 @@
     for _,edge in ipairs(node:getIncomingEdges()) do
       -- accumulate the weights of all incoming edges
       in_weight[node] = (in_weight[node] or 0) + edge.weight
-      
+
       -- update the minimum allowed rank (which is the maximum of
-      -- the ranks of all parent neighbours plus the minimum level 
+      -- the ranks of all parent neighbors plus the minimum level
       -- separation caused by the connecting edges)
       local neighbour = edge:getNeighbour(node)
       local neighbour_rank = self.ranking:getRank(neighbour)
       min_rank[node] = math.max(min_rank[node], neighbour_rank + edge.minimum_levels)
     end
-    
+
     for _,edge in ipairs(node:getOutgoingEdges()) do
       -- accumulate the weights of all outgoing edges
       out_weight[node] = (out_weight[node] or 0) + edge.weight
 
       -- update the maximum allowed rank (which is the minimum of
-      -- the ranks of all child neighbours minus the minimum level
-      -- sparation caused by the connecting edges)
+      -- the ranks of all child neighbors minus the minimum level
+      -- separation caused by the connecting edges)
       local neighbour = edge:getNeighbour(node)
       local neighbour_rank = self.ranking:getRank(neighbour)
       max_rank[node] = math.min(max_rank[node], neighbour_rank - edge.minimum_levels)
@@ -400,7 +400,7 @@
 
 
 function NetworkSimplex:computeInitialRanking()
-  
+
   -- queue for nodes to rank next
   local queue = {}
 
@@ -408,7 +408,7 @@
   local function enqueue(node) table.insert(queue, node) end
   local function dequeue() return table.remove(queue, 1) end
 
-  -- reset the two-dimensional mapping from ranks to lists 
+  -- reset the two-dimensional mapping from ranks to lists
   -- of corresponding nodes
   self.ranking:reset()
 
@@ -418,7 +418,7 @@
   -- add all sinks to the queue
   for _,node in ipairs(self.graph.nodes) do
     local edges = node:getIncomingEdges()
-    
+
     remaining_edges[node] = #edges
 
     if #edges == 0 then
@@ -428,23 +428,23 @@
 
   -- run long as there are nodes to be ranked
   while #queue > 0 do
-    
+
     -- fetch the next unranked node from the queue
     local node = dequeue()
 
     -- get a list of its incoming edges
     local in_edges = node:getIncomingEdges()
-    
+
     -- determine the minimum possible rank for the node
     local rank = 1
     for _,edge in ipairs(in_edges) do
       local neighbour = edge:getNeighbour(node)
       if self.ranking:getRank(neighbour) then
-        -- the minimum possible rank is the maximum of all neighbour ranks plus
+        -- the minimum possible rank is the maximum of all neighbor ranks plus
         -- the corresponding edge lengths
         rank = math.max(rank, self.ranking:getRank(neighbour) + edge.minimum_levels)
       end
-    end 
+    end
 
     -- rank the node
     self.ranking:setRank(node, rank)
@@ -452,7 +452,7 @@
     -- get a list of the node's outgoing edges
     local out_edges = node:getOutgoingEdges()
 
-    -- queue neighbours of nodes for which all incoming edges have been scanned
+    -- queue neighbors of nodes for which all incoming edges have been scanned
     for _,edge in ipairs(out_edges) do
       local head = edge:getHead()
       remaining_edges[head] = remaining_edges[head] - 1
@@ -480,7 +480,7 @@
     for _,v in ipairs(in_edges) do
       edges[#edges + 1] = v
     end
-    
+
     for _,edge in ipairs(edges) do
       local neighbour = edge:getNeighbour(node)
       if (not marked[neighbour]) and math.abs(self:edgeSlack(edge)) < 0.00001 then
@@ -489,7 +489,7 @@
         for _,node in ipairs(edge.nodes) do
           marked[node] = true
         end
-        
+
         if #self.tree.edges == #self.graph.nodes-1 then
           return true
         end
@@ -502,7 +502,7 @@
 
     return false
   end
-  
+
   for _,node in ipairs(self.graph.nodes) do
     self.tree = Graph.new()
     self.tree_node = {}
@@ -511,7 +511,7 @@
     self.orig_edge = {}
 
     build_tight_tree(node)
-    
+
     if #self.tree.edges > 0 then
       break
     end
@@ -561,10 +561,10 @@
 
   local function visit(search, data)
     search:setVisited(data, true)
-    
+
     local into = data.node:getIncomingEdges()
     local out = data.node:getOutgoingEdges()
-    
+
     for i=#into,1,-1 do
       local edge = into[i]
       if edge ~= data.parent_edge then
@@ -621,10 +621,10 @@
 
     -- next we push all outgoing and incoming edges in reverse order
     -- to simulate recursive calls
-    
+
     local into = data.node:getIncomingEdges()
     local out  = data.node:getOutgoingEdges()
-    
+
     for i=#into,1,-1 do
       local edge = into[i]
       if edge ~= data.parent_edge then
@@ -748,8 +748,8 @@
 
 function NetworkSimplex:nextSearchIndex()
   local index = 1
-    
-  -- avoid tree edge index out of bounds by resetting the search index 
+
+  -- avoid tree edge index out of bounds by resetting the search index
   -- as soon as it leaves the range of edge indices in the tree
   if self.search_index > #self.tree.edges then
     self.search_index = 1
@@ -774,10 +774,10 @@
 
     local orig_node = self.orig_node[data.node]
     self.ranking:setRank(orig_node, self.ranking:getRank(orig_node) - data.delta)
-    
+
     local into = data.node:getIncomingEdges()
     local out  = data.node:getOutgoingEdges()
-    
+
     for i=#into,1,-1 do
       local edge = into[i]
       if edge ~= self.parent_edge[data.node] then
@@ -800,10 +800,10 @@
 
 function NetworkSimplex:rerankBeforeReplacingEdge(leave_edge, enter_edge)
   local delta = self:edgeSlack(enter_edge)
-  
+
   if delta > 0 then
     local tail = leave_edge:getTail()
-    
+
     if #tail.edges == 1 then
       self:rerank(tail, delta)
     else
@@ -863,8 +863,8 @@
 
   -- create tree nodes if necessary
   for _,node in ipairs(edge.nodes) do
-    local tree_node 
-    
+    local tree_node
+
     if self.tree_node[node] then
       tree_node = self.tree_node[node]
     else

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodePositioningGansnerKNV1993.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodePositioningGansnerKNV1993.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodePositioningGansnerKNV1993.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -32,9 +32,9 @@
   local simplex = NetworkSimplex.new(auxiliary_graph, NetworkSimplex.BALANCE_LEFT_RIGHT)
   simplex:run()
   local x_ranking = simplex.ranking
-  
+
   local layers = Storage.new()
-  
+
   local ranks = self.ranking:getRanks()
   for _,rank in ipairs(ranks) do
     local nodes = self.ranking:getNodes(rank)
@@ -45,7 +45,7 @@
   end
 
   layered.arrange_layers_by_baselines(layers, self.main_algorithm.adjusted_bb, self.main_algorithm.ugraph)
-  
+
   -- Copy back
   for _,rank in ipairs(ranks) do
     local nodes = self.ranking:getNodes(rank)

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodeRankingGansnerKNV1993.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodeRankingGansnerKNV1993.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodeRankingGansnerKNV1993.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -142,7 +142,7 @@
     end
     self.graph:addEdge(edge)
   end
-  
+
   for _,node in ipairs(self.cluster_nodes) do
     self.ranking:setRank(node, nil)
     self.graph:deleteNode(node)

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodeRankingMinimumHeight.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodeRankingMinimumHeight.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/NodeRankingMinimumHeight.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -28,8 +28,8 @@
       ranking:setRank(node, 1)
     else
       local max_rank = -math.huge
-      for _,edge in ipairs(edge) do
-	max_rank = math.max(max_rank, ranking:getRank(edge:getNeighbour(node)))
+      for _,edge in ipairs(edges) do
+        max_rank = math.max(max_rank, ranking:getRank(edge:getNeighbour(node)))
       end
 
       assert(max_rank >= 1)
@@ -44,4 +44,4 @@
 
 -- done
 
-return NodeRankingMinimumHeight
\ No newline at end of file
+return NodeRankingMinimumHeight

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/Ranking.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/Ranking.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/Ranking.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -12,8 +12,8 @@
 
 
 
---- The Ranking class is used by the Sugiyama algorithm to compute an ordering on the
--- nodes of a layer
+--- The Ranking class is used by the Sugiyama algorithm to compute an
+-- ordering on the nodes of a layer
 
 local Ranking = {}
 Ranking.__index = Ranking
@@ -43,7 +43,7 @@
 
 function Ranking:copy()
   local copied_ranking = Ranking.new()
-  
+
   -- copy rank to nodes mapping
   for rank, nodes in pairs(self.rank_to_nodes) do
     copied_ranking.rank_to_nodes[rank] = lib.copy(self.rank_to_nodes[rank])
@@ -113,7 +113,7 @@
   if rank == new_rank then
     return
   end
-  
+
   if rank then
     for n = pos+1, #self.rank_to_nodes[rank] do
       local other_node = self.rank_to_nodes[rank][n]
@@ -196,7 +196,7 @@
   for node in pairs(self.position_in_rank) do
     local rank, pos = self:getNodeInfo(node)
     local new_rank = rank - (min_rank - 1)
-    
+
     self.rank_to_nodes[new_rank] = self.rank_to_nodes[new_rank] or {}
     self.rank_to_nodes[new_rank][pos] = node
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/Sugiyama.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/Sugiyama.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/Sugiyama.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -42,7 +42,7 @@
 declare {
   key       = "layered layout",
   algorithm = Sugiyama,
-  
+
   preconditions = {
     connected = true,
     loop_free = true,
@@ -54,46 +54,44 @@
 
   old_graph_model = true,
 
-  summary = [["  
-       The |layered layout| is the key used to select the modular Sugiyama
-       layout algorithm. 
+  summary = [["
+    The |layered layout| is the key used to select the modular Sugiyama
+    layout algorithm.
   "]],
   documentation = [["
-       This algorithm consists of five consecutive steps, each of which can be
-       configured independently of the other ones (how this is done is
-       explained later in this section). Naturally, the ``best'' heuristics
-       are selected by default, so there is typically no need to change the
-       settings, but what is the ``best'' method for one graph need not be
-       the best one for another graph.
-        
-       As can be seen in the first example, the algorithm will not only
-       position the nodes of a graph, but will also perform an edge
-       routing. This will look visually quite pleasing if you add the
-       |rounded corners| option:
+    This algorithm consists of five consecutive steps, each of which can be
+    configured independently of the other ones (how this is done is
+    explained later in this section). Naturally, the ``best'' heuristics
+    are selected by default, so there is typically no need to change the
+    settings, but what is the ``best'' method for one graph need not be
+    the best one for another graph.
+
+    As can be seen in the first example, the algorithm will not only
+    position the nodes of a graph, but will also perform an edge
+    routing. This will look visually quite pleasing if you add the
+    |rounded corners| option:
   "]],
-  examples = {
-    [["
-       \tikz \graph [layered layout, sibling distance=7mm]
-       {
-	 a -> {
-	   b,
-	   c -> { d, e, f }
-	 } ->
-	 h ->
-	 a
-       };    
-    "]],
-    [["
-       \tikz [rounded corners] \graph [layered layout, sibling distance=7mm]
-       {
-         a -> {
-           b,
-           c -> { d, e, f }
-         } ->
-         h -> 
-         a
-       };    
-   "]]
+  examples = {[["
+    \tikz \graph [layered layout, sibling distance=7mm]
+    {
+      a -> {
+        b,
+        c -> { d, e, f }
+      } ->
+      h ->
+      a
+    };
+  "]],[["
+    \tikz [rounded corners] \graph [layered layout, sibling distance=7mm]
+    {
+      a -> {
+        b,
+        c -> { d, e, f }
+      } ->
+      h ->
+      a
+    };
+  "]]
   }
 }
 
@@ -104,16 +102,16 @@
   type = "number",
   initial = "1",
 
-  summary = [["  
-       The minimum number of levels that an edge must span. It is a bit of
-       the opposite of the |weight| parameter: While a large |weight|
-       causes an edge to become shorter, a larger |minimum layers| value
-       causes an edge to be longer.
+  summary = [["
+    The minimum number of levels that an edge must span. It is a bit of
+    the opposite of the |weight| parameter: While a large |weight|
+    causes an edge to become shorter, a larger |minimum layers| value
+    causes an edge to be longer.
   "]],
   examples = [["
-      \tikz \graph [layered layout] {
-        a -- {b [> minimum layers=3], c, d} -- e -- a;
-      };
+    \tikz \graph [layered layout] {
+      a -- {b [> minimum layers=3], c, d} -- e -- a;
+    };
   "]]
 }
 
@@ -124,48 +122,48 @@
   key = "same layer",
   layer = 0,
 
-  summary = [["  
-       The |same layer| collection allows you to enforce that several nodes
-       a on the same layer of a layered layout (this option is also known
-       as |same rank|). You use it like this:
+  summary = [["
+    The |same layer| collection allows you to enforce that several nodes
+    a on the same layer of a layered layout (this option is also known
+    as |same rank|). You use it like this:
   "]],
   examples = {[["
-       \tikz \graph [layered layout] {
-         a -- b -- c -- d -- e;
-      
-         { [same layer] a, b };
-         { [same layer] d, e };
-       };
+    \tikz \graph [layered layout] {
+      a -- b -- c -- d -- e;
+
+      { [same layer] a, b };
+      { [same layer] d, e };
+    };
   "]],[["
-       \tikz [rounded corners] \graph [layered layout] {
-	 1972 -> 1976 -> 1978 -> 1980 -> 1982 -> 1984 -> 1986 -> 1988 -> 1990 -> future;
-        
-	 { [same layer] 1972, Thompson };
-	 { [same layer] 1976, Mashey, Bourne },
-	 { [same layer] 1978, Formshell, csh },
-	 { [same layer] 1980, esh, vsh },
-	 { [same layer] 1982, ksh, "System-V" },
-	 { [same layer] 1984, v9sh, tcsh },
-	 { [same layer] 1986, "ksh-i" },
-	 { [same layer] 1988, KornShell ,Perl, rc },
-	 { [same layer] 1990, tcl, Bash },
-	 { [same layer] "future", POSIX, "ksh-POSIX" },
-	 
-	 Thompson -> { Mashey, Bourne, csh -> tcsh},
-	 Bourne -> { ksh, esh, vsh, "System-V", v9sh -> rc, Bash},
-	 { "ksh-i", KornShell } -> Bash,
-	 { esh, vsh, Formshell, csh } -> ksh,
-	 { KornShell, "System-V" } -> POSIX,
-	 ksh -> "ksh-i" -> KornShell -> "ksh-POSIX",
-	 Bourne -> Formshell,
-	 
-	 { [edge={draw=none}]
-	   Bash -> tcl,
-	   KornShell -> Perl
-	 }
-       };
-   "]]
-  }     
+      \tikz [rounded corners] \graph [layered layout] {
+        1972 -> 1976 -> 1978 -> 1980 -> 1982 -> 1984 -> 1986 -> 1988 -> 1990 -> future;
+
+        { [same layer] 1972, Thompson };
+        { [same layer] 1976, Mashey, Bourne },
+        { [same layer] 1978, Formshell, csh },
+        { [same layer] 1980, esh, vsh },
+        { [same layer] 1982, ksh, "System-V" },
+        { [same layer] 1984, v9sh, tcsh },
+        { [same layer] 1986, "ksh-i" },
+        { [same layer] 1988, KornShell ,Perl, rc },
+        { [same layer] 1990, tcl, Bash },
+        { [same layer] "future", POSIX, "ksh-POSIX" },
+
+        Thompson -> { Mashey, Bourne, csh -> tcsh},
+        Bourne -> { ksh, esh, vsh, "System-V", v9sh -> rc, Bash},
+        { "ksh-i", KornShell } -> Bash,
+        { esh, vsh, Formshell, csh } -> ksh,
+        { KornShell, "System-V" } -> POSIX,
+        ksh -> "ksh-i" -> KornShell -> "ksh-POSIX",
+        Bourne -> Formshell,
+
+        { [edge={draw=none}]
+          Bash -> tcl,
+          KornShell -> Perl
+        }
+      };
+  "]]
+  }
 }
 
 
@@ -176,15 +174,15 @@
   if #self.graph.nodes <= 1 then
      return
   end
-    
+
   local options = self.digraph.options
-  
-  local cycle_removal_algorithm_class         = options.algorithm_phases['cycle removal'] 
+
+  local cycle_removal_algorithm_class         = options.algorithm_phases['cycle removal']
   local node_ranking_algorithm_class          = options.algorithm_phases['node ranking']
   local crossing_minimization_algorithm_class = options.algorithm_phases['crossing minimization']
   local node_positioning_algorithm_class      = options.algorithm_phases['node positioning']
   local edge_routing_algorithm_class          = options.algorithm_phases['layer edge routing']
-  
+
   self:preprocess()
 
   -- Helper function for collapsing multiedges
@@ -197,7 +195,7 @@
 
   -- Create a subalgorithm object. Needed so that removed loops
   -- are not stored on top of removed loops from main call.
-  local cluster_subalgorithm = { graph = self.graph } 
+  local cluster_subalgorithm = { graph = self.graph }
   self.graph:registerAlgorithm(cluster_subalgorithm)
 
   self:mergeClusters()
@@ -204,7 +202,7 @@
 
   Simplifiers:removeLoopsOldModel(cluster_subalgorithm)
   Simplifiers:collapseMultiedgesOldModel(cluster_subalgorithm, collapse)
-  
+
   cycle_removal_algorithm_class.new { main_algorithm = self, graph = self.graph }:run()
   self.ranking = node_ranking_algorithm_class.new{ main_algorithm = self, graph = self.graph }:run()
   self:restoreCycles()
@@ -213,12 +211,12 @@
   Simplifiers:restoreLoopsOldModel(cluster_subalgorithm)
 
   self:expandClusters()
-  
+
   -- Now do actual computation
   Simplifiers:collapseMultiedgesOldModel(cluster_subalgorithm, collapse)
   cycle_removal_algorithm_class.new{ main_algorithm = self, graph = self.graph }:run()
   self:insertDummyNodes()
-  
+
   -- Main algorithm
   crossing_minimization_algorithm_class.new{
     main_algorithm = self,
@@ -230,13 +228,13 @@
     graph = self.graph,
     ranking = self.ranking
   }:run()
-  
+
   -- Cleanup
   self:removeDummyNodes()
   Simplifiers:expandMultiedgesOldModel(cluster_subalgorithm)
   edge_routing_algorithm_class.new{ main_algorithm = self, graph = self.graph }:run()
   self:restoreCycles()
-  
+
 end
 
 
@@ -281,14 +279,14 @@
           local dummy = Node.new{
             pos = Vector.new(),
             name = 'dummy@' .. neighbour.name .. '@to@' .. node.name .. '@at@' .. rank,
-	    kind = "dummy",
-	    orig_vertex = pgf.gd.model.Vertex.new{}
+            kind = "dummy",
+            orig_vertex = pgf.gd.model.Vertex.new{}
           }
 
           dummy_id = dummy_id + 1
 
           self.graph:addNode(dummy)
-	  self.ugraph:add {dummy.orig_vertex}
+          self.ugraph:add {dummy.orig_vertex}
 
           self.ranking:setRank(dummy, rank)
 
@@ -306,7 +304,7 @@
           local target = dummies[i]
 
           local dummy_edge = Edge.new{
-            direction = Edge.RIGHT, 
+            direction = Edge.RIGHT,
             reversed = false,
             weight = edge.weight, -- TODO or should we divide the weight of the original edge by the number of virtual edges?
           }
@@ -354,8 +352,8 @@
     if edge.reversed then
       local bp = edge.bend_points
       for i=1,#bp/2 do
-	local j = #bp + 1 - i
-	bp[i], bp[j] = bp[j], bp[i]
+        local j = #bp + 1 - i
+        bp[i], bp[j] = bp[j], bp[i]
       end
     end
 
@@ -375,7 +373,7 @@
   self.original_nodes = {}
 
   for _,cluster in ipairs(self.graph.clusters) do
-    
+
     local cluster_node = cluster.nodes[1]
     table.insert(self.cluster_nodes, cluster_node)
 
@@ -475,4 +473,4 @@
 
 -- done
 
-return Sugiyama
\ No newline at end of file
+return Sugiyama

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/crossing_minimization.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/crossing_minimization.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/crossing_minimization.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -48,11 +48,11 @@
 -- the nodes of a specific layer are reordered using a neighbored
 -- layer as a fixed reference. This problem is known as one-sided
 -- crossing minimization, which unfortunately is NP-hard. In the
--- following various heuristics to solve this problem are 
+-- following various heuristics to solve this problem are
 -- presented.
 --
 -- For more details, please see Section 4.1.4 of Pohlmann's Diploma
--- thesis. 
+-- thesis.
 --
 -- @end
 
@@ -66,16 +66,16 @@
   phase = "crossing minimization",
   phase_default = true,
 
-  summary = [["  
-       Gansner et al. combine an initial ordering based on a depth-first
-       search with the median and greedy switch heuristics applied in the
-       form of an alternating layer-by-layer sweep based on a weighted
-       median. 
+  summary = [["
+    Gansner et al. combine an initial ordering based on a depth-first
+    search with the median and greedy switch heuristics applied in the
+    form of an alternating layer-by-layer sweep based on a weighted
+    median.
   "]],
-  documentation = [["      
-       For more details, please see Section 4.1.4 of Pohlmann's Diploma
-       thesis. 
-      
-       This is the default algorithm for crossing minimization.
-   "]]
- }
+  documentation = [["
+    For more details, please see Section~4.1.4 of Pohlmann's Diploma
+    thesis.
+
+    This is the default algorithm for crossing minimization.
+  "]]
+}

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/cycle_removal.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/cycle_removal.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/cycle_removal.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -34,39 +34,38 @@
   phase = "cycle removal",
   phase_default = true,
 
-  summary = [["  
-       Selects a cycle removal algorithm that is especially
-       appropriate for graphs specified ``by hand''. 
+  summary = [["
+    Selects a cycle removal algorithm that is especially
+    appropriate for graphs specified ``by hand''.
   "]],
-  documentation = [["      
-       When graphs are created by humans manually, one can 
-       make assumptions about the input graph that would otherwise not
-       be possible. For instance, it seems reasonable to assume that the
-       order in which nodes and edges are entered by the user somehow
-       reflects the natural flow the user has had in mind for the graph.
+  documentation = [["
+    When graphs are created by humans manually, one can
+    make assumptions about the input graph that would otherwise not
+    be possible. For instance, it seems reasonable to assume that the
+    order in which nodes and edges are entered by the user somehow
+    reflects the natural flow the user has had in mind for the graph.
 
-       In order to preserve the natural flow of the input graph, Gansner
-       et al.\ propose to remove cycles by performing a series of
-       depth-first searches starting at individual nodes in the order they
-       appear in the graph. This algorithm
-       implicitly constructs a spanning tree of the nodes reached during
-       the searches. It thereby partitions the edges of the graph into
-       tree edges and non-tree edges. The non-tree edges are further
-       subdivided into forward edges, cross edges, and back edges. Forward
-       edges point from a tree nodes to one of their descendants. Cross
-       edges connect unrelated branches in 
-       the search tree. Back edges connect descendants to one of their
-       ancestors. It is not hard to see that reversing back edges will not
-       only introduce no new cycles but will also make any directed graph
-       acyclic. Gansner et al.\ argue that this approach is more stable
-       than others in that fewer inappropriate edges are reversed compared
-       to other methods, despite the lack of a provable upper bound
-       for the number of reversed edges.
-      
-       See section 4.1.1 of Pohlmann's Diplom thesis for more details.
-      
-       This is the default algorithm for cycle removals.
-   "]]
+    In order to preserve the natural flow of the input graph, Gansner
+    et al.\ propose to remove cycles by performing a series of
+    depth-first searches starting at individual nodes in the order they
+    appear in the graph. This algorithm implicitly constructs a spanning
+    tree of the nodes reached during the searches. It thereby partitions
+    the edges of the graph into tree edges and non-tree edges. The
+    non-tree edges are further subdivided into forward edges, cross edges,
+    and back edges. Forward edges point from a tree nodes to one of their
+    descendants. Cross edges connect unrelated branches in the search tree.
+    Back edges connect descendants to one of their ancestors. It is not
+    hard to see that reversing back edges will not only introduce no new
+    cycles but will also make any directed graph acyclic.
+    Gansner et al.\ argue that this approach is more stable than others
+    in that fewer inappropriate edges are reversed compared to other
+    methods, despite the lack of a provable upper bound for the number
+    of reversed edges.
+
+    See section~4.1.1 of Pohlmann's Diplom thesis for more details.
+
+    This is the default algorithm for cycle removals.
+  "]]
  }
 
 ---
@@ -76,12 +75,12 @@
   algorithm = "pgf.gd.layered.CycleRemovalEadesLS1993",
   phase = "cycle removal",
 
-  summary = [["  
-       This algorithm implements a greedy heuristic of Eades et al.\ for
-       cycle removal that  prioritizes sources and sinks.
+  summary = [["
+    This algorithm implements a greedy heuristic of Eades et al.\ for
+    cycle removal that  prioritizes sources and sinks.
   "]],
-  documentation = [["      
-       See section 4.1.1 of Pohlmann's Diploma theses for details.
+  documentation = [["
+    See section~4.1.1 of Pohlmann's Diploma theses for details.
   "]]
 }
 
@@ -93,12 +92,12 @@
   algorithm = "pgf.gd.layered.CycleRemovalEadesLS1993",
   phase = "cycle removal",
 
-  summary = [["  
-       This algorithm implements a greedy heuristic of Eades et al.\ for
-       cycle removal that prioritizes sources and sinks.
+  summary = [["
+    This algorithm implements a greedy heuristic of Eades et al.\ for
+    cycle removal that prioritizes sources and sinks.
   "]],
-  documentation = [["      
-       See section 4.1.1 of Pohlmann's Diploma theses for details.
+  documentation = [["
+    See section~4.1.1 of Pohlmann's Diploma theses for details.
   "]]
  }
 
@@ -109,14 +108,13 @@
   algorithm = "pgf.gd.layered.CycleRemovalBergerS1990a",
   phase = "cycle removal",
 
-  summary = [["  
-       This algorithm implements a greedy heuristic of Berger and Shor for
-       cycle removal. It
-       is not really compared to the other heuristics and only included
-       for demonstration purposes.
+  summary = [["
+    This algorithm implements a greedy heuristic of Berger and Shor for
+    cycle removal. It is not really compared to the other heuristics and
+    only included for demonstration purposes.
   "]],
-  documentation = [["      
-       See section 4.1.1 of Pohlmann's Diploma theses for details.
+  documentation = [["
+    See section~4.1.1 of Pohlmann's Diploma theses for details.
   "]]
  }
 
@@ -127,13 +125,12 @@
   algorithm = "pgf.gd.layered.CycleRemovalBergerS1990b",
   phase = "cycle removal",
 
-  summary = [["  
-       This algorithm implements a randomized greedy heuristic of Berger
-       and Shor for cycle removal. It, too, is not really compared to
-       the other heuristics and only included for demonstration purposes.
+  summary = [["
+    This algorithm implements a randomized greedy heuristic of Berger
+    and Shor for cycle removal. It, too, is not really compared to
+    the other heuristics and only included for demonstration purposes.
   "]],
-  documentation = [["      
-       See section 4.1.1 of Pohlmann's Diploma theses for details.
+  documentation = [["
+    See section~4.1.1 of Pohlmann's Diploma theses for details.
   "]]
- }
-
+ }
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/edge_routing.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/edge_routing.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/edge_routing.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -21,10 +21,10 @@
 -- step. This makes sense if all nodes have the same size and
 -- shape. In practical scenarios, however, this assumption often does
 -- not hold. In these cases, advanced techniques may have to be
--- applied in order to avoid overlaps of nodes and edges. 
+-- applied in order to avoid overlaps of nodes and edges.
 --
--- For more details, please see Section 4.1.5 of Pohlmann's Diploma
--- thesis. 
+-- For more details, please see Section~4.1.5 of Pohlmann's Diploma
+-- thesis.
 --
 -- @end
 
@@ -38,13 +38,12 @@
   phase = "layer edge routing",
   phase_default = true,
 
-  summary = [["  
-       This edge routing algorithm uses polygonal lines to connect nodes. 
+  summary = [["
+    This edge routing algorithm uses polygonal lines to connect nodes.
   "]],
-  documentation = [["            
-       For more details, please see Section 4.1.5 of Pohlmann's Diploma
-       thesis. 
-      
-       This is the default algorithm for edge routing.
-   "]]
- }
+  documentation = [["
+    For more details, please see Section~4.1.5 of Pohlmann's Diploma thesis.
+
+    This is the default algorithm for edge routing.
+  "]]
+}

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/library.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/library.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/library.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -30,34 +30,37 @@
 -- implemented it as part of his Diploma thesis. Please consult this
 -- thesis for a detailed explanation of the Sugiyama method and its
 -- history:
---
+-- %
 -- \begin{itemize}
--- \item
---   Jannis Pohlmann,
---   \newblock \emph{Configurable Graph Drawing Algorithms
---     for the \tikzname\ Graphics Description Language,}
---   \newblock Diploma Thesis,
---   \newblock Institute of Theoretical Computer Science, Univerist\"at
---   zu L\"ubeck, 2011.\\[.5em]
---   \newblock Available online via 
---   \url{http://www.tcs.uni-luebeck.de/downloads/papers/2011/}\\ \url{2011-configurable-graph-drawing-algorithms-jannis-pohlmann.pdf}
---   \\[.5em]
---   (Note that since the publication of this thesis some option names
---   have been changed. Most noticeably, the option name
---   |layered drawing| was changed to |layered layout|, which is somewhat
---   more consistent with other names used in the graph drawing
---   libraries. Furthermore, the keys for choosing individual
---   algorithms for the different algorithm phases, have all changed.) 
+--   \item
+--     Jannis Pohlmann,
+--     \newblock \emph{Configurable Graph Drawing Algorithms
+--       for the \tikzname\ Graphics Description Language,}
+--     \newblock Diploma Thesis,
+--     \newblock Institute of Theoretical Computer Science, Universit\"at
+--       zu L\"ubeck, 2011.\\[.5em]
+--     \newblock Available online via
+--       \url{http://www.tcs.uni-luebeck.de/downloads/papers/2011/}\\
+--       \url{2011-configurable-graph-drawing-algorithms-jannis-pohlmann.pdf}
+--       \\[.5em]
+--       (Note that since the publication of this thesis some option names
+--       have been changed. Most noticeably, the option name
+--       |layered drawing| was changed to |layered layout|, which is somewhat
+--       more consistent with other names used in the graph drawing
+--       libraries. Furthermore, the keys for choosing individual
+--       algorithms for the different algorithm phases, have all changed.)
 -- \end{itemize}
 --
 -- The Sugiyama methods lays out a graph in five steps:
+-- %
 -- \begin{enumerate}
--- \item Cycle removal.
--- \item Layer assignment (sometimes called node ranking).
--- \item Crossing minimization (also referred to as node ordering).
--- \item Node positioning (or coordinate assignment).
--- \item Edge routing.
+--   \item Cycle removal.
+--   \item Layer assignment (sometimes called node ranking).
+--   \item Crossing minimization (also referred to as node ordering).
+--   \item Node positioning (or coordinate assignment).
+--   \item Edge routing.
 -- \end{enumerate}
+-- %
 -- It turns out that behind each of these steps there lurks an
 -- NP-complete problem, which means, in practice, that each step is
 -- impossible to perform optimally for larger graphs. For this reason,
@@ -67,11 +70,11 @@
 -- A distinctive feature of Pohlmann's implementation of the Sugiyama
 -- method for \tikzname\ is that the algorithms used for each of the
 -- steps can easily be exchanged, just specify a different option. For
--- the user, this means that by specifying a different 
--- option and thereby using a different heuristic for one of the steps, a
--- better layout can often be found. For the researcher, this means that
--- one can very easily test new approaches and new heuristics without
--- having to implement all of the other steps anew. 
+-- the user, this means that by specifying a different option and thereby
+-- using a different heuristic for one of the steps, a better layout can
+-- often be found. For the researcher, this means that one can very
+-- easily test new approaches and new heuristics without having to
+-- implement all of the other steps anew.
 --
 -- @library
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/node_positioning.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/node_positioning.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/node_positioning.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -22,15 +22,14 @@
 -- small and edges are drawn as vertically as possible. Another goal
 -- is to avoid node and edge overlaps which is crucial in particular
 -- if the nodes are allowed to have non-uniform sizes. The
--- y-coordinates of the nodes have no influence on the number of
+-- $y$-coordinates of the nodes have no influence on the number of
 -- bends. Obviously, nodes need to be separated enough geometrically
 -- so that they do not overlap. It feels natural to aim at separating
 -- all layers in the drawing by the same amount. Large nodes, however,
 -- may force node positioning algorithms to override this uniform
--- level distance in order to avoid overlaps. 
+-- level distance in order to avoid overlaps.
 --
--- For more details, please see Section 4.1.2 of Pohlmann's Diploma
--- thesis. 
+-- For more details, please see Section~4.1.2 of Pohlmann's Diploma thesis.
 --
 -- @end
 
@@ -44,14 +43,13 @@
   phase = "node positioning",
   phase_default = true,
 
-  summary = [["  
-       This node positioning method, due to Gasner et al., is based on a
-       linear optimization problem.
+  summary = [["
+    This node positioning method, due to Gasner et al., is based on a
+    linear optimization problem.
   "]],
-  documentation = [["            
-       For more details, please see Section 4.1.3 of Pohlmann's Diploma
-       thesis. 
-      
-       This is the default algorithm for layer assignments.
-   "]]
- }
+  documentation = [["
+    For more details, please see Section~4.1.3 of Pohlmann's Diploma thesis.
+
+    This is the default algorithm for layer assignments.
+  "]]
+}

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/node_ranking.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/node_ranking.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered/node_ranking.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -18,7 +18,7 @@
 --
 -- Algorithms for producing layered drawings place nodes on discrete
 -- layers from top to bottom. Layer assignment is the problem of
--- finding a partition so that for all edges $e = (u,v) \in E(G)$ the 
+-- finding a partition so that for all edges $e = (u,v) \in E(G)$ the
 -- equation $\mathit{layer}(u) < \mathit{layer}(v)$ holds. Such a
 -- partition is called a \emph{layering}. This definition can be extended by
 -- introducing edge weights or priorities and minimum length
@@ -25,8 +25,8 @@
 -- constraints which has practical applications and allows users to
 -- fine-tune the results.
 --
--- For more details, please see Section 4.1.2 of Pohlmann's Diploma
--- thesis. 
+-- For more details, please see Section~4.1.2 of Pohlmann's Diploma
+-- thesis.
 --
 -- @end
 
@@ -40,20 +40,20 @@
   phase = "node ranking",
   phase_default = true,
 
-  summary = [["  
-       This layer assigment method, due to Gasner et al., is based on a
-       linear optimization problem.
+  summary = [["
+    This layer assignment method, due to Gasner et al., is based on a
+    linear optimization problem.
   "]],
-  documentation = [["      
-       For more details, please see Section 4.1.2 of Pohlmann's Diploma
-       thesis. 
-      
-       This is the default algorithm for layer assignments.
-   "]]
- }
+  documentation = [["
+    For more details, please see Section~4.1.2 of Pohlmann's Diploma
+    thesis.
 
+    This is the default algorithm for layer assignments.
+  "]]
+}
 
 
+
 ---
 
 declare {
@@ -61,14 +61,12 @@
   algorithm = "pgf.gd.layered.NodeRankingMinimumHeight",
   phase = "node ranking",
 
-  summary = [["  
-       This layer assigment method minimizes the height of the resulting
-       graph. 
+  summary = [["
+    This layer assignment method minimizes the height of the resulting graph.
   "]],
-  documentation = [["      
-       For more details, please see Section 4.1.3 of Pohlmann's Diploma
-       thesis. 
-   "]]
- }
+  documentation = [["
+    For more details, please see Section~4.1.3 of Pohlmann's Diploma thesis.
+  "]]
+}
 
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/layered.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,7 +20,7 @@
 local lib = require "pgf.gd.lib"
 local Storage = require "pgf.gd.lib.Storage"
 
--- 
+--
 -- This file defines some basic functions to compute and/or set the
 -- ideal distances between nodes of any kind of layered drawing of a
 -- graph.
@@ -30,7 +30,7 @@
 -- Compute the ideal distance between two siblings
 --
 -- @param paddings A |Storage| object in which the computed distances
--- (paddings) are stored. 
+-- (paddings) are stored.
 -- @param graph The graph object
 -- @param n1 The first node
 -- @param n2 The second node
@@ -55,9 +55,9 @@
     sep =   (n1_is_node and lib.lookup_option('sibling post sep', n1, graph) or 0)
           + (n2_is_node and lib.lookup_option('sibling pre sep', n2, graph) or 0)
   end
-  
-  return math.max(ideal_distance, sep + 
-		  ((n1_is_node and paddings[n1].sibling_post) or 0) -
+
+  return math.max(ideal_distance, sep +
+          ((n1_is_node and paddings[n1].sibling_post) or 0) -
                   ((n2_is_node and paddings[n2].sibling_pre) or 0))
 end
 
@@ -88,7 +88,7 @@
   if #l1 == 0 or #l2 == 0 then
     return 0
   end
-  
+
   local layer_distance = -math.huge
   local layer_pre_sep  = -math.huge
   local layer_post_sep = -math.huge
@@ -110,7 +110,7 @@
       min_pre = math.min(min_pre, paddings[n].layer_pre)
     end
   end
-  
+
   return math.max(layer_distance, layer_post_sep + layer_pre_sep + max_post - min_pre)
 end
 
@@ -121,18 +121,18 @@
 --
 -- @param layers A |Storage| object assigning layers to vertices.
 -- @param paddings A |Storage| object storing the computed distances
--- (paddings). 
+-- (paddings).
 -- @param graph The graph in which the nodes reside
 
 function layered.arrange_layers_by_baselines (layers, paddings, graph)
 
   local layer_vertices = Storage.newTableStorage()
-  
+
   -- Decompose into layers:
   for _,v in ipairs(graph.vertices) do
     table.insert(layer_vertices[layers[v]], v)
   end
-  
+
   if #layer_vertices > 0 then -- sanity check
     -- Now compute ideal distances and store
     local height = 0
@@ -140,12 +140,12 @@
     for _,v in ipairs(layer_vertices[1]) do
       v.pos.y = 0
     end
-    
+
     for i=2,#layer_vertices do
       height = height + layered.baseline_distance(paddings, graph, layer_vertices[i-1], layer_vertices[i])
 
       for _,v in ipairs(layer_vertices[i]) do
-	v.pos.y = height 
+        v.pos.y = height
       end
     end
   end
@@ -156,4 +156,4 @@
 
 -- Done
 
-return layered
\ No newline at end of file
+return layered

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Bezier.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Bezier.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Bezier.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -13,7 +13,7 @@
 
 ---
 -- This library offers a number of methods for working with Bezi\'er
--- curves. 
+-- curves.
 
 local Bezier = {}
 
@@ -29,7 +29,7 @@
 ---
 -- Compute a point ``along a curve at a time''. You provide the four
 -- coordinates of the curve and a time. You get a point on the curve
--- as return value as well as the two suport vector for curve
+-- as return value as well as the two support vector for curve
 -- before this point and two support vectors for the curve after the
 -- point.
 --
@@ -115,7 +115,7 @@
   local f1b = t1 * s1^2 * 3
   local f1c = t1^2 * s1 * 3
   local f1d = t1^3
-  
+
   local f2a = s2^3
   local f2b = t2 * s2^2 * 3
   local f2c = t2^2 * s2 * 3
@@ -127,7 +127,7 @@
   --
   -- p1.y - from.y * f1a - to.y * f1d = sup1.y * f1b + sup2.y * f1c
   -- p2.y - from.y * f2a - to.y * f2d = sup1.y * f2b + sup2.y * f2c
-  
+
   local a = f1b
   local b = f1c
   local c = p1.x - from.x * f1a - to.x * f1d
@@ -138,16 +138,16 @@
   local det = a*e - b*d
   local x1 = -(b*f - e*c)/det
   local x2 = -(c*d - a*f)/det
-  
+
   local c = p1.y - from.y * f1a - to.y * f1d
   local f = p2.y - from.y * f2a - to.y * f2d
-  
+
   local det = a*e - b*d
   local y1 = -(b*f - e*c)/det
   local y2 = -(c*d - a*f)/det
 
   return Coordinate.new(x1,y1), Coordinate.new(x2,y2)
-  
+
 end
 
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Direct.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Direct.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Direct.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -30,12 +30,12 @@
 -- arrows. For instance, while "a <- b" will cause an arc from a to be
 -- to be added to the syntactic digraph, calling this function will
 -- return a digraph in which there is an arc from b to a rather than
--- the other way round. In detail, "a <- b" is tranlated as just
+-- the other way round. In detail, "a <- b" is translated as just
 -- described, "a -> b" yields an arc from a to b as expected, "a <-> b"
 -- and "a -- b" yield arcs in both directions and, finally, "a -!- b"
 -- yields no arc at all.
 --
--- @param syntactic_digraph A syntacitic digraph, usually the "input"
+-- @param syntactic_digraph A syntactic digraph, usually the "input"
 -- graph as specified syntactically be the user.
 --
 -- @return A new "semantic" digraph object.
@@ -49,12 +49,12 @@
     for _,m in ipairs(a.syntactic_edges) do
       local direction = m.direction
       if direction == "->" then
-	digraph:connect(a.tail, a.head)
+        digraph:connect(a.tail, a.head)
       elseif direction == "<-" then
-	digraph:connect(a.head, a.tail)
+        digraph:connect(a.head, a.tail)
       elseif direction == "--" or direction == "<->" then
-	digraph:connect(a.tail, a.head)
-	digraph:connect(a.head, a.tail)
+        digraph:connect(a.tail, a.head)
+        digraph:connect(a.head, a.tail)
       end
       -- Case -!-: No edges...
     end
@@ -92,4 +92,4 @@
 
 -- Done
 
-return Direct
\ No newline at end of file
+return Direct

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Event.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Event.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Event.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -19,7 +19,7 @@
 -- arcs, and a digraph object representing this graph get
 -- constructed. However, even though syntactic annotations such as
 -- options for the vertices and arcs are attached to them and can be
--- accessed through the graph objects, some syntactic inforamtion is
+-- accessed through the graph objects, some syntactic information is
 -- neither represented in the digraph object nor in the vertices and
 -- the arcs. A typical example is a ``missing'' node in a tree: Since
 -- it is missing, there is neither a vertex object nor arc objects
@@ -35,37 +35,37 @@
 --
 -- The following events are created during the parsing process by the
 -- standard parsers of \tikzname:
---
+-- %
 -- \begin{itemize}
--- \item[|node|] When a node of the input graph has been parsed and
--- a |Vertex| object has been created for it, an event with kind
--- |node| is created. The |parameter| of this event is the
--- just-created vertex.
+--   \item[|node|] When a node of the input graph has been parsed and
+--     a |Vertex| object has been created for it, an event with kind
+--     |node| is created. The |parameter| of this event is the
+--     just-created vertex.
 --
--- The same kind of event is used to indicate ``missing'' nodes. In
--- this case, the |parameters| field is |nil|.
--- \item[|edge|] When an edge of the input graph has been parsed, an
--- event is created of kind |edge|. The |parameters| field will store
--- an array with two entries: The first is the |Arc| object whose
--- |syntactic_edges| field stores the |edge|. The second is the index
--- of the edge inside the |syntactic_edges| field.
--- \item[|begin|]
--- Signals the beginning of a group, which will be ended with a
--- corresponding |end| event later on. The |parameters| field will
--- indicate the kind of group. Currently, only the string
--- |"descendants"| is used as |parameters|, indicating the start of
--- several nodes that are descendants of a given node. This
--- information can be used by algorithms for reconstructing the
--- input structure of trees.
--- \item[|end|] Signals the end of a group begun by a |begin| event
--- earlier on.
+--     The same kind of event is used to indicate ``missing'' nodes. In
+--     this case, the |parameters| field is |nil|.
+--   \item[|edge|] When an edge of the input graph has been parsed, an
+--     event is created of kind |edge|. The |parameters| field will store
+--     an array with two entries: The first is the |Arc| object whose
+--     |syntactic_edges| field stores the |edge|. The second is the index
+--     of the edge inside the |syntactic_edges| field.
+--   \item[|begin|]
+--     Signals the beginning of a group, which will be ended with a
+--     corresponding |end| event later on. The |parameters| field will
+--     indicate the kind of group. Currently, only the string
+--     |"descendants"| is used as |parameters|, indicating the start of
+--     several nodes that are descendants of a given node. This
+--     information can be used by algorithms for reconstructing the
+--     input structure of trees.
+--   \item[|end|] Signals the end of a group begun by a |begin| event
+--     earlier on.
 -- \end{itemize}
--- 
--- @field kind A string representing the kind of the events. 
+--
+-- @field kind A string representing the kind of the events.
 -- @field parameters Kind-specific parameters.
 -- @field index A number that stores the events logical position in
 -- the sequence of events. The number need not be an integer array
--- index. 
+-- index.
 --
 local Event = {}
 Event.__index = Event

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/LookupTable.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/LookupTable.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/LookupTable.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -13,7 +13,7 @@
 
 ---
 -- This table provides two utility functions for managing ``lookup
--- tables.'' Such a table is a mixture of an array and a hashtable:
+-- tables''. Such a table is a mixture of an array and a hashtable:
 -- It stores (only) tables. Each table is stored once in a normal
 -- array position. Additionally, the lookup table is also indexed at
 -- the position of the table (used as a key) and this position is set
@@ -30,7 +30,7 @@
 ---
 -- Add all elements in the |array| to a lookup table. If an element of
 -- the array is already present in the table, it will not be added
--- again. 
+-- again.
 --
 -- This operation takes time $O(|\verb!array!|)$.
 --
@@ -50,7 +50,7 @@
 
 ---
 -- Add one element to a lookup table. If it is already present in the
--- table, it will not be added again. 
+-- table, it will not be added again.
 --
 -- This operation takes time $O(1)$.
 --

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/PathLengths.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/PathLengths.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/PathLengths.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -27,11 +27,11 @@
 
 
 ---
--- Performs the Dijkstra algorithm to solve the single-source shortes path problem.
+-- Performs the Dijkstra algorithm to solve the single-source shortest path problem.
 --
--- The algorithm computes the shortest paths from |source| to all nodes 
--- in the graph. It also generates a table with distance level sets, each of 
--- which contain all nodes that have the same corresponding distance to 
+-- The algorithm computes the shortest paths from |source| to all nodes
+-- in the graph. It also generates a table with distance level sets, each of
+-- which contain all nodes that have the same corresponding distance to
 -- |source|. Finally, a mapping of nodes to their parents along the
 -- shortest paths is generated to allow the reconstruction of the paths
 -- that were chosen by the Dijkstra algorithm.
@@ -39,7 +39,7 @@
 -- @param graph  The graph to compute the shortest paths for.
 -- @param source The node to compute the distances to.
 --
--- @return A mapping of nodes to their distance to |source|. 
+-- @return A mapping of nodes to their distance to |source|.
 -- @return An array of distance level sets. The set at index |i| contains
 --         all nodes that have a distance of |i| to |source|.
 -- @return A mapping of nodes to their parents to allow the reconstruction
@@ -95,7 +95,7 @@
 
 
 ---
--- Performs the Floyd-Warshall algorithm to solve the all-source shortes path problem. 
+-- Performs the Floyd-Warshall algorithm to solve the all-source shortest path problem.
 --
 -- @param graph  The graph to compute the shortest paths for.
 --

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/PriorityQueue.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/PriorityQueue.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/PriorityQueue.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -107,7 +107,7 @@
 
 
 
--- Internals: An implementation of fibonacci heaps.
+-- Internals: An implementation of Fibonacci heaps.
 FibonacciHeap.__index = FibonacciHeap
 
 
@@ -200,7 +200,7 @@
   assert(value <= node.value)
 
   node.value = value
-  
+
   if node.value < node.parent.value then
     local parent = node.parent
     self:cutFromParent(node)
@@ -231,7 +231,7 @@
 function FibonacciHeap:linkRoots(root, child)
   child.root = root
   child.parent = root
-  
+
   child = self:removeTableElement(self.trees, child)
   table.insert(root.children, child)
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Simplifiers.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Simplifiers.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Simplifiers.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -12,7 +12,7 @@
 
 
 --- The Simplifiers class is a singleton object.
--- Its methods allow implement methods for simplifing graphs, for instance 
+-- Its methods allow implement methods for simplifying graphs, for instance 
 -- for removing loops or multiedges or computing spanning trees.
 
 local Simplifiers = {}
@@ -104,7 +104,7 @@
         completed[node] = true
         pop()
       else
-	for i=#edges_to_traverse,1,-1 do
+        for i=#edges_to_traverse,1,-1 do
           local neighbour = edges_to_traverse[i]:getNeighbour(node)
           discovered[neighbour] = true
           push(neighbour)
@@ -199,9 +199,9 @@
           collapsed_edges[multiedge[neighbour]] = {}
         end
 
-	if collapse_action then
-	  collapse_action(multiedge[neighbour], edge, graph)
-	end
+        if collapse_action then
+          collapse_action(multiedge[neighbour], edge, graph)
+        end
 
         table.insert(collapsed_edges[multiedge[neighbour]], edge)
       end
@@ -251,12 +251,12 @@
       
       -- Copy bend points 
       for _,p in ipairs(multiedge.bend_points) do
-	edge.bend_points[#edge.bend_points+1] = p:copy()
+        edge.bend_points[#edge.bend_points+1] = p:copy()
       end
 
       -- Copy options
       for k,v in pairs(multiedge.algorithmically_generated_options) do
-	edge.algorithmically_generated_options[k] = v
+        edge.algorithmically_generated_options[k] = v
       end
 
       for _,node in ipairs(edge.nodes) do
@@ -276,4 +276,4 @@
 
 -- Done
 
-return Simplifiers
\ No newline at end of file
+return Simplifiers

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Stack.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Stack.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Stack.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -13,7 +13,7 @@
 
 --- A Stack is a very simple wrapper around an array
 --
--- 
+--
 
 local Stack = {}
 Stack.__index = Stack

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Storage.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Storage.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Storage.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -19,12 +19,12 @@
 -- storage. Also, you can specify that for each object of the storage
 -- you store a table. In this case, there is no need to initialize
 -- this table for each object; rather, when you write into such a
--- table and it does not yet exist, it is created ``on the fly''. 
+-- table and it does not yet exist, it is created ``on the fly''.
 --
 -- The typical way you use storages is best explained with the
 -- following example: Suppose you want to write a depth-first search
 -- algorithm for a graph. This algorithm might wish to mark all nodes
--- it has visisted. It could just say |v.marked = true|, but this might
+-- it has visited. It could just say |v.marked = true|, but this might
 -- clash with someone else also using the |marked| key. The solution is
 -- to create a |marked| storage. The algorithm can first say
 --\begin{codeexample}[code only, tikz syntax=false]
@@ -40,13 +40,13 @@
 -- no longer in use get removed automatically. You can also make it a
 -- member variable of the algorithm class, which allows you make the
 -- information about which objects are marked globally
--- accessible. 
+-- accessible.
 --
 -- Now suppose the algorithm would like to store even more stuff in
 -- the storage. For this, we might use a table and can use the fact
 -- that a storage will automatically create a table when necessary:
 --\begin{codeexample}[code only, tikz syntax=false]
---local info = Storage.newTableStorage() 
+--local info = Storage.newTableStorage()
 --
 --info[v].marked = true  -- the "info[v]" table is
 --                       -- created automatically here
@@ -66,7 +66,7 @@
 
 local SimpleStorageMetaTable = { __mode = "k" }
 
--- The adcanved metatable for table storages:
+-- The advanced metatable for table storages:
 
 local TableStorageMetaTable = {
   __mode = "k",
@@ -91,7 +91,7 @@
 
 ---
 -- Create a new storage object which will install a table for every
--- entry automatilly.
+-- entry automatically.
 --
 -- @return A new |Storage| instance.
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Transform.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Transform.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib/Transform.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -42,7 +42,7 @@
 end
 
 
---- Creates a new transformation object that represents a shift. 
+--- Creates a new transformation object that represents a shift.
 --
 -- @param x An x-shift
 -- @param y A y-shift
@@ -54,7 +54,7 @@
 end
 
 
---- Creates a new transformation object that represents a rotation. 
+--- Creates a new transformation object that represents a rotation.
 --
 -- @param angle An angle
 --
@@ -67,7 +67,7 @@
 end
 
 
---- Creates a new transformation object that represents a scaling. 
+--- Creates a new transformation object that represents a scaling.
 --
 -- @param x The horizontal scaling
 -- @param y The vertical scaling (if missing, the horizontal scaling is used)
@@ -94,8 +94,8 @@
   local a1, a2, a3, a4, a5, a6, b1, b2, b3, b4, b5, b6 =
     a[1], a[2], a[3], a[4], a[5], a[6], b[1], b[2], b[3], b[4], b[5], b[6]
   return { a1*b1 + a2*b3,  a1*b2 + a2*b4,
-	   a3*b1 + a4*b3,  a3*b2 + a4*b4,
-	   a1*b5 + a2*b6 + a5,  a3*b5 + a4*b6 + a6 }
+           a3*b1 + a4*b3,  a3*b2 + a4*b4,
+           a1*b5 + a2*b6 + a5,  a3*b5 + a4*b6 + a6 }
 end
 
 
@@ -117,4 +117,4 @@
 
 -- Done
 
-return Transform
\ No newline at end of file
+return Transform

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/lib.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -67,7 +67,7 @@
 function lib.find_min(array, f)
   local best = math.huge
   local best_result
-  local best_index 
+  local best_index
   for i=1,#array do
     local t = array[i]
     local result, p = f(t,i,array)
@@ -89,9 +89,9 @@
 -- Copies a table while preserving its metatable.
 --
 -- @param source The table to copy.
--- @param target The table to which values are to be copied or |nil| if a new 
+-- @param target The table to which values are to be copied or |nil| if a new
 --               table is to be allocated.
--- 
+--
 -- @return The |target| table or a newly allocated table containing all
 --         keys and values of the |source| table.
 --
@@ -110,10 +110,10 @@
 -- Copies an array while preserving its metatable.
 --
 -- @param source The array to copy.
--- @param target The array to which values are to be copied or |nil| if a new 
+-- @param target The array to which values are to be copied or |nil| if a new
 -- table is to be allocated. The elements of the
 -- |source| array will be added at the end.
--- 
+--
 -- @return The |target| table or a newly allocated table containing all
 --         keys and values of the |source| table.
 --
@@ -129,7 +129,7 @@
 
 
 ---
--- Apply a function to all pairs of a table, resulting in a new table. 
+-- Apply a function to all pairs of a table, resulting in a new table.
 --
 -- @param source The table.
 -- @param fun A function taking two arguments (|val| and |key|, in
@@ -140,7 +140,7 @@
 -- takes only a single argument and returns only a single argument,
 -- you have a ``classical'' value mapper. Also note that if
 -- |new_value| is |nil|, the value is removed from the table.
--- 
+--
 -- @return The new table.
 --
 function lib.map(source, fun)
@@ -159,7 +159,7 @@
 
 ---
 -- Apply a function to all elements of an array, resulting in a new
--- array. 
+-- array.
 --
 -- @param source The array.
 -- @param fun A function taking two arguments (|val| and |i|, the
@@ -169,7 +169,7 @@
 -- element is skipped. If this function is not provided (is |nil|),
 -- the identity function is used.
 -- @param new The target array (if |nil|, a new array is create).
---
+-- %
 --\begin{codeexample}[code only]
 --  local a = lib.imap(array, function(v) if some_test(v) then return v end end)
 --\end{codeexample}
@@ -176,7 +176,7 @@
 --
 -- The above code is a filter that will remove all elements from the
 -- array that do not pass |some_test|.
---
+-- %
 --\begin{codeexample}[code only]
 --  lib.imap(a, lib.id, b)
 --\end{codeexample}
@@ -238,23 +238,27 @@
 -- option table of an object contains the name field is done using
 -- |rawget| for all but the last parameter. This means that when you
 -- write
+-- %
 --\begin{codeexample}[code only]
 --lib.lookup_option("foo", vertex, graph)
 --\end{codeexample}
--- and if |/graph drawin/foo| has an inital value set, if the
+-- %
+-- and if |/graph drawing/foo| has an initial value set, if the
 -- parameter is not explicitly set in a vertex, you will get the value
 -- set for the graph or, if it is not set there either, the initial
--- value. In contrast, if you write 
+-- value. In contrast, if you write
+-- %
 --\begin{codeexample}[code only]
 -- vertex.options["foo"] or graph.options["foo"]
 --\end{codeexample}
+-- %
 -- what happens is that the first access to |.options| will
 -- \emph{always} return something when an initial parameter has been
--- set for the option |foo|. 
+-- set for the option |foo|.
 --
--- @param name   The name of the options  
+-- @param name   The name of the options
 -- @param ...    Any number of objects. Each must have an options
---               field. 
+--               field.
 --
 -- @return The found option
 
@@ -262,10 +266,10 @@
   local list = {...}
   for i=1,#list-1 do
     local o = list[i].options
-    if o then 
+    if o then
       local v = rawget(o, name)
       if v then
-	return v
+        return v
       end
     end
   end
@@ -280,12 +284,12 @@
 -- a |new| function, which takes an optional table of |initial| values
 -- and which outputs a new table whose metatable is the
 -- class. The |new| function will call the function |constructor| if
--- it exsist. Furthermore, the class object's |__index| is set to itself
+-- it exists. Furthermore, the class object's |__index| is set to itself
 -- and its meta table is set to the |base_class| field of the
 -- table. If |t| is |nil|, a new table is created.
 --
 -- Here is a typical usage of this function:
---
+-- %
 --\begin{codeexample}[code only]
 --local Point = lib.class {}
 --
@@ -297,13 +301,14 @@
 --
 --print(p:length())
 --\end{codeexample}
+-- %
 -- We can subclass this as follows:
---
+-- %
 --\begin{codeexample}[code only]
 --local Point3D = lib.class { base_class = Point }
 --
 --function Point3D:length()
---  local l = Point.length(self) -- Call base class's function 
+--  local l = Point.length(self) -- Call base class's function
 --  return math.sqrt(l*l + self.z*self.zdy)
 --end
 --
@@ -318,31 +323,31 @@
 
 function lib.class(t)
   t = t or {}
-  
+
   -- First, setup indexing, if necessary
   if not t.__index then
     t.__index = t
   end
-  
+
   -- Second, setup new method, if necessary
-  t.new = t.new or 
-    function (initial) 
-      
+  t.new = t.new or
+    function (initial)
+
       -- Create new object
       local obj = {}
       for k,v in pairs(initial or {}) do
-	obj[k] = v
+        obj[k] = v
       end
       setmetatable(obj, t)
 
       if obj.constructor then
-	obj:constructor()
+        obj:constructor()
       end
-      
+
       return obj
     end
-  
-  -- Third, setup inheritence, if necessary
+
+  -- Third, setup inheritance, if necessary
   if not getmetatable(t) then
     setmetatable(t, t.base_class)
   end
@@ -359,8 +364,8 @@
 -- a table) for which some methods are needed only seldomly. In this
 -- case, you can put these methods in a separate file and then use
 -- |ondemand| to indicate that the methods are found in a
--- another file. 
---
+-- another file.
+-- %
 --\begin{codeexample}[code only]
 -- -- File Foo.lua
 -- local Foo = {}
@@ -388,23 +393,24 @@
 
 function lib.ondemand(filename, table, name)
   return function(...)
-	   require (filename)
-	   return table[name] (...)
-	 end
+       require (filename)
+       return table[name] (...)
+     end
 end
 
 
 
 ---
--- This implements the legacy random number generator of Lua 5.2 in
--- pure Lua.  This is needed for Lua 5.3 compatibility to obtain
--- consitent results.
+-- This implements the a random number generator similar to the one
+-- provided by Lua, but based on the tex.uniformdeviate primitive to
+-- avoid differences in random numbers due to platform specifics.
 --
 -- @param l Lower bound
 -- @param u Upper bound
 -- @return A random number
 function lib.random(l,u)
-  local r = math.random()
+  local fraction_one = 268435456
+  local r = tex.uniform_rand(fraction_one)/fraction_one
   if l and u then
     assert(l <= u)
     return math.floor(r*(u-l+1)) + l
@@ -416,6 +422,14 @@
   end
 end
 
+---
+-- Provide the seed for the random number generator
+--
+-- @param seed random seed
+function lib.randomseed(seed)
+  tex.init_rand(seed)
+end
+
 -- Done
 
 return lib

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Arc.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Arc.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Arc.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -14,10 +14,10 @@
 -- An arc is a light-weight object representing an arc from a vertex
 -- in a graph to another vertex. You may not create an |Arc| by
 -- yourself, which is why there is no |new| method, arc creation is
--- done by the Digraph class. 
+-- done by the Digraph class.
 --
 -- Every arc belongs to exactly one graph. If you want the same arc in
--- another graph, you need to newly connect two vertices in the other graph. 
+-- another graph, you need to newly connect two vertices in the other graph.
 --
 -- You may read the |head| and |tail| fields, but you may not write
 -- them. In order to store data for an arc, use |Storage| objects.
@@ -28,7 +28,7 @@
 -- be multiple edges between two vertices. This means, in particular,
 -- that an arc has no |options| field. Rather, it has several
 -- |optionsXxxx| functions, that will search for options in all of the
--- synactic edges that ``belong'' to an edge.
+-- syntactic edges that ``belong'' to an edge.
 --
 -- In order to \emph{set} options of the edges, you can set the
 -- |generated_options| field of an arc (which is |nil| by default), see
@@ -72,7 +72,7 @@
 -- @field animations If non-nil, some animations to be passed back
 -- to the original syntactic edges. See the description of the
 -- |animations| field for |Vertex| for details on the syntax.
--- @field syntactic_edges In case this arc is an arc in the syntatic
+-- @field syntactic_edges In case this arc is an arc in the syntactic
 -- digraph (and only then), this field contains an array containing
 -- syntactic  edges (``real'' edges in the syntactic digraph) that
 -- underly this arc. Otherwise, the field will be empty or |nil|.
@@ -106,15 +106,17 @@
 -- If your algorithm gets confused by multiple edges, try saying
 -- |a:options(your_option)|. This will always give the ``most
 -- sensible'' choice of the option if there are multiple edges
--- corresponding to the same arc. 
+-- corresponding to the same arc.
 --
 -- @param option A string option like |"length"|.
 --
--- @return A table with the following contents: 
+-- @return A table with the following contents:
+-- %
 -- \begin{enumerate}
--- \item It is an array of all values the option has for edges
--- corresponding to |self| in the syntactic digraph. Suppose, for
--- instance, you write the following:
+--   \item It is an array of all values the option has for edges
+--     corresponding to |self| in the syntactic digraph. Suppose, for
+--     instance, you write the following:
+--     %
 --\begin{codeexample}[code only]
 --graph {
 --  tail -- [length=1] head,  % multi edge 1
@@ -125,31 +127,32 @@
 --  tail -- [length=2] head,  % multi edge 6
 --}
 --\end{codeexample}
--- Suppose, furthermore, that |length| has been setup as an edge
--- option. Now suppose that |a| is the arc from the vertex |tail| to
--- the vertex |head|. Calling |a:optionsArray('length')| will
--- yield the array part |{1,3,2,8,7}|. The reason for the ordering is
--- as follows: First come all values |length| had for syntactic edges
--- going from |self.tail| to |self.head| in the order they appear in the graph
--- description. Then come all values the options has for syntactic
--- edges going from |self.head| to |self.tail|. The reason for this
--- slightly strange behaviour is that many algorithms do not really
--- care whether someone writes |a --[length=1] b| or
--- |b --[length=1] a|; in both cases they would ``just'' like to know
--- that the length is~|1|.
+--     %
+--     Suppose, furthermore, that |length| has been setup as an edge
+--     option. Now suppose that |a| is the arc from the vertex |tail| to
+--     the vertex |head|. Calling |a:optionsArray('length')| will
+--     yield the array part |{1,3,2,8,7}|. The reason for the ordering is
+--     as follows: First come all values |length| had for syntactic edges
+--     going from |self.tail| to |self.head| in the order they appear in the
+--     graph description. Then come all values the options has for syntactic
+--     edges going from |self.head| to |self.tail|. The reason for this
+--     slightly strange behavior is that many algorithms do not really
+--     care whether someone writes |a --[length=1] b| or
+--     |b --[length=1] a|; in both cases they would ``just'' like to know
+--     that the length is~|1|.
 --
--- \item There is field called |aligned|, which is an array storing
--- the actual syntactic edge objects whose values can be found in the
--- array part of the returned table. However, |aligned| contains only
--- the syntactic edges pointing ``in the same direction'' as the arc,
--- that is, the tail and head of the syntactic edge are the same as
--- those of the arc. In the above example, this array would contain
--- the edges with the comment numbers |1|, |2|, and |6|.
+--   \item There is field called |aligned|, which is an array storing
+--     the actual syntactic edge objects whose values can be found in the
+--     array part of the returned table. However, |aligned| contains only
+--     the syntactic edges pointing ``in the same direction'' as the arc,
+--     that is, the tail and head of the syntactic edge are the same as
+--     those of the arc. In the above example, this array would contain
+--     the edges with the comment numbers |1|, |2|, and |6|.
 --
--- Using the length of this array and the fact that the ``aligned''
--- values come first in the table, you can easily iterate over the
--- |option|'s values of only those edges that are aligned with the arc:
---
+--     Using the length of this array and the fact that the ``aligned''
+--     values come first in the table, you can easily iterate over the
+--     |option|'s values of only those edges that are aligned with the arc:
+--     %
 --\begin{codeexample}[code only, tikz syntax=false]
 --local a = g:arc(tail.head)   -- some arc
 --local opt = a:optionsArray('length')
@@ -158,17 +161,16 @@
 --  sum = sum + opt[i]
 --end
 --\end{codeexample}
+--     %
+--  \item There is a field called |anti_aligned|, which is an array
+--     containing exactly the edges in the array part of the table not
+--     aligned with the arc. The numbering start at |1| as usual, so the
+--     $i$th entry of this table corresponds to the entry at position $i +
+--     \verb!#opt.aligned!$ of the table.
+-- \end{enumerate}
 --
---\item There is a field called |anti_aligned|, which is an array
--- containing exactly the edges in the array part of the table not
--- aligned with the arc. The numbering start at |1| as usual, so the
--- $i$th entry of this table corresponds to the entry at position $i +
--- \verb!#opt.aligned!$ of the table.
---
---\end{enumerate}
---
 function Arc:optionsArray(option)
-  
+
   local cache = self.option_cache
   local t = cache[option]
   if t then
@@ -185,23 +187,23 @@
   if arc then
     for _,m in ipairs(arc.syntactic_edges) do
       if m.options[option] ~= nil then
-	aligned[#aligned + 1] = m
+        aligned[#aligned + 1] = m
       end
     end
     table.sort(aligned, function (a,b) return a.event.index < b.event.index end)
   end
-  
+
   local arc = head ~= tail and s_graph:arc(head, tail)
   local anti_aligned = {}
   if arc then
     for _,m in ipairs(arc.syntactic_edges) do
       if m.options[option] ~= nil then
-	anti_aligned[#anti_aligned + 1] = m
+        anti_aligned[#anti_aligned + 1] = m
       end
     end
     table.sort(anti_aligned, function (a,b) return a.event.index < b.event.index end)
   end
-  
+
   -- Now merge them together
   local t = { aligned = aligned, anti_aligned = anti_aligned }
   for i=1,#aligned do
@@ -211,7 +213,7 @@
     t[#t+1] = anti_aligned[i].options[option]
   end
   cache[option] = t
-  
+
   return t
 end
 
@@ -221,11 +223,11 @@
 -- Returns the first option, that is, the first entry of
 -- |Arc:optionsArray(option)|. However, if the |only_aligned|
 -- parameter is set to true and there is no option with any aligned
--- synactic edge, |nil| is returned.
+-- syntactic edge, |nil| is returned.
 --
 -- @param option An option
 -- @param only_aligned If true, only aligned syntactic edges will be
--- considered. 
+-- considered.
 -- @return The first entry of the |optionsArray|
 function Arc:options(option, only_aligned)
   if only_aligned then
@@ -256,7 +258,7 @@
 -- edges will be considered.
 --
 -- @return If the option is not set for any (aligned) syntactic edges
--- corresponding to |self|, |nil| is returned. If there is exectly one
+-- corresponding to |self|, |nil| is returned. If there is exactly one
 -- edge, the value of this edge is returned. Otherwise, the result of
 -- repeatedly applying the |accumulator| function as described
 -- above.
@@ -265,6 +267,7 @@
 -- |accumulator| function again.
 --
 -- @usage Here is typical usage:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --local total_length = a:optionsAccumulated('length', function (a,b) return a+b end) or 0
 --\end{codeexample}
@@ -277,7 +280,7 @@
     if v == nil then
       v = opt[1]
       for i=2,#aligned do
-	v = accumulator(v, opt[i])
+        v = accumulator(v, opt[i])
       end
       align[accumulator] = v
     end
@@ -287,7 +290,7 @@
     if v == nil then
       v = opt[1]
       for i=2,#opt do
-	v = accumulator(v, opt[i])
+        v = accumulator(v, opt[i])
       end
       opt[accumulator] = v
     end
@@ -301,7 +304,7 @@
 -- Compute the syntactic head and tail of an arc. For this, we have a
 -- look at the syntactic digraph underlying the arc. If there is at
 -- least once syntactic edge going from the arc's tail to the arc's
--- head, the arc's tail and head are returned. Otherweise, we test
+-- head, the arc's tail and head are returned. Otherwise, we test
 -- whether there is a syntactic edge in the other direction and, if
 -- so, return head and tail in reverse order. Finally, if there is no
 -- syntactic edge at all corresponding to the arc in either direction,
@@ -338,15 +341,15 @@
   if a then
     for _,e in ipairs(a.syntactic_edges) do
       for _,p in ipairs(e.path) do
-	if type(p) == "table" then
-	  cloud[#cloud + 1] = p
-	end
+        if type(p) == "table" then
+          cloud[#cloud + 1] = p
+        end
       end
     end
   end
   self.cached_point_cloud = cloud
   return cloud
-end  
+end
 
 
 
@@ -377,7 +380,7 @@
   end
   self.cached_event_index = e
   return e
-end  
+end
 
 
 
@@ -389,21 +392,16 @@
 -- edge involved in the arc.
 --
 -- The priority of an edge is computed as follows:
---
+-- %
 -- \begin{enumerate}
--- \item If the option |"span priority"| is set, this number
--- will be used.
---
--- \item If the edge has the same head as the arc, we lookup the key\\
--- |"span priority " .. edge.direction|. If set, we use
--- this value.
---
--- \item If the edge has a different head from the arc (the arc is
--- ``reversed'' with respect to the syntactic edge), we lookup the key
--- |"span priority reversed " .. edge.direction|. If set,
--- we use this value.
---
--- \item Otherwise, we use priority 5.
+--   \item If the option |"span priority"| is set, this number
+--     will be used.
+--   \item If the edge has the same head as the arc, we lookup the key\\
+--     |"span priority " .. edge.direction|. If set, we use this value.
+--   \item If the edge has a different head from the arc (the arc is
+--     ``reversed'' with respect to the syntactic edge), we lookup the key
+--     |"span priority reversed " .. edge.direction|. If set, we use this value.
+--   \item Otherwise, we use priority 5.
 -- \end{enumerate}
 --
 -- @return The priority of the arc, as described above.
@@ -412,7 +410,7 @@
   if self.cached_span_priority then
     return self.cached_span_priority
   end
-  
+
   local head = self.head
   local tail = self.tail
   local min
@@ -422,8 +420,8 @@
   if a then
     for _,m in ipairs(a.syntactic_edges) do
       local p =
-	m.options["span priority"] or
-	lib.lookup_option("span priority " .. m.direction, m, g)
+        m.options["span priority"] or
+        lib.lookup_option("span priority " .. m.direction, m, g)
 
       min = math.min(p or 5, min or math.huge)
     end
@@ -433,15 +431,15 @@
   if a then
     for _,m in ipairs(a.syntactic_edges) do
       local p =
-	m.options["span priority"] or
-	lib.lookup_option("span priority reversed " .. m.direction, m, g)
-      
+        m.options["span priority"] or
+        lib.lookup_option("span priority reversed " .. m.direction, m, g)
+
       min = math.min(p or 5, min or math.huge)
     end
   end
-  
+
   self.cached_span_priority = min or 5
-  
+
   return min or 5
 end
 
@@ -461,6 +459,7 @@
 -- which will replace the function in the |Path|.
 --
 -- You use this method like this:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --...
 --local arc = g:connect(s,t)
@@ -485,34 +484,34 @@
     local a = self.syntactic_digraph:arc(tail,head)
     if a and #a.syntactic_edges>0 then
       for _,e in ipairs(a.syntactic_edges) do
-	local clone = path:clone()
-	for i=1,#clone do
-	  local p = clone[i]
-	  if type(p) == "function" then
-	    clone[i] = p(e)
-	    if type(clone[i]) == "table" then
-	      clone[i] = clone[i]:clone()
-	    end
-	  end
-	end
-	e.path = clone
+        local clone = path:clone()
+        for i=1,#clone do
+          local p = clone[i]
+          if type(p) == "function" then
+            clone[i] = p(e)
+            if type(clone[i]) == "table" then
+              clone[i] = clone[i]:clone()
+            end
+          end
+        end
+        e.path = clone
       end
     end
     local a = head ~= tail and self.syntactic_digraph:arc(head,tail)
     if a and #a.syntactic_edges>0 then
       for _,e in ipairs(a.syntactic_edges) do
-	local clone = path:reversed()
-	for i=1,#clone do
-	  local p = clone[i]
-	  if type(p) == "function" then
-	    clone[i] = p(e)
-	    if type(clone[i]) == "table" then
-	      clone[i] = clone[i]:clone()
-	    end
-	  end
-	end
-	e.path = clone
-       end
+        local clone = path:reversed()
+        for i=1,#clone do
+          local p = clone[i]
+          if type(p) == "function" then
+            clone[i] = p(e)
+            if type(clone[i]) == "table" then
+              clone[i] = clone[i]:clone()
+            end
+          end
+        end
+        e.path = clone
+      end
     end
   end
   if self.generated_options then
@@ -521,19 +520,19 @@
     local a = self.syntactic_digraph:arc(tail,head)
     if a and #a.syntactic_edges>0 then
       for _,e in ipairs(a.syntactic_edges) do
-         for _,o in ipairs(self.generated_options) do
-            e.generated_options[#e.generated_options+1] = o
-         end
+        for _,o in ipairs(self.generated_options) do
+          e.generated_options[#e.generated_options+1] = o
+        end
       end
     end
     local a = head ~= tail and self.syntactic_digraph:arc(head,tail)
     if a and #a.syntactic_edges>0 then
       for _,e in ipairs(a.syntactic_edges) do
-         for _,o in ipairs(self.generated_options) do
-            e.generated_options[#e.generated_options+1] = o
-         end
+        for _,o in ipairs(self.generated_options) do
+          e.generated_options[#e.generated_options+1] = o
+        end
        end
-    end  
+    end
   end
   if self.animations then
     local head = self.head
@@ -541,17 +540,17 @@
     local a = self.syntactic_digraph:arc(tail,head)
     if a and #a.syntactic_edges>0 then
       for _,e in ipairs(a.syntactic_edges) do
-         for _,o in ipairs(self.animations) do
-            e.animations[#e.animations+1] = o
-         end
+        for _,o in ipairs(self.animations) do
+          e.animations[#e.animations+1] = o
+        end
       end
     end
     local a = head ~= tail and self.syntactic_digraph:arc(head,tail)
     if a and #a.syntactic_edges>0 then
       for _,e in ipairs(a.syntactic_edges) do
-         for _,o in ipairs(self.animations) do
-            e.animations[#e.animations+1] = o
-         end
+        for _,o in ipairs(self.animations) do
+          e.animations[#e.animations+1] = o
+        end
        end
     end
   end
@@ -572,8 +571,8 @@
 -- method to get a function that will, later on, compute the correct
 -- position of the anchor as needed.
 --
--- Here is the code you would use to create the abovementioned path:
---
+-- Here is the code you would use to create the above-mentioned path:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --local a = g:connect(tail,head)
 --...
@@ -585,7 +584,7 @@
 --
 -- Normally, however, you will not write code as detailed as the above
 -- and you would just write instead of the last three lines:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --arc:setPolylinePath { Coordinate.new (10, 10) }
 --\end{codeexample}
@@ -592,12 +591,12 @@
 
 function Arc:tailAnchorForArcPath()
   return function (edge)
-	   local a = edge.options['tail anchor']
-	   if a == "" then
-	     a = "center"
-	   end
-	   return self.tail:anchor(a) + self.tail.pos
-	 end
+    local a = edge.options['tail anchor']
+    if a == "" then
+      a = "center"
+    end
+    return self.tail:anchor(a) + self.tail.pos
+  end
 end
 
 ---
@@ -605,12 +604,12 @@
 
 function Arc:headAnchorForArcPath()
   return function (edge)
-	   local a = edge.options['head anchor']
-	   if a == "" then
-	     a = "center"
-	   end
-	   return self.head:anchor(a) + self.head.pos
-	 end
+    local a = edge.options['head anchor']
+    if a == "" then
+      a = "center"
+    end
+    return self.head:anchor(a) + self.head.pos
+  end
 end
 
 
@@ -633,7 +632,7 @@
   end
 
   p:appendLineto(self:headAnchorForArcPath())
-  
+
   self.path = p
 end
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Collection.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Collection.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Collection.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -20,11 +20,11 @@
 -- vertices that should be on the same level in a layered algorithm,
 -- or, indeed, subgraphs that are rendered in a special way.
 --
--- Collections are grouped into ``kinds.'' All collections of a given
+-- Collections are grouped into ``kinds''. All collections of a given
 -- kind can be accessed by algorithms through an array whose elements
--- are the collections. On the displya layer, for each kind a separate
--- key is available  to indicate that a node or an edge belongs to a
--- collection.  
+-- are the collections. On the display layer, for each kind a separate
+-- key is available to indicate that a node or an edge belongs to a
+-- collection.
 --
 -- Collections serve two purposes: First, they can be seen as ``hints''
 -- to graph drawing algorithms that certain nodes and/or edges ``belong
@@ -48,7 +48,7 @@
 -- was in force when the collection was created.
 --
 -- @field child_collections An array of all collections that are
--- direct children of this collection (that is, 
+-- direct children of this collection (that is,
 -- they were defined while the current collection was the most
 -- recently defined collection on the options stack). However, you
 -- should use the methods |children|, |descendants|, and so to access
@@ -55,7 +55,7 @@
 -- this field.
 --
 -- @field parent_collection The parent collection of the current
--- colleciton. This field may be |nil| in case a collection has no parent.
+-- collection. This field may be |nil| in case a collection has no parent.
 --
 -- @field event An |Event| object that was create for this
 -- collection. Its |kind| will be |"collection"| while its |parameter|
@@ -86,7 +86,7 @@
 --
 function Collection.new(t)
   assert (type(t.kind) == "string" and t.kind ~= "", "collection kind not set")
-  
+
   return setmetatable(
     {
       vertices               = t.vertices or {},
@@ -111,7 +111,7 @@
 
 function Collection:registerAsChildOf(parent)
   self.parent = parent
-  if parent then 
+  if parent then
     assert (getmetatable(parent) == Collection, "parent must be a collection")
     parent.child_collections[#parent.child_collections+1] = self
   end
@@ -149,10 +149,10 @@
 function Collection:childrenOfKind(kind)
   local function rec (c, a)
     for _,d in ipairs(c.child_collections) do
-      if d.kind == kind then 
-	a[#a + 1] = d
+      if d.kind == kind then
+        a[#a + 1] = d
       else
-	rec (d, a)
+        rec (d, a)
       end
     end
     return a
@@ -163,7 +163,7 @@
 
 ---
 -- The descendants of a collection are its children, plus their
--- children, plus their children, and so on. 
+-- children, plus their children, and so on.
 --
 -- @return An array of all descendants of |self|. It will be in
 -- preorder.
@@ -184,7 +184,7 @@
 ---
 -- The descendants of a collection of the given |kind|.
 --
--- @param kind A colleciton kind.
+-- @param kind A collection kind.
 --
 -- @return An array of all descendants of |self| of the given |kind|.
 
@@ -191,8 +191,8 @@
 function Collection:descendantsOfKind(kind)
   local function rec (c, a)
     for _,d in ipairs(c.child_collections) do
-      if d.kind == kind then 
-	a[#a + 1] = d
+      if d.kind == kind then
+        a[#a + 1] = d
       end
       rec (d, a)
     end
@@ -205,4 +205,4 @@
 
 -- Done
 
-return Collection
\ No newline at end of file
+return Collection

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Coordinate.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Coordinate.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Coordinate.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -10,7 +10,7 @@
 -- @release $Header$
 
 
---- 
+---
 -- A Coordinate models a position on the drawing canvas.
 --
 -- It has an |x| field and a |y| field, which are numbers that will be
@@ -17,10 +17,10 @@
 -- interpreted as \TeX\ points (1/72.27th of an inch). The $x$-axis goes
 -- right and the $y$-axis goes up.
 --
--- @field x 
+-- @field x
 -- @field y
 --
--- There is also a static field called |origin| that is always equal to the origin. 
+-- There is also a static field called |origin| that is always equal to the origin.
 
 local Coordinate = {}
 Coordinate.__index = Coordinate
@@ -61,7 +61,7 @@
 --- Apply a transformation matrix to a coordinate,
 -- see |pgf.gd.lib.Transform| for details.
 --
--- @param t A tansformation.
+-- @param t A transformation.
 
 function Coordinate:apply(t)
   local x = self.x
@@ -74,7 +74,7 @@
 --- Shift a coordinate
 --
 -- @param a An $x$ offset
--- @param b A $y$ offset 
+-- @param b A $y$ offset
 
 function Coordinate:shift(a,b)
   self.x = self.x + a
@@ -87,7 +87,7 @@
 -- inversed coordinate; only faster).
 --
 -- @param a An $x$ offset
--- @param b A $y$ offset 
+-- @param b A $y$ offset
 
 function Coordinate:unshift(a,b)
   self.x = self.x - a
@@ -110,7 +110,7 @@
 ---
 -- Like |unshift|, only for coordinate parameters.
 --
--- @param c Another coordinate. 
+-- @param c Another coordinate.
 
 function Coordinate:unshiftByCoordinate(c)
   self.x = self.x - c.x
@@ -119,7 +119,7 @@
 
 
 ---
--- Moves the coordinate a fraction of |f| along a straight line to |c|. 
+-- Moves the coordinate a fraction of |f| along a straight line to |c|.
 --
 -- @param c Another coordinate
 -- @param f A fraction
@@ -268,13 +268,13 @@
 -- @return |max_x|
 -- @return |max_y|
 -- @return |center_x| The center of the bounding box
--- @return |center_y| 
+-- @return |center_y|
 
 function Coordinate.boundingBox(array)
   if #array > 0 then
     local min_x, min_y = math.huge, math.huge
     local max_x, max_y = -math.huge, -math.huge
-    
+
     for i=1,#array do
       local c = array[i]
       local x = c.x
@@ -284,7 +284,7 @@
       if x > max_x then max_x = x end
       if y > max_y then max_y = y end
     end
-    
+
     return min_x, min_y, max_x, max_y, (min_x+max_x) / 2, (min_y+max_y) / 2
   end
 end

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Digraph.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Digraph.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Digraph.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -12,12 +12,12 @@
 
 
 
---- 
+---
 -- Each |Digraph| instance models a \emph{directed, simple}
 -- graph. ``Directed'' means that all edges ``point'' from a head node
 -- to a tail node. ``Simple'' means that between any nodes there can be
 -- (at most) one edge. Since these properties are a bit at odds with
--- the normal behaviour of ``nodes'' and ``edges'' in \tikzname,
+-- the normal behavior of ``nodes'' and ``edges'' in \tikzname,
 -- different names are used for them inside the |model| namespace:
 -- The class modeling  ``edges'' is actually called |Arc| to stress
 -- that an arc has a specific ``start'' (the tail) and a specific
@@ -31,14 +31,17 @@
 -- Since digraphs are constantly created and modified inside the graph
 -- drawing engine, some care was taken to ensure that all operations
 -- work as quickly as possible. In particular:
+-- %
 -- \begin{itemize}
--- \item Adding an array of $k$ vertices using the |add| method needs
---   time $O(k)$.
--- \item Adding an arc between two vertices needs time $O(1)$.
--- \item Accessing both the |vertices| and the |arcs| fields takes time
---   $O(1)$, provided only the above operations are used.
+--   \item Adding an array of $k$ vertices using the |add| method needs
+--     time $O(k)$.
+--   \item Adding an arc between two vertices needs time $O(1)$.
+--   \item Accessing both the |vertices| and the |arcs| fields takes time
+--     $O(1)$, provided only the above operations are used.
 -- \end{itemize}
+-- %
 -- Deleting vertices and arcs takes more time:
+-- %
 -- \begin{itemize}
 -- \item Deleting the vertices given in an array of $k$ vertices from a
 --   graph with $n$ vertices takes time $O(\max\{n,c\})$ where $c$ is the
@@ -50,12 +53,12 @@
 --   number of outgoing arcs at the arc's tail and $h_i$ is the number
 --   of incoming arcs at the arc's head. After a call to |disconnect|,
 --   the next use of the |arcs| field will take time $O(|V| + |E|)$,
---   while subsequent accesses take time $O(1)$ -- till the  
+--   while subsequent accesses take time $O(1)$ -- till the
 --   next use of |disconnect|. This means that once you start deleting
 --   arcs using |disconnect|, you should perform as many additional
 --   |disconnect|s as possible before accessing |arcs| one more.
 -- \end{itemize}
---  
+--
 -- \medskip
 -- \noindent\emph{Stability.} The |vertices| field and the array
 -- returned by |Digraph:incoming| and |Digraph:outgoing| are
@@ -63,7 +66,7 @@
 -- when you use |ipairs| on the will be the ordering in which the
 -- vertices or arcs were added to the graph. Even when you remove a
 -- vertex or an arc, the ordering of the remaining elements stays the
--- same. 
+-- same.
 --
 -- @field vertices This array contains the vertices that are part of
 -- the digraph. Internally, this array
@@ -103,15 +106,18 @@
 -- given vertex |v|, you cannot say something like |v.outgoings| or
 -- perhaps |v:getOutgoings()|. Rather, you have to say |g:outgoing(v)|
 -- to get this list:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
---for _,a in ipairs(g:outgoing(v)) do  -- g is a Digraph object.    
+--for _,a in ipairs(g:outgoing(v)) do  -- g is a Digraph object.
 --  pgf.debug ("There is an arc leaving " .. tostring(v) ..
 --             " heading to " .. tostring(a.head))
 --end
 --\end{codeexample}
---   Naturally, there is also a method |g:incoming()|.
---  
---   To iterate over all arcs of a graph you can say:
+-- %
+-- Naturally, there is also a method |g:incoming()|.
+--
+-- To iterate over all arcs of a graph you can say:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --for _,v in ipairs(g.vertices) do
 --  for _,a in ipairs(g:outgoing(v)) do
@@ -122,7 +128,7 @@
 --
 -- However, it will often be more convenient and, in case the there
 -- are far less arcs than vertices, also faster to write
--- 
+--
 --\begin{codeexample}[code only, tikz syntax=false]
 --for _,a in ipairs(g.arcs) do
 --  ...
@@ -130,7 +136,7 @@
 --\end{codeexample}
 --
 -- @field arcs For any two vertices |t| and |h| of a graph, there may
---   or may not be 
+--   or may not be
 --   an arc from |t| to |h|. If this is the case, there is an |Arc|
 --   object that represents this arc. Note that, since |Digraph|s are
 --   always simple graphs, there can be at most one such object for every
@@ -138,7 +144,7 @@
 --   an |Arc| through a |Storage|, see the |Storage| class for
 --   details. Each |Arc| for an edge of the syntactic digraph stores
 --   an array called |syntactic_edges| of all the multiple edges that
---   are present in the user's input. 
+--   are present in the user's input.
 --
 --   Unlike vertices, the arc objects of a graph are always local to a
 --   graph; an |Arc| object can never be part of two digraphs at the same
@@ -164,7 +170,7 @@
 --   point, the |arcs| array is reconstructed by adding all arcs of all
 --   nodes to it.
 --
---   The bottom line of the behaviour of the |arcs| field is that (a) the
+--   The bottom line of the behavior of the |arcs| field is that (a) the
 --   ordering of the elements may change abruptly whenever you remove an
 --   arc from a graph and (b) performing $k$ |disconnect| operations in
 --   sequence takes time $O(k)$, provided you do not access the |arcs|
@@ -188,12 +194,12 @@
     end
   end
   digraph.arcs = arcs
-  return arcs    
+  return arcs
 end
 
-Digraph.__index = 
+Digraph.__index =
   function (t, k)
-    if k == "arcs" then 
+    if k == "arcs" then
       return recalc_arcs(t)
     else
       return rawget(Digraph,k)
@@ -223,7 +229,7 @@
 -- created graphs always have an empty arcs set. This means that
 -- writing |Digraph.new(g)| where |g| is a graph creates a new graph
 -- whose vertex set is the same as |g|'s, but where there are no edges:
---  
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --local g = Digraph.new {}
 --g:add { v1, v2, v3 }
@@ -239,9 +245,9 @@
 --local h = Digraph.new (g)
 --for _,a in ipairs(g.arcs) do h:connect(a.tail, a.head) end
 --\end{codeexample}
---                
--- This operation takes time $O(1)$. 
 --
+-- This operation takes time $O(1)$.
+--
 -- @param initial A table of initial values. It is permissible that
 --                this array contains a |vertices| field. In this
 --                case, this field must be an array and its entries
@@ -268,7 +274,7 @@
   digraph.vertices = {}
   digraph.arcs = {}
 
-  if vertices then 
+  if vertices then
     digraph:add(vertices)
   end
   return digraph
@@ -309,7 +315,7 @@
 --
 function Digraph:remove(array)
   local vertices = self.vertices
-  
+
   -- Mark all to-be-deleted nodes
   for i=1,#array do
     local v = array[i]
@@ -316,18 +322,18 @@
     assert(vertices[v], "to-be-deleted node is not in graph")
     vertices[v] = false
   end
-  
+
   -- Disconnect them
   for i=1,#array do
     self:disconnect(array[i])
   end
-  
+
   LookupTable.remove(self.vertices, array)
 end
 
 
 
---- Test, whether a graph contains a given vertex. 
+--- Test, whether a graph contains a given vertex.
 --
 -- This operation takes time $O(1)$.
 --
@@ -342,7 +348,7 @@
 
 ---
 -- Returns the arc between two nodes, provided it exists. Otherwise,
--- |nil| is retured.
+-- |nil| is returned.
 --
 -- This operation takes time $O(1)$.
 --
@@ -360,7 +366,7 @@
 
 
 
---- 
+---
 -- Returns an array containing the outgoing arcs of a vertex. You may
 -- only iterate over his array using ipairs, not using pairs.
 --
@@ -415,7 +421,7 @@
   -- Compute ordering of the arcs
   local reordered = {}
   for _,arc in ipairs(outgoing) do
-    reordered [lookup[arc.head]] = arc 
+    reordered [lookup[arc.head]] = arc
   end
 
   -- Copy back
@@ -457,7 +463,7 @@
   -- Compute ordering of the arcs
   local reordered = {}
   for _,arc in ipairs(incoming) do
-    reordered [lookup[arc.head]] = arc 
+    reordered [lookup[arc.head]] = arc
   end
 
   -- Copy back
@@ -470,9 +476,9 @@
 
 
 
---- 
+---
 -- Connects two nodes by an arc and returns the newly created arc
--- object. If they are already connected, the existing arc is returned. 
+-- object. If they are already connected, the existing arc is returned.
 --
 -- This operation takes time $O(1)$.
 --
@@ -522,10 +528,10 @@
 
 
 
---- 
+---
 -- Disconnect either a single vertex |v| from all its neighbors (remove all
 -- incoming and outgoing arcs of this vertex) or, in case two nodes
--- are given as parameter, remove the arc between them, if it exsits. 
+-- are given as parameter, remove the arc between them, if it exists.
 --
 -- This operation takes time $O(|I_v| + |I_t|)$, where $I_x$ is the set
 -- of vertices incident to $x$, to remove the single arc between $v$ and
@@ -545,23 +551,23 @@
       -- Remove:
       s_outgoings[t] = nil
       for i=1,#s_outgoings do
-	if s_outgoings[i].head == t then
-	  table.remove (s_outgoings, i)
-	  break
-	end
+        if s_outgoings[i].head == t then
+          table.remove (s_outgoings, i)
+          break
+        end
       end
       t_incomings[v] = nil
       for i=1,#t_incomings do
-	if t_incomings[i].tail == v then
-	  table.remove (t_incomings, i)
-	  break
-	end
+        if t_incomings[i].tail == v then
+          table.remove (t_incomings, i)
+          break
+        end
       end
       self.arcs = nil -- invalidate arcs field
     end
   else
     -- Case 1: Remove all arcs incident to v:
-    
+
     -- Step 1: Delete all incomings arcs:
     local incomings = assert(v.incomings[self], "node not in graph")
     local vertices = self.vertices
@@ -569,15 +575,15 @@
     for i=1,#incomings do
       local s = incomings[i].tail
       if s ~= v and vertices[s] then -- skip self-loop and to-be-deleted nodes
-	-- Remove this arc from s:
-	local s_outgoings = s.outgoings[self]
-	s_outgoings[v] = nil
-	for i=1,#s_outgoings do
-	  if s_outgoings[i].head == v then
-	    table.remove (s_outgoings, i)
-	    break
-	  end
-	end
+        -- Remove this arc from s:
+        local s_outgoings = s.outgoings[self]
+        s_outgoings[v] = nil
+        for i=1,#s_outgoings do
+          if s_outgoings[i].head == v then
+            table.remove (s_outgoings, i)
+            break
+          end
+        end
       end
     end
 
@@ -586,14 +592,14 @@
     for i=1,#outgoings do
       local t = outgoings[i].head
       if t ~= v and vertices[t] then
-	local t_incomings = t.incomings[self]
-	t_incomings[v] = nil
-	for i=1,#t_incomings do
-	  if t_incomings[i].tail == v then
-	    table.remove (t_incomings, i)
-	    break
-	  end
-	end
+        local t_incomings = t.incomings[self]
+        t_incomings[v] = nil
+        for i=1,#t_incomings do
+          if t_incomings[i].tail == v then
+            table.remove (t_incomings, i)
+            break
+          end
+        end
       end
     end
 
@@ -610,12 +616,12 @@
 
 
 
---- 
+---
 -- An arc is changed so that instead of connecting |self.tail|
 -- and |self.head|, it now connects a new |head| and |tail|. The
 -- difference to first disconnecting and then reconnecting is that all
 -- fields of the arc (other than |head| and |tail|, of course), will
--- be ``moved along.'' Reconnecting an arc in the same way as before has no
+-- be ``moved along''. Reconnecting an arc in the same way as before has no
 -- effect.
 --
 -- If there is already an arc at the new position, fields of the
@@ -637,16 +643,16 @@
 --
 function Digraph:reconnect(arc, tail, head)
   assert (arc and tail and head, "connect with nil parameters")
-  
+
   if arc.head == head and arc.tail == tail then
     -- Nothing to be done
     return arc
   else
     local new_arc = self:connect(tail, head)
-    
+
     for k,v in pairs(arc) do
       if k ~= "head" and k ~= "tail" then
-	new_arc[k] = v
+        new_arc[k] = v
       end
     end
 
@@ -682,11 +688,11 @@
 -- A collapse vertex will store the collapsed vertices so that you can
 -- call |expand| later on to ``restore'' the vertices and arcs that
 -- were saved during a collapse. This storage is \emph{not} local to
--- the graph in which the collapse occured. 
+-- the graph in which the collapse occurred.
 --
 -- @param collapse_vertices An array of to-be-collapsed vertices
 -- @param collapse_vertex The vertex that represents the collapse. If
--- missing, a vertex will be created automatically and added to the graph. 
+-- missing, a vertex will be created automatically and added to the graph.
 -- @param vertex_fun This function is called for each to-be-collapsed
 -- vertex. The parameters are the collapse vertex and the
 -- to-be-collapsed vertex. May be |nil|.
@@ -694,7 +700,7 @@
 -- between |rep| and some other vertex. The arguments are the new arc
 -- and the original arc. May be |nil|.
 --
--- @return The new vertex that represents the collapsed vertices. 
+-- @return The new vertex that represents the collapsed vertices.
 
 function Digraph:collapse(collapse_vertices, collapse_vertex, vertex_fun, arc_fun)
 
@@ -704,7 +710,7 @@
     collapse_vertex = Vertex.new {}
   end
   self:add {collapse_vertex}
-  
+
   -- Copy the collapse_vertices and create lookup
   local cvs = {}
   for i=1,#collapse_vertices do
@@ -716,11 +722,11 @@
 
   -- Connected collapse_vertex appropriately
   local collapsed_arcs = {}
-  
+
   if not arc_fun then
     arc_fun = function () end
   end
-  
+
   for _,v in ipairs(cvs) do
     if vertex_fun then
       vertex_fun (collapse_vertex, v)
@@ -727,18 +733,18 @@
     end
     for _,a in ipairs(v.outgoings[self]) do
       if cvs[a.head] ~= true then
-	arc_fun (self:connect(collapse_vertex, a.head), a)
-	collapsed_arcs[#collapsed_arcs + 1] = a
+        arc_fun (self:connect(collapse_vertex, a.head), a)
+        collapsed_arcs[#collapsed_arcs + 1] = a
       end
     end
     for _,a in ipairs(v.incomings[self]) do
       if cvs[a.tail] ~= true then
-	arc_fun (self:connect(a.tail, collapse_vertex), a)
+        arc_fun (self:connect(a.tail, collapse_vertex), a)
       end
       collapsed_arcs[#collapsed_arcs + 1] = a
     end
   end
-  
+
   -- Remember the old vertices.
   collapse_vertex.collapsed_vertices = cvs
   collapse_vertex.collapsed_arcs     = collapsed_arcs
@@ -770,7 +776,7 @@
 
   -- Add all vertices:
   self:add(cvs)
-  if vertex_fun then 
+  if vertex_fun then
     for _,v in ipairs(cvs) do
       vertex_fun(vertex, v)
     end
@@ -779,13 +785,13 @@
   -- Add all arcs:
   for _,arc in ipairs(vertex.collapsed_arcs) do
     local new_arc = self:connect(arc.tail, arc.head)
-    
+
     for k,v in pairs(arc) do
       if k ~= "head" and k ~= "tail" then
-	new_arc[k] = v
+        new_arc[k] = v
       end
     end
-    
+
     if arc_fun then
       arc_fun(new_arc, vertex)
     end
@@ -809,7 +815,7 @@
 
 
 
---- 
+---
 -- Computes a string representation of this graph including all nodes
 -- and edges. The syntax of this representation is such that it can be
 -- used directly in \tikzname's |graph| syntax.
@@ -825,13 +831,13 @@
     if #out_arcs > 0 then
       local t = {}
       for j,a in ipairs(out_arcs) do
-	t[j] = tostring(a.head) 
+        t[j] = tostring(a.head)
       end
       astrings[#astrings + 1] = "  " .. tostring(v) .. " -> { " .. table.concat(t,", ") .. " }"
     end
   end
   return "graph [id=" .. tostring(self.vertices) .. "] {\n  {\n" ..
-    table.concat(vstrings, ",\n") .. "\n  }; \n" .. 
+    table.concat(vstrings, ",\n") .. "\n  }; \n" ..
     table.concat(astrings, ";\n") .. "\n}";
 end
 
@@ -840,4 +846,4 @@
 
 -- Done
 
-return Digraph
\ No newline at end of file
+return Digraph

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Edge.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Edge.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Edge.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -10,12 +10,12 @@
 -- @release $Header$
 
 
---- 
+---
 -- An |Edge| is a ``syntactic'' connection between two
 -- vertices that represents a connection present in the syntactic
 -- digraph. Unlike an |Arc|, |Edge| objects are not controlled by the
 -- |Digraph| class. Also unlike |Arc| objects, there can be several
--- edges betwen the same vertices, namely whenever several such edges
+-- edges between the same vertices, namely whenever several such edges
 -- are present in the syntactic digraph.
 --
 -- In detail, the relationship between arcs and edges is as follows:
@@ -33,16 +33,16 @@
 -- second one. Whether
 -- an edge is directed or not depends on the |direction| of the edge, which
 -- may be one of the following:
---
+-- %
 -- \begin{enumerate}
--- \item |"->"|
--- \item |"--"|
--- \item |"<-"|
--- \item |"<->"|
--- \item |"-!-"|
+--   \item |"->"|
+--   \item |"--"|
+--   \item |"<-"|
+--   \item |"<->"|
+--   \item |"-!-"|
 -- \end{enumerate}
--- 
 --
+--
 -- @field head The head vertex of this edge.
 --
 -- @field tail The tail vertex of this edge.
@@ -63,7 +63,7 @@
 -- |InterfaceToAlgorithms|.
 --
 -- @field animations An array of animations, see the |animations|
--- field of the |Vertex| class for the syntax. 
+-- field of the |Vertex| class for the syntax.
 
 local Edge = {}
 Edge.__index = Edge
@@ -79,7 +79,7 @@
 local Path         = require "pgf.gd.model.Path"
 
 
---- 
+---
 -- Create a new edge. The |initial| parameter allows you to setup
 -- some initial values.
 --
@@ -86,7 +86,7 @@
 -- @usage 
 --\begin{codeexample}[code only, tikz syntax=false]
 --local v = Edge.new { tail = v1, head = v2 }
---\end{codeexample} 
+--\end{codeexample}
 --
 -- @param initial Values to override defaults. --
 -- @return A new edge object.
@@ -125,10 +125,10 @@
 -- Note that you typically do not use this function, but use the
 -- corresponding function of the |Arc| class. Use this function only
 -- if there are multiple edges between two vertices that need to be
--- routed differently. 
+-- routed differently.
 --
--- Here is the code you would use to create the abovementioned path:
---
+-- Here is the code you would use to create the above-mentioned path:
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --local a = g:connect(tail,head)
 --local e = a.syntactic_edges[1]
@@ -140,7 +140,7 @@
 --\end{codeexample}
 --
 -- As for the |Arc| class, you can also setup a polyline more easily:
---
+-- %
 --\begin{codeexample}[code only, tikz syntax=false]
 --e:setPolylinePath { Coordinate.new (10, 10) }
 --\end{codeexample}
@@ -147,12 +147,12 @@
 
 function Edge:tailAnchorForEdgePath()
   return function ()
-	   local a = self.options['tail anchor']
-	   if a == "" then
-	     a = "center"
-	   end
-	   return self.tail:anchor(a) + self.tail.pos
-	 end
+    local a = self.options['tail anchor']
+    if a == "" then
+      a = "center"
+    end
+    return self.tail:anchor(a) + self.tail.pos
+  end
 end
 
 ---
@@ -160,12 +160,12 @@
 
 function Edge:headAnchorForEdgePath()
   return function ()
-	   local a = self.options['head anchor']
-	   if a == "" then
-	     a = "center"
-	   end
-	   return self.head:anchor(a) + self.head.pos
-	 end
+    local a = self.options['head anchor']
+    if a == "" then
+      a = "center"
+    end
+    return self.head:anchor(a) + self.head.pos
+  end
 end
 
 
@@ -188,7 +188,7 @@
   end
 
   p:appendLineto(self:headAnchorForEdgePath())
-  
+
   self.path = p
 end
 

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Hyperedge.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Hyperedge.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Hyperedge.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -11,7 +11,7 @@
 
 
 
---- 
+---
 -- @section subsection {Hyperedges}
 --
 -- @end
@@ -28,12 +28,12 @@
   key = "hyper",
   layer = -10,
 
-  summary = [["  
-      A \emph{hyperedge} of a graph does not connect just two nodes, but
-      is any subset of the node set (although a normal edge is also a
-      hyperedge  that happens to contain just two nodes). Internally, a
-      collection of kind |hyper| is created.       Currently, there is
-      no default renderer for hyper edges.   
+  summary = [["
+    A \emph{hyperedge} of a graph does not connect just two nodes, but
+    is any subset of the node set (although a normal edge is also a
+    hyperedge  that happens to contain just two nodes). Internally, a
+    collection of kind |hyper| is created. Currently, there is
+    no default renderer for hyper edges.
   "]],
   documentation = [["
 \begin{codeexample}[code only]
@@ -40,7 +40,7 @@
 \graph {
   % The nodes:
   a, b, c, d;
-  
+
   % The edges:
   {[hyper] a,b,c};
   {[hyper] b,c,d};
@@ -50,7 +50,7 @@
 \end{codeexample}
   "]]
 }
-    
--- Done 
 
+-- Done
+
 return Hyperedge
\ No newline at end of file

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Path.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Path.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Path.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -10,32 +10,32 @@
 -- @release $Header$
 
 
---- 
+---
 -- A Path models a path in the plane.
 --
 -- Following the PostScript/\textsc{pdf}/\textsc{svg} convention, a
 -- path consists of a series of path segments, each of which can be
--- closed or not. Each path segement, in turn, consists of a series of
--- Bézier curvers and straight line segments; see
+-- closed or not. Each path segment, in turn, consists of a series of
+-- Bézier curves and straight line segments; see
 -- Section~\ref{section-paths} for an introduction to paths in
 -- general.
 --
 -- A |Path| object is a table whose array part stores
--- |Coordinate| objects, |strings|, and |function|s that 
--- describe the path of the edge. The following strings are allowed in 
+-- |Coordinate| objects, |strings|, and |function|s that
+-- describe the path of the edge. The following strings are allowed in
 -- this array:
---
+-- %
 -- \begin{itemize}
--- \item |"moveto"| The line's path should stop at the current
--- position and then start anew at the next coordinate in the array.
--- \item |"lineto"| The line should continue from the current position
--- to the next coordinate in the array. 
--- \item |"curveto"| The line should continue form the current
--- position with a Bézier curve that is specified bz the next three
--- |Coordinate| objects (in the usual manner).
--- \item |"closepath"| The line's path should be ``closed'' in the sense
--- that the current subpath that was started with the most recent
--- moveto operation should now form a closed curve.
+--   \item |"moveto"| The line's path should stop at the current
+--     position and then start anew at the next coordinate in the array.
+--   \item |"lineto"| The line should continue from the current position
+--     to the next coordinate in the array.
+--   \item |"curveto"| The line should continue form the current
+--     position with a Bézier curve that is specified by the next three
+--     |Coordinate| objects (in the usual manner).
+--   \item |"closepath"| The line's path should be ``closed'' in the sense
+--     that the current subpath that was started with the most recent
+--     moveto operation should now form a closed curve.
 -- \end{itemize}
 --
 -- Instead of a |Coordinate|, a |Path| may also contain a function. In
@@ -93,36 +93,36 @@
     while i <= #initial do
       local e = initial[i]
       if type(e) == "string" then
-	assert (count == 0, "illformed path")
-	if e == "moveto" then
-	  count = 1
-	elseif e == "lineto" then
-	  count = 1
-	elseif e == "closepath" then
-	  count = 0
-	elseif e == "curveto" then
-	  count = 3
-	else
-	  error ("unknown path command " .. e)
-	end
-	new[#new+1] = e
+        assert (count == 0, "illformed path")
+        if e == "moveto" then
+          count = 1
+        elseif e == "lineto" then
+          count = 1
+        elseif e == "closepath" then
+          count = 0
+        elseif e == "curveto" then
+          count = 3
+        else
+          error ("unknown path command " .. e)
+        end
+        new[#new+1] = e
       elseif type(e) == "number" then
-	if count == 0 then
-	  new[#new+1] = "lineto"
-	else
-	  count = count - 1
-	end
-	new[#new+1] = Coordinate.new(e,initial[i+1])
-	i = i + 1
+        if count == 0 then
+          new[#new+1] = "lineto"
+        else
+          count = count - 1
+        end
+        new[#new+1] = Coordinate.new(e,initial[i+1])
+        i = i + 1
       elseif type(e) == "table" or type(e) == "function" then
-	if count == 0 then
-	  new[#new+1] = "lineto"
-	else
-	  count = count - 1
-	end
-	new[#new+1] = e
+        if count == 0 then
+          new[#new+1] = "lineto"
+        else
+          count = count - 1
+        end
+        new[#new+1] = e
       else
-	error ("invalid object on path")
+        error ("invalid object on path")
       end
       i = i + 1
     end
@@ -158,7 +158,7 @@
 -- @return A copy of the reversed path
 
 function Path:reversed()
-  
+
   -- First, build segments
   local subpaths = {}
   local subpath  = {}
@@ -169,7 +169,7 @@
       subpath = {}
     end
   end
-  
+
   local prev
   local start
 
@@ -178,9 +178,9 @@
     local x = self[i]
     if x == "lineto" then
       subpath[#subpath+1] = {
-	action   = 'lineto',
-	from     = prev,
-	to       = self[i+1]
+        action   = 'lineto',
+        from     = prev,
+        to       = self[i+1]
       }
       prev = self[i+1]
       i = i + 2
@@ -192,9 +192,9 @@
       i = i + 2
     elseif x == "closepath" then
       subpath [#subpath + 1] = {
-	action   = "closepath",
-	from     = prev,
-	to       = start,
+        action   = "closepath",
+        from     = prev,
+        to       = start,
       }
       prev = nil
       start = nil
@@ -203,11 +203,11 @@
     elseif x == "curveto" then
       local s1, s2, to = self[i+1], self[i+2], self[i+3]
       subpath [#subpath + 1] = {
-	action    = "curveto",
-	from      = prev,
-	to        = to,
-	support_1 = s1,
-	support_2 = s2,
+        action    = "curveto",
+        from      = prev,
+        to        = to,
+        support_1 = s1,
+        support_2 = s2,
       }
       prev = self[i+3]
       i = i + 4
@@ -216,7 +216,7 @@
     end
   end
   closepath ()
-  
+
   local new = Path.new ()
 
   for _,subpath in ipairs(subpaths) do
@@ -226,29 +226,29 @@
     else
       -- We start with a moveto to the end point:
       new:appendMoveto(subpath[#subpath].to)
-      
+
       -- Now walk backwards:
       for i=#subpath,1,-1 do
-	if subpath[i].action == "lineto" then
-	  new:appendLineto(subpath[i].from)
-	elseif subpath[i].action == "closepath" then
-	  new:appendLineto(subpath[i].from)
-	elseif subpath[i].action == "curveto" then
-	  new:appendCurveto(subpath[i].support_2,
-			    subpath[i].support_1,
-			    subpath[i].from)
-	else
-	  error("illegal path command")
-	end
+        if subpath[i].action == "lineto" then
+          new:appendLineto(subpath[i].from)
+        elseif subpath[i].action == "closepath" then
+          new:appendLineto(subpath[i].from)
+        elseif subpath[i].action == "curveto" then
+          new:appendCurveto(subpath[i].support_2,
+                            subpath[i].support_1,
+                            subpath[i].from)
+        else
+          error("illegal path command")
+        end
       end
 
       -- Append a closepath, if necessary
       if subpath[#subpath].action == "closepath" then
-	new:appendClosepath()
+        new:appendClosepath()
       end
     end
   end
-  
+
   return new
 end
 
@@ -314,7 +314,7 @@
 -- Appends a |moveto| to the path.
 --
 -- @param x A |Coordinate| or |function| or, if the |y| parameter is
--- not |nil|, a number that is the $x$-part of a coordiante .
+-- not |nil|, a number that is the $x$-part of a coordinate.
 -- @param y The $y$-part of the coordinate.
 
 function Path:appendMoveto(x,y)
@@ -327,7 +327,7 @@
 -- Appends a |lineto| to the path.
 --
 -- @param x A |Coordinate| or |function|, if the |y| parameter is not
--- |nil|, a number that is the $x$-part of a coordiante .
+-- |nil|, a number that is the $x$-part of a coordinate.
 -- @param y The $y$-part of the coordinate.
 
 function Path:appendLineto(x,y)
@@ -362,7 +362,7 @@
     self[#self + 1] = a
     self[#self + 1] = b
     self[#self + 1] = c
-  end    
+  end
 end
 
 
@@ -371,7 +371,7 @@
 
 
 ---
--- Makes a path ``rigid,'' meaning that all coordinates that are only
+-- Makes a path ``rigid'', meaning that all coordinates that are only
 -- given as functions are replaced by the values these functions
 -- yield.
 
@@ -406,7 +406,7 @@
 -- Returns a bounding box of the path. This will not necessarily be
 -- the minimal bounding box in case the path contains curves because,
 -- then, the support points of the curve are used for the computation
--- rather than the actual boinding box of the path.
+-- rather than the actual bounding box of the path.
 --
 -- If the path contains no coordinates, all return values are 0.
 --
@@ -415,22 +415,22 @@
 -- @return |max_x|
 -- @return |max_y|
 -- @return |center_x| The center of the bounding box
--- @return |center_y| 
+-- @return |center_y|
 
 function Path:boundingBox()
   if #self > 0 then
     local min_x, min_y = math.huge, math.huge
     local max_x, max_y = -math.huge, -math.huge
-    
+
     for i=1,#self do
       local c = rigid(self[i])
       if type(c) == "table" then
-	local x = c.x
-	local y = c.y
-	if x < min_x then min_x = x end
-	if y < min_y then min_y = y end
-	if x > max_x then max_x = x end
-	if y > max_y then max_y = y end
+        local x = c.x
+        local y = c.y
+        if x < min_x then min_x = x end
+        if y < min_y then min_y = y end
+        if x > max_x then max_x = x end
+        if y > max_y then max_y = y end
       end
     end
 
@@ -453,9 +453,9 @@
 ---
 -- Computes all intersections of a path with another path and returns
 -- them as an array of coordinates. The intersections will be sorted
--- ``along the path |self|.'' The implementation uses a
+-- ``along the path |self|''. The implementation uses a
 -- divide-and-conquer approach that should be reasonably fast in
--- practice. 
+-- practice.
 --
 -- @param path Another path
 --
@@ -462,12 +462,13 @@
 -- @return Array of all intersections of |path| with |self| in the
 -- order they appear on |self|. Each entry of this array is a table
 -- with the following fields:
+-- %
 -- \begin{itemize}
--- \item |index| The index of the segment in |self| where
--- the intersection occurs.
--- \item |time| The ``time'' at which a point travelling along the
--- segment from its start point to its end point.
--- \item |point| The point itself.
+--   \item |index| The index of the segment in |self| where
+--     the intersection occurs.
+--   \item |time| The ``time'' at which a point traveling along the
+--     segment from its start point to its end point.
+--   \item |point| The point itself.
 -- \end{itemize}
 
 function Path:intersectionsWith(path)
@@ -478,13 +479,13 @@
   local memo2 = prepare_memo(p2)
 
   local intersections = {}
-  
+
   local function intersect_segments(i1, i2)
-    
+
     local s1 = p1[i1]
     local s2 = p2[i2]
     local r = {}
-    
+
     if s1.action == 'lineto' and s2.action == 'lineto' then
       local a = s2.to.x - s2.from.x
       local b = s1.from.x - s1.to.x
@@ -492,103 +493,103 @@
       local d = s2.to.y - s2.from.y
       local e = s1.from.y - s1.to.y
       local f = s2.from.y - s1.from.y
-      
+
       local det = a*e - b*d
-      
+
       if math.abs(det) > eps*eps then
-	local t, s = (c*d - a*f)/det, (b*f - e*c)/det
+        local t, s = (c*d - a*f)/det, (b*f - e*c)/det
 
-	if t >= 0 and t<=1 and s>=0 and s <= 1 then
-	  local p = s1.from:clone()
-	  p:moveTowards(s1.to, t)
-	  return { { time = t, point = p } }
-	end
+        if t >= 0 and t<=1 and s>=0 and s <= 1 then
+          local p = s1.from:clone()
+          p:moveTowards(s1.to, t)
+          return { { time = t, point = p } }
+        end
       end
     elseif s1.action == 'lineto' and s2.action == 'curveto' then
       intersect_curves (0, 1,
-			s1.from.x, s1.from.y,
-			s1.from.x*2/3+s1.to.x*1/3, s1.from.y*2/3+s1.to.y*1/3,
-			s1.from.x*1/3+s1.to.x*2/3, s1.from.y*1/3+s1.to.y*2/3,
-			s1.to.x, s1.to.y,
-			s2.from.x, s2.from.y,
-			s2.support_1.x, s2.support_1.y,
-			s2.support_2.x, s2.support_2.y,
-			s2.to.x, s2.to.y,
-			r)
+                        s1.from.x, s1.from.y,
+                        s1.from.x*2/3+s1.to.x*1/3, s1.from.y*2/3+s1.to.y*1/3,
+                        s1.from.x*1/3+s1.to.x*2/3, s1.from.y*1/3+s1.to.y*2/3,
+                        s1.to.x, s1.to.y,
+                        s2.from.x, s2.from.y,
+                        s2.support_1.x, s2.support_1.y,
+                        s2.support_2.x, s2.support_2.y,
+                        s2.to.x, s2.to.y,
+                        r)
     elseif s1.action == 'curveto' and s2.action == 'lineto' then
       intersect_curves (0, 1,
-			s1.from.x, s1.from.y,
-			s1.support_1.x, s1.support_1.y,
-			s1.support_2.x, s1.support_2.y,
-			s1.to.x, s1.to.y,
-			s2.from.x, s2.from.y,
-			s2.from.x*2/3+s2.to.x*1/3, s2.from.y*2/3+s2.to.y*1/3,
-			s2.from.x*1/3+s2.to.x*2/3, s2.from.y*1/3+s2.to.y*2/3,
-			s2.to.x, s2.to.y,
-			r)
+                        s1.from.x, s1.from.y,
+                        s1.support_1.x, s1.support_1.y,
+                        s1.support_2.x, s1.support_2.y,
+                        s1.to.x, s1.to.y,
+                        s2.from.x, s2.from.y,
+                        s2.from.x*2/3+s2.to.x*1/3, s2.from.y*2/3+s2.to.y*1/3,
+                        s2.from.x*1/3+s2.to.x*2/3, s2.from.y*1/3+s2.to.y*2/3,
+                        s2.to.x, s2.to.y,
+                        r)
     else
       intersect_curves (0, 1,
-			s1.from.x, s1.from.y,
-			s1.support_1.x, s1.support_1.y,
-			s1.support_2.x, s1.support_2.y,
-			s1.to.x, s1.to.y,
-			s2.from.x, s2.from.y,
-			s2.support_1.x, s2.support_1.y,
-			s2.support_2.x, s2.support_2.y,
-			s2.to.x, s2.to.y,
-			r)
+                        s1.from.x, s1.from.y,
+                        s1.support_1.x, s1.support_1.y,
+                        s1.support_2.x, s1.support_2.y,
+                        s1.to.x, s1.to.y,
+                        s2.from.x, s2.from.y,
+                        s2.support_1.x, s2.support_1.y,
+                        s2.support_2.x, s2.support_2.y,
+                        s2.to.x, s2.to.y,
+                        r)
     end
     return r
   end
-  
+
   local function intersect (i1, j1, i2, j2)
 
     if i1 > j1 or i2 > j2 then
       return
     end
-    
+
     local bb1 = bb(i1, j1, memo1)
     local bb2 = bb(i2, j2, memo2)
-    
+
     if boxes_intersect(bb1, bb2) then
       -- Ok, need to do something
       if i1 == j1 and i2 == j2 then
-	local intersects = intersect_segments (i1, i2)
-	for _,t in ipairs(intersects) do
-	  intersections[#intersections+1] = {
-	    time = t.time,
-	    index = p1[i1].path_pos,
-	    point = t.point
-	  }
-	end
+        local intersects = intersect_segments (i1, i2)
+        for _,t in ipairs(intersects) do
+          intersections[#intersections+1] = {
+            time = t.time,
+            index = p1[i1].path_pos,
+            point = t.point
+          }
+        end
       elseif i1 == j1 then
-	local m2 = math.floor((i2 + j2) / 2)
-	intersect(i1, j1, i2, m2)
-	intersect(i1, j1, m2+1, j2)
+        local m2 = math.floor((i2 + j2) / 2)
+        intersect(i1, j1, i2, m2)
+        intersect(i1, j1, m2+1, j2)
       elseif i2 == j2 then
-	local m1 = math.floor((i1 + j1) / 2)
-	intersect(i1, m1, i2, j2)
-	intersect(m1+1, j1, i2, j2)
+        local m1 = math.floor((i1 + j1) / 2)
+        intersect(i1, m1, i2, j2)
+        intersect(m1+1, j1, i2, j2)
       else
-	local m1 = math.floor((i1 + j1) / 2)
-	local m2 = math.floor((i2 + j2) / 2)
-	intersect(i1, m1, i2, m2)
-	intersect(m1+1, j1, i2, m2)
-	intersect(i1, m1, m2+1, j2)
-	intersect(m1+1, j1, m2+1, j2)
+        local m1 = math.floor((i1 + j1) / 2)
+        local m2 = math.floor((i2 + j2) / 2)
+        intersect(i1, m1, i2, m2)
+        intersect(m1+1, j1, i2, m2)
+        intersect(i1, m1, m2+1, j2)
+        intersect(m1+1, j1, m2+1, j2)
       end
-    end    
+    end
   end
-  
+
   -- Run the recursion
   intersect(1, #p1, 1, #p2)
 
   -- Sort
   table.sort(intersections, function(a,b)
-			      return a.index < b.index or
-				a.index == b.index and a.time < b.time
-			    end)
-  
+    return a.index < b.index or
+      a.index == b.index and a.time < b.time
+    end)
+
   -- Remove duplicates
   local remains = {}
   remains[1] = intersections[1]
@@ -608,15 +609,15 @@
 
 function boxes_intersect (bb1, bb2)
   return (bb1.max_x >= bb2.min_x - eps*eps and
-	  bb1.min_x <= bb2.max_x + eps*eps and
-	  bb1.max_y >= bb2.min_y - eps*eps and
-	  bb1.min_y <= bb2.max_y + eps*eps)
+      bb1.min_x <= bb2.max_x + eps*eps and
+      bb1.max_y >= bb2.min_y - eps*eps and
+      bb1.min_y <= bb2.max_y + eps*eps)
 end
 
 
 -- Turns a path into a sequence of segments, each being either a
 -- lineto or a curveto from some point to another point. It also sets
--- up a memoization array for the bounding boxes.
+-- up a memorization array for the bounding boxes.
 
 function segmentize (path)
 
@@ -627,20 +628,20 @@
   local i = 1
   while i <= #path do
     local x = path[i]
-    
+
     if x == "lineto" then
       x = rigid(path[i+1])
       s [#s + 1] = {
-	path_pos = i,
-	action   = "lineto",
-	from     = prev,
-	to       = x,
-	bb       = {
-	  min_x = math.min(prev.x, x.x),
-	  max_x = math.max(prev.x, x.x),
-	  min_y = math.min(prev.y, x.y),
-	  max_y = math.max(prev.y, x.y),
-	}
+        path_pos = i,
+        action   = "lineto",
+        from     = prev,
+        to       = x,
+        bb       = {
+          min_x = math.min(prev.x, x.x),
+          max_x = math.max(prev.x, x.x),
+          min_y = math.min(prev.y, x.y),
+          max_y = math.max(prev.y, x.y),
+        }
       }
       prev = x
       i = i + 2
@@ -650,16 +651,16 @@
       i = i + 2
     elseif x == "closepath" then
       s [#s + 1] = {
-	path_pos = i,
-	action   = "lineto",
-	from     = prev,
-	to       = start,
-	bb       = {
-	  min_x = math.min(prev.x, start.x),
-	  max_x = math.max(prev.x, start.x),
-	  min_y = math.min(prev.y, start.y),
-	  max_y = math.max(prev.y, start.y),
-	}
+        path_pos = i,
+        action   = "lineto",
+        from     = prev,
+        to       = start,
+        bb       = {
+          min_x = math.min(prev.x, start.x),
+          max_x = math.max(prev.x, start.x),
+          min_y = math.min(prev.y, start.y),
+          max_y = math.max(prev.y, start.y),
+        }
       }
       prev = nil
       start = nil
@@ -667,18 +668,18 @@
     elseif x == "curveto" then
       local s1, s2, to = rigid(path[i+1]), rigid(path[i+2]), rigid(path[i+3])
       s [#s + 1] = {
-	action    = "curveto",
-	path_pos  = i,
-	from      = prev,
-	to        = to,
-	support_1 = s1,
-	support_2 = s2,
-	bb        = {
-	  min_x = math.min(prev.x, s1.x, s2.x, to.x),
-	  max_x = math.max(prev.x, s1.x, s2.x, to.x),
-	  min_y = math.min(prev.y, s1.y, s2.y, to.y),
-	  max_y = math.max(prev.y, s1.y, s2.y, to.y),
-	}
+        action    = "curveto",
+        path_pos  = i,
+        from      = prev,
+        to        = to,
+        support_1 = s1,
+        support_2 = s2,
+        bb        = {
+          min_x = math.min(prev.x, s1.x, s2.x, to.x),
+          max_x = math.max(prev.x, s1.x, s2.x, to.x),
+          min_y = math.min(prev.y, s1.y, s2.y, to.y),
+          max_y = math.max(prev.y, s1.y, s2.y, to.y),
+        }
       }
       prev = path[i+3]
       i = i + 4
@@ -692,16 +693,16 @@
 
 
 function prepare_memo (s)
-  
+
   local memo = {}
-  
+
   memo.base = #s
-  
+
   -- Fill memo table
   for i,e in ipairs (s) do
     memo[i*#s + i] = e.bb
   end
-  
+
   return memo
 end
 
@@ -712,8 +713,8 @@
 function bb (i, j, memo)
   local b = memo[memo.base*i + j]
   if not b then
-    assert (i < j, "memoization table filled incorrectly")
-    
+    assert (i < j, "memorization table filled incorrectly")
+
     local mid = math.floor((i+j)/2)
     local bb1 = bb (i, mid, memo)
     local bb2 = bb (mid+1, j, memo)
@@ -725,21 +726,21 @@
     }
     memo[memo.base*i + j] = b
   end
-  
+
   return b
 end
 
 
 
--- Intersect two Bezier curves. 
+-- Intersect two Bézier curves.
 
 function intersect_curves(t0, t1,
-			  c1_ax, c1_ay, c1_bx, c1_by,
-			  c1_cx, c1_cy, c1_dx, c1_dy,
-			  c2_ax, c2_ay, c2_bx, c2_by,
-			  c2_cx, c2_cy, c2_dx, c2_dy,
-			  intersections)
-  
+                          c1_ax, c1_ay, c1_bx, c1_by,
+                          c1_cx, c1_cy, c1_dx, c1_dy,
+                          c2_ax, c2_ay, c2_bx, c2_by,
+                          c2_cx, c2_cy, c2_dx, c2_dy,
+                          intersections)
+
   -- Only do something, if the bounding boxes intersect:
   local c1_min_x = math.min(c1_ax, c1_bx, c1_cx, c1_dx)
   local c1_max_x = math.max(c1_ax, c1_bx, c1_cx, c1_dx)
@@ -749,12 +750,12 @@
   local c2_max_x = math.max(c2_ax, c2_bx, c2_cx, c2_dx)
   local c2_min_y = math.min(c2_ay, c2_by, c2_cy, c2_dy)
   local c2_max_y = math.max(c2_ay, c2_by, c2_cy, c2_dy)
-    
+
   if c1_max_x >= c2_min_x and
      c1_min_x <= c2_max_x and
      c1_max_y >= c2_min_y and
-     c1_min_y <= c2_max_y then     
-     
+     c1_min_y <= c2_max_y then
+
     -- Everything "near together"?
     if c1_max_x - c1_min_x < eps and c1_max_y - c1_min_y < eps then
 
@@ -765,20 +766,20 @@
       local d = c2_dy - c2_ay
       local e = c1_ay - c1_dy
       local f = c2_ay - c1_ay
-      
+
       local det = a*e - b*d
       local t
-      
+
       t = (c*d - a*f)/det
       if t<0 then
-	t=0
+        t=0
       elseif t>1 then
-	t=1
+        t=1
       end
 
       intersections [#intersections + 1] = {
-	time = t0 + t*(t1-t0),
-	point = Coordinate.new(c1_ax + t*(c1_dx-c1_ax), c1_ay+t*(c1_dy-c1_ay))
+        time = t0 + t*(t1-t0),
+        point = Coordinate.new(c1_ax + t*(c1_dx-c1_ax), c1_ay+t*(c1_dy-c1_ay))
       }
     else
       -- Cut 'em in half!
@@ -785,37 +786,37 @@
       local c1_ex, c1_ey = (c1_ax + c1_bx)/2, (c1_ay + c1_by)/2
       local c1_fx, c1_fy = (c1_bx + c1_cx)/2, (c1_by + c1_cy)/2
       local c1_gx, c1_gy = (c1_cx + c1_dx)/2, (c1_cy + c1_dy)/2
-      
+
       local c1_hx, c1_hy = (c1_ex + c1_fx)/2, (c1_ey + c1_fy)/2
       local c1_ix, c1_iy = (c1_fx + c1_gx)/2, (c1_fy + c1_gy)/2
-            
+
       local c1_jx, c1_jy = (c1_hx + c1_ix)/2, (c1_hy + c1_iy)/2
-      
+
       local c2_ex, c2_ey = (c2_ax + c2_bx)/2, (c2_ay + c2_by)/2
       local c2_fx, c2_fy = (c2_bx + c2_cx)/2, (c2_by + c2_cy)/2
       local c2_gx, c2_gy = (c2_cx + c2_dx)/2, (c2_cy + c2_dy)/2
-      
+
       local c2_hx, c2_hy = (c2_ex + c2_fx)/2, (c2_ey + c2_fy)/2
       local c2_ix, c2_iy = (c2_fx + c2_gx)/2, (c2_fy + c2_gy)/2
-            
+
       local c2_jx, c2_jy = (c2_hx + c2_ix)/2, (c2_hy + c2_iy)/2
 
       intersect_curves (t0, (t0+t1)/2,
-			c1_ax, c1_ay, c1_ex, c1_ey, c1_hx, c1_hy, c1_jx, c1_jy,
-			c2_ax, c2_ay, c2_ex, c2_ey, c2_hx, c2_hy, c2_jx, c2_jy,
-			intersections)
+                        c1_ax, c1_ay, c1_ex, c1_ey, c1_hx, c1_hy, c1_jx, c1_jy,
+                        c2_ax, c2_ay, c2_ex, c2_ey, c2_hx, c2_hy, c2_jx, c2_jy,
+                        intersections)
       intersect_curves (t0, (t0+t1)/2,
-			c1_ax, c1_ay, c1_ex, c1_ey, c1_hx, c1_hy, c1_jx, c1_jy,
-			c2_jx, c2_jy, c2_ix, c2_iy, c2_gx, c2_gy, c2_dx, c2_dy,
-			intersections)
+                        c1_ax, c1_ay, c1_ex, c1_ey, c1_hx, c1_hy, c1_jx, c1_jy,
+                        c2_jx, c2_jy, c2_ix, c2_iy, c2_gx, c2_gy, c2_dx, c2_dy,
+                        intersections)
       intersect_curves ((t0+t1)/2, t1,
-			c1_jx, c1_jy, c1_ix, c1_iy, c1_gx, c1_gy, c1_dx, c1_dy,
-			c2_ax, c2_ay, c2_ex, c2_ey, c2_hx, c2_hy, c2_jx, c2_jy,
-			intersections)
+                        c1_jx, c1_jy, c1_ix, c1_iy, c1_gx, c1_gy, c1_dx, c1_dy,
+                        c2_ax, c2_ay, c2_ex, c2_ey, c2_hx, c2_hy, c2_jx, c2_jy,
+                        intersections)
       intersect_curves ((t0+t1)/2, t1,
-			c1_jx, c1_jy, c1_ix, c1_iy, c1_gx, c1_gy, c1_dx, c1_dy,
-			c2_jx, c2_jy, c2_ix, c2_iy, c2_gx, c2_gy, c2_dx, c2_dy,
-			intersections)      
+                        c1_jx, c1_jy, c1_ix, c1_iy, c1_gx, c1_gy, c1_dx, c1_dy,
+                        c2_jx, c2_jy, c2_ix, c2_iy, c2_gx, c2_gy, c2_dx, c2_dy,
+                        intersections)
     end
   end
 end
@@ -828,30 +829,30 @@
 -- segment and everything in the segment before the given time is
 -- removed from the path.
 --
--- @param index The index of a path segment. 
+-- @param index The index of a path segment.
 -- @param time A time along the specified path segment.
 
 function Path:cutAtBeginning(index, time)
-  
+
   local cut_path = Path:new ()
-  
+
   -- Ok, first, we need to find the segment *before* the current
   -- one. Usually, this will be a moveto or a lineto, but things could
   -- be different.
   assert (type(self[index-1]) == "table" or type(self[index-1]) == "function",
-	  "segment before intersection does not end with a coordinate")
+          "segment before intersection does not end with a coordinate")
 
   local from   = rigid(self[index-1])
   local action = self[index]
-  
+
   -- Now, depending on the type of segment, we do different things:
   if action == "lineto" then
-    
+
     -- Ok, compute point:
     local to = rigid(self[index+1])
 
     from:moveTowards(to, time)
-    
+
     -- Ok, this is easy: We start with a fresh moveto ...
     cut_path[1] = "moveto"
     cut_path[2] = from
@@ -888,20 +889,20 @@
     for i=index+4,#self do
       cut_path[#cut_path+1] = self[i]
     end
-    
+
   elseif action == "closepath" then
     -- Let us find the start point:
-    local found 
+    local found
     for i=index,1,-1 do
       if self[i] == "moveto" then
-	-- Bingo:
-	found = i
-	break
+        -- Bingo:
+        found = i
+        break
       end
     end
 
     assert(found, "no moveto found in path")
-    
+
     local to = rigid(self[found+1])
     from:moveTowards(to,time)
 
@@ -934,36 +935,36 @@
 -- Shorten a path at the end. This method works like |cutAtBeginning|,
 -- only the path is cut at the end.
 --
--- @param index The index of a path segment. 
+-- @param index The index of a path segment.
 -- @param time A time along the specified path segment.
 
 function Path:cutAtEnd(index, time)
 
   local cut_path = Path:new ()
-  
+
   -- Ok, first, we need to find the segment *before* the current
   -- one. Usually, this will be a moveto or a lineto, but things could
   -- be different.
   assert (type(self[index-1]) == "table" or type(self[index-1]) == "function",
-	  "segment before intersection does not end with a coordinate")
+          "segment before intersection does not end with a coordinate")
 
   local from   = rigid(self[index-1])
   local action = self[index]
-  
+
   -- Now, depending on the type of segment, we do different things:
   if action == "lineto" then
-    
+
     -- Ok, compute point:
     local to = rigid(self[index+1])
     to:moveTowards(from, 1-time)
-    
+
     for i=1,index do
       cut_path[i] = self[i]
     end
     cut_path[index+1] = to
-    
+
   elseif action == "curveto" then
-    
+
     local s1 = rigid(self[index+1])
     local s2 = rigid(self[index+2])
     local to = rigid(self[index+3])
@@ -986,20 +987,20 @@
     cut_path[index+1] = s1
     cut_path[index+2] = s2
     cut_path[index+3] = to
-    
+
   elseif action == "closepath" then
     -- Let us find the start point:
-    local found 
+    local found
     for i=index,1,-1 do
       if self[i] == "moveto" then
-	-- Bingo:
-	found = i
-	break
+        -- Bingo:
+        found = i
+        break
       end
     end
 
     assert(found, "no moveto found in path")
-    
+
     local to = rigid(self[found+1]:clone())
     to:moveTowards(from,1-time)
 
@@ -1028,7 +1029,7 @@
 -- ``Pads'' the path. The idea is the following: Suppose we stroke the
 -- path with a pen whose width is twice the value |padding|. The outer
 -- edge of this stroked drawing is now a path by itself. The path will
--- be a bit longer and ``larger.'' The present function tries to
+-- be a bit longer and ``larger''. The present function tries to
 -- compute an approximation to this resulting path.
 --
 -- The algorithm used to compute the enlarged part does not necessarily
@@ -1040,7 +1041,7 @@
 --
 
 function Path:pad(padding)
-  
+
   local padded = self:clone()
   padded:makeRigid()
 
@@ -1047,22 +1048,22 @@
   if padding == 0 then
     return padded
   end
-  
+
   -- First, decompose the path into subpaths:
   local subpaths = {}
   local subpath = {}
   local start_index = 1
-  
+
   local function closepath(end_index)
     if #subpath >= 1 then
       subpath.start_index = start_index
       subpath.end_index   = end_index
       start_index = end_index + 1
-      
+
       local start = 1
       if (subpath[#subpath] - subpath[1]):norm() < 0.01 and subpath[2] then
-	start = 2
-	subpath.skipped = subpath[1]
+        start = 2
+        subpath.skipped = subpath[1]
       end
       subpath[#subpath + 1] = subpath[start]
       subpath[#subpath + 1] = subpath[start+1]
@@ -1070,11 +1071,11 @@
       subpath = {}
     end
   end
-  
+
   for i,p in ipairs(padded) do
     if p ~= "closepath" then
       if type(p) == "table" then
-	subpath[#subpath + 1] = p
+        subpath[#subpath + 1] = p
       end
     else
       closepath (i)
@@ -1087,7 +1088,7 @@
     local new_coordinates = {}
     local _,_,_,_,c_x,c_y = Coordinate.boundingBox(subpath)
     local c = Coordinate.new(c_x,c_y)
-    
+
     -- Find out the orientation of the path
     local count = 0
     for i=1,#subpath-2 do
@@ -1095,19 +1096,19 @@
       local d1 = subpath[i+2] - subpath[i+1]
 
       local diff = math.atan2(d2.y,d2.x) - math.atan2(d1.y,d1.x)
-      
+
       if diff < -math.pi then
-	count = count + 1
+        count = count + 1
       elseif diff > math.pi then
-	count = count - 1
+        count = count - 1
       end
     end
-    
+
     for i=2,#subpath-1 do
       local p = subpath[i]
       local d1 = subpath[i] - subpath[i-1]
       local d2 = subpath[i+1] - subpath[i]
-      
+
       local orth1 = Coordinate.new(-d1.y, d1.x)
       local orth2 = Coordinate.new(-d2.y, d2.x)
 
@@ -1115,21 +1116,21 @@
       orth2:normalize()
 
       if count < 0 then
-	orth1:scale(-1)
-	orth2:scale(-1)
+        orth1:scale(-1)
+        orth2:scale(-1)
       end
 
       -- Ok, now we want to compute the intersection of the lines
       -- perpendicular to p + padding*orth1 and p + padding*orth2:
-      
+
       local det = orth1.x * orth2.y - orth1.y * orth2.x
 
       local c
       if math.abs(det) < 0.1 then
-	c = orth1 + orth2
-	c:scale(padding/2)
+        c = orth1 + orth2
+        c:scale(padding/2)
       else
-	c = Coordinate.new (padding*(orth2.y-orth1.y)/det, padding*(orth1.x-orth2.x)/det)
+        c = Coordinate.new (padding*(orth2.y-orth1.y)/det, padding*(orth1.x-orth2.x)/det)
       end
 
       new_coordinates[i] = c+p
@@ -1146,50 +1147,50 @@
       local p = subpath[1]
       local new_p = new_coordinates[#subpath-2]
       p.x = new_p.x
-      p.y = new_p.y      
+      p.y = new_p.y
     end
-  
+
     -- Now, we need to correct the curveto fields:
     for i=subpath.start_index,subpath.end_index do
       if self[i] == 'curveto' then
-	local from = rigid(self[i-1])
-	local s1   = rigid(self[i+1])
-	local s2   = rigid(self[i+2])
-	local to   = rigid(self[i+3])
-	
-	local p1x, p1y, _, _, h1x, h1y =
-	  Bezier.atTime(from.x, from.y, s1.x, s1.y, s2.x, s2.y,
-			to.x, to.y, 1/3)
-	
-	local p2x, p2y, _, _, _, _, h2x, h2y =
-	  Bezier.atTime(from.x, from.y, s1.x, s1.y, s2.x, s2.y,
-			to.x, to.y, 2/3)
-	
-	local orth1 = Coordinate.new (p1y - h1y, -(p1x - h1x))
-	orth1:normalize()
-	orth1:scale(-padding)
-	
-	local orth2 = Coordinate.new (p2y - h2y, -(p2x - h2x))
-	orth2:normalize()
-	orth2:scale(padding)
+        local from = rigid(self[i-1])
+        local s1   = rigid(self[i+1])
+        local s2   = rigid(self[i+2])
+        local to   = rigid(self[i+3])
 
-	if count < 0 then
-	  orth1:scale(-1)
-	  orth2:scale(-1)
-	end
-	
-	local new_s1, new_s2 =
-	  Bezier.supportsForPointsAtTime(padded[i-1],
-					 Coordinate.new(p1x+orth1.x,p1y+orth1.y), 1/3,
-					 Coordinate.new(p2x+orth2.x,p2y+orth2.y), 2/3,
-					 padded[i+3])
-	
-	padded[i+1] = new_s1
-	padded[i+2] = new_s2
+        local p1x, p1y, _, _, h1x, h1y =
+          Bezier.atTime(from.x, from.y, s1.x, s1.y, s2.x, s2.y,
+                        to.x, to.y, 1/3)
+
+        local p2x, p2y, _, _, _, _, h2x, h2y =
+          Bezier.atTime(from.x, from.y, s1.x, s1.y, s2.x, s2.y,
+                        to.x, to.y, 2/3)
+
+        local orth1 = Coordinate.new (p1y - h1y, -(p1x - h1x))
+        orth1:normalize()
+        orth1:scale(-padding)
+
+        local orth2 = Coordinate.new (p2y - h2y, -(p2x - h2x))
+        orth2:normalize()
+        orth2:scale(padding)
+
+        if count < 0 then
+          orth1:scale(-1)
+          orth2:scale(-1)
+        end
+
+        local new_s1, new_s2 =
+          Bezier.supportsForPointsAtTime(padded[i-1],
+                                         Coordinate.new(p1x+orth1.x,p1y+orth1.y), 1/3,
+                                         Coordinate.new(p2x+orth2.x,p2y+orth2.y), 2/3,
+                                         padded[i+3])
+
+        padded[i+1] = new_s1
+        padded[i+2] = new_s2
       end
     end
   end
-  
+
   return padded
 end
 
@@ -1202,12 +1203,12 @@
 -- the following happens: We first invert the transformation
 -- and apply it to the start point. Then we compute the arc
 -- ``normally'', as if no transformation matrix were present. Then we
--- apply the transformation matrix to all computed points.   
+-- apply the transformation matrix to all computed points.
 --
 -- @function Path:appendArc(start_angle,end_angle,radius,trans)
 --
 -- @param start_angle The start angle of the arc. Must be specified in
--- degrees. 
+-- degrees.
 -- @param end_angle the end angle of the arc.
 -- @param radius The radius of the circle on which this arc lies.
 -- @param trans A transformation matrix. If |nil|, the identity
@@ -1232,7 +1233,7 @@
 -- of the circle.
 -- @param clockwise If true, the arc will be clockwise. Otherwise (the
 -- default, if nothing or |nil| is given), the arc will be counter
--- clockise. 
+-- clockwise.
 -- @param trans A transformation matrix. If missing,
 -- the identity matrix is assumed.
 
@@ -1249,7 +1250,7 @@
   local i = 1
   while i <= #self do
     local p = self[i]
-    
+
     if p == "lineto" then
       r [#r+1] = " -- " .. tostring(rigid(self[i+1]))
       i = i + 1
@@ -1274,4 +1275,4 @@
 
 -- Done
 
-return Path
\ No newline at end of file
+return Path

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Path_arced.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Path_arced.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Path_arced.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -61,7 +61,7 @@
 end
 
 local function atan2deg(y,x)
-  
+
   -- Works like atan2, but returns the angle in degrees and, returns
   -- exactly a multiple of 90 if x or y are zero
 
@@ -80,14 +80,14 @@
   else
     return atan2(y,x) * to_deg
   end
-    
+
 end
 
 local function subarc (path, startx, starty, start_angle, delta, radius, trans, center_x, center_y)
-  
+
   local end_angle = start_angle + delta
   local factor = tan (delta*to_rad/4) * 1.333333333333333333333 * radius
-  
+
   local s1, c1, s190, c190, s2, c2, s290, c290
 
   if start_angle % 90 == 0 then
@@ -103,7 +103,7 @@
     local a2 = end_angle * to_rad
     s2, c2, s290, c290 = sin(a2), cos(a2), sin(a2-pi_half), cos(a2-pi_half)
   end
-  
+
   local lastx, lasty = center_x + c2*radius, center_y + s2*radius
 
   path[#path + 1] = "curveto"
@@ -116,7 +116,7 @@
     path[#path-1]:apply(trans)
     path[#path  ]:apply(trans)
   end
-  
+
   return lastx, lasty, end_angle
 end
 
@@ -123,7 +123,7 @@
 
 
 local function arc (path, start, start_angle, end_angle, radius, trans, centerx, centery)
-  
+
   -- @param path is the path object
   -- @param start is the start coordinate
   -- @param start_angle is given in degrees
@@ -132,65 +132,65 @@
   -- @param trans is an optional transformation matrix that gets applied to all computed points
   -- @param centerx optionally: x-part of the center of the circle
   -- @param centery optionally: y-part of the center of the circle
-  
+
   local startx, starty = start.x, start.y
-  
+
   -- Compute center:
   centerx = centerx or startx - cos(start_angle*to_rad)*radius
   centery = centery or starty - sin(start_angle*to_rad)*radius
-  
+
   if start_angle < end_angle then
     -- First, ensure that the angles are in a reasonable range:
     start_angle = start_angle % 360
     end_angle   = end_angle % 360
-    
+
     if end_angle <= start_angle then
-      -- In case the modulo has inadvertedly moved the end angle
+      -- In case the modulo has inadvertently moved the end angle
       -- before the start angle:
       end_angle = end_angle + 360
     end
-    
+
     -- Ok, now create a series of arcs that are at most quarter-cycles:
     while start_angle < end_angle do
       if start_angle + 179 < end_angle then
-	-- Add a quarter cycle:
-	startx, starty, start_angle = subarc(path, startx, starty, start_angle, 90, radius, trans, centerx, centery)
+        -- Add a quarter cycle:
+        startx, starty, start_angle = subarc(path, startx, starty, start_angle, 90, radius, trans, centerx, centery)
       elseif start_angle + 90 < end_angle then
-	-- Add 60 degrees to ensure that there are no small segments
-	-- at the end
-	startx, starty, start_angle = subarc(path, startx, starty, start_angle, (end_angle-start_angle)/2, radius, trans, centerx, centery)
+        -- Add 60 degrees to ensure that there are no small segments
+        -- at the end
+        startx, starty, start_angle = subarc(path, startx, starty, start_angle, (end_angle-start_angle)/2, radius, trans, centerx, centery)
       else
-	subarc(path, startx, starty, start_angle, end_angle - start_angle, radius, trans, centerx, centery)
-	break
+        subarc(path, startx, starty, start_angle, end_angle - start_angle, radius, trans, centerx, centery)
+        break
       end
     end
-    
+
   elseif start_angle > end_angle then
     -- First, ensure that the angles are in a reasonable range:
     start_angle = start_angle % 360
     end_angle   = end_angle % 360
-    
+
     if end_angle >= start_angle then
       -- In case the modulo has inadvertedly moved the end angle
       -- before the start angle:
       end_angle = end_angle - 360
     end
-    
+
     -- Ok, now create a series of arcs that are at most quarter-cycles:
     while start_angle > end_angle do
       if start_angle - 179 > end_angle then
-	-- Add a quarter cycle:
-	startx, starty, start_angle = subarc(path, startx, starty, start_angle, -90, radius, trans, centerx, centery)
+        -- Add a quarter cycle:
+        startx, starty, start_angle = subarc(path, startx, starty, start_angle, -90, radius, trans, centerx, centery)
       elseif start_angle - 90 > end_angle then
-	-- Add 60 degrees to ensure that there are no small segments
-	-- at the end
-	startx, starty, start_angle = subarc(path, startx, starty, start_angle, (end_angle-start_angle)/2, radius, trans, centerx, centery)
+        -- Add 60 degrees to ensure that there are no small segments
+        -- at the end
+        startx, starty, start_angle = subarc(path, startx, starty, start_angle, (end_angle-start_angle)/2, radius, trans, centerx, centery)
       else
-	subarc(path, startx, starty, start_angle, end_angle - start_angle, radius, trans, centerx, centery)
-	break
+        subarc(path, startx, starty, start_angle, end_angle - start_angle, radius, trans, centerx, centery)
+        break
       end
     end
-    
+
   -- else, do nothing
   end
 end
@@ -199,10 +199,10 @@
 -- Doc see Path.lua
 
 function Path:appendArc(start_angle,end_angle,radius, trans)
-  
+
   local start = rigid(self[#self])
   assert(type(start) == "table", "trying to append an arc to a path that does not end with a coordinate")
-  
+
   if trans then
     start = start:clone()
     start:apply(Transform.invert(trans))
@@ -223,13 +223,13 @@
 
   local trans_target = target
   local centerx, centery, radius
-  
+
   if type(radius_or_center) == "number" then
     radius = radius_or_center
   else
     centerx, centery = radius_or_center.x, radius_or_center.y
   end
-  
+
   if trans then
     start = start:clone()
     trans_target = target:clone()
@@ -242,7 +242,7 @@
       centerx, centery = t.x, t.y
     end
   end
-  
+
   if not centerx then
     -- Compute center
     local dx, dy = target.x - start.x, target.y - start.y
@@ -249,36 +249,36 @@
 
     if abs(dx) == abs(dy) and abs(dx) == radius then
       if (dx < 0 and dy < 0) or (dx > 0 and dy > 0) then
-	centerx = start.x
-	centery = trans_target.y
+        centerx = start.x
+        centery = trans_target.y
       else
-	centerx = trans_target.x
-	centery = start.y
+        centerx = trans_target.x
+        centery = start.y
       end
     else
       local l_sq = dx*dx + dy*dy
       if l_sq >= radius*radius*4*0.999999 then
-	centerx = (start.x+trans_target.x) / 2
-	centery = (start.y+trans_target.y) / 2
-	assert(l_sq <= radius*radius*4/0.999999, "radius too small for arc")
+        centerx = (start.x+trans_target.x) / 2
+        centery = (start.y+trans_target.y) / 2
+        assert(l_sq <= radius*radius*4/0.999999, "radius too small for arc")
       else
         -- Normalize
-	local l = sqrt(l_sq)
-	local nx = dx / l
-	local ny = dy / l
-	
-	local e = sqrt(radius*radius - 0.25*l_sq) 
-	
-	centerx = start.x + 0.5*dx - ny*e
-	centery = start.y + 0.5*dy + nx*e
+        local l = sqrt(l_sq)
+        local nx = dx / l
+        local ny = dy / l
+
+        local e = sqrt(radius*radius - 0.25*l_sq)
+
+        centerx = start.x + 0.5*dx - ny*e
+        centery = start.y + 0.5*dy + nx*e
       end
     end
   end
-  
+
   local start_dx, start_dy, target_dx, target_dy =
     start.x - centerx, start.y - centery,
     trans_target.x - centerx, trans_target.y - centery
-  
+
   if not radius then
     -- Center is given, compute radius:
     radius_sq = start_dx^2 + start_dy^2
@@ -285,13 +285,13 @@
 
     -- Ensure that the circle is, indeed, centered:
     assert (abs(target_dx^2 + target_dy^2 - radius_sq)/radius_sq < 1e-5, "attempting to add an arc with incorrect center")
-    
+
     radius = sqrt(radius_sq)
   end
 
   -- Compute start and end angle:
-  local start_angle = atan2deg(start_dy, start_dx) 
-  local end_angle = atan2deg(target_dy, target_dx) 
+  local start_angle = atan2deg(start_dy, start_dx)
+  local end_angle = atan2deg(target_dy, target_dx)
 
   if clockwise then
     if end_angle > start_angle then
@@ -302,7 +302,7 @@
       end_angle = end_angle + 360
     end
   end
-  
+
   arc (self, start, start_angle, end_angle, radius, trans, centerx, centery)
 
   -- Patch last point to avoid rounding problems:
@@ -313,4 +313,4 @@
 
 -- Done
 
-return true
\ No newline at end of file
+return true

Modified: trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Vertex.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Vertex.lua	2019-04-04 20:54:25 UTC (rev 50757)
+++ trunk/Master/texmf-dist/tex/generic/pgf/graphdrawing/lua/pgf/gd/model/Vertex.lua	2019-04-04 20:55:44 UTC (rev 50758)
@@ -39,12 +39,12 @@
 -- path lives in a special ``local'' coordinate system, that is, all
 -- coordinates of this path should actually be considered relative to
 -- the vertex' |pos| field. Note that the path is typically, but not
--- alwyas, ``centered'' on the origin. A graph drawing algorithm
+-- always, ``centered'' on the origin. A graph drawing algorithm

@@ Diff output truncated at 1234567 characters. @@


More information about the tex-live-commits mailing list