Difference between revisions of "Chemistry"

From Wiki
Jump to navigation Jump to search
m (added Category Graphics, Chemistry)
m
(14 intermediate revisions by 7 users not shown)
Line 1: Line 1:
< [[Math]], [[XML]], [[Graphics]], [[Metapost]] >
+
< [[Math]], [[XML]], [[Graphics]], [[MetaPost]] >
  
 
ConTeXt comes with the extensive chemistry module [[PPCHTeX]] which allows the drawing of chemical structures and the typesetting of reactions.
 
ConTeXt comes with the extensive chemistry module [[PPCHTeX]] which allows the drawing of chemical structures and the typesetting of reactions.
  
[[PPCHTeX]] works with plainTeX, LaTeX and - of course - with ConTeXt.
+
[[PPCHTeX]] works with plain TeX, LaTeX and - of course - with ConTeXt.
  
 
* [http://www.pragma-ade.com/ppchtex.htm PPCHTeX (general)] by Pragma
 
* [http://www.pragma-ade.com/ppchtex.htm PPCHTeX (general)] by Pragma
* [http://www.pragma-ade.com/document.htm PPCHTeX documenatation] by Pragma
+
* [http://www.pragma-ade.com/document.htm PPCHTeX documentation] by Pragma
 
* [http://www.ntg.nl/mailman/listinfo/ntg-ppchtex PPCHTeX mailing list]
 
* [http://www.ntg.nl/mailman/listinfo/ntg-ppchtex PPCHTeX mailing list]
 
* [http://www.ntg.nl/pipermail/ntg-ppchtex/ PPCHTeX mailing list archive]
 
* [http://www.ntg.nl/pipermail/ntg-ppchtex/ PPCHTeX mailing list archive]
Line 17: Line 17:
 
Some other links about chemistry in ConTeXt:
 
Some other links about chemistry in ConTeXt:
 
* [[Chromatograms]] macro
 
* [[Chromatograms]] macro
* [http://www.pragma-ade.com/general/manuals/xchemml-p.pdf ChemML] ([http://www.pragma-ade.com/general/manuals/xchemml-s.pdf screen]), [[MathML]] extension for chemistry
+
* [[manual:xchemml-p.pdf|ChemML]] ([[manual:xchemml-s.pdf|screen]]), [[MathML]] extension for chemistry
 +
 
 +
=== Formulae with chemic module ===
 +
 
 +
<texcode>
 +
\usemodule[chemic]
 +
\chemical{HSO_4^{-}}
 +
</texcode>
 +
 
 +
<context>
 +
\usemodule[chemic]
 +
\chemical{HSO_4^{-}}
 +
</context>
 +
 
 +
* It can also be used to typeset chemical ''reactions''
 +
 
 +
<texcode>
 +
\usemodule[chemic]
 +
\startformula
 +
\chemical{2H_2,+,O_2,->,2H_2O}
 +
\stopformula
 +
</texcode>
 +
 
 +
 
 +
<context>
 +
\usemodule[chemic]
 +
\startformula
 +
\chemical{2H_2,+,O_2,->,2H_2O}
 +
\stopformula
 +
</context>
 +
 
 +
=== Simple Formulae in Text Mode ===
 +
 
 +
An alternative to using the chemistry module or mathmode for typesetting simple formulae are the three ConTeXt commands <cmd>high</cmd>, <cmd>low</cmd> and <cmd>lohi</cmd>. This might be useful if you want to typset the formula with the same font as the surrounding text (in titles or slanted fonts, although that might not be desired in all situations).
 +
 
 +
<texcode>
 +
\ss H\low{2}O also consists of H\high{+} and OH\high{--}.
 +
There are two main carbon isotopes: \lohi{6}{12}C and \lohi[left]{6}{13}C.
 +
</texcode>
 +
 
 +
<context>
 +
\ss H\low{2}O also consists of H\high{+} and OH\high{--}.\crlf
 +
There are two main carbon isotopes: \lohi{6}{12}C and \lohi[left]{6}{13}C.
 +
</context>
 +
 
 +
Taco's macros implement this approach [http://archive.contextgarden.net/thread/20060702.084423.a201a280.en.html]:
 +
 
 +
<texcode>
 +
\newbox\chemlowbox
 +
\def\chemlow#1%
 +
  {\setbox\chemlowbox\hbox{{\switchtobodyfont[small]#1}}}
 +
 
 +
\def\chemhigh#1%
 +
  {\ifvoid\chemlowbox \high{{\switchtobodyfont[small]#1}}%
 +
  \else \/\lohi{\box\chemlowbox}{{\switchtobodyfont[small]#1}}\fi }
 +
 
 +
\def\finishchem%
 +
  {\ifvoid\chemlowbox \else
 +
    \iffluor \fluorfalse \kern-.1em \fi\low{\box\chemlowbox}\fi}
 +
 
 +
% for "kerning" after F
 +
\newif\iffluor
 +
 
 +
\unexpanded\def\molecule%
 +
  {\bgroup
 +
  \catcode`\_=\active \uccode`\~=`\_ \uppercase{\let~\chemlow}%
 +
  \catcode`\^=\active \uccode`\~=`\^ \uppercase{\let~\chemhigh}%
 +
  \dostepwiserecurse {65}{90}{1}
 +
      {\catcode \recurselevel = \active
 +
      \uccode`\~=\recurselevel
 +
      \uppercase{\edef~{\noexpand\finishchem
 +
                        \rawcharacter{\recurselevel}}}}%
 +
  \uccode `\~=`\F \uppercase{\def~{\finishchem F\fluortrue}}%
 +
  \catcode`\-=\active \uccode`\~=`\- \uppercase{\def~{--}}%
 +
  \loggingall
 +
  \domolecule }%
 +
 
 +
\def\domolecule#1%
 +
  {\expandafter\scantokens\expandafter
 +
        {\detokenize{#1\finishchem}}\egroup}
 +
</texcode>
 +
 
 +
<texcode>
 +
\bs Bold slanted molecules: \molecule{HSO_4^-} and \molecule{SF_6}
 +
</texcode>
 +
 
 +
<context>
 +
\newbox\chemlowbox
 +
\def\chemlow#1%
 +
  {\setbox\chemlowbox\hbox{{\switchtobodyfont[small]#1}}}
 +
 
 +
\def\chemhigh#1%
 +
  {\ifvoid\chemlowbox \high{{\switchtobodyfont[small]#1}}%
 +
  \else \/\lohi{\box\chemlowbox}{{\switchtobodyfont[small]#1}}\fi }
 +
 
 +
\def\finishchem%
 +
  {\ifvoid\chemlowbox \else
 +
    \iffluor \fluorfalse \kern-.1em \fi\low{\box\chemlowbox}\fi}
 +
 
 +
% for "kerning" after F
 +
\newif\iffluor
 +
 
 +
\unexpanded\def\molecule%
 +
  {\bgroup
 +
  \catcode`\_=\active \uccode`\~=`\_ \uppercase{\let~\chemlow}%
 +
  \catcode`\^=\active \uccode`\~=`\^ \uppercase{\let~\chemhigh}%
 +
  \dostepwiserecurse {65}{90}{1}
 +
      {\catcode \recurselevel = \active
 +
      \uccode`\~=\recurselevel
 +
      \uppercase{\edef~{\noexpand\finishchem
 +
                        \rawcharacter{\recurselevel}}}}%
 +
  \uccode `\~=`\F \uppercase{\def~{\finishchem F\fluortrue}}%
 +
  \catcode`\-=\active \uccode`\~=`\- \uppercase{\def~{--}}%
 +
  \loggingall
 +
  \domolecule }%
 +
 
 +
\def\domolecule#1%
 +
  {\expandafter\scantokens\expandafter
 +
        {\detokenize{#1\finishchem}}\egroup}
 +
 
 +
{\bsx Bold slanted molecules: \molecule{HSO_4^-} and \molecule{SF_6}}
 +
 
 +
</context>
 +
 
 +
The main difference with the official chemic module is that the <code>\modlecule</code> from this example uses the same font as the one in surrounding text, while the official module always uses roman font (which is probably the proper way if you're writing dozens of formulas). Hans's module is also more powerful (can do much more trickery than a simple conversion of subscripts and superscripts). See the manuals listed above.
 +
 
 +
Alternatively one can setup the <code>style</code> parameter used for chemical formulas manually:
 +
 
 +
<texcode>
 +
\setupchemical[style=\bs]
 +
</texcode>
 +
 
 +
== Chemical structures ==
 +
 
 +
(see also [http://mitglied.lycos.de/ppchtex/00index.html PPCHTeX structure database])
 +
 
 +
<texcode>
 +
\usemodule[chemic]                                                                                           
 +
 
 +
\starttext
 +
 
 +
\startchemical
 +
        \chemical[FIVE,FRONT,BB125,+SB3,-SB4,Z4][O]
 +
        \chemical[FIVE,FRONT,+R1235,+RZ1235][H,H,\SR{HOH_2C},OH]
 +
        \chemical[FIVE,FRONT,-R1235,-RZ1235][H,OH,H,H]
 +
\stopchemical
 +
 
 +
\stoptext
 +
</texcode>
 +
 
 +
[[Image:Chemistry_example1.png]]
 +
 
 +
<texcode>
 +
\usemodule[chemic]
 +
\setupchemical[width=fit]
 +
 
 +
\starttext
 +
 
 +
\startchemical
 +
        \chemical[SIX,B,C,MOV2,B,C,R234,RZ234,MOV5,MOV6,B,C,R561,RZ561]
 +
        [R,R,R,R,R,R]
 +
\stopchemical
 +
 
 +
\stoptext
 +
</texcode>
 +
 
 +
[[Image:chemistry_example2.png]]
 +
 
 +
To draw this structure horizontally:
 +
<texcode>
 +
\usemodule[chemic]
 +
\setupchemical[width=fit]
 +
 
 +
\def\RotR{\rotate[rotation=270]{\ix R}}
 +
 
 +
\starttext
 +
 
 +
\rotate[rotation=90]{
 +
\startchemical
 +
        \chemical[SIX,B,C,MOV2,B,C,R234,RZ234,MOV5,MOV6,B,C,R561,RZ561]
 +
        [\RotR,\RotR,\RotR,\RotR,\RotR,\RotR]
 +
\stopchemical
 +
}
 +
 
 +
\stoptext
 +
</texcode>
 +
 
 +
[[Image:chemistry_example3.png]]
 +
 
 +
 
 +
An example of an amino acid: Histidine (Ace-His-Nme).
 +
The rest of the amino acids are shown in [http://tt4sci.wordpress.com/2009/08/05/drawing-organic-molecules-in-latex-ii-amino-acids/ TT4Sci]
 +
<texcode>
 +
\usepackage{color}
 +
\usepackage{m-pictex,m-ch-en}
 +
 
 +
\definechemical[radical]
 +
{\chemical[SAVE,ONE,SB768,Z068][C,H,H]
 +
\chemical[MOV7,ONE,Z0][C]
 +
\chemical[MOV7,FIVE,ROT4,SB12345,EB42,Z1235,SR125,RZ125,RESTORE][N,C,N,C,H,H,H]}
 +
\startchemical
 +
[scale=big,size=big,left=2600,right=4200,bottom=2800,top=4500]
 +
\bottext{Histidine}
 +
\chemical[SIX,SB23]
 +
\chemical[PB:Z1,SAVE,radical,RESTORE,PE]
 +
\chemical[PB:Z2,ONE,SB37,Z03,PE][\SL{C^{\alpha}},H^{\alpha 1}]
 +
\chemical[PB:Z3,SIX,Z5,SB4,Z4,PE][N,H]
 +
{\color{blue}
 +
\chemical[PB:Z4,SIX,Z2,SB2,DB1,Z31,PE][C{\text{\tiny{-1}}},\SR{H_3C},O{\text{\tiny{-1}}}]}
 +
\chemical[SIX,MOV1,SB23]
 +
\chemical[PB:Z3,SIX,Z5,DB4,Z4,PE][C,O]
 +
{\color{red}
 +
\chemical[PB:Z2,SIX,Z4,SB34,Z53,PE][N{\text{\tiny{+1}}},H{\text{\tiny{+1}}},\SL{CH_3}]}
 +
\stopchemical
 +
</texcode>
 +
 
 +
[[Image:histidine.png]]
  
 
[[Category:Graphics]]
 
[[Category:Graphics]]
 
[[Category:Chemistry]]
 
[[Category:Chemistry]]

Revision as of 14:21, 1 September 2013

< Math, XML, Graphics, MetaPost >

ConTeXt comes with the extensive chemistry module PPCHTeX which allows the drawing of chemical structures and the typesetting of reactions.

PPCHTeX works with plain TeX, LaTeX and - of course - with ConTeXt.

Some other PPCHTeX links:

Some other links about chemistry in ConTeXt:

Formulae with chemic module

 
\usemodule[chemic]
\chemical{HSO_4^{-}}

  • It can also be used to typeset chemical reactions
\usemodule[chemic]
\startformula
 \chemical{2H_2,+,O_2,->,2H_2O}
\stopformula


Simple Formulae in Text Mode

An alternative to using the chemistry module or mathmode for typesetting simple formulae are the three ConTeXt commands \high, \low and \lohi. This might be useful if you want to typset the formula with the same font as the surrounding text (in titles or slanted fonts, although that might not be desired in all situations).

\ss H\low{2}O also consists of H\high{+} and OH\high{--}.
There are two main carbon isotopes: \lohi{6}{12}C and \lohi[left]{6}{13}C.

Taco's macros implement this approach [1]:

\newbox\chemlowbox
\def\chemlow#1%
  {\setbox\chemlowbox\hbox{{\switchtobodyfont[small]#1}}}

\def\chemhigh#1%
  {\ifvoid\chemlowbox \high{{\switchtobodyfont[small]#1}}%
   \else \/\lohi{\box\chemlowbox}{{\switchtobodyfont[small]#1}}\fi }

\def\finishchem%
   {\ifvoid\chemlowbox \else
     \iffluor \fluorfalse \kern-.1em \fi\low{\box\chemlowbox}\fi}

% for "kerning" after F
\newif\iffluor

\unexpanded\def\molecule%
  {\bgroup
   \catcode`\_=\active \uccode`\~=`\_ \uppercase{\let~\chemlow}%
   \catcode`\^=\active \uccode`\~=`\^ \uppercase{\let~\chemhigh}%
   \dostepwiserecurse {65}{90}{1}
      {\catcode \recurselevel = \active
       \uccode`\~=\recurselevel
       \uppercase{\edef~{\noexpand\finishchem
                         \rawcharacter{\recurselevel}}}}%
   \uccode `\~=`\F \uppercase{\def~{\finishchem F\fluortrue}}%
   \catcode`\-=\active \uccode`\~=`\- \uppercase{\def~{--}}%
   \loggingall
   \domolecule }%

\def\domolecule#1%
  {\expandafter\scantokens\expandafter
        {\detokenize{#1\finishchem}}\egroup}
\bs Bold slanted molecules: \molecule{HSO_4^-} and \molecule{SF_6}

The main difference with the official chemic module is that the \modlecule from this example uses the same font as the one in surrounding text, while the official module always uses roman font (which is probably the proper way if you're writing dozens of formulas). Hans's module is also more powerful (can do much more trickery than a simple conversion of subscripts and superscripts). See the manuals listed above.

Alternatively one can setup the style parameter used for chemical formulas manually:

\setupchemical[style=\bs]

Chemical structures

(see also PPCHTeX structure database)

\usemodule[chemic]                                                                                            

\starttext

\startchemical
        \chemical[FIVE,FRONT,BB125,+SB3,-SB4,Z4][O]
        \chemical[FIVE,FRONT,+R1235,+RZ1235][H,H,\SR{HOH_2C},OH]
        \chemical[FIVE,FRONT,-R1235,-RZ1235][H,OH,H,H]
\stopchemical

\stoptext

Chemistry example1.png

\usemodule[chemic]
\setupchemical[width=fit]

\starttext

\startchemical
        \chemical[SIX,B,C,MOV2,B,C,R234,RZ234,MOV5,MOV6,B,C,R561,RZ561]
        [R,R,R,R,R,R]
\stopchemical

\stoptext

Chemistry example2.png

To draw this structure horizontally:

\usemodule[chemic]
\setupchemical[width=fit]

\def\RotR{\rotate[rotation=270]{\ix R}}

\starttext

\rotate[rotation=90]{
\startchemical
        \chemical[SIX,B,C,MOV2,B,C,R234,RZ234,MOV5,MOV6,B,C,R561,RZ561]
        [\RotR,\RotR,\RotR,\RotR,\RotR,\RotR]
\stopchemical
}

\stoptext

Chemistry example3.png


An example of an amino acid: Histidine (Ace-His-Nme). The rest of the amino acids are shown in TT4Sci

\usepackage{color}
\usepackage{m-pictex,m-ch-en}

\definechemical[radical]
{\chemical[SAVE,ONE,SB768,Z068][C,H,H]
\chemical[MOV7,ONE,Z0][C]
\chemical[MOV7,FIVE,ROT4,SB12345,EB42,Z1235,SR125,RZ125,RESTORE][N,C,N,C,H,H,H]}
\startchemical
[scale=big,size=big,left=2600,right=4200,bottom=2800,top=4500]
\bottext{Histidine}
\chemical[SIX,SB23]
\chemical[PB:Z1,SAVE,radical,RESTORE,PE]
\chemical[PB:Z2,ONE,SB37,Z03,PE][\SL{C^{\alpha}},H^{\alpha 1}]
\chemical[PB:Z3,SIX,Z5,SB4,Z4,PE][N,H]
{\color{blue}
\chemical[PB:Z4,SIX,Z2,SB2,DB1,Z31,PE][C{\text{\tiny{-1}}},\SR{H_3C},O{\text{\tiny{-1}}}]}
\chemical[SIX,MOV1,SB23]
\chemical[PB:Z3,SIX,Z5,DB4,Z4,PE][C,O]
{\color{red}
\chemical[PB:Z2,SIX,Z4,SB34,Z53,PE][N{\text{\tiny{+1}}},H{\text{\tiny{+1}}},\SL{CH_3}]}
\stopchemical

Histidine.png