Cant you just embed .SVG into TeX ? Then you can do the vector graphics
by some translation software from a more semantic description of your
diagram (and/ore from an simulation output)

D.

Timothy Miller wrote:
> It's 2AM.  What do you expect?
> 
> Anyhow, here it is.  It handles multiple lines, and I've even started
> on the vector-drawing thing that you need to draw causal relationships
> (although without an arrow head yet).
> 
> \newcount\tmgcellwidth
> \newcount\tmgcellhalfwidth
> \newcount\tmgcellquarterwidth
> \newcount\tmgcellheight
> \newcount\tmgcellhalfheight
> \newcount\tmglineskip
> \newcount\tmghsxa
> \newcount\tmghsya
> \newcount\tmghsxb
> \newcount\tmghsyb
> \newcount\tmghsxc
> \newcount\tmghsyc
> \newcount\tmgvty
> \newcount\tmgvtdy
> \newcount\tmgx
> \newcount\tmgy
> \newcount\tmgallh
> \newcount\tmgallw
> \newcount\tmglt
> \newcount\tmglb
> \newcount\tmghzx
> \newcount\tmghzy
> \newcount\tmgloopa
> \newcount\tmgloopb
> \newcount\tmgtmp
> \newcount\markonex
> \newcount\markoney
> \newcount\marktwox
> \newcount\marktwoy
> \newcount\markthreex
> \newcount\markthreey
> \newcount\markfourx
> \newcount\markfoury
> \tmgcellwidth=8
> \tmgcellhalfwidth=4
> \tmgcellquarterwidth=2
> \tmgcellheight=12
> \tmgcellhalfheight=6
> \tmglineskip=4
> \newcommand{\settmgcellheight}[1]{%
>    \tmgcellheight=#1%
>    \tmgcellhalfheight=#1%
>    \divide\tmgcellhalfheight 2}
> \newcommand{\settmgcellwidth}[1]{%
>    \tmgcellwidth=#1%
>    \tmgcellhalfheight=#1%
>    \divide\tmgcellhalfheight 2%
>    \tmgcellquarterheight=#1%
>    \divide\tmgcellquarterheight 4}
> % Params:{width}{height}{commands}
> \newcommand{\timing}[3]{
> \begingroup%
> \tmgx=0%
> \tmgallh=\tmgcellheight%
> \advance\tmgallh \tmglineskip%
> \multiply\tmgallh #2%
> \advance\tmgallh -\tmglineskip%
> \tmgy=\tmgallh%
> \advance\tmgy -\tmgcellheight%
> \tmgallw=#1%
> \multiply\tmgallw \tmgcellwidth%
> \tmglt=-1%
> \tmglb=-1%
> %\catcode`\^^M=13%
> \catcode`\\=13%
> %\def^^M{%
> %    \tmgx=0%
> %    \tmglt=-1%
> %    \tmglb=-1%
> %    \advance\tmgy -\tmgcellheight%
> %    \advance\tmgy -\tmglineskip}%
> %}%
> \def\\{%
>    \tmgx=0%
>    \tmglt=-1%
>    \tmglb=-1%
>    \advance\tmgy -\tmgcellheight%
>    \advance\tmgy -\tmglineskip}%
> \providecommand{\halfslope}{}%
> \renewcommand{\halfslope}[2]{%
>    \tmghsxa=\tmgx%
>    \tmghsya=\tmgy%
>    \advance\tmghsya ##1%
>    \tmghsxc=\tmgx%
>    \advance\tmghsxc \tmgcellhalfwidth%
>    \tmghsyc=\tmgy%
>    \advance\tmghsyc ##2%
>    \tmghsxb=\tmgx%
>    \advance\tmghsxb \tmgcellquarterwidth%
>    \tmghsyb=\tmghsya%
>    \advance\tmghsyb \tmghsyc%
>    \divide\tmghsyb 2%
>    \qbezier(\tmghsxa,\tmghsya)(\tmghsxb,\tmghsyb)%
>        (\tmghsxc,\tmghsyc)}%
> \providecommand{\vert}{}%
> \renewcommand{\vert}[2]{%
>    \tmgvty=##1%
>    \advance\tmgvty \tmgy%
>    \ifthenelse{##1 < ##2}{
>        \tmgvtdy=##2%
>        \advance\tmgvtdy -##1%
>        \put(\tmgx,\tmgvty){\line(0,1){\tmgvtdy}}}{%
>        \tmgvtdy=##1%
>        \advance\tmgvtdy -##2%
>        \put(\tmgx,\tmgvty){\line(0,-1){\tmgvtdy}}}}%
> \providecommand{\halfhoriz}{}%
> \renewcommand{\halfhoriz}[1]{%
>    \tmghzx=\tmgx%
>    \advance\tmghzx \tmgcellwidth%
>    \tmghzy=\tmgy%
>    \advance\tmghzy ##1%
>    \put(\tmghzx,\tmghzy){\line(-1,0){\tmgcellhalfwidth}}}%
> \providecommand{\horiz}{}%
> \renewcommand{\horiz}[1]{%
>    \tmghzy=\tmgy%
>    \advance\tmghzy ##1%
>    \put(\tmgx,\tmghzy){\line(1,0){\tmgcellwidth}}}%
> \providecommand{\slope}{}%
> \renewcommand{\slope}[2]{%
>    \ifthenelse{\tmglt<0}{\relax}{%
>        \halfslope{\tmglt}{##1}%
>        \halfslope{\tmglb}{##2}%
>        \halfhoriz{##1}\halfhoriz{##2}\next}
>    \tmglt=##1%
>    \tmglb=##2}%
> \providecommand{\jump}{}%
> \renewcommand{\jump}[2]{%
>    \ifthenelse{\tmglt<0}{\relax}{%
>        \vert{\tmglt}{##1}%
>        \vert{\tmglb}{##2}%
>        \horiz{##1}\horiz{##2}\next%
>        }%
>    \tmglt=##1%
>    \tmglb=##2}%
> \providecommand{\flip}{}%
> \renewcommand{\flip}{%
>    \tmghzy=\tmglt%
>    \tmglt=\tmglb%
>    \tmglb=\tmghzy}%
> \providecommand{\next}{}%
> \renewcommand{\next}{\advance\tmgx \tmgcellwidth}%
> \providecommand{\l}{}%
> \renewcommand{\l}[1][2]{
>    \tmgloopa=0%
>    \whiledo{\tmgloopa<##1}{%
>        \slope{0}{0}%
>        \advance\tmgloopa 1}}%
> \providecommand{\u}{}%
> \renewcommand{\u}[1][2]{
>    \tmgloopa=0%
>    \whiledo{\tmgloopa<##1}{%
>        \slope{\tmgcellheight}{\tmgcellheight}%
>        \advance\tmgloopa 1}}%
> \providecommand{\ul}{}%
> \renewcommand{\ul}[1][2]{
>    \tmgloopa=0%
>    \whiledo{\tmgloopa<##1}{%
>        \slope{0}{\tmgcellheight}%
>        \advance\tmgloopa 1}}%
> \providecommand{\z}{}%
> \renewcommand{\z}[1][2]{
>    \tmgloopa=0%
>    \whiledo{\tmgloopa<##1}{%
>        \slope{\tmgcellhalfheight}{\tmgcellhalfheight}%
>        \advance\tmgloopa 1}}%
> \providecommand{\x}{}%
> \renewcommand{\x}[1][2]{%
>    \tmgloopb=1%
>    \whiledo{\tmgloopb < ##1}{%
>    \ul[1]%
>    \advance\tmgx -\tmgcellhalfwidth%
>    \halfslope{0}{\tmgcellheight}%
>    \advance\tmgx \tmgcellhalfwidth%
>    \halfslope{0}{\tmgcellheight}%
>    \advance\tmgloopb 1}%
>    \ul[1]%
>    \advance\tmgx -\tmgcellhalfwidth%
>    \halfslope{0}{\tmgcellheight}%
>    \advance\tmgx \tmgcellhalfwidth}%
> \providecommand{\text}{}%
> \renewcommand{\text}[1]{%
>    \tmgloopa=\tmgx%
>    \advance\tmgloopa \tmgcellwidth%
>    \put(\tmgloopa,\tmgy){\makebox(\tmgallw,\tmgcellheight)[l]{##1}}}%
> \providecommand{\label}{}%
> \renewcommand{\label}[1]{%
>    \put(\tmgx,\tmgy){\makebox(\tmgallw,\tmgcellheight)[l]{##1}}}%
> \providecommand{\clock}{}%
> \renewcommand{\clock}[1]{%
>    \tmgloopa=0%
>    \jump{0}{0}%
>    \whiledo{\tmgloopa < ##1}{%
>        \jump{0}{0}\jump{\tmgcellheight}{\tmgcellheight}%
>        \advance\tmgloopa 1}}%
> \providecommand{\skip}{}%
> \renewcommand{\skip}[1][1]{%
>    \tmgloopa=##1%
>    \multiply\tmgloopa \tmgcellwidth%
>    \advance\tmgx \tmgloopa}%
> \providecommand{\mark}{}%
> \renewcommand{\mark}[1]{%
>    \ifthenelse{##1=1}{%
>    \markonex=\tmgx%
>    \markoney=\tmgy}{%
>    \ifthenelse{##1=2}{%
>    \marktwox=\tmgx%
>    \marktwoy=\tmgy}{%
>    \ifthenelse{##1=3}{%
>    \markthreex=\tmgx%
>    \markthreey=\tmgy}{%
>    \ifthenelse{##1=4}{%
>    \markfourx=\tmgx%
>    \markfoury=\tmgy}{\relax}}}}}%
> \providecommand{\markx}{}%
> \renewcommand{\markx}[1]{%
>    \ifthenelse{##1=1}{%
>    \tmgtmp=\markonex}{%
>    \ifthenelse{##1=2}{%
>    \tmgtmp=\marktwox}{%
>    \ifthenelse{##1=3}{%
>    \tmgtmp=\markthreex}{%
>    \ifthenelse{##1=4}{%
>    \tmgtmp=\markfourx}{\tmgtmp=0}}}}}%
> \providecommand{\marky}{}%
> \renewcommand{\marky}[1]{%
>    \ifthenelse{##1=1}{%
>    \tmgtmp=\markoney}{%
>    \ifthenelse{##1=2}{%
>    \tmgtmp=\marktwoy}{%
>    \ifthenelse{##1=3}{%
>    \tmgtmp=\markthreey}{%
>    \ifthenelse{##1=4}{%
>    \tmgtmp=\markfoury}{\tmgtmp=0}}}}}%
> \providecommand{\vec}{}%
> \renewcommand{\vec}[2]{%
>    \markx{##1} \tmghsxa=\tmgtmp%
>    \marky{##1} \tmghsya=\tmgtmp%
>    \markx{##2} \tmghsxc=\tmgtmp%
>    \marky{##2} \tmghsyc=\tmgtmp%
>    \advance\tmghsxa \tmgcellhalfwidth%
>    \advance\tmghsya \tmgcellhalfheight%
>    \advance\tmghsxc \tmgcellhalfwidth%
>    \advance\tmghsyc \tmgcellhalfheight%
>    \tmghsxb=\tmghsxa%
>    \advance\tmghsxb \tmghsxc%
>    \divide\tmghsxb 2%
>    \tmghsyb=\tmghsya%
>    \advance\tmghsyb \tmghsyc%
>    \divide\tmghsyb 2%
>    \qbezier(\tmghsxa,\tmghsya)(\tmghsxb,\tmghsyb)%
>        (\tmghsxc,\tmghsyc)}%
> \setlength{\unitlength}{1pt}%
> \begin{picture}(\tmgallw,\tmgallh)%
> #3%
> \end{picture}\endgroup}
> 
> 
> Try putting this into a document:
> 
> \timing{20}{2}{\label{f53}\mark{1}\skip\l\u\ul\flip\ul\\
> \z\z\mark{2}\x[4]\z\text{YYyy}\clock{4}\vec{1}{2}}
> 
> \timing{20}{6}{\label{clock}\skip[3]\clock{4}\\
> \label{f53}\skip[3]\l\u\ul\flip\ul\\
> \label{ews}\skip[3]\z\z\x[4]\z\text{YYyy}\\
> \label{fhd}\skip[3]\z[5]\flip\mark{2}\ul[4]\\
> \label{fhd}\skip[3]\ul[4]\flip\mark{1}\ul[5]\vec{1}{2}\\
> \label{fhd}\skip[3]\ul[1]\flip\ul[4]}
> 
_______________________________________________
Open-graphics mailing list
[email protected]
http://lists.duskglow.com/mailman/listinfo/open-graphics
List service provided by Duskglow Consulting, LLC (www.duskglow.com)

Reply via email to