summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/streetex
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
Initial commit
Diffstat (limited to 'macros/latex/contrib/streetex')
-rw-r--r--macros/latex/contrib/streetex/descript.ion4
-rw-r--r--macros/latex/contrib/streetex/memo.lat94
-rw-r--r--macros/latex/contrib/streetex/stree.sty669
-rw-r--r--macros/latex/contrib/streetex/stree_en.lat959
-rw-r--r--macros/latex/contrib/streetex/stree_en.pdfbin0 -> 147579 bytes
-rw-r--r--macros/latex/contrib/streetex/stree_ru.lat1141
6 files changed, 2867 insertions, 0 deletions
diff --git a/macros/latex/contrib/streetex/descript.ion b/macros/latex/contrib/streetex/descript.ion
new file mode 100644
index 0000000000..4d71600e8e
--- /dev/null
+++ b/macros/latex/contrib/streetex/descript.ion
@@ -0,0 +1,4 @@
+stree.sty the treeTeX
+stree_en.lat description in English
+stree_ru.LAT описание на русском
+memo.LAT 1-page treeTeX reference
diff --git a/macros/latex/contrib/streetex/memo.lat b/macros/latex/contrib/streetex/memo.lat
new file mode 100644
index 0000000000..129828a2c8
--- /dev/null
+++ b/macros/latex/contrib/streetex/memo.lat
@@ -0,0 +1,94 @@
+%
+%\documentstyle[art14,stree]{article}
+%
+\documentclass[12pt]{article}
+\usepackage{stree}
+
+\advance\textheight3.5cm \advance\vsize3.5cm
+\advance\voffset-1.5cm
+\pagestyle{empty}
+\begin{document}
+\def\<#1>{$\langle$#1$\rangle$}
+\def\1{\tt\symbol{123}}
+\def\2{\tt\symbol{125}}
+\bondlen=1.6em \large
+\centering
+
+\begin{tabular}{r|c|l}
+
+\<prefix> & \<{\bf direction}> & \<suffix>\\
+&&\\
+\hline
+&&\\
+\begin{tabular}[t]{c|c}
+\tt /&\stree{/2}\\
+\tt //&\stree{//2}\\
+\tt ,&\stree{,2}\\
+{\tt+} and {\tt-}&\\
+\hline
+\tt =&\stree{=3}\\
+\tt >&\stree{>3}\\
+\tt <&\stree{<3}\\
+\tt ==&\stree{==3}\\
+\tt ">&\stree{">3}\\
+\tt "<&\stree{"<3}\\
+\hline
+\tt \_&\stree{_3}\\
+\tt '&\stree{'3}\\
+\hline
+\verb"~"&invisible\\
+\verb"~~"&inv.\ label\\
+\tt :&\stree{:3}\\
+\tt *&\stree{*3}\\
+\tt **&\stree{**3}\\
+\verb"^"&\stree{^3}\\
+\verb"^*"&\stree{^*3}\\
+\hline
+\tt .&\stree{C.2*}
+\end{tabular}
+&
+\def\znakf#1{\tt #1}
+\begin{tabular}[t]{c}
+\stree{[0.00][1.1 1][2.22][3.33][4.44][5.55][6.66][7.77][8.88][9.99]%
+[10.10{10}][11.11{1\rlap1}]}\\
+\stree[t]{[,2.,2{,2}][,5.,5{,5}][,8.,8{,8}][,11.,11{,11}]}\\
+\stree[t]{[:1][:2][:4][:5][:7][:8][:10][:11]%
+[/1./1{/1}][/2./2{/2}][/4./4{/4}][/5./5{/5}][/7./7{/7}][/8./8{/8}]%
+[/10./10{/10}][/11./11{/11}]}\\
+\stree[t]{[:1][:2][:4][:5][:7][:8][:10][:11]%
+[//1.//1{//1}][//2.//2{//2}][//4.//4{//4}][//5.//5{//5}][//7.//7{//7}]%
+[//8.//8{//8}][//10.//10{//10}][//11.//11{//11}]}\\\\
+\begin{tabular}[t]{c|c}
+hours&offset\\\hline
+\tt0&\tt-0+6\\
+\tt1&\tt+3+5\\\hline
+\tt,2&\tt+4+4\\\hline
+\tt/1&\tt+2+6\\\hline
+\tt//1&\tt+1+6
+\end{tabular}
+\end{tabular}
+&
+\def\arraystretch{0.3}
+\begin{tabular}[t]{rl}
+\verb"3O"&\stree{3O}\\\\
+\verb"3{OH}"&\stree{3{OH}}\\\\
+\verb"3`{OH}"&\stree{3`{OH}}\\\\
+\verb"3``{OH}"&\stree{3``{OH}}\\\\
+\hline\\\\
+\verb"\ph"&\stree{3\ph'9}\\\\
+\verb"\pho"&\stree{3\pho'9}\\\\
+\verb"\6"&\stree{3\6'9}\\\\
+\verb"\tbu"&\stree{3\tbu}\\\\
+\verb"\ip"&\stree{3\ip}\\\\
+\verb"\COOH"&\stree{3\COOH}\\\\
+\verb"\OH"&\stree{3\OH}\\\\
+\verb"\O"&\stree{3\O'11'7}\\\\
+\verb"\Me"&\stree{3\Me}
+\end{tabular}
+\end{tabular}
+
+%\depththreshold=11
+%\breadthmax=33
+%\showlists
+
+\end{document} \ No newline at end of file
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
diff --git a/macros/latex/contrib/streetex/stree_en.lat b/macros/latex/contrib/streetex/stree_en.lat
new file mode 100644
index 0000000000..90e5718f1b
--- /dev/null
+++ b/macros/latex/contrib/streetex/stree_en.lat
@@ -0,0 +1,959 @@
+%
+% \documentstyle[12pt,stree]{article} % if LaTeX 2.09
+%
+\documentclass[12pt]{article}
+\usepackage{stree}
+%
+% WARNING: `stree' employs emTeX specials (em:lineto, etc.)
+%
+\begin{document}
+
+\def\<#1>{$\langle$#1$\rangle$}
+\def\UPSILON{\char'7}
+\def\XyM{X\kern-.30em\smash{\raise.50ex\hbox{\UPSILON}}\kern-.30em{M}}
+\def\XyMTeX{\XyM\kern-.1em\TeX}
+\def\ChemTeX{Chem\kern-0.1em\TeX}
+%\def\verb{\sverb}
+\def\CNMR{$^{13}$C NMR}
+
+\def\topfraction{.9}
+\def\bottomfraction{.9}
+\def\textfraction{.1}
+
+\font\twelvett=cmtt12
+%\def\tt{\twelvett}
+\def\0{\twelvett\symbol{92}}
+\def\1{\twelvett\symbol{123}}
+\def\2{\twelvett\symbol{125}}
+\def\4{\twelvett\symbol{36}}
+\def\5{\twelvett\symbol{95}}
+
+\pagestyle{myheadings}
+\thispagestyle{empty}
+
+\markright{macropackage for typesetting structural formulas with LaTeX}
+
+\begin{center}
+\LARGE
+One more macropackage for typesetting structural formul\ae\
+with \LaTeX
+
+\bigskip
+\bigskip
+\normalsize Igor Strokov$^*$
+
+\bigskip
+\small Novosibirsk Institute of Organic Chemistry, Siberian Division of
+Russian Academy of Sciences,\\
+Lavrentiev avenue~9, Novosibirsk~90, Russia
+\end{center}
+
+\bigskip
+\noindent
+A new macropackage for \LaTeX\ provides a high quality, easy and uniform
+typesetting of structural formulas of almost any complexity. The use of the
+new package called \treeTeX\ implies a depth-in traversal of a
+structure and description of bonds and vertex labels being passed. Additional
+features of \treeTeX\ include input of mass spectra and simple flow charts.
+
+\bigskip
+\noindent
+keywords: TeX, LaTeX, chemical structures
+
+\insert\footins{\small\rm $^*$ Tel: (3832) 354745,
+E-mail: strokov@nioch.nsc.ru}
+
+\clearpage
+
+\section{Introduction}
+
+The choice of tools for scientific publishing is not very wide: most often it
+is MS Word$^{\rm TM}$ or \TeX\ --- a typesetting language and system,
+developed in the beginning of 80--th by Knuth (Knuth, 1984). Briefly saying,
+\TeX\ is eminent because of the detailed account of aspects affecting
+document appearance and, therefore, the perfect quality, practically
+unreachable by modern word processors. From the other side, \TeX\ is not very
+comfortable for working with graphics, though it lets to import either
+various bitmaps (with sacrifice of device independence) or PostScript
+images. The last decision can lead to almost any visual effect but it
+requires special soft-- and/or hardware understanding PostScript. At the same
+time, \TeX\ itself is quite a powerful program language allowing to compose
+simple charts with the aid of pseudographical fonts. The most popular format
+of \TeX, \LaTeX\ (Lamport, 1984), can be said to establish a standard on the
+pseudographics use. Although most structural formulas of organic compounds
+can be fully typeset in this way, doing it by the direct use of \LaTeX\
+drawing commands is too laborious. There are at least three macros designed
+especially for chemical structures typesetting. Ramek's package (Ramek, 1990)
+is rather compact and easy in use, but it is distinctive by a
+formulas style which is rare in contemporary literature.
+More complex packages of Haas--O'Kane (Haas \& O'Kane, 1987) and Fujita
+(Fujita, 1994) are free from this drawback. Both of them have similar design
+based on a set of different macrocommands, each for a specific chemical
+fragment. Usually a command defines some ring system, whose inner bond types
+and substituents can be altered by means of command parameters. For example,
+in Fujita's \XyMTeX\ 5,5-dimethylcyclohexen-2-on-1 is entered as
+\verb"\cyclohexanev[b]{1D==O;5Sb==;5Sa==}", where {\tt[b]} specifies the C=C
+double bond, {\tt 1D==O} --- the carbonyl group, and {\tt 5Sb==;5Sa==} ---
+two methyl substituents. Here, like in other cases, a command name
+correlates to a compound's systematic notation, which facilitates
+understanding of a command meaning. From the other side, description of
+structures on the level of characteristic fragments has some disadvantages.
+First of all, such fragments are that numerous, so any significant covering
+of their set is practically unreacheable. This task is not fulfilled in both
+\ChemTeX\ and \XyMTeX, nevertheless the complete description of each one forms
+quite a volume book. Additionally, in cases when a formula consists of many
+fragments, their disposal on one figure becomes a tiresome task of
+coordinates calculation for nodes to be linked.
+
+Therefore, making a description on a lower level of distinct bonds (after
+Ramek's steps) seems to be more appropriate. Bonds diversity compared to
+that of characteristic fragments is drastically lower, therefore formulas
+typesetting in terms of bonds promises to be more simple and universal. On
+the back side there is a possible loss of input speed and convenience.
+However, author's experience gave no such evidences. To support
+this statement let us examine how exactly structural formulas are entered
+in a new macropackage called {\em\treeTeX.}
+
+Following the \TeX\ programmers' tradition, the new package name receives the
+common logo. The other part of the notation reflects the new approach
+essense: a chemical \underline{s}tructure is regarded as a bond
+\underline{tree} which is
+traversed in a depth-first order. The complete \treeTeX\ constitutes single
+file {\tt stree.sty}, whose usage is common to other style files in \LaTeX.
+
+%Thus, the first line in this document looks like:
+%\begin{verbatim}
+%\documentstyle[12pt,stree]{article}
+%\end{verbatim}
+
+\section{Basics}
+
+All the input in \treeTeX\ is held through single command \verb"\stree{}". A
+formula description containing inside brackets is composed in the following
+way: starting from any vertex
+one have to traverse all the structure moving along bonds and describing both
+the passing bonds and verteces labels met on the route. For example, the
+formula of 1-hydroxy-4-methylpyridine
+$$
+\stree{{HO}20>242\Me>68N>10}
+$$
+is entered as \verb"\stree{{HO} 2 0 >2 4 [2{CH$_3$}] >6 8N >10}".
+Starting the traversal with vertex OH one have to first input
+its label: \verb"{HO}". A label is embraced in figure
+brackets if it contains more than one token. The next character {\tt 2}
+means: draw a bond in a direction at 2 o'clock on a 12-hours
+clockface. A traversal always has a current point (vertex). Setting a
+direction of a bond causes the current point to be shifted to the next vertex
+of this bond. E.\ g.,\ after character {\tt2} a ring vertex becomes current.
+Character {\tt0} refers to the next bond at 0 o'clock (or upward). Then goes
+a double bond at 2 o'clock. If a bond is not single, then one or more tokens
+(so called {\em prefixes\/}) are put before its direction to specify
+bond features. A double bond may be displayed in several ways. In our case it
+is desirable to draw the second line to the right from the main one. This
+very effect is achieved by prefix {\tt>} (the right angle bracket).
+
+The next single bond at 4 hours leads to a substituted vertex of the ring.
+Let us describe the substituent first. Construction \verb"[2{CH$_3$}]"
+fulfills this goal as follows: opening bracket {\tt[} marks a current
+vertex, 2-hours bond goes to vertex CH$_3$ (\verb"{CH$_3$}" is the label
+description), finally closing bracket {\tt]} retrieves the marked
+vertex. A methyl group is quite common although sequence
+\verb"{CH$_3$}" is not very easy to input. A shorter command
+\verb"\Me" may be used instead, so that \verb"2\Me" is equivalent to
+\verb"[2{CH$_3$}]" (any other number designating a bond direction may take
+place of digit {\tt2} here).
+
+After setting a substituent the traversal may be continued. Three bonds
+remain: at 6, 8, and 10 hours. The 6 and 10-hours bonds are double, drawn
+inside a cycle, which is indicated by prefix {\tt>}. The 8-hours bond leads
+to a vertex labelled ``N'', therefore {\tt N} follows immediately
+after {\tt8}. Figure brackets are needless here because the label is composed
+of a single token.
+
+In this example token groups related to different
+bonds are separated by spaces. Though spaces are not obligatory
+(\verb"\stree{{HO}20>242\Me>68N>10}" is also correct), one may use them to
+make an input more readable. However, a space is illicit before a
+label or a command. In our example writing \verb"8 N" (also \verb"2 {CH$_3$}"
+or \verb"2 \Me") would cause an error. In one position, however, a {\sl
+binding\/} space is required: between digit {\tt1} designating a 1-hour
+direction and following another digit (it prevents missing, say, two ones
+with eleven).
+
+\section{Formal description}
+
+Now let us try to state more rigorously the basic rules just introduced. An
+argument of \verb"\stree" is composed of descriptions of distinct bonds. To
+describe a bond one have to specify at least its direction --- most often it
+is a number of hours on a clockface. One or more prefix(es) modifying a bond
+length, degree, appearance, etc.,\ may precede a direction. If a bond leads
+to a labelled vertex, then the label must follow the direction. A command (in
+\TeX's terms --- something starting with {\tt\0}) may take place of a label,
+allowing to shorter set the same structural fragment.
+Here a label or a command is regarded as a bond attribute called {\em a
+suffix\/} due to its terminal position. In contrast to prefixes, a bond may
+have only one suffix. Besides, suffix is never preceded by a space. The form
+\<possible prefix(es)>\<direction>\<possible suffix> may resemble a common
+verbal explanation of a traversal: {\sl such-and-such\/} bond at {\sl
+that\/} o'clock leads to {\sl so-and-so\/} label (only words like {\sl
+such-and-such\/} are substituted by conditional tokens).
+
+\def\is{$\longrightarrow$ }
+\def\ili{\vrule{} }
+
+A question may arise: how to distinguish the current bond suffix from a prefix
+(or a direction) of the next bond? Spaces generally affect
+only a visual perception, while a computer most often ignores them obeying the
+following syntax rules given below. (The Backus--Naur form, where an arrow
+\is\ means ``is defined as'' and token \ili\ means ``or'', is used.) Let us
+start from definition of \<structure>, i.\ e.,\ of an argument of command
+\verb"\stree".
+
+\begin{description}
+\item[]
+\<structure> \is \<none> \ili \<bond>\<structure> \ili\\
+ \<structure>{\tt[}\<structure>{\tt]}\<structure>
+\end{description}
+%
+It is just a formal way to say an argument to be composed from distinct
+bonds descriptions and to contain coupled and possibly nested square
+brackets. Then a definition of \<bond> itself follows:
+
+\begin{description}\frenchspacing
+
+\item[]
+\<bond> \is \<possible prefix(es)>\<direction>\<possible suffix>%
+\<possible space(s)>
+
+\item[]
+\<possible prefix(es)> \is
+\<prefix>\<possible prefix(es)> \ili \<none>
+
+\item[]
+\<prefix> \is {\tt / \ili , \ili = \ili >
+\ili < \ili \_ \ili ' \ili ` \ili \verb"~" \ili " \ili . \ili : \ili
+* \ili \verb"^"}
+
+\item[]
+\<possible suffix> \is \<command> \ili \<label> \ili \<none>
+
+\item[]
+\<label> \is {\1}\<any sequence of tokens>{\2} \ili
+\<any character other than digit or prefix>
+
+\item[]
+\<direction> \is
+\<hours direction> \ili \<offsets direction>
+
+\item[]
+\<hours direction> \is {\tt 0 \ili
+1\<{\rm delimiter}> \tt \ili 2 \ili
+3 \ili 4 \ili 5 \ili 6 \ili 7
+\ili 8 \ili 9 \ili 10 \ili 11 \ili 12}
+
+\item[]
+\<{\rm delimiter}> \is \<space>, if the next token is a digit,
+otherwise \<none>.
+
+\item[]
+\<offsets direction> \is \<sign>\<cardinal number>%
+\<sign>\<cardinal number>
+
+\item[]
+\<plus or minus> \is {\tt +} \ili {\tt -}
+
+\end{description}
+%
+These rules eventually expand
+syntax elements in angular brackets either to definite tokens or something
+seemingly requiring no further explanation. Nothing is said, however, on
+meaning of prefixes or what \<offsets direction> means. Semantics of
+distinct syntax elements is systematically explored in the following three
+sections.
+
+\subsection{Prefixes}
+
+\begin{table}[tbh]\centering
+{\bf Table 1.} Prefixes.\par
+\medskip
+\begin{tabular}{c|c|c|c}
+prefix&feature&view&category\\ \hline\hline
+\tt /&skew&\stree{/2}&\\ \cline{1-3}
+\tt //&very skew&\stree{//2}&direction\\ \cline{1-3}
+\tt ,&at 45$^\circ$&\stree{,2}&prefixes\\ \cline{1-3}
+{\tt+} {\tt-}&\<sign> in offsets directions&&\\
+\hline\hline
+\tt =&double centered&\stree{=3}\\ \cline{1-3}
+\tt >&double right&\stree{>3}&\\ \cline{1-3}
+\tt <&double left&\stree{<3}&bond\\ \cline{1-3}
+\tt ==&triple &\stree{==3}&degrees\\ \cline{1-3}
+\tt ">&right delocalized&\stree{">3}&\\ \cline{1-3}
+\tt "<&left delocalized&\stree{"<3}&\\
+\hline\hline
+\tt \_&long ($5/3$ normal)&\stree{_3}&bond\\ \cline{1-3}
+\tt '&short ($1/3$ normal)&\stree{'3}&length\\
+\hline\hline
+\verb"~"&invisible &\\ \cline{1-3}
+\verb"~~"&invisible label&\\ \cline{1-3}
+\tt :&dotted&\stree{:3}&visual\\ \cline{1-3}
+\tt *&bold&\stree{*3}&effects\\ \cline{1-3}
+\verb"^"&arrow&\stree{^3}\\ \cline{1-3}
+\verb"^*"&sphenoid&\stree{^*3}\\
+\hline\hline
+\tt .&short invisible&\stree{C.2*}&used for marks
+\end{tabular}
+\end{table}
+
+Previously we already used prefix {\tt>} to specify double
+bonds. The full list of prefixes is given in Table 1. All the prefixes are
+divided into four categories due to their effect
+on a bond direction, type, length, or appearance.
+Prefixes of different categories can be combined with each other. For
+example, a result of \verb"\stree{_/:=4}" is a long skew dotted double bond
+at 4 o'clock: \stree{_=:/4}\ Let us consider, however, more helpful cases of
+prefixes use.
+
+Prefix {\tt.}\ (point) is especially designed to set numbers or similar
+symbols of vertices. E. g.,\ to obtain the following formula
+with numbered vertices \stree{{HO}.01 2.02 4.03 2{OH}.04}\ one have to
+enter \0stree\1\1HO\2 .01 2 .02 4 .03 2\1OH\2 .04\2\rm\ (all spaces are
+dispensable here). In the full agreement with the form
+\<prefix>\<direction>\<suffix> a construction like {\tt.01} means the
+following: put a {\sl short invisible\/} bond at {\sl 0 hours\/} and set
+label ``1''. Meantime, use of this prefix has two features: 1)
+a current vertex is not changed, and 2) a direction preceded
+by a point {\sl must\/} be followed by a label. Moreover, {\sl any\/}
+character at this place is necessarily regarded as a label. It allows not to
+take, say, digit ``1'' in figure brackets without risk of missing it with a
+1-hour direction.{\sloppy\par}
+
+Symbols of vertices are usually smaller than other characters.
+A corresponding font definition is hold in macro \verb"\numfnt"
+which normally equals to \verb"\small". By changing it to, say,
+\verb"\mit" one can further mark vertices with math symbols
+just writing something like {\tt.0a} (evidently, a font for every label can
+be specified also explicitly, e.\ g.,\ \verb".0{\bf 9}").
+
+%{\samepage
+\rpic{\stree{:1:3:5^*7**9*^11}}
+Three other prefixes were used to typeset the dummy
+stereoformula in this paragraph: \verb"\stree{:1 :3 :5 *^7 **9 *^11}" (a
+result of a clockwise traversal starting from the left vertex). Here the
+use of colon {\tt:} to draw dotted bonds is quite transparent. It is worth to
+note the same combination \verb"*^" to produce first time a widening sphenoid
+bond and second time --- a narrowing one according to a previous bond
+thickness. Such a program acumen is welcome until one need to explicitly
+specify a bond shape. The simplest way to get control over it is to
+insert a void bond of a complementary thickness. Thus, the isolated
+narrowing bond \stree{**17 *^3}\ is input as \verb"\stree{**17 *^3}", where
+17 means an ``unexistent'' direction corresponding to a void bond of a null
+length.
+
+Please note also the lower bond to be {\sl very\/} bold (input with
+two {\tt*}). Merely bold bonds (introduced with one {\tt*}) are twice as
+thin, and doubly bolder than common ones. The normal thickness ({\tt 0.4 pt})
+is enough for paper documents. However, such output might look too pale
+on a transparent film. To obtain a more bold formula one may either use
+{\tt*} before every bond or say \verb"\defwmode=1" in the beginning of a
+document (\verb"\defwmode=0" returns the normal thickness).
+
+Prefix {\tt'} (apostrophe) allows to input short ``dashes''
+usually denoting free valences in fragments. For example,
+\verb"\stree{'8'0 4'6 2N '0'4}" gives formula
+\stree{'8'0 4'6 2N '0'4}. A short bond, like
+short invisible one, do not alter a current vertex.
+
+A pure invisibility can be achieved by prefix \verb"~"
+(a tilde). Invisible bonds well conform to unconnected formulas.
+E. g., reaction scheme
+$$\stree{{H$_2$C} =3{CH$_2$} ~6{CH$_2$} =9{H$_2$C}}
+\quad\longrightarrow\quad \stree{3690}$$ can be input as
+\begin{verbatim}
+\stree{{H$_2$C}=3{CH$_2$} ~6{CH$_2$}=9{H$_2$C}}
+\quad\longrightarrow\quad \stree{3690}
+\end{verbatim}
+The invisibility is also helpful for alignment purposes. The main idea is to
+poise beetling substituents with their invisible counterparts. Let the
+following three isomers be placed in a row: $$ \stree{O =2 [~0] 4 [~6] 2
+4{Cl}}\quad\stree{4 6\O 2 ~~0\O 4{Cl}}\quad\stree{4 ~~6\O 2 0\O 4{Cl}}$$
+Since formulas base lines pass through their
+geometric centers, the right decision is
+\begin{verbatim}
+\stree{O =2 [~0] 4 [~6] 2 4{Cl}} \quad
+\stree{4 6\O 2 ~~0\O 4{Cl}} \quad
+\stree{4 ~~6\O 2 0\O 4{Cl}}"
+\end{verbatim}
+A small
+explanation is required here. First, the new command \verb"\O" is intended
+for a carbonyl group. Second, two tildes at once in clauses \verb"~~0\O" and
+\verb"~~6\O" extend invisibility to both a bond and a label which ends a bond
+(one tilde would leave hanging ``O'').
+
+Thus the combined use of prefixes gives a variety of useful effects within a
+limited set of tokens. Absence of digits and letters in this set
+allows to easy distinguish prefixes from other syntax elements.
+Only tokens {\tt+} and {\tt-} do not suit this picture: they are used to set
+\<offset directions> whose meaning will be discussed in the following
+section.
+
+\subsection{Directions}
+
+\rpic{\stree{0,23,56,89,11}}
+Let us systematically consider all different ways to specify bond directions.
+In addition to twelve {\em straight\/} directions (agreeing with numbers of
+hours) one can derive about twice as more of them with the aid of prefixes
+{\tt/} or {\tt,} (see fig.\ 1). A comma applied to one of the four numbers
+({\tt2}, {\tt5}, {\tt8}, or {\tt11}) produces four {\em median\/} directions
+at 45$^\circ$ to the horizon (they usually appear in 8-member cycles
+like one in this paragraph).
+
+\begin{figure}\centering
+\def\znakf#1{\tt #1}
+\begin{tabular}{cccc}
+\stree{[0.00][1.1 1][2.22][3.33][4.44][5.55][6.66][7.77][8.88][9.99]%
+[10.10{10}][11.11{1\rlap1}]}&
+\stree{[,2.,2{,2}][,5.,5{,5}][,8.,8{,8}][,11.,11{,11}]}&
+\stree{[:1][:2][:4][:5][:7][:8][:10][:11]%
+[/1./1{/1}][/2./2{/2}][/4./4{/4}][/5./5{/5}][/7./7{/7}][/8./8{/8}]%
+[/10./10{/10}][/11./11{/11}]}&
+\stree{[:1][:2][:4][:5][:7][:8][:10][:11]%
+[//1.//1{//1}][//2.//2{//2}][//4.//4{//4}][//5.//5{//5}][//7.//7{//7}]%
+[//8.//8{//8}][//10.//10{//10}][//11.//11{//11}]}\\
+straight&median&skew&very skew
+\end{tabular}\par\medskip
+{\bf Figure 1.} Bond directions (dotted lines show straight directions for a
+comparison with skew ones).
+\end{figure}
+
+The other prefix {\tt/} (a slash) can precede all non-orthogonal
+directions making them to decline toward the nearest
+coordinate axis by $\simeq10^\circ$. These directions (let them be called
+{\em skew\/}) well conform to 5-membered cycles. A pentagon is usually drawn
+with one strictly vertical or horizontal side. If two bonds adjacent to that
+side are made skew, then the figure becomes almost right:
+$$
+\stree{/1124/79}\quad\tabcolsep=0pt
+\begin{tabular}{l}\0stree\1\\\tt/11 2 4 /7 9\2\end{tabular}
+\qquad
+\stree{0/257/10}\quad\tabcolsep=0pt
+\begin{tabular}{l}\0stree\1\\\tt0 /2 5 7 /10\2\end{tabular}
+$$
+
+An irregular 5-membered ring
+{\bondlen3.5mm\stree{0_36810}}
+may also appear in formulas. Here are no skew directions, but one bond is
+$2/3$ longer than others. The extra length is set by prefix \verb"_"
+(an underscore),
+and the whole formula is input as
+\verb"{\bondlen3.5mm\stree{0 _3 6 8 10}}" (here assignment
+\verb"\bondlen3.5mm" answers for the reduced size of the formula, while the
+figure brackets bound the diminution).
+
+To look decent, 7-membered rings require another eight directions which lie
+even closer than skew ones to coordinate axes. These directions hold
+notation of {\em very skew\/} and require one more slash. Their use is
+illustrated below:
+$$
+\stree{1//2468//1011}\quad\tabcolsep=0pt
+\begin{tabular}{l}\0stree\11 //2\\\tt4 6 8 //10 11\2\end{tabular}
+\qquad
+\stree{531//11108//7}\quad
+\begin{tabular}{l}\0stree\15 3 1\\\tt//11 10 8 //7\2\end{tabular}
+$$
+
+Thus twelve numbers 0--11 optionally prefixed with {\tt,} or {\tt/} can
+compose $12 + 4 + 8 + 8 = 32$ different directions. Although it seems to
+cover a majority of formulas, in some cases a more general device is
+required. Due to it a direction is set by means of {\sl two\/} numbers
+denoting horizontal and vertical bond offsets. The offset unit (called {\em
+a quad\/}) equals $1/6$ of the default bond length. Each offset is a cardinal
+number starting with a {\sl binding\/} sign {\tt+} or {\tt-} (the
+sign allows not to miss offsets from numbers of hours) and finishing by some
+non-digit. Let us comment the following example of offset directions use:
+
+$$
+\begin{tabular}{cc}
+\stree{202/4-5-6//8-2+2 02[+1+5[=01042]+1-7]/428+2-2}&
+\begin{tabular}{l}
+\verb"\stree{202/4-5-6//8-2+2 "\\
+\verb"02[+1+5[=01042]+1-7]/428+2-2}"
+\end{tabular}
+\end{tabular}
+$$
+
+Having a figure of a formula is always helpful. Moreover, if it contains
+bonds of nonstandard length and/or direction, one should prefer a
+grid paper, one quad per a grid cell. Meanwhile preparing of such a figure
+requires a bit of skill, the further description in \verb"\stree" is rather a
+mechanical procedure. One should only keep in mind that bonds with the
+short to long side proportion $0:6$ and $3:5$ correspond to straight,
+$2:6$ --- to skew, and $1:6$ --- very skew directions and thus can be
+specified via numbers of hours.
+
+Let us start from the left methyl group
+and traverse the adjacent 5-membered ring clockwise. The first three bonds on
+this way are straight (at 2, 0, and 2 hours), the next one is skew at 4
+hours. The next bond (5 quads left and 6 down) does not conform to any
+``clock'' proportion and thus is wrote as {\tt-5-6}. For the last bond (6 left
+and 1 down) we use notation {\tt//8}, though {\tt-6-1} is also acceptable.
+The next object is the distorted hexagon around the just completed ring. Here
+sequence {\tt-2+2 02} leads to the bridge across the two rings (the bridge
+description is given in square brackets). The remained path to the first ring
+is described by {\tt/428+2-2}, where pair {\tt28} corresponds to the methyl
+group (a more general way {\tt[2]} fits too).
+
+In this example all optional spaces were omitted. The single space
+is required only between {\tt-2+2} and {\tt02[}. Indeed, with no space
+{\tt-2+202} would mean 2 quads down and 202 right --- a very long bond! The
+necessity to bind numbers is not the only specialty of
+offset directions. They also can not be used
+before commands which draw more than one bond (an explanation of this
+feature is leaved on section ``commands'').
+
+\subsection{Labels}
+
+However, before coming to commands one should stay on simpler suffixes, i.\
+e.,\ labels. Let us repeat the most significant rules. If a bond leads to a
+labelled vertex, then this label must be wrote immediately after the bond
+direction. No spaces are allowed before a label or a command\footnote{Since
+neither label nor command can start with a digit, this rule could not
+contradict with the necessity to separate numbers of quads or digit 1
+denoting a 1-hour direction.}. If a label consists of many characters, or
+is a digit, or any character reserved for prefixes, then it must be taken
+in figure brackets. If a label is just a letter (e.\ g.,\ C, N, O, H) then
+brackets are needless (however it would not be an error to put them).
+
+A vertex label requires all adjacent bonds to become shorter to avoid the
+mutual superposition. The main duty of \treeTeX\ just lies in
+proper calculation of label dimensions to update coordinates of lines
+which depict bonds. Because \TeX\ has no arrays, only one current label (its
+metrics) is remembered each moment. A complete traversal of a structure
+may require some vertices to be met twice. Each time a vertex is met, its
+label has to be specified again. E. g.,\ if formula
+$$\stree{{HO}3N3\6}$$ is traversed from vertex OH to N and along the ring
+back to N, then the nitrogen label should be set twice:
+\verb"\stree{{HO}3N 1 3 5 7 9 11N}". Absence of last {\tt N} would result in
+crossing the first label N by the last 11-hours bond (since the fact of a
+label presence here is already forgotten). Meantime, square brackets allow
+almost always to avoid plural coming at a label. In our case, for example,
+the following construction will do: \verb"\stree{{HO}3N [5] 1 3 5 7 9}".
+Everything inside square brackets passes as if unnoticed: the closing
+bracket makes vertex N to be reminded so that the next 1-hour bond is drawn
+correctly.
+
+A careful reader may note many formulas (e.\ g.,\ the last one) to begin
+just from a label instead of a prefix or a direction as the formal syntax
+implies. Here a tiny trick works: number {\tt17} (i.\ e.,\ a void direction)
+is always inserted at the very beginning of an argument of \verb"\stree"
+before its processing. If an argument begins with a prefix or a direction,
+then {\tt17} does nothing, otherwise {\tt17}\<label> will set this \<label>
+in a current point.
+
+Another formal syntax violation belongs to justification of long labels.
+Evidently a label with more than one character allows diverse
+dispositions relative a vertex center. The default rule states: if a bond goes
+left (i.\ e.,\ has negative horizontal offset) then the vertex center
+coincides with the center of the most right character, otherwise (a
+bond is vertical or goes right) --- the left one. Although it works
+perfectly with most terminal moieties, ``internal'' labels may require
+additional devices.
+
+%{\samepage
+\rpic[pyrrole]{\stree{~'8/>13/>58`{NH}10}}
+For example, the habitual clockwise traversal of the pyrrole structure
+would imply label NH to be justified by H instead of N as it
+should be. The default orientation may be altered by prefix
+{\tt`} (back apostrophe): \verb"\stree{/>1 3/>5 8`{NH} 10}". Since
+{\tt`} controls a behavior of a label (on contrary with the others
+answering for bonds), this prefix is the only exception allowed to stay
+before a label (of course, construction \verb"`8{NH}" is also true though not
+as logical as \verb"8`{NH}").
+%\par}
+
+%{\samepage
+\rpic{\stree{/>13/>58``{NH}10}}
+But let us return to the pyrrole. One may find the centered label (in this
+paragraph) to be more appropriate. Here the vertex center coincides with
+the center of the whole label, that is achieved by doubling the same
+prefix: \verb"8``{NH}". However, one can get more fine effects by means of
+\TeX\ boxes, kerns, and glue (the next paragraph implies a reader to
+be familiar with these things).
+%\par}
+
+\rpic{\stree{/>1 3/>5 8``{\vtop{\baselineskip=0pt \hbox{N}\hbox{H}}}10}}
+Indeed, both pyrrole formulas are not perfect, and one may try the vertical
+form of label NH by means of the following long construction:
+\0stree\1/>1 3/>5
+8``\1\0vtop\1\0baselineskip=0pt \0hbox\1N\2\0hbox\1H\2\2\2
+10\2\rm. Let us comment it. Two {\tt``}
+before the label prevent an ``automatic'' alignment by some marginal
+token --- evidently it is undesirable here. \TeX\ primitive \verb"\vtop"
+makes a vertical box aligned by the topmost of contained boxes. In our case
+base lines of \verb"\hbox{N}" and whole \verb"\vtop" coincide, or, in
+other words, the height of \verb"\vtop" equals to the height of
+\verb"\hbox{N}". As \treeTeX\ ignores a box depth while setting a label, the
+vertex center will just coincide with the center of N\@. Without assignment
+\verb"\baselineskip=0pt" N and H would stand from each other as far as lines
+in a common paragraph. Funny, but almost the same result is achievable via a
+short invisible bond at 3 quads down:
+\verb"\stree{/>1 3/>5 8N [~-0-3H] 10}")
+(however, in this case a gap between N and H is dependable on fonts
+used for labels). {\sloppy\par}
+
+\subsection{Commands}
+
+\begin{table}\centering
+{\bf Table 3.} The available commands.\par\bigskip
+\begin{tabular}{rl|rl|rl}
+\verb"\ph"&\stree{3\ph'9}&\verb"\tbu"&\stree{3\tbu}&{\tabcolsep=0pt
+\begin{tabular}{r}\verb"\O"\\\verb"\CO"\end{tabular}}&\stree{3\O'11'7}\\
+&&&&\\ \hline &&&&\\
+\verb"\pho"&\stree{3\pho'9}&\verb"\tbx"&\stree{3\tbx}&\verb"\OH"&\stree{3\OH}\\
+&&&&\\ \hline &&&&\\ {\tabcolsep=0pt
+\begin{tabular}{r}\verb"\six"\\\verb"\6"\end{tabular}}&\stree{3\6'9}&
+\verb"\ip"&\stree{3\ip}&\verb"\COOH"&\stree{3\COOH}\\
+&&&&\\ \hline &&&&\\
+&&\verb"\Me"&\stree{3\Me}&
+\end{tabular}
+\end{table}
+
+A command may substitute a label in the role of a suffix. We mean a
+regular \TeX\ command composed from signal character \verb"\" and either
+one non-letter or a sequence of several letters. Specific commands
+may be used {\sl inside\/} command \verb"\stree" to facilitate input of some
+fragments (see Table 3). All the available commands do not
+change a current vertex (though it is not a rule to obey). The reason of
+such behavior is evident for one-valence moieties, constituting columns 2 and
+3 in Table 3. Cyclic fragments allow more flexible use. Terminal cycles
+require an additional bond before a command in the same direction (e.\ g.,\
+biphenyl is input as \verb"\stree{9\ph 3 3\ph}"). It might seem not very
+comfortable unless it allowed to easy input condensed cycles and simple
+heterocycles: $$
+\begin{tabular}{ccccc}
+\stree{10\6 2\6}&\begin{tabular}{l}\verb"\stree{"\\
+\verb"10\6 2\6}"\end{tabular}& &
+\stree{N3\6 9\Me}&\begin{tabular}{l}\verb"\stree{"\\
+\verb"N3\6 9\Me}"\end{tabular}
+\end{tabular}
+$$
+
+A fragment is drawn in a direction which precedes a command (all figures
+in table 3 correspond to 3 o'clock). Sometimes a direction affects a label
+view or a whole fragment ``chirality''.
+An example is command \verb"\COOH" which always places the carbonyl oxygen on
+top (try to ascertain in it).
+The definition of \verb"\COOH" worth to be considered fully:
+%
+\begin{verbatim}
+\def\COOH#1{{ % argument #1 = direction in hours
+ \ang=#1 % remember the initial direction
+ \b\ang[C] % draw a bond ending with label C
+ \ifnum\ang>6 % if more than 6 hours then
+ \rot2 % turn 2 hours right,
+ {\bt2\b\ang[O]} % put the carbonyl =O,
+ \rot8 % turn 8 hours right (= 4 left),
+ \OH\ang % draw -OH
+ \else % otherwise
+ \rot2 % turn 2 hours right,
+ \OH\ang % draw -OH,
+ \rot8 % turn 8 hours right,
+ {\bt2\b\ang[O]} % draw =O
+ \fi}}
+\def\OH#1{{\ifnum#1>6\b{#1}[HO]\else\b{#1}[OH]\fi}}
+\end{verbatim}
+%
+Let us explain three new commands used in this listing. The most important
+one is \verb"\b" which does draw a bond in a given direction (the first
+binding parameter) and set an optional label taken in square brackets. Use
+of variable \verb"\ang" instead of an absolute value makes a description
+dependable on an initial direction handed via the first parameter. After
+assignment \verb"\ang=#1" this variable undergoes only relative increment
+corresponding to a rotation on a cardinal number of hours. Use of special
+command \verb"\rot" for this purpose guarantees the resulting value to be
+kept within 11 hours. Evidently, that simple arithmetic is applicable only to
+directions expressed in numbers of hours. It explains why offset directions
+are not allowed before commands drawing more than one bond.
+
+Command \verb"\bt2" changes the character of a bond to double
+centered (equivalent to the action of prefix {\tt=}). Other
+bond attributes (visibility, thickness, etc.)\ can be altered too by means
+of some control variables which however are not listed here. These
+specific data, if required, can be obtained from the source file {\tt
+stree.sty}.
+
+Additional figure brackets in definitions of \verb"\COOH" and \verb"\OH"
+involve the common grouping mechanism of \TeX\ to restore a current vertex
+after the command action. Let us
+also note a simpler command \verb"\OH" to be used inside
+\verb"\COOH". The logic of \verb"\OH" itself is limited to the choice of
+either label OH or HO depending on a bond direction.
+
+The set of commands to draw fragments may seem poor and inrepresentative. Its
+further extension, however, is in question, since the description on the
+level of bonds and labels is laconic enough to expect big advantages
+from broad use of internal commands. The optimal case assumes a few simple
+commands, easy to be used and kept in mind. It does not mean, however, that
+defining of new commands is always senseless. So, authors of math papers
+often draw graphs with ``shot'' vertexes, e.\ g.
+$$
+\def\*#1{\b{#1}[$\bullet$]}
+\stree{\*5\*[7\*]3\*1\*3\*5\*7\*9\*11\*}
+$$
+Bearing in mind \TeX\ notation \verb"$\bullet$", one might honestly
+input the graph as \verb"{$\bullet$} 5{$\bullet$} [7{$\bullet$}" \ldots\ but
+there is no better way: to define command \verb"\*" for setting a bullet in
+a given direction (\verb"\def\*#1{\b{#1}[$\bullet$]}") and then describe
+everything much shorter as \verb"\stree{\*5\*[7\*]3\*1\*3\*5\*7\*9\*11\*}".
+
+Indeed, suffix commands may have an additional parameter which must
+immediately follow a command and be in figure brackets. Accidentally this
+feature can be applied for input of flow charts composed from standard
+polygons, e.\ g.,
+
+$$
+\def\(#1,#2){\sx#1\sy#2\ab30[]}
+\def\com#1[#2]{\(15,0)\(0,-6)\(-3,-3)\(-27,0)\(0,6)\(3,3)\(12,0)
+ \bmode-1 \dmode2 \sy-5 \ab30[#2]\bmode-1 \(0,-4)}
+\stree{0\com{sugar}-0-3+20-0[+20-0-0+3~-0+9 0\com{milk}]
+::-0-3 0\com{coffee}::-0-3}
+$$
+
+After defining a polygon by means of command \verb"\com"
+%
+\begin{verbatim}
+\def\(#1,#2){\sx#1\sy#2\ab30[]} % draw a bond offset (#1,#2)
+\def\com#1[#2]{\(15,0)\(0,-6)\(-3,-3)\(-27,0)\(0,6)\(3,3)
+ \(12,0)\bmode-1 \dmode2 \sy-5 \ab30[#2]\bmode-1 \(0,-4)}
+\end{verbatim}
+%
+one can input the whole scheme as kind of a chemical formula:
+\begin{verbatim}
+\stree{0\com{sugar}-0-3+20-0
+[+20-0-0+3~-0+9 0\com{milk}]
+::-0-3 0\com{coffee}::-0-3}
+\end{verbatim}
+
+Let us make necessary comments. Variables \verb"\sx" and \verb"\sy" contain
+offsets used for a bond if its direction equals a conditional value of 30
+hours. Assignment \verb"\bmode-1" makes a bond invisible while
+\verb"\dmode2" answers for a centered label (equivalent to {\tt``}).
+
+This example completes
+the systematic consideration of
+all the components in a bond description.
+Now a bit else remains: how to use \verb"\stree" inside other \LaTeX\
+constructions, i.\ e.,\ alignment modes.
+
+\section{Alignment}
+
+By default, \verb"\stree" with the aid of \LaTeX\ environment \verb"picture"
+produces \verb"\hbox" whose height slightly (by {\tt1ex}) exceeds its depth.
+This small difference makes structures to conform with math symbols in
+displayed formulas. E.~g.,\ the following equation
+$$
+\stree{9\6 3\OH}+\stree{9\OH 1\O
+5\Me}\longrightarrow\ \stree{9\6 3O 3 1\O 5\Me}+\stree{{H$_2$O}}
+$$
+is input just as
+\begin{verbatim}
+\stree{9\63\OH}+\stree{9\OH1\O5\Me}\longrightarrow
+\stree{9\63O31\O5\Me}+\stree{{H$_2$O}}
+\end{verbatim}
+
+Vertical alignment may also be specified explicitly with the aid of a token
+in square brackets put immediately after \verb"\stree". In agreement with
+the \LaTeX\ conventions {\tt[t]} means top alignment and {\tt[b]} --- bottom
+(a centered box is obtained by default, making use of {\tt[c]}
+obsolete). Parameter {\tt[u]} (no alignment) leads to a box with null
+dimensions at the place of a starting vertex. This is useful if \verb"\stree"
+itself is a part of another picture whose elements are bind to vertices.
+Since all vertices are situated in nodes of a one quad sized grid, knowing of
+exact coordinates of one vertex allows all the others to be easy
+calculated. Use of {\tt[u]} guarantees this knowledge for a starting vertex,
+whereas other parameters --- do not, since a box produced by \verb"\stree" in
+these cases accurately bounds everything found in a formula: labels, marks,
+etc.
+
+On the other hand, variant {\tt[u]} makes a user himself to monitor
+sizes of a formula. There is still a way deprived of this drawback:
+instead of \verb"\stree{" \<description> {\tt\2} one can write
+\verb"\begstr \tree{" \<description> \verb"} \endstr".
+Before \verb"\endstr" or after \verb"\begstr" any \LaTeX\
+commands for \verb"\picture" environment are allowed as if
+coordinates (0,0) belong to a starting vertex and
+unit of measure \verb"\unitlength" equals
+the standard bond length \verb"\bondlen".
+In the following example this method is used to
+mark a fragment with a dashed box:
+$$\begstr
+\tree{9\OH1//2[~/7{$R_1$}]4[0~2][6]/2539>760/108[-4-5/118~9{$F_1$}]//1011}
+\put(-2,-2){\dashbox{0.2}(4.8,3.8){}}
+\endstr
+$$
+This figure is input as
+\begin{verbatim}
+\begstr
+\tree{9\OH1//2[~/7{$R_1$}]4[0~2][6]/2539>760/108
+ [-4-5/118~9{$F_1$}]//1011}
+\put(-2,-2){\dashbox{0.2}(4.8,3.8){}}
+\endstr
+\end{verbatim}
+
+\section{Additional features}
+
+Chemical character of this work allows us to note also the
+ability to input mass and \CNMR\ spectra with \treeTeX. For example, the
+spectrum
+$$
+\massp{220-18!187-33!135-26!133-25,121-100!14,2,107-38!43-35,41-41!}
+$$
+is obtained in result of
+\begin{verbatim}
+\massp{220-18!187-33!135-26!133-25,121-100!14,2,
+ 107-38!43-35,41-41!}
+\end{verbatim}
+Here is just a sequence of numbers divided by punctuation marks:
+a mass number is ended by a dash, a relative intensity (in percents) --- by
+either comma or exclamation. The last makes an $m/z$ value to be
+set over a peak. Several intensities following one mass number (e.\ g.,\ {\tt
+121-100!14,2,}) correspond to neighbor peaks with increasing
+$m/z$. A comma may be omitted if it is the last token in a \verb"\massp"
+argument.
+
+The four parameters control a mass spectrum view:
+\begin{itemize}
+\item
+\verb"\mzlen" --- the horizontal distance corresponding to 1 $m/z$\\
+(default \verb"\mzlen=0.6pt"),
+\item
+\verb"\imax" --- the height of the maximal peak in units of \verb"\mzlen"\\
+(default \verb"\imax=50"),
+\item
+\verb"\numfnt" --- the font used to set numbers on a figure\\
+(default \verb"\def\numfnt{\small}"),
+\item
+\verb"\msdir" --- the direction of peaks.
+\end{itemize}
+%
+The last parameter is rarely used. Default \verb"\msdir=1" means the common
+direction --- upward; any other value make peaks to be oriented downward. The
+last case may be useful for visual comparison of two spectra:
+$$
+\begms
+\mass{39-11,0,21,51-5,7,15,64-5,35,7,77-10,5,91-4,74!27,104-6,
+119-26,132-42,4,159-26,81!8,176-15,187-93!12,204-4,232-100!14}
+\put(-1,0){\line(1,0){250}}\msdir=-1
+\mass{39-16,51-7,6,15,65-11,8,77-5,92-73!24,104-9,119-15,
+132-21!159-26,100!14,176-16,187-83!14,204-3,232-70!}\vpos=1
+\endms
+$$
+This figure is input in the following way:
+%
+\begin{verbatim}
+\begms
+\mass{39-11,0,21,51-5,7,15,64-5,35,7,77-10,5,91-4,74!27,104-6,
+119-26,132-42,4,159-26,81!8,176-15,187-93!12,204-4,232-100!14}
+\put(-1,0){\line(1,0){250}}\msdir=-1
+\mass{39-16,51-7,6,15,65-11,8,77-5,92-73!24,104-9,119-15,
+132-21!159-26,100!14,176-16,187-83!14,204-3,232-70!}\vpos=1
+\endms
+\end{verbatim}
+%
+By analogy with \verb"\stree", instead of
+\verb"\massp{" \<argument> \verb"}" one can write
+\verb"\begms \mass{" \<argument> \verb"} \scale1{} \endms" and insert
+any commands from the \LaTeX\ {\tt picture} environment
+after \verb"\begms" or before \verb"\endms". In our example a common scale
+drawn by \verb"\scale1{}" is substituted by the plain horizontal (its length
+is the rounded maximal mass number in the spectrum), and then another
+spectrum is drawn contrariwise since it is preceded by \verb"\msdir=-1".
+Finally, assignment \verb"\vpos=1" switches on the bottom alignment (i.\ e.,\
+the box depth equals zero). Though command \verb"\massp" itself presumes the
+common alignment control with the aid of parameters {\tt[b]}, {\tt[c]}, or
+{\tt[t]}, on the lower level there acts variable \verb"\vpos" (it is true
+also for the decomposition of \verb"\stree" onto \verb"\begstr",
+\verb"\tree", and \verb"\endstr"). Value 0 means center alignment (same as
+parameter {\tt[c]}), 1 --- bottom ({\tt[b]}), 2 --- top ({\tt[t]}), and 3 ---
+no alignment (valid only for structural formulas and corresponds to {\tt[u]}).
+
+\treeTeX\ also allows to input simple figures of \CNMR\ spectra like the
+following (a peak height reflects its multiplicity):
+$$
+\cnmrs{2000}{1912s1645s354d1041s{\llap{$^b\searrow$}}%
+901s138q1576s1703s575q912d1047d{$*$}566q1696s1956s571q953s395t}
+$$
+The corresponding text is:
+%
+\begin{verbatim}
+\cnmrs{2000}{1912s1645s354d1041s{\llap{$^b\searrow$}}%
+901s138q1576s1703s575q912d1047d{$*$}%
+566q1696s1956s571q953s395t}
+\end{verbatim}
+%
+Command \verb"\cnmrs" has two binding parameters: first is the scale length
+(in $\hbox{p.\,p.\,m.}*10$), and second --- a spectrum description which
+contains for each signal its chemical shift value (multiplied by 10) and
+multiplicity, where {\tt s} means singlet, {\tt d} --- doublet, {\tt t} ---
+triplet, and {\tt q} --- quartet. A peak label may be set in figure brackets
+after a multiplicity token (in our case construction
+\verb"\llap{$^b\searrow$}" is used to shift the label left and prevent its
+interference with the neighbor doublet marked by a star).
+
+Both kinds of spectra are input in quite a similar way: as a
+sequence of numbers with delimiters. However, there are small differences. So,
+long command \verb"\massp" can be broken in strings at any places, though in
+\verb"\cnmrs" end of line should be commented by \verb"%".
+Besides, in \verb"\cnmrs" the scale (and so whole figure) length is set
+implicitly, while for a mass spectrum the total length depends on a largest
+$m/z$ value (to obtain a mass spectrum with a given length one could
+just specify a void peak with null intensity and corresponding $m/z$).
+
+\section{Conclusion}
+
+An apparent question might arise during acquaintance with this work: does
+somebody need to study another ``bird language'' to input chemical
+formulas if a plenty of convenient programs for visual
+editing exist? Essentially it is an old
+dispute {\sl pro et contra\/} a command interface vs.\ graphic one.
+Professional programmers know very well that a command language provides a
+faster and more flexible control though it requires more time for studying.
+Indeed there is no contradiction between these modes of interaction, and the
+optimal case should include both abilities. Anyhow, in preparation of
+scientific manuscripts words do play the main role, i.\ e.,\ a writer
+basically remains in the verbal mode of thinking. If numerous
+chemical formulas in a text are input by a graphic editor then a
+writer will frequently switch from one program to another. Even if the
+switching is fast and elegant (a case rarely met in practice), the change of
+the interface mode will still require some psychological adaptation. In this
+case an ability to input a formula just in text without tackling a mouse and
+becoming a designer could save you a lot of time and mind energy.
+
+\section*{References}
+\frenchspacing\parindent=0pt
+\parskip=2ex
+
+Knuth D. (1984)
+\sl The \TeX book.\/
+\rm Addison-Wesley, Reading.
+
+Lamport L. (1984)
+\sl \LaTeX: A Document Preparation System.\/
+\rm Addison-Wesley, Reading.
+
+Ramek M. (1990)
+\sl \TeX: Applications, Uses, Methods.
+\rm ed. Clark M., p. 227.
+Ellis Horwood, London.
+%227--258
+
+Haas R. T. \& O'Kane K. C. (1987)
+%Typesetting Chemical Equations Using \LaTeX.
+\sl Comput. Chem.\/,\bf\ 11,\rm\ 251
+%251--271
+
+Fujita S. (1994)
+%Typesetting Structural Formulas with the Text Formatter \TeX/\LaTeX.
+\sl Comput. Chem.\/,\bf\ 18,\rm\ 109
+%109--116
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/streetex/stree_en.pdf b/macros/latex/contrib/streetex/stree_en.pdf
new file mode 100644
index 0000000000..b3f86a71e8
--- /dev/null
+++ b/macros/latex/contrib/streetex/stree_en.pdf
Binary files differ
diff --git a/macros/latex/contrib/streetex/stree_ru.lat b/macros/latex/contrib/streetex/stree_ru.lat
new file mode 100644
index 0000000000..18877a412f
--- /dev/null
+++ b/macros/latex/contrib/streetex/stree_ru.lat
@@ -0,0 +1,1141 @@
+\documentstyle[12pt,stree,sprivate,russian,chemstr,carom]{article}
+\begin{document}
+
+\def\<#1>{$\langle$#1$\rangle$}
+%\def\UPSILON{\char'7}
+%\def\XyM{X\kern-.30em\smash{\raise.50ex\hbox{\UPSILON}}\kern-.30em{M}}
+%\def\XyMTeX{\XyM\kern-.1em\TeX}
+\def\ChemTeX{Chem\kern-0.1em\TeX}
+\def\verb{\sverb}
+
+\def\topfraction{.9}
+\def\bottomfraction{.9}
+\def\textfraction{.1}
+
+\def\0{\tt\symbol{92}}
+\def\1{\tt\symbol{123}}
+\def\2{\tt\symbol{125}}
+\def\4{\tt\symbol{36}}
+\def\5{\tt\symbol{95}}
+
+\author{Строков Игорь Иванович}
+\title{Еще один макропакет для набора структурных формул в системе \LaTeX}
+\maketitle
+
+\section{Введение}
+
+Если вы хотите готовить научные статьи или книги типографского качества, то
+выбор инструментов обычно невелик: это либо Word, либо \TeX\ --- язык и
+система набора документов, созданные на рубеже 70--80-х годов Д. Кнутом [1].
+Если говорить кратко, то главное достоинство \TeX а --- скурпулезный учет
+всех мелочей, которые влияют на внешний вид документа и, как следствие, ---
+безупречное качество набора, практически недостижимое другими средствами
+(особенно если в тексте есть символы математики). С другой стороны, в \TeX е
+не очень удобно работать с графикой, хотя в него можно
+импортировать растровые изображения (обычно формата {\tt PCX}), при чем
+теряется независимость от печатающего устройства, или
+документы на языке PostScript. Последнее решение позволяет
+получать практически любые визуальные эффекты, однако в среде DOS/Windows до
+последнего времени было трудно найти программы, которые бы корректно понимали
+PostScript. В то же время \TeX\ сам является своеобразным языком
+программирования, который позволяет с помощью псевдографических шрифтов
+получать простые векторные диаграммы и рисунки. Наиболее известный вариант
+\TeX а, \LaTeX\ [2], практически установил стандарт на применение
+псевдографики. В большинстве случаев структурные формулы, встречающиеся в
+химических статьях, можно полностью набирать средствами \LaTeX а. Однако
+делать это непосредственно с помощью примитивных команд рисования линий и
+кругов, конечно, слишком неудобно. Специально для набора химических формул
+разными авторами созданы более и менее сложные пакеты макрокоманд. Макрос
+Рамека [3] достаточно прост и удобен, но формулы в нем получаются не такие, к
+каким привыкли химики-органики. Этого недостатка лишены более сложные
+макропакеты \ChemTeX\ Хааса--о'Кейна [4] и \XyMTeX\ Фуджиты [5]. Оба
+последних пакета устроены примерно одинаково: каждому характерному элементу
+рисунка (обычно такой элемент относится к связной системе циклов) в них
+отвечает отдельная макрокоманда, параметры которой позволяют менять вид
+заместителей и связей этого элемента.
+
+Возмем для примера более развитый и упорядоченный
+макрос Фуджиты. Например, 5,5-диметилциклогексен-2-он-1
+$$\begin{picture}(800,0)\put(-100,-200){\cyclohexanev[b]{1D==O;5Sb==;5Sa==}}
+\end{picture}\quad\stree[b]{3[7]020\O4>6810}$$
+в нем получается по команде
+\verb"\cyclohexanev[b]{1D==O;5Sb==;5Sa==}" (для сравнения справа нарисована
+та же структура, введенная с помощью нового пакета). В этом, как и в других
+случаях, мнемоника команды коррелирует с названием соединения, что может
+позволить опытному пользователю по виду команды представить себе, какая в ней
+зашифрована структура. С другой стороны, описание формул на уровне крупных
+структурных фрагментов влечет за собой ряд недостатков. Прежде всего, таких
+фрагментов, которые обычно рассматриваются как целое, в органической химии
+очень много, и охватить их полностью практически невозможно. Эта задача не
+решается и в пакетах \ChemTeX\ и \XyMTeX, при том, что полное описание
+каждого представляет собой довольно солидную книгу. Кроме того, в случаях,
+когда большая формула состоит из нескольких фрагментов, их объединение на
+одном рисунке может превратиться в утомительную задачу по вычислению
+координат стыкуемых узлов.
+
+В связи с этим оправданным кажется описание формул на более простом
+уровне --- с помощью отдельных связей, подобно тому, как это сделано у Рамека
+[3]. Разнообразие связей по сравнению с характерными фрагментами структур
+значительно меньше, поэтому набор формул в терминах связей должен быть более
+универсальным и простым в освоении. Из общих соображений можно предположить,
+что сравнительно примитивный уровень описания чреват потерей скорости и
+удобства набора, однако субъективный опыт автора говорит о том, что этого не
+происходит. Чтобы поддержать это утверждение, рассмотрим, как именно вводятся
+структурные формулы в предлагаемом вашему вниманию макропакете \treeTeX.
+
+По традиции программистов на \TeX е, новый пакет получил название, включающее
+общий логотип \TeX. Первая часть названия, ``tree'', отражает способ описания
+структурных формул в виде дерева связей. Весь \treeTeX\ реализован в виде
+одного небольшого файла {\tt stree.sty}. Как обычно, имя файла без
+расширения включается в аргумент команды \verb"\documentstyle". Например,
+первая строка в этом документе выглядит так:
+\begin{verbatim}
+\documentstyle[12pt,stree,russian]{article}
+\end{verbatim}
+
+\section{Основные правила}
+
+Для набора структурных формул в \treeTeX е используется единственная команда
+\verb"\stree{}". Описание формулы содержится в фигурных скобках и получается
+так: начав с какой-либо вершины (не важно, с какой), следут обойти всю
+структуру, двигаясь по связям и описывая как сами проходимые связи, так и
+метки вершин, если они встретятся по пути. Например, формула
+1-гидрокси-4-метилпиридина$$\stree{{HO}20?242\Me?68N?10}$$
+вводится как \verb"\stree{{HO} 2 0 >2 4 [2{CH$_3$}] >6 8N
+>10}". Начиная в данном примере обход с вершины HO, мы должны поставить в
+код ее метку: \verb"{HO}". Метка обязательно заключается в фигурные скобки,
+если в ней более одного символа. Следующий символ {\tt 2} означает:
+<<провести связь в направлении на 2 часа>> (по циферблату часов). При обходе
+формулы всегда есть текущая точка (вершина). Указывая направление связи, мы
+перемещаемся из текущей точки в данном направлении (на расстояние, равное
+длине связи) и попадаем в другую вершину. Таким образом, после символа {\tt
+2} текущей становится вершина кольца (номер 1 по нумерации ИЮПАК). Символ
+{\tt 0} описывает следующую связь в направлении на 0 часов (вертикально
+вверх). Далее (если продолжать обход кольца по часовой стрелке) следует
+двойная связь на два часа. Если связь отличается от простой, то {\sl перед\/}
+ее направлением ставится один или несколько символов (так называемых {\em
+префиксов\/}), отражающих особенности связи. Двойную связь можно изображать
+по разному. В нашем случае желательно, чтобы второй штрих связи был внутри
+цикла, {\sl справа\/} от основного. Для достижения этого эффекта перед
+двойкой ставится префикс {\tt >} (правая угловая скобка).
+
+Следующая простая связь на четыре часа приводит к замещенной вершине кольца.
+Давайте вначале опишем заместитель, а потом продолжим обход кольца.
+Конструкция \verb"[2{CH$_3$}]" содержит описание заместителя и
+интерпретируется так: открывающая скобка {\tt [} запоминает текущую
+вершину; связь на два часа (символ {\tt 2}) приводит к вершине CH$_3$
+(\verb"{CH$_3$}" --- это описание метки), после чего скобка {\tt ]}
+закрывается и возвращает нас к вершине кольца, от которой отходит
+заместитель. Последовательность символов \verb"{CH$_3$}" довольно неудобно
+набирать на клавиатуре. В то же время метильная группа (CH$_3$) встречается
+часто, поэтому для нее был предусмотрен более простой метод ввода с
+помощью команды \verb"\Me" так, что конструкция \verb"2\Me" эквивалентна
+\verb"[2{CH$_3$}]" (вместо цифры {\tt 2} здесь может стоять любое число,
+отвечающее направлению связи).
+
+После того, как заместитель задан, можно продолжить обход кольца. Остались
+три связи: на 6, 8 и 10 часов. Связи на 6 и 10 часов двойные и нарисованы
+внутри цикла, что указывается с помощью префикса {\tt
+>}. Связь на 8 часов приводит к вершине с меткой N, поэтому символ {\tt N}
+стоит сразу за символом {\tt 8}. В данном случае фигурные
+скобки вокруг {\tt N} ставить не обязательно, поскольку эта метка состоит из
+одного символа. В этом примере для наглядности
+группы символов, относящиеся к разным связям, мы разделили пробелами.
+Вообще говоря, ставить их не обязательно (команда
+\verb"\stree{{HO}20>242\Me>68N>10}" тоже является правильной), но вы
+можете использовать пробелы, чтобы визуально структурировать содержимое
+команды \verb"\stree". При расстановке пробелов действует только один
+запрет: их {\sl нельзя\/} ставить между направлением и меткой или
+направлением и командой. Например, в приведенном выше примере написать
+\verb"8 N" (а также \verb"2 {CH$_3$}" или \verb"2 \Me") было бы ошибкой. Есть
+также один случай, когда пробел нужен {\sl обязательно:\/} между цифрой {\tt
+1}, если она обозначает направление на один час, и следующей за ней другой
+цифрой.\footnote{Строго говоря, если следующая цифра --- не {\tt 0} или {\tt
+1}, то пробел и в этом случае необязателен.}
+
+\section{Формальное описание}
+
+Теперь попробуем суммировать и изложить более строго основные правила,
+рассмотренные на данном примере. Аргумент команды \verb"\stree" состоит из
+описаний отдельных связей. Чтобы описать связь, достаточно задать ее
+направление --- чаще всего это число часов от 0 до 11 на 12-часовом
+циферблате. {\sl Перед\/} направлением можно поместить один или несколько
+префиксов, которые модифицируют длину, кратность, внешний вид или само
+направление связи. {\sl После\/} направления может ставится метка вершины, к
+которой приводит связь, или команда (имеется в виду команда в терминах \TeX а
+--- то, что начинается с сигнального символа~\verb"\").
+Команда --- это средство более краткого описания некоторых часто
+встречающихся структурных фрагментов. Метка или команда здесь
+рассматриваются как атрибут связи, и, поскольку они ставятся после
+направления, их называют также {\em суффиксами.\/} Суффикс, в отличие от
+префиксов, может быть только один, и, кроме того, перед суффиксом {\sl
+никогда\/} не ставится пробел. Описание связи в форме \<возможные
+префиксы>\<направление>\<возможный суффикс>\ отвечает тому, как если бы вы
+объясняли обход структуры словами: <<{\sl такая-то\/} связь на {\sl
+столько-то\/} часов приводит к {\sl такой-то\/} метке>> --- только вместо
+слов {\sl такой-то\/} и {\sl столько-то\/} ставятся условные символы.
+
+\def\is{$\longrightarrow$ }
+\def\ili{\vrule{} }
+
+Может возникнуть вопрос --- как отличить, например, суффикс текущей связи от
+направления или префикса следующей? Для визуального различения, как уже
+отмечалось, после описания каждой
+связи можно вставлять пробел (если вас не очень заботит избыточный объем
+текста). Машина, однако, не обращает внимания на пробелы, а
+действует в соответствии с правилами, которые далее приводятся
+в записи Бэкуса--Нора (стрелка \is\ обозначает <<определяется как>>, а
+вертикальная черта \ili\ значит <<или>>). Начнем с определения аргумента
+команды \verb"\stree" (который здесь обозначен как \<структура>):
+
+\begin{description}%\flushleft
+\item[]
+\<структура> \is \<пусто> \ili \<связь>\<структура> \ili\protect\\
+ \<структура>{\tt[}\<структура>{\tt]}\<структура>
+\end{description}
+%
+Это просто формальный способ сказать, что аргумент состоит из описаний
+отдельных связей и может содержать парные квадратные скобки,
+возможно вложенные. Далее
+определяется, какой вид имеет описание связи.
+
+\begin{description}\frenchspacing%\flushleft
+
+\item[]
+\<связь> \is \<возможные префиксы>\<направление>\<возможный суффикс>
+\<возможные пробелы>
+
+\item[]
+\<возможные префиксы> \is
+\<префикс> \<возможные префиксы> \ili \<пусто>
+
+\item[]
+\<префикс> \is {\tt / \ili , \ili = \ili >
+\ili < \ili ? \ili \_ \ili ' \ili ` \ili " \ili . \ili : \ili * \ili
+\verb"^"}
+
+\item[]
+\<возможный суффикс> \is \<команда> \ili \<метка> \ili \<пусто>
+
+\item[]
+\<метка> \is {\1}\<любая последовательность символов>{\2} \ili
+\<любой символ, если это не префикс>
+
+\item[]
+\<направление> \is
+\<направление в часах> \ili \<направление в смещениях>
+
+\item[]
+\<направление в часах> \is {\tt 0 \ili
+1\<{\rm возможный пробел после единицы}> \ili 2 \ili
+3 \ili 4 \ili 5 \ili 6 \ili 7
+\ili 8 \ili 9 \ili 10 \ili 11 \ili 12}
+
+\item[]
+\<{\rm возможный пробел после единицы}> \is \<пробел>, если
+следующий символ в описании --- {\tt 0} или {\tt 1}, иначе --- \<пусто>
+
+\item[]
+\<направление в смещениях> \is \<плюс или
+минус> \<натуральное число> \<плюс или минус> \<натуральное число>
+
+\item[]
+\<плюс или минус> \is {\tt +} \ili {\tt -}
+
+\end{description}
+
+В этих правилах любой синтаксический элемент (конструкция в угловых скобках
+\< >) раскрывается в конечном итоге либо в конкретные символы, либо в
+элементы, которые не требуют, как кажется, дальнейшего объяснения (например
+\<любая последовательность символов>, \<пусто>, \<натуральное число>).
+Приведенные правила, однако, ничего не говорят о том, что значит тот или иной
+префикс или какой смысл имеет, например, конструкция \<направление в
+смещениях>. Семантика отдельных элементов команды \verb"\stree"
+систематически рассматривается в трех следующих разделах.
+
+\section{Префиксы}
+
+\begin{table}[tbh]\centering
+{\bf Таблица 1.} Префиксы.\par
+\medskip
+\begin{tabular}{c|c|c|c}
+префикс&название особенности&пример&категория\\ \hline\hline
+\tt /&косая&\stree{/2}&\\ \cline{1-3}
+\tt //&очень косая&\stree{//2}&префиксы\\ \cline{1-3}
+\tt ,&под 45$^\circ$&\stree{,2}&направлений\\ \cline{1-3}
+{\tt+} и {\tt-}&задают направление в смещениях&&\\
+\hline\hline
+\tt =&центрированная двойная&\stree{=3}\\ \cline{1-3}
+\tt >&двойная справа&\stree{>3}&\\ \cline{1-3}
+\tt <&двойная слева&\stree{<3}&кратности\\ \cline{1-3}
+\tt ==&тройная &\stree{==3}&связей\\ \cline{1-3}
+\tt ">&делокализованная справа&\stree{">3}&\\ \cline{1-3}
+\tt "<&делокализованная слева&\stree{"<3}&\\
+\hline\hline
+\tt \_&длинная ($5/3$ от обычной)&\stree{_3}&длины\\ \cline{1-3}
+\tt '&короткая ($1/3$ от обычной)&\stree{'3}&связей\\
+\hline\hline
+\verb"~"&невидимая &\\ \cline{1-3}
+\verb"~~"&и связь, и метка невидимы&\\ \cline{1-3}
+\tt :&пунктирная&\stree{:3}&визуальные\\ \cline{1-3}
+\tt *&жирная&\stree{*3}&эффекты\\ \cline{1-3}
+\verb"^"&стрелка&\stree{^3}\\ \cline{1-3}
+\verb"^*"&клиновидная&\stree{^*3}\\
+\hline\hline
+\tt .&очень короткая невидимая&\stree{C.2*}&для меток
+\end{tabular}
+\end{table}
+
+Выше мы уже познакомились с одним префиксом {\tt >}, который испоьзовался для
+задания двойных связей.
+Полный список префиксов приводится в табл. 1.
+Префиксы делятся на четыре категории по влиянию на направление,
+кратность, длину или внешний вид связи. Префиксы разных категорий можно
+комбинировать друг с другом: например, в результате
+\verb"\stree{_=:/4}" получится длинная двойная пунктирная косая связь на 4
+часа: \stree{_=:/4}\ Рассмотрим далее более полезные случаи использования
+префиксов и их сочетаний.
+
+Префикс {\tt .} (точка) --- особенный. Он
+влияет и на длину, и на внешний вид связи и используется для того, чтобы
+ставить номера или другие метки при вершинах. Например, чтобы
+ввести этиленгликоль с нумерацией вершин (\stree[b]{{HO}.01 2.02 4.03
+2{OH}.04}), нужно сказать: \verb"\stree{{HO} .01 2 .02 4 .03 2{OH} .04}"
+(все пробелы здесь необязательны). Конструкция {\tt .01} (и аналогичные ей
+{\tt .02}, {\tt .03}, {\tt .04}) в полном соответствии с формой \<возможные
+префиксы>\<направление>\<возможный суффикс> буквально означает следующее:
+провести {\sl короткую невидимую\/} связь {\sl на ноль часов\/} и поставить
+метку <<1>>. Однако здесь есть две особенности. Если префикс связи ---
+точка, то, во-первых, после такой связи текущая вершина не меняется (как если
+бы описание связи было взято в квадратные скобки), и, во-вторых, после
+направления {\sl обязательно\/} должна следовать метка. Более того, {\sl
+любой\/} символ (или группа символов, заключенная в фигурные скобки) после
+направления с префиксом {\tt .} воспринимается как метка. Поэтому в этом
+случае мы можем просто поставить после направления на 0 часов
+цифру 1, не опасаясь, что она может быть спутана с направлением на 1 час.
+Обратите внимание, что номера вершин набраны в меньшем размере, чем
+метки вершин и весь остальной текст. Размер и шрифт можно менять с помощью
+соответствующих команд, например \verb"\stree{{HO} .0{\tiny1} 2 .02 4
+.0{\large3} 2{OH} .0{\LARGE4}}" дает такой результат: \stree{{HO} .0{\tiny1}
+2 .02 4 .0{\large3} 2{OH} .0{\LARGE4}}. Чаще, однако, бывает нужно, чтобы все
+номера вершин (или другие метки при вершинах) были в одном стиле. Этот
+стиль задается командой \verb"\znakf". Исходно эта команда определена так:
+\verb"\def\znakf#1{\small #1}" --- то есть печатать метки размером
+\verb"\small". Определение \verb"\znakf" можно изменить (прямо в
+своем тексте), чтобы получить жедаемый вид меток по умолчанию: например, после
+\verb"\def\znakf#1{#1}" метки станут получаться обычного размера, а после
+\verb"\def\znakf#1{$#1$}" --- набираться в математической моде.
+
+\rpic{\stree{:1:3:5^*7**9*^11}}
+Прокомментируем также назначение других префиксов (исключая префиксы
+направлений, которые рассматриваются в следующем разделе). Пунктирные,
+очень жирные и клиновидные связи, очевидно, нужны для набора
+стереоформул. Например, приведенная в этом абзаце формула была введена как
+\verb"\stree{:1 :3 :5 *^7 **9 *^11}" (обход велся по часовой стрелке начиная
+с самой левой вершины).
+Этот пример не имеет практической ценности и только иллюстрирует
+особенности использования \verb"^" и {\tt *}. Так, в первом случае
+сочетание \verb"^*" обозначает связь {\sl расширяющуюся\/} (\stree{*^3}),
+поскольку предыдущая связь была узкой, а во втором --- {\sl сужающуюся\/}
+(\stree{**17*^3}), так как перед ней шла жирная связь. Хорошо, когда машина
+пытается проявить сообразительность, но иногда необходимо указать явно, в
+какую сторону должна расширяться клиновидная связь.
+Простой способ добиться желаемого --- задать псевдо-связь нулевой длины и
+подходящей толщины, тогда следующая клиновидная связь получится нужного вида.
+Например сужающаяся одиночная связь (\stree{**17*^3}) была сейчас введена как
+\verb"\stree{**17 *^3}". Для подобных случаев нужно запомнить, что связи
+нулевой длины отвечает псевдо-направление на 17 часов. Отметим заодно, что
+связь перед плоскостью вводится как {\sl очень\/} жирная (два префикса
+{\tt *}). Один префикс {\tt *} отвечает просто жирным связям, которые
+примерно в два раза \'уже очень жирных и вдвое толще обычных (опустим вопрос,
+для чего они могут пригодиться).
+
+Префикс {\tt '} (апостроф) позволяет вводить короткие связи, которые обычно
+обозначают свободные валентности во фрагментах. Например, формула
+\stree{'8'0 4'6 2N '0'4}\ была набрана как
+\verb"\stree{'8'0 4'6 2N '0'4}". После короткой связи, как и после
+короткой невидимой, текущая вершина не меняется.
+
+Просто невидимости можно добиться с помощью префикса \verb"~" (тильда).
+Невидимые связи удобно использовать для того, чтобы получить формулу,
+отдельные части которой не связаны между собой. Например, схему
+реакции $$\stree{{H$_2$C} =3{CH$_2$} ~6{CH$_2$} =9{H$_2$C}}
+\quad\longrightarrow\quad \stree{3690}$$ можно задать как
+\begin{verbatim}
+\stree{{H$_2$C} =3{CH$_2$} ~6{CH$_2$} =9{H$_2$C}}
+\quad\longrightarrow\quad \stree{3690}
+\end{verbatim}
+Невидимость также
+полезна, если требуется выровнять несколько формул разного размера. Пусть
+нужно напечатать рядом три формулы: $$ \stree{O =2 [~0] 4 [~6] 2
+4{Cl}}\quad\stree{4 6\O 2 ~~0\O 4{Cl}}\quad\stree{4 ~~6\O 2 0\O 4{Cl}}$$
+Если просто перечислить их: \verb"\stree{O =2 4 2
+4{Cl}} \quad \stree{4 6\O 2 4{Cl}} \quad \stree{4 2 0\O 4{Cl}}", то
+главная цепь в этих формулах окажется на разных уровнях: $$
+\stree{O=2424{Cl}}\quad\stree{46\O24{Cl}}\quad\stree{420\O4{Cl}} \quad,$$ что
+не очень красиво. Выход состоит в том, чтобы везде поставить
+невидимые заместители, расположенные в противоположном направлении от
+видимых: \verb"\stree{O =2 [~0] 4 [~6] 2 4{Cl}} \quad \stree{4 6\O 2 ~~0\O
+4{Cl}} \quad \stree{4 ~~6\O 2 0\O 4{Cl}}". И те, и другие имеют одинаковый
+размер, поэтому формулы окажутся выровненными относительно главной цепи.
+Здесь следует кое-что объяснить. Во-первых, появилась новая команда
+\verb"\O", которая рисует карбонильную группу (первую структуру тоже можно
+было задать с ее помощью: \verb"\stree{8\O 4 2 4{Cl}}"). Во вторых, в
+конструкциях \verb"~~0\O" и \verb"~~6\O" стоят сразу две тильды: это делает
+невидимой не только связь, но и метку на ее конце (нетрудно догадаться, что с
+одной тильдой получился бы повисший в воздухе символ <<O>>)\@. Наконец, хотя
+в первой формуле нет заместителей, смотрящих вверх или вниз, она тоже не
+центрирована относительно главной цепи --- мешают метки вершин, поэтому и
+здесь пришлось поставить две невидимые связи для того, чтобы скрыть объем
+меток.
+
+Таким образом, совместное использование префиксов позволяет получить много
+дополнительных полезных эффектов, обходясь сравнительно
+небольшим набором знаков. Ни один из них не является
+буквой или цифрой, что позволяет легко отличать префиксы
+от меток и направлений. Только знаки {\tt +} и {\tt -} выпадают из этой
+картины: они используются, чтобы задавать \<направление в смещениях>,
+смысл и назначение которого обсуждается в следующем разделе.
+
+\clearpage
+
+\subsection{Направления}
+
+\begin{figure}\centering
+\def\znakf#1{\tt #1}
+\begin{tabular}{cccc}
+\stree{[0.00][1.1 1][2.22][3.33][4.44][5.55][6.66][7.77][8.88][9.99]%
+[10.10{10}][11.11{1\rlap1}]}&
+\stree{[,2.,2{,2}][,5.,5{,5}][,8.,8{,8}][,11.,11{,11}]}&
+\stree{[:1][:2][:4][:5][:7][:8][:10][:11]%
+[/1./1{/1}][/2./2{/2}][/4./4{/4}][/5./5{/5}][/7./7{/7}][/8./8{/8}]%
+[/10./10{/10}][/11./11{/11}]}&
+\stree{[:1][:2][:4][:5][:7][:8][:10][:11]%
+[//1.//1{//1}][//2.//2{//2}][//4.//4{//4}][//5.//5{//5}][//7.//7{//7}]%
+[//8.//8{//8}][//10.//10{//10}][//11.//11{//11}]}\\
+прямые&получасовые&косые&очень косые
+\end{tabular}\par\medskip
+{\bf Рисунок 1.} Направления связей (для сравнения рядом с косыми и
+очень косыми пунктиром показаны соответствующие прямые направления).
+\end{figure}
+
+\rpic{\stree{0,23,56,89,11}}
+Давайте систематически рассмотрим в этом разделе все разные способы задания
+направлений. Кроме двенадцати {\em прямых\/} направлений, отвечающих целому
+числу часов на циферблате, есть еще множество других, которые задаются как
+число часов с префиксами {\tt /} или {\tt ,} (см.\ рис.\ 1).
+Четыре направления под углом 45$^\circ$ к горизонту (на пол-второго,
+пол-пятого, пол-восьмого и пол-одинадцатого) задаются с помощью префикса {\tt
+,} (запятая) перед числом {\tt 2}, {\tt 5}, {\tt 8} или {\tt 11} (считайте,
+что запятая здесь отвечает приставке {\sl пол-\/}). Такие направления
+(называемые {\em получасовыми\/}) можно использовать при задании
+восьмичленных циклов. Например, цикл в этом абзаце был введен как
+\verb"\stree{0 ,2 3 ,5 6 ,8 9 ,11}" в результате обхода по часовой стрелке,
+начиная с самой левой нижней вершины.
+
+Другие
+восемь направлений можно получить с помощью префикса {\tt /} (косая черта)
+перед одним из чисел {\tt 1}, {\tt 2}, {\tt 4}, {\tt 5}, {\tt 7}, {\tt 8},
+{\tt 10} или {\tt 11} (см.\ рис.\ 1). Такие направления (назовем их {\em
+косыми\/}) используются, например, для ввода пятичленных циклов. Пятиугольник
+в химических формулах обычно рисуют так, что одна из его сторон получается
+строго вертикальной или горизонтальной. Если две связи, смежные такой
+стороне, сделать косыми, то пятиугольник получится довольно близким к
+правильному: $$
+\begin{tabular}{cl|cl}
+\multicolumn{2}{c}{<<вертикальные>> формы}&
+\multicolumn{2}{c}{<<горизонтальные>> формы}\\&&&\\
+\stree{/1 3/5810}&\verb"\stree{/1 3/5810}"&
+\stree{0/257/10}&\verb"\stree{0/257/10}"\\&&&\\
+\stree{24/79/11}&\verb"\stree{24/79/11}"&
+\stree{1/46/811}&\verb"\stree{1/46/811}"
+\end{tabular}$$
+%
+Пятичленное кольцо в формулах иногда изображают и так:
+{\bondlen=3.5mm\stree{0_36810}} (похоже на правильный
+шестиугольник с одним обрезанным углом).
+Здесь нет косых направлений, но одна связь (на месте обрезанного угла)
+примерно на $2/3$ длиннее других. Длинная связь получается с помощью
+префикса \verb"_" (подчерк), а вся формула вводится следующим образом:
+\verb"{\bondlen=3.5mm \stree{0 _3 6 8 10}}" (здесь присваивание
+\verb"\bondlen=3.5mm" позволяет получить формулу, размер которой примерно в
+два раза меньше обычного, специально для вставки в текст, а фигурные скобки
+локализуют эффект уменьшения).
+
+Рассмотрим теперь циклы из семи вершин. Для того, чтобы их рисунки получились
+сравнительно приличными, ранее рассмотренных направлений недостаточно:
+понадобятся восемь других, которые еще более, чем косые, отклоняются от
+соответствующих прямых направлений в сторону осей координат. Такие
+направления называются {\em очень косыми\/} и вводятся с помощью двух
+префиксов {\tt /} (см.\ рис.\ 1). С использованием очень косых
+связей получаются такие семичленные циклы:
+\begin{center}\tabcolsep=0.2em
+\begin{tabular}{clcl}
+\stree{//1 24//57911}&\verb"\stree{//1 24//57911}"\ &
+\stree{1//2468//1011}&\verb"\stree{1//2468//1011}"\\\\
+\stree{1 35//7810//11}&\verb"\stree{1 35//7810//11}"\ &
+\stree{02//457//810}&\verb"\stree{02//457//810}"
+\end{tabular}
+\end{center}
+
+Таким образом, с помощью чисел 0--11 и префиксов {\tt ,} и {\tt /} можно
+задавать $12 + 4 + 8 + 8 = 32$ разных направления. В большинстве случаев
+(если учесть еще длинные связи) для описания формул этого достаточно, однако
+иногда может понадобиться другой, более общий способ. Согласно
+ему, направление задается не одним числом (как угол в часах), а двумя:
+смещением связи по вертикали и по горизонтали. Смещение измеряется в
+так называемых {\em квадратах,\/} где квадрат --- это условная единица,
+равная $1/6$ длины обычной связи.\footnote{Строго говоря, если она
+вертикальна или горизонтальна. Все другие связи чуть длиннее или чуть
+короче.} Каждое смещение задается как целое число с {\sl обязательным\/}
+знаком {\tt +} или {\tt -} (знак говорит о том, что следующее за ним число
+--- это смещение, а не направление в часах). Все направления, выражаемые в
+часах, можно задать с помощью смещений (см.\ табл. 2). Обратное же не верно:
+например, при наборе следующей формулы $$ \stree{202/4-5-6-6-1-2+2
+02[+1+5[=01042]+1-7]/428+2-2} $$ без смещений обойтись нельзя: формула
+вводится как
+\begin{verbatim}
+\stree{202/4-5-6-6-1-2+2 02[+1+5[=01042]+1-7]/428+2-2}
+\end{verbatim}
+
+\begin{table}
+{\bf Таблица 2.} Соответствие смещений направлениям в часах.\par\medskip
+\leavevmode
+\vtop{\nointerlineskip\halign{\tt\hfil# \strut&#\vrule&\ \tt#\cr
+\multispan3 \hfil прямые\hfil\cr
+0&&-0+6\cr
+1&&+3+5\cr
+2&&+5+3\cr
+3&&+6-0\cr
+4&&+5-3\cr
+5&&+3-5\cr
+6&&-0-6\cr
+7&&-3-5\cr
+8&&-5-3\cr
+9&&-6-0\cr
+10&&-5+3\cr
+11&&-3+5\cr
+}}\quad
+\vtop{\nointerlineskip\halign{\tt\hfil# \strut&#\vrule&\ \tt#\cr
+\multispan3 полуторные\hidewidth\cr
+,2&&+4+4\cr
+,5&&+4-4\cr
+,8&&-4-4\cr
+,11&&-4+4\cr
+}}\quad
+\vtop{\nointerlineskip\halign{\tt\hfil# \strut&#\vrule&\ \tt#\cr
+\multispan3 \hfil косые\hfil\cr
+/1&&+2+6\cr
+/2&&+6+2\cr
+/4&&+6-2\cr
+/5&&+2-6\cr
+/7&&-2-6\cr
+/8&&-6-2\cr
+/10&&-6+2\cr
+/11&&-2+5\cr
+}}\quad
+\vtop{\nointerlineskip\halign{\tt\hfil//# \strut&#\vrule&\ \tt#\cr
+\multispan3 очень косые\hidewidth\cr
+1&&+1+6\cr
+2&&+6+1\cr
+4&&+6-1\cr
+5&&+1-6\cr
+7&&-1-6\cr
+8&&-6-1\cr
+10&&-6+1\cr
+11&&-1+6\cr
+}}
+\end{table}
+
+Рассмотрим подробнее процесс набора для этого случая. Прежде всего, всегда
+полезно иметь перед глазами рисунок набираемой формулы. Если она к тому же
+содержит связи необычной длины и/или направления, то лучше, если рисунок
+будет на бумаге в клетку, в масштабе 6 клеток на связь обычной длины. При
+проведении связей желательно, чтобы соотношение короткой и длинной проекций
+связи на оси координат составляло или $3/5$, что отвечает {\sl прямым\/}
+связям, или $2/6$ (косым), или $1/6$ (очень косым). Во-первых, такие связи
+можно задавать более кратким образом (как число часов), а во-вторых (что
+важнее) --- рисунок формулы, скорее всего, при этом получится строже (эти
+рассуждения больше относятся к случаю, когда общепринятого
+изображения формулы не существует, и можно рассмотреть разные варианты).
+Если же имеется красивый рисунок на клетчатой бумаге, то описать его в
+команде \verb"\stree" (при известном навыке) не составит труда. Давайте
+начнем с нижней метильной группы и примыкающего к ней пятичленного цикла
+(последний, как обычно, обходится по часовой стрелке). Первые три связи на
+этом пути (на 2, 0 и опять 2 часа) являются прямыми, следующая, на 4 часа ---
+косая. Двум следующим связям, заканчивающим цикл, отвечает
+последовательность {\tt -5-6-6-1} (если есть сомнения в том, как описать
+связь --- в часах или в смещениях, то можно справиться с табл.\ 2 или,
+что проще, запомнить соотношение проекций для направлений в часах).
+После пятичленного цикла опишем снаружи от него
+неправильный шестичленный цикл. Здесь последовательность {\tt -2+2 02}
+доводит до мостика, который соединяет два цикла, а описание этого мостика
+содержится в квадратных скобках. Оставшиеся символы {\tt /428+2-2}
+описывают конец пути до пятичленного цикла. Два символа {\tt 28} здесь
+служат для ввода метильной группы, которую можно было задать и более
+привычным способом, как {\tt [2]}.
+
+В данном примере, опять-таки для
+иллюстрации, были опущены все необязательные пробелы. {\sl Необходимый\/}
+пробел понадобился только в одном месте: {\tt -2+2 02[}, так как
+без него получилось бы {\tt -2+202[} --- две клетки вниз и 202
+вправо --- очень длинная связь! Почти все направления в часах (кроме 10 и 11)
+--- однозначные числа, поэтому пробел нужен только там, где можно спутать
+пару чисел 1 и 0 или 1 и 1 с 10 и 11 соответственно. В отличие от
+часов, смещения не ограничены по величине, поэтому каждое число, которое
+начинается с {\tt -} или {\tt +}, должно заканчиваться справа какой-нибудь
+не-цифрой, например, пробелом. Но есть еще одно, более важное, отличие
+направления в смещениях --- его нельзя использовать перед командами, которые
+рисуют более одной связи. Последнее ограничение может показаться
+таинственным, пока вы не узнаете о внутреннем устройстве команд.
+
+\section{Метки вершин}\label{Labels}
+
+Однако перед тем, как перейти к командам, следует остановиться на суффиксах
+более простого вида --- на метках вершин, и отметить все особенности их
+использования. Повторим вначале наиболее важные правила.
+Если вершина, к которой приводит связь, имеет метку, то эта метка
+записывается {\sl сразу\/} после направления связи. Пробел между направлением
+и меткой (или командой) недопустим (заметим, что это правило не может войти в
+противоречие с правилами об обязательных пробелах между числом и следующей
+цифрой: ведь ни метка, ни команда никогда не начинаются с цифры). Если метка
+состоит более чем из одного символа, то она заключается в фигурные скобки.
+Скобки также обязательны, если метка является цифрой или одним из символов,
+используемых в качестве префикса.\footnote{Строго говоря, сюда следует отнести
+еще один случай: если метка закодирована с помощью команды. Например, вам
+может надоесть часто набирать какую-нибудь длинную метку, и вы напишете
+простую макрокоманду, скажем \0def\0бз\1C\4\56\4H\4\55\4\2\rm, чтобы вместо
+\tt C\4\56\4H\4\55\4\rm\ можно было везде писать \0бз\rm. При использовании
+внутри \0stree\rm\ команду \0бз\rm\ придется брать в
+фигурные скобки, чтобы она обрабатывалась как обычная метка, а не как
+команда.} Очень часто метки вершин
+состоят из одной буквы, например, C, N, O, H --- и в этом случае скобки не
+нужны, хотя, если их поставить, ошибки не будет.
+
+Когда ставится метка, то связи, которые ведут к ней и от нее, становятся
+короче, чтобы не произошло наложения связи на метку. Основная работа по
+рисованию формул как раз и заключается в том, чтобы правильно вычислять
+размеры меток и в соответствии с ними адаптировать координаты отрезков,
+изображающих связи. К сожалению, в \TeX е нет чего-нибудь, похожего на
+массивы, и запомнить можно размеры только одной метки, относящейся к текущей
+вершине. Поэтому, когда при обходе формулы вершина попадается еще раз, то ее
+метку следует задавать снова. Если, например, обход формулы
+$$\stree{{HO}3N3\6}$$ ведется от вершины OH к N и далее по часовой стрелке с
+возвратом к N, то метка азота должна появиться в описании дважды:
+\verb"\stree{{HO}3N 1 3 5 7 9 11N}". Если не поставить последний {\tt N}, то
+связь на 11 часов наложится на первую метку азота, ибо тот факт, что в этом
+месте стоит метка, давно забыт. Впрочем, с помощью квадратных скобок почти
+любую формулу можно обойти так, чтобы метки вершин встретились только
+однократно. В нашем случае, например, подействует такая конструкция:
+\verb"\stree{{HO}3N [5] 1 3 5 7 9}". То, что заключено в квадратных скобках,
+как бы проходит незамеченным: после закрывающей скобки вспоминается вершина
+с меткой N и размеры этой метки, так что следующая связь на 1 час рисуется
+правильно.
+
+Внимательный читатель может заметить, что многие формулы в
+наших примерах (например, предыдущая) начинаются прямо с описания метки, а не
+с направления связи, что противоречит формальному синтаксису команды
+\verb"\stree". Здесь срабатывает маленький трюк: перед аргументом
+этой команды до начала его обработки ставится число {\tt 17} --- то есть
+направление фиктивной связи нулевой длины. Если первым в \verb"\stree"
+стоит направление или префикс, то {\tt 17} не произведет никакого
+действия, а если метка, то {\tt 17}\<метка> нарисует эту метку в текущей
+точке.
+
+Отметим еще один случай нарушения формального синтаксиса на примере
+выравнивания длинных меток. Метки, в которых более одного символа, можно по
+разному располагать относительно геометрического центра вершины. По умолчанию
+действует такое правило: если связь имеет наклон {\sl влево\/} (смещение
+связи по горизонтали меньше нуля), то с центром вершины совмещается центр
+самого правого символа метки, иначе (если связь вертикальна или имеет
+наклон вправо) --- самого левого. Это дает правильный результат в большинстве
+случаев, но все же не всегда.
+
+{\samepage
+\rpic[$\!$пиррол]{\stree{~'8/>13/>58`{NH}10}}
+Например, в гетероцикле пиррола, если обходить
+его от самой левой вершины по часовой стрелке, метка NH по умолчанию окажется
+выровненной по H, а не по N, как должно быть. Изменить вид выравнивания
+метки на противоположный можно префиксом {\tt `} (обратный апостроф):
+\verb"\stree{/>1 3/>5 8`{NH} 10}". Здесь есть нарушение правил: префикс {\tt
+`} стоит не перед направлением, а {\sl после\/} него (перед меткой). В этом
+случае нарушение оправдано, поскольку префикс {\tt `}, в отличие от
+остальных, влияет не на связь, а на метку, и значит его логичнее ставить
+перед меткой. Конструкция \verb"`8{NH}", конечно, тоже правильна, но менее
+очевидна, чем \verb"8`{NH}". Кроме того, особый статус префикса {\tt `}
+позволяет применять его, если описание структуры начинается с метки (в этом
+случае по умолчанию метка выравнивается по правому символу).
+Заметим, что право стоять
+после направления связи распространяется только на префикс {\tt `} --- любой
+же другой в этом положении будет считаться началом описания следующей связи.
+
+\rpic{\stree{/>13/>58``{NH}10}}
+Но вернемся к формуле пиррола. Возможно, вам покажется, что центрированная
+метка NH (как в этом абзаце) выглядит лучше. Такой эффект
+достигается за счет {\sl двух\/} префиксов {\tt `}: \ldots\
+\verb"8``{NH}"\ \ldots\ (в этом случае метка рассматривается как единое
+целое, и ее центр совмещается с центром вершины). На самом деле можно
+получить и более тонкие эффекты, если воспользоваться \TeX овскими боксами,
+кернами и клеем (дальнейшие объяснения в этом разделе расчитаны на то, что вы
+знакомы с этими понятиями).
+
+\rpic{\stree{/>1 3/>5 8``{\vtop{\baselineskip=0pt \hbox{N}\hbox{H}}}10}}
+На самом деле обе ранее приведенные формулы
+пиррола не очень хороши. Метка NH слишком широкая, и, вероятно, ее лучше
+расписать по вертикали, как здесь. Чтобы поставить N на H потребовалась
+следующая довольно длинная конструкция:
+\0stree\1/>1 3/>5
+8``\1\0vtop\1\0baselineskip=0pt \0hbox\1N\2\0hbox\1H\2\2\2
+10\2\rm.\par}
+
+Сделаем необходимые объяснения. Два апострофа перед меткой
+нужны для того, чтобы предотвратить центрирование по первому или последнему
+символу --- в данном случае ничего хорошего из этого бы не
+вышло.\footnote{Процесс выделения первого или последнего символа ({\sl
+токена\/}, если быть точным) несколько грубоват, поэтому если вы сами строите
+метку из боксов, то его лучше отключать. Вообще говоря, предусмотрено и
+<<автоматическое>> отключение, если в метке находится примитив \TeX а
+\0hbox\rm, или любая макрокоманда, при раскрытии которой получается
+\0hbox\rm\ (например, \0rlap\rm\ или \0llap\rm). Предполагается, что если вы
+ставите внутри метки \0hbox\rm\ или то, что в него раскрывается, то, значит,
+вы сами хотите управлять размещением метки. Этот метод угадывания мыслей
+небезупречен: так, \0hbox\rm\ обнаруживается только в том случае, если он
+находится на самом внешнем уровне вложенности. В нашем примере \0hbox\rm\
+спрятан внутри \0vtop\rm, поэтому остается два варианта избежать выделения
+крайнего токена: задать перед \0vtop\rm\ пустой \0hbox\rm\ или,
+что проще, поставить два апострофа.}
+Примитив \TeX а \verb"\vtop" делает вертикальный бокс, выровненный по самому
+верхнему из составляющих его боксов, в нашем случае --- по \verb"\hbox{N}"
+(то есть базовые линии \verb"\hbox{N}" и всего \verb"\vtop" совпадут). Иными
+словами, высота метки, заключенной в бокс \verb"\vtop", совпадет с высотой
+\verb"\hbox{N}", а глубину метки составят глубина \verb"\hbox{N}" плюс
+глубина и высота \verb"\hbox{H}". При расположении метки ее глубина
+игнорируется, поэтому центр вершины как раз совпадет с центром символа N\@.
+Присваивание \verb"\baselineskip=0pt" здесь нужно для того, чтобы
+расстояние между N и H не получилось, как между строками в обычном тексте.
+Интересно, что практически тот же результат можно получить с помощью
+невидимой связи длиной три квадрата (\verb"\stree{/>1 3/>5 8N [~-0-3H] 10}"),
+но с одним различием: при смене шрифта расстояние между N и H
+может измениться.
+
+Вот теперь про метки сказано действительно все!
+
+\section{Команды}
+
+\begin{table}\centering
+{\bf Таблица 3.} Значения имеющихся команд.\par\bigskip
+\begin{tabular}{rl|rl|rl}
+\verb"\ph"&\stree{3\ph'9}&\verb"\tbu"&\stree{3\tbu}&{\tabcolsep=0pt
+\begin{tabular}{r}\verb"\O"\\\verb"\CO"\end{tabular}}&\stree{3\O'11'7}\\
+&&&&\\ \hline &&&&\\
+\verb"\pho"&\stree{3\pho'9}&\verb"\tbx"&\stree{3\tbx}&\verb"\OH"&\stree{3\OH}\\
+&&&&\\ \hline &&&&\\ {\tabcolsep=0pt
+\begin{tabular}{r}\verb"\six"\\\verb"\6"\end{tabular}}&\stree{3\6'9}&
+\verb"\ip"&\stree{3\ip}&\verb"\COOH"&\stree{3\COOH}\\
+&&&&\\ \hline &&&&\\
+&&\verb"\Me"&\stree{3\Me}&
+\end{tabular}
+\end{table}
+
+Вместо метки в качестве суффикса может стоять команда. Напомним, что командой
+в \TeX е считается последовательность из сигнального символа \verb"\" и либо
+одной не-буквы, либо нескольких букв, после которых должна идти не-буква
+(например, команда \LaTeX а \verb"\\" относится к первому случаю, а
+\verb"\section" --- ко второму). В макросе \treeTeX\ особые команды могут
+использоваться {\sl внутри\/} общей команды \verb"\stree" для того, чтобы
+упростить ввод некоторых фрагментов (см.\ табл.\ 3). Все фрагменты в
+этой таблице, кроме трех циклических из первой колонки, являются
+одновалентными заместителями, поэтому соответствующие команды устроены так,
+что после них текущая вершина не меняется. Вообще-то, последнее верно и для
+циклических фрагментов, хотя их и нельзя считать одновалентными. Не совсем
+очевидно, например, что для получения цикла
+<<на ножке>> нужно вначале задать связь, а потом и команду в том же
+направлении (так, бифенил {\bondlen=3.5mm\stree{9\ph 33\ph}}
+вводится как \verb"\stree{9\ph 33\ph}"). С другой стороны, такая трактовка
+циклов дает некоторые удобства, ибо позволяет легко вводить структуры с
+конденсированными циклами и циклы с одним гетероатомом:
+$$
+\begin{tabular}{cc}
+\stree{10\6 2\6}&\stree{N3\6 9\Me}\\
+\verb"\stree{10\6 2\6}"&\verb"\stree{N3\6 9\Me}"
+\end{tabular}
+$$
+
+Фрагмент, отвечающий команде, рисуется в направлении, которое
+стоит перед ней (все рисунки в таблице 3 получены для направления
+на 3 часа). Иногда от направления зависит и вид метки (например, если
+сказать \verb"\stree{9\OH}", то получится \stree{9\OH}, а если
+\verb"\stree{3\OH}" --- то \stree{3\OH}) или даже взаимная ориентация меток,
+как в случае с командой \verb"\COOH", при использовании которой кислород
+карбонильной группы всегда оказывается сверху (пример --- кислота
+$$\stree{10\COOH 2\COOH},$$ которая вводится как \verb"\stree{10\COOH
+2\COOH}").
+
+Определение команды
+\verb"\COOH" полезно рассмотреть полностью,
+если вы хотите узнать, что происходит внутри \treeTeX а:
+\begin{verbatim}
+\def\COOH#1{{% аргумент #1 = направление (в часах)
+ \ang=#1 % запомнить направление
+ \b\ang[C] % провести связь с меткой C на конце
+ \ifnum\ang>6 % если больше шести часов (наклон влево), то
+ \rot2 % поворот на два часа вправо по часовой стрелке,
+ {\bt2\b\ang[O]} % вначале рисуем карбонильную группу =O,
+ \rot8 % поворот на 8 часов вправо (= 4 влево),
+ \OH\ang % и рисуем группу OH
+ \else % а иначе делаем наоборот:
+ \rot2 % поворот на два часа вправо,
+ \OH\ang % вначале группа OH,
+ \rot8 % затем поворот,
+ {\bt2\b\ang[O]} % и потом =O
+ \fi}}
+\def\OH#1{{\ifnum#1>6\b{#1}[HO]\else\b{#1}[OH]\fi}}
+\end{verbatim}
+%
+Три макрокоманды, использованные в данном примере, необходимо объяснить.
+Самая главная из них --- \verb"\b", которая собственно и рисует связи и имеет
+два параметра: первый, направление связи --- обязательный, а второй --- метка
+вершины, заключаемая в квадратные скобки --- может отсутствовать.
+В качестве первого параметра обычно выступает
+целая переменная \verb"\ang", означающая текущее направление связи.
+Использование переменной, а не абсолютных значений для этой цели
+позволяет сделать описание фрагмента зависящим от исходного направления,
+которое передается с первым аргументом команды. После присваивания
+\verb"\ang=#1" эта переменная далее только увеличивается или уменьшается, что
+соответствует вращению текущего направления на целое число часов. Эти
+операции обычно выполняются не явно, а с помощью
+команды \verb"\rot", которая гарантирует, что результирующее значение
+\verb"\ang" останется в пределах 11-ти. То, что связи фрагмента проводятся
+не в абсолютных, а относительных направлениях, объясняет, почему перед
+командой нельзя задавать направление в смещениях: его не так просто повернуть
+на целое число часов. Строго говоря, это ограничение не относится к
+фрагментам с одной связью (в этом случае единственная связь рисуется в
+исходном направлении, без всяких поворотов).
+
+%Например, можно получить такой
+%интересный результат: $\stree{-0-3\OH 3 -0+3\OH 3 -0-3\OH +9-0\Me}$, если
+%сказать \verb"\stree{-0-3\OH 3 -0+3\OH 3 -0-3\OH +9-0\Me}".
+
+В определении \verb"\COOH" осталась необъясненной еще
+команда \verb"\bt2", которая используется для рисования группы
+\stree[b]{=3O}\ и означает, что следующая связь должна быть двойной
+центрированной (это соответствует действию префикса {\tt =}). На самом деле
+можно влиять и на другие атрибуты связи (видимость, толщина, и т.\ д.) с
+помощью нескольких управляющих переменных. Сами эти переменные и смысл их
+значений здесь не приводятся: это слишком специальные сведения, и при
+необходимости их можно узнать, обратившись к файлу-источнику {\tt stree.sty}.
+
+Приведенные здесь определения команд \verb"\COOH" и \verb"\OH" заключены в
+дополнительные фигурные скобки, что обеспечивает вспоминание текущей вершины
+после того, как команда отработает. Отметим также, что внутри \verb"\COOH"
+используется более простая команда \verb"\OH". Логика последней достаточно
+проста и заключается только в выборе метки OH или HO в зависимости от
+направления связи.
+
+Набор команд для рисования фрагментов может показаться бедным и
+непредставительным. Действительно, это верно, но кажется, что этот список и
+не стоит расширять. Описание структур на уровне отдельных связей и так
+является достаточно лаконичным, чтобы применение макрокоманд могло дать
+заметные преимущества в краткости или простоте. Польза от макрокоманд
+остается максимальной, пока их немного, все они простые и часто
+используются. В этом случае команды легко удержать
+в голове и применять, почти не задумываясь.
+
+Сказанное выше не значит, однако, что
+создание новых команд (кроме уже имеющихся) для \verb"\stree" совсем лишено
+смысла. Следующий пример поясняет, о чем может идти речь. Пусть требуется
+нарисовать некий граф, вершины которого отмечены жирными
+точками:$$\def\*#1{\b{#1}[$\bullet$]}
+\stree{\*5\*[7\*]3\*1\*3\*5\*7\*9\*11\*}$$ Точке отвечает математический
+символ \verb"$\bullet$", и вы можете, конечно, честно
+начать набирать все это как
+\verb"{$\bullet$} 5{$\bullet$} [7{$\bullet$}" \ldots, однако проще
+сначала определить команду \verb"\*" для рисования жирной точки в данном
+направлении таким образом,
+\begin{verbatim}
+\def\*#1{\b{#1}[$\bullet$]}
+\end{verbatim}
+чтобы потом всю структуру набрать короче:
+\begin{verbatim}
+\stree{\*5\*[7\*]3\*1 \*3\*5\*7\*9\*11\*}.
+\end{verbatim}
+
+На самом деле команды-суффиксы могут иметь не один параметр
+(направление), а два: если сразу после команды стоит открывающая
+фигурная скобка, то все, что находится до закрывающей скобки, рассматривается
+как второй параметр. Покажем одно довольно неожиданное и далекое от химии
+использование этого факта. Если следующим образом
+%
+\begin{verbatim}
+\def\(#1,#2){\sx#1\sy#2\ab30[]} % связь со смещением (#1,#2)
+\def\dB#1[#2]{\(15,0)\(0,-6)\(-3,-3)\(-27,0)\(0,6)\(3,3)
+ \(12,0)\bmode-1 \dmode2 \sy-5 \ab30[#2]\bmode-1 \(0,-4)}
+\end{verbatim}
+%
+определить команду \verb"\dB" для рисования
+прямоугольника с двумя срезанными углами и с надписью внутри, то потом можно
+будет легко вводить блок-схемы типа
+$$
+\def\(#1,#2){\sx#1\sy#2\ab30[]}
+\def\dB#1[#2]{\(15,0)\(0,-6)\(-3,-3)\(-27,0)\(0,6)\(3,3)\(12,0)
+ \bmode-1 \dmode2 \sy-5 \ab30[#2]\bmode-1 \(0,-4)}
+\stree{::-0-3 0\dB{база данных} ::-0-3 [-20-0::-0-3 0\dB{структуры}-0-3]
+ +20-0::-0-3 0\dB{спектры}-0-3}
+$$
+набирая их как химические формулы:
+\begin{verbatim}
+\stree{::-0-3 0\dB{база данных}
+ ::-0-3 [-20-0::-0-3 0\dB{структуры}-0-3]
+ +20-0::-0-3 0\dB{спектры}-0-3}
+\end{verbatim}
+
+Сделаем необходимые комментарии: переменные \verb"\sx" и \verb"\sy" содержат
+смещения, которые используются при проведении связи, если ее
+направление равно условному значению 30 часов. Присвоение \verb"\bmode-1"
+позволяет получить невидимую связь, а в результате \verb"\dmode2" метка
+вершины получается центрированной.
+
+Упоминанием такого необычного приклада команды \verb"\stree" мы закончили
+рассмотрение всех трех компонент (\<префикс>, \<направление>, \<суффикс>) в
+описании отдельных связей. Далее осталось совсем немного: отметить
+особенности \verb"\stree" в целом: способы выравнивания и использования в
+других конструкциях \LaTeX а.
+
+\section{Выравнивание}
+
+Команда \verb"\stree" (с помощью окружения \LaTeX а \verb"picture")
+производит \verb"\hbox", высота которого немного (на {\tt 1ex}) больше
+глубины. Чаще всего это срабатывает правильно, особенно если несколько
+структур являются частью выделенной математической формулы, как в
+следующем примере $$ \stree{9\6 3\OH}+\stree{9\OH 1\O
+5\Me}\longrightarrow\ \stree{9\6 3O 3 1\O 5\Me}+\stree{{H$_2$O}}\ ,$$
+который вводится как
+\begin{verbatim}
+$$
+\stree{9\63\OH}+\stree{9\OH1\O5\Me}\longrightarrow
+\stree{9\63O31\O5\Me}+\stree{{H$_2$O}}
+$$
+\end{verbatim}
+Все формулы в этом примере
+оказались вертикально выровнены по своим центрам. На самом деле способ
+выравнивания можно задать явно, если ввести одну из букв {\tt t}, {\tt b},
+{\tt c} или {\tt u} в квадратных скобках сразу после команды \verb"\stree" (и
+перед ее обязательным аргументом). В соответствии с соглашениями \LaTeX а,
+{\tt [t]} означает выравнивание по верхушке, {\tt [b]} --- по дну, а {\tt
+[c]} --- по центру бокса. По умолчанию действует выравнивание по центру
+(поэтому {\tt [c]} задавать не обязательно). Другие способы (по верхушке и
+дну) обычно пригождаются при составлении таблиц. Параметр {\tt [u]} означает
+отсутствие выравнивания: команда \verb"\stree[u]{"\<описание>\verb"}" дает
+бокс нулевых размеров, точка привязки которого сопрадает с исходной вершиной
+в описании структуры. Это полезно для случая, когда \verb"\stree" сама
+является частью другого рисунка, отдельные элементы которого должны быть
+привязаны к координатам вершин структуры. Если известны координаты хотя бы
+одной вершины, то их можно легко вычислить и для всех остальных, учитывая то,
+что вершины расположены в узлах сетки с шагом 1 квадрат ($1/6$ расстояния
+\verb"\bondlen"). Параметр {\tt [u]} гарантирует знание места начальной
+вершины, а другие параметры --- не всегда, так как при
+выравнивании бокс, который дает \verb"\stree", включает в себя целиком метки
+вершин и вообще все символы, имеющиеся в формуле. Использование {\tt [u]},
+однако, не всегда удобно, поскольку появляется необходимость самому следить
+за размерами формулы.
+
+Существует способ, избавленный от этого недостатка. Вместо одной команды
+\verb"\stree" с описанием внутри можно написать \verb"\begstr
+\tree{" \<описание> \verb"} \endstr", а перед \verb"\endstr" (или после
+\verb"\begstr") вставить любые команды \LaTeX а с учетом того, что координата
+(0,0) отвечает начальной вершине, а единица измерения \verb"\unitlength"
+совпадает с длиной связи \verb"\bondlen" (иными словами, равна 6 квадратов).
+В следующем примере такой способ использован для того, чтобы выделить
+пунктирным прямоугольником фрагмент структуры: $$ \begstr
+\tree{9\OH1//2[~/7{$R_1$}]4[0~2][6]/2539>760/108[-4-5/118~9{$F_1$}]//1011}
+\put(-2,-2){\dashbox{0.2}(4.8,3.8){}}
+\endstr
+$$
+Это изображение вводится следующим образом:
+\begin{verbatim}
+\begstr
+\tree{9\OH1//2[~/7{$R_1$}]4[0~2][6]/2539>760/108
+ [-4-5/118~9{$F_1$}]//1011}
+\put(-2,-2){\dashbox{0.2}(4.8,3.8){}}
+\endstr
+\end{verbatim}
+
+\section{Другие возможности}
+
+Поскольку настоящее изложение связано с химией, отметим возможность ввода в
+\treeTeX е масс-спектров и спектров \CNMR. Например, спектр
+$$
+\massp{220-18!187-33!135-26!133-25,121-100!14,2,107-38!43-35,41-41!}
+$$
+получается в результате
+\begin{verbatim}
+\massp{220-18!187-33!135-26!133-25,121-100!14,2,
+ 107-38!43-35,41-41!}
+\end{verbatim}
+Это просто последовательность чисел, разделенных знаками препинания.
+Если после числа стоит тире, то оно воспринимается как массовое число
+($m/z$) пика, иначе --- как его интенсивность (в процентах к максимальному
+пику). Восклицательный знак отличается от запятой тем, что в первом случае
+над пиком на рисунке будет написано значение его $m/z$. Если после
+одного масового числа стоит несколько чисел, означающих интенсивности (в
+нашем примере --- {\tt 121-100!14,2,}), то имеется в виду последовательность
+пиков с возрастающими $m/z$. Это позволяет
+экономить место, не вводя массовое число, если оно на единицу больше
+предыдущего. Если последний знак во вводе --- запятая, то ее ставить не
+обязательно.
+
+Вид рисунка масс-спектра управляется четырьмя параметрами:
+\begin{itemize}
+\item
+\verb"\mzlen" --- расстояние между соседними линиями, $m/z$ которых
+отличается на 1 (по умолчанию \verb"\mzlen=0.6pt"),
+\item
+\verb"\imax" --- высота максимального пика в единицах \verb"\mzlen"
+(по умолчанию \verb"\imax=50"),
+\item
+\verb"\numfnt" --- шрифт, которым набираются все цифры на рисунке
+(по умолчанию \verb"\def\numfnt{\small}"),
+\item
+\verb"\msdir" --- направление, в котором рисовать пики спектра.
+\end{itemize}
+%
+Послендий параметр используется редко. По умолчанию \verb"\msdir=1",
+что означает обычное направление --- вверх; при любом другом значении пики
+будут направлены вниз. Иногда для визуального сравнения двух масс-спектров их
+удобно расположить зеркально относительно общей шкалы:
+$$
+\begms
+\mass{39-11,0,21,51-5,7,15,64-5,35,7,77-10,5,91-4,74!27,104-6,
+119-26,132-42,4,159-26,81!8,176-15,187-93!12,204-4,232-100!14}
+\put(-1,0){\line(1,0){250}}\msdir=-1
+\mass{39-16,51-7,6,15,65-11,8,77-5,92-73!24,104-9,119-15,
+132-21!159-26,100!14,176-16,187-83!14,204-3,232-70!}\vpos=1
+\endms
+$$
+Этот реальный пример сравнения экспериментального (сверху) и предсказанного
+спектров был введен следующим образом:
+%
+\begin{verbatim}
+\begms
+\mass{39-11,0,21,51-5,7,15,64-5,35,7,77-10,5,91-4,74!27,104-6,
+119-26,132-42,4,159-26,81!8,176-15,187-93!12,204-4,232-100!14}
+\put(-1,0){\line(1,0){250}}\msdir=-1
+\mass{39-16,51-7,6,15,65-11,8,77-5,92-73!24,104-9,119-15,
+132-21!159-26,100!14,176-16,187-83!14,204-3,232-70!}\vpos=1
+\endms
+\end{verbatim}
+%
+По аналогии с командой \verb"\stree", вместо
+\verb"\massp{" \<аргумент> \verb"}" можно писать
+\verb"\begms \mass{" \<аргумент> \verb"} \scale1{} \endms", а между
+\verb"\begms" и \verb"\endms" вставлять любые команды \LaTeX овского
+окружения {\tt picture}. В нашем примере вместо \verb"\scale1{}", которая
+рисует обычную шкалу с рисками и числами, мы провели просто горизонтальную
+линию (ее длина --- округленное в большую сторону значение наибольшего
+массового числа в спектре), а затем нарисовали еще один масс-спектр, который
+получился вверх ногами, потому что перед ним стояло \verb"\msdir=-1". Наконец,
+последнее присваивание \verb"\vpos=1" означает, что весь рисунок должен
+выравниваться по низу (то есть глубина бокса равна нулю). Конечно, при
+использовании самой команды \verb"\massp" выравниванием можно управлять
+обычным способом с помощью необязательного параметра в квадратных скобках
+({\tt b}, {\tt c} или {\tt t}, по умолчанию {\tt c}), но на
+на немного более низком уровне, на который пришлось спуститься в последнем
+примере, действует переменная \verb"\vpos" (это же относится и к разложению
+\verb"\stree" на \verb"\begstr", \verb"\tree" и \verb"\endstr"). Она может
+принимать три значения: 0 --- выравнивание по центру (соответствует параметру
+{\tt [c]}), 1 --- по дну ({\tt [b]}), 2 --- по верхушке ({\tt [t]}) и 3 ---
+без выравнивания (действует только для структурных формул и отвечает
+параметру {\tt [u]}).
+
+В \treeTeX е можно также вводить очень упрощенные схематические рисунки
+спектров \CNMR\ наподобие следующего (высота пиков здесь отражет
+мультиплетности сигналов):
+$$
+\cnmrs{2000}{1912s1645s354d1041s{\llap{$^b\searrow$}}%
+901s138q1576s1703s575q912d1047d{$*$}566q1696s1956s571q953s395t}
+$$
+Приведем соответствующий исходный текст:
+%
+\begin{verbatim}
+\cnmrs{2000}{1912s1645s354d1041s{\llap{$^b\searrow$}}%
+901s138q1576s1703s575q912d1047d{$*$}%
+566q1696s1956s571q953s395t}
+\end{verbatim}
+%
+Команда \verb"\cnmrs" имеет два обязательных параметра: первый --- длина
+шкалы (в десятых от м.\ д.),\ а второй --- описание спектра, в котором для
+каждого сигнала задается значение химического сдвига, умноженное на 10
+(должно быть целое число) и мультиплетность (одна из букв {\tt s} ---
+синглет, {\tt d} --- дублет, {\tt t} --- триплет и {\tt q} --- квартет).
+После знака мультиплетности в фигурных скобках можно поставить метку пика (в
+нашем случае конструкция \verb"\llap{$^b\searrow$}" понадобилась для того,
+чтобы метка пришлась слева от синглета 104.1 м.\ д.\ и не наложилась на
+соседний дублет, помеченный звездочкой).
+
+Способы ввода рассмотренных двух видов спектров немного похожи (по
+сути дела, и здесь, и там --- последовательность чисел с разделителями),
+однако есть и отличия. Так, длинную команду \verb"\massp" можно в любом месте
+разбить на строки, а внутри \verb"\cnmrs" конец строки нежелателен, и его
+(как в приведенном случае) надо маскировать
+знаком комментария (символом \verb"%").
+Кроме того, в \verb"\cnmrs" длина шкалы (и, значит, всего рисунка) всегда
+задается явно, но этого нельзя сделать при вводе масс-спектра. Его размер
+вычисляется по наибольшему массовому числу спектра. Если необходимо получить
+несколько рисунков масс-спектров одинакового размера, можно обмануть машину,
+указав при вводе пик нулевой интенсивности с нужным значением $m/z$.
+Например, закончив ввод масс-спектра выражением \verb"250-0}", вы
+получите шкалу длиной 250 $m/z$ (если, конечно, в спектре не было пика с
+б\'ольшим массовым числом).
+
+\section{Обсуждение результатов}
+
+Один из вопросов, который может возникнуть при знакомстве с настоящей
+работой, формулируется примерно так: зачем изучать какой-то <<птичий язык>>
+для ввода структурных формул, когда есть много удобных программ для
+наглядного редактирования, почти не требующих освоения? По сути дела, это
+старый спор о преимуществах и недостатках командного интерфейса по сравнению
+с графическим. Опытные программисты хорошо знают, что с помощью языка команд
+всегда можно работать быстрее и эффективнее.
+На самом деле, однако, противоречия между двумя способами работы не
+существует, и в идеале хорошо всегда иметь обе возможности (замечательный
+пример их удачного совмещения --- оболочка Norton Commander). При подготовке
+научных публикаций обычно приходится иметь дело в основном со словами
+и символами. Структурные же формулы в химических статьях, подобно
+математическим формулам, чаще тоже удобнее рассматривать просто как элемент
+текста. Если вводить их всегда с помощью химического редактора, то придется
+часто переключаться из одной программы в другую. Даже если предположить, что
+это происходит быстро и непринужденно (в реальности редко достижимый идеал),
+то изменение интерфейса с тектового на графический и обратно все равно
+потребует определенной психологической адаптации. В этом случае возможность
+ввести формулу прямо в тексте, не берясь за мышь и не превращаясь временно в
+чертежника, может сэкономить вам немало времени и нервной энергии.
+
+\begin{thebibliography}
+\frenchspacing
+
+\item
+Knuth, D. The \TeX book. Addison-Wesley, Reading (1984). Русский перевод:
+Дональд Е. Кнут. Все про \TeX.
+
+\item
+Lamport, L. \LaTeX: A Document Preparation System.
+Addison-Wesley, Reading (1984). По \LaTeX у вышло много книжек на русском
+языке. Вот часть из них:
+
+\item
+Ramek, M. In book: Clark, M. (ed.) \TeX: Applications, Uses, Methods.
+Ellis Horwood, London (1990), 277--
+
+\item
+Haas, R. T.; O'Kane, K. C.
+Typesetting Chemical Equations Using \LaTeX.
+Comput. Chem., 11 (1987),
+
+\item
+Fujita, S.
+Typesetting Structural Formulas with the Text Formatter \TeX/LaTeX.
+Comput. Chem., 11 (1993),
+
+\end{thebibliography}
+
+\end{document} \ No newline at end of file