diff options
author | Karl Berry <karl@freefriends.org> | 2012-01-30 23:46:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-01-30 23:46:36 +0000 |
commit | 83013cd537ab5598f12184ee643a6200006c7f14 (patch) | |
tree | ea880d63d086965dc49788abeb282ece4d9de603 /Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty | |
parent | 24a533cad9a13d7244418ec43b4bb323d528c1a1 (diff) |
chemmacros (30jan12)
git-svn-id: svn://tug.org/texlive/trunk@25241 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty | 1005 |
1 files changed, 763 insertions, 242 deletions
diff --git a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty index 0aeffae3755..3adb8505858 100644 --- a/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty +++ b/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty @@ -1,10 +1,11 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % --------------------------------------------------------------------------- % -% - chemmacros - chemmacros.sty - % +% - the CHEMMACROS bundle - % +% - chemmacros.sty - % % - macros and commands for chemists - % % --------------------------------------------------------------------------- % % - Clemens Niederberger - % -% - 2011/11/03 - % +% - 2012/02/01 - % % --------------------------------------------------------------------------- % % - http://www.mychemistry.eu/ - % % - contact@mychemistry.eu - % @@ -12,7 +13,7 @@ % - If you have any ideas, questions, suggestions or bugs to report, please - % % - feel free to contact me. - % % --------------------------------------------------------------------------- % -% - Copyright 2011 Clemens Niederberger - % +% - Copyright 2011-2012 Clemens Niederberger - % % - - % % - This work may be distributed and/or modified under the - % % - conditions of the LaTeX Project Public License, either version 1.3 - % @@ -25,18 +26,13 @@ % - This work has the LPPL maintenance status `maintained'. - % % - - % % - The Current Maintainer of this work is Clemens Niederberger. - % -% - - % -% - This work consists of the files chemmacros.sty, chemmacros-version1.cfg - % -% - chemmacros_doc_de.tex, chemmacros_doc_de.tex, README and the derived - % -% - files chemmacros_doc_de.pdf and chemmacros_doc_en.pdf - % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\RequirePackage{ expl3 , xparse , l3keys2e , xfrac , siunitx , tikz , mathtools , cancel , environ } +\RequirePackage{ expl3 , xparse , l3keys2e , xfrac , siunitx , tikz , mathtools , environ , scrlfile , etoolbox , bm } \usetikzlibrary{calc,arrows} -\AtBeginDocument - { - \@ifpackageloaded{mhchem}{} { \RequirePackage[ version=3 ]{ mhchem } } - } -\ProvidesExplPackage {chemmacros} {2011/11/03} {2.0a} {macros and commands for chemists} + +\ProvidesExplPackage {chemmacros} {2012/02/01} {3.0a} {macros and commands for chemists} + +\@ifpackageloaded { chemformula } {} { \RequirePackage { chemformula } } \bool_new:N \l_chemmacros_version_one_bool \bool_set_false:N \l_chemmacros_version_one_bool @@ -62,10 +58,15 @@ \bool_new:N \l_chemmacros_EZ_cool_bool \bool_set_false:N \l_chemmacros_EZ_cool_bool +\bool_new:N \l_chemmacros_use_mhchem_bool +\bool_set_false:N \l_chemmacros_use_mhchem_bool + \bool_new:N \l_chemmacros_chemstyle_bool \bool_new:N \l_chemmacros_hyperref_bool \bool_new:N \l_chemmacros_varioref_bool \bool_new:N \l_chemmacros_chemfig_bool +\bool_new:N \l_chemmacros_ghsystem_bool +\bool_set_true:N \l_chemmacros_ghsystem_bool \AtBeginDocument { @@ -85,65 +86,102 @@ % --------------------------------------------------------------------------- % % package options -% german => change pKA => pKS etc -% xspace => add an \xspace after a whole bunch of macros -% bpchem => use \IUPAC inside for \NMR command -% circled => circle charges -% EZ => cool or chemmacros version of \E -% version=1 => compatibility for documents set with v1.* +% xspace => add an \xspace after a whole bunch of macros +% bpchem => use \IUPAC inside for \NMR command +% circled => circle charges +% detect-bold => behaviour when font series bold +% EZ => cool or chemmacros version of \E +% german => change pKA => pKS etc +% ngerman => an alias :) +% ghsystem => load ghsystem or don't +% method => use `chemformula' or `mhchem' +% strict => errors or warnings +% synchronize => let particles et.al. adapt chemformula's font selection +% version=1 => compatibility for documents set with v1.* + +\bool_new:N \l_chemmacros_strict_bool +\bool_new:N \l_chemmacros_detect_bold_bool +\bool_set_false:N \l_chemmacros_detect_bold_bool + +\cs_new:Nn \chemmacros_inner_font: {} \keys_define:nn { chemmacros / option } { - bpchem .bool_set:N = \l_chemmacros_bpchem_bool , - bpchem .default:n = true , - circletype .choice: , + bpchem .bool_set:N = \l_chemmacros_bpchem_bool , + bpchem .default:n = true , + circletype .choice: , circletype / math .code:n = { \bool_set_false:N \l_chemmacros_circled_chem_bool } , circletype / chem .code:n = { \bool_set_true:N \l_chemmacros_circled_chem_bool } , - circletype .default:n = chem , - circled .choice: , - circled / none .code:n = + circletype .default:n = chem , + circled .choice: , + circled / none .code:n = { \bool_set_false:N \l_chemmacros_circled_bool \bool_set_false:N \l_chemmacros_circled_formal_bool } , - circled / formal .code:n = + circled / formal .code:n = { \bool_set_true:N \l_chemmacros_circled_bool \bool_set_true:N \l_chemmacros_circled_formal_bool } , - circled / all .code:n = + circled / all .code:n = { \bool_set_true:N \l_chemmacros_circled_bool \bool_set_false:N \l_chemmacros_circled_formal_bool } , - circled .default:n = formal , - EZ .choice: , - EZ / cool .code:n = + circled .default:n = formal , + detect-bold .bool_set:N = \l_chemmacros_detect_bold_bool , + detect-bold .default:n = true , + EZ .choice: , + EZ / cool .code:n = { \bool_set_true:N \l_chemmacros_EZ_cool_bool } , - EZ / chemmacros .code:n = + EZ / chemmacros .code:n = { \bool_set_false:N \l_chemmacros_EZ_cool_bool } , - EZ .default:n = chemmacros , - german .bool_set:N = \l_chemmacros_german_bool , - german .default:n = true , - xspace .bool_set:N = \l_chemmacros_xspace_bool , - xspace .default:n = true , - version .choice: , - version / 1 .code:n = + EZ .default:n = chemmacros , + german .bool_set:N = \l_chemmacros_german_bool , + german .default:n = true , + ghsystem .bool_set:N = \l_chemmacros_ghsystem_bool , + ghsystem .default:n = true , + ngerman .bool_set:N = \l_chemmacros_german_bool , + ngerman .default:n = true , + method .choice: , + method / chemformula .code:n = + \bool_set_false:N \l_chemmacros_use_mhchem_bool , + method / mhchem .code:n = + \bool_set_true:N \l_chemmacros_use_mhchem_bool , + method .default:n = chemformula , + strict .bool_set:N = \l_chemmacros_strict_bool , + strict .default:n = true , + synchronize .choice: , + synchronize / true .code:n = + \cs_set_eq:NN \chemmacros_inner_font: \chemformula_font_inner: , + synchronize / false .code:n = \cs_set:Nn \chemmacros_inner_font: {} , + synchronize .default:n = true , + xspace .bool_set:N = \l_chemmacros_xspace_bool , + xspace .default:n = true , + version .choice: , + version / 1 .code:n = { \bool_set_true:N \l_chemmacros_version_one_bool } , - version / 2 .code:n = + version / 2 .code:n = + { \bool_set_false:N \l_chemmacros_version_one_bool } , + version / bundle .code:n = { \bool_set_false:N \l_chemmacros_version_one_bool } } \ProcessKeysOptions { chemmacros / option } -\AtBeginDocument +\AtEndPreamble { + \bool_if:NT \l_chemmacros_ghsystem_bool + { \RequirePackage { ghsystem } } \bool_if:NT \l_chemmacros_bpchem_bool { \RequirePackage { bpchem } } \bool_if:NT \l_chemmacros_xspace_bool { \RequirePackage { xspace } } + \bool_if:NT \l_chemmacros_use_mhchem_bool + { \RequirePackage[ version=3 ]{ mhchem } } } \cs_new_nopar:Npn \chemmacros_xspace: @@ -154,6 +192,13 @@ % --------------------------------------------------------------------------- % % warning / error messages +\cs_new:Npn \chemmacros_msg:nnxx #1#2#3#4 + { + \bool_if:NTF \l_chemmacros_strict_bool + { \msg_error:nnxx { #1 } { #2 } { #3 } { #4 } } + { \msg_warning:nnxx { #1 } { #2 } { #3 } { #4 } } + } + \msg_set:nnnn { chemmacros } { already-defined } { The~command~#1~has~also~been~defined~by~another~package. @@ -228,18 +273,6 @@ % --------------------------------------------------------------------------- % % circled charge signs -% Definition inspired by chemstyle's definition of \standarsstate -% \cs_new_nopar:Npn \chemmacros_fplus_aux: -% { -% \raise.1ex\hbox{\scalebox{.65}{\textcircled{\lower.1ex\hbox{$+$}}}} -% } -% \cs_new_nopar:Npn \chemmacros_fplus: -% { -% \mode_if_math:TF -% { \text { \chemmacros_fplus_aux: } } -% { \chemmacros_fplus_aux: } -% } - \cs_new_nopar:Npn \chemmacros_fplus: { \ensuremath { \chemmacros_fplus_aux_i: } } \cs_new_nopar:Npn \chemmacros_fplus_aux_i: @@ -259,17 +292,6 @@ } } -% \cs_new_nopar:Npn \chemmacros_fminus_aux: -% { -% \raise.1ex\hbox{\scalebox{.65}{\textcircled{\lower.1ex\hbox{$-$}}}} -% } -% \cs_new_nopar:Npn \chemmacros_fminus: -% { -% \mode_if_math:TF -% { \text { \chemmacros_fminus_aux: } } -% { \chemmacros_fminus_aux: } -% } - \cs_new_nopar:Npn \chemmacros_fminus: { \ensuremath { \chemmacros_fminus_aux_i: } } \cs_new_nopar:Npn \chemmacros_fminus_aux_i: @@ -296,7 +318,8 @@ % change output depending on circled-option \cs_new_nopar:Npn \chemmacros_plus: { - \bool_if:nTF { \l_chemmacros_circled_bool && !\l_chemmacros_circled_formal_bool } + \bool_if:nTF + { \l_chemmacros_circled_bool && !\l_chemmacros_circled_formal_bool } { \bool_if:NTF \l_chemmacros_circled_chem_bool { \chemmacros_fplus: } @@ -307,7 +330,8 @@ \cs_new_nopar:Npn \chemmacros_minus: { - \bool_if:nTF { \l_chemmacros_circled_bool && !\l_chemmacros_circled_formal_bool } + \bool_if:nTF + { \l_chemmacros_circled_bool && !\l_chemmacros_circled_formal_bool } { \bool_if:NTF \l_chemmacros_circled_chem_bool { \chemmacros_fminus: } @@ -367,24 +391,75 @@ } } -\cs_new_nopar:Npn \chemmacros_atom:n #1 - { \ce { #1 } } +\cs_new:Nn \chemmacros_atom:n + { + \mode_if_math:TF + { \text { \chemmacros_inner_font: #1 } } + { \group_begin: \chemmacros_inner_font: #1 \group_end: } + } \cs_generate_variant:Nn \chemmacros_atom:n { o,f,x } +\cs_new:Nn \chemmacros_text:n + { \mode_if_math:TF { \text { #1 } } { #1 } } + +% add a possibility to let chemformula use the chemformula with method=chemformula, too +\tl_new:N \l_chemmacros_chemformula_tl +\cs_new:Nn \chemmacros_chemformula:n + { + \bool_if:NTF \l_chemmacros_use_mhchem_bool + { \ce { #1 } } + { + \group_begin: + \cs_set_eq:NN \chemformula_font_inner: \chemmacros_inner_font: + \chemformula_input_cmpd:nN { #1 } \l_chemmacros_chemformula_tl + \mode_if_math:TF + { \text { \l_chemmacros_chemformula_tl } } + { { \l_chemmacros_chemformula_tl } } + \group_end: + } + } + % --------------------------------------------------------------------------- % % particles, charges % electron \bool_new:N \l_chemmacros_charge_append_bool \bool_set_false:N \l_chemmacros_charge_append_bool -\cs_new_nopar:Npn \el - { \chemmacros_atom:n { e } \mch \chemmacros_xspace: } -% proton -\cs_new_nopar:Npn \prt - { \chemmacros_atom:n { p } \pch \chemmacros_xspace: } -% neutron -\cs_new_nopar:Npn \ntr - { \chemmacros_atom:n { n^0 } \chemmacros_xspace: } +\bool_if:NTF \l_chemmacros_use_mhchem_bool + { + \cs_new_nopar:Npn \el { \chemmacros_atom:n { e } \mch \chemmacros_xspace: } + \cs_new_nopar:Npn \prt { \chemmacros_atom:n { p } \pch \chemmacros_xspace: } + } + { + \cs_new_nopar:Npn \el { \chemmacros_chemformula:n { e- } \chemmacros_xspace: } + \cs_new_nopar:Npn \prt { \chemmacros_chemformula:n { p+ } \chemmacros_xspace: } + } +\cs_new_nopar:Npn \ntr { \chemmacros_chemformula:n { n^0 } \chemmacros_xspace: } + +\cs_new_nopar:Npn \chemmacros_bm:n #1 + { + \bool_if:NTF \l_chemmacros_detect_bold_bool + { \bm { #1 } } + { #1 } + } + +\cs_new_nopar:Npn \chemmacros_bf:n #1 + { + \bool_if:NTF \l_chemmacros_detect_bold_bool + { { \normalfont \bfseries #1 } } + { { \normalfont #1 } } + } + +\cs_new_nopar:Npn \chemmacros_detect_bold:n #1 + { + \chemmacros_if_bold:TF + { + \mode_if_math:TF + { \chemmacros_bm:n { #1 } } + { \chemmacros_bf:n { #1 } } + } + { #1 } + } % charges \cs_new_nopar:Npn \chemmacros_charge:n #1 @@ -392,13 +467,13 @@ \bool_if:NTF \l_chemmacros_charge_append_bool { \mode_if_math:TF - { {}^ { #1 } } - { $ {}^ { #1 } $ } + { {}^ { \chemmacros_detect_bold:n { #1 } } } + { $ {}^ { \chemmacros_detect_bold:n { #1 } } $ } } { \mode_if_math:TF - { ^ { #1 } } - { $ ^ { #1 } $ } + { ^ { \chemmacros_detect_bold:n { #1 } } } + { $ ^ { \chemmacros_detect_bold:n { #1 } } $ } } } @@ -460,34 +535,47 @@ % --------------------------------------------------------------------------- % % ions, molecules % proton, hydroxide, hydronium/oxonium, water, nucleophile, electrophile -\cs_new_nopar:Npn \Hpl - { \chemmacros_atom:n { H } \pch \chemmacros_xspace: } -\cs_new_nopar:Npn \Hyd - { \chemmacros_atom:n { OH } \mch \chemmacros_xspace: } -\cs_new_nopar:Npn \HtO - { \chemmacros_atom:n { H3O } \pch \chemmacros_xspace: } +\bool_if:NTF \l_chemmacros_use_mhchem_bool + { + \cs_new_nopar:Npn \Hpl { \chemmacros_atom:n { H } \pch \chemmacros_xspace: } + \cs_new_nopar:Npn \Hyd { \chemmacros_atom:n { OH } \mch \chemmacros_xspace: } + \cs_new_nopar:Npn \HtO { \chemmacros_chemformula:n { H3O } \pch \chemmacros_xspace: } + \cs_new_nopar:Npn \El { \chemmacros_atom:n { E } \pch \chemmacros_xspace: } + } + { + \cs_new_nopar:Npn \Hpl { \chemmacros_chemformula:n { H+ } \chemmacros_xspace: } + \cs_new_nopar:Npn \Hyd { \chemmacros_chemformula:n { OH- } \chemmacros_xspace: } + \cs_new_nopar:Npn \HtO { \chemmacros_chemformula:n { H3O+ } \chemmacros_xspace: } + \cs_new_nopar:Npn \El { \chemmacros_chemformula:n { E+ } \chemmacros_xspace: } + } \cs_new_nopar:Npn \water - { \chemmacros_atom:n { H2O } \chemmacros_xspace: } + { \chemmacros_chemformula:n { H2O } \chemmacros_xspace: } +% TODO: \Nu konflikt mit `mathspec' \NewDocumentCommand \Nu { o } { \IfNoValueF { #1 } { \keys_set:nn { chemmacros / particle } { #1 } } \bool_if:NTF \l_chemmacros_particle_elpair_bool - { \chemmacros_elpair:n { Nu } } - { \chemmacros_atom:n { Nu } } - \mch \chemmacros_xspace: + { \chemmacros_elpair:n { Nu } \mch } + { + \bool_if:NTF \l_chemmacros_use_mhchem_bool + { \chemmacros_atom:n { Nu } \mch } + { \chemmacros_chemformula:n { Nu- } } + } + \chemmacros_xspace: } -\cs_new_nopar:Npn \El - { \chemmacros_atom:n { E } \pch \chemmacros_xspace: } - \NewDocumentCommand \ba { o } { \IfNoValueF { #1 } { \keys_set:nn { chemmacros / particle } { #1 } } \bool_if:NTF \l_chemmacros_particle_elpair_bool - { \chemmacros_elpair:n { ba } } - { \chemmacros_atom:n { ba } } - \mch \chemmacros_xspace: + { \chemmacros_elpair:n { ba } \mch } + { + \bool_if:NTF \l_chemmacros_use_mhchem_bool + { \chemmacros_atom:n { ba } \mch } + { \chemmacros_chemformula:n { ba- } } + } + \chemmacros_xspace: } \cs_new_nopar:Npn \chemmacros_elpair:n #1 @@ -495,11 +583,11 @@ \bool_if:NTF \l_chemmacros_chemfig_bool { \bool_if:NTF \l_chemmacros_elpair_dots_bool - { \Lewis { 0: , #1 } } - { \Lewis { 0 , #1 } } + { { \chemmacros_inner_font: #1 \Lewis { 0: , { \vphantom { #1 } } } } } + { { \chemmacros_inner_font: #1 \Lewis { 0 , \vphantom { #1 } } } } } { - \msg_warning:nnx { chemmacros } { chemfig } { #1 } + \chemmacros_msg:nnxx { chemmacros } { chemfig } { #1 } {} \chemmacros_atom:n { #1 } } } @@ -526,11 +614,13 @@ } % --------------------------------------------------------------------------- % -% stereo descriptors and sim. +% stereo descriptors and other nomenclature commands % Cahn-Ingold-Prelog -\cs_new_nopar:Npn \Rcip { \textit { (R) } } -\cs_new_nopar:Npn \Scip { \textit { (S) } } -\cs_new_nopar:Npn \cip #1 { \textit { (#1) } } +\cs_new_protected_nopar:Npn \Rcip { \textit { (R) } } +\cs_new_protected_nopar:Npn \Scip { \textit { (S) } } +\cs_new_protected_nopar:Npn \cip #1 { \textit { (#1) } } + +% TikZ needs : to be other \ExplSyntaxOff \NewDocumentCommand\Sconf { O { S } }% {% @@ -550,48 +640,81 @@ }% }% \ExplSyntaxOn + % E(ntgegen)/Z(usammen) \AtBeginDocument { \bool_if:NTF \l_chemmacros_EZ_cool_bool { - \cs_new_nopar:Npn \Ent { \textit { (E) } } - \cs_new_nopar:Npn \Zus { \textit { (Z) } } + \cs_new_protected_nopar:Npn \Ent { \textit { (E) } } + \cs_new_protected_nopar:Npn \Zus { \textit { (Z) } } } { \cs_if_free:NTF \E - { \cs_new_nopar:Npn \E { \textit { (E) } } } - { \cs_set_nopar:Npn \E { \textit { (E) } } } - \cs_new_nopar:Npn \Z { \textit { (Z) } } + { \cs_new_protected_nopar:Npn \E { \textit { (E) } } } + { \cs_set_protected_nopar:Npn \E { \textit { (E) } } } + \cs_new_protected_nopar:Npn \Z { \textit { (Z) } } } } +% cis/trans & tert \AtBeginDocument { \cs_if_free:NTF \cis - { - \cs_new_nopar:Npn \cis { \textit { cis } \chemmacros_xspace: } - } - { - \cs_set_nopar:Npn \cis { \textit { cis } \chemmacros_xspace: } - } + { \cs_new_protected_nopar:Npn \cis { \textit { cis } } } + { \cs_set_protected_nopar:Npn \cis { \textit { cis } } } \cs_if_free:NTF \trans - { - \cs_new_nopar:Npn \trans { \textit { trans } \chemmacros_xspace: } - } - { - \cs_set_nopar:Npn \trans { \textit { trans } \chemmacros_xspace: } - } + { \cs_new_protected_nopar:Npn \trans { \textit { trans } } } + { \cs_set_protected_nopar:Npn \trans { \textit { trans } } } } +\cs_new_protected_nopar:Npn \tert { \textit { tert } } -\cs_new_nopar:Npn \tert { \textit { tert } \chemmacros_xspace: } % Fischer -\cs_new_nopar:Npn \Dfi { \textsc { d } } -\cs_new_nopar:Npn \Lfi { \textsc { l } } +\cs_new_protected_nopar:Npn \Dfi { \textsc { d } } +\cs_new_protected_nopar:Npn \Lfi { \textsc { l } } + % ortho/meta/para -\cs_new_nopar:Npn \ortho { \textsl { o } } -\cs_new_nopar:Npn \meta { \textsl { m } } -\cs_new_nopar:Npn \para { \textsl { p } } +\cs_new_protected_nopar:Npn \ortho { \textsl { o } } +\cs_new_protected_nopar:Npn \meta { \textsl { m } } +\cs_new_protected_nopar:Npn \para { \textsl { p } } + +% syn/anti +\cs_new_protected_nopar:Npn \syn { \textit { syn } } +\cs_new_protected_nopar:Npn \anti { \textit { anti } } + +% \iupac (basically the same as bpchem's \IUPAC) +% - allows multiple breaking points as compound names can get really long and +% especially in multicolumn documents can span more than two lines +% - add a (very) little space after the hyphen +\cs_new_protected:Nn \chemmacros_allow_hyphens: + { \tex_penalty:D \c_ten_thousand \skip_horizontal:n { \c_zero_dim } } +\cs_new_protected:Nn \chemmacros_break_point_hyphen: + { \tex_penalty:D \c_ten_thousand - \chemmacros_allow_hyphens: } +\cs_new_protected:Nn \chemmacros_break_point: + { + \tex_penalty:D \c_ten_thousand + \tex_discretionary:D { - } { } { \tex_kern:D .03em } + \chemmacros_allow_hyphens: + } + +\cs_new_protected:Nn \chemmacros_iupac:n + { + \group_begin: + \tex_ignorespaces:D + \cs_set_eq:NN \- \chemmacros_break_point_hyphen: + \cs_set_eq:NN \| \chemmacros_break_point: + \cs_set_eq:NN \^ \chemformula_supscript:n + #1 + \group_end: + } + +% Thanks to Joseph Wright and Enrico Gregorio for the help on the curious +% redefinition of \- and the end of the compilation +\cs_set_protected_nopar:Npx \| { \exp_not:o { \| } } +\cs_set_protected_nopar:Npx \- { \exp_not:o { \- } } +\cs_set_eq:NN \@dischyph \- + +\cs_set_eq:NN \iupac \chemmacros_iupac:n % latin phrases \AtBeginDocument @@ -610,26 +733,98 @@ % --------------------------------------------------------------------------- % % acid/base \cs_new_nopar:Npn \pH - { \mbox { \textsl { p } H } \chemmacros_xspace: } + { \mbox { \chemmacros_detect_bold:n { \textsl { p } H } } \chemmacros_xspace: } \cs_new_nopar:Npn \pOH - { \mbox { \textsl { p } OH } \chemmacros_xspace: } + { \mbox { \chemmacros_detect_bold:n { \textsl { p } OH } } \chemmacros_xspace: } \NewDocumentCommand \p { m } - { \mbox { \textsl { p } \ensuremath { #1 } } \chemmacros_xspace: } + { + \mbox + { + \chemmacros_detect_bold:n { \textsl { p } } + \ensuremath + { \chemmacros_detect_bold:n { #1 } } + } + \chemmacros_xspace: + } + +\cs_new_nopar:Npn \chemmacros_if_bold:TF #1#2 + { + \ifx\f@series\l_chemmacros_if_bf_tl + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi + { #1 }{ #2 } + } +\tl_new:N \l_chemmacros_if_bf_tl +\tl_set:Nn \l_chemmacros_if_bf_tl { bx } \char_set_catcode_math_subscript:N \@ +\cs_new_nopar:Npn \Ka + { + \mbox + {\( + \chemmacros_if_bold:TF + { + \chemmacros_bm:n + { + K @ \mathrm + { + \bool_if:NTF \l_chemmacros_german_bool + { S } + { A } + } + } + } + { + K @ \mathrm + { + \bool_if:NTF \l_chemmacros_german_bool + { S } + { A } + } + } + \)} + \chemmacros_xspace: + } + +\cs_new_nopar:Npn \Kb + { + \mbox + {\( + \chemmacros_if_bold:TF + { + \chemmacros_bm:n { K @ \mathrm { B } } + } + { + K @ \mathrm { B } + } + \)} + \chemmacros_xspace: + } + +\cs_new_nopar:Npn \Kw + { + \mbox + {\( + \chemmacros_if_bold:TF + { + \chemmacros_bm:n { K @ \mathrm { W } } + } + { + K @ \mathrm { W } + } + \)} + \chemmacros_xspace: + } + \NewDocumentCommand \pKa { o } { \mbox { - \textsl { p } + \chemmacros_detect_bold:n { \textsl { p } } \( - K @ \mathrm - { - \bool_if:NTF \l_chemmacros_german_bool - { S } - { A } - \IfNoValueF{ #1 } { #1 } - } + \Ka \IfNoValueF { #1 } { @ #1 } \) } \chemmacros_xspace: @@ -639,13 +834,9 @@ { \mbox { - \textsl { p } + \chemmacros_detect_bold:n { \textsl { p } } \( - K @ \mathrm - { - B - \IfNoValueF{ #1 } { #1 } - } + \Kb \IfNoValueF { #1 } { @ #1 } \) } \chemmacros_xspace: @@ -804,12 +995,12 @@ \DeclareInstance { xfrac } { chemmacros-ox-frac } { text } { - scale-factor = 1.5 , + scale-factor = 1.2 , denominator-bot-sep = -.5ex , numerator-top-sep = -.3ex , - slash-left-kern = -.05em , - slash-right-kern = -.05em , - slash-symbol-font = ptm + slash-left-kern = -.2em , + slash-right-kern = -.2em , + slash-symbol-font = lmr } \cs_new_nopar:Npn \chemmacros_ox_fraction:n #1/#2 @@ -913,18 +1104,28 @@ { \bool_if:NT \l_chemmacros_ox_super_bool { - \chemmacros_atom:n - { #2 ^ { \text { \tiny \chemmacros_ox_process_number:n { #1 } } } } + \chemmacros_text:n + { + #2 + $ ^ { \text { \tiny \chemmacros_ox_process_number:n { #1 } } } $ + } } \bool_if:NT \l_chemmacros_ox_side_bool { - \chemmacros_atom:n { #2 ( \text { \chemmacros_ox_process_number:n { #1 } } ) } + \chemmacros_text:n + { #2 ( \text { \chemmacros_ox_process_number:n { #1 } } ) } } \bool_if:NT \l_chemmacros_ox_top_bool { \overset - { \mbox { \tiny \chemmacros_ox_process_number:n { #1 } } } - { \chemmacros_atom:n { #2 } } + { + \rlap + { + \chemmacros_text:n + { \tiny \chemmacros_ox_process_number:n { #1 } } + } + } + { \chemmacros_text:n { #2 } } } } } @@ -1020,7 +1221,7 @@ } \tikz[baseline=(#1.base),remember~picture] { - \node [inner~sep=0] (#1) { \chemmacros_atom:n {#2} } ; + \node [inner~sep=0] (#1) { #2 } ; } } @@ -1034,7 +1235,8 @@ { \IfNoValueT { #1 } { - \msg_error:nnx { chemmacros } { redox } { You~need~to~specify~coordinates } + \msg_error:nnx { chemmacros } { redox } + { You~need~to~specify~coordinates } } \tl_clear:N \l_chemmacros_redox_begin_tl \tl_clear:N \l_chemmacros_redox_end_tl @@ -1047,19 +1249,24 @@ \fp_set:Nn \l_chemmacros_redox_shift_fp { 1 } \tl_set:Nn \l_chemmacros_redox_anchor_tl { above } \tl_set:Nn \l_chemmacros_redox_side_tl { north } - \dim_set_eq:NN \l_chemmacros_redox_sep_dim \l_chemmacros_redox_sep_default_dim + \dim_set_eq:NN + \l_chemmacros_redox_sep_dim + \l_chemmacros_redox_sep_default_dim } { \fp_compare:nNnTF { #3 } < { 0 } { \tl_set:Nn \l_chemmacros_redox_anchor_tl { below } \tl_set:Nn \l_chemmacros_redox_side_tl { south } - \exp_args:NNo \dim_set:Nn \l_chemmacros_redox_sep_dim { - \l_chemmacros_redox_sep_default_dim } + \exp_args:NNo \dim_set:Nn \l_chemmacros_redox_sep_dim + { - \l_chemmacros_redox_sep_default_dim } } { \tl_set:Nn \l_chemmacros_redox_anchor_tl { above } \tl_set:Nn \l_chemmacros_redox_side_tl { north } - \dim_set_eq:NN \l_chemmacros_redox_sep_dim \l_chemmacros_redox_sep_default_dim + \dim_set_eq:NN + \l_chemmacros_redox_sep_dim + \l_chemmacros_redox_sep_default_dim } \fp_set:Nn \l_chemmacros_redox_shift_fp { #3 } } @@ -1071,7 +1278,7 @@ ($(\l_chemmacros_redox_begin_tl . \l_chemmacros_redox_side_tl)+(0,\l_chemmacros_redox_sep_dim)$) -- ++(0,\l_chemmacros_redox_shift_tl * \l_chemmacros_redox_dist_dim) -| - node [pos=.25,\l_chemmacros_redox_anchor_tl] { #4 } + node [pos=.25,\l_chemmacros_redox_anchor_tl] { { #4 } } ($(\l_chemmacros_redox_end_tl . \l_chemmacros_redox_side_tl)+(0,\l_chemmacros_redox_sep_dim)$) ; } } @@ -1217,7 +1424,7 @@ \bool_if:NT \l_chemmacros_nmr_comma_bool { , ~ } \bool_if:NT \l_chemmacros_nmr_solvent_bool - { \chemmacros_atom:n { #4 } } + { \chemmacros_chemformula:n { #4 } } \bool_if:NT \l_chemmacros_nmr_delimiters_bool { ) } \IfBooleanF { #1 } @@ -1242,14 +1449,14 @@ \tl_new:N \l_chemmacros_mhname_align_tl \tl_set:Nn \l_chemmacros_mhname_align_tl { \centering } -\tl_new:N \l_chemmacros_mhname_fontattr_tl +\tl_new:N \l_chemmacros_mhname_format_tl \tl_new:N \l_chemmacros_mhname_fontsize_tl \tl_set:Nn \l_chemmacros_mhname_fontsize_tl { \tiny } \keys_define:nn { chemmacros / mhName } { align .tl_set:N = \l_chemmacros_mhname_align_tl , - fontattr .tl_set:N = \l_chemmacros_mhname_fontattr_tl , + format .tl_set:N = \l_chemmacros_mhname_format_tl , fontsize .tl_set:N = \l_chemmacros_mhname_fontsize_tl , width .code:n = { @@ -1262,8 +1469,8 @@ } } -% \mhName[<keyval>]{<formula>}{<text>} -\bool_if:NF \l_chemmacros_version_one_bool +% \mhName[<keyval>]{<chemformula>}{<text>} +\bool_if:nF { \l_chemmacros_version_one_bool || \l_chemmacros_use_mhchem_bool } { \NewDocumentCommand \mhName { o m m } { @@ -1279,12 +1486,12 @@ { \dim_use:N \l_chemmacros_mhname_width_dim } { \tl_use:N \l_chemmacros_mhname_align_tl - \tl_use:N \l_chemmacros_mhname_fontattr_tl + \tl_use:N \l_chemmacros_mhname_format_tl \tl_use:N \l_chemmacros_mhname_fontsize_tl #3 } } - { \chemmacros_atom:n { #2 } } + { \ce { #2 } } } \group_end: } @@ -1296,14 +1503,14 @@ \cs_new_nopar:Npn \sld { \peek_meaning:NTF [ - { \chemmacros_sld_aux_i: } - { \chemmacros_sld_aux_ii: } + { \chemmacros_sld_aux_i:w } + { \chemmacros_sld_aux_ii:w } } -\cs_new_nopar:Npn \chemmacros_sld_aux_i: [#1] +\cs_new_nopar:Npn \chemmacros_sld_aux_i:w [#1] { \ensuremath { @ \mathrm { ( #1 ) } } } -\cs_new_nopar:Npn \chemmacros_sld_aux_ii: +\cs_new_nopar:Npn \chemmacros_sld_aux_ii:w { \ensuremath { @ \mathrm { ( @@ -1349,23 +1556,75 @@ \char_set_catcode_letter:N \@ % --------------------------------------------------------------------------- % +% reaction environments for mhchem + +% redefine mathtools' command \MT_define_tagform:nwnn to ensure we add an +% entry to the list of reactions even if the user redefines the reaction tag +\AfterPackage* { mathtools } + { + \cs_set_nopar:Npn \MT_define_tagform:nwnn #1[#2]#3#4 + { + \@namedef{MT_tagform_#1:n}##1 + { + % this is the original part: + \maketag@@@{#3\ignorespaces#2{##1}\unskip\@@italiccorr#4} + % this is added: + \tl_if_eq:nnT { #1 } { reaction } + { + \addcontentsline { lor } { reaction } + { + \l_chemmacros_reaction_lorname_tl #3 ##1 #4 + \tl_use:c { l_chemmacros_reaction_ \thereaction _tl } + } + } + } + } + } + +% define \listofreactions +\tl_new:N \l_chemmacros_reaction_lorname_tl +\tl_new:N \reactionlistname +\tl_set:Nn \l_chemmacros_reaction_lorname_tl + { \bool_if:NTF \l_chemmacros_german_bool { Reaktion ~ } { Reaction ~ } } + +\bool_if:NTF \l_chemmacros_german_bool + { \tl_set:Nn \reactionlistname { Reaktionsverzeichnis } } + { \tl_set:Nn \reactionlistname { List~of~reactions } } + +\cs_new:Npn \listofreactions + { \section* { \reactionlistname } \@starttoc { lor } } + +\cs_new:Npn \l@reaction #1#2 + { \@dottedtocline { 1 } { 1.5em } { 2.3em } { #1 } { #2 } } + +% create tagform \bool_if:NTF \l_chemmacros_version_one_bool { \newtagform { CMreaction } { \{ } { \} } } { \newtagform { reaction } { \{ } { \} } } \newcounter { chemmacros_save_reaction } \newcounter { reaction } + +% switch to reaction tags \cs_new_nopar:Npn \chemmacros_begin_reaction: { - \bool_if:NT \l_chemmacros_hyperref_bool % create individual names for hyperref - { \cs_set_nopar:Npn \theHequation { R . \theHsection . \arabic { reaction } } } - \bool_if:NT \l_chemmacros_varioref_bool % enable labelformat reaction + % create individual names for `hyperref': + \bool_if:NT \l_chemmacros_hyperref_bool + { + \cs_set_nopar:Npn \theHequation + { R . \theHsection . \arabic { reaction } } + } + % enable labelformat `reaction': + \bool_if:NT \l_chemmacros_varioref_bool { \cs_set_eq:NN \p@equation \p@reaction } \setcounter { chemmacros_save_reaction } { \value { equation } } \setcounter { equation } { \value { reaction } } \bool_if:NTF \l_chemmacros_version_one_bool { \usetagform { CMreaction } } { \usetagform { reaction } } + \tl_new:c { l_chemmacros_reaction_ \thereaction _tl } } + +% switch back to equation tags \cs_new_nopar:Npn \chemmacros_end_reaction: { \setcounter { reaction } { \value { equation } } @@ -1373,28 +1632,28 @@ } % --------------------------------------------------------------------------- % -% reaction environments for mhchem \bool_new:N \l_chemmacros_reactions_star_bool \bool_new:N \l_chemmacros_reactions_args_bool -\int_new:N \l_chemmacros_reactions_args_int \keys_define:nn { chemmacros / reaction } { - star .bool_set:N = \l_chemmacros_reactions_star_bool , - star .default:n = true , - arg .bool_set:N = \l_chemmacros_reactions_args_bool , - arg .default:n = true + star .bool_set:N = \l_chemmacros_reactions_star_bool , + star .default:n = true , + arg .bool_set:N = \l_chemmacros_reactions_args_bool , + arg .default:n = true , + list-name .tl_set:N = \reactionlistname , + list-entry .code:n = + \tl_set:Nn \l_chemmacros_reaction_lorname_tl { #1 ~ } } +% TODO: define new reactions with optional Argument for lor-entry % \newreaction[<keyval>]{<name>}{<type>} \bool_if:NF \l_chemmacros_version_one_bool { \NewDocumentCommand \newreaction { o m m } { \cs_if_exist:cTF { #2 } - { - \msg_error:nnx { chemmacros } { already-defined } { #2 } - } + { \msg_error:nnx { chemmacros } { already-defined } { #2 } } { \IfNoValueTF { #1 } { @@ -1404,11 +1663,17 @@ { \keys_set:nn { chemmacros / reaction } { #1 } } \bool_if:NTF \l_chemmacros_reactions_args_bool { - \NewEnviron { #2 } [ 1 ] + \NewEnviron { #2 } [ 2 ] [] { \chemmacros_begin_reaction: - \begin { #3 } { ##1 } - \chemmacros_cee:f { \BODY } + \tl_if_blank:nF { ##1 } + { + \tl_set:cn + { l_chemmacros_reaction_ \thereaction _tl } + { : ~ ##1 } + } + \begin { #3 } { ##2 } + \chemmacros_equation_chemformula:o { \BODY } \end{ #3 } \chemmacros_end_reaction: } @@ -1417,17 +1682,23 @@ \NewEnviron { #2* } [ 1 ] { \begin { #3* } { ##1 } - \chemmacros_cee:f { \BODY } + \chemmacros_equation_chemformula:o { \BODY } \end { #3* } } } } { - \NewEnviron { #2 } + \NewEnviron { #2 } [ 1 ] [] { \chemmacros_begin_reaction: + \tl_if_blank:nF { ##1 } + { + \tl_set:cn + { l_chemmacros_reaction_ \thereaction _tl } + { : ~ ##1 } + } \begin { #3 } - \chemmacros_cee:f { \BODY } + \chemmacros_equation_chemformula:o { \BODY } \end { #3 } \chemmacros_end_reaction: } @@ -1436,18 +1707,23 @@ \NewEnviron { #2* } { \begin { #3* } - \chemmacros_cee:f { \BODY } + \chemmacros_equation_chemformula:o { \BODY } \end { #3* } } } } } + \ignorespaces } } -\cs_new:Npn \chemmacros_cee:n #1 - { \cee { #1 } } -\cs_generate_variant:Nn \chemmacros_cee:n { f } +\cs_new:Npn \chemmacros_equation_chemformula:n #1 + { + \bool_if:NTF \l_chemmacros_use_mhchem_bool + { \cee { #1 } } + { \ch { #1 } } + } +\cs_generate_variant:Nn \chemmacros_equation_chemformula:n { o } % predefined: \bool_if:NF \l_chemmacros_version_one_bool @@ -1456,9 +1732,6 @@ \newreaction [ star ] { reactions } { align } } -\NewDocumentCommand \chcancel { m } - { \cancel { \chemmacros_atom:f { #1 } } } - % --------------------------------------------------------------------------- % % thermodynamics et.al. % \standardstate as defined by the chemstyle package. Thanks to Joseph Wright @@ -1754,14 +2027,16 @@ } } \group_end: + \ignorespaces } % predefined: \bool_if:NF \l_chemmacros_version_one_bool { - \setnewstate {Enthalpy} {H} {\kilo\joule\per\mole} - \setnewstate[delta=false,subscript-left=false] {Entropy} {S} {\joule\per\kelvin\per\mole} - \setnewstate {Gibbs} {G} {\kilo\joule\per\mole} + \setnewstate {Enthalpy} {H} {\kilo\joule\per\mole} + \setnewstate [ delta=false, subscript-left=false ] {Entropy} + {S} {\joule\per\kelvin\per\mole} + \setnewstate {Gibbs} {G} {\kilo\joule\per\mole} } % --------------------------------------------------------------------------- % @@ -1804,9 +2079,6 @@ angle .default:n = 0 } -% old usage (v1.1): -% \newman[<angle>,<scale>,<tikz ring>][<tikz (front) nodes>][<tikz back nodes>]{<1>,<2>,<3>,<4>,<5>,<6>} -% new usage (v1.2): % \newman[<keyval>](<angle>){<1>,<2>,<3>,<4>,<5>,<6>} \bool_if:NF \l_chemmacros_version_one_bool { @@ -1815,7 +2087,11 @@ \group_begin: \IfNoValueF { #1 } { \keys_set:nn { chemmacros / newman } { #1 } } \IfNoValueTF { #2 } - { \fp_set_eq:NN \l_chemmacros_newman_rel_angle_fp \l_chemmacros_newman_abs_angle_fp } + { + \fp_set_eq:NN + \l_chemmacros_newman_rel_angle_fp + \l_chemmacros_newman_abs_angle_fp + } { \fp_set:Nn \l_chemmacros_newman_rel_angle_fp { #2 } } \chemmacros_newman_atoms:nnnnnn #3 \group_end: @@ -1877,8 +2153,10 @@ \fp_mul:Nn \l_chemmacros_newman_tmp_angle_fp { \fp_use:N \c_pi_fp } \fp_zero:N \l_chemmacros_newman_x_fp \fp_zero:N \l_chemmacros_newman_y_fp - \fp_cos:Nn \l_chemmacros_newman_x_fp { \fp_use:N \l_chemmacros_newman_tmp_angle_fp } - \fp_sin:Nn \l_chemmacros_newman_y_fp { \fp_use:N \l_chemmacros_newman_tmp_angle_fp } + \fp_cos:Nn \l_chemmacros_newman_x_fp + { \fp_use:N \l_chemmacros_newman_tmp_angle_fp } + \fp_sin:Nn \l_chemmacros_newman_y_fp + { \fp_use:N \l_chemmacros_newman_tmp_angle_fp } \fp_mul:Nn \l_chemmacros_newman_x_fp { \fp_use:N #2 } \fp_mul:Nn \l_chemmacros_newman_y_fp { \fp_use:N #2 } } @@ -1894,9 +2172,15 @@ { \l_chemmacros_newman_scale_fp } \chemmacros_tikz_draw:f { \tl_use:N \l_chemmacros_newman_tikz_ring_tl } - ( 15 * \fp_to_dim:N \l_chemmacros_newman_x_fp , 15 * \fp_to_dim:N \l_chemmacros_newman_y_fp ) + ( + 15 * \fp_to_dim:N \l_chemmacros_newman_x_fp , + 15 * \fp_to_dim:N \l_chemmacros_newman_y_fp + ) -- - ( 30 * \fp_to_dim:N \l_chemmacros_newman_x_fp , 30 * \fp_to_dim:N \l_chemmacros_newman_y_fp ) ; + ( + 30 * \fp_to_dim:N \l_chemmacros_newman_x_fp , + 30 * \fp_to_dim:N \l_chemmacros_newman_y_fp + ) ; \chemmacros_newman_coordinates:on { \fp_to_int:N \l_chemmacros_newman_rel_angle_fp } { \l_chemmacros_newman_scale_fp } @@ -1905,7 +2189,11 @@ chemmacros_newman_atom_back, anchor = -180 + \fp_to_int:N \l_chemmacros_newman_rel_angle_fp } - at ( 31 * \fp_to_dim:N \l_chemmacros_newman_x_fp , 31 * \fp_to_dim:N \l_chemmacros_newman_y_fp ) + at + ( + 31 * \fp_to_dim:N \l_chemmacros_newman_x_fp , + 31 * \fp_to_dim:N \l_chemmacros_newman_y_fp + ) { #2 } ; \group_end: } @@ -1917,11 +2205,19 @@ \chemmacros_newman_coordinates:nn { #1 } { \l_chemmacros_newman_scale_fp } \chemmacros_tikz_draw:f { \tl_use:N \l_chemmacros_newman_tikz_ring_tl } - (0,0) -- ++ ( 30 * \fp_to_dim:N \l_chemmacros_newman_x_fp , 30 * \fp_to_dim:N \l_chemmacros_newman_y_fp ) ; + (0,0) -- ++ + ( + 30 * \fp_to_dim:N \l_chemmacros_newman_x_fp , + 30 * \fp_to_dim:N \l_chemmacros_newman_y_fp + ) ; \chemmacros_newman_coordinates:nn { #1 } { \l_chemmacros_newman_scale_fp } \chemmacros_tikz_node:f { chemmacros_newman_atom_front, anchor = -180 + #1 } - at ( 31 * \fp_to_dim:N \l_chemmacros_newman_x_fp , 31 * \fp_to_dim:N \l_chemmacros_newman_y_fp ) + at + ( + 31 * \fp_to_dim:N \l_chemmacros_newman_x_fp , + 31 * \fp_to_dim:N \l_chemmacros_newman_y_fp + ) { #2 } ; } \cs_generate_variant:Nn \chemmacros_newman_front_node:nn { nf } @@ -2066,7 +2362,8 @@ } \chemmacros_tikz_picture:xn{ \chemmacros_orbital_options: } { - \chemmacros_tikz_shade:f { ball~color = \l_chemmacros_orbital_s_phase_color_tl } + \chemmacros_tikz_shade:f + { ball~color = \l_chemmacros_orbital_s_phase_color_tl } (0,0) circle (\l_chemmacros_orbital_s_scale_tl * .6em) ; } } @@ -2127,17 +2424,39 @@ } \chemmacros_tikz_picture:xn { \chemmacros_orbital_options: } { - \chemmacros_tikz_shadedraw:f { draw = \l_chemmacros_orbital_p_pphase_color_tl , ball~color = \l_chemmacros_orbital_p_pphase_color_tl } - (0,0) .. controls - ++(- \l_chemmacros_orbital_p_scale_tl * 2em,\l_chemmacros_orbital_p_scale_tl * 2em) and - ++(\l_chemmacros_orbital_p_scale_tl * 2em,\l_chemmacros_orbital_p_scale_tl * 2em) + \chemmacros_tikz_shadedraw:f + { + draw = \l_chemmacros_orbital_p_pphase_color_tl , + ball~color = \l_chemmacros_orbital_p_pphase_color_tl + } + (0,0) .. controls ++ + ( + - \l_chemmacros_orbital_p_scale_tl * 2em , + \l_chemmacros_orbital_p_scale_tl * 2em + ) + and ++ + ( + \l_chemmacros_orbital_p_scale_tl * 2em , + \l_chemmacros_orbital_p_scale_tl * 2em + ) .. (0,0); \bool_if:NF \l_chemmacros_orbital_p_half_bool { - \chemmacros_tikz_shadedraw:f { draw = \l_chemmacros_orbital_p_mphase_color_tl , ball~color = \l_chemmacros_orbital_p_mphase_color_tl } - (0,0) .. controls - ++(- \l_chemmacros_orbital_p_scale_tl * 2em,- \l_chemmacros_orbital_p_scale_tl * 2em) and - ++(\l_chemmacros_orbital_p_scale_tl * 2em,- \l_chemmacros_orbital_p_scale_tl * 2em) + \chemmacros_tikz_shadedraw:f + { + draw = \l_chemmacros_orbital_p_mphase_color_tl , + ball~color = \l_chemmacros_orbital_p_mphase_color_tl + } + (0,0) .. controls ++ + ( + - \l_chemmacros_orbital_p_scale_tl * 2em , + - \l_chemmacros_orbital_p_scale_tl * 2em + ) + and ++ + ( + \l_chemmacros_orbital_p_scale_tl * 2em , + - \l_chemmacros_orbital_p_scale_tl * 2em + ) .. (0,0); } } @@ -2197,15 +2516,37 @@ } \chemmacros_tikz_picture:xn { \chemmacros_orbital_options: } { - \chemmacros_tikz_shadedraw:f { draw = \l_chemmacros_orbital_sp_pphase_color_tl , ball~color = \l_chemmacros_orbital_sp_pphase_color_tl } - (0,0) .. controls - ++(- \l_chemmacros_orbital_sp_scale_tl * 2em,\l_chemmacros_orbital_sp_scale_tl * 2em) and - ++(\l_chemmacros_orbital_sp_scale_tl * 2em,\l_chemmacros_orbital_sp_scale_tl * 2em) + \chemmacros_tikz_shadedraw:f + { + draw = \l_chemmacros_orbital_sp_pphase_color_tl , + ball~color = \l_chemmacros_orbital_sp_pphase_color_tl + } + (0,0) .. controls ++ + ( + - \l_chemmacros_orbital_sp_scale_tl * 2em , + \l_chemmacros_orbital_sp_scale_tl * 2em + ) + and ++ + ( + \l_chemmacros_orbital_sp_scale_tl * 2em , + \l_chemmacros_orbital_sp_scale_tl * 2em + ) .. (0,0); - \chemmacros_tikz_shadedraw:f { draw = \l_chemmacros_orbital_sp_mphase_color_tl , ball~color = \l_chemmacros_orbital_sp_mphase_color_tl } - (0,0) .. controls - ++(- \l_chemmacros_orbital_sp_scale_tl * .6em,- \l_chemmacros_orbital_sp_scale_tl * .6em) and - ++(\l_chemmacros_orbital_sp_scale_tl * .6em,- \l_chemmacros_orbital_sp_scale_tl * .6em) + \chemmacros_tikz_shadedraw:f + { + draw = \l_chemmacros_orbital_sp_mphase_color_tl , + ball~color = \l_chemmacros_orbital_sp_mphase_color_tl + } + (0,0) .. controls ++ + ( + - \l_chemmacros_orbital_sp_scale_tl * .6em , + - \l_chemmacros_orbital_sp_scale_tl * .6em + ) + and ++ + ( + \l_chemmacros_orbital_sp_scale_tl * .6em , + - \l_chemmacros_orbital_sp_scale_tl * .6em + ) .. (0,0); } } @@ -2264,15 +2605,37 @@ } \chemmacros_tikz_picture:xn { \chemmacros_orbital_options: } { - \chemmacros_tikz_shadedraw:f { draw = \l_chemmacros_orbital_sptwo_pphase_color_tl , ball~color = \l_chemmacros_orbital_sptwo_pphase_color_tl } - (0,0) .. controls - ++(- \l_chemmacros_orbital_sptwo_scale_tl * 2em,\l_chemmacros_orbital_sptwo_scale_tl * 2em) and - ++(\l_chemmacros_orbital_sptwo_scale_tl * 2em,\l_chemmacros_orbital_sptwo_scale_tl * 2em) + \chemmacros_tikz_shadedraw:f + { + draw = \l_chemmacros_orbital_sptwo_pphase_color_tl , + ball~color = \l_chemmacros_orbital_sptwo_pphase_color_tl + } + (0,0) .. controls ++ + ( + - \l_chemmacros_orbital_sptwo_scale_tl * 2em , + \l_chemmacros_orbital_sptwo_scale_tl * 2em + ) + and ++ + ( + \l_chemmacros_orbital_sptwo_scale_tl * 2em , + \l_chemmacros_orbital_sptwo_scale_tl * 2em + ) .. (0,0); - \chemmacros_tikz_shadedraw:f { draw = \l_chemmacros_orbital_sptwo_mphase_color_tl , ball~color = \l_chemmacros_orbital_sptwo_mphase_color_tl } - (0,0) .. controls - ++(- \l_chemmacros_orbital_sptwo_scale_tl * .8em,- \l_chemmacros_orbital_sptwo_scale_tl * .8em) and - ++(\l_chemmacros_orbital_sptwo_scale_tl * .8em,- \l_chemmacros_orbital_sptwo_scale_tl * .8em) + \chemmacros_tikz_shadedraw:f + { + draw = \l_chemmacros_orbital_sptwo_mphase_color_tl , + ball~color = \l_chemmacros_orbital_sptwo_mphase_color_tl + } + (0,0) .. controls ++ + ( + - \l_chemmacros_orbital_sptwo_scale_tl * .8em , + - \l_chemmacros_orbital_sptwo_scale_tl * .8em + ) + and ++ + ( + \l_chemmacros_orbital_sptwo_scale_tl * .8em , + - \l_chemmacros_orbital_sptwo_scale_tl * .8em + ) .. (0,0); } } @@ -2331,15 +2694,37 @@ } \chemmacros_tikz_picture:xn { \chemmacros_orbital_options: } { - \chemmacros_tikz_shadedraw:f { draw = \l_chemmacros_orbital_spthree_pphase_color_tl , ball~color = \l_chemmacros_orbital_spthree_pphase_color_tl } - (0,0) .. controls - ++(- \l_chemmacros_orbital_spthree_scale_tl * 2em,\l_chemmacros_orbital_spthree_scale_tl * 2em) and - ++(\l_chemmacros_orbital_spthree_scale_tl * 2em,\l_chemmacros_orbital_spthree_scale_tl * 2em) + \chemmacros_tikz_shadedraw:f + { + draw = \l_chemmacros_orbital_spthree_pphase_color_tl , + ball~color = \l_chemmacros_orbital_spthree_pphase_color_tl + } + (0,0) .. controls ++ + ( + - \l_chemmacros_orbital_spthree_scale_tl * 2em , + \l_chemmacros_orbital_spthree_scale_tl * 2em + ) + and ++ + ( + \l_chemmacros_orbital_spthree_scale_tl * 2em , + \l_chemmacros_orbital_spthree_scale_tl * 2em + ) .. (0,0); - \chemmacros_tikz_shadedraw:f { draw = \l_chemmacros_orbital_spthree_mphase_color_tl , ball~color = \l_chemmacros_orbital_spthree_mphase_color_tl } - (0,0) .. controls - ++(- \l_chemmacros_orbital_spthree_scale_tl * 1em,- \l_chemmacros_orbital_spthree_scale_tl * 1em) and - ++(\l_chemmacros_orbital_spthree_scale_tl * 1em,- \l_chemmacros_orbital_spthree_scale_tl * 1em) + \chemmacros_tikz_shadedraw:f + { + draw = \l_chemmacros_orbital_spthree_mphase_color_tl , + ball~color = \l_chemmacros_orbital_spthree_mphase_color_tl + } + (0,0) .. controls ++ + ( + - \l_chemmacros_orbital_spthree_scale_tl * 1em , + - \l_chemmacros_orbital_spthree_scale_tl * 1em + ) + and ++ + ( + \l_chemmacros_orbital_spthree_scale_tl * 1em , + - \l_chemmacros_orbital_spthree_scale_tl * 1em + ) .. (0,0); } } @@ -2386,13 +2771,102 @@ } % --------------------------------------------------------------------------- % +% arrow tips for electron movement +\dim_new:N \l_chemmacros_el_length_dim + +% full tip for pairs +\pgfarrowsdeclare { el } { el } +{ + \dim_set:Nn \l_chemmacros_el_length_dim + { 2.5pt + 2.5\pgflinewidth } + \pgfarrowsleftextend { -\l_chemmacros_el_length_dim } + \pgfarrowsrightextend { .5\pgflinewidth } +} +{ + \dim_set:Nn \l_chemmacros_el_length_dim + { 2.5pt + 2.5\pgflinewidth } + \pgfsetdash {} { 0pt } + \pgfsetroundjoin + \pgfsetroundcap + \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } } + \pgfpathlineto + { + \pgfpoint + { -\l_chemmacros_el_length_dim } + { .3\l_chemmacros_el_length_dim } + } + \pgfpathlineto + { \pgfpoint { -.5\l_chemmacros_el_length_dim } { 0pt } } + \pgfpathlineto + { + \pgfpoint + { -\l_chemmacros_el_length_dim } + { -.3\l_chemmacros_el_length_dim } + } + \pgfpathlineto { \pgfpoint { 0pt } { 0pt } } + \pgfusepathqfillstroke +} + +% half tip on the left +\pgfarrowsdeclare { left~el } { left~el } +{ + \dim_set:Nn \l_chemmacros_el_length_dim + { 2.5pt + 2.5\pgflinewidth } + \pgfarrowsleftextend { -\l_chemmacros_el_length_dim } + \pgfarrowsrightextend { .5\pgflinewidth } +} +{ + \dim_set:Nn \l_chemmacros_el_length_dim + { 2.5pt + 2.5\pgflinewidth } + \pgfsetdash {} { 0pt } + \pgfsetroundjoin + \pgfsetroundcap + \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } } + \pgfpathlineto + { + \pgfpoint + { -\l_chemmacros_el_length_dim } + { .3\l_chemmacros_el_length_dim } + } + \pgfpathlineto { \pgfpoint { -.5\l_chemmacros_el_length_dim } { 0pt } } + \pgfpathlineto { \pgfpoint { 0pt } { 0pt } } + \pgfusepathqfillstroke +} + +% half tip in the right +\pgfarrowsdeclare { right~el } { right~el } +{ + \dim_set:Nn \l_chemmacros_el_length_dim + { 2.5pt + 2.5\pgflinewidth } + \pgfarrowsleftextend { -\l_chemmacros_el_length_dim } + \pgfarrowsrightextend { .5\pgflinewidth } +} +{ + \dim_set:Nn \l_chemmacros_el_length_dim + { 2.5pt + 2.5\pgflinewidth } + \pgfsetdash {} { 0pt } + \pgfsetroundjoin + \pgfsetroundcap + \pgfpathmoveto { \pgfpoint { 0pt } { 0pt } } + \pgfpathlineto + { + \pgfpoint + { -\l_chemmacros_el_length_dim } + { -.3\l_chemmacros_el_length_dim } + } + \pgfpathlineto { \pgfpoint { -.5\l_chemmacros_el_length_dim } { 0pt } } + \pgfpathlineto { \pgfpoint { 0pt } { 0pt } } + \pgfusepathqfillstroke +} + +% --------------------------------------------------------------------------- % % setup \NewDocumentCommand \chemsetup { o m } { \IfNoValueTF { #1 } { \keys_set:nn { chemmacros } { #2 } } { \keys_set:nn { chemmacros / #1 } { #2 } } -% \tex_unskip:D + \ignorespaces } % --------------------------------------------------------------------------- % @@ -2402,6 +2876,33 @@ \input { chemmacros-version1 . cfg } } +% --------------------------------------------------------------------------- % +% hyperref support +\AfterPackage* { hyperref } + { + \pdfstringdefDisableCommands + { + \cs_set:Npn \- { - } + \cs_set:Npn \| { } + \cs_set:Npn \iupac #1 { #1 } + \cs_set:Npn \ortho { o } + \cs_set:Npn \meta { m } + \cs_set:Npn \para { p } + \cs_set:Npn \Dfi { D } + \cs_set:Npn \Lfi { L } + \cs_set:Npn \tert { tert } + \cs_set:Npn \cis { cis } + \cs_set:Npn \trans { trans } + \cs_set:Npn \E { E } + \cs_set:Npn \Z { Z } + \cs_set:Npn \Ent { E } + \cs_set:Npn \Zus { Z } + \cs_set:Npn \Rcip { (R) } + \cs_set:Npn \Scip { (S) } + \cs_set:Npn \cip #1 { (#1) } + } + } + \tex_endinput:D % --------------------------------------------------------------------------- % @@ -2433,4 +2934,24 @@ Version history 2011/11/03 version 2.0a - minor bug fixes - new feature for \Nu - new command \ba -% --------------------------------------------------------------------------- %
\ No newline at end of file +2012/01/28 version 3.0 - bundled with packages `formula' and `ghs' + - new commands \Ka, \Kb, \Kw + - commands can detect if font series is bold + - new package option "detect-bold" + - new package option "method" => choose between `mhchem' + and `formula' for internal uses. + - new package option "ghs" => load `ghs' or don't + - new package option "synchronize" + - new package option "strict" + - new command \iupac + - new command \listofreactions, reaction environments + with optional argument + - \cis, \trans, \tert without \xspace +2012/01/30 version 3.0a - bugfix in formula.sty + - renamed formula => chemformula + and ghs => ghsystem to make the names unique + (following a request by Karl Berry) +% --------------------------------------------------------------------------- % +% TODO: +- ox-option xfrac vs math? +- Option „side“ for Phasen-Befehle?
\ No newline at end of file |