From 318121054ebb87dd1e2d6759d77c51847b6e2ce1 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 3 Jun 2018 21:16:34 +0000 Subject: mcf2graph (3jun18) git-svn-id: svn://tug.org/texlive/trunk@47911 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG | 15 +- Master/texmf-dist/doc/metapost/mcf2graph/README | 11 +- .../doc/metapost/mcf2graph/mcf_exa_soc.mf | 10 +- .../doc/metapost/mcf2graph/mcf_example.pdf | Bin 235016 -> 235065 bytes .../doc/metapost/mcf2graph/mcf_man_soc-064.eps | 4 +- .../doc/metapost/mcf2graph/mcf_man_soc.mf | 40 +- .../doc/metapost/mcf2graph/mcf_manual.pdf | Bin 474538 -> 475648 bytes .../doc/metapost/mcf2graph/mcf_manual.tex | 62 ++- .../doc/metapost/mcf2graph/mcf_mplib_exa.pdf | Bin 179479 -> 179634 bytes .../doc/metapost/mcf2graph/mcf_mplib_exa.tex | 54 +- Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf | 568 ++++++++++++--------- 11 files changed, 419 insertions(+), 345 deletions(-) (limited to 'Master') diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG b/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG index f5a81270fb4..a103f960870 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG +++ b/Master/texmf-dist/doc/metapost/mcf2graph/CHANGELOG @@ -1,6 +1,19 @@ ******************************************************************************* - Changelog of mcf2graph software package by Akira Yamaji 2018-04-16 + Changelog of mcf2graph software package by Akira Yamaji 2018-06-03 ******************************************************************************* +[ver. 4.32 / 2018-06-03] + -add commands C[],N[],O[],S[] + X[1] : "{X^+^}" + X[-1] : "{X^-^}" + -change option parameter name + sw_MOLout => sw_mol_out + sw_auxout => sw_aux_out + -improve MOL file output + sw_mol_out=0 : no MOL file + sw_mol_out=1 : MOL file V2000 + sw_mol_out=2 : MOL file V3000 + -update MCF manual and examples + [ver. 4.31 / 2018-04-16] -add command */*n , n:*\* , |<=n */*n : /n~wv diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/README b/Master/texmf-dist/doc/metapost/mcf2graph/README index 6cf444033df..53e803731d3 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/README +++ b/Master/texmf-dist/doc/metapost/mcf2graph/README @@ -1,7 +1,7 @@ ******************************************************************************** mcf2graph : Convert Molecular Coding Format to graphics with METAFONT/METAPOST Author : Akira Yamaji - version : 4.31 2018-04-16 + version : 4.32 2018-06-03 E-mail : mcf2graph@gmail.com Located at : http://www.ctan.org/pkg/mcf2graph ******************************************************************************** @@ -11,7 +11,7 @@ structure diagrams. This 'Coding' is named from coding(programing) technique adressing,grouping,macro,etc. There are no Meta language commands in MCF. mcf2graph.mf(METAFONT/METAPOST macro) convert MCF file to graphics file - (pk font/PNG/SVG/EPS) or MDL MOL file(V2000). + (pk font/PNG/SVG/EPS) or MDL MOL file. 2. The distribution of software ( 1) README This file @@ -35,9 +35,10 @@ ( 2) >mpost -s ahangle=1 FILENAME => output PNG file (default:eps) ( 3) >mpost -s ahangle=2 FILENAME => output SVG file ( 4) >mpost -s ahangle=3 FILENAME => output MDL Molfile(V2000) - ( 5) >mpost -s ahlength=1 FILENAME => output first definition only (for test) - ( 6) >mpost -s ahlength=2 FILENAME => output report - ( 7) >mpost -s ahlength=3 FILENAME => use plain.mp 'label','drawarrow' + ( 5) >mpost -s ahangle=4 FILENAME => output MDL Molfile(V3000) + ( 6) >mpost -s ahlength=1 FILENAME => output first definition only (for test) + ( 7) >mpost -s ahlength=2 FILENAME => output report + ( 8) >mpost -s ahlength=3 FILENAME => use plain.mp 'label','drawarrow' 4. License Permission is hereby granted, free of charge, to any person obtaining a copy diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf index 5f6a527ede7..c510dcc2e47 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_exa_soc.mf @@ -1,14 +1,14 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format for mcf_example.tex by Akira Yamaji 2018.04.16 +% Molecular Coding Format for mcf_example.tex by Akira Yamaji 2018.06.03 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -input mcf2graph.mf; %%% it must be version 4.31 or later +input mcf2graph.mf; %%% it must be version 4.32 or later %------------------------------------------------------------------------- font_wd:=33mm; font_ht:=24mm; max_bond_length:=4.5mm; %------------------------------------------------------------------------- sw_select:=1; -sw_auxout:=1; +sw_aux_out:=1; sw_font_frame:=0; sw_atom_frame:=0; %%%% sw_expand:=1; @@ -25,7 +25,7 @@ var4:="cal_MW"; tag4:="cMW"; %%%% var9:="inf_EXA"; tag9:="EXA"; %%%% auxtag_out; %%%% sw_report:=1; -%%%% sw_MOLout:=1; +%%%% sw_mol_out:=1; %%%% outputformat:="png"; hppp:=vppp:=0.1; outputtemplate:="%j-%3c.png"; %*************************************************************************** beginfont("EN:Acetamiprid","MW:222.676") @@ -222,7 +222,7 @@ endfont beginfont("EN:Gibberellin A3","MW:346.379"); MCf(<18,?5,3=?7,5=?6[12],8:@,160`1.3,3:&,13=dl,6=wf,8=wb, 5:@,40~zf`1,O,50,//O^180,14~zb:&, - 2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1^60,4^60}:*/H) + 2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60) endfont; %************************************************************************** beginfont("EN:Cholesterol","MW:386.664") diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf index 763f58b333d..ea64258787c 100644 Binary files a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf and b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_example.pdf differ diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.eps b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.eps index 1aee7834309..6e3f08e73da 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.eps +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc-064.eps @@ -1,8 +1,8 @@ %!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -1 -1 212 60 %%HiResBoundingBox: -0.09962 -0.09962 211.90288 59.64348 -%%Creator: MetaPost 2.000 -%%CreationDate: 2017.08.27:1449 +%%Creator: MetaPost 2.00 +%%CreationDate: 2018.06.03:2010 %%Pages: 1 %%DocumentResources: procset mpost-minimal %%+ font NJFVSO-NimbusSanL-Regu ICXWUR-CMR8 diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf index 18d32da7acf..bae2cbb6d62 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_man_soc.mf @@ -1,9 +1,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format file for mcf_manual.tex by Akira.Yamaji 2018.04.16 +% Molecular Coding Format file for mcf_manual.tex by Akira.Yamaji 2018.06.03 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -input mcf2graph.mf; %% it must be version 4.31 or later +input mcf2graph.mf; %% it must be version 4.32 or later %------------------------------------------------------------------------ -sw_auxout:=0; +sw_aux_out:=0; sw_mol_frame:=0; sw_expand:=0; sw_solid:=2; @@ -273,19 +273,10 @@ beginfont("EN:change bond 3") sw_clip:=1; ratio_chain_ring:=1; margin_top_bottom:=3mm; - MCf(<30,!3,1=dt,3=wv) + MCf(<30,!7,1=dt,3=wv,5=bd,7=bz) endfont %*********************************************************************** beginfont("EN:change bond 4") - font_ht:=12mm; - bond_len:=8mm; - sw_clip:=1; - ratio_chain_ring:=1; - margin_top_bottom:=3mm; - MCf(<30,!3,1=bd,3=bz) -endfont -%*********************************************************************** -beginfont("EN:change bond 5") font_ht:=12mm; bond_len:=8mm; margin_top_bottom:=3mm; @@ -322,16 +313,17 @@ beginfont("EN:change ring length") endfont %*********************************************************************** beginfont("EN:Insert atom") - sw_clip:=1; - font_ht:=10mm; + font_wd:=70mm; + font_ht:=12mm; MCf(<30,!2,O,!2,N,!2) endfont %*********************************************************************** beginfont("EN:change atom") - font_ht:=18mm; - MCa(.5,1)(<30,!6,2:O,{3,5}:N) + font_wd:=70mm; + font_ht:=10mm; + MCa(0,0.5)(<-30,!4,2:O,{3,4}:N) sw_numberA:=1; - MCa(.5,.05)(<30,!6,2:O,{3,5}:N) + MCa(1,0.5)(<-30,!4,2:O,{3,4}:N) endfont %*********************************************************************** beginfont("EN:change atom brock address 1") @@ -366,6 +358,13 @@ beginfont("EN:change atom relative adress") MCd(1,.88)(1,.5)(?6,4:\,?6) endfont %*********************************************************************** +beginfont("EN:Charged atom") + sw_clip:=1; + font_wd:=60mm; + font_ht:=15mm; + MCf(<-30,!2,N[1],!2,O[-1]) +endfont +%*********************************************************************** beginfont("EN:fused ring") font_ht:=18mm; margin_top_bottom:=1.5mm; @@ -953,6 +952,8 @@ beginfont("EN:EXT()") font_ht:=30mm; ratio_bond_width:=0.065; sw_solid:=1; + sw_label_emu:=1; + % MCa(0.1,0.5)(<-210,60`1,60`1,60`1,{1,3}=dl,1:/R1,4:/R2^-60) ext( defaultscale:=0.6; @@ -968,6 +969,7 @@ beginfont("EN:EXT()") drawarrow (0.52w,0.5h)..(0.6w,0.5h); defaultscale:=0.7; label("+",(0.25w,0.5h)); + ratio_thickness_char:=0.125; label.bot("Diels-Alder Reaction",(0.5w,h)); ) endfont @@ -1055,7 +1057,7 @@ beginfont("EN:Gibberellin A3","CAS:77-06-5","FM:C19H22O6","MW:346.37"); font_ht:=20mm; MCf(<18,?5,3=?7,5=?6[12],8:@,160`1.3,3:&,13=dl,6=wf,8=wb, 5:@,40~zf`1,O,50,//O^180,14~zb:&, - 2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1^60,4^60}:*/H) + 2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60) endfont %*************************************************************************** beginfont("EN:Quinine","CAS:130-95-0","FM:C20H24N2O2","MW:324.42") diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf index e6ba522d695..c976c47ff4a 100644 Binary files a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf and b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.pdf differ diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex index d5e694c8ca4..f39d7cbf80c 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_manual.tex @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Molecular Coding Format manual by Akira Yamaji 2018.04.16 +% Molecular Coding Format manual by Akira Yamaji 2018.06.03 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[a4paper]{article} %%%%\documentclass[a4paper,twoside]{article} @@ -85,7 +85,6 @@ \linethickness{0.08mm}% %---------------------------------------------------------------------------- \newpage -\setcounter{page}{1} \section{Introduction} Molecular Coding Format(MCF) is new linear notation represent chemical structure diagrams. @@ -93,7 +92,7 @@ This 'Coding' is named from coding(programing) technique like adressing,grouping,macro,etc. There are no Meta language commands in MCF. mcf2graph convert MCF file to graphics file -pk font,PNG,SVG,EPS or MDL MOL file(V2000).\\ +pk font,PNG,SVG,EPS or MDL MOL file.\\ %----------------------------------------------------------------------------- \section{MCF syntax} \subsection{Make bond} @@ -227,28 +226,17 @@ pk font,PNG,SVG,EPS or MDL MOL file(V2000).\\ \begin{verbatim} Bn=bond type : change bond type at Bn dt : dotted / wv : wave - - <30,!3,1=dt,3=wv -\end{verbatim} -\MCFstructure -\vspace{-3mm}% -\begin{verbatim} - dt wv -\end{verbatim} -%----------------------------------------------------------------------------- -\subsubsection{Broad} -\begin{verbatim} bd : broad / bz : broad dotted - <30,!3,1=bd,3=bz + <30,!7,1=dt,3=wv,5=bd,7=bz \end{verbatim} \MCFstructure \vspace{-3mm}% \begin{verbatim} - bd bz + dt wv bd bz \end{verbatim} %----------------------------------------------------------------------------- -\subsubsection{Change multi bond type} +\subsubsection{Change multiple bond type} \begin{verbatim} {2,4,6}=dr : 2=dr,4=dr,6=dr @@ -294,7 +282,6 @@ pk font,PNG,SVG,EPS or MDL MOL file(V2000).\\ \end{verbatim} \MCFstructure %----------------------------------------------------------------------------- -\newpage \subsection{Change atom} \subsubsection{Insert atom} \begin{verbatim} @@ -307,9 +294,9 @@ pk font,PNG,SVG,EPS or MDL MOL file(V2000).\\ \subsubsection{Addressed atom} \begin{verbatim} 2:O : change A2 C to O - {3,5}:N : change A3,A5 C to N + {3,4}:N : change A3,A4 C to N - <30,!6,2:O,{3,5}:N + <30,!4,2:O,{3,4}:N \end{verbatim} \MCFstructure %----------------------------------------------------------------------------- @@ -346,6 +333,14 @@ pk font,PNG,SVG,EPS or MDL MOL file(V2000).\\ \end{verbatim} \MCFstructure %----------------------------------------------------------------------------- +\subsubsection{Charged atom} +\begin{verbatim} + N[1]:N+ / O[-1]:O- + + <-30,!2,N[1],!2,O[-1] +\end{verbatim} +\MCFstructure +%----------------------------------------------------------------------------- \subsection{Fuse ring} \subsubsection{Attached 1 bond} \begin{verbatim} @@ -1053,6 +1048,8 @@ pk font,PNG,SVG,EPS or MDL MOL file(V2000).\\ p[m]: molecular origin position w[m]: molecular width h[m]: molecular height + ratio_thickness_char: + pen thickness / char width %---------------------------------------- beginfont() @@ -1064,17 +1061,13 @@ beginfont() MCd(1,1)(0.1,0.5) (<-210,60`1,60`1,60`1,{1,3}=dl, 1:/R1,4:/R2^-60) - ext( - defaultscale:=0.6; - label.bot("Diene",p0+(0.5w,0)); - ) + ext(defaultscale:=0.6; + label.bot("Diene",p0+(0.5w,0));) %--------------------------------------- MCd(1,1)(0.4,0.5) (<-30,-60`1,1=dl,1:/R3,2:/R4^60) - ext( - defaultscale:=0.6; - label.bot("Dienophile",p0+(0.5w,0)); - ) + ext(defaultscale:=0.6; + label.bot("Dienophile",p0+(0.5w,0));) %--------------------------------------- MCd(1,1)(0.9,0.5) (<30,?6,6=dl,2:/R2,3:/R4,4:/R3,5:/R1) @@ -1083,6 +1076,7 @@ beginfont() drawarrow (0.52w,0.5h)..(0.6w,0.5h); defaultscale:=0.7; label("+",(0.25w,0.5h)); + ratio_thickness_char:=0.125; label.bot("Diels-Alder Reaction", (0.5w,h)); ) @@ -1245,7 +1239,7 @@ drawarrow & drawdblarrow: 13=dl,6=wf,8=wb, 5:@,40~zf`1,O,60,//O^180,14~zb:&, 2:/COOH,7://_,13:*/OH,8:/*OH, - 14:*/_,{1^60,4^60}:*/H + 14:*/_,{1,4}:*/H^60 \end{verbatim} \MCFstructure %----------------------------------------------------------------------------- @@ -1494,15 +1488,17 @@ cFM : molecular formula calculated \newpage %------------------------------------------------------------------------ \noindent% -\subsection{Molfile output} +\subsection{MOL file output} \paragraph{(Insert option parameter setting)} \begin{verbatim} - sw_MOLout:=1; - ** default : sw_MOLout=0 + sw_mol_out:=1; (V2000) + sw_mol_out:=2; (V3000) + ** default : sw_mol_out=0 \end{verbatim} \paragraph{(Command line)} \begin{verbatim} - >mpost -s ahangle=3 FILENAME (molecular definition file) + >mpost -s ahangle=3 FILENAME (molecular definition file) V2000 + >mpost -s ahangle=4 FILENAME (molecular definition file) V3000 \end{verbatim} \paragraph{(Output)} \begin{verbatim} diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf index 461372c8694..e7c1fd164ab 100644 Binary files a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf and b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.pdf differ diff --git a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex index 8d9ce8d6572..98a89ef5d1b 100644 --- a/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex +++ b/Master/texmf-dist/doc/metapost/mcf2graph/mcf_mplib_exa.tex @@ -1,7 +1,7 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% Example of MCF typest with LuaLaTeX(luamplib) by A.Yamaji 2018.04.16 +% Example of MCF typest with LuaLaTeX(luamplib) by A.Yamaji 2018.06.03 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%%% mcf2graph.mf it must be version 4.31 or later +%%% mcf2graph.mf it must be version 4.32 or later \documentclass{article} %------------------------------------------------------------------------------ \usepackage{luamplib}% @@ -10,7 +10,7 @@ \mplibcodeinherit{enable}% \mplibverbatim{enable}% \everymplib{if unknown Ph1: input mcf2graph.mf; fi - sw_auxout:=1; + sw_aux_out:=1; sw_label_emu:=1; sw_font_frame:=4; max_bond_length:=4.5mm; @@ -138,7 +138,7 @@ beginfont("NO:4","EN:Gibberellin A3","MW:346.37"); MCa(0.8,0.5)( <18,?5,3=?7,5=?6[12],8:@,160`1.3,3:&,13=dl,6=wf,8=wb, 5:@,40~zf`1,O,60,//O^180,14~zb:&, - 2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1^60,4^60}:*/H) + 2:/COOH,7://_,13:*/OH,8:/*OH,14:*/_,{1,4}:*/H^60) EXT( label.lrt("("&inf_EN&")",(0,h)); defaultscale:=0.8; @@ -154,7 +154,7 @@ endfont; 13=dl,6=wf,8=wb, 5:@,40~zf`1,O,60,//O^180,14~zb:&, 2:/COOH,7://_,13:*/OH,8:/*OH, -14:*/_,{1^60,4^60}:*/H) +14:*/_,{1,4}:*/H^60) \end{verbatim} \end{minipage} \vspace{7mm}\\ @@ -256,7 +256,7 @@ $12:\*^-15,O,60,//O,-60) %---------------------------------------------------------------------------- \noindent \begin{mplibcode} -font_wd:=80mm; font_ht:=65mm; +font_wd:=80mm; font_ht:=70mm; beginfont("NO:6","EN:Vancomycin","MW:1449.25"); MCa(0.9,0)( <30, @@ -357,17 +357,16 @@ font_wd:=160mm; font_ht:=75mm; max_bond_length:=5mm; %------------------------------------------------------------------------ -Om:='("{O^-^}"); -MCa(0.33, 1)(<30,Om,!0,//O,!,//O,!2,//O,!,Om) -MCa(0.66, 1)(<30,Om,!0,//O,!4,//O,!,Om,-4`1:\,//O,!,Om,4:/OH^-165) -MCa(1, 1)(<30,Om,!0,//O,!2,!~dr,!,//O,!,Om,-4`1:\,//O,!,Om) -MCa(1, 0.55)(<30,Om,!0,//O,!4,//O,!,Om,-4:\`1,//O,!,Om) -MCa(1, 0.05)(<30,Om,!0,//O,!3,//O,!,//O,!,Om,-4:\`1,//O,!,Om) -MCa(0.66,0.05)(<30,Om,!0,//O,!3,//O,!,//O,!,Om) -MCa(0.33,0.05)(<30,Om,!0,//O,!3,//O,!,"{S-CoA}") -MCa(0, 0.05)(<30,Om,!0,//O,!3,//O,!,Om) -MCa(0, 0.55)(<30,Om,!0,//O,!,!~dr,!,//O,!,Om) -MCa(0, 1)(<30,Om,!0,//O,!3,//O,!,Om,3:/OH) +MCa(0.33, 1)(<30,O[-1],!0,//O,!,//O,!2,//O,!,O[-1]) +MCa(0.66, 1)(<30,O[-1],!0,//O,!4,//O,!,O[-1],-4`1:\,//O,!,O[-1],4:/OH^-165) +MCa(1, 1)(<30,O[-1],!0,//O,!2,!~dr,!,//O,!,O[-1],-4`1:\,//O,!,O[-1]) +MCa(1, 0.55)(<30,O[-1],!0,//O,!4,//O,!,O[-1],-4:\`1,//O,!,O[-1]) +MCa(1, 0.05)(<30,O[-1],!0,//O,!3,//O,!,//O,!,O[-1],-4:\`1,//O,!,O[-1]) +MCa(0.66,0.05)(<30,O[-1],!0,//O,!3,//O,!,//O,!,O[-1]) +MCa(0.33,0.05)(<30,O[-1],!0,//O,!3,//O,!,"{S-CoA}") +MCa(0, 0.05)(<30,O[-1],!0,//O,!3,//O,!,O[-1]) +MCa(0, 0.55)(<30,O[-1],!0,//O,!,!~dr,!,//O,!,O[-1]) +MCa(0, 1)(<30,O[-1],!0,//O,!3,//O,!,O[-1],3:/OH) %------------------------------------------------------------------------- EXT( defaultfont:="uhvr8r"; @@ -418,17 +417,16 @@ beginfont("EN:TCA cycle") font_wd:=160mm; font_ht:=75mm; max_bond_length:=5mm; -Om:='("{O^-^}"); -MCa(0.33, 1)(<30,Om,!0,//O,!,//O,!2,//O,!,Om) -MCa(0.66, 1)(<30,Om,!0,//O,!4,//O,!,Om,-4`1:\,//O,!,Om,4:/OH^-165) -MCa(1, 1)(<30,Om,!0,//O,!2,!~dr,!,//O,!,Om,-4`1:\,//O,!,Om) -MCa(1, 0.55)(<30,Om,!0,//O,!4,//O,!,Om,-4:\`1,//O,!,Om) -MCa(1, 0.05)(<30,Om,!0,//O,!3,//O,!,//O,!,Om,-4:\`1,//O,!,Om) -MCa(0.66,0.05)(<30,Om,!0,//O,!3,//O,!,//O,!,Om) -MCa(0.33,0.05)(<30,Om,!0,//O,!3,//O,!,"{S-CoA}") -MCa(0, 0.05)(<30,Om,!0,//O,!3,//O,!,Om) -MCa(0, 0.55)(<30,Om,!0,//O,!,!~dr,!,//O,!,Om) -MCa(0, 1)(<30,Om,!0,//O,!3,//O,!,Om,3:/OH) +MCa(0.33, 1)(<30,O[-1],!0,//O,!,//O,!2,//O,!,O[-1]) +MCa(0.66, 1)(<30,O[-1],!0,//O,!4,//O,!,O[-1],-4`1:\,//O,!,O[-1],4:/OH^-165) +MCa(1, 1)(<30,O[-1],!0,//O,!2,!~dr,!,//O,!,O[-1],-4`1:\,//O,!,O[-1]) +MCa(1, 0.55)(<30,O[-1],!0,//O,!4,//O,!,O[-1],-4:\`1,//O,!,O[-1]) +MCa(1, 0.05)(<30,O[-1],!0,//O,!3,//O,!,//O,!,O[-1],-4:\`1,//O,!,O[-1]) +MCa(0.66,0.05)(<30,O[-1],!0,//O,!3,//O,!,//O,!,O[-1]) +MCa(0.33,0.05)(<30,O[-1],!0,//O,!3,//O,!,"{S-CoA}") +MCa(0, 0.05)(<30,O[-1],!0,//O,!3,//O,!,O[-1]) +MCa(0, 0.55)(<30,O[-1],!0,//O,!,!~dr,!,//O,!,O[-1]) +MCa(0, 1)(<30,O[-1],!0,//O,!3,//O,!,O[-1],3:/OH) EXT( defaultfont:="uhvr8r"; defaultscale:=0.75; diff --git a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf index 875b4e32b1a..f553da1e7dc 100644 --- a/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf +++ b/Master/texmf-dist/metapost/mcf2graph/mcf2graph.mf @@ -1,5 +1,5 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% mcf2graph ver 4.31 Copyright (c) 2013-2018 Akira Yamaji +% mcf2graph ver 4.32 Copyright (c) 2013-2018 Akira Yamaji % % Permission is hereby granted, free of charge, to any person obtaining a copy of this software % and associated documentation files (the "Software"), to deal in the Software without restriction, @@ -17,7 +17,7 @@ % OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % mcf2graph is METAFONT/METAPOST macro package convert -% Molecular Coding Format(MCF) to font(pk)/eps/sgv/png/mdl molfile(V2000) +% Molecular Coding Format(MCF) to font(pk)/eps/sgv/png/mdl molfile %---------------------------------------------------------------------------------------------- % This package is located at : http://www.ctan.org/pkg/mcf2graph % Suggestion or request mail to : mcf2graph@gmail.com @@ -25,25 +25,26 @@ % Set output no image file : mpost -s ahangle=0 FILENAME % Set outputformat to "png" : mpost -s ahangle=1 FILENAME % Set outputformat to "svg" : mpost -s ahangle=2 FILENAME -% Set outputformat to MDL Molfile : mpost -s ahangle=3 FILENAME +% Set outputformat to MOL(V2000) : mpost -s ahangle=3 FILENAME +% Set outputformat to MOL(V3000) : mpost -s ahangle=4 FILENAME % Set make first font only : mpost -s ahlength=1 FILENAME % Set output report : mpost -s ahlength=2 FILENAME % Set to use plain.mp label,arrow : mpost -s ahlength=3 FILENAME %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% tracingstats:=1; -message " This is mcf2graph ver 4.3 2018.04"; +message " This is mcf2graph ver 4.3 2018.06"; %------------------------------------------------------------------------------------------------- newinternal nA,nB,nC,nD,nE,nF,char_num,str_cnt,sub_usr,sub_int,tbl_cnt; numeric save_para[],comD[][],parD[][],cntD[],tbl_str_wd[],tbl_atom[],tbl_subst[][],tbl_atom_wt[], - tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[]; + tbl_atom_mi[],tbl_char_wd[],tbl_char_ht[],chgA[]; string tbl_atom_str[],strD[],var[],tag[],mp_log_name,aux_delimiter,atomfont, save_atomfont,save_defaultfont; picture mol_stru[]; path arrow_path,arrow_head; %------------------------------------------------------------------------------------------------- char_num:=str_cnt:=proc_end:=sw_label_emu:=0; -sw_numberA:=sw_numberB:=sw_mol_frame:=sw_auxout:=sw_solid:=sw_expand:=sw_font_frame:=sw_clip:=0; -sw_atom_frame:=sw_report:=sw_MOLout:=sw_subst_off:=sw_bond_single:=sw_auxfix:=sw_arrow:=0; +sw_numberA:=sw_numberB:=sw_mol_frame:=sw_aux_out:=sw_solid:=sw_expand:=sw_font_frame:=sw_clip:=0; +sw_atom_frame:=sw_report:=sw_mol_out:=sw_subst_off:=sw_bond_single:=sw_auxfix:=sw_arrow:=0; numberA_start:=numberB_start:=1; numberA_end:=numberB_end:=4095; aux_max:=max_inf_num:=20; aux_delimiter:=";"; var1:="jobname"; tag1:="F"; var2:="char_num"; tag2:="C"; for i=3 upto aux_max: var[i]:=tag[i]:=""; endfor @@ -60,8 +61,9 @@ if (known green)and(known ahlength): fi if ahangle=0: def shipit = enddef; % No image file elseif ahangle=1: outputformat:="png"; hppp:=vppp:=0.1; % PNG format - elseif ahangle=2: outputformat:="svg"; % SVG format - elseif ahangle=3: sw_MOLout:=1; def shipit = enddef; % MDL Molefile on + elseif ahangle=2: outputformat:="svg"; prologues:=3; % SVG format + elseif ahangle=3: sw_mol_out:=1; def shipit = enddef; % output MOL V2000 + elseif ahangle=4: sw_mol_out:=2; def shipit = enddef; % output MOL V3000 fi outputtemplate:="%j-%3c."&outputformat; def beginchar(expr a,b,c,d)= beginfig(a) w:=b*pt; h:=c*pt; enddef; @@ -77,7 +79,6 @@ else: f_MP:=0; def Cp(expr s) = enddef; def color = transform enddef; def printf expr s= message s enddef; - %----------------------------------------------------------------------- sw_arrow:=0; dotlabeldiam:=3bp; %----------------------------------------------------------------------- @@ -88,11 +89,12 @@ fi clearit; for i=0 upto 20: mol_stru[i]:=nullpicture; endfor %-------------------------------------------------------------------------------------------------- -let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; +let DIV= /; let MUL= *; let LT= <; let GT= >; let AND= &; let :: = : ; let == = =; let ef=elseif; %-------------------------------------------------------------------------------------------------- ?3:=?20:=Ph:=Ph1:=Ph2:=hz:=0; vt:=1; -margin_left_right:=margin_top_bottom:=0.4mm; ratio_bond_width:=0.1; -ratio_chain_ring:= 0.66; ratio_atom_bond:=0.36; ratio_thickness_bond:=0.015; +margin_left_right:=margin_top_bottom:=0.4mm; +ratio_bond_width:=0.1; ratio_chain_ring:= 0.66; ratio_atom_bond:=0.36; +ratio_thickness_bond:=0.015; ratio_thickness_char:=0.1; ratio_char_bond:=1.5; ratio_bondgap_bond:=0.15; ratio_zebragap_bond:=0.12; ratio_zebra_black:=0.4; ratio_wedge_bond:=0.12; ratio_atomgap_atom:=0.050; offset_thickness:=0.2pt; offset_bond_gap:=0.3pt; offset_zebra_gap:=0.1pt; @@ -121,10 +123,10 @@ def_com(-4000)(_term,_jp_atom,_jp_atom_abs,_jp_bond,_cyc,_cyc_sB,_cyc_eB,_set_li def_com(1)(si,dl,dr,db,dm,tm,wf,wb,bd,bz,zf,zb,dt,wv,nl,vf,vb,si_,wf_,wb_,bd_); %-------------------------------------------------------------------------------------------------- def parameter_list= - sw_report,sw_numberA,sw_numberB,sw_mol_frame,sw_auxout,sw_solid,sw_expand,sw_MOLout, + sw_report,sw_numberA,sw_numberB,sw_mol_frame,sw_aux_out,sw_solid,sw_expand,sw_mol_out, sw_atom_frame,sw_font_frame,sw_subst_off,sw_bond_single,sw_clip,sw_arrow,sw_label_emu, margin_left_right,margin_top_bottom,ratio_atom_bond,ratio_thickness_bond,ratio_char_bond, - ratio_chain_ring,ratio_bondgap_bond,ratio_zebra_black,ratio_zebragap_bond, + ratio_chain_ring,ratio_bondgap_bond,ratio_zebra_black,ratio_zebragap_bond,ratio_thickness_char, ratio_wedge_bond,ratio_atomgap_atom,ratio_bond_width,font_wd,font_ht, bond_len,offset_atom,offset_wedge,max_bond_length,offset_zebra_gap,offset_bond_gap, thickness_font_frame,offset_thickness,numberA_start,numberA_end,numberB_start,numberB_end, @@ -396,7 +398,7 @@ def ext_puts(expr a)(expr STR)= elseif sA="^": if nC= 0.5: nC:=0; else: nC:= 0.5; fi else: if defaultfont="draw": - draw_char(sA,cp+(0,nB*nC),nB,0.35*ratio_char_bond*bp,0); + draw_char(sA,cp+(0,nB*nC),nB,ratio_thickness_char*defaultscale*defaultsize,0); cp:=cp+(nB*tbl_char_wd[nA],0); else: pC:=sA infont defaultfont scaled defaultscale; @@ -404,8 +406,9 @@ def ext_puts(expr a)(expr STR)= cp:=cp+(lrcorner pC-llcorner pC); fi fi - else: draw_char(sA,cp,nB,0.35*ratio_char_bond*bp,0); - cp:=cp+(nB*tbl_char_wd[nA],0); + else: + draw_char(sA,cp,nB,ratio_thickness_char*defaultscale*defaultsize,0); + cp:=cp+(nB*tbl_char_wd[nA],0); fi endfor endgroup; @@ -499,7 +502,7 @@ def MCd(expr RW,RH)(expr FW,FH)(text TX)= begingroup save com,par,adrA,adrB,f_bra,envT,envB,lenT,lineT,strAT,stkA,stkB,stkL,stkM,cntP,bondL,temp_len, temp_cntB,f_end,f_term,rotT,adrS,f_at,f_lineT,f_rotT,f_lenT,f_envT,angT,tempB,tempA, - glu,xpos,ypos,str_len,max_x,max_y,par_s,par_e,score_u,hat,f_char,ps_adr,ps_com, + glu,xpos,ypos,str_len,max_x,max_y,par_s,par_e,score_u,hat,f_char,ps_adr,ps_com,sA, op_com,op_par,op_cnt,crR,colorA,colorB,PA,PO,PP,PX; %----------------------------------------------------------------------------------------------- def PA= sub_add enddef; @@ -509,9 +512,10 @@ def MCd(expr RW,RH)(expr FW,FH)(text TX)= %----------------------------------------------------------------------------------------------- numeric stkB[],stkA[],stkL[],stkM[],f_char[],ps_adr[],ps_com[],colorA[],colorB[], op_com[][],op_par[][],op_cnt[]; + string sA; %----------------------------------------------------------------------------------------------- if (sw_numberA>=1)or(sw_numberB>=1): ratio_atom_bond:=0.25; fi - if (sw_expand=1)or(sw_MOLout=1): expand_set; fi + if (sw_expand=1)or(sw_mol_out>=1): expand_set; fi sub_usr:=sub_usr_start; sub_int:=sub_int_start; par_s:=ASCII("{"); par_e:=ASCII("}"); score_u:=ASCII("_"); hat:=ASCII("^"); @@ -540,6 +544,8 @@ def MCd(expr RW,RH)(expr FW,FH)(text TX)= for i=1 upto cntB: if lineB[i]>=si_: draw_bond(i,sB[i],eB[i],angB[i],lineB[i]); fi endfor %----------------------------------------------------------------------------------------------- for i=1 upto cntA: + sA:=substring(3,4) of strD[numS[i]]; + if sA="+": chgA[i]:=1; ef sA="-": chgA[i]:=-1; else: chgA[i]:=0; fi if (sw_numberA>=1)and(i>=numberA_start)and(i<=numberA_end): if sw_numberA=2: nA:=i-numberA_start+1; elseif sw_numberA=3: if numberA_end=1))and(f_MP=1): proc_calc_out; fi %----------------------------------------------------------------------------------------------- %%%% message "count of usr ="& decimal(sub_usr) &" "& decimal(sub_usr-sub_usr_start); %%%% message "count of int ="& decimal(sub_int) &" "& decimal(sub_int-sub_int_start); @@ -657,58 +663,58 @@ def proc_bond_atom(expr n)= for i=0 upto 5: stkA[i]:=stkB[i]:=0; endfor %----------------------------------------------------------------------------------------------- for i=n upto cntD[0]: - com:=comD[0][i]; par:=parD[0][i]; - if com=_push: + nC:=comD[0][i]; par:=parD[0][i]; + if nC=_push: if par=1: stkL[adrS]:=bondL; stkA[incr adrS]:=adrA:=cntA; stkB[adrS]:=adrB:=cntB; elseif par=0: temp_len:=bondL; elseif par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB; fi - elseif com=_pop: if par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; bondL:=stkL[adrS]; - elseif par=0: bondL:=temp_len; - elseif par=2: stkA[adrS+1]:=0; + ef nC=_pop: if par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; bondL:=stkL[adrS]; + ef par=0: bondL:=temp_len; + ef par=2: stkA[adrS+1]:=0; fi - elseif com=_mk_bond: if (par=0)and(rotT<>0): rotT:=0; fi add_atom; - elseif com=_set_adr: adrT:=par; - elseif com=_set_atom: strAT:=par; - elseif com=_postA: ps_put; - elseif com=_postB: lineT:=dm; ps_put; - elseif com=_postC: lineT:=wf; ps_put; - elseif com=_postD: lineT:=zf; ps_put; - elseif com=_postE: lineT:=nl; ps_put; - elseif com=_postF: lineT:=0; ps_put; - elseif com=_postG: lineT:=wv; ps_put; - elseif com=_postH: lineT:=nl; lenT:=_size_a; ps_put; - elseif com=_jp_bond: termA; tempB:=getB(par); check_adrB(tempB); sB[cntB+1]:=sB[tempB]; f_bra:=1; - elseif com=_jp_atom: termA; tempA:=getA(par); check_adrA(tempA); sB[cntB+1]:=tempA; f_bra:=1; - elseif com=_jp_atom_abs: sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB; - elseif com=_chg_atom: numS[getA(adrT)]:=parD[par][1]; - elseif com=_N: numS[getA(par)]:=parD[N][1]; - elseif com=_O: numS[getA(par)]:=parD[O][1]; - elseif com=_S: numS[getA(par)]:=parD[S][1]; - elseif com=_chg_len: if par=_ring_len: bondL:=ringL; - elseif par=0: if lenT<>crR: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi + ef nC=_mk_bond: if (par=0)and(rotT<>0): rotT:=0; fi add_atom; + ef nC=_set_adr: adrT:=par; + ef nC=_set_atom: strAT:=par; + ef nC=_postA: ps_put; + ef nC=_postB: lineT:=dm; ps_put; + ef nC=_postC: lineT:=wf; ps_put; + ef nC=_postD: lineT:=zf; ps_put; + ef nC=_postE: lineT:=nl; ps_put; + ef nC=_postF: lineT:=0; ps_put; + ef nC=_postG: lineT:=wv; ps_put; + ef nC=_postH: lineT:=nl; lenT:=_size_a; ps_put; + ef nC=_jp_bond: termA; tempB:=getB(par); check_adrB(tempB); sB[cntB+1]:=sB[tempB]; f_bra:=1; + ef nC=_jp_atom: termA; tempA:=getA(par); check_adrA(tempA); sB[cntB+1]:=tempA; f_bra:=1; + ef nC=_jp_atom_abs: sB[cntB+1]:=par; f_bra:=1; temp_cntB:=cntB; + ef nC=_chg_atom: numS[getA(adrT)]:=parD[par][1]; + ef nC=_N: numS[getA(par)]:=parD[N][1]; + ef nC=_O: numS[getA(par)]:=parD[O][1]; + ef nC=_S: numS[getA(par)]:=parD[S][1]; + ef nC=_chg_len: if par=_ring_len: bondL:=ringL; + ef par=0: if lenT<>crR: bondL:=lenT; else: if bondL<0: bondL:=1; fi fi else: bondL:=par; fi - elseif com=_get_len: if par=0: if bondL=crR: bondL:=lenT; fi else: ringL:=lenB[getB(par)]; fi - elseif com=_tmp_len: lenT:=par; - elseif com=_set_line: lineB[getB(adrT)]:=par; - elseif com=_dl: lineB[getB(par)]:=dl; - elseif com=_mb: lineB[getB(-1)]:=par; - elseif (com=_chg_line)or(com=_tmp_line): lineT:=par; - elseif com=_tmp_rot: rotT:=par; - elseif com=_cyc: f_end:=getA(par); check_adrA(f_end); add_atom; - elseif com=_cyc_eB: f_end:=eB[getB(par)]; add_atom; - elseif com=_cyc_sB: f_end:=sB[getB(par)]; add_atom; - elseif com=_chg_env: envB:=par; - elseif com=_tmp_env: envT:=par; - elseif com=_set_clr: + ef nC=_get_len: if par=0: if bondL=crR: bondL:=lenT; fi else: ringL:=lenB[getB(par)]; fi + ef nC=_tmp_len: lenT:=par; + ef nC=_set_line: lineB[getB(adrT)]:=par; + ef nC=_dl: lineB[getB(par)]:=dl; + ef nC=_mb: lineB[getB(-1)]:=par; + ef (nC=_chg_line)or(nC=_tmp_line): lineT:=par; + ef nC=_tmp_rot: rotT:=par; + ef nC=_cyc: f_end:=getA(par); check_adrA(f_end); add_atom; + ef nC=_cyc_eB: f_end:=eB[getB(par)]; add_atom; + ef nC=_cyc_sB: f_end:=sB[getB(par)]; add_atom; + ef nC=_chg_env: envB:=par; + ef nC=_tmp_env: envT:=par; + ef nC=_set_clr: f_at:=par; if par=1: if lineT<>si: f_lineT:=1; fi if rotT<>0: f_rotT:=1; fi if lenT<>crR: f_lenT:=1; fi if envT<>hz: f_envT:=1; fi - elseif par=0: f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; lineT:=si; lenT:=crR; + ef par=0: f_lineT:=f_rotT:=f_lenT:=f_envT:=rotT:=envT:=0; lineT:=si; lenT:=crR; fi - elseif com=_term: termA; - elseif com=_set_colorA: colorA[getA(adrT)]:=par; - elseif com=_set_colorB: colorB[getB(adrT)]:=par; + ef nC=_term: termA; + ef nC=_set_colorA: colorA[getA(adrT)]:=par; + ef nC=_set_colorB: colorB[getB(adrT)]:=par; fi endfor enddef; @@ -734,36 +740,35 @@ def proc_skeleton= for i=0 upto 5: stkA[i]:=stkB[i]:=0; endfor %---------------------------------------------------------------------------------------------- for i=1 upto cntD[0]: - com:=comD[0][i]; par:=parD[0][i]; - if com=_push: if par=1: stkM[adrS]:=envB; adrS:=adrS+1; stkA[adrS]:=adrA:=cntA; + nC:=comD[0][i]; par:=parD[0][i]; + if nC=_push: if par=1: stkM[adrS]:=envB; adrS:=adrS+1; stkA[adrS]:=adrA:=cntA; stkB[adrS]:=adrB:=cntB; - elseif par=0: temp_len:=bondL; - elseif par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB; + ef par=0: temp_len:=bondL; + ef par=2: stkA[adrS+1]:=cntA; stkB[adrS+1]:=cntB; fi - elseif com=_pop: if par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; envB:=stkM[adrS]; - elseif par=0: temp_len:=bondL; - elseif par=2: stkA[adrS+1]:=0; + ef nC=_pop: if par=1: adrA:=stkA[decr adrS]; adrB:=stkB[adrS]; envB:=stkM[adrS]; + ef par=0: temp_len:=bondL; + ef par=2: stkA[adrS+1]:=0; fi - elseif com=_jp_bond: termB; tempB:=getB(par); posBs:=posA[sB[tempB]]; + ef nC=_jp_bond: termB; tempB:=getB(par); posBs:=posA[sB[tempB]]; angT:=angB[tempB]; f_bra:=1; rotT:=0; - elseif com=_jp_atom: termB; adrT:=getA(par); posBs:=posA[adrT]; + ef nC=_jp_atom: termB; adrT:=getA(par); posBs:=posA[adrT]; angT:=ang_br[adrT]; f_bra:=1; rotT:=0; - elseif com=_jp_atom_abs: adrT:=par; posBs:=posA[adrT]; + ef nC=_jp_atom_abs: adrT:=par; posBs:=posA[adrT]; angT:=ang_br[adrT]; f_bra:=1; rotT:=0; temp_cntB:=cntB; - elseif com=_adj_ang: if (angT<40)or(angT>320): angT:=0; elseif angT<140: angT:=90; - elseif angT<220: angT:=180; else: angT:=270; fi - elseif com=_mk_bond: if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_bond(par); - elseif com=_rot_ang: angT:=(angT+par) mod 360; - elseif com=_tmp_rot: rotT:=par; - elseif (com>=_postA)and(com<=_postH): rotT:=0; - elseif com=_chg_env: envB:=par; - elseif com=_tmp_env: envT:=par; - elseif com=_set_clr: f_at:=par; if par=0: lineT:=si; lenT:=crR; rotT:=envT:=0; fi - elseif com=_cyc: f_end:=1; proc_cyc(getA(par)); - elseif com=_cyc_sB: f_end:=1; proc_cyc(sB[getB(par)]); - elseif com=_cyc_eB: f_end:=1; proc_cyc(eB[getB(par)]); - elseif com=_term: termB; -%%%%%%%%% elseif com=_stack_reset: stkA[adrS+1]:=0; + ef nC=_adj_ang: if (angT<40)or(angT>320): angT:=0; ef angT<140: angT:=90; + ef angT<220: angT:=180; else: angT:=270; fi + ef nC=_mk_bond: if (par=0)and(rotT<>0):par:=rotT; rotT:=0; fi add_bond(par); + ef nC=_rot_ang: angT:=(angT+par) mod 360; + ef nC=_tmp_rot: rotT:=par; + ef (nC>=_postA)and(nC<=_postH): rotT:=0; + ef nC=_chg_env: envB:=par; + ef nC=_tmp_env: envT:=par; + ef nC=_set_clr: f_at:=par; if par=0: lineT:=si; lenT:=crR; rotT:=envT:=0; fi + ef nC=_cyc: f_end:=1; proc_cyc(getA(par)); + ef nC=_cyc_sB: f_end:=1; proc_cyc(sB[getB(par)]); + ef nC=_cyc_eB: f_end:=1; proc_cyc(eB[getB(par)]); + ef nC=_term: termB; fi endfor enddef; @@ -790,11 +795,11 @@ def add_bond(expr m)= enddef; %================================================================================================== vardef getA(expr n)= - if n>=0: stkA[adrS+1]+n elseif n>=-999: cntA+n+1 else: stkA[adrS]+n+4095 fi + if n>=0: stkA[adrS+1]+n ef n>=-999: cntA+n+1 else: stkA[adrS]+n+4095 fi enddef; %-------------------------------------------------------------------------------------------------- vardef getB(expr n)= - if n>=1: stkB[adrS+1]+n elseif n=0: tempB elseif n>=-999: cntB+n+1 else: stkB[adrS]+n+4095 fi + if n>=1: stkB[adrS+1]+n ef n=0: tempB ef n>=-999: cntB+n+1 else: stkB[adrS]+n+4095 fi enddef; %-------------------------------------------------------------------------------------------------- def termA= if f_term=0: if f_bra=0: numS[incr cntA]:=strAT; strAT:=0; @@ -809,9 +814,9 @@ def glu_c(expr n)= if numS[n]<>0: nB:=angT mod 180; nC:=.5tbl_str_wd[numS[n]]*at %-------------------------------------------------------------------------------------------------- vardef proc_env(expr n,m,a,b)= r:=(n mod 360); if m>=sub_emb_start: parD[m][cntB-temp_cntB] else: - if m=hz:if r=0:a elseif r<=90:b elseif r<=180:a elseif r<270:b else:a fi - elseif m=vt:if r=0:b elseif r<90:a elseif r<=180:b elseif r<=271:a else:b fi - elseif (m>=-180)and(m<=180): m fi fi + if m=hz:if r=0:a ef r<=90:b ef r<=180:a ef r<270:b else:a fi + ef m=vt:if r=0:b ef r<90:a ef r<=180:b ef r<=271:a else:b fi + ef (m>=-180)and(m<=180): m fi fi enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def draw_atom(expr NUM,POS,ANG,STR,WD)= @@ -829,9 +834,9 @@ def draw_atom(expr NUM,POS,ANG,STR,WD)= if dx<0: if nB=par_s: k:=i+1; nC:=1; forever: exitif pic_c(i+(incr nC),STR)="}";endfor fi if nC>0: sB:=pic_c(k+(decr nC),STR); nB:=ASCII(sB); fi fi - if nB=score_u: if nE=0: nE:=-.5; else: nE:=0; fi; - elseif nB=hat: if nE=0: nE:= .5; else: nE:=0; fi; - elseif (nB<>par_s)and(nB<>par_e): + if nB=score_u: if nE=0: nE:=-.5; else: nE:=0; fi; + ef nB=hat: if nE=0: nE:= .5; else: nE:=0; fi; + ef (nB<>par_s)and(nB<>par_e): nA:=atom_wd*tbl_char_wd[nB]; if (atomfont<>"draw")and(f_MP=1): pC:=sB infont atomfont scaled (atom_wd/atomfontsize); @@ -863,52 +868,53 @@ enddef; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% def draw_bond(expr NN,BP,EP,ANG,LN)= begingroup - save ww,ap,am,hpt,Ls,Le,pA,pB,pC,pT; + save ww,ap,am,hpt,Ls,Le,pA,pB,pC,pT,nL,nC; pair Ls,Le; path pA,pB,pC,pT; %---------------------------------------------------------------------------------------------- + nL:=LN; nC:=length(posA[EP]-posA[BP]); - if (nC>0)and(LN<>0): + if (nC>0)and(nL<>0): ww:=wedge_wd; hpt:=.5bond_pen_wd; ap:=ANG+90; am:=ANG-90; if sw_numberB>=1: clipping(0,0,posA[BP],posA[EP],nC); else: clipping(numS[BP],numS[EP],posA[BP],posA[EP],nC); fi pickup pencircle scaled bond_pen_wd; if known colorB[NN]: nB:=colorB[NN]; fi %--------------------------------------------------------------------------------------------- - if (LN=si)or(sw_bond_single=1): draw pA Cp(nB); - elseif LN=dl:draw pA Cp(nB); draw sfB(pC,bondgap,ap) Cp(nB); - elseif LN=dr:draw pA Cp(nB); draw sfB(pC,bondgap,am) Cp(nB); - elseif LN=dm:draw sfB(pB,bondgap/1.75,ap) Cp(nB); draw sfB(pB,bondgap/1.75,am) Cp(nB); - elseif LN=db:if ((ANG-ang_br[BP]) mod 360)<=180: nA:=ap; else: nA:=am; fi + if (nL=si)or(sw_bond_single=1): draw pA Cp(nB); + ef nL=dl: draw pA Cp(nB); draw sfB(pC,bondgap,ap) Cp(nB); + ef nL=dr: draw pA Cp(nB); draw sfB(pC,bondgap,am) Cp(nB); + ef nL=dm: draw sfB(pB,bondgap/1.75,ap) Cp(nB); draw sfB(pB,bondgap/1.75,am) Cp(nB); + ef nL=db: if ((ANG-ang_br[BP]) mod 360)<=180: nA:=ap; else: nA:=am; fi draw pA Cp(nB); draw sfB(pC,bondgap,nA) Cp(nB); - elseif LN=tm:draw pA Cp(nB);draw sfB(pA,bondgap,ap) Cp(nB); draw sfB(pA,bondgap,am) Cp(nB); - elseif LN=wf:fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle; - elseif LN=wb:fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle; - elseif LN=bd:draw pA withpen penrazor rotated ap scaled bondgap Cp(nB); - elseif LN=bz:bz_put(sfB(Ls,ww,ap),sfB(Le,ww,ap),sfB(Ls,ww,am),sfB(Le,ww,am),nB); - elseif LN=zf:wz_put(Ls,sfB(Le,ww,ap),sfB(Le,ww,am),nB); - elseif LN=zb:wz_put(Le,sfB(Ls,ww,am),sfB(Ls,ww,ap),nB); - elseif LN=dt:for i=0 step .75zebra_gap/length(Le-Ls) until 1: drawdot i[Ls,Le]; endfor - elseif LN=wv:nB:=3bond_pen_wd; nA:=nB/length(Le-Ls); + ef nL=tm: draw pA Cp(nB);draw sfB(pA,bondgap,ap) Cp(nB); draw sfB(pA,bondgap,am) Cp(nB); + ef nL=wf: fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle; + ef nL=wb: fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle; + ef nL=bd: draw pA withpen penrazor rotated ap scaled bondgap Cp(nB); + ef nL=bz: bz_put(sfB(Ls,ww,ap),sfB(Le,ww,ap),sfB(Ls,ww,am),sfB(Le,ww,am),nB); + ef nL=zf: wz_put(Ls,sfB(Le,ww,ap),sfB(Le,ww,am),nB); + ef nL=zb: wz_put(Le,sfB(Ls,ww,am),sfB(Ls,ww,ap),nB); + ef nL=dt: for i=0 step .75zebra_gap/length(Le-Ls) until 1: drawdot i[Ls,Le]; endfor + ef nL=wv: nB:=3bond_pen_wd; nA:=nB/length(Le-Ls); draw Le for i=1 upto 1/nA: if odd(i): ..controls(((i-.5)*nA)[sfB(Le,nB,ap),sfB(Ls,nB,ap)]) else: ..controls(((i-.5)*nA)[sfB(Le,nB,am),sfB(Ls,nB,am)]) fi ..(i*nA)[Le,Ls] endfor ..Ls; - elseif LN=vf:draw pA Cp(nB);draw sfB(Le,bondgap,ANG-150)--Le--sfB(Le,bondgap,ANG+150) Cp(nB); - elseif LN=vb:draw pA Cp(nB);draw sfB(Ls,bondgap,ANG-30)--Ls--sfB(Ls,bondgap,ANG+30) Cp(nB); - elseif LN=si_:erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 0.8bondgap; draw pA Cp(nB); - elseif LN=wf_:erase fill sfB(0.15[Ls,Le],.5ww,ap)--sfB(0.15[Ls,Le],.5ww,am)-- + ef nL=vf: draw pA Cp(nB);draw sfB(Le,bondgap,ANG-150)--Le--sfB(Le,bondgap,ANG+150) Cp(nB); + ef nL=vb: draw pA Cp(nB);draw sfB(Ls,bondgap,ANG-30)--Ls--sfB(Ls,bondgap,ANG+30) Cp(nB); + ef nL=si_: erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 0.8bondgap; draw pA Cp(nB); + ef nL=wf_: erase fill sfB(0.15[Ls,Le],.5ww,ap)--sfB(0.15[Ls,Le],.5ww,am)-- sfB(0.85[Ls,Le],1.3ww,am)--sfB(0.85[Ls,Le],1.3ww,ap)--cycle; fill Ls--sfB(Le,ww,am)--sfB(Le,ww,ap)--cycle; - elseif LN=wb_:erase fill sfB(0.15[Ls,Le],1.3ww,ap)--sfB(0.15[Ls,Le],1.3ww,am)-- + ef nL=wb_: erase fill sfB(0.15[Ls,Le],1.3ww,ap)--sfB(0.15[Ls,Le],1.3ww,am)-- sfB(0.85[Ls,Le],.5ww,am)--sfB(0.85[Ls,Le],.5ww,ap)--cycle; fill sfB(Ls,ww,am)--Le--sfB(Ls,ww,ap)--cycle; - elseif LN=bd_:erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 1.6bondgap; + ef nL=bd_: erase draw 0.15[Ls,Le]--0.85[Ls,Le] wpcs 1.6bondgap; draw pA withpen penrazor rotated ap scaled bondgap Cp(nB); fi if (sw_numberB>=1)and(NN>=numberB_start)and(NN<=numberB_end): if sw_numberB=2: nB:=NN-numberB_start+1; - elseif sw_numberB=3: if numberB_end=dl)and(lineB[j]<=dm): bondC[j]:=2; - elseif lineB[j]=tm: bondC[j]:=3; - elseif (lineB[j]=vf)or(lineB[j]=vb): bondC[j]:=0; - else: bondC[j]:=1; + if (lineB[j]>=dl)and(lineB[j]<=dm): bondC[j]:=2; + ef lineB[j]=tm: bondC[j]:=3; + ef (lineB[j]=vf)or(lineB[j]=vb): bondC[j]:=0; + else: bondC[j]:=1; fi if (sB[j]=i)or(eB[j]=i): bond_cnt:=bond_cnt+bondC[j]; fi endfor @@ -1202,19 +1224,19 @@ def proc_calc_out= if (strD[numS[i]]="C")and(bond_cnt<4): hideH[i]:=4-bond_cnt; cnt_hide_H:=cnt_hide_H+hideH[i]; else: hideH[i]:=0; fi - if strD[numS[i]]="C": bond_check(i)(1,2,3,4); - elseif strD[numS[i]]="N": bond_check(i)(3,5); - elseif strD[numS[i]]="H": bond_check(i)(1); - elseif strD[numS[i]]="O": bond_check(i)(2); - elseif strD[numS[i]]="S": bond_check(i)(2,4,6); - elseif strD[numS[i]]="P": bond_check(i)(5); - elseif strD[numS[i]]="OH": bond_check(i)(1); - elseif strD[numS[i]]="COOH": bond_check(i)(1); - elseif strD[numS[i]]="CN": bond_check(i)(1); - elseif strD[numS[i]]="N{H_2_}": bond_check(i)(1); - elseif strD[numS[i]]="F": bond_check(i)(1); - elseif strD[numS[i]]="{Cl}": bond_check(i)(1); - elseif strD[numS[i]]="{Br}": bond_check(i)(1); + if strD[numS[i]]="C": bond_check(i)(1,2,3,4); + ef strD[numS[i]]="N": bond_check(i)(3,5); + ef strD[numS[i]]="H": bond_check(i)(1); + ef strD[numS[i]]="O": bond_check(i)(2); + ef strD[numS[i]]="S": bond_check(i)(2,4,6); + ef strD[numS[i]]="P": bond_check(i)(5); + ef strD[numS[i]]="OH": bond_check(i)(1); + ef strD[numS[i]]="COOH": bond_check(i)(1); + ef strD[numS[i]]="CN": bond_check(i)(1); + ef strD[numS[i]]="N{H_2_}": bond_check(i)(1); + ef strD[numS[i]]="F": bond_check(i)(1); + ef strD[numS[i]]="{Cl}": bond_check(i)(1); + ef strD[numS[i]]="{Br}": bond_check(i)(1); fi for j=1 upto tbl_cnt: if strD[numS[i]]=tbl_atom_str[j]: @@ -1234,9 +1256,9 @@ def proc_calc_out= endfor cal_MI:=substring (0,10) of decimal(MI_num); cal_MW:=substring (0,8) of decimal(MW_num); - if sw_auxout=1: proc_auxfile_out; fi + if sw_aux_out=1: proc_auxfile_out; fi if sw_report=1: proc_report_out; fi - if sw_MOLout=1: proc_MOLfile_out; fi + if sw_mol_out>=1: proc_mol_out; fi endgroup enddef; %================================================================================================== @@ -1270,11 +1292,13 @@ def proc_report_out= message " Atom count="&fdr(3)(cntA)&" Bond count="&fdr(3)(cntB)& " Ring count="&fdr(3)(cntB-cntA+1)&" Hide H count="&fdr(3)(cnt_hide_H); message "------------------------------------------------------------------"; - message "< NO. >( x axis , y axis )< atom >< bond >< hide_H >"; + message "< NO. >( x axis , y axis )< atom >< bond >< hideH >< chg >"; for i=1 upto cntA: message " A"&fdl(4)(i)&" ("&fdr(10)(round_auto(xpart(posA[i])/bond_len))&" , "& fdr(10)(round_auto(ypart(posA[i])/bond_len))&" ) "&fixed_l(8)(strD[numS[i]])& - " "&fdr(3)(Bcnt[i]) if hideH[i]>0: &fdr(8)(hideH[i]) fi; + " "&fdr(3)(Bcnt[i]) + if hideH[i]>0: &fdr(8)(hideH[i]) else: &" " fi + if chgA[i]<>0: &fdr(8)(chgA[i]) fi; endfor message "------------------------------------------------------------------"; message "< NO. >< bond (sdt)>"; @@ -1314,20 +1338,60 @@ def proc_report_out= message "=================================================================="; enddef; %================================================================================================== -def proc_MOLfile_out= +def proc_mol_out= + save chg_cnt,chg_atm,chg_chg; + numeric chg_atm,chg_chg; + chg_cnt:=0; + %-V2000------------------------------------------------------------------------------------------ + if sw_mol_out=1: mp_log_name:=jobname&"-"&fit_zero(char_num)&decimal(char_num)&"-"&inf_EN&".mol"; printf ""; printf " -MCFtoMOL- "&fixed_l(20)(info[1]); printf ""; printf fdr(3)(cntA)&fdr(3)(cntB)&" 0 0 0 0 0 0 0 0999 V2000"; - for i=1 upto cntA: printf fdr(10)(xpart(posA[i])/bond_len)& fdr(10)(ypart(posA[i])/bond_len)& - fdr(10)(0)&" "&fixed_l(2)(stripP(strD[numS[i]]))&" 0 0 0 0"; endfor + for i=1 upto cntA: + printf fdr(10)(xpart(posA[i])/bond_len)& fdr(10)(ypart(posA[i])/bond_len)& + fdr(10)(0)&" "&fixed_l(2)(stripP(strD[numS[i]]))&" 0 0 0 0"; + if chgA[i]<>0: chg_atm[incr chg_cnt]:=i; chg_chg[chg_cnt]:=chgA[i]; fi + endfor for i=1 upto cntB: if lineB[i]<>0: if (lineB[i]=dl)or(lineB[i]=dr)or(lineB[i]=dm): nA:=2; - elseif lineB[i]=tm: nA:=3; - elseif (lineB[i]=wf)or(lineB[i]=zb)or(lineB[i]=bd): nB:=1; - elseif (lineB[i]=zf)or(lineB[i]=wb)or(lineB[i]=dt): nB:=6; - elseif lineB[i]=wv: nB:=4; else: nA:=1; nB:=0; fi - printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(nA)&fdr(3)(nB)&" 0 0"; fi endfor + ef lineB[i]=tm: nA:=3; + ef (lineB[i]=wf)or(lineB[i]=zb)or(lineB[i]=bd): nB:=1; + ef (lineB[i]=zf)or(lineB[i]=wb)or(lineB[i]=dt): nB:=6; + ef lineB[i]=wv: nB:=4; else: nA:=1; nB:=0; fi + printf fdr(3)(sB[i])&fdr(3)(eB[i])&fdr(3)(nA)&fdr(3)(nB)&" 0 0"; + fi + endfor + if chg_cnt>0: + printf "M CHG"&fdr(3)(chg_cnt) + for i=1 upto chg_cnt: &fdr(4)(chg_atm[i])&fdr(4)(chg_chg[i]) endfor; + fi printf "M END"; + %-V3000----------------------------------------------------------------------------------------- + elseif sw_mol_out=2: + mp_log_name:=jobname&"-"&fit_zero(char_num)&decimal(char_num)&"-"&inf_EN&".mol"; + printf ""; printf " -MCFtoMOL- "&fixed_l(20)(info[1]); printf ""; + printf " 0 0 0 0 0 999 V3000"; + printf "M V30 BEGIN CTAB"; + printf "M V30 COUNTS "&decimal(cntA)&" "&decimal(cntB)&" 0 0 0"; + printf "M V30 BEGIN ATOM"; + for i=1 upto cntA: + printf "M V30 "&decimal(i)&" "&stripP(strD[numS[i]])&" "& + decimal(xpart(posA[i])/bond_len)&" "&decimal(ypart(posA[i])/bond_len)&" 0 0" + if chgA[i]<>0: &" CHG="&decimal(chgA[i]) fi; + endfor + printf "M V30 END ATOM"; + printf "M V30 BEGIN BOND"; + for i=1 upto cntB: if lineB[i]<>0: + if (lineB[i]=dl)or(lineB[i]=dr)or(lineB[i]=dm): nA:=2; + ef lineB[i]=tm: nA:=3; + ef (lineB[i]=wf)or(lineB[i]=zb)or(lineB[i]=bd): nB:=1; + ef (lineB[i]=zf)or(lineB[i]=wb)or(lineB[i]=dt): nB:=6; + ef lineB[i]=wv: nB:=4; else: nA:=1; nB:=0; fi + printf "M V30 "&decimal(i)&" "&decimal(nA)&" "&decimal(sB[i])&" "&decimal(eB[i]); fi endfor + printf "M V30 END BOND"; + printf "M V30 END CTAB"; + printf "M END"; + fi enddef; %------------------------------------------------------------------------------------------------- vardef fit_zero(expr n)=if n<=9: "00" elseif n<=99: "0" fi enddef; -- cgit v1.2.3