diff options
author | Karl Berry <karl@freefriends.org> | 2021-03-14 22:49:02 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-03-14 22:49:02 +0000 |
commit | 11cb80cef7eaad10df3ed09d6d5a50ad2c055881 (patch) | |
tree | d61dcff1e45fad3df683797a9fa17e91e2fb7bdd /Master/texmf-dist/doc/latex | |
parent | fd1e514f7290c40fb1e5c37994e7756c4d73348d (diff) |
sankey (14mar21)
git-svn-id: svn://tug.org/texlive/trunk@58349 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex')
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/README | 9 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey-doc.pdf | bin | 672933 -> 0 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey-doc.tex | 1599 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey-example-energy.tex | 129 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey-example1.tex | 73 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey-example2.tex | 188 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey-example3-variation.tex | 149 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey-example3.tex | 142 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey-example4.tex | 242 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/sankey/sankey.pdf | bin | 0 -> 942336 bytes |
10 files changed, 930 insertions, 1601 deletions
diff --git a/Master/texmf-dist/doc/latex/sankey/README b/Master/texmf-dist/doc/latex/sankey/README index ae6f9721be8..aa0a7f627ac 100644 --- a/Master/texmf-dist/doc/latex/sankey/README +++ b/Master/texmf-dist/doc/latex/sankey/README @@ -1,8 +1,11 @@ sankey ====== -LaTeX package to build Sankey diagram. +sankey – Draw Sankey diagrams with TikZ +This package provides macros and environment to build Sankey diagrams, +i.e. flow diagrams in which the width of the arrows is proportional to +the flow rate. license ======= @@ -11,6 +14,8 @@ Copyright (C) 2016-2021 by Paul Gaborit This file may be distributed and/or modified - 1. under the LaTeX Project Public License and/or + 1. under the LaTeX Project Public License v1.3 + + and/or 2. under the GNU Public License. diff --git a/Master/texmf-dist/doc/latex/sankey/sankey-doc.pdf b/Master/texmf-dist/doc/latex/sankey/sankey-doc.pdf Binary files differdeleted file mode 100644 index f8d77bd13b4..00000000000 --- a/Master/texmf-dist/doc/latex/sankey/sankey-doc.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/sankey/sankey-doc.tex b/Master/texmf-dist/doc/latex/sankey/sankey-doc.tex deleted file mode 100644 index 768e2d0be10..00000000000 --- a/Master/texmf-dist/doc/latex/sankey/sankey-doc.tex +++ /dev/null @@ -1,1599 +0,0 @@ -% -*- coding: utf-8; -*- - -% Copyright (C) 2016-2021 by Paul Gaborit -% -% This file may be distributed and/or modified -% -% 1. under the LaTeX Project Public License and/or -% -% 2. under the GNU Public License. - -\documentclass[a4paper,onecolumn,10pt]{article} -%\usepackage[rgb]{xcolor} -\usepackage[paper=a4paper,vmargin=1.5cm,hmargin=4cm]{geometry} -\usepackage[utf8]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{xcolor} -\usepackage[colorlinks]{hyperref} -\usepackage{fancyvrb} -\usepackage{listings} -\usepackage{enumitem} -\usepackage{pgfilecontents} -\usepackage{microtype} -\usepackage{bookmark} -\usepackage{cmap} -\usepackage{sankey} -\usepackage{siunitx} -\usepackage{mdframed} -\usepackage{footnote} -\usepackage{accsupp} -\usetikzlibrary{positioning,patterns.meta} -\usepackage[british]{babel} - -\colorlet{fondcode}{gray!5!white} -\colorlet{keyword}{blue!50!cyan!50!black} -\colorlet{comment}{red!75!black} - -\newcommand\emptyaccsupp[1]{\BeginAccSupp{ActualText={}}#1\EndAccSupp{}} - -\lstset{ - literate= - {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 - {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 - {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 - {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 - {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 - {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 - {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 - {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 - {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 - {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 - {€}{{\texteuro}}1 {£}{{\pounds}}1 {°}{{\degres}}1 - {’}{{\textquoteright}}1 {‘}{{\textquoteleft}}1 - {«}{{<<}}1 {»}{{>>}}1 - {—}{{---}}1 {−}{{$-$}}1 -} - -\lstset{ - fancyvrb=true, - %fvcmdparams=samepage, - escapechar=`, % pour introduire du latex dans un environnement verbatim - extendedchars=true, - fontadjust=true, - columns=fullflexible, % pour pouvoir copier/coller les chaines de caractères - flexiblecolumns=true, - % frame=leftline, - inputencoding=utf8, - keepspaces=true, % keeps spaces in text, code indentation - backgroundcolor=\color{fondcode}, - basicstyle=\mdseries\ttfamily, - keywordstyle=\color{keyword}\bfseries,% - stringstyle=\ttfamily\color{green!50!black},% - commentstyle=\color{comment}\itshape,% - emphstyle=\bfseries\color{red}, - numbersep=5pt, - %numbers=left, - numberstyle=\tiny\emptyaccsupp, - showstringspaces=false, - upquote=true, % pour pouvoir copier/coller le code avec des quotes - aboveskip=\parskip, - belowskip=\parskip, - framexleftmargin=1pt, - framexrightmargin=1pt, -} - -\lstdefinestyle{textsmall}{basicstyle=\color{black}\small\mdseries\ttfamily} -\lstdefinestyle{textfootnotesize}{basicstyle=\color{black}\footnotesize\mdseries\ttfamily} -\lstdefinestyle{textscriptsize}{basicstyle=\color{black}\scriptsize\mdseries\ttfamily} -\lstdefinestyle{texttiny}{basicstyle=\color{black}\tiny\mdseries\ttfamily} - -\lstdefinestyle{LaTeX}{ - language=[LaTeX]TeX, - %backgroundcolor=\color{latexbg}, - moretexcs={ - coordinate, - definecolor, - draw, - fill, - foreach, - hashband, - node, - sankeyadvance, - sankeydubins, - sankeyend, - sankeyend, - sankeyfork, - sankeynode, - sankeynodealias, - sankeynodeend, - sankeynodestart, - sankeyoutin, - sankeyset, - sankeystart, - sankeyturn, - sisetup, - tikzset, - turnandstop, - usepackage, - } -} -\lstdefinestyle{LaTeXsmall}{style=LaTeX,style=textsmall} -\lstdefinestyle{LaTeXfootnotesize}{style=LaTeX,style=textfootnotesize} -\lstdefinestyle{LaTeXscriptsize}{style=LaTeX,style=textscriptsize} -\lstdefinestyle{LaTeXtiny}{style=LaTeX,style=texttiny} - -\def\code{\lstinline[basicstyle=\mdseries\ttfamily\color{red!50!black}]} - -\edef\samplecodename{\jobname-code.vrb} - -\newcommand\constant[1]{\textcolor{violet}{\texttt{#1}}} -\newcommand\ARG[1]{\texttt{\{#1\}}} -\newcommand\OPTARG[1]{\textcolor{green!50!black}{\texttt{[#1]}}} -\newcommand\VAR[1]{\textit{\texttt{<#1>}}} -\newcommand\NOTE[1]{\leavevmode\marginpar{#1}} - -\makeatletter -\def\mynobreakpar{\par\nobreak\@afterheading} -\makeatother -\def\docprefix#1{\texttt{\textcolor{gray}{#1}}} -\def\sankeykeysprefix{/sankey} - -\newenvironment{sankeyoption}[5][]{% [prefix] key, val, default, initially - % \begingroup - \bgroup% - % - \def\path{#1}% - \def\key{#2}% - \def\val{#3}% - \def\default{#4}% - \def\initially{#5}% - %\setlength\parindent{\dimexpr.5\parindent\relax}% - % \vspace{.25\baselineskip plus .25\baselineskip minus 0mm} - \parfillskip 0pt plus 1fil% - \leavevmode% - \ttfamily% - \hspace*{-1cm}\textcolor{red!75!black}{\texttt{\docprefix{\ifdefempty{\path}{\sankeykeysprefix/}{\path/}}\key}}% - \ifdefempty{\val}{}{=\textit{\val}}% - \hfill - \ifdefempty{\default}{\null}{(default:\,\constant{\default})}% - \ifdefempty{\initially}{\null}{(initially:\,\constant{\initially})}% - \mynobreakpar\egroup% - \parskip=.5\baselineskip plus .25\baselineskip minus .25\baselineskip - \parfillskip=30pt plus 1fil - \itemize[topsep=0pt,partopsep=0pt,itemsep=0pt]\item[] -}{% - \enditemize% -} - -\newcommand\MACRO{\hspace*{-1cm}} - -\newlist{sankeyconstantsdesc}{description}{1} -\setlist[sankeyconstantsdesc]{align=right,labelindent=1.5em,labelsep=.5em,leftmargin=!,font=\normalfont} - -\newlength{\myparskip} -\setlength{\myparskip}{.75\baselineskip plus 8\baselineskip minus .25\baselineskip} -\usepackage[skip=\myparskip]{parskip} -%\setlength{\parskip}{\myparskip} -\newenvironment{miniblock}{% - \vspace{.5\parskip}% - \csname minipage*\endcsname[t]{1.0\linewidth}% - \setlength{\parskip}{\myparskip}% -}{% - \csname endminipage*\endcsname% -} - - -\makeatletter -\title{How to use the \texttt{sankey} package\\ to build Sankey diagrams\footnote{This file described version v\sankey@version.}} -\date{Released \sankey@date} -\author{Paul Gaborit\footnote{\href{mailto:paul.gaborit@gmail.com}{\texttt{paul.gaborit@gmail.com}}}} - -\hypersetup{ - pdftitle=How to use the sankey package to buid Sankey diagrams (v\sankey@version), - pdfauthor=Paul Gaborit, -} -\makeatother - - -\begin{document} -\maketitle - -\begin{abstract} - The \texttt{sankey} package provides macros and environments to build - \emph{Sankey diagrams}% - \footnote{\url{https://en.wikipedia.org/wiki/Sankey_diagram}} (or - \emph{flow diagram} in which the width of the arrows is proportional - to the flow rate). The idea cames out from - \href{https://tex.stackexchange.com/q/40159/14500}{this question} on - \href{https://tex.stackexchange.com/}{TeX.StackExchange}. - % -\end{abstract} - -{ - \setlength{\parskip}{0pt} - \tableofcontents - \listoffigures -} - -% ------------------------------------------------------------ -\section{Preamble} -% ------------------------------------------------------------ - -To use the \code{sankey} package, insert the following line in your preamble: - -\begin{lstlisting}[style=LaTeXsmall] -\usepackage{sankey} -\end{lstlisting} - -% ------------------------------------------------------------ -\section{The \texttt{sankeydiagram} environment} -% ------------------------------------------------------------ - -A \code{sankeydiagram} environment nested in a \code{tikzpicture} -environment activates the sankey macros: - -\begin{lstlisting}[style=LaTeXsmall] -\begin{tikzpicture} - \begin{sankeydiagram}[... options ...] - ... sankey macros ... - \end{sankeydiagram} -\end{tikzpicture} -\end{lstlisting} - -% ------------------------------------------------------------ -\section{Sankey diagram options} -% ------------------------------------------------------------ - -The \code{sankey} package uses \code{pgfkeys} to define options via -\emph{key=value} pairs. - -The options can be defined via the optional argument of the -\code{sankeydiagram} environment: - -\begin{lstlisting}[style=LaTeXsmall] -\begin{sankeydiagram}[debug=true] - \sankeynode{name=a,quantity=1,angle=0,at={0,0}} -\end{sankeydiagram} -\end{lstlisting} - -The options can also be modified via the \code{\sankeyset} macro: - -\begin{lstlisting}[style=LaTeXsmall] -\begin{sankeydiagram} - \sankeyset{debug=true} - \sankeynode{name=a,quantity=1,angle=0,at={0,0}} -\end{sankeydiagram} -\end{lstlisting} - -The options can be temporarily modified for a single macro: -\begin{lstlisting}[style=LaTeXsmall] -\begin{sankeydiagram} - \sankeynode[debug=true]{name=a,quantity=1,angle=0,at={0,0}} -\end{sankeydiagram} -\end{lstlisting} -% ------------------------------------------------------------ -\subsection{Keys to choose the scale} -% ------------------------------------------------------------ - -The scale or ratio of the Sankey diagram is the ratio between the % -\code{ratio length} and the \code{ratio quantity}. - -\begin{sankeyoption}{ratio quantity}{\VAR{number}}{}{10} - Quantity (in units of flow) to define ratio. The \VAR{number} can be - any math expression. -\end{sankeyoption} - -\begin{sankeyoption}{ratio length}{\VAR{distance}}{}{1cm} - Distance (a graphical distance) to define scale. -\end{sankeyoption} - -\begin{sankeyoption}{ratio}{\VAR{distance}/\VAR{number}}{}{1cm/10} - Fix the ratio to \VAR{distance}/\VAR{number}. -\end{sankeyoption} - -The initial ratio is 1\,cm/10 units. - - -\textbf{Note:} the \code{sankey} package uses the \code{xfp} package to -evaluate all math expressions that use quantities (in units of -flow). You can therefore use quantities of a very large or very small -order of magnitude. In contrast, for graphic distances, the sankey -package uses the \code{pgfmath} package (all calculations must not -exceed $\pm 16383.99999$). - -% ------------------------------------------------------------ -\subsection{Keys to define drawing parameters} -% ------------------------------------------------------------ - -\begin{sankeyoption}{minimum radius}{\VAR{distance}}{}{5mm} - The minimum radius used by \code{\sankeyturn} and - \code{\sankeydubins}. -\end{sankeyoption} - -\begin{sankeyoption}{outin steps}{\VAR{integer}}{}{10} - Number of steps used by the \code{\sankeyoutin} macro to simulate flow - lanes with constant width. -\end{sankeyoption} - -% ------------------------------------------------------------ -\subsection{Keys to choose drawing styles} -% ------------------------------------------------------------ - -\begin{sankeyoption}{fill/.style}{\VAR{style}}{}{{line width=0pt,fill=white}} - This TikZ style is used to \emph{fill} all sankey paths. -\end{sankeyoption} - -\begin{sankeyoption}{draw/.style}{\VAR{style}}{}{draw=black,line width=.4pt} - This TikZ style is used to \emph{draw} all sankey paths. -\end{sankeyoption} - -\begin{sankeyoption}{start style}{\VAR{style name}}{}{none} - There are three predefined \emph{start} styles: \constant{none}, - \constant{simple}, \constant{arrow}. -\end{sankeyoption} - -\begin{sankeyoption}{end style}{\VAR{style name}}{}{none} - There are three predefined \emph{end} styles: \constant{none}, - \constant{simple}, \constant{arrow}. -\end{sankeyoption} - -% ------------------------------------------------------------ -\subsection{Keys to define new \emph{start} and \emph{end} styles} -% ------------------------------------------------------------ - -\begin{sankeyoption}{new start style}{\{\VAR{name}\}\{\VAR{fill - path}\}\{\VAR{draw path}\}}{}{} - Define the new start style named \VAR{name} with its \VAR{fill - path} and its \VAR{draw path}. -\end{sankeyoption} - -\begin{sankeyoption}{new end style}{\{\VAR{name}\}\{\VAR{fill - path}\}\{\VAR{draw path}\}}{}{} - Define the new end style named \VAR{name} with its \VAR{fill - path} and its \VAR{draw path}. -\end{sankeyoption} - -\emph{Fill} and \emph{draw} paths are composed in a TikZ scope where -the origin is the current Sankey node center (and its name is -\code{\name}) and the coordinate system is rotated by its orientation. - -% ------------------------------------------------------------ -\subsection{The \emph{debug} key} -% ------------------------------------------------------------ - -\begin{sankeyoption}{debug}{\VAR{boolean}}{true}{false} - To debug a sankey diagram. -\end{sankeyoption} - -% ------------------------------------------------------------ -\section{Sankey nodes and flows} -% ------------------------------------------------------------ - -% ------------------------------------------------------------ -\subsection{Create Sankey nodes} -% ------------------------------------------------------------ - -% ------------------------------------------------------------ - -\begin{miniblock} -\MACRO\code{\sankeynode}\OPTARG{\VAR{options}}\ARG{\VAR{node parameters}} - -The \code{\sankeynode} macro defines a Sankey node. The \VAR{options} -can be any Sankey diagram keys. To define a Sankey node, you must -provide a \emph{name}, a \emph{quantity}, an \emph{angle} and a -\emph{position} as \VAR{node parameters}. - -\begin{sankeyoption}[/sankey/node parameters]{name}{\VAR{name}}{}{} - The \VAR{name} of the new Sankey node (and the associated TikZ node). -\end{sankeyoption} - -\begin{sankeyoption}[/sankey/node parameters]{quantity}{\VAR{quantity}}{}{} - The quantity (in flow unit) of the new Sankey node. The \VAR{quantity} - can be any math expression. -\end{sankeyoption} - -\begin{sankeyoption}[/sankey/node parameters]{angle}{\VAR{angle}}{}{} - The orientation of the flow (0 points to the right) of the new Sankey - node. -\end{sankeyoption} - -\begin{sankeyoption}[/sankey/node parameters]{at}{\VAR{at}}{}{} - The position of the new Sankey node (a TikZ coordinate \emph{without} - round brackets or parentheses). -\end{sankeyoption} - -\begin{sankeyoption}[/sankey/node parameters]{anchor}{\VAR{anchor}}{center}{center} - Specify the anchor of the Sankey node. Possible values are - \constant{center}, \constant{left} or \constant{right}. -\end{sankeyoption} - -\begin{sankeyoption}[/sankey/node parameters]{as}{\VAR{name}}{}{} - Copy the \emph{name}, the \emph{quantity}, the \emph{angle} and the - \emph{position} of the Sankey node named \VAR{name}. -\end{sankeyoption} - -A Sankey node is also a Tikz node but with only three anchors: -\code{left}, \code{center} and \code{right}. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[debug] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynode{name=a,quantity=10,angle=0,at={0,0}} - \sankeynode{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeynode{name=c,quantity=20,angle=-90,at={5,1},anchor=right} - - \foreach \nodename/\pos in {a/left,b/below left,c/above}{ - \foreach \ancname in {left,center,right}{ - \node[node font=\ttfamily\footnotesize,\pos=1mm of \nodename.\ancname, - inner sep=0pt,rotate=\sankeygetnodeorient{\nodename},anchor=east] - {\ancname\vphantom{g}}; - \fill[black] (\nodename.\ancname) circle(1pt); - } - } - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} -% ------------------------------------------------------------ - -\begin{miniblock} -\MACRO\code{\sankeynodestart}\OPTARG{\VAR{options}}\ARG{\VAR{node parameters}} - -The \code{\sankeynodestart} creates and fills/draws a starting Sankey node: - - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[start style=arrow,fill/.style={fill=orange!20}] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynodestart{name=a,quantity=10,angle=0,at={0,0}} - \sankeynodestart{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeynodestart{name=c,quantity=20,angle=-90,at={5,1},anchor=right} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} -% ------------------------------------------------------------ - - -\begin{miniblock} -\MACRO\code{\sankeynodeend}\OPTARG{\VAR{options}}\ARG{\VAR{node - parameters}} - -The \code{\sankeynodeend} creates -and fills/draws an ending Sankey node: - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[end style=simple,fill/.style={fill=orange!20}] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynodeend{name=a,quantity=10,angle=0,at={0,0}} - \sankeynodeend{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeynodeend{name=c,quantity=20,angle=-90,at={5,1},anchor=right} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\subsection{Retrieve informations from a Sankey node} - -\MACRO\code{\sankeygetnodeqty}\ARG{\VAR{node name}} - -The expandable command \code{\sankeygetnodeqty} returns the quantity -assigned to the Sankey node named \VAR{node name}. - -\MACRO\code{\sankeygetnodeorient}\ARG{\VAR{node name}} - -The expandable command \code{\sankeygetnodeorient} returns the angle -(orientation) assigned to the Sankey node named \VAR{node name}. - -% ------------------------------------------------------------ -\newpage -\subsection{Move nodes} -% ------------------------------------------------------------ - -The \code{\sankeyadvance} and \code{\sankeyturn} commands move a Sankey -node (and fill/draw a portion of the Sankey flow). Then the previous -position of the Sankey node is accessible via the \code{-old} suffix (if -you move the \code{a} node, its previous position is the \code{a-old} -node). - -\subsubsection{forward commands} - -\begin{miniblock} -\MACRO\code{\sankeyadvance}\OPTARG{\VAR{options}}\ARG{\VAR{node - name}}\ARG{\VAR{distance}} - -The \code{\sankeyadvance} moves the sankey node straight ahead and -fills/draws this portion of the sankey path. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[start style=arrow,fill/.style={fill=orange!20}] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynodestart{name=a,quantity=10,angle=0,at={0,0}} - \sankeyadvance{a}{1cm} - \sankeynode[debug]{as=a} - \sankeynode[debug]{as=a-old} - \sankeynodestart{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeyadvance{b}{1cm} - \sankeynodestart{name=c,quantity=10,angle=-90,at={5,1},anchor=right} - \sankeyadvance{c}{5mm} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\begin{miniblock} -\MACRO\code{\sankeyturn}\OPTARG{\VAR{options}}\ARG{\VAR{node - name}}\ARG{\VAR{angle}} - -The \code{\sankeyturn} macro moves the sankey node by turning to one -side or the other and fills/draws this portion of the sankey path. A -\emph{positive} \VAR{angle} turns left while a \emph{negative} -\VAR{angle} turns right. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[start style=arrow,fill/.style={fill=orange!20}] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynodestart{name=a,quantity=10,angle=0,at={0,0}} - \sankeyturn{a}{90} - \sankeynode[debug]{as=a} - \sankeynode[debug]{as=a-old} - \sankeynodestart{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeyturn[minimum radius=1cm]{b}{-45} - \sankeynodestart{name=c,quantity=10,angle=-90,at={5,1},anchor=right} - \sankeyturn{c}{180} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\subsubsection{backward commands} - -\begin{miniblock} -\MACRO\code{\sankeyadvance*}\OPTARG{\VAR{options}}\ARG{\VAR{node - name}}\ARG{\VAR{distance}} - -The \code{\sankeyadvance*} moves the sankey node straight back and -fills/draws this portion of the sankey path. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[end style=arrow,fill/.style={fill=orange!20}] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynodeend{name=a,quantity=10,angle=0,at={0,0}} - \sankeyadvance*{a}{1cm} - \sankeynode[debug]{as=a} - \sankeynode[debug]{as=a-old} - \sankeynodeend{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeyadvance*{b}{1cm} - \sankeynodeend{name=c,quantity=10,angle=-90,at={5,1},anchor=right} - \sankeyadvance*{c}{5mm} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\begin{miniblock} -\MACRO\code{\sankeyturn*}\OPTARG{\VAR{options}}\ARG{\VAR{node - name}}\ARG{\VAR{angle}} - -The \code{\sankeyturn*} macro moves the sankey node backwards by turning -right or left and fills/draws this portion of the sankey path. A -\emph{positive} \VAR{angle} turns left while a \emph{negative} -\VAR{angle} turns right. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[end style=simple,fill/.style={fill=orange!20}] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynodeend{name=a,quantity=10,angle=0,at={0,0}} - \sankeyturn*{a}{90} - \sankeynode[debug]{as=a} - \sankeynode[debug]{as=a-old} - \sankeynodeend{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeyturn*[minimum radius=1cm]{b}{-45} - \sankeynodeend{name=c,quantity=10,angle=-90,at={5,1},anchor=right} - \sankeyturn*{c}{180} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\subsection{Links between nodes} - -\begin{miniblock} - \MACRO\code{\sankeyoutin}\OPTARG{\VAR{options}}\ARG{\VAR{node - A}}\ARG{\VAR{node B}} - - The \code{\sankeyoutin} macro fills/draws a lane between \VAR{node A} - and \VAR{node B} using a Bézier curve with regular steps (10 steps by - default) to simulate constant width lane. - - The constant width and the minimum curvature are \emph{not} guaranted! -\end{miniblock} - -\begin{miniblock} - \MACRO\code{\sankeydubins}\OPTARG{\VAR{options}}\ARG{\VAR{node - A}}\ARG{\VAR{node B}} - - The \code{\sankeydubins} macro fills/draws a lane between \VAR{node A} - and \VAR{node B} using a Dubins - path\footnote{\url{https://en.wikipedia.org/wiki/Dubins_path}}. - - The constant width and the minimum curvature are guaranted. -\end{miniblock} - -\subsubsection{Comparison betwen \texttt{outin} and \texttt{dubins} - paths} - -\begin{miniblock} -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[start style=simple,end style=arrow] - \draw[gray!30] (0,-1) grid (10,3.5); - % - \sankeyset{fill/.style={fill=orange!20}} - \sankeynodestart{name=a,at={1,0},angle=0,quantity=5} - \sankeynodeend{name=b,at={5,3},angle=0,quantity=5} - \sankeyoutin{a}{b} - % - \sankeyset{fill/.style={fill=red!20}} - \sankeynodestart{name=a,at={3,0},angle=0,quantity=5} - \sankeynodeend{name=b,at={7,3},angle=0,quantity=5} - \sankeyoutin[outin steps=2]{a}{b} - % - \sankeyset{fill/.style={fill=lime!40}} - \sankeynodestart{name=a,at={5,0},angle=0,quantity=5} - \sankeynodeend{name=b,at={(9,3},angle=0,quantity=5} - \sankeydubins[minimum radius=5mm]{a}{b} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\begin{miniblock} -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[start style=simple,end style=arrow] - \draw[gray!30] (0,0) grid (8,4.5); - % - \sankeyset{fill/.style={fill=orange!20}} - \sankeynodestart{name=a,at={1,1},angle=0,quantity=5} - \sankeynodeend{name=b,at={3,4},angle=0,quantity=5} - \sankeyoutin{a}{b} - % - \sankeyset{fill/.style={fill=red!20}} - \sankeynodestart{name=a,at={3,1},angle=0,quantity=5} - \sankeynodeend{name=b,at={5,4},angle=0,quantity=5} - \sankeyoutin[outin steps=2]{a}{b} - % - \sankeyset{fill/.style={fill=lime!40}} - \sankeynodestart{name=a,at={5,1},angle=0,quantity=5} - \sankeynodeend{name=b,at={(7,4},angle=0,quantity=5} - \sankeydubins[minimum radius=5mm]{a}{b} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\begin{miniblock} -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[start style=simple,end style=arrow] - \draw[gray!30] (0,0) grid ((6,4.5); - % - \sankeyset{fill/.style={fill=orange!20}} - \sankeynodestart{name=a,at={1,1},angle=0,quantity=5} - \sankeynodeend{name=b,at={1,4},angle=0,quantity=5} - \sankeyoutin{a}{b} - % - \sankeyset{fill/.style={fill=red!20}} - \sankeynodestart{name=a,at={3,1},angle=0,quantity=5} - \sankeynodeend{name=b,at={3,4},angle=0,quantity=5} - \sankeyoutin[outin steps=2]{a}{b} - % - \sankeyset{fill/.style={fill=lime!40}} - \sankeynodestart{name=a,at={5,1},angle=0,quantity=5} - \sankeynodeend{name=b,at={(5,4},angle=0,quantity=5} - \sankeydubins[minimum radius=5mm]{a}{b} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\subsubsection{Examples of \texttt{dubins} paths} - -\begin{miniblock} -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[start style=simple,end style=arrow] - \draw[gray!30] (-1,-1) grid (10,2.5); - - \sankeyset{ - fill/.style={fill=lime!40}, - draw/.style={draw=green!50!black,line width=2pt}, - } - - \sankeynodestart{name=a,at={0,0},angle=0,quantity=5} - \sankeynodeend{name=b,at={0,2},angle=0,quantity=5} - \sankeydubins[minimum radius=2mm]{a}{b} - - \fill[green!50!black] (2,0) coordinate (c) circle(2pt); - \sankeynodestart{name=a,at={[shift={(c)}]90:5mm},angle=0,quantity=5} - \sankeynodeend{name=b,at={[shift={(c)}]150:5mm},angle=60,quantity=5} - \sankeydubins[minimum radius=2.5mm]{a}{b} - - \sankeynodestart{name=a,at={3.5,0},angle=0,quantity=5} - \sankeynodeend{name=b,at={3.5,.75},angle=-180,quantity=5} - \sankeydubins[minimum radius=5mm]{a}{b} - - \sankeynodestart{name=a,at={7,1},angle=0,quantity=5} - \sankeynodeend{name=b,at={7,1.75},angle=0,quantity=5} - \sankeydubins[minimum radius=2.5mm]{a}{b} - - \sankeynodestart{name=a,at={9,0},angle=0,quantity=5} - \sankeynodeend{name=b,at={9,2},angle=180,quantity=5} - \sankeydubins[minimum radius=2.5mm]{a}{b} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\subsection{Pure filling/drawing macros} - -\begin{miniblock} -\MACRO\code{\sankeystart}\OPTARG{\VAR{options}}\ARG{\VAR{name}} - -The \code{\sankeystart} fills/draws a starting extremity attached to the -preexistent Sankey node \VAR{name}: - - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram} - [start style=arrow,fill/.style={fill=cyan!20},draw/.style={draw=blue}] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynode{name=a,quantity=10,angle=0,at={0,0}} - \sankeystart{a} - \sankeynode{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeystart{b} - \sankeynode{name=c,quantity=20,angle=-90,at={5,1},anchor=right} - \sankeystart{c} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} -% ------------------------------------------------------------ - - -\begin{miniblock} - \MACRO\code{\sankeyend}\OPTARG{\VAR{options}}\ARG{\VAR{name}} - - The \code{\sankeyend} fills/draws an ending extremity attached to the - preexistent Sankey node \VAR{name}: - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram} - [end style=simple,fill/.style={fill=cyan!20},draw/.style={draw=blue}] - \draw[gray!30] (-1,-1) grid (8,2); - \sankeynode{name=a,quantity=10,angle=0,at={0,0}} - \sankeyend{a} - \sankeynode{name=b,quantity=5,angle=45,at={2,1},anchor=left} - \sankeyend{b} - \sankeynode{name=c,quantity=20,angle=-90,at={5,1},anchor=right} - \sankeyend{c} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\subsection{Forked node} - -\begin{miniblock} - \MACRO\code{\sankeyfork}\OPTARG{\VAR{options}}\ARG{\VAR{node}}\ARG{\VAR{quantity/name pairs}} - - The \code{\sankeyfork} macro splits a Sankey node in a list of new - Sankey nodes. The \VAR{quantity/name pairs} is a comma separated list - of \emph{quantity/name} pairs. The sum of all quantities \emph{must} - be equal to the quantity of the node to fork. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram}[debug] - \draw[gray!30] (-3,-2) grid (3,1); - \sankeynode{name=a,quantity=50,angle=-80,at={0,0}} - \sankeyfork{a}{30/b,10/c,10/d} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \begin{sankeydiagram} - \sankeyset{ - start style=arrow,end style=arrow, - fill/.style={fill=yellow!10,line width=0pt,draw=yellow!10}, - } - \draw[gray!30] (-4,-3) grid (4,4); - \sankeynode{name=a,quantity=40,angle=-90,at={0,0}} - \sankeyfork{a}{25/b,10/c,5/d} - \sankeyturn*{b}{90} - \sankeyturn*[minimum radius=2cm]{c}{-45} - \sankeyturn*[minimum radius=2cm]{c}{45} - \sankeyturn*[minimum radius=5mm]{d}{-90} - \sankeyadvance{a}{2cm} - \foreach \nodename in {b,c,d}{ - \sankeystart{\nodename} - } - \sankeyend{a} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -{\centering\input{\samplecodename}\par} -\end{miniblock} - -\section{Miscellaneous} - -\subsection{The \texttt{debug} layer} - -The \code{debug} option key uses the \code{sankeydebug} layer to draw -above the \code{main} TikZ layer (via \code{\pgfsetlayers}, the -\code{sankey} package installs four layers: \code{background}, -\code{main}, \code{foreground}, \code{sankeydebug}). - -The four following styles define how to display debug informations: - - -\begin{lstlisting}[style=LaTeXsmall] -\sankeyset{ - % debug color used by all debug macros - debug color/.style={/utils/exec={\colorlet{debug color}{#1}}}, - debug color=red!75!black, - % debug line between left and right anchors - debug line/.style={draw=debug color,|-|}, - % debug line between center and label - debug normal/.style={draw=debug color}, - % debug node label - debug label/.style={ - draw, - font=\ttfamily\tiny, - text=debug color,text opacity=1, - inner sep=.1em, - fill=white,fill opacity=1, - rounded corners=.1em, - }, -} -\end{lstlisting} - -\subsection{The \texttt{dubins} TikZ library} - -The \code{sankey} package uses the \code{dubins} TikZ library (the -\code{tikzlibrarydubins.code.tex} file) to compute Dubins paths. The -documentation for this library does not yet exist. - -\subsection{How to duplicate a Sankey node} - -\MACRO\code{\sankeynodealias}\ARG{\VAR{origname}}\ARG{\VAR{clonename}} - -The \code{\sankeynodealias} macro clones the Sankey node named -\VAR{origname} into the Sankey node named \VAR{clonename}. - -So, you can clone a Sankey node via two methods: - -\begin{lstlisting}[style=LaTeXsmall] -\sankeynode{name=a,quantity=10,angle=0,at={0,0}} -\sankeynode{as=a,name=b} -\end{lstlisting} - -\begin{lstlisting}[style=LaTeXsmall] -\sankeynode{name=a,quantity=10,angle=0,at={0,0}} -\sankeynodealias{a}{b} -\end{lstlisting} - -\subsection{How to define new start and end styles} - -Here are the definitions of the \code{arrow} styles: - -\begin{lstlisting}[style=LaTeXsmall] -\sankeyset{ - % arrow style - new start style={arrow}{ - (\name.left) -- ++(-10pt,0) - -- ([xshift=-10pt/6]\name.center) - -- ([xshift=-10pt]\name.right) - -- (\name.right) -- cycle - }{ - (\name.left) -- ++(-10pt,0) - -- ([xshift=-10pt/6]\name.center) - -- ([xshift=-10pt]\name.right) - -- (\name.right) - }, - new end style={arrow}{ - (\name.left) -- ([yshift=1mm]\name.left) - -- ([xshift=10pt]\name.center) - -- ([yshift=-1mm]\name.right) -- (\name.right) -- cycle - }{ - (\name.left) -- ([yshift=1mm]\name.left) - -- ([xshift=10pt]\name.center) - -- ([yshift=-1mm]\name.right) -- (\name.right) - }, -} -\end{lstlisting} - -\section{History} - -\begin{itemize} -\item[v2.0] (2021/01/27) - \begin{itemize} - \item First public version (on CTAN). - \end{itemize} -\item[v1.0] (2016/03/06) - \begin{itemize} - \item First version. - \end{itemize} -\end{itemize} - -\clearpage -\section{Examples} - -\subsection{Simple example} - -See figure~\ref{fig:simple-example}. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \colorlet{cold}[rgb]{cyan!75!blue!50!white} - \colorlet{hot}[rgb]{red!50!orange!75!white} - \begin{sankeydiagram} - \sankeyset{ - ratio=90pt/6, - minimum radius=15pt, - start style=simple, - end style=simple, - % debug, - draw/.style={ - draw=blue!50!cyan, - line width=1pt, - line cap=round,line join=round, - }, - cold/.style={ - fill/.style={ - draw=cold, - line width=0pt, - fill=cold, - }, - }, - cold to hot/.style={ - fill/.style={ - fill=none, - top color=cold, - bottom color=hot, - middle color=yellow, - }, - }, - hot/.style={ - fill/.style={ - draw=hot, - line width=0pt, - fill=hot, - }, - }, - } - - \sankeyset{cold} - \sankeynodestart{name=p0,at={0,100},angle=-90,quantity=6} - \sankeyadvance{p0}{50pt} - - \sankeyfork{p0}{3/p1,3/p2} - - \sankeyturn{p1}{90} - \sankeyadvance{p1}{20pt} - - \sankeyadvance{p2}{60pt} - - \sankeyfork{p2}{2/p3,1/p4} - - \sankeyturn{p3}{90} - \sankeyadvance{p3}{50pt} - - \sankeyfork{p3}{1/p5,1/p6} - - \sankeyadvance{p5}{70pt} - - \sankeyfork{p1}{1/p7,1/p8,1/p9} - \sankeyadvance{p7}{50pt} - \sankeyadvance{p9}{50pt} - - \sankeyadvance{p4}{40pt} - \sankeyturn{p4}{90} - \sankeyadvance{p4}{65pt} - - \sankeyadvance{p7}{40pt} - - \sankeynode{name=p11,at={[shift={(50pt,-15pt)}]p7},angle=0,quantity=3} - \sankeyfork{p11}{1/p7a,1/p9a,1/p5a} - \sankeyoutin{p7}{p7a} - \sankeyoutin{p9}{p9a} - \sankeyoutin{p5}{p5a} - \sankeyadvance{p11}{30pt} - \sankeyend{p11} - - \sankeyturn{p8}{-90} - \sankeyturn{p6}{-90} - \sankeyturn{p4}{-90} - - \sankeyset{hot} - - \sankeyadvance[cold to hot]{p8}{40pt} - - \sankeynode{name=p10,at={[shift={(-15pt,-60pt)}]p8},angle=-90,quantity=3} - \sankeyfork{p10}{1/p8a,1/p6a,1/p4a} - \sankeyoutin[cold to hot]{p4}{p4a} - \sankeyoutin[cold to hot]{p6}{p6a} - \sankeyoutin{p8}{p8a} - \sankeyadvance{p10}{30pt} - \sankeyend{p10} - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -\begin{figure}[b!] - \centering - \input{\samplecodename} - \caption{Simple example} - \label{fig:simple-example} -\end{figure} -\clearpage -\subsection{Example from question on TeX.se} - -This example cames from -\href{https://tex.stackexchange.com/q/40159/14500}{this question} on -\href{https://tex.stackexchange.com/}{TeX.StackExchange}. - -See figure~\ref{fig:texse-example}. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - \renewcommand*\sfdefault{txss} - - \begin{sankeydiagram} - - \sankeyset{ - ratio=4cm/524.3, - minimum radius=3mm, - start style=arrow, - end style=arrow, - % debug, - fill/.style={ - line width=0pt, - fill=cyan!50!blue!50!black, - draw=cyan!50!blue!50!black, - }, - draw/.style={draw=none}, - } - - \sankeynodestart{name=B,at={-.5,0},angle=-90,quantity=7.2} - \coordinate[below=1mm of B.center] (B label); - \sankeyadvance{B}{5mm} - \sankeynodestart{name=GI,at={1,0},angle=-90,quantity=137.3} - \coordinate[below=1mm of GI.center] (GI label); - \sankeyadvance{GI}{5mm} - \sankeynodestart{name=I,at={4,0},angle=-90,quantity=397.8} - \coordinate[below=1mm of I.center] (I label); - \sankeynode{name=EI,at={2.86,-3},angle=-90,quantity=542.3} - \sankeyfork{EI}{397.8/Ia,137.3/GIa,7.2/Ba} - \sankeydubins[minimum radius=1.2cm]{I}{Ia} - \sankeyoutin{GI}{GIa} - \sankeyoutin{B}{Ba} - \sankeyadvance{EI}{5mm} - \coordinate (EI label) at (EI); - \sankeyadvance{EI}{5mm} - \sankeyfork{EI}{63.1/EB,479.2/P} - - \sankeyturn{EB}{90} - \sankeyadvance{EB}{4cm} - \coordinate (EB label) at ($(EB)!.5!(EB-old)$); - \sankeyend{EB} - - \sankeyadvance{P}{10mm} - \coordinate (P label) at (P); - \sankeyadvance{P}{5mm} - - \sankeyfork{P}{33.5/NV,445.7/P} - - { - \colorlet{NV color}{cyan!80!lime!50!gray} - \sankeyset{fill/.append style={fill=NV color,draw=NV color}} - \sankeyturn{NV}{90} - \sankeynode{as=NV,name=NV2,at=NV -| EB} - \sankeyoutin{NV}{NV2} - \coordinate (NV label) at (NV -| EB label); - \sankeyend{NV2} - } - - \sankeyadvance{P}{10mm} - \sankeyfork{P}{118.1/U,327.6/P} - - { - \sankeyset{ - fill/.style={fill=orange!70!gray!50,draw=orange!70!gray!50} - } - \sankeyturn{U}{90} - \sankeynode{as=U,name=U2,at=U -| EB} - \sankeyoutin{U}{U2} - \coordinate (U label) at (U -| EB label); - \sankeyend{U2} - } - - \sankeyadvance{P}{10mm} - - \sankeyfork{P}{327.2/P,0.4/SD} - - { - \sankeyturn{SD}{-90} - \sankeyadvance{SD}{15mm} - \coordinate (SD label) at (SD); - \sankeyadvance{SD}{15mm} - \sankeyend{SD} - } - - \sankeyadvance{P}{8mm} - \sankeyfork{P}{18.8/VE,308.4/E} - - { - \sankeyset{fill/.append style={orange!70!gray!30}} - \sankeyturn{VE}{90} - \sankeynode{as=VE,name=VE2,at=VE -| EB} - \sankeyoutin{VE}{VE2} - \coordinate (VE label) at (VE -| EB label); - \sankeyend{VE2} - } - - \sankeyadvance{E}{8mm} - \coordinate (E label) at (E); - \sankeyadvance{E}{20mm} - - \sankeyfork{E}{135.1/H+GHD,87.2/V,86.1/In} - - \sankeyturn{In}{-90} - \sankeyadvance{In}{10mm} - \sankeyturn{In}{90} - \sankeyadvance{In}{5mm} - \coordinate (In label) at (In); - \sankeyadvance{In}{10mm} - \sankeyend{In} - - \sankeynode{as=V,name=V2,at=V|-In label} - \sankeyoutin{V}{V2} - \coordinate (V label) at (V2); - \sankeyadvance{V2}{10mm} - \sankeyend{V2} - - \sankeyturn{H+GHD}{90} - \sankeyadvance{H+GHD}{5mm} - \sankeyfork{H+GHD}{47.0/GHD,88.1/H} - - \sankeyturn{H}{-90} - \sankeynode{as=H,name=H2,at=H|-In label} - \sankeyoutin{H}{H2} - \coordinate (H label) at (H2); - \sankeyadvance{H2}{10mm} - \sankeyend{H2} - - \sankeyadvance{GHD}{30mm} - \sankeyturn{GHD}{-90} - \sankeynode{as=GHD,name=GHD2,at=GHD|-In label} - \sankeyoutin{GHD}{GHD2} - \coordinate (GHD label) at (GHD2); - \sankeyadvance{GHD2}{10mm} - \sankeyend{GHD2} - \end{sankeydiagram} - - % labels - \tikzset{ - label/.style={ - fill=white,fill opacity=.8,text opacity=1, - inner sep=1mm, - text=cyan!50!blue!50!black, - inner xsep=2mm, - font=\sffamily\bfseries\footnotesize, - align=center, - }, - } - \node[label,anchor=north] (B label) at (B label) {7.2}; - \node[label,left=1mm of B label] {Bestands-\\entnahme}; - \node[label,anchor=north] at (GI label) {137.3}; - \node[label,above=5mm of GI label] {Gewinnung\\im Inland}; - \node[label,anchor=north] at (I label) {397.8}; - \node[label,above=5mm of I label] {Import}; - - \node[label] at (EI label) {542.3\\Energieaufkommen im Inland}; - - \node[label,anchor=center] (EB label) at (EB label) {63.1}; - \node[label,above=1mm of EB label] {Export und\\Bunkerung}; - - \node[label] at (P label) {479.2\\Primärenergieverbrauch}; - - \node[label,anchor=center] (NV label) at (NV label) {33.5}; - \node[label,above=0mm of NV label] {Nichtenergetischer Verbrauch}; - - \node[label,anchor=center] (U label) at (U label) {118.1}; - \node[label,below=3mm of U label] {Umwandlungsverluste}; - - \node[label,anchor=center] (SD label) at (SD label) {0.4}; - \node[label,above=0mm of SD label] {Statistische\\Differenzen}; - - \node[label,anchor=center] (VE label) at (VE label) {18.8}; - \node[label,below=0mm of VE label] {Verbrauch in den\\Energiesktoren}; - - \node[label,anchor=north] (E label) at (E label) - {308.4\\Endenergieverbrauch}; - - \node[label,anchor=north] (In label) at (In label) {86.1}; - \node[label,anchor=north,below=1cm of In label] {Industrie}; - - \node[label,anchor=north] (V label) at (V label) {87.2}; - \node[label,anchor=north,below=1cm of V label] {Verkehr}; - - \node[label,anchor=north] (H label) at (H label) {88.1}; - \node[label,anchor=north,below=1cm of H label] {Haushalte}; - - \node[label,anchor=north] (GHD label) at (GHD label) {47.0}; - \node[label,anchor=north,below=1cm of GHD label] - {Gewerbe, Handel\\Diensleistungen}; -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[style=LaTeXsmall]{\samplecodename} -% -\begin{figure} - \centering - %\rule{\linewidth}{1pt}\\ - \input{\samplecodename} - \caption{Example from TeX.se question} - \label{fig:texse-example} -\end{figure} - -\clearpage -\subsection{Very nice example -- Nadieh Bremer creation} - -Graphic designer Nadieh Bremer created this very nice Sankey -diagram\footnote{\url{https://www.visualcinnamon.com/portfolio/adyen-report-2019/}} -for Adyen's second half 2018 report to shareholders. It is coded here -with her kind permission. - -You can change the data values between lines 28 and 53. - -See figure~\ref{fig:nice-example}. - -\begin{filecontents*}{\samplecodename} -\begin{tikzpicture} - % - \renewcommand*\sfdefault{txss} - \sffamily - \sisetup{ - detect-all=true, - group-separator={,}, - group-minimum-digits=4, - } - % storage of labels - \newcommand\LabSet[2]{% none name, label - \expandafter\edef\csname #1Lab\endcsname{#2}} - \newcommand\Lab[1]{% node name - \csname #1Lab\endcsname} - % storage of quantities - \newcommand\QtySet[2]{% node name, quantity - \expandafter\edef\csname #1Qty\endcsname{\fpeval{#2}}} - \newcommand\Qty[1]{% node name - \csname #1Qty\endcsname} - % all nodes with their name, label and quantity - \sankeyset{ - def data/.code args={#1/#2/#3}{% node name/label/values - \LabSet{#1}{#2} - \QtySet{#1}{#3} - \typeout{#1: \Qty{#1}€ (\Lab{#1})} - }, - def data/.list={ - {Pf/Processing\\fees/71713}, - {Sog/Sales of\\good/4547}, - {Sf/Settlement\\fees/842075}, - {Os/Other\\services/37532}, - {R/Revenues/\Qty{Pf}+\Qty{Sog}+\Qty{Sf}+\Qty{Os}}, - {Coi/Cost of Inventory/5151}, - {Ciffi/Cost insecure from financial institutions/758234}, - {Nr/Net revenue/\Qty{R}-\Qty{Coi}-\Qty{Ciffi}}, - {Aadotaifa/Amortization and\\depreciation of tangible and\\% - intangible fixed assets/4688}, - {Ssapc/Social securities and\\pension costs/7860}, - {Was/Wages and salaries/35627}, - {Ooe/Other operating expenses/37346}, - {Nr2/-/\Qty{Nr}-\Qty{Aadotaifa}-\Qty{Ssapc}-\Qty{Was}-\Qty{Ooe}}, - {Oi/Other income/47}, - {Ibiiieait/Income before interest income,\\interest expense and % - income taxes/\Qty{Nr2}+\Qty{Oi}}, - {Fe/Finance expense/561}, - {Ofr/Other financial results/2533}, - {Ibiiieait2/-/\Qty{Ibiiieait}-\Qty{Fe}-\Qty{Ofr}}, - {Fi/Finance income/204}, - {Ibit/Income before income taxes/\Qty{Ibiiieait2}+\Qty{Fi}}, - {It/Income taxes/21134}, - {Niftp/Net income for the period/\Qty{Ibit}-\Qty{It}}, - {Octa/Other currency\\translation adjustments/785}, - {Tci/Total comprehensive income/\Qty{Niftp}+\Qty{Octa}} - }, - } - - \definecolor{mygreen}{RGB}{9,192,82} - \tikzset{ - cost node/.style 2 args={ - overlay, - align=flush center, - node font=\footnotesize\sffamily\bfseries, - inner sep=0, - node contents={% - {\mdseries€\,\num{#1}}\\% - #2\vphantom{g}% - }, - }, - white hash/.style={ - draw=none,fill=none, - pattern={Lines[angle=60,line width=2pt,distance=4pt]}, - pattern color=white, - }, - line sep/.style={draw=white,line width=1pt}, - left label/.style={left=#1,align=flush right,anchor=north east}, - right label/.style={right=#1,align=flush left}, - right label hashed/.style={ - right=1mm of $(#1.left)!.5!(#1-old.left)$,align=flush left, - }, - left label hashed/.style={ - left=1mm of $(#1.right)!.5!(#1-old.right)$,align=flush right, - }, - } - - \newcommand\turnandstop[1]{ - \sankeyturn[green to greenwhite]{#1}{-90} - \sankeynode{as=#1,name=#1-e,at={#1 -| Coi}} - \sankeyoutin[greenwhite to white]{#1}{#1-e} - \node[cost node={\Qty{#1}}{\Lab{#1}},left label={1mm of #1-e.right}]; - } - - \begin{sankeydiagram} - \sankeyset{ - ratio=28em/1000000, - minimum radius=2cm, - start style=none, - % default fill and draw styles - fill/.style={ - line width=0pt, - fill=mygreen, - }, - draw/.style={draw=none}, - % specific fill and draw styles - green to greenwhite/.style={ - fill/.style={ - line width=0pt, - right color=mygreen, - left color=mygreen!20!white, - } - }, - greenwhite to white/.style={ - fill/.style={ - line width=0pt, - right color=mygreen!20!white, - left color=mygreen!5!white, - } - }, - dashed/.style={draw/.style={draw=mygreen,dashed}}, - % debug, - } - - \coordinate (top) at (0,2em); - - \sankeynodestart{name=Pf,quantity=\Qty{Pf}, - at={0,0},angle=-90} - \node[cost node={\Qty{Pf}}{\Lab{Pf}},above=.5em of Pf.center]; - - \sankeynodestart{name=Sog,quantity=\Qty{Sog}, - at={[xshift=4em]Pf.left},angle=-90,anchor=right} - \node[cost node={\Qty{Sog}}{\Lab{Sog}},above=.5em of Sog.center]; - - \sankeynodestart{name=Sf,quantity=\Qty{Sf}, - at={[xshift=2em]Sog.left},angle=-90,anchor=right} - \node[cost node={\Qty{Sf}}{\Lab{Sf}},above=.5em of Sf.center]; - - \sankeynodestart{name=Os,quantity=\Qty{Os}, - at={[xshift=2em]Sf.left},angle=-90,anchor=right} - \node[cost node={\Qty{Os}}{\Lab{Os}},above=.5em of Os.center]; - - \sankeynode{name=R,quantity=\Qty{R}, - at={[yshift=-10em]Sf.center},angle=-90} - \sankeyfork{R}{\Qty{Os}/Os-a,\Qty{Sf}/Sf-a,\Qty{Sog}/Sog-a,\Qty{Pf}/Pf-a} - - \foreach \nodename in {Pf,Sog,Sf,Os}{ - \sankeyoutin[fill/.style={top color=white,bottom color=mygreen}] - {\nodename}{\nodename-a} - } - - \sankeyadvance{R}{1em} - \node[cost node={\Qty{R}}{\Lab{R}},right label hashed=R]; - - \sankeyfork{R}{\Qty{Ciffi}/Ciffi,\Qty{Nr}/Nr,\Qty{Coi}/Coi} - - \sankeyturn[minimum radius=1.cm]{Ciffi}{90} - \node[cost node={\Qty{Ciffi}}{\Lab{Ciffi}}, - at={([shift={(1mm,0)}]Ciffi.center)},rotate=-90, - anchor=south,align=flush left,node font=\scriptsize\sffamily\bfseries]; - - \sankeyturn[green to greenwhite]{Coi}{-90} - \sankeyadvance[greenwhite to white]{Coi}{1em} - \node[cost node={\Qty{Coi}}{\Lab{Coi}}, - left={1mm of [yshift=.75ex]Coi.left}, - align=flush right,anchor=north east,overlay]; - - \sankeyadvance{Nr}{9em} - \sankeyadvance{Nr}{1em} - \node[cost node={\Qty{Nr}}{\Lab{Nr}}, - left label hashed=Nr,node font=\large\sffamily\bfseries]; - - \sankeyfork{Nr}{\Qty{Nr2}/Nr2,\Qty{Ooe}/Ooe, - \Qty{Was}/Was,\Qty{Ssapc}/Ssapc,\Qty{Aadotaifa}/Aadotaifa} - - \turnandstop{Aadotaifa} - - \sankeyadvance{Ssapc}{5em} - \turnandstop{Ssapc} - - \sankeyadvance{Was}{9em} - \turnandstop{Was} - - \sankeyadvance{Ooe}{12em} - \turnandstop{Ooe} - - \sankeyadvance{Nr2}{15em} - \sankeynode{name=Ibiiieait,quantity=\Qty{Ibiiieait}, - angle=-90,anchor=right,at={Nr2.right}} - \sankeyfork{Ibiiieait}{\Qty{Oi}/Oi,\Qty{Nr2}/Nr2-e} - - \sankeyturn*[minimum radius=1cm,dashed]{Oi}{90} - \node[cost node={\Qty{Oi}}{\Lab{Oi}},right label=1mm of Oi.left]; - - \sankeyadvance{Ibiiieait}{1em} - \node[cost node={\Qty{Ibiiieait}}{\Lab{Ibiiieait}}, - right label hashed=Ibiiieait]; - - \sankeyfork{Ibiiieait} - {\Qty{Ibiiieait2}/Ibiiieait2,\Qty{Ofr}/Ofr,\Qty{Fe}/Fe} - - \turnandstop{Fe} - - \sankeyadvance{Ofr}{3em} - \turnandstop{Ofr} - - \sankeyadvance{Ibiiieait2}{6em} - \sankeynode{name=Ibit,quantity={\Qty{Ibiiieait2}+\Qty{Fi}}, - angle=-90,anchor=right,at={Ibiiieait2.right}} - \sankeyfork{Ibit}{\Qty{Fi}/Fi,\Qty{Ibiiieait2}/Ibiiieait2-e} - - \sankeyturn*[minimum radius=1cm,dashed]{Fi}{90} - \node[cost node={\Qty{Fi}}{\Lab{Fi}},right label=1mm of Fi.left]; - - \sankeyadvance{Ibit}{1em} - \node[cost node={\Qty{Ibit}}{\Lab{Ibit}},right label hashed=Ibit]; - - \sankeyfork{Ibit}{\Qty{Niftp}/Niftp,\Qty{It}/It} - - \turnandstop{It} - - \sankeyadvance{Niftp}{6em} - - \sankeyadvance{Niftp}{1em} - \node[cost node={\Qty{Niftp}}{\Lab{Niftp}},right label hashed=Niftp]; - - \sankeynode{name=Tci,quantity=\Qty{Niftp}+\Qty{Octa}, - angle=-90,anchor=right,at={[yshift=-6em]Niftp.right}} - \sankeyfork{Tci}{\Qty{Octa}/Octa,\Qty{Niftp}/Niftp-e} - \sankeyoutin{Niftp}{Niftp-e} - - \sankeyturn*[minimum radius=1cm]{Octa}{90} - \node[cost node={\Qty{Octa}}{\Lab{Octa}},right label=1mm of Octa.left]; - - \sankeyadvance{Tci}{1em} - \node[cost node={\Qty{Tci}}{\Lab{Tci}},right label hashed=Tci]; - - \newcommand\hashband[1]{ - \draw[line sep] (#1-old.right) -- (#1-old.left); - \draw[line sep] (#1.right) -- (#1.left); - \path[white hash] (#1-old.right) rectangle (#1.left); - } - - \foreach \nodename in {R,Nr,Nr,Ibiiieait,Ibit,Niftp,Tci}{ - \hashband{\nodename} - } - - \end{sankeydiagram} -\end{tikzpicture} -\end{filecontents*} -% -\lstinputlisting[numbers=left,style=LaTeXsmall]{\samplecodename} -% -\begin{figure} - \centering - \input{\samplecodename} - \caption{Very nice example -- Nadieh Bremer's creation} - (from - \href{https://www.visualcinnamon.com/portfolio/adyen-report-2019/}{Adyen's - Shareholder Report}) - \label{fig:nice-example} -\end{figure} -\end{document} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: t -%%% End: diff --git a/Master/texmf-dist/doc/latex/sankey/sankey-example-energy.tex b/Master/texmf-dist/doc/latex/sankey/sankey-example-energy.tex new file mode 100644 index 00000000000..2e500b10d93 --- /dev/null +++ b/Master/texmf-dist/doc/latex/sankey/sankey-example-energy.tex @@ -0,0 +1,129 @@ +\begin{tikzpicture} + % font choice + \renewcommand\rmdefault{txr}\rmfamily\footnotesize + \sisetup{ + round-mode=places, + round-precision=1, + add-decimal-zero, + round-integer-to-decimal, + } + \begin{sankeydiagram} + \colorlet{energy}{blue!30!cyan!80!black} + \colorlet{lost energy}{red!50!orange!90!black} + \sankeyset{ + ratio=13em/100, + minimum radius=1em, + start style=simple,end style=simple, + draw/.style={draw=none,line width=0}, + energy/.style={ + fill/.style={ + draw=energy, + line width=0, + fill=energy, + } + }, + lost energy/.style={ + fill/.style={ + draw=lost energy, + line width=0, + fill=lost energy, + } + } + } + + \newcommand\abovelabel[2]{ % valname, label + \node[anchor=south east,align=center,inner xsep=0] at (#1.left) {#2}; + } + + \newcommand\energylabel[1]{ % valname + \node[anchor=north east,text=energy,inner xsep=0] at (#1.right) + {\num{\sankeygetnodeqty{#1}}}; + } + + \newcommand\lostenergylabel[2]{ % valname, label + \node[anchor=north,text=lost energy] at ([yshift=-2.5mm]#1.center) + (value) + {\num{\sankeygetnodeqty{#1}}}; + \node[anchor=north,inner sep=0,align=center] at (value.south) {#2}; + } + + \newcommand\lostenergylabelbottom[2]{ % valname, label + \draw[draw=lost energy,dashed,thick] + ([yshift=-3mm]#1.center) coordinate (#1) -- ([yshift=-3mm]#1.center); + \lostenergylabel{#1}{#2} + } + + \sankeynode{name=Co,quantity=100.0} + \path (Co.right) ++(0,-7mm) coordinate (c); + + \newcommand\turnandstop[2]{ % valname, label + \begingroup + \sankeyset{lost energy} + \sankeyturnright{#1}{90} + \sankeynode{as=#1,name=#1-stop,at={#1 |- c}} + \sankeyoutin{#1}{#1-stop} + \sankeynode{as=#1-stop,name=#1} + \sankeyend{#1} + \lostenergylabel{#1}{#2} + \endgroup + } + + \newcommand\turnandstopbottom[2]{ % valname, label + \begingroup + \sankeyset{lost energy} + \sankeyturnright{#1}{90} + \sankeynode{as=#1,name=#1-stop,at={#1 |- c}} + \sankeyoutin{#1}{#1-stop} + \sankeynode{as=#1-stop,name=#1} + \sankeyend{#1} + \lostenergylabelbottom{#1}{#2} + \endgroup + } + + \def\hshift{6.25em} + + \sankeyadvance[energy]{Co}{1.2*\hshift} + \abovelabel{Co}{\textbf{Coal}\\(Primary energy)} + \energylabel{Co} + \sankeyfork{Co}{35/El1,65/Pg} + \turnandstop{Pg}{Power generation} + + \sankeyadvance[energy]{El1}{1.8*\hshift} + \abovelabel{El1}{\textbf{Electricity}\\(Secondary energy)} + \energylabel{El1} + \sankeyfork{El1}{33.5/El2,1.5/Tr} + \turnandstopbottom{Tr}{Transmission} + + \sankeyadvance[energy]{El2}{.65*\hshift} + \energylabel{El2} + \sankeyfork{El2}{31.5/El3,2.0/Di} + \turnandstop{Di}{Distribution} + + \sankeyadvance[energy]{El3}{.65*\hshift} + \energylabel{El3} + \sankeyfork{El3}{31.0/El4,0.5/Wi} + \turnandstopbottom{Wi}{Wiring} + + \sankeyadvance[energy]{El4}{.65*\hshift} + \abovelabel{El4}{\textbf{Electricity}\\(Final energy)} + \energylabel{El4} + \sankeyfork{El4}{3.0/Lr1,28.0/Lb} + \turnandstop{Lb}{Lightbulb} + + \sankeyadvance[energy]{Lr1}{1.1*\hshift} + \abovelabel{Lr1}{\textbf{Light radiation}\\(Useful energy)} + \energylabel{Lr1} + \sankeyfork{Lr1}{2.0/Lr2,1.0/Ls} + \turnandstopbottom{Ls}{Lampshade} + + \sankeyadvance[energy]{Lr2}{.6*\hshift} + \energylabel{Lr2} + \sankeyfork{Lr2}{1.0/Il,1.0/Id} + \turnandstop{Id}{Idle} + + \sankeyadvance[energy]{Il}{.6*\hshift} + \abovelabel{Il}{\textbf{Illumination}\\(Energy services)} + \energylabel{Il} + \sankeyend[energy]{Il} + \end{sankeydiagram} +\end{tikzpicture} diff --git a/Master/texmf-dist/doc/latex/sankey/sankey-example1.tex b/Master/texmf-dist/doc/latex/sankey/sankey-example1.tex new file mode 100644 index 00000000000..bdeebbb876a --- /dev/null +++ b/Master/texmf-dist/doc/latex/sankey/sankey-example1.tex @@ -0,0 +1,73 @@ +\begin{tikzpicture} + \begin{sankeydiagram}%[debug] + \colorlet{cold}[rgb]{cyan!75!blue!50!white} + \colorlet{hot}[rgb]{red!50!orange!75!white} + \sankeyset{ + ratio=90pt/6,minimum radius=15pt, + start style=simple,end style=simple, + draw/.style={ + draw=blue!50!cyan, + line width=1pt,line cap=round,line join=round, + }, + cold/.style={ + fill/.style={ + draw=cold,line width=0pt,fill=cold, + }, + }, + cold to hot/.style={ + fill/.style={ + fill=none,top color=cold, + bottom color=hot,middle color=yellow, + }, + }, + hot/.style={ + fill/.style={ + draw=hot,line width=0pt,fill=hot, + }, + }, + } + + \sankeyset{cold} + \sankeynodestart{name=p0,at={100,0},angle=-90,quantity=6} + \sankeyadvance{p0}{50pt} + \sankeyfork{p0}{3/p1,3/p2} + \sankeyturnleft{p1}{90} + \sankeyadvance{p1}{20pt} + \sankeyadvance{p2}{60pt} + \sankeyfork{p2}{2/p3,1/p4} + \sankeyturnleft{p3}{90} + \sankeyadvance{p3}{50pt} + \sankeyfork{p3}{1/p5,1/p6} + \sankeyadvance{p5}{70pt} + \sankeyfork{p1}{1/p7,1/p8,1/p9} + \sankeyadvance{p7}{50pt} + \sankeyadvance{p9}{50pt} + \sankeyadvance{p4}{40pt} + \sankeyturnleft{p4}{90} + \sankeyadvance{p4}{65pt} + \sankeyadvance{p7}{40pt} + \sankeynode{ + name=p11,at={[shift={(50pt,-15pt)}]p7},quantity=3, + forked={1/p7a,1/p9a,1/p5a}, + } + \sankeyoutin{p7}{p7a} + \sankeyoutin{p9}{p9a} + \sankeyoutin{p5}{p5a} + \sankeyadvance{p11}{30pt} + \sankeyend{p11} + \sankeyturnright{p8}{90} + \sankeyturnright{p6}{90} + \sankeyturnright{p4}{90} + \sankeyset{hot} + \sankeyadvance[cold to hot]{p8}{40pt} + \sankeynode{ + name=p10,at={[shift={(-15pt,-60pt)}]p8},angle=-90,quantity=3, + forked={1/p8a,1/p6a,1/p4a}, + } + \sankeyoutin[cold to hot]{p4}{p4a} + \sankeyoutin[cold to hot]{p6}{p6a} + \sankeyoutin{p8}{p8a} + \sankeyadvance{p10}{30pt} + \sankeyend{p10} + \end{sankeydiagram} +\end{tikzpicture} diff --git a/Master/texmf-dist/doc/latex/sankey/sankey-example2.tex b/Master/texmf-dist/doc/latex/sankey/sankey-example2.tex new file mode 100644 index 00000000000..b0d06b73a93 --- /dev/null +++ b/Master/texmf-dist/doc/latex/sankey/sankey-example2.tex @@ -0,0 +1,188 @@ +\begin{tikzpicture} + \renewcommand*\sfdefault{txss} + + \begin{sankeydiagram}%[debug] + \sankeyset{ + ratio=4cm/524.3, + minimum radius=3mm, + start style=arrow, + end style=arrow, + fill/.style={ + line width=0pt, + fill=cyan!50!blue!50!black, + draw=cyan!50!blue!50!black, + }, + draw/.style={draw=none}, + every node/.style={angle=-90}, + } + + \sankeynodestart{name=B,at={-.5,0},quantity=7.2} + \coordinate[below=1mm of B.center] (B label); + \sankeyadvance{B}{5mm} + \sankeynodestart{name=GI,at={1,0},quantity=137.3} + \coordinate[below=1mm of GI.center] (GI label); + \sankeyadvance{GI}{5mm} + \sankeynodestart{name=I,at={4,0},quantity=397.8} + \coordinate[below=1mm of I.center] (I label); + \sankeynode{ + name=EI,at={2.86,-3},quantity=542.3, + forked={397.8/Ia,137.3/GIa,7.2/Ba} + } + \sankeydubins[minimum radius=1.2cm]{I}{Ia} + \sankeyoutin{GI}{GIa} + \sankeyoutin{B}{Ba} + \sankeyadvance{EI}{5mm} + \coordinate (EI label) at (EI); + \sankeyadvance{EI}{5mm} + \sankeyfork{EI}{63.1/EB,479.2/P} + + \sankeyturnleft{EB}{90} + \sankeyadvance{EB}{4cm} + \coordinate (EB label) at ($(EB)!.5!(EB-old)$); + \sankeyend{EB} + + \sankeyadvance{P}{10mm} + \coordinate (P label) at (P); + \sankeyadvance{P}{5mm} + + \sankeyfork{P}{33.5/NV,445.7/P-NV} + + { + \colorlet{NV color}{cyan!80!lime!50!gray} + \sankeyset{fill/.append style={fill=NV color,draw=NV color}} + \sankeyturnleft{NV}{90} + \sankeynode{as=NV,name=NV2,at=NV -| EB} + \sankeyoutin{NV}{NV2} + \coordinate (NV label) at (NV -| EB label); + \sankeyend{NV2} + } + + \sankeyadvance{P-NV}{10mm} + \sankeyfork{P-NV}{118.1/U,327.6/P-NV-U} + + { + \sankeyset{ + fill/.style={fill=orange!70!gray!50,draw=orange!70!gray!50} + } + \sankeyturnleft{U}{90} + \sankeynode{as=U,name=U2,at=U -| EB} + \sankeyoutin{U}{U2} + \coordinate (U label) at (U -| EB label); + \sankeyend{U2} + } + + \sankeyadvance{P-NV-U}{10mm} + \sankeyfork{P-NV-U}{327.2/P-NV-U-SD,0.4/SD} + + { + \sankeyturnright{SD}{90} + \sankeyadvance{SD}{15mm} + \coordinate (SD label) at (SD); + \sankeyadvance{SD}{15mm} + \sankeyend{SD} + } + + \sankeyadvance{P-NV-U-SD}{8mm} + \sankeyfork{P-NV-U-SD}{18.8/VE,308.4/E} + + { + \sankeyset{fill/.append style={orange!70!gray!30}} + \sankeyturnleft{VE}{90} + \sankeynode{as=VE,name=VE2,at=VE -| EB} + \sankeyoutin{VE}{VE2} + \coordinate (VE label) at (VE -| EB label); + \sankeyend{VE2} + } + + \sankeyadvance{E}{8mm} + \coordinate (E label) at (E); + \sankeyadvance{E}{20mm} + \sankeyfork{E}{135.1/H+GHD,87.2/V,86.1/In} + + \sankeyturnright{In}{90} + \sankeyadvance{In}{10mm} + \sankeyturnleft{In}{90} + \sankeyadvance{In}{5mm} + \coordinate (In label) at (In); + \sankeyadvance{In}{10mm} + \sankeyend{In} + + \sankeynode{as=V,name=V2,at=V|-In label} + \sankeyoutin{V}{V2} + \coordinate (V label) at (V2); + \sankeyadvance{V2}{10mm} + \sankeyend{V2} + + \sankeyturnleft{H+GHD}{90} + \sankeyadvance{H+GHD}{5mm} + \sankeyfork{H+GHD}{47.0/GHD,88.1/H} + + \sankeyturnright{H}{90} + \sankeynode{as=H,name=H2,at=H|-In label} + \sankeyoutin{H}{H2} + \coordinate (H label) at (H2); + \sankeyadvance{H2}{10mm} + \sankeyend{H2} + + \sankeyadvance{GHD}{30mm} + \sankeyturnright{GHD}{90} + \sankeynode{as=GHD,name=GHD2,at=GHD|-In label} + \sankeyoutin{GHD}{GHD2} + \coordinate (GHD label) at (GHD2); + \sankeyadvance{GHD2}{10mm} + \sankeyend{GHD2} + \end{sankeydiagram} + + % labels + \tikzset{ + label/.style={ + fill=white,fill opacity=.8,text opacity=1, + inner sep=1mm, + text=cyan!50!blue!50!black, + inner xsep=2mm, + font=\sffamily\bfseries\footnotesize, + align=center, + }, + } + \node[label,anchor=north] (B label) at (B label) {7.2}; + \node[label,left=1mm of B label] {Bestands-\\entnahme}; + \node[label,anchor=north] at (GI label) {137.3}; + \node[label,above=5mm of GI label] {Gewinnung\\im Inland}; + \node[label,anchor=north] at (I label) {397.8}; + \node[label,above=5mm of I label] {Import}; + + \node[label] at (EI label) {542.3\\Energieaufkommen im Inland}; + + \node[label,anchor=center] (EB label) at (EB label) {63.1}; + \node[label,above=1mm of EB label] {Export und\\Bunkerung}; + + \node[label] at (P label) {479.2\\Primärenergieverbrauch}; + + \node[label,anchor=center] (NV label) at (NV label) {33.5}; + \node[label,above=0mm of NV label] {Nichtenergetischer Verbrauch}; + + \node[label,anchor=center] (U label) at (U label) {118.1}; + \node[label,below=3mm of U label] {Umwandlungsverluste}; + + \node[label,anchor=center] (SD label) at (SD label) {0.4}; + \node[label,above=0mm of SD label] {Statistische\\Differenzen}; + + \node[label,anchor=center] (VE label) at (VE label) {18.8}; + \node[label,below=0mm of VE label] {Verbrauch in den\\Energiesktoren}; + + \node[label,anchor=north] (E label) at (E label) + {308.4\\Endenergieverbrauch}; + + \node[label,anchor=north] (In label) at (In label) {86.1}; + \node[label,anchor=north,below=1cm of In label] {Industrie}; + + \node[label,anchor=north] (V label) at (V label) {87.2}; + \node[label,anchor=north,below=1cm of V label] {Verkehr}; + + \node[label,anchor=north] (H label) at (H label) {88.1}; + \node[label,anchor=north,below=1cm of H label] {Haushalte}; + + \node[label,anchor=north] (GHD label) at (GHD label) {47.0}; + \node[label,anchor=north,below=1cm of GHD label] + {Gewerbe, Handel\\Diensleistungen}; +\end{tikzpicture} diff --git a/Master/texmf-dist/doc/latex/sankey/sankey-example3-variation.tex b/Master/texmf-dist/doc/latex/sankey/sankey-example3-variation.tex new file mode 100644 index 00000000000..b1f8c3d99d0 --- /dev/null +++ b/Master/texmf-dist/doc/latex/sankey/sankey-example3-variation.tex @@ -0,0 +1,149 @@ +\begin{tikzpicture}[rotate=-90] + \begin{sankeydiagram}[rotate=-90] + \sffamily + \sankeyset{ + ratio=1.7cm/10, + outin steps=2, + start style=arrow, + end style=simple, + draw/.style={draw=white,line width=.4pt}, + color/.style={fill/.style={fill=#1,fill opacity=.75}}, + shade/.style 2 args={fill/.style={ + fill=none,line width=0, + top color=#1,bottom color=#2, + middle color=#1!50!#2!50!white, + fill opacity=.75}}, + % colors + @define HTML color/.code args={#1/#2}{\definecolor{#1}{HTML}{#2}}, + @define HTML color/.list={ + cyan/a6cee3,lime/b2df8a,red/fb9a99,orange/fdbf6f, + violet/cab2d6,yellow/ffff99,blue/1f78b4,green/33a02c + }, + % colors of countries + @let country color/.code args={#1/#2}{\colorlet{#1}[rgb]{#2}}, + @let country color/.list={ + CA/red,US/orange,MX/lime,BR/violet,FR/yellow,GB/blue, + SP/green,PT/cyan,ML/cyan,SN/red,MA/orange, + AO/violet,ZA/lime,IN/blue,JP/yellow,CN/green + }, + } + \def\vdist{5mm} + \def\hwidth{1em} + \def\hdist{6cm} + + \sankeynode{name=CA,quantity=7} + \sankeynode{name=US,quantity=8,at={[yshift=\vdist]CA.left},anchor=right} + \sankeynode{name=MX,quantity=8,at={[yshift=\vdist]US.left},anchor=right} + \sankeynode{name=BR,quantity=8,at={[yshift=\vdist]MX.left},anchor=right} + + \foreach \country in {CA,US,MX,BR}{ + \sankeystart[color=\country]{\country} + \sankeyadvance[color=\country]{\country}{\hwidth} + } + + \sankeyfork{CA}{1/CA-to-PT,1/CA-to-GB,5/CA-to-FR} + \sankeyfork{US}{1/US-to-PT,1/US-to-SP,5/US-to-GB,1/US-to-FR} + \sankeyfork{MX}{1/MX-to-PT,5/MX-to-SP,1/MX-to-GB,1/MX-to-FR} + \sankeyfork{BR}{5/BR-to-PT,1/BR-to-SP,1/BR-to-GB,1/BR-to-FR} + + \sankeynode{name=FR,quantity=11, + at={[xshift=\hdist]CA.right},anchor=right} + \sankeynode{name=GB,quantity=11, + at={[yshift=\vdist]FR.left},anchor=right} + \sankeynode{name=SP,quantity=7, + at={[yshift=\vdist]GB.left},anchor=right} + \sankeynode{name=PT,quantity=8, + at={[yshift=\vdist]SP.left},anchor=right} + + \sankeyfork{FR} + {1/FR-from-BR,1/FR-from-MX,1/FR-from-US,5/FR-from-CA,3/FR-from-00} + \sankeyfork{GB} + {1/GB-from-BR,1/GB-from-MX,5/GB-from-US,1/GB-from-CA,3/GB-from-00} + \sankeyfork{SP}{1/SP-from-BR,5/SP-from-MX,1/SP-from-US} + \sankeyfork{PT}{5/PT-from-BR,1/PT-from-MX,1/PT-from-US,1/PT-from-CA} + + \foreach \country in {FR,GB,SP,PT}{ + \sankeyadvance[color=\country]{\country}{\hwidth} + } + + \sankeyfork{FR}{1/FR-to-ZA,1/FR-to-AO,3/FR-to-MA,3/FR-to-SN,3/FR-to-ML} + \sankeyfork{GB}{7/GB-to-ZA,1/GB-to-AO,2/GB-to-MA,1/GB-to-SN} + \sankeyfork{SP}{1/SP-to-ZA,3/SP-to-MA,1/SP-to-SN,2/SP-to-00} + \sankeyfork{PT}{3/PT-to-ZA,2/PT-to-AO,1/PT-to-MA,1/PT-to-SN,1/PT-to-00} + + \sankeynode{name=ML,quantity=9, + at={[xshift=\hdist]FR.right},anchor=right} + \sankeynode{name=SN,quantity=9, + at={[yshift=\vdist]ML.left},anchor=right} + \sankeynode{name=MA,quantity=9, + at={[yshift=\vdist]SN.left},anchor=right} + \sankeynode{name=AO,quantity=9, + at={[yshift=\vdist]MA.left},anchor=right} + \sankeynode{name=ZA,quantity=12, + at={[yshift=\vdist]AO.left},anchor=right} + + \sankeyfork{ML}{3/ML-from-FR,6/Mail-from-00} + \sankeyfork{SN} + {1/SN-from-PT,1/SN-from-SP,1/SN-from-GB,3/SN-from-FR,3/SN-from-00} + \sankeyfork{MA}{1/MA-from-PT,3/MA-from-SP,2/MA-from-GB,3/MA-from-FR} + \sankeyfork{AO}{2/AO-from-PT,1/AO-from-GB,1/AO-from-FR,5/AO-from-00} + \sankeyfork{ZA}{3/ZA-from-PT,1/ZA-from-SP,7/ZA-from-GB,1/ZA-from-FR} + + \foreach \country in {ML,SN,MA,AO,ZA}{ + \sankeyadvance[color=\country]{\country}{\hwidth} + } + + \sankeyfork{ML}{5/ML-to-CN,3/ML-to-JP,1/ML-to-IN} + \sankeyfork{SN}{5/SN-to-CN,3/SN-to-JP,1/SN-to-IN} + \sankeyfork{MA}{5/MA-to-CN,3/MA-to-JP,1/MA-to-IN} + \sankeyfork{AO}{5/AO-to-CN,3/AO-to-JP,1/AO-to-IN} + \sankeyfork{ZA}{5/ZA-to-CN,3/ZA-to-JP,1/ZA-to-IN,3/ZA-to-00} + + \sankeynode{name=IN,quantity=5, + at={[xshift=\hdist]ML.right},anchor=right} + \sankeynode{name=JP,quantity=15, + at={[yshift=\vdist]IN.left},anchor=right} + \sankeynode{name=CN,quantity=25, + at={[yshift=\vdist]JP.left},anchor=right} + + \sankeyfork{IN} + {1/IN-from-ZA,1/IN-from-AO,1/IN-from-MA,1/IN-from-SN,1/IN-from-ML} + \sankeyfork{JP} + {3/JP-from-ZA,3/JP-from-AO,3/JP-from-MA,3/JP-from-SN,3/JP-from-ML} + \sankeyfork{CN} + {5/CN-from-ZA,5/CN-from-AO,5/CN-from-MA,5/CN-from-SN,5/CN-from-ML} + + \foreach \country in {IN,JP,CN}{ + \sankeyadvance[color=\country]{\country}{\hwidth} + \sankeyend[color=\country]{\country} + } + + \foreach \startcountry/\countries in { + CA/{PT,GB,FR}, US/{PT,SP,GB,FR}, MX/{PT,SP,GB,FR}, + BR/{PT,SP,GB,FR}, FR/{ML,SN,MA,AO,ZA}, GB/{SN,MA,AO,ZA}, + SP/{SN,MA,ZA}, PT/{SN,MA,AO,ZA}, ML/{IN,JP,CN}, + SN/{IN,JP,CN}, MA/{IN,JP,CN}, AO/{IN,JP,CN}, + ZA/{IN,JP,CN}} + { + \foreach \endcountry in \countries { + \sankeyoutin[shade={\startcountry}{\endcountry}] + {\startcountry-to-\endcountry}{\endcountry-from-\startcountry} + } + } + + \foreach \country/\countryname in {CA/Canada, US/USA, MX/Mexico, + BR/Brazil, FR/France, GB/England, SP/Spain, PT/Portugal} + { + \node[anchor=south,inner sep=.1em,font=\small] + at (\country) {\countryname\vphantom{Ag}}; + } + + \foreach \country/\countryname in { + ML/Mali, SN/Senegal, MA/Morocco, AO/Angola, + ZA/South Africa, IN/India, JP/Japan, CN/China} + { + \node[anchor=south,inner sep=.1em,font=\small] + at (\country) {\countryname\vphantom{Ag}}; + } + \end{sankeydiagram} +\end{tikzpicture} diff --git a/Master/texmf-dist/doc/latex/sankey/sankey-example3.tex b/Master/texmf-dist/doc/latex/sankey/sankey-example3.tex new file mode 100644 index 00000000000..06ea9b59cac --- /dev/null +++ b/Master/texmf-dist/doc/latex/sankey/sankey-example3.tex @@ -0,0 +1,142 @@ +\begin{tikzpicture} + \begin{sankeydiagram}%[debug] + \sffamily + \sankeyset{ + ratio=1cm/10, + outin steps=2, + draw/.style={draw=none,line width=0pt}, + color/.style={fill/.style={fill=#1,fill opacity=.75}}, + shade/.style 2 args={fill/.style={left color=#1, + right color=#2,fill opacity=.5}}, + % colors + @define HTML color/.code args={#1/#2}{\definecolor{#1}{HTML}{#2}}, + @define HTML color/.list={ + cyan/a6cee3,lime/b2df8a,red/fb9a99,orange/fdbf6f, + violet/cab2d6,yellow/ffff99,blue/1f78b4,green/33a02c + }, + % colors of countries + @let country color/.code args={#1/#2}{\colorlet{#1}[rgb]{#2}}, + @let country color/.list={ + CA/red,US/orange,MX/orange,BR/cyan,FR/lime,GB/red, + SP/lime,PT/cyan,ML/blue,SN/violet,MA/yellow, + AO/violet,ZA/yellow,IN/green,JP/green,CN/blue + }, + } + \def\vdist{5mm} + \def\hwidth{.5em} + \def\hdist{4.1cm} + + \sankeynode{name=CA,quantity=7} + \sankeynode{name=US,quantity=8,at={[yshift=\vdist]CA.left},anchor=right} + \sankeynode{name=MX,quantity=8,at={[yshift=\vdist]US.left},anchor=right} + \sankeynode{name=BR,quantity=8,at={[yshift=\vdist]MX.left},anchor=right} + + \foreach \country in {CA,US,MX,BR}{ + \sankeyadvance[color=\country]{\country}{\hwidth} + } + + \sankeyfork{CA}{1/CA-to-PT,1/CA-to-GB,5/CA-to-FR} + \sankeyfork{US}{1/US-to-PT,1/US-to-SP,5/US-to-GB,1/US-to-FR} + \sankeyfork{MX}{1/MX-to-PT,5/MX-to-SP,1/MX-to-GB,1/MX-to-FR} + \sankeyfork{BR}{5/BR-to-PT,1/BR-to-SP,1/BR-to-GB,1/BR-to-FR} + + \sankeynode{name=FR,quantity=11, + at={[xshift=\hdist]CA.right},anchor=right} + \sankeynode{name=GB,quantity=11, + at={[yshift=\vdist]FR.left},anchor=right} + \sankeynode{name=SP,quantity=7, + at={[yshift=\vdist]GB.left},anchor=right} + \sankeynode{name=PT,quantity=8, + at={[yshift=\vdist]SP.left},anchor=right} + + \sankeyfork{FR} + {1/FR-from-BR,1/FR-from-MX,1/FR-from-US,5/FR-from-CA,3/FR-from-00} + \sankeyfork{GB} + {1/GB-from-BR,1/GB-from-MX,5/GB-from-US,1/GB-from-CA,3/GB-from-00} + \sankeyfork{SP}{1/SP-from-BR,5/SP-from-MX,1/SP-from-US} + \sankeyfork{PT}{5/PT-from-BR,1/PT-from-MX,1/PT-from-US,1/PT-from-CA} + + \foreach \country in {FR,GB,SP,PT}{ + \sankeyadvance[color=\country]{\country}{\hwidth} + } + + \sankeyfork{FR}{1/FR-to-ZA,1/FR-to-AO,3/FR-to-MA,3/FR-to-SN,3/FR-to-ML} + \sankeyfork{GB}{7/GB-to-ZA,1/GB-to-AO,2/GB-to-MA,1/GB-to-SN} + \sankeyfork{SP}{1/SP-to-ZA,3/SP-to-MA,1/SP-to-SN,2/SP-to-00} + \sankeyfork{PT}{3/PT-to-ZA,2/PT-to-AO,1/PT-to-MA,1/PT-to-SN,1/PT-to-00} + + \sankeynode{name=ML,quantity=9, + at={[xshift=\hdist]FR.right},anchor=right} + \sankeynode{name=SN,quantity=9, + at={[yshift=\vdist]ML.left},anchor=right} + \sankeynode{name=MA,quantity=9, + at={[yshift=\vdist]SN.left},anchor=right} + \sankeynode{name=AO,quantity=9, + at={[yshift=\vdist]MA.left},anchor=right} + \sankeynode{name=ZA,quantity=12, + at={[yshift=\vdist]AO.left},anchor=right} + + \sankeyfork{ML}{3/ML-from-FR,6/Mail-from-00} + \sankeyfork{SN} + {1/SN-from-PT,1/SN-from-SP,1/SN-from-GB,3/SN-from-FR,3/SN-from-00} + \sankeyfork{MA}{1/MA-from-PT,3/MA-from-SP,2/MA-from-GB,3/MA-from-FR} + \sankeyfork{AO}{2/AO-from-PT,1/AO-from-GB,1/AO-from-FR,5/AO-from-00} + \sankeyfork{ZA}{3/ZA-from-PT,1/ZA-from-SP,7/ZA-from-GB,1/ZA-from-FR} + + \foreach \country in {ML,SN,MA,AO,ZA}{ + \sankeyadvance[color=\country]{\country}{\hwidth} + } + + \sankeyfork{ML}{5/ML-to-CN,3/ML-to-JP,1/ML-to-IN} + \sankeyfork{SN}{5/SN-to-CN,3/SN-to-JP,1/SN-to-IN} + \sankeyfork{MA}{5/MA-to-CN,3/MA-to-JP,1/MA-to-IN} + \sankeyfork{AO}{5/AO-to-CN,3/AO-to-JP,1/AO-to-IN} + \sankeyfork{ZA}{5/ZA-to-CN,3/ZA-to-JP,1/ZA-to-IN,3/ZA-to-00} + + \sankeynode{name=IN,quantity=5, + at={[xshift=\hdist]ML.right},anchor=right} + \sankeynode{name=JP,quantity=15, + at={[yshift=\vdist]IN.left},anchor=right} + \sankeynode{name=CN,quantity=25, + at={[yshift=\vdist]JP.left},anchor=right} + + \sankeyfork{IN} + {1/IN-from-ZA,1/IN-from-AO,1/IN-from-MA,1/IN-from-SN,1/IN-from-ML} + \sankeyfork{JP} + {3/JP-from-ZA,3/JP-from-AO,3/JP-from-MA,3/JP-from-SN,3/JP-from-ML} + \sankeyfork{CN} + {5/CN-from-ZA,5/CN-from-AO,5/CN-from-MA,5/CN-from-SN,5/CN-from-ML} + + \foreach \country in {IN,JP,CN}{ + \sankeyadvance[color=\country]{\country}{\hwidth} + } + + \foreach \startcountry/\countries in { + CA/{PT,GB,FR}, US/{PT,SP,GB,FR}, MX/{PT,SP,GB,FR}, + BR/{PT,SP,GB,FR}, FR/{ML,SN,MA,AO,ZA}, GB/{SN,MA,AO,ZA}, + SP/{SN,MA,ZA}, PT/{SN,MA,AO,ZA}, ML/{IN,JP,CN}, + SN/{IN,JP,CN}, MA/{IN,JP,CN}, AO/{IN,JP,CN}, + ZA/{IN,JP,CN}} + { + \foreach \endcountry in \countries { + \sankeyoutin[shade={\startcountry}{\endcountry}] + {\startcountry-to-\endcountry}{\endcountry-from-\startcountry} + } + } + + \foreach \country/\countryname in {CA/Canada, US/USA, MX/Mexico, + BR/Brazil, FR/France, GB/England, SP/Spain, PT/Portugal} + { + \node[anchor=west,inner sep=.1em,font=\small] + at (\country) {\countryname\vphantom{Ag}}; + } + + \foreach \country/\countryname in { + ML/Mali, SN/Senegal, MA/Morocco, AO/Angola, + ZA/South Africa, IN/India, JP/Japan, CN/China} + { + \node[anchor=east,inner sep=.1em,font=\small] + at (\country-old) {\countryname\vphantom{Ag}}; + } + \end{sankeydiagram} +\end{tikzpicture} diff --git a/Master/texmf-dist/doc/latex/sankey/sankey-example4.tex b/Master/texmf-dist/doc/latex/sankey/sankey-example4.tex new file mode 100644 index 00000000000..7b5e17e20fa --- /dev/null +++ b/Master/texmf-dist/doc/latex/sankey/sankey-example4.tex @@ -0,0 +1,242 @@ +\begin{tikzpicture} + \renewcommand*\sfdefault{txss} + \sffamily + \sisetup{ + detect-all=true, + group-separator={,}, + group-minimum-digits=4, + } + % storage of labels + \newcommand\LabSet[2]{% node name, label + \expandafter\edef\csname#1@Lab\endcsname{#2}} + \newcommand\Lab[1]{% node name + \csname#1@Lab\endcsname} + % storage of quantities + \newcommand\QtySet[2]{% node name, quantity + \expandafter\edef\csname#1@Qty\endcsname{\fpeval{#2}}} + \newcommand\Qty[1]{% node name + \csname#1@Qty\endcsname} + % all nodes with their name, label and quantity + \sankeyset{ + def data/.code args={#1/#2/#3}{% node name/label/values + \LabSet{#1}{#2} + \QtySet{#1}{#3} + \typeout{#1: \Qty{#1}€ (\Lab{#1})} + }, + def data/.list={ + {Pf/Processing\\fees/71713}, + {Sog/Sales of\\good/4547}, + {Sf/Settlement\\fees/842075}, + {Os/Other\\services/37532}, + {R/Revenues/\Qty{Pf}+\Qty{Sog}+\Qty{Sf}+\Qty{Os}}, + {Coi/Cost of Inventory/5151}, + {Ciffi/Cost insecure from financial institutions/758234}, + {Nr/Net revenue/\Qty{R}-\Qty{Coi}-\Qty{Ciffi}}, + {Aadotaifa/Amortization and\\depreciation of tangible and\\ + intangible fixed assets/4688}, + {Ssapc/Social securities and\\pension costs/7860}, + {Was/Wages and salaries/35627}, + {Ooe/Other operating expenses/37346}, + {Nr2/-/\Qty{Nr}-\Qty{Aadotaifa}-\Qty{Ssapc}-\Qty{Was}-\Qty{Ooe}}, + {Oi/Other income/47}, + {Ibiiieait/Income before interest income,\\interest expense and + income taxes/\Qty{Nr2}+\Qty{Oi}}, + {Fe/Finance expense/561}, + {Ofr/Other financial results/2533}, + {Ibiiieait2/-/\Qty{Ibiiieait}-\Qty{Fe}-\Qty{Ofr}}, + {Fi/Finance income/204}, + {Ibit/Income before income taxes/\Qty{Ibiiieait2}+\Qty{Fi}}, + {It/Income taxes/21134}, + {Niftp/Net income for the period/\Qty{Ibit}-\Qty{It}}, + {Octa/Other currency\\translation adjustments/785}, + {Tci/Total comprehensive income/\Qty{Niftp}+\Qty{Octa}} + }, + } + + \definecolor{mygreen}{RGB}{9,192,82} + \tikzset{ + cost node/.style={ + overlay, + align=flush center, + node font=\footnotesize\sffamily\bfseries, + inner sep=0, + node contents={% + {\mdseries€\,\num{\Qty{#1}}}\\ + \Lab{#1}\vphantom{g}% + }, + }, + white hash/.style={ + draw=none,fill=none, + pattern={Lines[angle=60,line width=2pt,distance=4pt]}, + pattern color=white, + }, + line sep/.style={draw=white,line width=1pt}, + left label/.style={left=#1,align=flush right,anchor=north east}, + right label/.style={right=#1,align=flush left}, + right label hashed/.style={ + right=1mm of $(#1.left)!.5!(#1-old.left)$,align=flush left, + }, + left label hashed/.style={ + left=1mm of $(#1.right)!.5!(#1-old.right)$,align=flush right, + }, + } + + \newcommand\turnandstop[1]{ + \sankeyturn[green to greenwhite]{#1}{-90} + \sankeynode{as=#1,name=#1-e,at={#1 -| Coi}} + \sankeyoutin[greenwhite to white]{#1}{#1-e} + \node[cost node=#1,left label={1mm of #1-e.right}]; + } + + \begin{sankeydiagram}%[debug] + \sankeyset{ + ratio=28em/1000000, + minimum radius=2cm, + start style=none, + every node/.style={angle=-90}, + % default fill and draw styles + fill/.style={ + line width=0pt, + fill=mygreen, + }, + draw/.style={draw=none}, + % specific fill and draw styles + green to greenwhite/.style={ + fill/.style={ + line width=0pt, + right color=mygreen, + left color=mygreen!20!white, + } + }, + greenwhite to white/.style={ + fill/.style={ + line width=0pt, + right color=mygreen!20!white, + left color=mygreen!5!white, + } + }, + dashed/.style={draw/.style={draw=mygreen,dashed}}, + } + + \coordinate (top) at (0,2em); + + \sankeynodestart{name=Pf,quantity=\Qty{Pf}} + \node[cost node=Pf,above=.5em of Pf.center]; + + \sankeynodestart{name=Sog,quantity=\Qty{Sog}, + at={[xshift=4em]Pf.left},anchor=right} + \node[cost node=Sog,above=.5em of Sog.center]; + + \sankeynodestart{name=Sf,quantity=\Qty{Sf}, + at={[xshift=2em]Sog.left},anchor=right} + \node[cost node=Sf,above=.5em of Sf.center]; + + \sankeynodestart{name=Os,quantity=\Qty{Os}, + at={[xshift=2em]Sf.left},anchor=right} + \node[cost node=Os,above=.5em of Os.center]; + + \sankeynode{ + name=R,quantity=\Qty{R},at={[yshift=-10em]Sf.center}, + forked={\Qty{Os}/Os-a,\Qty{Sf}/Sf-a,\Qty{Sog}/Sog-a,\Qty{Pf}/Pf-a}, + } + + \foreach \nodename in {Pf,Sog,Sf,Os}{ + \sankeyoutin[fill/.style={top color=white,bottom color=mygreen}] + {\nodename}{\nodename-a} + } + + \sankeyadvance{R}{1em} + \node[cost node=R,right label hashed=R]; + + \sankeyfork{R}{\Qty{Ciffi}/Ciffi,\Qty{Nr}/Nr,\Qty{Coi}/Coi} + + \sankeyturnleft[minimum radius=1.cm]{Ciffi}{90} + \node[cost node=Ciffi,at={([shift={(1mm,0)}]Ciffi.center)},rotate=-90, + anchor=south,align=flush left,node font=\scriptsize\sffamily\bfseries]; + + \sankeyturnright[green to greenwhite]{Coi}{90} + \sankeyadvance[greenwhite to white]{Coi}{1em} + \node[cost node=Coi,left={1mm of [yshift=.75ex]Coi.left}, + align=flush right,anchor=north east,overlay]; + + \sankeyadvance{Nr}{9em} + \sankeyadvance{Nr}{1em} + \node[cost node=Nr,left label hashed=Nr, + node font=\large\sffamily\bfseries]; + + \sankeyfork{Nr}{\Qty{Nr2}/Nr2,\Qty{Ooe}/Ooe, + \Qty{Was}/Was,\Qty{Ssapc}/Ssapc,\Qty{Aadotaifa}/Aadotaifa} + + \turnandstop{Aadotaifa} + + \sankeyadvance{Ssapc}{5em} + \turnandstop{Ssapc} + + \sankeyadvance{Was}{9em} + \turnandstop{Was} + + \sankeyadvance{Ooe}{12em} + \turnandstop{Ooe} + + \sankeyadvance{Nr2}{15em} + \sankeynode{name=Ibiiieait,quantity=\Qty{Ibiiieait}, + anchor=right,at={Nr2.right}, + forked={\Qty{Oi}/Oi,\Qty{Nr2}/Nr2-e}} + + \sankeyturnleftbackward[minimum radius=1cm,dashed]{Oi}{90} + \node[cost node=Oi,right label=1mm of Oi.left]; + + \sankeyadvance{Ibiiieait}{1em} + \node[cost node=Ibiiieait,right label hashed=Ibiiieait]; + + \sankeyfork{Ibiiieait} + {\Qty{Ibiiieait2}/Ibiiieait2,\Qty{Ofr}/Ofr,\Qty{Fe}/Fe} + + \turnandstop{Fe} + + \sankeyadvance{Ofr}{3em} + \turnandstop{Ofr} + + \sankeyadvance{Ibiiieait2}{6em} + \sankeynode{name=Ibit,quantity={\Qty{Ibiiieait2}+\Qty{Fi}}, + anchor=right,at={Ibiiieait2.right}, + forked={\Qty{Fi}/Fi,\Qty{Ibiiieait2}/Ibiiieait2-e}} + + \sankeyturnleftbackward[minimum radius=1cm,dashed]{Fi}{90} + \node[cost node=Fi,right label=1mm of Fi.left]; + + \sankeyadvance{Ibit}{1em} + \node[cost node=Ibit,right label hashed=Ibit]; + + \sankeyfork{Ibit}{\Qty{Niftp}/Niftp,\Qty{It}/It} + + \turnandstop{It} + + \sankeyadvance{Niftp}{6em} + + \sankeyadvance{Niftp}{1em} + \node[cost node=Niftp,right label hashed=Niftp]; + + \sankeynode{name=Tci,quantity=\Qty{Niftp}+\Qty{Octa}, + anchor=right,at={[yshift=-6em]Niftp.right}, + forked={\Qty{Octa}/Octa,\Qty{Niftp}/Niftp-e}} + \sankeyoutin{Niftp}{Niftp-e} + + \sankeyturnleftbackward[minimum radius=1cm]{Octa}{90} + \node[cost node=Octa,right label=1mm of Octa.left]; + + \sankeyadvance{Tci}{1em} + \node[cost node=Tci,right label hashed=Tci]; + + \newcommand\hashband[1]{ + \draw[line sep] (#1-old.right) -- (#1-old.left); + \draw[line sep] (#1.right) -- (#1.left); + \path[white hash] (#1-old.right) rectangle (#1.left); + } + + \foreach \nodename in {R,Nr,Nr,Ibiiieait,Ibit,Niftp,Tci}{ + \hashband{\nodename} + } + + \end{sankeydiagram} +\end{tikzpicture} diff --git a/Master/texmf-dist/doc/latex/sankey/sankey.pdf b/Master/texmf-dist/doc/latex/sankey/sankey.pdf Binary files differnew file mode 100644 index 00000000000..f1b0fbf2dfd --- /dev/null +++ b/Master/texmf-dist/doc/latex/sankey/sankey.pdf |