% % 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