summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-01-30 23:46:36 +0000
committerKarl Berry <karl@freefriends.org>2012-01-30 23:46:36 +0000
commit83013cd537ab5598f12184ee643a6200006c7f14 (patch)
treeea880d63d086965dc49788abeb282ece4d9de603 /Master/texmf-dist/tex/latex/chemmacros/chemmacros.sty
parent24a533cad9a13d7244418ec43b4bb323d528c1a1 (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.sty1005
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