diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-09 00:49:07 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-09 00:49:07 +0000 |
commit | 007f67a693e4d031fd3d792df8e4d5f43e2cb2e7 (patch) | |
tree | 90d17e00e572ecb1e24764b6f29c80e098b08d29 /Master/texmf-dist/doc/latex/msc/refman.tex | |
parent | 950209b26f70aa87ed07c54f82a95b6f03b7c3a0 (diff) |
doc/latex
git-svn-id: svn://tug.org/texlive/trunk@84 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/msc/refman.tex')
-rw-r--r-- | Master/texmf-dist/doc/latex/msc/refman.tex | 1672 |
1 files changed, 1672 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/msc/refman.tex b/Master/texmf-dist/doc/latex/msc/refman.tex new file mode 100644 index 00000000000..a4c416a4b6c --- /dev/null +++ b/Master/texmf-dist/doc/latex/msc/refman.tex @@ -0,0 +1,1672 @@ +% file: refman.tex +% Copyright 2002 V. Bos and S. Mauw +% This file is part of the MSC Macro Package. +% +% RCS version: $Id: refman.tex,v 1.7 2002/07/01 10:38:59 vbos Exp $ +% +\documentclass[a4paper]{article} +\usepackage{a4wide} + +\usepackage{multicol} +\usepackage{msc} + +\newlength{\rpwidth} +\setlength{\rpwidth}{.5cm} +\newlength{\rpheight} +\setlength{\rpheight}{0.5\levelheight} +\newcommand{\rpN}{% + \psframe(-0.5\rpwidth,-\rpheight)(0.5\rpwidth,0\rpheight)% + \rput[B](0\rpwidth,-0.8\rpheight){\footnotesize \textsc{n}}% + \pscircle[fillstyle=solid,fillcolor=black](0\rpwidth,0\rpheight){.5\labeldist}% +} +\newcommand{\rpNE}{% + \psframe(-\rpwidth,-\rpheight)(0\rpwidth,0\rpheight)% + \rput[B](-.5\rpwidth,-0.8\rpheight){\footnotesize \textsc{ne}}% + \pscircle[fillstyle=solid,fillcolor=black](0\rpwidth,0\rpheight){.5\labeldist}% +} +\newcommand{\rpE}{% + \psframe(-\rpwidth,-.5\rpheight)(0\rpwidth,.5\rpheight)% + \rput[B](-.5\rpwidth,-0.3\rpheight){\footnotesize \textsc{e}}% + \pscircle[fillstyle=solid,fillcolor=black](0\rpwidth,0\rpheight){.5\labeldist}% +} +\newcommand{\rpSE}{% + \psframe(-\rpwidth,0\rpheight)(0\rpwidth,\rpheight)% + \rput[B](-.5\rpwidth,0.2\rpheight){\footnotesize \textsc{se}}% + \pscircle[fillstyle=solid,fillcolor=black](0\rpwidth,0\rpheight){.5\labeldist}% +} +\newcommand{\rpS}{% + \psframe(-.5\rpwidth,\rpheight)(.5\rpwidth,0\rpheight)% + \rput[t](0\rpwidth,0.8\rpheight){\footnotesize \textsc{s}}% + \pscircle[fillstyle=solid,fillcolor=black](0\rpwidth,0\rpheight){.5\labeldist}% +} +\newcommand{\rpSW}{% + \psframe(0\rpwidth,0\rpheight)(\rpwidth,\rpheight)% + \rput[B](.5\rpwidth,0.2\rpheight){\footnotesize \textsc{sw}}% + \pscircle[fillstyle=solid,fillcolor=black](0\rpwidth,0\rpheight){.5\labeldist}% +} +\newcommand{\rpW}{% + \psframe(0\rpwidth,-.5\rpheight)(\rpwidth,.5\rpheight)% + \rput[B](.5\rpwidth,-0.3\rpheight){\footnotesize \textsc{w}}% + \pscircle[fillstyle=solid,fillcolor=black](0\rpwidth,0\rpheight){.5\labeldist}% +} +\newcommand{\rpNW}{% + \psframe(0\rpwidth,-\rpheight)(\rpwidth,0\rpheight)% + \rput[B](.5\rpwidth,-0.8\rpheight){\footnotesize \textsc{nw}}% + \pscircle[fillstyle=solid,fillcolor=black](0\rpwidth,0\rpheight){.5\labeldist}% +} + + + +% The following code is taken from the doc package. It defines a global +% macro \bslash that produces a bslash (if present in the current font). +\makeatletter +{\catcode`\|=\z@ \catcode`\\=12 |gdef|bslash{\}} +\makeatother +\newcommand{\cmd}[1]{\texttt{\bslash #1}} + +\usepackage{url} +\newcommand{\acro}[1]{{\scshape\lowercase{#1}}} + +\newcommand\MSC{\acro{MSC}} +\newcommand\HMSC{\acro{HMSC}} +\newcommand{\MSCdoc}{\MSC{}doc} +\newcommand{\mscpack}{\MSC{} macro package} + +\newcommand{\env}[1]{\texttt{#1}} +\newcommand{\opt}[1]{[#1]} +\newcommand{\cmdarg}[1]{\{\emph{#1}\}} +\newcommand{\coordarg}[1]{\emph{#1}} +\newcommand{\coordargs}[2]{(\coordarg{#1},\coordarg{#2})} +\newcommand{\lnsvalue}[3]{large/normal/small value #1/#2/#3} + +\newenvironment{defs}{% + \begin{list}{}% + {\setlength{\labelwidth}{0pt}% + \setlength{\labelsep}{1em}% + \setlength{\leftmargin}{1em}% + \setlength{\parsep}{1ex}% + \setlength{\listparindent}{0pt}% + \setlength{\rightmargin}{0pt}% + \renewcommand{\makelabel}[1]{##1}% + \raggedright% + }% + }{% + \end{list}} + +\title{ + A \LaTeX\ macro package for Message Sequence Charts\\{\large Reference Manual} +} + +\author{ + \begin{tabular}{cc} + Victor Bos & Sjouke Mauw\\ + \footnotesize Turku Centre for Computer Science & + \footnotesize Eindhoven University of Technology \\ [-0.8ex] + \footnotesize Software Construction Laboratory & + \footnotesize Department of Mathematics and Computing Science \\ [-0.8ex] + \footnotesize Lemmink\"aisenkatu 14 & + \footnotesize P.O.\ Box 513 \\ [-0.8ex] + \footnotesize FIN--20520 Turku & + \footnotesize NL--5600 MB Eindhoven \\ [-0.8ex] + \footnotesize Finland & + \footnotesize The Netherlands \\ + \footnotesize \texttt{vbos@abo.fi} & + \footnotesize \texttt{sjouke@win.tue.nl} + \end{tabular} +} + +\date{\small Version \mscversion, last update \today\\ + Describing \mscpack{} version \mscversion} + + + +\begin{document} +\maketitle + +\tableofcontents + +\section{Introduction} + +The \mscpack{} was developed to draw (actually, to write) +\emph{Message Sequence Charts} (\MSC{}s) with \LaTeX. The current +version supports most of the \MSC{} language standardized +in~\cite{z120}. The manual~\cite{BM02a} describes how to use the +\mscpack{} and is illustrated with numerous examples. This reference manual +briefly describes the main concepts of the package and it provides +lists of all available environments and commands. In addition, it +lists both the user-definable lengths and the internal lengths that +are used by the package to compute the layout of \MSC{}s. +\section{Concepts} + +The \mscpack{} offers three different kinds +of diagrams: + +\begin{itemize} +\item \MSC{} diagrams (normal \MSC{}s) +\item \HMSC{} diagrams (high level \MSC{}s) +\item \MSCdoc{} diagrams (\MSC{} documents) +\end{itemize} +For each of these diagrams, the package provides a \LaTeX{} +environment. Figure~\ref{fig:types:of:diagrams} shows an example of +each diagram. The source code for these diagrams is given in +Figure~\ref{fig:sources}. Depending on the environment, different +\mscpack{} commands can be used. Furthermore, since each environment +is implemented as a \texttt{pspicture} (see \textsf{pstricks} +documentation), it is possible to use \textsf{pstricks} commands +inside the \MSC{} environments. + +\begin{figure} +\begin{center} +\setmscvalues{small} +\begin{tabular}{ccc} +\begin{msc}% + {Example 1}% +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\nextlevel +\mess{a}{i}{j} +\nextlevel[2] +\mess{b}{j}{i} +\nextlevel +\end{msc}% +% +& +\begin{hmsc}% + {Example 2}% + (0,0)(4,4.65) +\hmscstartsymbol{S}(2,3.75) +\hmscconnection{c}(2,3.25) +\hmscreference{R1}{A}(2,2.5) +\hmsccondition{C}{?}(2,1.5) +\hmscendsymbol{E}(1.5,0.5) +\arrow{S}{c} +\arrow{c}{R1} +\arrow{R1}{C} +\arrow{C} + [(2.5,1)(3,1)(3,3.25)] + {c} +\arrow{C}[(1.5,1)]{E} +\end{hmsc}% +& +\begin{mscdoc}% + {Example 3}% + (0,0)(4,4.65) +\reference{A}(1,3.0) +\reference{B}(3,3.0 ) +\separator{2.0} +\reference{C}(2,1.0) +\end{mscdoc}% +\\ +(a) \MSC{} diagram & +(b) \HMSC{} diagram & +(c) \MSCdoc{} diagram +\end{tabular} +\end{center} + +\caption{Examples of different diagrams} +\label{fig:types:of:diagrams} +\end{figure} + +\begin{figure}[htb] +\hrulefill +\begin{center} +\begin{minipage}[t]{0.3\linewidth} +\small +\begin{verbatim} +\begin{msc}% + {Example 1} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\nextlevel +\mess{a}{i}{j} +\nextlevel[2] +\mess{b}{j}{i} +\nextlevel +\end{msc} +\end{verbatim} +\end{minipage} +\hfil +\begin{minipage}[t]{0.3\linewidth} +\small +\begin{verbatim} +\begin{hmsc}% + {Example 2}% + (0,0)(4,4.65) +\hmscstartsymbol{S}(2,3.75) +\hmscconnection{c}(2,3.25) +\hmscreference{R1}{A}(2,2.5) +\hmsccondition{C}{?}(2,1.5) +\hmscendsymbol{E}(1.5,0.5) +\arrow{S}{c} +\arrow{c}{R1} +\arrow{R1}{C} +\arrow{C} + [(2.5,1)(3,1)(3,3.25)] + {c} +\arrow{C}[(1.5,1)]{E} +\end{hmsc} +\end{verbatim} +\end{minipage} +\hfil +\begin{minipage}[t]{0.3\linewidth} +\small +\begin{verbatim} +\begin{mscdoc}% + {Example 3}% + (0,0)(4,4.65) +\reference{A}(1,3.0) +\reference{B}(3,3.0 ) +\separator{2.0} +\reference{C}(2,1.0) +\end{mscdoc} +\end{verbatim} +\end{minipage} +\end{center} +\hrulefill +\caption{Source code for diagrams of Figure~\ref{fig:types:of:diagrams}} +\label{fig:sources} +\end{figure} + + +The \MSC{} environment provides most functionality of the package. The +following concepts should help in understanding the user-commands of +this environment. + + +\begin{defs} +\item[\emph{current height}] The \emph{current height} of an \MSC{} is a +length that indicates the y-postion relative to the top of the msc +frame. The \MSC{} drawing commands use this y-position to draw msc +symbols, e.g., instance heads, messages, actions, and instance +feet. The internal length \verb|\msc@currentheight| is the current +height. This variables is changed whenever the command +\verb|\nextlevel| is invoked. + +\item[\emph{current width}] The \emph{current width} of an \MSC{} is the +distance from the left side of the \MSC{} frame to the right side of the +\MSC{} frame. As such, it depends on the lengths \verb|\envinstdist| and +\verb|\instdist| as well as on the number of instances. The internal +length \verb|\msc@currentwidth| is the current width. During +construction of an msc, that is, in between \verb|\begin{msc}| and +\verb|\end{msc}|, \verb|\msc@currentwidth| is equal to +$\verb|\envinstdist| + (n \times \verb|instdist|)$, provided that~$n$ is +the number of instances defined so far (see \verb|\mscinstcnt| in the +section \emph{Internal counters} below) and the length +\verb|\instdist| is not changed between instances. At the end of an +\MSC{} construction, an additional \verb|\envinstdist| is added to +\verb|\msc@currentwidth|. The \verb|\msc@currentwidth| determines the +x-position of new \MSC{} instances. + +\item[\emph{level}] A level is a horizontal layer in an \MSC{} which is +used to construct msc's in a top-down fashion. Each level is +\verb|\levelheight| units high and spans the complete width of the +msc. The first level starts at $\verb|\topheaddist| + +\verb|\instheadheight| + \verb|\firstlevelheight|$ units below the top +of the \MSC{} frame. The \verb|\nextlevel| commands advances the \MSC{} to +the next (lower) level. + +\item[\emph{\MSC{} instance}] The main building blocks of MSC diagrams +are \emph{instances}. Instances are represented by vertical +bars. \emph{Fat} instances are represented by two vertical +lines. Usually, an instance has both a head symbol and a foot symbol. +In the \mscpack, each \MSC{} instance has a \emph{nickname} by which +the instance is identified. In the \mscpack{} there are special +instances: + +\begin{itemize} + +\item The left environment (nickname \verb|envleft|). + +\item The right environment (nickname \verb|envright|). + +\item The left side of an inline expression. If the nickname of the +inline expression is \verb|nm|, the nickname of the left side is +\verb|nmleft|. + +\item The right side of an inline expression. If the nickname of the +inline expression is \verb|nm|, the nickname of the left side is +\verb|nmright|. + +\item The left side of an reference expression. If the nickname of the +reference expression is \verb|nm|, the nickname of the left side is +\verb|nmleft|. + +\item The right side of an reference expression. If the nickname of the +reference expression is \verb|nm|, the nickname of the left side is +\verb|nmright|. + +\item A \emph{dummy} instance is an instance that is invisible; it +reserves space needed to draw an instance. It is useful to create +(see \verb|create| command) instances with create-messages. + +\end{itemize} + +\item[\emph{nickname}] A nickname is a unique identification of an +\emph{instance}. + +\item[\emph{message label reference points}] In order to place a +message label somewhere near the message arrow, the \mscpack{} +computes a \emph{reference point} for each message label. This is a +location on the bounding box of the label such that the distance +between the arrow and the reference point is minimized. Figures +\ref{fig:refpoints} (page~\pageref{fig:refpoints}) +and~\ref{fig:refpoints:B} (page~\pageref{fig:refpoints:B}) show the +location of reference points for all possible locations of message +labels. Note that the boxes with the location of the reference points +are not generated by the \LaTeX{} code given in these figures; we +enriched the \LaTeX{} code with some extra \textsf{pstricks} code (see +\LaTeX{} source code of this document). + +\end{defs} + +\begin{figure}[!htb] +\begin{minipage}{\linewidth} +\setmscvalues{small} +\begin{multicols}{2} +\begin{msc}{Label reference points} +\declinst{m0}{I0}{} +\declinst{m1}{I1}{} +\declinst{m2}{I2}{} +\nextlevel + +\mess{\rpS}{m0}{m1} +\nextlevel +\mess{\rpN}[b]{m1}{m2} +\nextlevel[2] + +\mess{\rpS}{m1}{m0} +\nextlevel +\mess{\rpN}[b]{m2}{m1} +\nextlevel[2] + +\mess{\rpE}{m0}{m0}[2] +\mess[r]{\rpW}{m2}{m2}[2] +\nextlevel[4] +\mess{\rpW}[r]{m0}{m0}[2] +\mess[r]{\rpE}[l]{m2}{m2}[2] +\nextlevel[6] + +\mess{\rpE}{m0}{m0}[-2] +\mess[r]{\rpW}{m2}{m2}[-2] +\nextlevel[4] +\mess{\rpW}[r]{m0}{m0}[-2] +\mess[r]{\rpE}[l]{m2}{m2}[-2] +\nextlevel[2] + +\mess{\rpSW}{m0}{m1}[2] +\mess{\rpNE}[b]{m1}{m2}[2] +\nextlevel[6] + +\mess{\rpSW}{m1}{m0}[-2] +\mess{\rpNE}[b]{m2}{m1}[-2] +\nextlevel[2] + +\mess{\rpSE}{m1}{m0}[2] +\mess{\rpNW}[b]{m2}{m1}[2] +\nextlevel[6] + +\mess{\rpSE}{m0}{m1}[-2] +\mess{\rpNW}[b]{m1}{m2}[-2] +\nextlevel[2] +\end{msc} +\bigskip + +\footnotesize +\begin{verbatim} +\begin{msc}{Label reference points} +\declinst{m0}{I0}{} +\declinst{m1}{I1}{} +\declinst{m2}{I2}{} +\nextlevel + +\mess{S}{m0}{m1} +\nextlevel +\mess{N}[b]{m1}{m2} +\nextlevel[2] + +\mess{S}{m1}{m0} +\nextlevel +\mess{N}[b]{m2}{m1} +\nextlevel[2] + +\mess{E}{m0}{m0}[2] +\mess[r]{W}{m2}{m2}[2] +\nextlevel[4] +\mess{W}[r]{m0}{m0}[2] +\mess[r]{E}[l]{m2}{m2}[2] +\nextlevel[6] + +\mess{E}{m0}{m0}[-2] +\mess[r]{W}{m2}{m2}[-2] +\nextlevel[4] +\mess{W}[r]{m0}{m0}[-2] +\mess[r]{E}[l]{m2}{m2}[-2] +\nextlevel[2] + +\mess{SW}{m0}{m1}[2] +\mess{NE}[b]{m1}{m2}[2] +\nextlevel[6] + +\mess{SW}{m1}{m0}[-2] +\mess{NE}[b]{m2}{m1}[-2] +\nextlevel[2] + +\mess{SE}{m1}{m0}[2] +\mess{NW}[b]{m2}{m1}[2] +\nextlevel[6] + +\mess{SE}{m0}{m1}[-2] +\mess{NW}[b]{m1}{m2}[-2] +\nextlevel[2] +\end{msc} +\end{verbatim} +\end{multicols} +\end{minipage} +\caption{Reference points of message labels} +\label{fig:refpoints} +\end{figure} + + +\begin{figure}[!htb] +\begin{minipage}{\linewidth} +\setmscvalues{small} +\begin{multicols}{2} +\begin{msc}{Label reference points (2)} +\declinst{m0}{I0}{} +\declinst{m1}{I1}{} +\declinst{m2}{I2}{} +\nextlevel + +\mess{\rpS}{m0}[.9]{m1} +\nextlevel +\mess{\rpN}[b]{m1}[.9]{m2} +\nextlevel[2] + +\mess{\rpS}{m1}[.9]{m0} +\nextlevel +\mess{\rpN}[b]{m2}{m1} +\nextlevel[2] + +\mess{\rpE}{m0}[.9]{m0}[2] +\mess[r]{\rpW}{m2}[.9]{m2}[2] +\nextlevel[4] +\mess{\rpW}[r]{m0}[.9]{m0}[2] +\mess[r]{\rpE}[l]{m2}[.9]{m2}[2] +\nextlevel[6] + +\mess{\rpE}{m0}[.9]{m0}[-2] +\mess[r]{\rpW}{m2}[.9]{m2}[-2] +\nextlevel[4] +\mess{\rpW}[r]{m0}[.9]{m0}[-2] +\mess[r]{\rpE}[l]{m2}[.9]{m2}[-2] +\nextlevel[2] + +\mess{\rpSW}{m0}[.9]{m1}[2] +\mess{\rpNE}[b]{m1}[.9]{m2}[2] +\nextlevel[6] + +\mess{\rpSW}{m1}[.9]{m0}[-2] +\mess{\rpNE}[b]{m2}[.9]{m1}[-2] +\nextlevel[2] + +\mess{\rpSE}{m1}[.9]{m0}[2] +\mess{\rpNW}[b]{m2}[.9]{m1}[2] +\nextlevel[6] + +\mess{\rpSE}{m0}[.9]{m1}[-2] +\mess{\rpNW}[b]{m1}[.9]{m2}[-2] +\nextlevel[2] +\end{msc} +\bigskip + +\footnotesize +\begin{verbatim} +\begin{msc}{Label reference points (2)} +\declinst{m0}{I0}{} +\declinst{m1}{I1}{} +\declinst{m2}{I2}{} +\nextlevel + +\mess{S}{m0}[.9]{m1} +\nextlevel +\mess{N}[b]{m1}[.9]{m2} +\nextlevel[2] + +\mess{S}{m1}[.9]{m0} +\nextlevel +\mess{N}[b]{m2}{m1} +\nextlevel[2] + +\mess{E}{m0}[.9]{m0}[2] +\mess[r]{W}{m2}[.9]{m2}[2] +\nextlevel[4] +\mess{W}[r]{m0}[.9]{m0}[2] +\mess[r]{E}[l]{m2}[.9]{m2}[2] +\nextlevel[6] + +\mess{E}{m0}[.9]{m0}[-2] +\mess[r]{W}{m2}[.9]{m2}[-2] +\nextlevel[4] +\mess{W}[r]{m0}[.9]{m0}[-2] +\mess[r]{E}[l]{m2}[.9]{m2}[-2] +\nextlevel[2] + +\mess{SW}{m0}[.9]{m1}[2] +\mess{NE}[b]{m1}[.9]{m2}[2] +\nextlevel[6] + +\mess{SW}{m1}[.9]{m0}[-2] +\mess{NE}[b]{m2}[.9]{m1}[-2] +\nextlevel[2] + +\mess{SE}{m1}[.9]{m0}[2] +\mess{NW}[b]{m2}[.9]{m1}[2] +\nextlevel[6] + +\mess{SE}{m0}[.9]{m1}[-2] +\mess{NW}[b]{m1}[.9]{m2}[-2] +\nextlevel[2] +\end{msc} +\end{verbatim} +\end{multicols} +\end{minipage} +\caption{Reference points of shifted message labels} +\label{fig:refpoints:B} +\end{figure} + + +\section{Environments} + +\begin{defs} + +\item[\cmd{begin}\texttt{\{msc\}}\opt{titlepos}\{\emph{title}\}\texttt{...\cmd{end}\{msc\}}] +The environment to draw msc's. The parameter \emph{title} defines the +title of the msc. The optional parameter \emph{titlepos} defines the +position of the title relative to the frame of the msc. Valid +positions are \verb|l|~(left), \verb|c|~(center), and +\verb|r|~(right). The default position is~\verb|l|. + +\item[\cmd{begin}\texttt{\{hmsc\}}\opt{titlepos}\{\emph{title}\}\texttt{...\cmd{end}\{hmsc\}}\coordargs{llx}{lly}\coordargs{urx}{ury}] +The environment to draw \HMSC's. The parameter \emph{title} defines the +title of the \HMSC. The optional parameter \emph{titlepos} defines the +position of the title relative to the frame of the \HMSC. Valid +positions are \verb|l|~(left), \verb|c|~(center), and +\verb|r|~(right). The default position is~\verb|l|. The size of the +\HMSC{} is determined by two pairs of coordinates. The coordinates +\coordargs{llx}{lly} define the lower left corner of the \HMSC. The +coordinates \coordargs{urx}{ury} define the upper right corner of the +\HMSC. + +\item[\cmd{begin}\texttt{\{mscdoc\}}\opt{titlepos}\{\emph{title}\}\texttt{...\cmd{end}\{mscdoc\}}\coordargs{llx}{lly}\coordargs{urx}{ury}] +The environment to draw \MSCdoc{} documents. The parameter +\emph{title} defines the title of the \MSCdoc{} document. The optional +parameter \emph{titlepos} defines the position of the title relative +to the frame of the \MSCdoc{} document. Valid positions are \verb|l|~(left), +\verb|c|~(center), and \verb|r|~(right). The default position +is~\verb|l|. The size of the \MSCdoc{} is determined by two pairs of +coordinates. The coordinates \coordargs{llx}{lly} define the lower +left corner of the \MSCdoc. The coordinates \coordargs{urx}{ury} +define the upper right corner of the \MSCdoc. + + +\end{defs} + + +\section{Commands} + +\begin{defs} + +\item[\cmd{action}\{\emph{txt}\}\{\emph{nm}\}] Draws an \emph{action} +symbol on the instance with nickname \emph{nm}. The parameter \emph{txt} +defines the name of the action. The size of the action symbol is +controlled by the \verb|\actionheight| and \verb|\actionwidth| +lengths. + +\item[\cmd{arrow}\cmdarg{nm0}\opt{\coordargs{xpos${}_1$}{ypos${}_1$}$\ldots$\coordargs{xpos${}_n$}{ypos${}_n$}}\cmdarg{nm1}] +Draws an arrow in an \HMSC{} diagram. The arrow starts at the symbol +with nickname~\emph{nm0} and ends at the symbol with +nickname~\emph{nm1}. The optional parameter +\coordargs{xpos${}_1$}{ypos${}_1$}$\ldots$\coordargs{xpos${}_n$}{ypos${}_n$} +is a list of intermediate points the arrow should pass through. + +\item[\cmd{changeinstbarwidth}\{\emph{nm}\}\{\emph{wd}\}] Changes the +bar width of instance \emph{nm} to \emph{wd}. The parameter \emph{wd} +should be a valid \LaTeX{} length. + +\item[\cmd{comment}\opt{\emph{pos}}\{\emph{txt}\}\{\emph{nm}\}] Puts a +comment at instance \emph{nm}. The parameter \emph{txt} is the +comment. The optional parameter \emph{pos} defines the horizontal +position of the comment relative to instance \emph{nm}. Valid +positions are \verb|l|~(left), \verb|r|~(right), and all valid +lengths. If the position is \verb|l| or~\verb|r|, the comment will be +put at \verb|\msccommentdist| units to the left or right, respectively, from +the instance axis. If \emph{pos} is a length, the comment will be put +\emph{pos} units from the instance axis. A negative \emph{pos} puts the +comment to the left and a positive \emph{pos} puts it to the right of +the instance axis. + +\item[\cmd{condition}\{\emph{txt}\}\{\emph{instancelist}\}] Draws a +\emph{condition} symbol on the instances occurring in +\emph{instancelist}. The parameter \emph{txt} defines the text to be +placed in the \emph{condition} symbol. The parameter +\emph{instancelist} is a comma separated list of instance +nicknames. Note that there should be no white space between the commas +and the nicknames; only if a nickname contains white space is a white +space allowed in \emph{instancelist}. + +\item[\cmd{coregionend}\{\emph{nm}\}] Ends the co-region on the instance +\emph{nm}. This command is obsolete (see \verb|\regionend|). + +\item[\cmd{coregionstart}\{\emph{nm}\}] Starts a co-region on the instance +\emph{nm}. This command is obsolete (see \verb|\regionstart|). + +\item[\cmd{create}\{\emph{msg}\}\opt{\emph{labelpos}}\{\emph{creator}\}\opt{\emph{placement}}\{\emph{nm}\}\{\emph{na}\}\{\emph{in}\}] +Instance with nickname \emph{creator} sends a create message with +label \emph{msg} to instance \emph{nm}. Instance \emph{nm} should be a +dummy (invisible) instance at the time of the create message, see +\cmd{dummyinst}. The head symbol of \emph{nm} is drawn at +\verb|\msc@currentheight|. The parameter \emph{an} (above name) is put +above the head symbol. The parameter \emph{in} (inside name) is put +inside the head symbol. \emph{nm}'s y-position is set to +\verb|\msc@currentheight| $+$ \verb|\instheadheight|. The optional +parameter \emph{labelpos} defines the position of the message label. Valid +values are \verb|t| and~\verb|b|, denoting a label position on top of +the arrow and a label position below the arrow, respectively. The +optional parameter \emph{placement} defines the relative position of +the message label along the message arrow. Valid values are real +numbers in the closed interval $[0,1]$, where~$0$ corresponds to the +beginning of the arrow and~$1$ corresponds to the end of the +arrow. The default value is~$0.5$. + +\item[\cmd{declinst(*)}\{\emph{nm}\}\{\emph{an}\}\{\emph{in}\}] +Defines an instance with nickname \emph{nm}. The starred version +makes a \emph{fat instance}. The x-position is \verb|\instdist| to the +right of \verb|\msc@currentwidth|. The head symbol of the instance is +drawn at \verb|\msc@currentheight|. The parameter \emph{an} (above +name) is put above the head symbol. The parameter \emph{in} (inside +name) is put inside the head symbol. The +instance y-position is set to \verb|\msc@currentheight| $+$ \verb|\instheadheight|. + + +\item[\cmd{drawframe}\{\emph{str}\}] A command to turn on/off the +drawing of the frame around msc's, hmsc's, and mscdoc's. If \emph{str} +is `yes', the frame will be drawn, otherwise the frame will not be +drawn. + +\item[\cmd{drawinstfoot}\{\emph{str}\}] A command to turn on/off +drawing of instance foot symbols. If \emph{str} is `yes', the foot +symbols will be drawn, otherwise they will not be drawn. + +\item[\cmd{drawinsthead}\{\emph{str}\}] A command to turn on/off +drawing of instance head symbols. If \emph{str} is `yes', the head +symbols will be drawn, otherwise they will not be drawn. + +\item[\cmd{dummyinst(*)}\{\emph{nm}\}] Defines a \emph{dummy instance} +with nickname \emph{nm}. The starred version makes a \emph{fat +instance}. The x-position is \verb|\instdist| to the right of +\verb|\msc@currentwidth|. No head symbol is drawn. The +instance y-position is undefined. + +\item[\cmd{found}\opt{\emph{pos}}\{\emph{label}\}\opt{\emph{labelpos}}\{\emph{gate}\}\{\emph{nm}\}\opt{\emph{placement}}] +Draws a \emph{found message} to instance \emph{nm}. The \emph{label} +parameter defines the message name. The \emph{gate} parameter defines +the gate name. The optional parameter \emph{pos} defines the position +of the message relative to instance \emph{nm}. Valid positions are +\verb|l| (left) and \verb|r| (right). The default position is +\verb|l|. The optional parameter \emph{labelpos} defines the position +of the message label with respect to the arrow. Valid values are +\verb+t+ (on top) and \verb+b+ (below). The default value is \verb+t+. +The optional parameter \emph{placement} defines the relative position +of the message label along the message arrow. Valid values are real +numbers in the closed interval $[0,1]$, where~$0$ corresponds to the +beginning of the arrow and~$1$ corresponds to the end of the +arrow. The default value is~$0.5$. The length of the arrow is +determined by \verb+\selfmesswidth+. + +\item[\cmd{gate(*)}\opt{\emph{hpos}}\opt{\emph{vpos}}\{\emph{txt}\}\{\emph{nm}\}] +Draws a gate at instance \emph{nm}. The parameter \emph{txt} defines +the name of the gate. The starred version produces a visible gate by +drawing a black circle at instance \emph{nm}. The unstarred version +produces an invisible gate. The position of the parameter \emph{txt} +is controlled by the optional parameters \emph{hpos} and \emph{vpos}: +\emph{hpos} defines the horizontal position relative to instance +\emph{nm} and \emph{vpos} defines the vertical position relative to +the current height (\verb|\msc@currentheight|). Valid horizontal +positions are \verb|l|~(left) and \verb|r|~(right). The default +horizontal position is~\verb|l|. Valid vertical positions are +\verb|t|~(top), \verb|c|~(center), and \verb|b|~(bottom). The default +vertical is~\verb|t|. + +\item[\cmd{hmsccondition}\cmdarg{nm}\cmdarg{txt}\coordargs{xpos}{ypos}] +Draws an \HMSC{} condition symbol with nickname \emph{nm} at position +\coordargs{xpos}{ypos}. The \emph{txt} parameter is placed inside the +condition symbol. + +\item[\cmd{hmscconnection(*)}\cmdarg{nm}\coordargs{xpos}{ypos}] Draws +an \HMSC{} connection symbol with nickname \emph{nm} at position +\coordargs{xpos}{ypos}. The unstarred version produces an invisible +connection symbol. The starred version produces a visible connection +symbol (i.e., a small circle). + +\item[\cmd{hmscendsymol}\cmdarg{nm}\coordargs{xpos}{ypos}] Draws an +\HMSC{} end symbol with nickname \emph{nm} at position +\coordargs{xpos}{ypos}. + +\item[\cmd{hmsckeyword}] The \HMSC{} keyword. The default value is `hmsc'. + +\item[\cmd{hmsckeywordstyle}\{\emph{kw}\}] A one-parameter command to +typeset the \HMSC{} keyword. The command can expect \verb|\hmsckeyword| to +be the value of \emph{kw}. The default `value' is \verb|\textbf|. + +\item[\cmd{hmscreference}\cmdarg{nm}\cmdarg{txt}\coordargs{xpos}{ypos}] +Draws an \HMSC{} reference symbol with nickname \emph{nm} at position +\coordargs{xpos}{ypos}. The \emph{txt} parameter is placed inside the +condition symbol. + +\item[\cmd{hmscstartsymbol}\cmdarg{nm}\coordargs{xpos}{ypos}] +\HMSC{} start symbol with nickname \emph{nm} at position +\coordargs{xpos}{ypos}. + +\item[\cmd{inlineend(*)}\{\emph{nm}\}] Ends the matching inline +expression (matching means equal nicknames). The unstarred version +draws a solid line to close the inline expression. The starred version +draws a dashed line to close the inline expression. + +\item[\cmd{inlineseparator}\{\emph{nm}\}] Draws an inline separator +line at the inline expression with nickname \emph{nm}. The separator +is drawn at \verb|\msc@currentheight|. + +\item[\cmd{inlinestart}\opt{\emph{lo}}\opt{\emph{ro}}\{\emph{nm}\}\{\emph{txt}\}\{\emph{fi}\}\{\emph{li}\}] +Defines an \emph{inline expression} with nickname \emph{nm}. The +inline expression is started at \verb|\msc@currentheight| and +continues until the level where a matching \cmd{inlineend} command is +found (matching means equal nicknames). The \emph{txt} parameter +defines the text of the inline expression. The first instance of the +inline expression is \emph{fi}. The last instance of the inline +expression is \emph{li}. The optional parameter \emph{lo} defines the +left and right overlap of the inline expression. If the second +optional parameter, \emph{ro}, is present, \emph{lo} defines the left +and \emph{ro} defines the right overlap. + +\item[\cmd{inststart}\{\emph{nm}\}\{\emph{an}\}\{\emph{in}\}] Starts +instance with nickname \emph{nm}. Instance \emph{nm} should be a dummy +(invisible) instance at the time of the \cmd{inststart} command, see +\cmd{dummyinst}. The head symbol is drawn at +\verb|\msc@currentheight|. The parameter \emph{an} (above name) is put +above the head symbol. The parameter \emph{in} (inside name) is put +inside the head symbol. The instance y-position is set to +\verb|\msc@currentheight| $+$ \verb|\instheadheight|. + +\item[\cmd{inststop}\{\emph{nm}\}] Stops instance with nickname +\emph{nm}. The foot symbol is drawn at \verb|\msc@currentheight|. The +instance y-position is undefined after this command. + +\item[\cmd{lost}\opt{\emph{pos}}\{\emph{label}\}\opt{\emph{labelpos}}\{\emph{gate}\}\{\emph{nm}\}\opt{\emph{placement}}] +Draws a \emph{lost message} from instance \emph{nm}. The \emph{label} +parameter defines the message name. The \emph{gate} parameter defines +the gate name. The optional parameter \emph{pos} defines the position +of the message relative to instance \emph{nm}. Valid positions are +\verb|l| (left) and \verb|r| (right). The default position is +\verb|l|. The optional parameter \emph{labelpos} defines the position +of the message label with respect to the arrow. Valid values are +\verb+t+ (on top) and \verb+b+ (below). The default value is \verb+t+. +The optional parameter \emph{placement} defines the relative position +of the message label along the message arrow. Valid values are real +numbers in the closed interval $[0,1]$, where~$0$ corresponds to the +beginning of the arrow and~$1$ corresponds to the end of the +arrow. The default value is~$0.5$. The length of the arrow is +determined by \verb+\selfmesswidth+. + +\item[\cmd{measure(*)}\opt{\emph{pos}}\{\emph{txt}\}\{\emph{nm1}\}\{\emph{nm2}\}\opt{\emph{offset}}] +Puts a \emph{measure} at instances \emph{nm1} and \emph{nm2}. The +parameter \emph{txt} defines the label of the measure. The starred +version puts the triangular measure symbols outside the measure; the +unstarred version puts the triangular measure symbols inside the +measure. The optional \emph{pos} parameter defines the horizontal +position of the measure relative to instances \emph{nm1} +and~\emph{nm2}. Valid positions are \verb|l|~(left), \verb|r|~(right), +and all valid lengths. If the position is \verb|l| or~\verb|r|, the +measure will be put at \verb|\measuredist| units to the left or right, +respectively, from the closest instance axis. If \emph{pos} is a +length, the measure will be put \emph{pos} units from the closest +instance axis. A negative \emph{pos} puts the measure to the left and +a positive \emph{pos} puts it to the right of the instances. The +optional parameter \emph{offset} defines the number of levels the +measure should extend vertically. The default value for \emph{offset} +is~1. + + +\item[\cmd{measureend(*)}\opt{\emph{pos}}\{\emph{txt}\}\{\emph{nm}\}\{\emph{gate}\}] +Puts a \emph{measure end} symbol at instance \emph{nm}.The starred +version puts the triangular measure symbol outside the measure; the +unstarred version puts the triangular measure symbol inside the +measure. The \emph{txt} parameter defines the label of the +measure. The \emph{gate} parameter defines the name of the gate of the +measure end symbol. The optional \emph{pos} parameter defines the +horizontal position of the measure relative to the +\emph{nm} instance. Valid positions are \verb|l|~(left), \verb|r|~(right), and +all valid lengths. If the position is \verb|l| or~\verb|r|, the +measure will be put at \verb|\measuredist| units to the left or right, +respectively, from the instance axis. If \emph{pos} is a length, the +measure will be put \emph{pos} units from the instance axis. A +negative \emph{pos} puts the measure to the left and a positive +\emph{pos} puts it to the right of the instance. + +\item[\cmd{measurestart(*)}\opt{\emph{pos}}\{\emph{txt}\}\{\emph{nm}\}\{\emph{gate}\}] +Puts a \emph{measure start} symbol at instance \emph{nm}.The starred +version puts the triangular measure symbol outside the measure; the +unstarred version puts the triangular measure symbol inside the +measure. The \emph{txt} parameter defines the label of the +measure. The \emph{gate} parameter defines the name of the gate of the +measure start symbol. The optional parameter \emph{pos} defines the +horizontal position of the measure relative to instance +\emph{nm}. Valid positions are \verb|l|~(left), \verb|r|~(right), and +all valid lengths. If the position is \verb|l| or~\verb|r|, the +measure will be put at \verb|\measuredist| units to the left or right, +respectively, from the instance axis. If \emph{pos} is a length, the +measure will be put \emph{pos} units from the instance axis. A +negative \emph{pos} puts the measure to the left and a positive +\emph{pos} puts it to the right of the instance. + +\item[\cmd{mess(*)}\opt{\emph{pos}}\{\emph{label}\}\opt{\emph{labelpos}}\{\emph{sender}\}\opt{\emph{placement}}\{\emph{receiver}\}\opt{\emph{offset}}] +Draws a message from \emph{sender} instance to \emph{receiver} +instance. The starred version draws a dashed line arrow, instead of a +solid arrow. This can be used to distinguish method calls from method +replies. The \emph{sender} and \emph{receiver} may be the same +instance, in which case the message is a \emph{self message}. The +parameter \emph{label} defines the message name. The message starting +y-position is \verb|\msc@currentheight| and the ending y-position of +the message is defined by \verb|\msc@currentheight| $+$ +$(\textit{offset}\ \times $ \verb|\levelheight|$)$. The optional +parameter \emph{pos} defines the position of self messages with +respect to the instance axis. Valid values are \verb+l+ (left) and +\verb+r+ (right). The default value is \verb+l+. The optional +parameter \emph{labelpos} defines the position of the message +label. In case of a self message, valid values are \verb|l| and +\verb|r|, denoting a label position left from the arrow and right from +the arrow, respectively. For self-messages the default value of +\verb+labelpos+ is the value of \verb+pos+. In case of a non-self +message, valid values are \verb|t| (default) and \verb|b|, denoting a +label position on top of the message arrow and below the message +arrow, respectively. The optional parameter \emph{placement} defines +the relative position of the message label along the message +arrow. Valid values are real numbers in the closed interval $[0,1]$, +where~$0$ corresponds to the beginning of the arrow and~$1$ +corresponds to the end of the arrow. The default value is~$0.5$. The +default value of the optional parameter \emph{offset} is~0 for normal +messages and~1 for self messages. + +\item[\cmd{messarrowscale}\{\emph{scalefactor}\}] Sets the scale +factor (a real number) of message arrow heads. The default value +is~1.5 + +\item[\cmd{mscdate}] The date of the \mscpack. + + +\item[\cmd{mscdockeyword}] The \MSCdoc{} keyword. The default value is `mscdoc'. + +\item[\cmd{mscdockeywordstyle}\{\emph{kw}\}] A one-parameter command to +typeset the mscdoc keyword. The command can expect \verb|\mscdockeyword| to +be the value of \emph{kw}. The default `value' is \verb|\textbf|. + + + +\item[\cmd{msckeyword}] The \MSC{} keyword. The default value is `msc'. + +\item[\cmd{msckeywordstyle}\{\emph{kw}\}] A one-parameter command to +typeset the \MSC{} keyword. The command can expect \verb|\msckeyword| to +be the value of \emph{kw}. The default `value' is \verb|\textbf|. + +\item[\cmd{mscmark}\opt{\emph{pos}}\{\emph{txt}\}\{\emph{nm}\}] Puts a +mark at instance \emph{nm}. The parameter \emph{txt} is the name of +the mark. The optional parameter \emph{pos} defines the horizontal and +vertical position of the mark relative to instance \emph{nm} and the +current height \verb|\msc@currentheight|. Valid positions are +\verb|tl|~(top-left), \verb|tr|~(top-right), \verb|bl|~(bottom-left), +and \verb|br|~(bottom-right). The default position is \verb|tl|. The +horizontal distance between the mark and the instance is defined by +\verb+\markdist+. + +\item[\cmd{mscunit}] A string denoting the (default) unit of all +lengths used by the \mscpack. Valid values are \emph{cm}, +\emph{em}, \emph{ex}, \emph{in}, \emph{mm}, \emph{pt}, etc. The +default value is~\emph{cm}. + +\item[\cmd{setmscunit}\{\emph{unit}\}] Changes the value of +\cmd{mscunit} into \emph{unit}. Valid values for \emph{unit} are +\emph{cm}, \emph{em}, \emph{ex}, \emph{in}, \emph{mm}, \emph{pt}, etc. + +\item[\cmd{mscversion}] The version number of the \mscpack. + +\item[\cmd{nextlevel}\opt{\emph{offset}}] Increases the number of +levels by the value of the optional parameter \emph{offset}. The +default value of \emph{offset} is~1. Increasing the level number means +that \verb|\msc@currentheight| is increased by $\textit{offset} \times +\verb|\levelheight|$. The first time this macro is used, the actual +increase of \verb|\msc@currentheight| is $\verb|\firstlevelheight| + +((\textit{offset} - 1) \times \verb|\levelheight|)$. Negative values +of \emph{offset} back up a number of levels. There are situations +where this is useful, see Section~\ref{sec:tricks}. + +\item[\cmd{nogrid}] Turns off grid drawing in \MSC, \HMSC, and +\MSCdoc{} diagrams. This command should not be used inside an \MSC, +\HMSC, or \MSCdoc{} evironment. + +\item[\cmd{order}\opt{\emph{pos}}\{\emph{sender}\}\{\emph{receiver}\}\opt{\emph{offset}}] +Draws an \emph{order line} from the \emph{sender} instance to the +\emph{receiver} instance. The \emph{sender} and \emph{receiver} may be +the same instance, in which case the order is a \emph{self-order}. The +order starting y-position is \verb|\msc@currentheight| and the ending +y-position of the order is defined by \verb|\msc@currentheight| $+$ +$(\textit{offset}\ \times $ \verb|\levelheight|$)$. In case of a +self-order, the optional parameter \emph{pos} defines the position of +the order relative to the \emph{sender} instance. Valid positions are +\verb|l| (left) and \verb|r| (right). The default position is +\verb|l|. In case of a non-self-order, the \emph{pos} parameter is +ignored. The default value of the optional parameter \emph{offset} +is~0 for normal orders and~1 for self orders. + +\item[\cmd{reference}\cmdarg{txt}\coordargs{xpos}{ypos}] Draws an +\MSCdoc{} reference symbol. The \emph{txt} parameter defines the text to +be placed inside the \MSCdoc{} reference symbol. The coordinates +\coordargs{xpos}{ypos} define the position of the reference symbol. + +\item[\cmd{referenceend}\{\emph{nm}\}] Ends the reference expression with +nickname \emph{nm}. + +\item[\cmd{referencestart}\opt{\emph{lo}}\opt{\emph{ro}}\{\emph{nm}\}\{\emph{txt}\}\{\emph{fi}\}\{\emph{li}\}] +Defines a \emph{reference expression} with nickname \emph{nm}. The +reference expression is started at \verb|\msc@currentheight| and +continues until the level where a matching \verb|\referenceend| command +is found. The \emph{txt} parameter defines the text of the reference +expression. The first instance of the reference expression is +\emph{fi}. The last instance of the reference expression is +\emph{li}. The optional parameter \emph{lo} defines the left and right +overlap of the reference expression. If the second optional parameter, +\emph{ro}, is present, \emph{lo} defines the left and \emph{ro} +defines the right overlap. + +\item[\cmd{regionend}\{\emph{nm}\}] Ends the current region on +instance \emph{nm}. The region style of the instance \emph{nm} is +reset to \emph{normal} again. Note: this command makes +\verb|\coregionend| obsolete. + +\item[\cmd{regionstart}\{\emph{rstyle}\}\{\emph{nm}\}] Starts a region +on the instance \emph{nm}. The style of the region is defined by the +\emph{rstyle} parameter. Valid region styles are \emph{coregion}, +\emph{suspension}, \emph{activation}, and \emph{normal}. Note: this +command makes \verb|\coregionstart| obsolete. + +\item[\cmd{separator}\cmdarg{ypos}] Draws a separator in an \MSCdoc{} +diagram. The \coordarg{ypos} parameter defines the vertical position of the +separator in the \MSCdoc{} diagram. + +\item[\cmd{setfootcolor}\{\emph{color}\}] Sets the color of the foot symbols of +\MSC{} instances. Possible values are \emph{black}, \emph{white}, +\emph{gray}, or \emph{lightgray}. For more color values, see the +documentation of the \LaTeXe{} \textsf{color} package. + +\item[\cmd{sethmsckeyword}\{\emph{kw}\}] Sets the \HMSC{} keyword to +\emph{kw}. For this command to be effective, it should be used outside +the \HMSC{} environment. + +\item[\cmd{sethmsckeywordstyle}\{\emph{kwstylemacro}\}] Redefines the +\verb|\hmsckeywordstyle| macro to the macro \emph{kwstylemacro}. This +should be a 1-argument macro, like the standard \LaTeX{} +\cmd{textbf} and \cmd{textit} commands. For this command to be effective, it +should be used outside the \HMSC{} environment. + +\item[\cmd{setmscdockeyword}\{\emph{kw}\}] Sets the \MSCdoc{} keyword to +\emph{kw}. For this command to be effective, it should be used outside +the \MSCdoc{} environment. + +\item[\cmd{setmscdockeywordstyle}\{\emph{kwstylemacro}\}] Redefines the +\verb|\mscdockeywordstyle| macro to the macro \emph{kwstylemacro}. This +should be a 1-argument macro, like the standard \LaTeX{} +\cmd{textbf} and \cmd{textit} commands. For this command to be effective, it +should be used outside the \MSCdoc{} environment. + + +\item[\cmd{setmsckeyword}\{\emph{kw}\}] Sets the \MSC{} keyword to +\emph{kw}. For this command to be effective, it should be used outside +the \MSC{} environment. + +\item[\cmd{setmsckeywordstyle}\{\emph{kwstylemacro}\}] Redefines the +\verb|\msckeywordstyle| macro to the macro \emph{kwstylemacro}. This +should be a 1-argument macro, like the standard \LaTeX{} +\cmd{textbf} and \cmd{textit} commands. For this command to be effective, it +should be used outside the \MSC{} environment. + +\item[\cmd{setmscscale}\{\emph{scalefactor}\}] Sets the scale factor +of the \MSC{} environment to \emph{scalefactor}. the scale factor is +supposed to be a real number. Scaling is done when the \MSC{} +environment ends (\verb|\end{msc}|). The default of \emph{scalefactor} +is~1. + + +\item[\cmd{setmscvalues}\{\emph{size}\}] Sets the msc-lengths to one +of the predefined \emph{sizes}. Valid values for \emph{size} are: +\verb|small|, \verb|normal|, and \verb|large|. + +\item[\cmd{setstoptimer}\opt{\emph{pos}}\{\emph{label}\}\{\emph{nm}\}\opt{\emph{offset}}] +Draws both a \emph{timer} and a \emph{stop timer} symbol on the +instance \emph{nm}. The parameter \emph{label} defines the name of +the timer. The optional parameter \emph{pos} defines the position of +the \emph{timer} relative to the \emph{nm} instance. Valid positions +are \verb|l| (left) and \verb|r| (right). The default position +is~\verb|l|. The horizontal distance between the timer symbol and the +instance axis is defined by \verb+selfmesswidth+. + +\item[\cmd{settimeout}\opt{\emph{pos}}\{\emph{label}\}\{\emph{nm}\}\opt{\emph{offset}}] +Draws a \emph{timer} symbol on the instance \emph{nm} and connects the +\emph{timer} symbol and the instance with an arrow. The parameter +\emph{label} defines the name of the \emph{timer}. The optional +parameter \emph{pos} defines the position of the \emph{timer} relative +to the \emph{nm} instance. Valid positions are \verb|l| (left) and +\verb|r| (right). The default position is~\verb|l|. The optional +parameter \emph{offset} defines the number of levels between the +\emph{timer} symbol and the point where the arrow meets the \emph{nm} +instance. The default \emph{offset} is~2. The horizontal distance +between the timer symbol and the instance axis is defined by +\verb+selfmesswidth+. + +\item[\cmd{settimer}\opt{\emph{pos}}\{\emph{label}\}\{\emph{nm}\}] +Draws a \emph{timer} symbol on the instance \emph{nm}. The parameter +\emph{label} defines the name of the timer. The optional parameter +\emph{pos} defines the position of the \emph{timer} relative to the +\emph{nm} instance. Valid positions are \verb|l| (left) and \verb|r| +(right). The default position is~\verb|l|. The horizontal distance +between the timer symbol and the instance axis is defined by +\verb+selfmesswidth+. + +\item[\cmd{showgrid}] Turns on grid-drawing in \MSC, \MSCdoc, and \HMSC{} +diagrams. This is useful to determine the values of the user definable +lengths or if normal \textsf{pstricks} commands should be included in +the diagram. (Note that the vertical axis of the \MSC{} grid has no positive +labels.) This command should not be used inside an \MSC, +\HMSC, or \MSCdoc{} evironment. + +\item[\cmd{stop}\{\emph{nm}\}] Stops the instance with nickname +\emph{nm}. The instance line of \emph{nm} is drawn from its y-position +to the current y-position of the \MSC{} (\verb|\msc@curentheight|). At +the current height, a \emph{stop} symbol is drawn. + +\item[\cmd{stoptimer}\opt{\emph{pos}}\{\emph{label}\}\{\emph{nm}\}] +Draws a \emph{stop timer} symbol on the instance \emph{nm}. The +parameter \emph{label} defines the name of the timer. The optional +parameter \emph{pos} defines the position of the \emph{timer} relative +to the \emph{nm} instance. Valid positions are \verb|l| (left) and +\verb|r| (right). The default position is~\verb|l|. The horizontal +distance between the timer symbol and the instance axis is defined by +\verb+selfmesswidth+. + +\item[\cmd{timeout}\opt{\emph{pos}}\{\emph{label}\}\{\emph{nm}\}] +Draws a \emph{timer} symbol on the instance \emph{nm} and connects the +symbol and the instance with an arrow. The parameter \emph{label} +defines the name of the timeout. The optional parameter \emph{pos} +defines the position of the \emph{timer} symbol relative to the +\emph{nm} instance. Valid positions are \verb|l| (left) and \verb|r| +(right). The default position is~\verb|l|. The horizontal distance +between the timer symbol and the instance axis is defined by +\verb+selfmesswidth+. + +\end{defs} + + +\section{User definable lengths} + +This section lists the user-definable lengths of the \mscpack. For +each length, the default values for large, normal, and small diagrams +are given. The appearance of \MSC, \HMSC, and \MSCdoc{} diagrams can be +changed by adjusting these lengths. Use the normal \cmd{setlength} +command to change these lengths. + +\begin{defs} + +\item[\cmd{actionheight}] +Height of action symbols.\\ +(\lnsvalue{0.75}{0.6}{0.5} cm.) + +\item[\cmd{actionwidth}] +Width of action symbol.\\ +(\lnsvalue{1.25}{1.25}{1.2} cm.) + +\item[\cmd{bottomfootdist}] +Distance between bottom of foot symbol and frame.\\ +(\lnsvalue{1.0}{0.7}{0.5} cm.) + +\item[\cmd{commentdist}] +Distance between a comment and its instance.\\ +(\lnsvalue{0.5}{0.5}{0.5} cm.) + +\item[\cmd{conditionheight}] +Height of condition symbols.\\ +(\lnsvalue{0.75}{0.6}{0.5} cm.) + +\item[\cmd{conditionoverlap}] +Overlap of condition symbol.\\ +(\lnsvalue{0.6}{0.5}{0.4} cm.) + +\item[\cmd{envinstdist}] +Distance between environments and nearest instance line.\\ +(\lnsvalue{2.5}{2.0}{1.2} cm.) + +\item[\cmd{firstlevelheight}] Height of level just below head +symbols. Should not be changed inside the \MSC{} environment.\\ +(\lnsvalue{0.75}{0.6}{0.4} cm.) + +\item[\cmd{hmscconditionheight}] +Height of \HMSC{} condition symbol.\\ +(\lnsvalue{0.375}{0.3}{0.25} cm.) + +\item[\cmd{hmscconditionwidth}] +Width of \HMSC{} condition symbol.\\ +(\lnsvalue{1.0}{0.8}{0.7} cm.) + +\item[\cmd{hmscconnectionradius}] +Radius of \HMSC{} connection symbol.\\ +(\lnsvalue{0.06}{0.05}{0.04} cm.) + +\item[\cmd{hmscreferenceheight}] +Height of \HMSC{} reference symbol.\\ +(\lnsvalue{0.8}{0.7}{0.6} cm.) + +\item[\cmd{hmscreferencewidth}] +Width of \HMSC{} reference symbol.\\ +(\lnsvalue{1.6}{1.4}{1.2} cm.) + +\item[\cmd{hmscstartsymbolwidth}] +Width of \HMSC{} start symbol.\\ +(\lnsvalue{0.85}{0.7}{0.4} cm.) + +\item[\cmd{inlineoverlap}] +Overlap of inline symbol.\\ +(\lnsvalue{1.5}{1.0}{0.75} cm.) + +\item[\cmd{instbarwidth}] +Default width of vertical instance bars (applies to fat instances only).\\ +(\lnsvalue{0.0}{0.0}{0.0} cm.) + +\item[\cmd{instdist}] +Distance between instance axes.\\ +(\lnsvalue{3.0}{2.2}{1.5} cm.) + +\item[\cmd{instfootheight}] Height of foot symbols. Should not be +changed inside the \MSC{} environment.\\ +(\lnsvalue{0.25}{0.2}{0.15} cm.) + +\item[\cmd{instheadheight}] Height of head symbols. Should not be +changed inside the \MSC{} environment.\\ +(\lnsvalue{0.6}{0.55}{0.5} cm.) + +\item[\cmd{instwidth}] +Width of header and foot symbols.\\ +(\lnsvalue{1.75}{1.6}{1.2} cm.) + +\item[\cmd{labeldist}] +Distance between labels and the symbols to which they belong (for instance, message labels and arrows).\\ +(\lnsvalue{1.0}{1.0}{1.0} ex.) + +\item[\cmd{lastlevelheight}] Height of level just above foot +symbols. Should not be changed inside the \MSC{} environment.\\ +(\lnsvalue{0.5}{0.4}{0.3} cm.) + +\item[\cmd{leftnamedist}] Distance between left of the frame and +(left of) \MSC, \HMSC, or \MSCdoc{} title.\\ +(\lnsvalue{0.3}{0.2}{0.1} cm.) + +\item[\cmd{levelheight}] +Height of a level.\\ +(\lnsvalue{0.75}{0.5}{0.4} cm.) + +\item[\cmd{lostsymbolradius}] +Radius of the lost and found symbols.\\ +(\lnsvalue{0.15}{0.12}{0.08} cm.) + +\item[\cmd{markdist}] +Horizontal distance from a mark to its instance.\\ +(\lnsvalue{1.0}{1.0}{1.0} cm.) + +\item[\cmd{measuredist}] +Horizontal distance from a measure to its (closest) instance.\\ +(\lnsvalue{1.0}{1.0}{1.0} cm.) + +\item[\cmd{measuresymbolwidth}] +Width of a measure symbol.\\ +(\lnsvalue{0.75}{0.6}{0.4} cm.) + +\item[\cmd{mscdocreferenceheight}] +Height of reference symbol in an \MSCdoc.\\ +(\lnsvalue{0.8}{0.7}{0.6} cm.) + +\item[\cmd{mscdocreferencewidth}] +Width of reference symbol in an \MSCdoc.\\ +(\lnsvalue{1.6}{1.4}{1.2} cm.) + +\item[\cmd{referenceoverlap}] +Overlap of reference symbol.\\ +(\lnsvalue{1.5}{1.0}{0.75} cm.) + +\item[\cmd{regionbarwidth}] +Width of region bars.\\ +(\lnsvalue{0.5}{0.4}{0.2} cm.) + +\item[\cmd{selfmesswidth}] Length of horizontal arms of self-messages, +self-orders, lost messages and found messages as well as horizontal +distance between instance axis and timer symbols.\\ +(\lnsvalue{0.75}{0.6}{0.4} cm.) + +\item[\cmd{stopwidth}] +Width of the stop symbol.\\ +(\lnsvalue{0.6}{0.5}{0.3} cm.) + +\item[\cmd{timerwidth}] +Width of the \emph{timer} symbols.\\ +(\lnsvalue{0.4}{0.3}{0.2} cm.) + +\item[\cmd{topheaddist}] +Distance between top of head symbols and frame.\\ +(\lnsvalue{1.5}{1.3}{1.2} cm.) + +\item[\cmd{topnamedist}] Distance between top of the frame and +(top of) \MSC, \HMSC, or \MSCdoc{} title.\\ +(\lnsvalue{0.3}{0.2}{0.2} cm.) + +\end{defs} + + +\section{lnternal lengths} + +The \mscpack{} uses some scratch lengths to perform +calculations. Below, these scratch lengths are listed. + +\begin{defs} +\item[\cmd{msc@commentdist}] Internal length to compute distance +between comments and instances. (This length should be removed in the +future.) + +\item[\cmd{msc@currentheight}] +The current height of the current \MSC{} environment. + +\item[\cmd{msc@currentwidth}] +The current width of the current \MSC{} environment. + +\item[\cmd{msc@totalheight}] +The final height of the current \MSC{} environment. + +\item[\cmd{msc@totalwidth}] +The final width of the current \MSC{} environment. + +\item[\cmd{tmp@X}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Xa}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Xb}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Xc}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Xd}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Y}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Ya}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Yb}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Yc}] +Scratch length for intermediate computations. + +\item[\cmd{tmp@Yd}] +Scratch length for intermediate computations. + +\end{defs} + +\section{Internal boxes} + +\begin{defs} + +\item[\cmd{mscbox}] +The box that contains the current \MSC{} just before it is put on paper. + +\item[\cmd{tmp@box}] +Scratch box for intermediate computations +\end{defs} + + +\section{Internal counters} + +\begin{defs} +\item[\cmd{mscinstcnt}] The \MSC{} instance counter. This counter is +increased each time an instance is created. + +\item[\cmd{tmpcnt}] Scratch counter for intermediate computations. + +\end{defs} + +\section{Limitations} + +\begin{enumerate} + +\item The frames in an MSC do not automatically scale with the text +inside the frame. However, the size of the frames can be set manually. + +\item Start and end points of messages are computed at the current +level. This can give ill-looking effects if the width of the bar of an +instance changes after the message is drawn, e.g., if an activation +region starts or ends after the message is drawn. + +\item Messages that cause the start of a region should be drawn after +the \verb|\regionstart| command, but in the same level. + +\item Messages that denote the end of a region should be +drawn before the \verb|\regionend| command. + +\item Activation regions make crossing messages partly invisible. A +solution for this problem is to first draw the instance foot symbols +at the right level (using \verb|\inststop{i}|), then back up the total +number of levels of the MSC (using \verb|\nextlevel[-n]|), and then +drawing the messages. + + +\item Documents using the \mscpack{} cannot be compiled with +\emph{pdflatex}. The reason for this is that \textsf{pstricks} is not +supported by \emph{pdflatex}. + +\item The source code of the \mscpack{} is only marginally +documented. Therefore, changes/improvements by others are unlikely. + +\end{enumerate} + +\section{Tricks} +\label{sec:tricks} + +In this section we describe some tricks to use the \mscpack{} +efficiently. + +\paragraph{Multi-line text arguments} +Many graphical objects in \MSC{} diagrams have text labels. In general, +the commands to draw these objects put the text arguments on one +line. If the text should consist of multiple lines, the \LaTeX{} +\cmd{parbox} command can be used. For instance, to generate a message +with a two-line label, write: + +\verb|\mess{\parbox{1cm}{two\\lines}}{s}{r}| + + +\paragraph{Specifying lengths} +The \mscpack{} imports the \textsf{calc} package in order to have a +more natural syntax for arithmetical expressions. Consequently, if a +command expects a \LaTeX{} length argument, it is possible to use the +expression syntax offered by \textsf{calc}. + +For example, consider the \MSC{} of +Figure~\ref{fig:specifying:lengths}. To make sure the comment for +instance~$j$ appears 1ex to the right of the \MSC{} frame, the value +of the optional \emph{pos} parameter of the \cmd{comment} command +should be +\[ \cmd{instdist} + \cmd{envinstdist} + 1\textrm{ex}. \] + +To express this in normal \LaTeX, one should write something like +\begin{verbatim} +\newlength{\l} +\setlength{\l}{\instdist} +\addtolength{\l}{\envinstdist} +\addtolength{\l}{1ex} +\msccomment[\l]{Comment for $j$}{j} +\end{verbatim} +inside the \MSC{} code. However, using \textsf{calc}'s expression +syntax, it is also possible to write +\begin{verbatim} + +\msccomment[\instdist + \envinstdist + 1ex]{Comment for $j$}{j} +\end{verbatim} +The complete code for the diagram of +Figure~\ref{fig:specifying:lengths} is given below. Since the +\textsf{calc} package is included in the standard \LaTeX{} +distribution, there should be no compatibility problems. +\begin{figure}[htb] +\begin{center} +\begin{msc}{Specifying lengths} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\declinst{k}{$k$}{} + +\nextlevel +\msccomment[\instdist + \envinstdist + 1ex]{Comment for $j$}{j} +\nextlevel[2] +\end{msc} + +\caption{Specifying lengths} +\label{fig:specifying:lengths} +\end{center} +\end{figure} + +{\small +\begin{verbatim} +\begin{msc}{Specifying lengths} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\declinst{k}{$k$}{} + +\nextlevel +\msccomment[\instdist + \envinstdist + 1ex]{Comment for $j$}{j} +\nextlevel[2] +\end{msc} +\end{verbatim} +} + +\paragraph{Level backup} +It is possible to back-up several levels: just use a negative value in +the \cmd{nextlevel} command. This \emph{feature} can be useful to draw +messages over regions instead of regions over messages. Compare the +diagrams of Figure~\ref{fig:level:backup}. The code for these diagrams +is given below. + +\begin{figure}[htb] +\begin{center} +\setmscvalues{small} +\begin{tabular}{cc} +\begin{msc}{Invisible message label} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\declinst{k}{$k$}{} + +\regionstart{activation}{j} +\nextlevel +\mess{Message a}{i}[0.25]{k}[2] +\nextlevel[2] +\regionend{j} +\nextlevel +\end{msc} + +& + +\begin{msc}{Level backup makes it visible} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\declinst{k}{$k$}{} + +\regionstart{activation}{j} +\nextlevel[3] +\regionend{j} +\nextlevel[-2]% backing up +\mess{Message a}{i}[0.25]{k}[2] +\nextlevel[2]% fast forward +\nextlevel +\end{msc} +\end{tabular} + +\caption{Level back-up} +\label{fig:level:backup} +\end{center} + +\end{figure} + +{\small +\begin{verbatim} +\begin{msc}{Invisible message label} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\declinst{k}{$k$}{} + +\regionstart{activation}{j} +\nextlevel +\mess{Message a}{i}[0.25]{k}[2] +\nextlevel[2] +\regionend{j} +\nextlevel +\end{msc} + + +\begin{msc}{Level backup makes it visible} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\declinst{k}{$k$}{} + +\regionstart{activation}{j} +\nextlevel[3] +\regionend{j} +\nextlevel[-2]% backing up +\mess{Message a}{i}[0.25]{k}[2] +\nextlevel[2]% fast forward +\nextlevel +\end{msc} +\end{verbatim} +} + + +\paragraph{Automatic resizing of actions} + +Consider the \MSC{} of Figure~\ref{fig:small:action}. The source code +for this diagram is: +{ +\small +\begin{verbatim} +\begin{msc}{small action} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\action{\parbox{1cm}{\centering Do it now}}{i} +\nextlevel[2] +\end{msc} +\end{verbatim} +} + +\begin{figure}[htb] +\begin{center} +\begin{msc}{small action} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\action{\parbox{1cm}{\centering Do it now}}{i} +\nextlevel[2] +\end{msc} +\end{center} + +\caption{Small action symbol} +\label{fig:small:action} +\end{figure} + +It is clear that the action symbol is too small for the action +label. The normal solution to this problem would be to change the +values of \cmd{actionwidth} and \cmd{actionheight} such that the +\cmd{parbox} containing the action label fits in the frame of the +action symbol. + +Instead of computing these lengths and adding the necessary +\cmd{setlength} commands manually, it would be nice to have a macro +that computes and adjusts the lengths as required. The \cmd{Action} macro +defined below does just that. +{ +\small +\begin{verbatim} +\newsavebox{\labelbox} +\newlength{\oldwd} +\newlength{\oldht} +\newcommand{\Action}[2]{% + \setlength{\oldwd}{\actionwidth}% + \setlength{\oldht}{\actionheight}% + \savebox{\labelbox}{#1}% + \setlength{\actionwidth}{\wd\labelbox + 2\labeldist}% + \setlength{\actionheight}{\ht\labelbox + \dp\labelbox + 2\labeldist}% + \action{\usebox{\labelbox}}{#2}% + \setlength{\actionwidth}{\oldwd}% + \setlength{\actionheight}{\oldht}% +} +\end{verbatim} +} Note that we define a box (\cmd{labelbox}) and two lengths +(\cmd{oldwd} and \cmd{oldht}) as scratch variables. Furthermore, +before changing the width and height of action symbols, the old values +are saved in \cmd{oldwd} and \cmd{oldht}, respectively. The new width +and height of action symbols accomodate for white space around the +action label by using the \mscpack{} length \cmd{labeldist}. After +changing the lengths, the action is drawn using the normal +\cmd{action} command. Finally, the old values of \cmd{actionwidth} and +\cmd{actionheight} are restored. + + +\newsavebox{\labelbox} +\newlength{\oldwd} +\newlength{\oldht} +\newcommand{\Action}[2]{% + \setlength{\oldwd}{\actionwidth}% + \setlength{\oldht}{\actionheight}% + \savebox{\labelbox}{#1}% + \setlength{\actionwidth}{\wd\labelbox + 2\labeldist}% + \setlength{\actionheight}{\ht\labelbox + \dp\labelbox + 2\labeldist}% + \action{\usebox{\labelbox}}{#2}% + \setlength{\actionwidth}{\oldwd}% + \setlength{\actionheight}{\oldht}% +} + +Figure~\ref{fig:resizing:action} shows the effect of automatic +resizing action symbols. Instance~$i$ has automically resizing +action. The actions of instance~$j$ are normal actions that show the +new \cmd{Action} command changes the size of one action symbol +only. The source of this diagram is given below. + +\begin{figure}[htb] +\begin{center} +\begin{msc}{small action} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\action{A}{j} +\Action{\parbox{1cm}{\centering Do it now}}{i} +\nextlevel[2] +\action{B}{j} +\nextlevel[2] +\end{msc} +\end{center} + +\caption{Automatic resizing action symbol} +\label{fig:resizing:action} +\end{figure} + + +{ +\small +\begin{verbatim} +\begin{msc}{small action} +\declinst{i}{$i$}{} +\declinst{j}{$j$}{} +\action{A}{j} +\Action{\parbox{1cm}{\centering Do it now}}{i} +\nextlevel[2] +\action{B}{j} +\nextlevel[2] +\end{msc} +\end{verbatim} +} + + +\bibliographystyle{plain} +\bibliography{biblio} + +\end{document} + |