summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/streetex/stree.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/streetex/stree.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/streetex/stree.sty')
-rw-r--r--macros/latex/contrib/streetex/stree.sty669
1 files changed, 669 insertions, 0 deletions
diff --git a/macros/latex/contrib/streetex/stree.sty b/macros/latex/contrib/streetex/stree.sty
new file mode 100644
index 0000000000..5ada0b469c
--- /dev/null
+++ b/macros/latex/contrib/streetex/stree.sty
@@ -0,0 +1,669 @@
+%
+% treeTeX: a tool for drawing structural formulae
+%
+% by Strokov Igor (strokov@nioch.nsc.ru), Oct.--Nov. 1996
+%
+% WARNING: this package employs emTeX specials
+% (e.g., \special{em:lineto} for short lines)
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file may be freely distributed.
+% Changes are not welcome unless carefully commented
+% and reported to the author.
+%
+
+\def\treeTeX{stree\kern-0.134em\TeX}
+
+\def\znakf#1{\small #1}
+\newdimen\bondlen \bondlen=6.7mm
+\newcount\ue \newcount\sixue \newcount\dim \newcount\diam
+\newcount\dx \newcount\dy \newcount\tx \newcount\ty \newcount\px \newcount\py
+\newcount\sx \newcount\sy \newcount\rx \newcount\ry \newcount\lx
+\newcount\maxx \newcount\maxy \newcount\minx \newcount\miny
+\newcount\tmp \newcount\tmx \newcount\tmy \newcount\mdx \newcount\mdy
+\newcount\bmode \newcount\umode \newcount\lmode \newcount\pmode
+\newcount\dmode \newcount\wmode \newcount\wemm \newcount\dpmode
+\newcount\defwmode \defwmode=0
+
+\def\mod#1{\ifnum#1<0#1=-#1\fi}
+\def\advzn#1#2#3{\ifnum#3>0 \advance#1by#2 \else \advance#1by-#2 \fi}
+\def\pozn#1#2{\ifnum#1<0 #1=-#2 \else #1=#2 \fi}
+\def\mudi#1#2#3{\divide#1by5000\multiply#1by#2\divide#1by#3\multiply#1by5000}
+
+\def\vpered{\advance\px by\tmx \advance\py by\tmy \mudi\mdx56 \mudi\mdy56}
+\def\vlevo{\advance\px by-\tmy \advance\py by\tmx}
+\def\vpravo{\advance\px by\tmy \advance\py by-\tmx}
+\newif\ifshort \newif\ifmetka
+\def\linia{%\message{ line(\the\sx,\the\sy,\the\wmode) }
+ \dim=\mdx \ifnum\mdx=0 \dim=\mdy \fi
+ \ifcase\pmode %simple
+ \shortfalse
+ \ifnum\sx=0\else\ifnum\sy=0\else
+ \ifnum\dim<670000 \shorttrue \fi
+ \ifnum\sx<-6 \shorttrue \fi
+ \ifnum\sx>6 \shorttrue \fi
+ \ifnum\sy<-6 \shorttrue \fi
+ \ifnum\sy>6 \shorttrue \fi
+ \fi\fi
+ \ifnum\wmode=2 \shorttrue \fi
+ \ifnum\wemm=\wmode\else %\message{ em=\the\wemm, w=\the\wmode.}
+ \ifcase\wmode
+ \global\thinlines
+ \global\@wholewidth\fontdimen8\tenln
+ \put(\px,\py){\special{em:linewidth 0.4pt}}
+ \or
+ \global\thicklines
+ \global\@wholewidth\fontdimen8\tenlnw
+ \put(\px,\py){\special{em:linewidth 0.8pt}}
+ \or
+ \put(\px,\py){\special{em:linewidth 1.6pt}}
+ \fi
+ \global\@halfwidth .5\@wholewidth
+ \global\wemm=\wmode
+ \fi
+ \ifshort %\message{ short(\the\dim) }
+ \put(\px,\py){\special{em:moveto}}
+ {\advzn\px\mdx\dx \advzn\py\mdy\dy
+ \put(\px,\py){\special{em:lineto}}}
+ \else
+ \put(\px,\py){\line(\sx,\sy)\dim}
+ \fi
+ \or % 1 = dotted
+ \ifnum\mdx>\mdy
+ \tmp=\mdy \divide\tmp2 \advance\tmp\mdx
+ \else
+ \tmp=\mdx \divide\tmp2 \advance\tmp\mdy
+ \fi
+ \divide\tmp140000
+ \pozn\dx\mdx \divide\dx by\tmp \pozn\dy\mdy \divide\dy by\tmp
+ \tmx=\dx \divide\tmx3 \tmy=\dy \divide\tmy3
+ \advance\px\tmx \advance\py\tmy
+ \loop\ifnum\tmp>0
+ \put(\px,\py){\makebox(0,0){\vrule height0.67pt width0.67pt depth0pt}}
+ \advance\px by\dx \advance\py by\dy
+ \advance\tmp-1
+ \repeat
+ \or % 2 = vector
+ \ifnum\wmode=0
+ \put(\px,\py){\vector(\sx,\sy)\dim}
+ \else
+ \pozn\dx\mdx \pozn\dy\mdy
+ \tmx=\px \advance\tmx by\dx
+ \tmy=\py \advance\tmy by\dy
+ \ifnum\wemm=2
+ \tmp=\px \px=\tmx \tmx=\tmp
+ \tmp=\py \py=\tmy \tmy=\tmp
+ \fi
+ \divide\dx by20 \divide\dy by20
+ \advance\tmx by-\dy \advance\tmy by\dx
+ \mudi\dx25 \mudi\dy25
+ \tmp=5
+ \put(\px,\py){\special{em:linewidth 0.4pt}} \wemm=0
+ \loop\ifnum\tmp>0
+ \put(\px,\py){\special{em:moveto}}
+ \put(\tmx,\tmy){\special{em:lineto}}
+ \advance\tmx by\dy \advance\tmy by-\dx
+ \advance\tmp by-1
+ \repeat
+ \ifnum\wemm=2
+ \global\wemm=0
+ \else
+ \put(\px,\py){\special{em:linewidth 1.6pt}}
+ \global\wemm=2
+ \fi
+ \fi
+ \fi
+ \advance\pmode by\dpmode
+ \dpmode=0}
+
+\def\lowbond{%\message{ bond(\the\dx,\the\dy,\the\mdx,\the\mdy)[\the\bmode]}
+ \tmx=\mdx \tmy=\mdy \divide\tmx by2 \divide\tmy by2
+ \tmp=\tmy \ifnum\tmx>\tmy \tmp=\tmx \fi
+ \advance\tmp by\tmx \advance\tmp by\tmy %\message{ perp(\the\tmx,\the\tmy)(\the\ue/\the\tmp)}
+ \mudi\tmx\ue\tmp \ifnum\dx<0 \tmx=-\tmx \fi
+ \mudi\tmy\ue\tmp \ifnum\dy<0 \tmy=-\tmy \fi %\message{->(\the\tmx,\the\tmy)}
+ \ifcase\bmode
+ \ifnum\pmode=2\ifnum\wmode=1\ifnum\wemm=0\ifmetka\else
+ \mudi\mdx{19}{18} \mudi\mdy{19}{18}
+ \fi\fi\fi\fi
+ \linia
+ \or
+ \tmp=\tmx \divide\tmp by3 \advance\px by-\tmp
+ \tmp=\tmy \divide\tmp by3 \advance\py by-\tmp
+ \ifmetka\else
+ \mudi\mdx{19}{18} \mudi\mdy{19}{18}
+ \fi
+ {\vlevo\linia}\vpravo\linia
+ \or
+ \mudi\tmx45 \mudi\tmy45
+ {\linia\vlevo\vlevo\linia}\vpravo\vpravo\linia
+ \or
+ \linia\vlevo\vlevo\vpered\linia
+ \or
+ \linia\vpravo\vpravo\vpered\linia
+ \fi}
+
+\newif\ifresult
+\def\poslednii#1#2{\ifx#2\relax \toks0={#1} \let\next=\relax \else
+ \toks2=\expandafter{\the\toks2 #1} \let\next=\poslednii \fi \next#2}
+\def\lsubst#1{\toks2={}\poslednii#1\relax}
+\def\pervyi#1#2\konez{\toks0={#1}\toks2={#2}}
+\def\rsubst#1{\pervyi#1\konez}
+\def\tsthbox#1\hbox#2\relax{\resultfalse\ifx!#2!\else\resulttrue\fi}
+\def\tstcircle#1\circle#2\relax{\resultfalse\ifx!#2!\else\resulttrue\fi}
+
+\def\putznak#1{%
+ \tstcircle#1\circle\relax
+ \ifresult
+ \put(\tx,\ty){#1}
+ \else
+ \tmx=\tx \advance\tmx by-\lx \tmy=\ty \advance\tmy by\ry
+ \put(\tmx,\tmy){\makebox(0,0)[lt]{#1}}
+ \fi}
+
+\def\spacer#1{\rx=0 \lx=0 \ry=0
+ \tstcircle#1\circle\relax
+ \ifresult\else
+ \ifx!#1!\else %\message{ space(#1)(\the\dx,\the\dy,\the\dmode)}
+ \toks0={#1} \toks2={} \resultfalse
+ \ifnum\dmode=2
+ \resulttrue
+ \else
+ \edef\gum{\the\toks0}\edef\gumx{\gum}
+ \expandafter\tsthbox\gumx\hbox\relax
+ \fi
+ \tmp=\dx \ifnum\tmp=0 \tmp=1 \ifnum\dy=0 \tmp=-1 \fi \fi
+ \ifresult\else
+ \ifnum\dmode=1 \tmp=-\tmp \fi
+ \ifnum\tmp<0 \lsubst{#1} \else \rsubst{#1} \fi %\message{ 02(\the\toks0,\the\toks2)}
+ \fi
+ \if$\the\toks0 \toks0={#1} \toks2={} \fi
+ \setbox0=\hbox{\the\toks0} \lx=\wd0 \divide\lx by2
+ \ry=\ht0 \divide\ry by2
+ \setbox0=\hbox{\the\toks2} \rx=\wd0 \advance\rx by\lx
+ \ifnum\tmp<0 \tmp=\lx \lx=\rx \rx=\tmp \fi %\message{->(\the\ry,\the\lx,\the\rx)}
+ \fi
+ \fi}
+
+\def\short#1{\ifnum\dim=0\else \ifnum\ry=0\else %\message{ short(\the\dx,\the\dy)(\the\mdx,\the\mdy)(\the\ry,\the\lx,\the\rx)}
+ \tmp=\dx \ifnum#1=0 \tmp=-\tmp \fi
+ \ifnum\tmp<0 \tmp=\lx \else \tmp=\rx \fi
+ \tmx=\mdx \divide\tmx by10000 \multiply\tmx by\ry
+ \tmy=\mdy \divide\tmy by10000 \multiply\tmy by\tmp
+ \ifnum\tmx<\tmy
+ \dimen0=1.2\ry \tmx=\mdx \mudi\tmx{\dimen0}\mdy
+ \ifnum\lmode<2
+ \advance\mdy by-\dimen0 \advance\mdx by-\tmx
+ \fi
+ \ifodd#1
+ \advzn\py{\dimen0}\dy
+ \advzn\px\tmx\dx
+ \fi
+ \else
+ \tmy=\mdy \mudi\tmy\tmp\mdx
+ \ifnum\lmode<2
+ \advance\mdx by-\tmp \advance\mdy by-\tmy
+ \fi
+ \ifodd#1
+ \advzn\px\tmp\dx
+ \advzn\py\tmy\dy
+ \fi
+ \fi %\message{->(\the\mdx,\the\mdy)}
+\fi\fi}
+
+\def\chkminx{\ifnum\tmx<\minx \global\minx=\tmx \fi}
+\def\chkmaxx{\ifnum\tmx>\maxx \global\maxx=\tmx \fi}
+\def\chkminy{\ifnum\tmy<\miny \global\miny=\tmy \fi}
+\def\chkmaxy{\ifnum\tmy>\maxy \global\maxy=\tmy \fi}
+\def\adjminmax{\tmx=\tx \advance\tmx by\dx \tmy=\ty \advance\tmy by\dy
+ {\advance\tmx by-\lx \chkminx} \advance\tmx by\rx \chkmaxx
+ {\advance\tmy by-\ry \chkminy} \advance\tmy by\ry \chkmaxy}
+
+\def\trydiv#1#2{\tmp=#1\divide\tmp by#2\multiply\tmp by#2
+ \ifnum\tmp=#1\resulttrue\else\resultfalse\fi}
+\def\odin#1{\ifnum#1=0\else \ifnum#1<0 #1=-1 \else #1=1 \fi \fi}
+
+\newcount\psx \newcount\psy
+\def\ab#1[#2]{%\toks0={#2}\message{ ab(u=\the\ugol, m=\the\toks0, um=\the\umode, b=\the\bmode)}
+ \tmp=#1
+ \ifcase\umode\or
+ \advance\tmp by 18\or
+ \advance\tmp by 31\or
+ \ifnum\tmp=1 \tmp=13 \fi \ifnum\tmp=2 \tmp=13 \fi
+ \ifnum\tmp=4 \tmp=14 \fi \ifnum\tmp=5 \tmp=14 \fi
+ \ifnum\tmp=7 \tmp=15 \fi \ifnum\tmp=8 \tmp=15 \fi
+ \ifnum\tmp=10 \tmp=16 \fi \ifnum\tmp=11 \tmp=16 \fi
+ \fi \tmp=\tmp%\message{ ->(\the\tmp)}
+ \ifcase\tmp
+ \sx=0\sy=6\or \sx=3\sy=5\or \sx=5\sy=3\or
+ \sx=6\sy=0\or \sx=5\sy=-3\or \sx=3\sy=-5\or
+ \sx=0\sy=-6\or \sx=-3\sy=-5\or \sx=-5\sy=-3\or
+ \sx=-6\sy=0\or \sx=-5\sy=3\or \sx=-3\sy=5\or
+ \sx=0\sy=6\or
+ \sx=4\sy=4\or \sx=4\sy=-4\or \sx=-4\sy=-4\or \sx=-4\sy=4\or %13--16
+ \sx=0\sy=0 \wemm=\wmode \or %17
+ \sx=0\sy=6\or \sx=2\sy=6\or \sx=6\sy=2\or
+ \sx=6\sy=0\or \sx=6\sy=-2\or \sx=2\sy=-6\or
+ \sx=0\sy=-6\or \sx=-2\sy=-6\or \sx=-6\sy=-2\or
+ \sx=-6\sy=0\or \sx=-6\sy=2\or \sx=-2\sy=6\or %18--29
+ \or %30 -- let sx,sy remain
+ \sx=0\sy=6\or \sx=1\sy=6\or \sx=6\sy=1\or
+ \sx=6\sy=0\or \sx=6\sy=-1\or \sx=1\sy=-6\or
+ \sx=0\sy=-6\or \sx=-1\sy=-6\or \sx=-6\sy=-1\or
+ \sx=-6\sy=0\or \sx=-6\sy=1\or \sx=-1\sy=6\or %31--42
+ \fi %\message{ SXY(\the\sx,\the\sy)(\the\tmp)}
+ \dx=\sx \multiply\dx by\ue
+ \dy=\sy \multiply\dy by\ue
+ \ifnum\lmode=1 \mudi\dx53 \mudi\dy53 \fi
+ \ifnum\lmode=3 \mudi\dx13 \mudi\dy13 \fi
+ \mdx=\dx \mod\mdx \mdy=\dy \mod\mdy
+ \ifnum\mdx>\mdy \dim=\mdx \else \dim=\mdy \fi
+ \px=\tx \py=\ty %\message{ dxy(\the\dx,\the\dy)|\the\mdx,\the\mdy|\the\dim|}
+ \ifnum\sx=0 \odin\sy \else
+ \ifnum\sy=0 \odin\sx \else
+ \loop \resultfalse
+ \ifodd\sx\else \ifodd\sy\else
+ \divide\sx by2 \divide\sy by2 \resulttrue \fi \fi
+ \ifresult
+ \repeat %\message{ odd(\the\sx,\the\sy)}
+ \trydiv\sx3 \ifresult \trydiv\sy3 \fi
+ \ifresult \divide\sx by3 \divide\sy by3 \fi
+ \fi
+ \fi %\message{ sxy(\the\sx,\the\sy)}
+ \short1
+ \ifnum\lmode=2 %\message{ znak(#2)(\the\dx,\the\dy)}
+ \divide\dx by8 \divide\dy by8
+ \advance\px by\dx \advance\py by\dy
+ \toks0={c} \ifnum\dx>0 \toks0={l} \fi \ifnum\dx<0 \toks0={r} \fi
+ \toks2={c} \ifnum\dy>0 \toks2={b} \fi \ifnum\dy<0 \toks2={t} \fi
+ \edef\poz{[\the\toks0\the\toks2]} \def\mkbox{\makebox(0,0)}
+ \put(\px,\py){\expandafter\mkbox\poz{\znakf{#2}}}
+ \setbox0=\hbox{\znakf{#2}}
+ \ifnum\dy<0 \tmy=\py \advance\tmy by-\ht0 \chkminy \fi
+ \ifnum\dy>0 \tmy=\py \advance\tmy by\ht0 \chkmaxy \fi
+ \ifnum\dx<0 \tmx=\px \advance\tmx by-\wd0 \chkminx \else
+ \ifnum\dx>0 \tmx=\px \advance\tmx by\wd0 \chkmaxx \else
+ \tmp=\wd0 \divide\tmp by2
+ \tmx=\px \advance\tmx by\tmp \chkmaxx
+ \tmx=\px \advance\tmx by-\tmp \chkminx
+ \fi
+ \fi
+ \else
+ \ifnum\bmode=9
+ \tmx=\sx \multiply\tmx by\psy
+ \tmy=\sy \multiply\tmy by\psx
+ \bmode=3 \ifnum\tmx>\tmy \bmode=4 \fi
+ \fi
+ \psx=\sx \psy=\sy
+ \ifnum\lmode=3\else
+ \spacer{#2}
+ \short0
+ \fi
+ \ifx!#2!\metkafalse\else\metkatrue\fi
+ \ifnum\dim>0
+ {\lowbond}
+ \fi
+ \adjminmax
+ \ifnum\lmode=3\else
+ \advance\tx by\dx \advance\ty by\dy
+ \fi
+ \ifmetka
+ \ifnum\bmode=-2\else
+ \putznak{#2}
+ \fi
+ \fi
+ \fi
+ \sx=0 \sy=0
+ \bmode=0 \lmode=0 \pmode=0
+ \umode=0 \dmode=0
+ \wmode=\defwmode
+} %\global for use with commands
+
+\def\b#1{\@ifnextchar[{\ab#1}{\ab#1[]}}
+\def\bt#1{\ifnum\bmode=0 \bmode=#1 \advance\bmode by-1 \fi}
+\def\go{%
+ \ifnum\unitlength=1\else
+ \dimen0=1.3\unitlength \diam=\dimen0
+ \sixue=\unitlength \unitlength=1sp
+ \ue=\sixue \divide\ue by6
+ \global\minx=0 \global\miny=0 \global\maxx=0 \global\maxy=0
+ \wmode=-1
+ \fi
+ \tx=0 \ty=0}
+\def\og{\unitlength=\sixue sp}
+
+\newcount\ang \def\rot#1{\advance\ang by#1 \ifnum\ang>11\advance\ang by-12\fi}
+\def\bb#1{\bt#1\b}
+\def\ph#1{{\ang=#1\rot2 {\bt4\b\ang}\rot8 \b\ang\rot2 \bt5\b\ang\rot2
+ \b\ang\rot2 \bt5\b\ang\rot2 \b\ang}}
+\def\six#1{{\ang=#1\rot2 {\b\ang}\rot8 \b\ang\rot2 \b\ang\rot2
+ \b\ang\rot2 \b\ang\rot2 \b\ang}}
+\def\6{\six}
+\def\CO#1{{\bt2\b{#1}[O]}}
+\def\O{\CO}
+\def\COOH#1{{\ang=#1 \b\ang[C]
+ \ifnum\ang>6 \rot2 {\bt2\b\ang[O]} \rot8 \OH\ang
+ \else \rot2 \OH\ang \rot8 {\bt2\b\ang[O]}
+ \fi}}
+\def\OH#1{{\ifnum#1>6\b{#1}[HO]\else\b{#1}[OH]\fi}}
+\def\Me#1{{\ifnum#1>6\b{#1}[H$_3$C]\else\b{#1}[CH$_3$]\fi}}
+\def\tbx#1{{\ang=#1 \b\ang {\b\ang} \rot3 {\b\ang} \rot6 \b\ang}}
+\def\tbu#1{{\ang=#1 \b\ang \rot2 {\b\ang} \rot8 {\b\ang} \rot1 \b\ang}}
+\def\ip#1{{\ang=#1 \b\ang \rot2 {\b\ang} \rot8 \b\ang}}
+\def\kol#1{\bmode=-1 {\ab#1[\circle\diam]}\bmode=0}
+\def\pho#1{\six#1{\kol#1}}
+
+\def\isdigit#1{\tmp=-1 \ifx#11\tmp=1\else\ifx#12\tmp=2\else\ifx#13\tmp=3\else
+\ifx#14\tmp=4\else\ifx#15\tmp=5\else\ifx#16\tmp=6\else\ifx#17\tmp=7\else
+\ifx#18\tmp=8\else\ifx#19\tmp=9\else\ifx#10\tmp=0 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+%narg: 1=prefix, 2=dir, 3=label, 4=cmd, 6=sx,sy
+\newif\ifminus \newcount\ugol \newcount\narg
+\def\smetkoi{\b\ugol[}
+\def\treelow#1{\toks0={#1}%\message{ 1=(\the\toks0)(\the\narg)}
+ \let\nexttree=\treelow
+ \ifnum\narg=0
+ \ifx#1\konez \let\nexttree=\relax \narg=1 \fi
+ \ifx#1= \advance\bmode by1 \narg=1 \fi
+ \ifx#1< \bmode=3 \narg=1 \fi
+ \ifx#1> \bmode=4 \narg=1 \fi
+ \ifx#1? \bmode=9 \narg=1 \fi
+ \ifx#1: \advance\pmode by1 \narg=1 \fi
+ \ifx#1^ \pmode=2 \narg=1 \fi
+ \ifx#1. \bmode=-1 \lmode=2 \narg=1 \fi
+ \ifx#1~ \advance\bmode by-1 \narg=1 \fi
+ \ifx#1+ \minusfalse \sx=0 \narg=6 \fi
+ \ifx#1- \minustrue \sx=0 \narg=6 \fi
+ \ifx#1[ \begingroup \narg=1 \fi
+ \ifx#1] \endgroup \narg=1 \fi
+ \ifx#1* \advance\wmode by1 \narg=1 \fi
+ \ifx#1/ \advance\umode by1 \narg=1 \fi
+ \ifx#1, \umode=3 \narg=1 \fi
+ \ifx#1_ \lmode=1 \narg=1 \fi
+ \ifx#1' \lmode=3 \narg=1 \fi
+ \ifx#1` \advance\dmode by1 \narg=1 \fi
+ \ifx#1" \dpmode=1 \narg=1 \fi
+ \ifnum\narg=0
+ \ifcat\noexpand#1A
+ \narg=3
+ \else
+ \isdigit#1
+ \ifnum\tmp<0 \narg=4 \else
+ \ugol=\tmp \narg=2
+ \fi
+ \fi
+ \fi
+ \fi
+ \futurelet\nexttok\xnext
+}
+\def\xnext{%\message{ switch(\the\narg)}
+ \ifnum\narg=7
+ \isdigit\nexttok \tmp=\tmp %\message{ tst(\meaning\nexttok)->(\the\tmp (\the\sy))}
+ \ifnum\tmp<0
+ \ifminus \sy=-\sy \fi
+ \ugol=30 \narg=2
+ \else
+ \multiply\sy by10 \advance\sy by\tmp
+ \fi
+ \fi
+ \ifcase\narg
+ \or
+ \narg=0
+ \or %\message{ 2:dir=\the\ugol;}
+ \resultfalse
+ \ifx\nexttok\bgroup\else %\message{ !(}
+ \ifcat A\noexpand\nexttok \narg=3 \else %\message{ !(a}
+ \ifx\nexttok~ \let\nexttok=* \fi
+ \ifcat\relax\noexpand\nexttok \narg=4 \else %\message{ !(ac}
+ \resulttrue
+ \ifnum\ugol=1 %\message{ chk(\meaning\nexttok)}
+ \ifx\nexttok0 \ugol=10 \fi
+ \ifx\nexttok1 \ugol=11 \fi
+ \ifx\nexttok2 \ugol=12 \fi
+ \ifx\nexttok7 \ugol=17 \fi
+ \ifnum\ugol>1 \resultfalse \else
+ \ifnum\lmode=2 \narg=3 \resultfalse \fi
+ \fi
+ \else
+ \ifnum\lmode=2 \narg=3 \resultfalse \fi
+ \fi
+ \ifx\nexttok` \narg=0 \resultfalse \fi
+ \ifx\nexttok" \narg=0 \resultfalse \fi
+ \fi \fi \fi
+ \ifresult
+ \b\ugol[]
+ \narg=0
+ \fi
+ \or %\message{ 3:label=\the\toks0;}
+ \expandafter\smetkoi\the\toks0]
+ \narg=0
+ \or %\message{ 4:cmd;}
+ \edef\komanda{\the\toks0}
+ \ifx\nexttok\bgroup
+ \narg=5
+ \else
+ \komanda\ugol
+ \bmode=0 \lmode=0 \pmode=0 \umode=0 \dmode=0
+ \narg=0
+ \fi
+ \or %5
+ \def\cmdu{\komanda\ugol[}
+ \expandafter\cmdu\the\toks0]
+ \bmode=0 \lmode=0 \pmode=0 \umode=0 \dmode=0
+ \narg=0
+ \or %6 (
+ \ifx\nexttok+
+ \ifminus \sx=-\sx \fi
+ \minusfalse \sy=0 \narg=7
+ \else
+ \ifx\nexttok-
+ \ifminus \sx=-\sx \fi
+ \minustrue \sy=0 \narg=7
+ \else
+ \isdigit\nexttok
+ \multiply\sx by10 \advance\sx by\tmp
+ \fi
+ \fi
+ \fi %\message{->n(\the\narg)}
+ \ifnum\narg=5\else
+ \ifx\nexttok\bgroup\narg=3\fi
+ \fi
+ \nexttree}
+
+\newbox\strbox \newcount\vpos
+\def\tree#1{\treelow17#1 \konez\og}
+\def\astree[#1]#2{\vpos=0 \ifx#1b\vpos=1\fi \ifx#1t\vpos=2\fi
+ \begstr\tree{#2}\endstr}
+\def\stree{%\catcode`~=12
+ \@ifnextchar[{\astree}{\astree[c]}}
+%
+\def\begstr{\unitlength=\bondlen\setbox\strbox=\hbox\bgroup
+\begin{picture}(0,0)\go}
+%
+\def\endstr{\end{picture}\egroup\og %\message{ x(\the\minx..\the\maxx) y(\the\miny..\the\maxy) }
+\advance\maxx by-\minx \advance\maxy by-\miny \tmp=0
+\ifnum\vpos=0 \divide\maxy by2 \dimen0=0.5ex \tmp=\dimen0\fi
+\ifnum\vpos=1\else \advance\miny by\maxy \advance\miny by-\tmp\fi
+\setbox0\hbox to\maxx sp{\kern-\minx sp\lower\miny sp\box\strbox \hss}%
+\advance\maxy by\tmp \ht0=\maxy sp\advance\maxy by-\tmp
+\ifnum\vpos=1 \dp0=0pt\else\advance\maxy by-\tmp \dp0=\maxy sp\fi
+\ifnum\vpos=2 \ht0=0pt\fi
+\leavevmode\box0}
+%\catcode`~=13}
+
+%
+% former sprivate.sty
+%
+% масс-спектры ...
+%
+\newdimen\mzlen \mzlen=0.6pt
+\newcount\@mz \newcount\@int \newcount\mzmax
+\newcount\imax \imax=50 \newcount\msdir \msdir=1
+\newbox\mzbox
+\def\numfnt{\small}
+\def\mzlabel{ $m/z$}
+\def\mzl@w#1{\dy=\@int %\message{ 1=#1; 2=#2; 3=#3 (\the\dy); }
+ \multiply\dy by\imax \divide\dy by100 \pul(\@mz,0,0,\msdir){\dy}
+ \ifodd#1
+ \ifnum\msdir=1 \advance\dy by4 \puz(\@mz,\dy)bc{\numfnt\the\@mz}
+ \else \advance\dy by4 \puz(\@mz,-\dy)tc{\numfnt\the\@mz} \fi
+ \fi
+ \ifnum\@mz>\mzmax \global\mzmax=\@mz \fi}
+\def\pr@ceed#1{\ifx#1\k@nez \mzl@w0 \let\next=\relax \else
+ \ifx#1- \@mz=\@int \@int=0
+ \else\ifx#1, \mzl@w0 \@int=0 \advance\@mz by1
+ \else\ifx#1! \mzl@w1 \@int=0 \advance\@mz by1
+ \else \multiply\@int by10 \advance\@int by#1 \fi\fi\fi
+ \let\next=\pr@ceed \fi
+\next}
+\def\mass#1{\@mz=0 \@int=0
+ \pr@ceed#1\k@nez
+ \setbox0=\hbox{\numfnt99} \tmy=\ht0 \divide\tmy by\mzlen
+ \ifnum\msdir>0
+ \maxy=\imax \advance\maxy by4 \advance\maxy by\tmy
+ \miny=-7 \advance\miny by-\tmy
+ \else
+ \miny=-\imax \advance\miny by-4 \advance\miny by-\tmy
+ \fi
+ \global\miny=\miny \global\maxy=\maxy
+ \msdir=1}
+\def\scale#1#2{%
+ \ifx!#2!
+ \divide\mzmax by10 \advance\mzmax by1 \multiply\mzmax by10
+ \else
+ \mzmax=#1
+ \fi
+ \global\mzmax=\mzmax
+ \pul(-1,0,1,0)\mzmax
+ \@mz=50
+ \loop \ifnum\@mz<\mzmax
+ \pul(\@mz,0,0,-1)6
+ \ifodd#1 \puz(\@mz,-7)tc{\numfnt\the\@mz} \fi
+ \advance\@mz by50
+ \repeat
+ \dy=\mzmax \divide\dy by10
+ \multiput(0,0)(10,0)\dy{\line(0,-1)4}
+ \setbox\mzbox=\hbox{\mzlabel}
+ \puz(\mzmax,0)cl{\box\mzbox}
+ \tmp=\wd\mzbox \divide\tmp by\mzlen
+ \advance\mzmax by\tmp
+}
+\def\begms{\mzmax=0 \maxy=0 \miny=0 \unitlength=\mzlen
+\setbox\strbox=\hbox\bgroup\begin{picture}(0,0)}
+\def\endms{\end{picture}\egroup%\message{ (\the\mzmax, \the\miny, \the\maxy) }
+\advance\maxy by-\miny
+\ifnum\vpos=0 \divide\maxy by2 \advance\miny by\maxy \fi
+\setbox0\hbox to\mzmax\mzlen{\lower\miny\mzlen\box\strbox \hss}%
+\ht0=\maxy\mzlen
+\ifnum\vpos=0 \dp0=\maxy\mzlen \else \dp0=0pt\fi
+\leavevmode\box0}
+\def\@massp[#1]#2{\vpos=0 \ifx#1b \vpos=1 \fi
+ \begms\mass{#2}\scale1{}\endms}
+\def\massp{\@ifnextchar[{\@massp}{\@massp[c]}}
+
+%
+% CNMR
+\newdimen\mdlen \mdlen=0.0013in
+\newcount\md \newcount\mdl \newcount\py \newcount\dht \newcount\moda
+\def\xxx#1#2{\vrule width#1\unitlength height#2\unitlength}
+\def\pik{\tmp=5 \dht=5
+ \loop\ifnum\tmp>0
+ \ifnum\tmp>15 \xxx5\py \dht=-\dht \else \xxx5\tmp \fi
+ \advance\tmp by\dht
+ \repeat}
+\def\onecnmr#1{\let\nextcnmr=\onecnmr %\message{ 1=(#1)(\the\moda)}
+ \ifnum\moda>0
+ \advance\py by10
+ \puz(-\mdl,\py)bc{#1}
+ \moda=0
+ \else
+ \ifx#1\konez
+ \let\nextcnmr=\relax
+ \else
+ \py=0
+ \ifx#1s \py=100 \else
+ \ifx#1d \py=200 \else
+ \ifx#1t \py=300 \else
+ \ifx#1q \py=400 \else
+ \multiply\md by10 \advance\md by#1
+ \fi \fi \fi \fi %\message{ md=\the\md, ht=\the\py.}
+ \ifnum\py>0
+ \puz(-\md,0)bc\pik \mdl=\md \md=0
+ \fi
+ \fi
+ \fi
+ \futurelet\nexttok\tstnext}
+\def\tstnext{\ifx\nexttok\bgroup \moda=1 \fi \nextcnmr}
+
+\def\lineika{\vrule height0.05pt width\tmx\mdlen}
+\def\cnmrs{\@ifnextchar[{\@cnmrs}{\@cnmrs[c]}}
+\def\@cnmrs[#1]#2#3{\unitlength=\mdlen
+\vpos=0 \ifx#1b \vpos=1 \fi
+\setbox0=\hbox{\numfnt99}\tmy=\ht0 \divide\tmy by\mdlen \advance\tmy by35
+\tmx=#2 \advance\tmx by50
+\setbox\strbox=\hbox{\begin{picture}(\tmx,600)(-#2,-\tmy)%
+\md=0 \onecnmr#3\konez
+\tmx=0 \loop\ifnum\tmx<#2
+\pul(-\tmx,0,0,-1){20} \tmp=\tmx \divide\tmp by10
+\puz(-\tmx,-35)tc{\numfnt\the\tmp}%
+\advance\tmx by500\repeat
+\tmx=#2
+\puz(0,100)cl{\numfnt s}\puz(0,100)br{\lineika}
+\puz(0,200)cl{\numfnt d}\puz(0,200)br{\lineika}
+\puz(0,300)cl{\numfnt t}\puz(0,300)br{\lineika}
+\puz(0,400)cl{\numfnt q}%\puz(0,400)br{\lineika}
+\advance\tmx by50
+\put(50,0){\vector(-1,0)\tmx}%
+\end{picture}}%
+\tmy=0 \ifnum\vpos=0 \tmy=250 \fi
+\setbox0\hbox to\tmx\mdlen{\lower\tmy\mdlen\box\strbox \hss}%
+\dp0=\tmy\mdlen \advance\tmy by-550 \ht0=-\tmy\mdlen
+\leavevmode\box0}
+
+%
+% rpic
+\newdimen\picplus \picplus=1em % surrounds a picture
+\newdimen\razmer \newdimen\dive \newdimen\divetwo
+\def\@rpic[#1]#2{\setbox0=\hbox{#2}\setbox2=\hbox to \wd0{#1}%
+\razmer=\ht0 \advance\razmer by\dp0 \advance\razmer by\ht2
+\advance\razmer by\picplus \divetwo=\razmer \advance\divetwo by\baselineskip
+\advance\razmer by\dp2 \advance\razmer by\picplus
+\tmp=\razmer \divide\tmp by\baselineskip \advance\tmp by1
+\razmer=\wd0 \advance\razmer by\picplus
+\hangafter=-\tmp \hangindent=-\razmer
+\razmer=-\razmer \advance\razmer by\hsize
+\advance\razmer by\picplus
+\setbox0=\rlap{\kern\razmer \razmer=\wd0%
+\dive=\ht0\advance\dive by\baselineskip\lower\dive\box0%
+\kern-\razmer\lower\divetwo\box2}%
+\dp0=0pt\ht0=0pt\wd0=0pt%
+{\baselineskip=0pt\lineskip=0pt\box0\penalty10000}%
+}
+\def\rpic{\@ifnextchar[{\@rpic}{\@rpic[]}}
+
+%
+% local settings -- removed
+%\def\рис(#1){рис.~\ref{#1}}
+%\def\табл(#1){табл.~\ref{#1}}
+%\def\CNMR{$^{13}$C ЯМР}
+%\def\MYPC{PC AT 486 DX2-66}
+
+\def\longdown{{\unitlength=1em\begin{picture}(0,2)\put(0,1){\vector(0,-1){1.5}}\end{picture}}}
+\def\pul(#1,#2,#3,#4)#5{\put(#1,#2){\line(#3,#4){#5}}}
+\def\puz(#1,#2)#3#4#5{\put(#1,#2){\makebox(0,0)[#3#4]{#5}}}
+%
+\def\wider#1{\dimen255=#1\advance\hsize by\dimen255
+ \advance\textwidth by\dimen255
+ \divide\dimen255 by2 \advance\hoffset by-\dimen255}
+\def\higher#1{\dimen255=#1\advance\vsize by\dimen255
+ \advance\textheight by\dimen255
+ \divide\dimen255 by2 \advance\voffset by-\dimen255}
+
+%
+%verbatim
+\def\uncatcodespecials{\def\do##1{\catcode`##1=12 }\dospecials\catcode`\ =10}
+\def\sverb{\begingroup\tt\uncatcodespecials\frenchspacing\doverbatim}
+\def\doverbatim#1{\def\next##1#1{##1\endgroup}\next}
+
+% the end