% single-valued dependency, i.e., A -> B \newcommand{\svd}[2]{\emph{#1} $\rightarrow$ \emph{#2}} % multivalued dependency, i.e., A ->> B \newcommand{\mvd}[2]{\emph{#1} $\twoheadrightarrow$ \emph{#2}} % a representation, i.e., R(T,S); second form has a subscript as second argument \newcommand{\Representation}[3]{\ensuremath{\mathfrak{#1}(#2,#3)}} \newcommand{\RepresentationS}[4]{\ensuremath{\mathfrak{#1}_{#2}(#3,#4)}} \newcommand{\Rep}[1]{\ensuremath{\mathfrak{#1}}} \newcommand{\RepS}[2]{\ensuremath{\mathfrak{#1}_{#2}}} % a description, i.e., D(V,T,S) \newcommand{\Description}[4]{\ensuremath{#1(#2,#3,#4)}} \newcommand{\rDescription}[5]{\ensuremath{#1(#2,\Representation{#3}{#4}{#5})}} \newcommand{\rDescriptionS}[6]{\ensuremath{#1(#2,\RepresentationS{#3}{#4}{#5}{#6})}} \newcommand{\shortDescription}[3]{\ensuremath{#1(#2,\mathfrak{#3})}} \newcommand{\shortDescriptionS}[4]{\ensuremath{#1(#2,\mathfrak{#3}_{#4})}} % a construct name \newcommand{\domain}[1]{\textsc{#1}} % elements D[e] and D[e:C] \newcommand{\Element}[2]{\ensuremath{ #1 \left[ #2 \right] }} \newcommand{\Elementt}[3]{\ensuremath{ #1 \left[ #2 : \domain{#3} \right] }} % constructs R[C] and R[C:X]; lowercase ones don't have the calligraphic 'R' on front \newcommand{\construct}[2]{\ensuremath{ #1 \left[ \domain{#2} \right] }} \newcommand{\Construct}[2]{\ensuremath{ \mathfrak{#1} \left[ \domain{#2} \right] }} \newcommand{\ConstructS}[3]{\ensuremath{ \mathfrak{#1}_{#2} \left[ \domain{#3} \right] }} \newcommand{\constructt}[3]{\ensuremath{ #1 \left[ #2 : \domain{#3} \right] }} \newcommand{\ConstructT}[3]{\ensuremath{ \mathfrak{#1} \left[ #2 : \domain{#3} \right] }} \newcommand{\ConstructTS}[4]{\ensuremath{ \mathfrak{#1}_{#2} \left[ #3 : \domain{#4} \right] }} % old notation % constructs R[C] and R[C:X]; lowercase ones don't have the calligraphic 'R' on front \newcommand{\oconstruct}[2]{\ensuremath{ #1 \left[ #2 \right] }} \newcommand{\oConstruct}[2]{\ensuremath{ \mathfrak{#1} \left[ #2 \right] }} \newcommand{\oconstructt}[3]{\ensuremath{ #1 \left[ #2 : \domain{#3} \right] }} \newcommand{\oConstructT}[3]{\ensuremath{ \mathfrak{#1} \left[ #2 : \domain{#3} \right] }} \newcommand{\oconstructx}[4]% {\ensuremath{ #1 \left[ #2 : \domain{#3} \mid \left\{ #4 \right\} \right] }} \newcommand{\oConstructX}[4]% {\ensuremath{ \mathfrak{#1} \left[ #2 : \domain{#3} \mid \left\{ #4 \right\} \right] }} \newcommand{\obigconstructx}[4]% {\ensuremath{ #1 \left[ \begin{array}{l} #2 : \domain{#3} \mid \\ \left\{ #4 \right\} \end{array} \right] } } \newcommand{\oBigConstructX}[4]% {\ensuremath{ \mathfrak{#1} \left[ \begin{array}{l} #2 : \domain{#3} \mid \\ \left\{ #4 \right\} \end{array} \right] } } % translation operators % overlay two math operators, thanks to Donald Arseneau \newcommand\mathoverlay[3]{% symbol, style, other symbol \ooalign{\hfil$#2#1$\hfil\cr\hfil$#2#3$\hfil\cr}} \newcommand\crossrightarrow{\mathrel{% I forgot this at first \mathpalette{\mathoverlay\rightarrow}{\raisebox{.5pt}{$\shortmid$}}% }} \newcommand\crossleftarrow{\mathrel{% \mathpalette{\mathoverlay\leftarrow}{\raisebox{.5pt}{$\shortmid$}}% }} \newcommand\crossleftrightarrow{\mathrel{% \mathpalette{\mathoverlay\leftrightarrow}{\raisebox{.5pt}{$\shortmid$}}% }} \newcommand\crossrightharpoonup{\mathrel{% \mathpalette{\mathoverlay\rightharpoonup}{\raisebox{.5pt}{$\shortmid$}}% }} \newcommand\crossleftharpoondown{\mathrel{% \mathpalette{\mathoverlay\leftharpoondown}{\raisebox{.5pt}{$\shortmid$}}% }} \newcommand\crossrightleftharpoons{\mathrel{% \mathpalette{\mathoverlay\rightleftharpoons}{\raisebox{.5pt}{$\shortmid$}}% }} \newcommand{\TransRight}{\ensuremath{\rightarrow}} \newcommand{\TransRightC}{\ensuremath{\overset{\circ}{\rightarrow}}} \newcommand{\TransRightH}{\ensuremath{\crossrightarrow}} \newcommand{\TransRightCH}{\ensuremath{\overset{\circ}{\TransRightH}}} \newcommand{\TransLeft}{\ensuremath{\leftarrow}} \newcommand{\TransLeftC}{\ensuremath{\overset{\circ}{\leftarrow}}} \newcommand{\TransLeftH}{\ensuremath{\crossleftarrow}} \newcommand{\TransLeftCH}{\ensuremath{\overset{\circ}{\TransLeftH}}} \newcommand{\TransLeftRight}{\ensuremath{\leftrightarrow}} \newcommand{\TransLeftRightC}{\ensuremath{\overset{\circ}{\leftrightarrow}}} \newcommand{\TransLeftRightH}{\ensuremath{\crossleftrightarrow}} \newcommand{\TransLeftRightCH}{\ensuremath{\overset{\circ}{\TransLeftRightH}}} \newcommand{\PTransRight}{\ensuremath{\rightharpoonup}} \newcommand{\PTransRightC}{\ensuremath{\overset{\circ}{\rightharpoonup}}} \newcommand{\PTransRightH}{\ensuremath{\crossrightharpoonup}} \newcommand{\PTransRightCH}{\ensuremath{\overset{\circ}{\PTransRightH}}} \newcommand{\PTransLeft}{\ensuremath{\leftharpoondown}} \newcommand{\PTransLeftC}{\ensuremath{\overset{\circ}{\leftharpoondown}}} \newcommand{\PTransLeftH}{\ensuremath{\crossleftharpoondown}} \newcommand{\PTransLeftCH}{\ensuremath{\overset{\circ}{\PTransLeftH}}} \newcommand{\PTransLeftRight}{\ensuremath{\rightleftharpoons}} \newcommand{\PTransLeftRightC}{\ensuremath{\overset{\circ}{\rightleftharpoons}}} \newcommand{\PTransLeftRightH}{\ensuremath{\crossrightleftharpoons}} \newcommand{\PTransLeftRightCH}{\ensuremath{\overset{\circ}{\PTransLeftRightH}}} % \newcommand{\CTransRight}{\ensuremath{\rightrightarrows}} % \newcommand{\CTransRightC}{\ensuremath{\overset{\circ}{\rightrightarrows}}} % \newcommand{\CTransRightH}{\ensuremath{\overset{\ast}{\rightrightarrows}}} % \newcommand{\CTransRightCH}{\ensuremath{\overset{\circledast}{\rightrightarrows}}} % % \newcommand{\CTransLeft}{\ensuremath{\leftleftarrows}} % \newcommand{\CTransLeftC}{\ensuremath{\overset{\circ}{\leftleftarrows}}} % \newcommand{\CTransLeftH}{\ensuremath{\overset{\ast}{\leftleftarrows}}} % \newcommand{\CTransLeftCH}{\ensuremath{\overset{\circledast}{\leftleftarrows}}} % % \newcommand{\CTransLeftRight}{\ensuremath{\rightleftarrows}} % \newcommand{\CTransLeftRightC}{\ensuremath{\overset{\circ}{\rightleftarrows}}} % \newcommand{\CTransLeftRightH}{\ensuremath{\overset{\ast}{\rightleftarrows}}} % \newcommand{\CTransLeftRightCH}{\ensuremath{\overset{\circledast}{\rightleftarrows}}} \newcommand{\HTransRight}{\ensuremath{\dashrightarrow}} \newcommand{\HTransRightC}{\ensuremath{\overset{\circ}{\dashrightarrow}}} \newcommand{\HTransLeft}{\ensuremath{\dashleftarrow}} \newcommand{\HTransLeftC}{\ensuremath{\overset{\circ}{\dashleftarrow}}} % \newcommand{\HTransLeftRight}{\ensuremath{\dashleftrightarrow}} % \newcommand{\HTransLeftRightS}{\ensuremath{\overset{\ast}{\dashleftrightarrow}}} % description translations \newcommand{\Translation}[2]{\ensuremath{#1 \TransRight #2}} \newcommand{\TranslationC}[2]{\ensuremath{#1 \TransRightC #2}} \newcommand{\TranslationH}[2]{\ensuremath{#1 \TransRightH #2}} \newcommand{\TranslationCH}[2]{\ensuremath{#1 \TransRightCH #2}} \newcommand{\LTranslation}[2]{\ensuremath{#1 \TransLeft #2}} \newcommand{\LTranslationC}[2]{\ensuremath{#1 \TransLeftC #2}} \newcommand{\LTranslationH}[2]{\ensuremath{#1 \TransLeftH #2}} \newcommand{\LTranslationCH}[2]{\ensuremath{#1 \TransLeftCH #2}} \newcommand{\LRTranslation}[2]{\ensuremath{#1 \TransLeftRight #2}} \newcommand{\LRTranslationC}[2]{\ensuremath{#1 \TransLeftRightC #2}} \newcommand{\LRTranslationH}[2]{\ensuremath{#1 \TransLeftRightH #2}} \newcommand{\LRTranslationCH}[2]{\ensuremath{#1 \TransLeftRightCH #2}} \newcommand{\Partial}[2]{\ensuremath{#1 \PTransRight #2}} \newcommand{\PartialC}[2]{\ensuremath{#1 \PTransRightC #2}} \newcommand{\PartialH}[2]{\ensuremath{#1 \PTransRightH #2}} \newcommand{\PartialCH}[2]{\ensuremath{#1 \PTransRightCH #2}} \newcommand{\LPartial}[2]{\ensuremath{#1 \PTransLeft #2}} \newcommand{\LPartialC}[2]{\ensuremath{#1 \PTransLeftC #2}} \newcommand{\LPartialH}[2]{\ensuremath{#1 \PTransLeftH #2}} \newcommand{\LPartialCH}[2]{\ensuremath{#1 \PTransLeftCH #2}} \newcommand{\LRPartial}[2]{\ensuremath{#1 \PTransLeftRight #2}} \newcommand{\LRPartialC}[2]{\ensuremath{#1 \PTransLeftRightC #2}} \newcommand{\LRPartialH}[2]{\ensuremath{#1 \PTransLeftRightH #2}} \newcommand{\LRPartialCH}[2]{\ensuremath{#1 \PTransLeftRightCH #2}} % \newcommand{\Complete}[2]{\ensuremath{#1 \CTransRight #2}} % \newcommand{\CompleteC}[2]{\ensuremath{#1 \CTransRightC #2}} % \newcommand{\CompleteS}[2]{\ensuremath{#1 \CTransRightS #2}} % \newcommand{\CompleteCS}[2]{\ensuremath{#1 \CTransRightCS #2}} % % \newcommand{\LComplete}[2]{\ensuremath{#1 \CTransLeft #2}} % \newcommand{\LCompleteC}[2]{\ensuremath{#1 \CTransLeftC #2}} % \newcommand{\LCompleteS}[2]{\ensuremath{#1 \CTransLeftS #2}} % \newcommand{\LCompleteCS}[2]{\ensuremath{#1 \CTransLeftCS #2}} % % \newcommand{\LRComplete}[2]{\ensuremath{#1 \CTransLeftRight #2}} % \newcommand{\LRCompleteC}[2]{\ensuremath{#1 \CTransLeftRightC #2}} % \newcommand{\LRCompleteS}[2]{\ensuremath{#1 \CTransLeftRightS #2}} % \newcommand{\LRCompleteCS}[2]{\ensuremath{#1 \CTransLeftRightCS #2}} % construct translations \newcommand{\CTranslation}[2]{\ensuremath{\Translation{#1}{#2}}} \newcommand{\CTranslationC}[2]{\ensuremath{\TranslationC{#1}{#2}}} \newcommand{\CTranslationH}[2]{\ensuremath{\TranslationH{#1}{#2}}} \newcommand{\CTranslationCH}[2]{\ensuremath{\TranslationCH{#1}{#2}}} \newcommand{\LCTranslation}[2]{\ensuremath{\LTranslation{#1}{#2}}} \newcommand{\LCTranslationC}[2]{\ensuremath{\LTranslationC{#1}{#2}}} \newcommand{\LCTranslationH}[2]{\ensuremath{\LTranslationH{#1}{#2}}} \newcommand{\LCTranslationCH}[2]{\ensuremath{\LTranslationCH{#1}{#2}}} \newcommand{\LRCTranslation}[2]{\ensuremath{\LRTranslation{#1}{#2}}} \newcommand{\LRCTranslationC}[2]{\ensuremath{\LRTranslationC{#1}{#2}}} \newcommand{\LRCTranslationH}[2]{\ensuremath{\LRTranslationH{#1}{#2}}} \newcommand{\LRCTranslationCH}[2]{\ensuremath{\LRTranslationCH{#1}{#2}}} \newcommand{\HTranslation}[2]{\ensuremath{#1 \HTransRight #2}} \newcommand{\HTranslationS}[2]{\ensuremath{#1 \HTransRightS #2}} \newcommand{\LHTranslation}[2]{\ensuremath{#1 \HTransLeft #2}} \newcommand{\LHTranslationS}[2]{\ensuremath{#1 \HTransLeftS #2}} % refinement \newcommand{\RefineRight}{\ensuremath{\mapsto}} % component of \newcommand{\Cpt}{\ensuremath{\in}} % dominates \newcommand{\Dominates}[2]{\ensuremath{#2 \preceq #1}} \newcommand{\Equivalent}[2]{\ensuremath{#1 \equiv #2}} % a chunk of SQL code, or an SQL keyword \newcommand{\sql}[1]{\texttt{#1}} % a Java class name \newcommand{\jclass}[1]{\textsf{#1}} % a PostgreSQL class name \newcommand{\pclass}[1]{\textsf{#1}} % blank figure \newcommand{\blankfigure}[1][5cm]% {\centering \framebox[#1][c]{\rule[-2cm]{0cm}{4cm}Figure to go here soon.}} % commands to set up rule and heuristic numbering % \newcommand{\enumrulest}{ \renewcommand{\theenumi}{T\arabic{enumi}} % \renewcommand{\labelenumi}{\textbf{\theenumi}} % } % \newcommand{\enumruless}{\renewcommand{\theenumi}{S\arabic{enumi}} % \renewcommand{\labelenumi}{\textbf{\theenumi}} % } % \newcommand{\enumheuristics}{\renewcommand{\theenumi}{H\arabic{enumi}} % \renewcommand{\labelenumi}{\textbf{\theenumi}} % } % \newcommand{\enumnormal}{\renewcommand{\theenumi}{\arabic{enumi}} % \renewcommand{\labelenumi}{\theenumi.} % } % % \newcommand{\eqnrulest}{\renewcommand{\theequation}{T\arabic{equation}} % \setcounter{equation}{0}} % \newcommand{\eqnruless}{\renewcommand{\theequation}{S\arabic{equation}} % \setcounter{equation}{0}} % \newcommand{\eqnheuristics}{\renewcommand{\theequation}{H\arabic{equation}} % \setcounter{equation}{0}} \newcommand{\eqnnormal}{\renewcommand{\theequation}{\thechapter.\arabic{equation}} \setcounter{equation}{0}} % table column types for maths % \newcolumntype{X}{>{\tiny}l<{\normalsize}} % \newcolumntype{Y}{>{\tiny}c<{\normalsize}} % \newcolumntype{Z}{>{\tiny}r<{\normalsize}} % \newcolumntype{L}{>{$}l<{$}} % \newcolumntype{C}{>{$}c<{$}} % \newcolumntype{R}{>{$}r<{$}} % \newcolumntype{P}{>{\PBS\raggedright\hspace{0pt}}p{6cm}} % \newcolumntype{Q}{>{\PBS\raggedright\hspace{0pt}}p{4cm}} % \newcolumntype{F}{>{\PBS\raggedright\hspace{0pt}}p{5cm}} % \newcolumntype{W}{p{0.97\columnwidth}} % fixes for raggedright table columns % \newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp} % table notes \newcommand{\tabnote}[1]{\textrm{\textsuperscript{#1}}} \newcommand{\tablenote}[3]{\multicolumn{#1}{p{0.97\columnwidth}}{\tabnote{#2} #3}} \newcommand{\tablenotehead}[2]{\multicolumn{#1}{p{0.97\columnwidth}}{\textbf{#2}}} \newcounter{tnote} \renewcommand{\thetnote}{\alph{tnote}} \newenvironment{tabnotes}[1]% { \vspace{\baselineskip} \begin{minipage}{0.95\columnwidth} \textbf{#1} \begin{list}{\thetnote}% { \setlength{\topsep}{0pt} \setlength{\itemsep}{0pt} \setlength{\parsep}{0pt} \usecounter{tnote} \renewcommand{\makelabel}[1]{\hfil{\textsuperscript{##1}}} } }% { \end{list} \end{minipage} } % set width of longtable captions to 80% of columnwidth % \setlength{\LTcapwidth}{0.8\columnwidth} % change line spacing for something that looks best in single-spacing \newcommand{\SingleSpace}{\renewcommand{\baselinestretch}{1.1} \normalsize} \newcommand{\OneHalfSpace}{\renewcommand{\baselinestretch}{1.5} \normalsize} % misc stuff \newcommand{\ER}{\mathit{E\textrm{-}R}} \newcommand{\Martin}{\mathit{ERD_{Martin}}} \newcommand{\Chen}{\mathit{ERD_{Chen}}} \newcommand{\MartinA}{\mathit{ERD_{Martin-A}}} \newcommand{\FD}{\mathit{FuncDep}} \newcommand{\Smith}{\mathit{FDD_{Smith}}} % \newcommand{\SmithS}{\mathit{FDD_{S/S}}} \newcommand{\SmithS}{\mathit{FDD_{Smith}}} \newcommand{\RM}{\mathit{Relational}} \newcommand{\SQL}{\mathit{SQL/92}} \newcommand{\DF}{\mathit{DataFlow}} \newcommand{\Gane}{\mathit{DFD_{G\&S}}} % \setlength{\multlinegap}{0pt} \newcommand{\UsedCars}{V_{\mathit{cars}}} \newcommand{\OINK}{V_{\mathit{agri}}} \newcommand{\Marks}{V_{\mathit{marks}}} % OzTeX logo % \input oztex % stuff for meta-models % \newcommand{\extends}{\textbf{specialises}} % \newcommand{\onecolmodel}[2]% % { \begin{tabular}{l} % \begin{minipage}{#1} % \sffamily % \input{#2} % \end{minipage} \\ % \end{tabular} % } % \newcommand{\twocolmodel}[1]% % { \begin{tabular}{l} % \begin{minipage}{0.9\columnwidth} % \setlength{\columnseprule}{0.4pt} % \begin{multicols}{2} % \sffamily % \input{#1} % \end{multicols} % \setlength{\columnseprule}{0pt} % \end{minipage} \\ % \end{tabular} % } % SIG notation % \newcommand{\Sedge}[1]{\ensuremath{\sigma_{\textrm{#1}}}} % \newcommand{\SedgeP}[1]{\ensuremath{\sigma_{\textrm{#1}}^{'}}} % \newcommand{\Total}% % { \setlength{\unitlength}{0.25mm} % \thinlines % \begin{picture}(22,14) % \put(3,4){\line(1,0){16}} % \put(7,-3){\line(0,1){14}} % \end{picture} % } % \newcommand{\Surjective}% % { \setlength{\unitlength}{0.25mm} % \thinlines % \begin{picture}(22,14) % \put(3,4){\line(1,0){16}} % \put(15,-3){\line(0,1){14}} % \end{picture} % } % a chunk of VML code % \newenvironment{vmlcode}[1][\tiny]% % {\renewcommand{\baselinestretch}{1.1} #1}% % {\renewcommand{\baselinestretch}{1.5} \normalsize \vspace{-\baselineskip}} % % \newenvironment{vmlcode}[1][]% % % {\renewcommand{\verbatimtabsize}{2} % % \renewcommand{\baselinestretch}{1.1} #1 \obeylines\@verbatimtab}% % % {\endtrivlist % % \renewcommand{\verbatimtabsize}{8} % % \renewcommand{\baselinestretch}{1.5} \normalsize} % a translation equation % \newenvironment{translation}[1][]% % {\edef\basetemp{\the\baselineskip}#1\baselineskip\basetemp \begin{displaymath}}% % {\end{displaymath}} % \catcode`*=11 % \newenvironment{translationml}[1][]% % {\edef\basetemp{\the\baselineskip}#1\baselineskip\basetemp \multline*}% % {\endmultline*} % \catcode`*=12 % \newenvironment{ERD}% { \thinlines \setlength{\unitlength}{1mm} \begin{picture}(16,38) }% {\end{picture}} \newcommand{\srcdst}% { \begin{picture}(16,38) \put(0,0){\makebox(16,10)[r]{\footnotesize \emph{Destination}}} \put(0,28){\makebox(16,10)[r]{\footnotesize \emph{Source}}} \end{picture} } \newcommand{\baseERD}% { \put(0,28){\framebox(16,10){}} \put(8,10){\line(0,1){18}} \put(0,0){\framebox(16,10){}} } \newcommand{\tmany}{\drawline(6,28)(8,24)(10,28)} \newcommand{\bmany}{\drawline(6,10)(8,14)(10,10)} \newcommand{\toone}{\put(7,26){\line(1,0){2}} \put(8,24){\circle{2}}} \newcommand{\boone}{\put(7,12){\line(1,0){2}} \put(8,14){\circle{2}}} \newcommand{\tmone}{\multiput(7,26)(0,-1){2}{\line(2,0){2}}} \newcommand{\bmone}{\multiput(7,12)(0,-1){2}{\line(2,0){2}}} \newcommand{\tomany}{\tmany \put(8,22){\circle{2}}} \newcommand{\bomany}{\bmany \put(8,16){\circle{2}}} \newcommand{\tmmany}{\tmany \put(7,23){\line(1,0){2}}} \newcommand{\bmmany}{\bmany \put(7,15){\line(1,0){2}}} \newcommand{\tannotate}[2][]{\put(0,28){\makebox(16,10)[#1]{\scriptsize \textsf{#2}}}} \newcommand{\bannotate}[2][]{\put(0,0){\makebox(16,10)[#1]{\scriptsize \textsf{#2}}}} \newcommand{\rannotate}[1]{\put(9,19){\makebox(0,0)[l]{\scriptsize \textsf{#1}}}} \newcommand{\tfk}{\tannotate[l]{FK} \put(2,31){\vector(0,-1){8}}} \newcommand{\tu}{\tannotate{U}} \newcommand{\tnn}{\tannotate[r]{NN}} \newcommand{\bfk}{\bannotate[l]{FK} \put(2,7){\vector(0,1){8}}} \newcommand{\bu}{\bannotate{U}} \newcommand{\bnn}{\bannotate[r]{NN}} % showgrid macro from LGC, p. 142 % \newpsobject{showgrid}{psgrid}{subgriddiv=1,griddots=10,gridlabels=6pt} % redefine label for listing environment to be scriptsize tt % \renewcommand{\listinglabel}[1]{\llap{\scriptsize\ttfamily\the#1}\hskip\listingoffset\relax} % a few lengths to use in \multirow commands \newlength{\mra} \newlength{\mrb} \newlength{\mrc} \newlength{\mrd} \newlength{\mre} \newlength{\mrf} % commands for cross-references in glossary % \newcommand{\see}[1]{(See \emph{#1}.)} % \newcommand{\seealso}[1]{(See also \emph{#1}.)} % humongous `}'s for use in tables \newlength{\BIGlen} \newcommand{\BIGL}[2][0cm]{ \setlength{\BIGlen}{#1} \divide\BIGlen by 2 $\left\}\text{ \rule[-\BIGlen]{0cm}{#1}#2}\right.$} \newcommand{\BIGR}[2][0cm]{ \setlength{\BIGlen}{#1} \divide\BIGlen by 2 $\left.\text{\rule[-\BIGlen]{0cm}{#1}#2 }\right\{$} % from LaTeX Graphics Companion, p. 49 % #1 x coordinate of reference point of brace in pt % #2 y coordinate of reference point of brace in pt % #3 rotation angle for large brace in degrees % #4 half total height of brace in mm \newcommand{\Bpara}[4]{ \begin{picture}(0,0)% \setlength{\unitlength}{1pt}% \put(#1,#2){\rotatebox{#3}{\raisebox{0mm}[0mm][0mm]{% \makebox[0mm]{$\left.\rule{0mm}{#4mm}\right\}$}}}}% \end{picture}% } % signature operators % \newcommand{\Sig}{\ensuremath{\operatorname{sig}}} % \newcommand{\SigU}[2]{\ensuremath{\Sig_{#2}(#1)}} % \newcommand{\SigF}[1]{\ensuremath{\overset{\rightarrow}{\Sig}(#1)}} % \newcommand{\SigR}[1]{\ensuremath{\overset{\leftarrow}{\Sig}(#1)}} % BNF commands % \renewcommand{\Production}{\mathrel{::=}} % VMLS operators % \newcommand{\Vright}{\texttt{=>>}} % \newcommand{\Vleft}{\texttt{<<=}} % \newcommand{\Vleftright}{\texttt{<=>}} % subsumes and restricts operators % \newcommand{\Subsumes}{\ensuremath{\overset{\varsigma}{\rightarrow}}} \newcommand{\Subsumes}{\rightarrow} \newcommand{\Restricts}{\ensuremath{\overset{\rho}{\rightarrow}}} % a list of constructs % \newenvironment{constructlist}% % { \begin{list}{}% % { \renewcommand{\makelabel}[1]{\hspace{0.5\leftmargin}\hfil{\domain{##1}}} % } % }% % { \end{list} % } % misc notation stuff for appendices % ERDs % \newcommand{\RegularEntity}% % { \begin{pspicture}(1.5,0.8) % \psframe(0,0)(1.5,0.8) % \end{pspicture} % } % \newcommand{\WeakEntity}% % { \begin{pspicture}(1.5,0.8) % \psframe[doubleline=true](0,0)(1.5,0.8) % \end{pspicture} % } % \newcommand{\AssociativeEntity}% % { \begin{pspicture}(1.5,0.8) % \psframe(0,0)(1.5,0.8) % \psline(0,0.4)(0.75,0)(1.5,0.4)(0.75,0.8)(0,0.4) % \end{pspicture} % } % % \newcommand{\lmone}{\psline(0.1,0.25)(0.1,0) \psline(0.2,0.25)(0.2,0)} % \newcommand{\roone}{\psline(1.4,0.25)(1.4,0) \pscircle(1.175,0.125){0.125}} % \newcommand{\rmone}{\psline(1.4,0.25)(1.4,0) \psline(1.3,0.25)(1.3,0)} % \newcommand{\rmany}{\psline(1.5,0.25)(1.25,0.125)(1.5,0)} % \newcommand{\romany}{\psline(1.5,0.25)(1.25,0.125)(1.5,0) \pscircle(1.025,0.125){0.125}} % \newcommand{\rmmany}{\psline(1.5,0.25)(1.25,0.125)(1.5,0) \psline(1.15,0.25)(1.15,0)} % % \newcommand{\Relationship}[2]% left, right % { \begin{pspicture}(1.5,0.25) % \psline(0,0.125)(1.5,0.125) #1 #2 % \end{pspicture} % } % \newcommand{\SubtypeParent}% % { \begin{pspicture}(1.5,0.4) % \psline(0,0.2)(1.5,0.2) % \psline(0.75,0.4)(0.75,0) % \end{pspicture} % } % \newcommand{\SubtypeChild}% % { \begin{pspicture}(1.5,0.25) % \psline(0,0.125)(1.5,0.125) % \end{pspicture} % } % % % DFDs % \newcommand{\ExternalEntity}[1][\psline(0.75,0)(1,0.25)]% % { \begin{pspicture}(1,1) % \psframe(0,0.1)(0.9,1) % \psframe[fillcolor=white,fillstyle=solid](0.1,0)(1,0.9) % \rput(0.2,0.8){\tiny\textsf{a}} % #1 % \end{pspicture} % } % \newcommand{\DataStore}[1][\psline(0.1,0)(0.1,0.8)]% % { \begin{pspicture}(1.5,0.8) % \psline(1.5,0.8)(0,0.8)(0,0)(1.5,0) % \psline(0.4,0)(0.4,0.8) % \rput(0.2,0.4){\tiny\textsf{Dn}} % #1 % \end{pspicture} % } % \newcommand{\RsrcStore}% % { \begin{pspicture}(1.5,0.8) % \psframe(0,0)(1.5,0.8) % \end{pspicture} % } % \newcommand{\Process}% % { \begin{pspicture}(1,1) % \psframe[framearc=0.1](0,0)(1,1) % \psline(0,0.75)(1,0.75) % \rput(0.5,0.875){\tiny\textsf{Pn}} % \end{pspicture} % } % \newcommand{\MultiProcess}% % { \begin{pspicture}(1,1) % \psframe[framearc=0.1,doubleline=true](0,0)(1,1) % \psline(0,0.75)(1,0.75) % \rput(0.5,0.875){\tiny\textsf{Pn}} % \end{pspicture} % } % % \newcommand{\DataFlow}% % { \begin{pspicture}(1.5,0.25) % \psline(0,0.125)(1.5,0.125) % \psline(1.25,0.25)(1.5,0.125)(1.25,0) % \end{pspicture} % } % \newcommand{\RsrcFlow}% % { \begin{pspicture}(1.5,0.25) % \psline[linestyle=dashed](0,0.125)(1.5,0.125) % \psline[linestyle=dashed](1.25,0.25)(1.5,0.125)(1.25,0) % \end{pspicture} % } % stuff for two-siding % \newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}} % \newcommand{\shortpage}{\enlargethispage{-\baselineskip}} % \newcommand{\longpage}{\enlargethispage*{\baselineskip}} % [sic] \newcommand{\sic}[1]{#1 [\emph{sic}]}