summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-04-07 22:51:06 +0000
committerKarl Berry <karl@freefriends.org>2010-04-07 22:51:06 +0000
commitf1ae0e2b17bb1ea576dcb3049e625db8eabbcd12 (patch)
tree922404d4700e62f616acbceb3bdbb5785ea86197
parent389a14839d88ee774793a1eb4921c43933869738 (diff)
new latex package pgf-umlsd 0.5 (6apr10)
git-svn-id: svn://tug.org/texlive/trunk@17744 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlsd/README1
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo.pdfbin0 -> 31425 bytes
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo.tex101
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo2.pdfbin0 -> 28013 bytes
-rw-r--r--Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo2.tex105
-rw-r--r--Master/texmf-dist/tex/latex/pgf-umlsd/pgf-umlsd.sty283
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check3
-rw-r--r--Master/tlpkg/tlpsrc/collection-pictures.tlpsrc1
-rw-r--r--Master/tlpkg/tlpsrc/pgf-umlsd.tlpsrc0
9 files changed, 493 insertions, 1 deletions
diff --git a/Master/texmf-dist/doc/latex/pgf-umlsd/README b/Master/texmf-dist/doc/latex/pgf-umlsd/README
new file mode 100644
index 00000000000..4bc4a01c6ca
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlsd/README
@@ -0,0 +1 @@
+Some LaTeX macros for UML Sequence Diagrams. \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo.pdf b/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo.pdf
new file mode 100644
index 00000000000..ed3ef0a274e
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo.tex b/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo.tex
new file mode 100644
index 00000000000..6c807d65e40
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo.tex
@@ -0,0 +1,101 @@
+% Demonstration of pgf-umlsd.sty, a convenient set of macros for drawing
+% UML sequence diagrams. Written by Xu Yuan <xuyuan.cn@gmail.com> from
+% Southeast University, China.
+% This file is part of pgf-umlsd
+% you may get it at
+% http://code.google.com/p/pgf-umlsd/
+
+\documentclass{article}
+
+\usepackage{tikz}
+\usetikzlibrary{arrows,shadows} % for pgf-umlsd
+\usepackage[underline=true,rounded corners=false]{pgf-umlsd}
+
+\begin{document}
+
+\begin{figure}
+ \centering
+ \begin{sequencediagram}
+ \newthread{ss}{:SimulationServer}
+ \newinst{ctr}{:SimControlNode}
+ \newinst{ps}{:PhysicsServer}
+ \newinst[1]{sense}{:SenseServer}
+
+ \begin{call}{ss}{Initialize()}{sense}{}
+ \end{call}
+ \begin{sdblock}{Run Loop}{The main loop}
+ \begin{call}{ss}{StartCycle()}{ctr}{}
+ \begin{call}{ctr}{ActAgent()}{sense}{}
+ \end{call}
+ \end{call}
+ \begin{call}{ss}{Update()}{ps}{}
+ \begin{messcall}{ps}{PrePhysicsUpdate()}{sense}{state}
+ \end{messcall}
+ \begin{sdblock}{Physics Loop}{}
+ \begin{callself}{ps}{PhysicsUpdate()}{}
+ \end{callself}
+ \end{sdblock}
+ \begin{call}{ps}{PostPhysicsUpdate()}{sense}{}
+ \end{call}
+ \end{call}
+ \begin{call}{ss}{EndCycle()}{ctr}{}
+ \begin{call}{ctr}{SenseAgent()}{sense}{}
+ \end{call}
+ \end{call}
+ \end{sdblock}
+ \end{sequencediagram}
+ \caption{UML sequence diagram demo. The used style-file is
+ \texttt{pgf-umlsd.sty}, you may get it at
+ http://code.google.com/p/pgf-umlsd/}
+\end{figure}
+
+\begin{figure}
+ \centering
+ \begin{sequencediagram}
+ \tikzstyle{inststyle}+=[bottom color=yellow] % custom the style
+ \newthread[blue]{ss}{:SimulationServer}
+ \newinst{ps}{:PhysicsServer}
+ \newinst[2]{sense}{:SenseServer}
+ \newthread[red]{ctr}{:SimControlNode}
+
+ \begin{sdblock}[green!20]{Run Loop}{The main loop}
+ \mess{ctr}{StartCycle}{ss}
+ \begin{call}{ss}{Update()}{ps}{}
+ \prelevel
+ \begin{callself}{ctr}{SenseAgent()}{}
+ \begin{call}[3]{ctr}{Read}{sense}{}
+ \end{call}
+ \end{callself}
+ \prelevel\prelevel\prelevel\prelevel
+ \setthreadbias{west}
+ \begin{call}{ps}{PrePhysicsUpdate()}{sense}{}
+ \end{call}
+ \setthreadbias{center}
+ \begin{callself}{ps}{Update()}{}
+ \begin{callself}{ps}{\small CollisionDetection()}{}
+ \end{callself}
+ \begin{callself}{ps}{Dynamics()}{}
+ \end{callself}
+ \end{callself}
+ \begin{call}{ps}{PostPhysicsUpdate()}{sense}{}
+ \end{call}
+ \end{call}
+ \mess{ss}{EndCycle}{ctr}
+ \begin{callself}{ctr}{ActAgent()}{}
+ \begin{call}{ctr}{Write}{sense}{}
+ \end{call}
+ \end{callself}
+ \end{sdblock}
+
+ \end{sequencediagram}
+ \caption{Example of a sequence with parallel activities and the
+ customed style. The used style-file is \texttt{pgf-umlsd.sty}, you
+ may get it at http://code.google.com/p/pgf-umlsd/}
+\end{figure}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: Tex-PDF
+%%% TeX-master: t
+%%% End:
diff --git a/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo2.pdf b/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo2.pdf
new file mode 100644
index 00000000000..3356cd933a9
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo2.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo2.tex b/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo2.tex
new file mode 100644
index 00000000000..7a419f232e7
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/pgf-umlsd/pgf-umlsd-demo2.tex
@@ -0,0 +1,105 @@
+% Demonstration of pgf-umlsd.sty, a convenient set of macros for drawing
+% UML sequence diagrams. Written by Xu Yuan <xuyuan.cn@gmail.com> from
+% Southeast University, China.
+
+% The used style-file is part of pgf-umlsd
+% you may get it at
+% http://code.google.com/p/pgf-umlsd/
+
+
+\documentclass{article}
+
+\usepackage{tikz}
+\usetikzlibrary{arrows,shadows} % for pgf-umlsd
+
+\usepackage{soul} % hereby we are able to \hl == highlight some strings, or to \ul underline specials
+
+%\usepackage[underline=true,rounded corners=false]{pgf-umlsd} % changed to following parameter-values:
+\usepackage[underline=false,rounded corners=true]{pgf-umlsd}
+
+\begin{document}
+
+\begin{figure}
+ \centering
+ \begin{sequencediagram}
+ \tikzstyle{inststyle}+=[rounded corners=3.2mm, bottom color=cyan] %% hier werden weitere Optionen angegeben
+ \newthread{ss}{simulationServer}
+ \newinst{ctr}{simControlNode}
+ \newinst{ps}{physicsServer}
+ \newinst[1]{sense}{senseServer}
+
+ \begin{call}{ss}{Initialize()}{sense}{}
+ \end{call}
+ \begin{sdblock}{Run Loop}{}
+ \begin{call}{ss}{StartCycle()}{ctr}{}
+ \begin{call}{ctr}{ActAgent()}{sense}{}
+ \end{call}
+ \end{call}
+ \begin{call}{ss}{Update()}{ps}{}
+ \begin{call}{ps}{PrePhysicsUpdate()}{sense}{state}
+ \end{call}
+ \begin{callself}{ps}{PhysicsUpdate()}{}
+ \end{callself}
+ \begin{call}{ps}{PostPhysicsUpdate()}{sense}{}
+ \end{call}
+ \end{call}
+ \begin{call}{ss}{EndCycle()}{ctr}{}
+ \begin{call}{ctr}{SenseAgent()}{sense}{}
+ \end{call}
+ \end{call}
+ \end{sdblock}
+ \end{sequencediagram}
+
+ \caption{UML sequence diagram demo. The used style-file is part of pgf-umlsd-0.2.tar.gz
+Get it at http://code.google.com/p/pgf-umlsd/}
+\end{figure}
+
+\begin{figure}
+ \centering
+ \begin{sequencediagram}
+ \tikzstyle{inststyle}+=[rounded corners=0mm, bottom color=yellow] %% with rounded corners=0mm we get the standard behavior again
+ \newthread{ss}{\ul{:SimulationServer}} %% to show, that one is able, to underline special elements
+ \newinst{ps}{:PhysicsServer}
+ \newinst[2]{sense}{\ul{:SenseServer}} %% to show, that one is able, to underline special elements
+ \newthread[red]{ctr}{:SimControlNode}
+
+ \begin{sdblock}[green!20]{Run Loop}{\small This is the main loop.}
+ \mess{ctr}{StartCycle}{ss}
+ \begin{call}{ss}{Update()}{ps}{}
+ \prelevel
+ \begin{callself}{ctr}{SenseAgent()}{}
+ \begin{call}[3]{ctr}{Read}{sense}{}
+ \end{call}
+ \end{callself}
+ \prelevel\prelevel\prelevel\prelevel
+ \setthreadbias{west}
+ \begin{call}{ps}{PrePhysicsUpdate()}{sense}{}
+ \end{call}
+ \setthreadbias{center}
+ \begin{callself}{ps}{Update()}{}
+ \begin{callself}{ps}{\small CollisionDetection()}{}
+ \end{callself}
+ \begin{callself}{ps}{Dynamics()}{}
+ \end{callself}
+ \end{callself}
+ \begin{call}{ps}{PostPhysicsUpdate()}{sense}{}
+ \end{call}
+ \end{call}
+ \mess{ss}{EndCycle}{ctr}
+ \begin{callself}{ctr}{ActAgent()}{}
+ \begin{call}{ctr}{Write}{sense}{}
+ \end{call}
+ \end{callself}
+ \end{sdblock}
+
+ \end{sequencediagram}
+ \caption{Example of a sequence with parallel activities.The used style-file is part of pgf-umlsd-0.2.tar.gz --
+get it at http://code.google.com/p/pgf-umlsd/}
+\end{figure}
+
+\end{document}
+
+%%% Local Variables:
+%%% mode: Tex-PDF
+%%% TeX-master: t
+%%% End:
diff --git a/Master/texmf-dist/tex/latex/pgf-umlsd/pgf-umlsd.sty b/Master/texmf-dist/tex/latex/pgf-umlsd/pgf-umlsd.sty
new file mode 100644
index 00000000000..31900525691
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pgf-umlsd/pgf-umlsd.sty
@@ -0,0 +1,283 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Start of pgf-umlsd.sty
+%
+% Some macros for UML Sequence Diagrams.
+% Home page of project: http://pgf-umlsd.googlecode.com/
+% Author: Xu Yuan <xuyuan.cn@gmail.com>, Southeast University, China
+% Contributor: Nobel Huang <nobel1984@gmail.com>, Southeast University, China
+%
+% History:
+% v0.5 2009/09/30 Fix Issue 2 reported by vlado.handziski
+% - Nested callself is supported
+% - Rename sdloop and sdframe to sdblock
+% v0.4 2008/12/08 Fix Issue 1 reported by MathStuf:
+% Nested sdloop environment hides outer loop
+% v0.3 2008/11/10 in Berlin, fix for the PGF cvs version:
+% - the list items in \foreach are not evaluated by default now,
+% the `evaluate' opinion should be used
+% v0.2 2008/03/20 create project at http://pgf-umlsd.googlecode.com/
+% - use `shadows' library
+% Thanks for Dr. Ludger Humbert's <humbert@uni-wuppertal.de> feedback!
+% - reduce the parameter numbers, the user can write the content
+% of instance (such as no colon)
+% - the user can redefine the `inststyle'
+% - new option: switch underlining of the instance text
+% - new option: switch rounded corners
+% v0.1 2008/01/25 first release at http://www.fauskes.net/pgftikzexamples/
+%
+
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{pgf-umlsd}[2008/03/20 v0.2 Some LaTeX macros for UML
+Sequence Diagrams.]
+
+% Options
+% ? the instance name under line ?
+\newif\ifpgfumlsdunderline\pgfumlsdunderlinetrue
+\DeclareOption{underline}{\pgfumlsdunderlinetrue}
+\DeclareOption{underline=true}{\pgfumlsdunderlinetrue}
+\DeclareOption{underline=false}{\pgfumlsdunderlinefalse}
+% ? the instance box with rounded corners ?
+\newif\ifpgfumlsdroundedcorners\pgfumlsdroundedcornersfalse
+\DeclareOption{roundedcorners}{\pgfumlsdroundedcornerstrue}
+\DeclareOption{roundedcorners=true}{\pgfumlsdroundedcornerstrue}
+\DeclareOption{roundedcorners=false}{\pgfumlsdroundedcornersfalse}
+\ProcessOptions
+
+% declare layers
+\pgfdeclarelayer{background}
+\pgfdeclarelayer{threadground}
+\pgfsetlayers{background,threadground,main}
+
+% new counters
+\newcounter{preinst}
+\newcounter{instnum}
+\newcounter{threadnum}
+\newcounter{seqlevel} % level
+\newcounter{callevel}
+\newcounter{callselflevel}
+\newcounter{blocklevel}
+
+% new an instance
+% Example:
+% \newinst[edge distance]{var}{name:class}
+\newcommand{\newinst}[3][0.2]{
+ \stepcounter{instnum}
+ \path (inst\thepreinst.east)+(#1,0) node[inststyle] (inst\theinstnum)
+ {\ifpgfumlsdunderline
+ \underline{#3}
+ \else
+ #3
+ \fi};
+ \path (inst\theinstnum)+(0,-0.5*\unitfactor) node (#2) {};
+ \tikzstyle{instcolor#2}=[]
+ \stepcounter{preinst}
+}
+
+% new an instance thread
+% Example:
+% \newinst[color]{var}{name}{class}
+\newcommand{\newthread}[3][gray!30]{
+ \newinst{#2}{#3}
+ \stepcounter{threadnum}
+ \node[below of=inst\theinstnum,node distance=0.8cm] (thread\thethreadnum) {};
+ \tikzstyle{threadcolor\thethreadnum}=[fill=#1]
+ \tikzstyle{instcolor#2}=[fill=#1]
+}
+
+% draw running (thick) line, should not call directly
+\newcommand*{\drawthread}[2]{
+ \begin{pgfonlayer}{threadground}
+ \draw[threadstyle] (#1.west) -- (#1.east) -- (#2.east) -- (#2.west) -- cycle;
+ \end{pgfonlayer}
+}
+
+% a function call
+% Example:
+% \begin{call}[height]{caller}{function}{callee}{return}
+% \end{call}
+\newenvironment{call}[5][1]{
+ \stepcounter{seqlevel}
+ \stepcounter{callevel} % push
+ \path
+ (#2)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (cf\thecallevel) {}
+ (#4.\threadbias)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (ct\thecallevel) {};
+
+ \draw[->,>=triangle 60] ({cf\thecallevel}) -- (ct\thecallevel)
+ node[midway, above] {#3};
+ \def\l\thecallevel{#1}
+ \def\f\thecallevel{#2}
+ \def\t\thecallevel{#4}
+ \def\returnvalue{#5}
+ \tikzstyle{threadstyle}+=[instcolor#2]
+}
+{
+ \addtocounter{seqlevel}{\l\thecallevel}
+ \path
+ (\f\thecallevel)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (rf\thecallevel) {}
+ (\t\thecallevel.\threadbias)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (rt\thecallevel) {};
+ \draw[dashed,->,>=angle 60] ({rt\thecallevel}) -- (rf\thecallevel)
+ node[midway, above]{\returnvalue};
+ \drawthread{ct\thecallevel}{rt\thecallevel}
+ \addtocounter{callevel}{-1} % pop
+}
+
+% a function do not need call others
+% Example:
+% \begin{callself}[height]{caller}{function}{return}
+% \end{callself}
+\newenvironment{callself}[4][1]{
+ \stepcounter{seqlevel}
+ \stepcounter{callevel} % push
+ \stepcounter{callselflevel}
+
+ \path
+ (#2)+(\thecallselflevel*0.1-0.1,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (sc\thecallevel) {}
+ ({sc\thecallevel}.east)+(0,-0.33*\unitfactor) node (scb\thecallevel) {};
+
+ \draw[->,>=triangle 60] ({sc\thecallevel}.east) -- ++(0.8,0)
+ node[near start, above right] {#3} -- ++(0,-0.33*\unitfactor)
+ -- (scb\thecallevel);
+ \def\l\thecallevel{#1}
+ \def\f\thecallevel{#2}
+ \def\returnvalue{#4}
+ \tikzstyle{threadstyle}+=[instcolor#2]
+}{
+ \addtocounter{seqlevel}{\l\thecallevel}
+ \path (\f\thecallevel)+(\thecallselflevel*0.1-0.1,-\theseqlevel*\unitfactor-0.33*\unitfactor) node
+ (sct\thecallevel) {};
+
+ \draw[dashed,->,>=angle 60] ({sct\thecallevel}.east) node
+ (sce\thecallevel) {} -- ++(0.8,0) -- node[midway, right]{\returnvalue} ++(0,-0.33*\unitfactor) -- ++(-0.8,0);
+ \drawthread{scb\thecallevel}{sce\thecallevel}
+ \addtocounter{callevel}{-1} % pop
+ \addtocounter{callselflevel}{-1}
+}
+
+% message between threads
+% Example:
+% \mess{sender}{message content}{receiver}
+\newcommand{\mess}[3]{
+ \stepcounter{seqlevel}
+ \path
+ (#1)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (messbeg) {}
+ (#3)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (messend) {};
+ \draw[->,>=angle 60] (messbeg) -- (messend) node[midway, above] {#2};
+}
+
+\newenvironment{messcall}[4][1]{
+ \stepcounter{seqlevel}
+ \stepcounter{callevel} % push
+ \path
+ (#2)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (cf\thecallevel) {}
+ (#4.\threadbias)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (ct\thecallevel) {};
+
+ \draw[->,>=angle 60] ({cf\thecallevel}) -- (ct\thecallevel)
+ node[midway, above] {#3};
+ \def\l\thecallevel{#1}
+ \def\f\thecallevel{#2}
+ \def\t\thecallevel{#4}
+ \tikzstyle{threadstyle}+=[instcolor#2]
+}
+{
+ \addtocounter{seqlevel}{\l\thecallevel}
+ \path
+ (\f\thecallevel)+(0,-\theseqlevel*\unitfactor-0.7*\unitfactor) node (rf\thecallevel) {}
+ (\t\thecallevel.\threadbias)+(0,-\theseqlevel*\unitfactor-0.3*\unitfactor) node (rt\thecallevel) {};
+ \drawthread{ct\thecallevel}{rt\thecallevel}
+ \addtocounter{callevel}{-1} % pop
+}
+
+% In the situation of multi-threads, some objects are called at the
+% same time. Currently, we have to adjust the bias of thread line
+% manually. Possible parameters are: center, west, east
+\newcommand{\setthreadbias}[1]{\global\def\threadbias{#1}}
+
+% In the situation of multi-threads, some events happen at the same
+% time. Currently, we have to adjust the level(time) of events
+% manually. This function makes the call earlier.
+\newcommand{\prelevel}{\addtocounter{seqlevel}{-1}}
+
+% a block box with caption
+% \begin{sdblock}[caption background color]{caption}{comments}
+% \end{sdblock}
+\newenvironment{sdblock}[3][white]{
+ \stepcounter{seqlevel}
+ \stepcounter{blocklevel} % push
+ \coordinate (blockbeg\theblocklevel) at (0,-\theseqlevel*\unitfactor-\unitfactor);
+ \stepcounter{seqlevel}
+ \def\blockcolor\theblocklevel{#1}
+ \def\blockname\theblocklevel{#2}
+ \def\blockcomm\theblocklevel{#3}
+ \begin{pgfinterruptboundingbox}
+}{
+ \coordinate (blockend) at (0,-\theseqlevel*\unitfactor-2*\unitfactor);
+ \path (current bounding box.east)+(0.2,0) node (boxeast) {}
+ (current bounding box.west |- {blockbeg\theblocklevel}) + (-0.2,0)
+ node (nw) {};
+ \path (boxeast |- blockend) node (se) {};
+ \draw (nw) rectangle (se);
+
+ % title
+ \node[blockstyle] (blocktitle) at (nw) {\blockname\theblocklevel};
+ \path (blocktitle.south east) + (0,0.2) node (set) {}
+ (blocktitle.south east) + (-0.2,0) node (seb) {}
+ (blocktitle.north east) + (0.2,0) node (comm) {};
+ \draw[fill=\blockcolor\theblocklevel] (blocktitle.north west) -- (blocktitle.north east) --
+ (set.center) -- (seb.center) -- (blocktitle.south west) -- cycle;
+ \node[blockstyle] (blocktitle) at (nw) {\blockname\theblocklevel};
+ \node[blockcommentstyle] (blockcomment) at (comm) {\blockcomm\theblocklevel};
+
+ \end{pgfinterruptboundingbox}
+
+ % add two points to keep the bounding box
+ \node[dot] (fnw) at (nw) {};
+ \node[dot] (fse) at (se) {};
+
+ \addtocounter{blocklevel}{-1} % pop
+ \stepcounter{seqlevel}
+}
+
+% the environment of sequence diagram
+\newenvironment{sequencediagram}{
+ \begin{tikzpicture}
+ \setlength{\unitlength}{1cm}
+ \tikzstyle{sequence}=[coordinate]
+ \tikzstyle{inststyle}=[rectangle, draw, anchor=west, minimum
+ height=0.8cm, minimum width=1.6cm, fill=white,
+ drop shadow={opacity=1,fill=black}]
+ \ifpgfumlsdroundedcorners
+ \tikzstyle{inststyle}+=[rounded corners=3mm]
+ \fi
+ \tikzstyle{blockstyle}=[anchor=north west]
+ \tikzstyle{blockcommentstyle}=[anchor=north west, font=\small]
+ \tikzstyle{dot}=[inner sep=0pt,fill=black,circle,minimum size=0.2pt]
+ \global\def\unitfactor{0.6}
+ \global\def\threadbias{center}
+ % reset counters
+ \setcounter{preinst}{0}
+ \setcounter{instnum}{0}
+ \setcounter{threadnum}{0}
+ \setcounter{seqlevel}{0}
+ \setcounter{callevel}{0}
+ \setcounter{callselflevel}{0}
+ \setcounter{blocklevel}{0}
+
+ % origin
+ \node[coordinate] (inst0) {};
+}
+{
+ \begin{pgfonlayer}{background}
+ \foreach \t [evaluate=\t] in {1,...,\theinstnum}{
+ \draw[dotted] (inst\t) -- ++(0,-\theseqlevel*\unitfactor-2.2*\unitfactor);
+ }
+ \foreach \t [evaluate=\t] in {1,...,\thethreadnum}{
+ \path (thread\t)+(0,-\theseqlevel*\unitfactor-0.1*\unitfactor) node (threadend) {};
+ \tikzstyle{threadstyle}+=[threadcolor\t]
+ \drawthread{thread\t}{threadend}
+ }
+ \end{pgfonlayer}
+\end{tikzpicture}}
+
+
+%%% End of pgf-umlsd.sty
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ No newline at end of file
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index b254802ec1b..c063f45e2d7 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -221,7 +221,8 @@ my @TLP_working = qw(
pdfpages pdfscreen pdfslide pdfsync pdftex-def pdftricks pdfx
perception perltex
permute persian-bib petiteannonce
- pgf pgf-soroban pgfopts pgfplots phaistos philex philosophersimprint
+ pgf pgf-soroban pgf-umlsd pgfopts pgfplots
+ phaistos philex philosophersimprint
phonetic pict2e pictex pictex2 pigpen
pinlabel pittetd pkfix pkfix-helper placeins placeins-plain
plari plates play
diff --git a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
index fc05856dee5..2d80cf69317 100644
--- a/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
+++ b/Master/tlpkg/tlpsrc/collection-pictures.tlpsrc
@@ -29,6 +29,7 @@ depend pb-diagram
depend petri-nets
depend pgf
depend pgf-soroban
+depend pgf-umlsd
depend pgfopts
depend pgfplots
depend picinpar
diff --git a/Master/tlpkg/tlpsrc/pgf-umlsd.tlpsrc b/Master/tlpkg/tlpsrc/pgf-umlsd.tlpsrc
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/Master/tlpkg/tlpsrc/pgf-umlsd.tlpsrc