summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/adigraph
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2018-03-27 21:24:17 +0000
committerKarl Berry <karl@freefriends.org>2018-03-27 21:24:17 +0000
commit8181d0d95efc568c56d63b5cfb43d2bc3e093620 (patch)
treebe069793fd26deec12078437011c9ed6004f55f4 /Master/texmf-dist/tex/latex/adigraph
parent9e50653bebbd3a71764eb41af38c02d5e4e80a9b (diff)
adigraph (27mar18)
git-svn-id: svn://tug.org/texlive/trunk@47148 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/adigraph')
-rw-r--r--Master/texmf-dist/tex/latex/adigraph/adigraph.sty115
1 files changed, 57 insertions, 58 deletions
diff --git a/Master/texmf-dist/tex/latex/adigraph/adigraph.sty b/Master/texmf-dist/tex/latex/adigraph/adigraph.sty
index c8e36669957..04f734c3de4 100644
--- a/Master/texmf-dist/tex/latex/adigraph/adigraph.sty
+++ b/Master/texmf-dist/tex/latex/adigraph/adigraph.sty
@@ -7,11 +7,11 @@
%
% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
%
-\def\AdigraphVersionNumber{v1.4.1}
+\def\AdigraphVersionNumber{v1.5.1}
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{adigraph}
-[2018/03/11 \AdigraphVersionNumber LaTeX package for creating augmenting directed graphs]
+[2018/03/27 \AdigraphVersionNumber LaTeX package for creating augmenting directed graphs]
\RequirePackage{etoolbox}
\RequirePackage{fp}
@@ -54,46 +54,6 @@
\ifbool{adigraphEdge#1v#2Drawn}{%
% This edge was already drawn
}{%
- \letcs{\firstX}{adigraphNode#1X}
- \letcs{\firstY}{adigraphNode#1Y}
- \letcs{\secondX}{adigraphNode#2X}
- \letcs{\secondY}{adigraphNode#2Y}
-
- \providebool{equalX}
- \FPifeq{\firstX}{\secondX}
- \booltrue{equalX}
- \else
- \boolfalse{equalX}
- \fi
-
- \providebool{ltX}
- \FPiflt{\firstX}{\secondX}
- \booltrue{ltX}
- \else
- \boolfalse{ltX}
- \fi
-
- \providebool{ltY}
- \FPiflt{\firstY}{\secondY}
- \booltrue{ltY}
- \else
- \boolfalse{ltY}
- \fi
-
- \ifbool{ltX}{%
- \def\AdigraphLabelPosition{above}
- }{%
- \ifbool{equalX}{%
- \ifbool{ltY}{%
- \def\AdigraphLabelPosition{left}
- }{%
- \def\AdigraphLabelPosition{right}
- }
- }{%
- \def\AdigraphLabelPosition{below}
- }
- }
-
\booltrue{adigraphEdge#1v#2Drawn}
\letcs{\edgeLabelPosition}{adigraphEdge#1v#2LabelPosition}
\letcs{\edgeWeight}{adigraphEdge#1v#2Weight}
@@ -128,7 +88,11 @@
\ifbool{secondWeight}{%
% The twin edge won't be drawn
% This edge will be a straight line
- \draw[edge,\edgeColor] (#1) to node[\edgeLabelPosition, \AdigraphLabelPosition] {\edgeLabel}(#2);
+ \ifbool{adigraphEdge#1v#2HasEmptyLabel}{
+ \draw[edge,\edgeColor] (#1) to (#2);
+ }{
+ \draw[edge,\edgeColor] (#1) to node[\edgeLabelPosition, fill=white] {\edgeLabel}(#2);
+ }
}{%
\IfEq{#1}{#2}{
% This is a self loop
@@ -175,10 +139,18 @@
}
\pgfmathsetmacro{\leftAngle}{\centralAngle-35}
\pgfmathsetmacro{\rightAngle}{\centralAngle+35}
- \draw[edge,\edgeColor] (#1) to [out=\leftAngle,in=\rightAngle,looseness=8] node[\edgeLabelPosition, \AdigraphLabelPosition] {\edgeLabel}(#1);
+ \ifbool{adigraphEdge#1v#2HasEmptyLabel}{
+ \draw[edge,\edgeColor] (#1) to [out=\leftAngle,in=\rightAngle,looseness=8](#1);
+ }{
+ \draw[edge,\edgeColor] (#1) to [out=\leftAngle,in=\rightAngle,looseness=8] node[\edgeLabelPosition, fill=white] {\edgeLabel}(#1);
+ }
}{
% Both edges have to be drawn, they will be curly
- \draw[edge,\edgeColor] (#1) to [bend right=20] node[\edgeLabelPosition, \AdigraphLabelPosition] {\edgeLabel}(#2);
+ \ifbool{adigraphEdge#1v#2HasEmptyLabel}{
+ \draw[edge,\edgeColor] (#1) to [bend right=20] (#2);
+ }{
+ \draw[edge,\edgeColor] (#1) to [bend right=20] node[\edgeLabelPosition, fill=white] {\edgeLabel}(#2);
+ }
}
}%
}%
@@ -268,6 +240,7 @@
\listxadd{\AdigraphEdgeList}{\AdigraphFirstNode,\AdigraphSecondNode}
\newbool{adigraphEdge\AdigraphEdgeName HasLabel}
+ \newbool{adigraphEdge\AdigraphEdgeName HasEmptyLabel}
\newbool{adigraphEdge\AdigraphEdgeName Drawn}
\ifblank{#3}{%
\boolfalse{adigraphEdge\AdigraphEdgeName HasLabel}
@@ -276,6 +249,7 @@
}%
\ifblank{#2}{%
\booltrue{adigraphEdge\AdigraphEdgeName HasLabel}
+ \booltrue{adigraphEdge\AdigraphEdgeName HasEmptyLabel}
\csdef{adigraphEdge\AdigraphEdgeName Weight}{1}%
}{%
\csdef{adigraphEdge\AdigraphEdgeName Weight}{#2}%
@@ -334,17 +308,20 @@
}
}
-\NewDocumentCommand{\AdigraphPathBuilder}{m m m}{%
+\NewDocumentCommand{\AdigraphPathBuilder}{m m m m m}{%
%
% #1 -> first node
% #2 -> second node
% #3 -> units
+ % #4 -> forward color
+ % #5 -> backward color
%
\ifcsdef{adigraphEdge#1v#2Weight}{%
\letcs{\AdigraphWeightA}{adigraphEdge#1v#2Weight}
}{%
\def\AdigraphWeightA{0}
\newbool{adigraphEdge#1v#2HasLabel}
+ \newbool{adigraphEdge#1v#2HasEmptyLabel}
\ifcsdef{adigraphEdge#2v#1LabelPosition}{%
\csdef{adigraphEdge#1v#2LabelPosition}{\csuse{adigraphEdge#2v#1LabelPosition}}
}{%
@@ -352,7 +329,6 @@
}
\csdef{adigraphEdge#1v#2LabelPosition}{midway}
\newbool{adigraphEdge#1v#2Drawn}
- \csdef{adigraphEdge#1v#2Color}{black}%
\listgadd{\AdigraphEdgeList}{#1,#2}
}
\ifcsdef{adigraphEdge#2v#1Weight}{%
@@ -360,33 +336,56 @@
}{%
\def\AdigraphWeightB{0}
\newbool{adigraphEdge#2v#1HasLabel}
+ \newbool{adigraphEdge#2v#1HasEmptyLabel}
\ifcsdef{adigraphEdge#1v#2LabelPosition}{%
\csdef{adigraphEdge#2v#1LabelPosition}{\csuse{adigraphEdge#1v#2LabelPosition}}
}{%
\csdef{adigraphEdge#2v#1LabelPosition}{midway}
}
\newbool{adigraphEdge#2v#1Drawn}
- \csdef{adigraphEdge#2v#1Color}{black}%
\listgadd{\AdigraphEdgeList}{#2,#1}
}
- \ifnum\value{AdigraphCurrentPathNumber}=\value{AdigraphNumberOfPaths}
- \csdef{adigraphEdge#1v#2Color}{blue}%
- \csdef{adigraphEdge#2v#1Color}{red}%
- \else
- % Leaves the default colors
- \fi
+ \cslet{adigraphEdge#1v#2Color}{#4}%
+ \cslet{adigraphEdge#2v#1Color}{#5}%
+
\expandafter\AdigraphSimpleSum\expandafter{\AdigraphWeightA}{-#3}{\resultA}
\expandafter\AdigraphSimpleSum\expandafter{\AdigraphWeightB}{#3}{\resultB}
\cslet{adigraphEdge#1v#2Weight}{\resultA}%
\cslet{adigraphEdge#2v#1Weight}{\resultB}%
}
-\NewDocumentCommand{\AdigraphBuildPath}{> { \SplitList{,} } m m}{%
+\NewDocumentCommand{\AdigraphElaboratePathColors}{G{} G{black}}{}
+
+\NewDocumentCommand{\AdigraphBuildPath}{> { \SplitList{,} } m G{} > { \SplitArgument{ 1 } {,} } G{}}{%
%
% #1 -> List of nodes
% #2 -> Units to send over path
+ % #3 -> Colors list
%
+ \ifblank{#2}{%
+ \FPset{\units}{0}
+ }{
+ \FPset{\units}{#2}
+ }
+
+ \RenewDocumentCommand{\AdigraphElaboratePathColors}{G{} G{black}}{%
+ \ifblank{##1}{
+ \ifnum\value{AdigraphNumberOfPaths}=\value{AdigraphCurrentPathNumber}
+ \def\AdigraphForwardPathColor{red}
+ \def\AdigraphBackwardPathColor{blue}
+ \else
+ \def\AdigraphForwardPathColor{black}
+ \def\AdigraphBackwardPathColor{black}
+ \fi
+ }{
+ \def\AdigraphForwardPathColor{##1}
+ \def\AdigraphBackwardPathColor{##2}
+ }
+ }
+
+ \AdigraphElaboratePathColors#3
+
\RenewDocumentCommand{\AdigraphElaboratePath}{m}{%
\IfInteger{##1}{%
\def\AdigraphCurrentNode{\AdigraphRom{##1}}%
@@ -394,7 +393,7 @@
\def\AdigraphCurrentNode{##1}%
}%
\ifdef{\AdigraphLastParsedNode}{%
- \expandafter\expandafter\expandafter\AdigraphPathBuilder\expandafter\expandafter\expandafter{\expandafter\AdigraphLastParsedNode\expandafter}\expandafter{\AdigraphCurrentNode}{#2}
+ \expandafter\expandafter\expandafter\AdigraphPathBuilder\expandafter\expandafter\expandafter{\expandafter\AdigraphLastParsedNode\expandafter}\expandafter{\AdigraphCurrentNode}{\units}{\AdigraphForwardPathColor}{\AdigraphBackwardPathColor}
}{%
% This is the first iteration
}
@@ -532,7 +531,7 @@
\ProcessList{#1}{\AdigraphFirstEdgeRenormalizer}
}
-\NewDocumentCommand{\AdigraphProcessPaths}{> { \SplitArgument{ 1 } {:} } m}{%
+\NewDocumentCommand{\AdigraphProcessPaths}{> { \SplitArgument{ 2 } {:} } m}{%
\stepcounter{AdigraphCurrentPathNumber}
\AdigraphBuildPath#1
}
@@ -670,7 +669,7 @@
\listcsgadd{Adigraph#1AugmentingPaths}{##1}
}
\RenewDocumentCommand{\AdigraphProcessAugmentingPathsList}{> { \SplitList{;} } m}{%
- \AdigraphProcessAugmentingPaths##1
+ \ProcessList{##1}{\AdigraphProcessAugmentingPaths}
}
\expandafter\NewDocumentCommand\expandafter{\csname #1\endcsname}{m G{}}{%
%