summaryrefslogtreecommitdiff
path: root/support/ochem/ochem.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /support/ochem/ochem.sty
Initial commit
Diffstat (limited to 'support/ochem/ochem.sty')
-rw-r--r--support/ochem/ochem.sty318
1 files changed, 318 insertions, 0 deletions
diff --git a/support/ochem/ochem.sty b/support/ochem/ochem.sty
new file mode 100644
index 0000000000..5fbb094457
--- /dev/null
+++ b/support/ochem/ochem.sty
@@ -0,0 +1,318 @@
+%
+% OCHEM.STY - Stilfile zum Erzeugen von chemischen Formeln in LaTeX
+% (c) 1993-1996,1999-2000 by Ingo Kloeckl
+%
+% 11.09.1993 error handling improved
+% 09.12.1993 neue befehle fuer orbitallappen und geb. bindungen
+% 04.10.1994 griechische symbole in texten
+% 14.02.1996 environment ochem ersetzt durch \ochem-Befehl
+% 15.02.1996 supermini eingefuehrt, die gfbox in htshow... geloescht
+% 20.09.1996 zentrierungsmoeglichkeit durch ochem als \hbox, wertet nun
+% bounding box info aus.
+% 21.09.1996 Trennung zwischen fixen und gleitfaehigen Objekten, verursachen
+% nun keine Verwirrungen mehr.
+% 20.10.1996 Korrekte Bestimmung der BBox (/erg), npr ok
+% 21.10.1996 Verbesserung BBox der Glasgeraete
+% -------------------
+% 22.03.1999 Version 3 beta release: schema compiler in Perl
+% 11.04.1999 Version 3 consolidation
+% 02.05.1999 fshow (PS command) removed due to interference with MetaPost
+% 09.01.2000 new bond shapes >> and >. and b
+% 19.01.2000 new bond shape ~
+% 19.04.2000 undesired spaces inhibited (thanks to B. Seckinge)
+% 10.04.2001 option 'separate' added to easily produce EPS figures
+%
+
+\newcommand{\chemversion}{OCHEM Version 3-0e 2001-04-10 }
+\typeout{package \chemversion}
+\typeout{(c) 1993-1996, 1999 -- 2001 Ingo Kloeckl}
+
+\RequirePackage[dvips]{color}
+\RequirePackage{verbatim}
+\RequirePackage{ifthen}
+
+\newboolean{separate}\setboolean{separate}{false}
+\DeclareOption{separate}{%
+ \setboolean{separate}{true}
+ \newwrite\verb@chemnames
+ \immediate\openout\verb@chemnames \jobname.names
+}
+\ProcessOptions\relax
+
+% user command for chem font setting
+\newcommand{\chemfont}[1]
+ {\renewcommand{\chemfontname}{#1}}
+% default font is sans serif
+\newcommand{\chemfontname}{\sffamily}
+
+%
+% Erzeugt gleitfaehiges Reaktionsschema mit ldf. Nummer und Labelmoeglichkeit
+% \begin{schema[*]}
+% \ochem, \caption, \label...
+% \end{schema[*]}
+%
+\@ifundefined{chapter}
+ {\newcounter{schema}
+ \renewcommand{\theschema}{\arabic{schema}}}
+ {\newcounter{schema}[chapter]
+ \renewcommand{\theschema}{\thechapter--\arabic{schema}}}
+\newcommand{\fps@schema}{htbp}
+\newcommand{\ftype@schema}{5}
+\newcommand{\ext@schema}{lor}
+\newcommand{\fnum@schema}{\schemaname~\theschema}
+\newcommand{\schemaname}{Schema}
+\newcommand{\lorname}{Die Reaktionsschemata}
+\newcommand{\l@schema}{\@dottedtocline{1}{1.5em}{2.3em}}
+
+\newcommand{\tableofschemes}
+ {\@restonecolfalse
+ \if@twocolumn\@restonecoltrue\onecolumn\fi
+ \chapter*{\lorname\@mkboth{\lorname}{\lorname}}
+ {\parindent\z@\@starttoc{lor}}
+ \if@restonecol\twocolumn\fi
+ }
+
+\newenvironment{schema}
+ {\@float{schema}}
+ {\end@float}
+\newenvironment{schema*}
+ {\@dblfloat{schema}}
+ {\end@dblfloat}
+
+%
+% open .chm output file for chemistry environments and install
+% font for chemical text
+%
+\newwrite\verb@chem
+\immediate\openout\verb@chem \jobname.chm
+
+\AtBeginDocument
+ {{\chemfontname\immediate\write\verb@chem{font(\string"
+ \string\usefont\string{\f@encoding\string}\string{\f@family\string}
+ \string{\f@series\string}\string{\f@shape\string}
+ \string\fontsize\string{\f@size\string}\string{\f@baselineskip\string}\string\selectfont
+ \string")}}
+ \ifthenelse{\boolean{separate}}{\pagestyle{empty}}{}
+ }
+
+\AtEndDocument
+ {\immediate\closeout\verb@chem
+ \ifthenelse{\boolean{separate}}{\immediate\closeout\verb@chemnames}{}
+ }
+
+%
+% chemistry environment for placing scheme descriptions in
+% use #1 as name of TeX fragment (-> #1.ctx)
+%
+\newcounter{chemcnt}
+
+\newenvironment{chemistry}[1][\arabic{chemcnt}]
+ {\ifthenelse{\boolean{separate}}{\newpage}{}%
+ \ifthenelse{\boolean{separate}}{\immediate\write\verb@chemnames{#1}}{}%
+ \InputIfFileExists{#1.ctx}{}{\typeout{ochem: cannot find #1.ctx}}%
+ \immediate\write\verb@chem{schema(\string"#1.ctx\string")}%
+ \@bsphack
+ \let\do\@makeother\dospecials
+ \catcode`\^^M\active \catcode`\^^I=12
+ \def\verbatim@processline{%
+ \immediate\write\verb@chem{\the\verbatim@line}}%
+ \verbatim@start}
+ {\@esphack
+ \immediate\write\verb@chem{endschema}%
+ \stepcounter{chemcnt}}
+
+\newenvironment{chemspecial}
+ {\@bsphack
+ \let\do\@makeother\dospecials
+ \catcode`\^^M\active \catcode`\^^I=12
+ \def\verbatim@processline{%
+ \immediate\write\verb@chem{\the\verbatim@line}}%
+ \verbatim@start}
+ {\@esphack
+ }
+
+
+%
+% ------------------------------------------
+% auxiliary functions and macros
+% ------------------------------------------
+%
+\special{!
+ /\par {} def
+ /posx 10 dict def
+ posx begin
+ /c -.5 def /bl 0 def /b -.5 def /br -1 def
+ /r -1 def /tr -1 def /t -.5 def /tl 0 def /l 0 def
+ end
+ /posy 10 dict def
+ posy begin
+ /c -.5 def /bl 0 def /b 0 def /br 0 def
+ /r -.5 def /tr -1 def /t -1 def /tl -1 def /l -.5 def
+ end
+ % x y pos text ftshow -
+ /ftshow { /t exch def cvn /p exch def gs translate
+ t stringwidth exch posx p get mul exch posy p get mul moveto
+ t show gr} def
+ %
+ % abbreviations
+ %
+ /tr { translate } def
+ /sc { scale }def
+ /ro { rotate } def
+ /l { lineto } def
+ /s { stroke } def
+ /m { moveto } def
+ /np { newpath } def
+ /gs { gsave } def
+ /gr { grestore } def
+ %
+ % different bond types
+ % phi x y len s0..s12
+ %
+ /sb__ { currentlinewidth .7 mul setlinewidth } def
+ /b0 { /bl exch def gsave translate rotate
+ newpath 0 0 moveto bl 0 lineto stroke
+ grestore } def
+ /b1 { /bl exch def gsave translate rotate
+ gsave 1 setgray
+ newpath lw lw 1.5 mul moveto bl lw 2 mul sub 0 rlineto stroke
+ newpath lw lw -1.5 mul moveto bl lw 2 mul sub 0 rlineto stroke
+ grestore
+ currentlinewidth 2 mul setlinewidth
+ newpath 0 0 moveto bl 0 lineto stroke
+ grestore } def
+ /b2 { /bl exch def gsave translate rotate
+ newpath 0 lw -.5 mul moveto bl bw -.5 mul lineto 0 bw rlineto
+ 0 lw .5 mul lineto closepath fill
+ grestore } def
+ /b3 { /bl exch def gsave translate rotate
+ newpath 0 lw -.5 mul moveto bl bw -.5 mul lineto 0 bw rlineto
+ 0 lw .5 mul lineto closepath clip
+ [ bd dup ] 0 setdash bw setlinewidth
+ newpath 0 0 moveto bl 0 lineto stroke
+ grestore } def
+ /b4 { /bl exch def gsave translate rotate
+ newpath 0 bw -.15 mul moveto bl bw -.15 mul lineto
+ 0 bw .3 mul rlineto 0 bw .15 mul lineto closepath clip
+ [ bd dup ] 0 setdash bw setlinewidth
+ newpath 0 0 moveto bl 0 lineto stroke
+ grestore } def
+ /b5 { /bl exch def gsave translate rotate
+ newpath 0 bw .5 mul moveto bl 0 rlineto 0 bw -.5 mul moveto bl 0 rlineto stroke
+ grestore } def
+ /b6 { /bl exch def gsave translate rotate
+ newpath 0 0 moveto bl 0 rlineto stroke
+ sb__ .1 bl mul bw moveto .8 bl mul 0 rlineto stroke
+ grestore } def
+ /b7 { /bl exch def gsave translate rotate
+ newpath 0 0 moveto bl 0 rlineto stroke
+ sb__ .1 bl mul bw neg moveto .8 bl mul 0 rlineto stroke
+ grestore } def
+ /b8 { /bl exch def gsave translate rotate
+ newpath 0 0 moveto bl 0 rlineto stroke
+ sb__ .1 bl mul bw neg moveto .8 bl mul 0 rlineto
+ .1 bl mul bw moveto .8 bl mul 0 rlineto stroke
+ grestore } def
+ /b9 { /bl exch def gsave translate rotate
+ currentlinewidth 2 mul setlinewidth 1 setlinecap
+ newpath 0 0 moveto bl 0 lineto stroke
+ grestore } def
+ /b10 { /bl exch def gsave translate rotate
+ newpath 0 0 moveto bl 0 rlineto stroke
+ newpath bl 0 moveto bw neg bw neg rlineto 0 bw dup add rlineto closepath fill
+ grestore } def
+ /b11 { /bl exch def gsave translate rotate
+ newpath 0 0 moveto bl 0 rlineto stroke
+ newpath 0 0 moveto bw bw neg rlineto 0 bw dup add rlineto closepath fill
+ grestore } def
+ /b12 { pop pop pop pop} def
+ /b13 { /bl exch def gsave translate rotate
+ newpath 0 bw -.5 mul moveto bl lw -.5 mul lineto 0 lw rlineto
+ 0 bw .5 mul lineto closepath fill
+ grestore } def
+ /b14 { /bl exch def gsave translate rotate
+ newpath 0 bw -.5 mul moveto bl lw -.5 mul lineto 0 lw rlineto
+ 0 bw .5 mul lineto closepath clip
+ [ bd dup ] 0 setdash bw setlinewidth
+ newpath 0 0 moveto bl 0 lineto stroke
+ grestore } def
+ /b15 { /bl exch def gsave translate rotate
+ bw setlinewidth 1 setlinecap
+ newpath 0 0 moveto bl 0 lineto stroke
+ grestore } def
+ /b16 { /bl exch def gsave translate rotate
+ newpath 0 0 moveto
+ 3 dict begin
+ /n bl bw 2 mul div cvi 1 add def
+ /blt bl n div def
+ /bwt bw bl blt div mul .5 mul def
+ n {bwt 0.3 mul bw
+ bwt 0.7 mul bw neg
+ bwt 0 rcurveto} repeat
+ end
+ stroke
+ grestore } def
+
+ %
+ % arrow types
+ % len phi x y ar0..ar7
+ %
+ /ar0 { gsave translate rotate 0 0 moveto 0 lineto stroke grestore} def
+ /ar1 { gsave translate rotate 0 0 moveto dup 0 lineto stroke newpath 0 moveto aw neg dup rlineto
+ 0 aw dup add rlineto closepath fill grestore} def
+ /ar2 { gsave translate rotate 0 0 moveto 0 lineto stroke newpath 0 0 moveto aw aw rlineto
+ 0 aw dup add neg rlineto closepath fill grestore} def
+ /ar3 { gsave translate rotate 0 aw 2 div moveto dup 0 rlineto 0 aw -.5 mul moveto dup 0 rlineto stroke
+ newpath aw 2 div moveto aw neg aw rlineto 0 aw neg rlineto closepath fill newpath
+ 0 aw -.5 mul moveto aw 0 rlineto 0 aw neg rlineto closepath fill grestore} def
+ /ar4 { gsave translate rotate 0 0 moveto dup 0 lineto stroke newpath 0 moveto aw neg dup rlineto
+ 0 aw dup add rlineto closepath fill newpath 0 0 moveto aw aw lineto
+ 0 aw -2 mul rlineto closepath fill grestore} def
+ /ar5 { gsave translate rotate 0 0 moveto dup 0 lineto stroke newpath dup 0 moveto aw neg dup rlineto
+ 0 aw dup add rlineto closepath fill newpath 2 div dup aw moveto aw -2 mul dup
+ rlineto aw neg moveto aw dup add dup rlineto stroke grestore} def
+ /ar6 { gsave translate rotate 0 0 moveto dup 0 lineto stroke newpath 0 0 moveto aw aw rlineto
+ 0 aw dup add neg rlineto closepath fill newpath 2 div dup aw moveto aw -2 mul dup
+ rlineto aw neg moveto aw dup add dup rlineto stroke grestore} def
+ % phi x y arrow tip
+ /atip { gsave translate rotate
+ /maw aw 2 div def
+ newpath 0 0 moveto maw neg maw rlineto 0 maw -2 mul rlineto closepath fill
+ grestore } def
+ %
+ % marker types: size x y m<type>
+ %
+ /slw { .035 setlinewidth }def
+ /m0 { gsave translate slw dup scale 0 0 .5 0 360 arc closepath stroke
+ grestore } def
+ /m1 { gsave translate slw dup scale 0 0 .5 0 360 arc closepath fill
+ grestore } def
+ /m2 { gsave translate slw dup scale -.5 -.5 moveto 1 0 rlineto 0 1 rlineto
+ -1 0 rlineto closepath stroke
+ grestore } def
+ /m3 { gsave translate slw dup scale -.5 -.5 moveto 1 0 rlineto 0 1 rlineto
+ -1 0 rlineto closepath fill
+ grestore } def
+ /m4 { gsave translate slw dup scale 0 -.5 moveto .5 0 lineto 0 .5 lineto
+ -.5 0 lineto closepath stroke
+ grestore } def
+ /m5 { gsave translate slw dup scale 0 -.5 moveto .5 0 lineto 0 .5 lineto
+ -.5 0 lineto closepath fill
+ grestore } def
+ /m6 { gsave translate slw dup scale -.5 -.5 moveto 1 0 rlineto -.5 1 rlineto
+ closepath stroke
+ grestore } def
+ /m7 { gsave translate slw dup scale -.5 -.5 moveto 1 0 rlineto -.5 1 rlineto
+ closepath fill
+ grestore } def
+ /m8 { gsave translate slw dup scale -.5 0 moveto 1 0 rlineto
+ 0 -.5 moveto 0 1 rlineto stroke
+ grestore } def
+ /m9 { gsave translate slw dup scale -.5 -.5 moveto .5 .5 lineto
+ -.5 .5 moveto .5 -.5 lineto stroke
+ grestore } def
+ /m10 { gsave translate slw dup scale -.5 -.5 moveto .5 .5 lineto
+ -.5 .5 moveto .5 -.5 lineto 0 -.5 moveto 0 .5 lineto stroke
+ grestore } def
+ /m11 { } def
+}