diff options
Diffstat (limited to 'macros/latex/contrib/chemmacros/chemmacros.module.redox.code.tex')
-rw-r--r-- | macros/latex/contrib/chemmacros/chemmacros.module.redox.code.tex | 458 |
1 files changed, 0 insertions, 458 deletions
diff --git a/macros/latex/contrib/chemmacros/chemmacros.module.redox.code.tex b/macros/latex/contrib/chemmacros/chemmacros.module.redox.code.tex deleted file mode 100644 index c012a73b10..0000000000 --- a/macros/latex/contrib/chemmacros/chemmacros.module.redox.code.tex +++ /dev/null @@ -1,458 +0,0 @@ -% -------------------------------------------------------------------------- -% -% the CHEMMACROS package -- module: `redox' -% -% -------------------------------------------------------------------------- -% Clemens Niederberger -% -------------------------------------------------------------------------- -% https://github.org/cgnieder/chemmacros/ -% contact@mychemistry.eu -% -------------------------------------------------------------------------- -% If you have any ideas, questions, suggestions or bugs to report, please -% feel free to contact me. -% -------------------------------------------------------------------------- -% Copyright 2011--2020 Clemens Niederberger -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License, either version 1.3c -% of this license or (at your option) any later version. -% The latest version of this license is in -% http://www.latex-project.org/lppl.txt -% and version 1.3 or later is part of all distributions of LaTeX -% version 2008/05/04 or later. -% -% This work has the LPPL maintenance status `maintained'. -% -% The Current Maintainer of this work is Clemens Niederberger. -% -------------------------------------------------------------------------- -\ChemModule{redox}{2020/02/02 oxidation numbers, redox reactions} - -\chemmacros_load_modules:n {tikz,xfrac} - -\RequirePackage{mathtools,relsize} - -\msg_new:nnn {chemmacros} {redox} - { \token_to_str:N #1 \c_space_tl : ~ #2 ~ \msg_line_context: . } - - -% -------------------------------------------------------------------------- -% oxidation numbers -% \ox{<number>,<atom>} -\bool_new:N \l__chemmacros_ox_sign_bool -\bool_new:N \l__chemmacros_ox_integer_bool -\bool_new:N \l__chemmacros_ox_explicit_sign_bool -\ChemCompatibilityFrom{5.2} -\bool_new:N \l__chemmacros_ox_explicit_zero_sign_bool -\EndChemCompatibility -\bool_new:N \l__chemmacros_ox_format_roman_bool -\bool_new:N \l__chemmacros_ox_decimal_marker_comma_bool -\bool_new:N \l__chemmacros_ox_parse_bool -\bool_new:N \l__chemmacros_ox_side_bool -\bool_new:N \l__chemmacros_ox_super_bool -\bool_new:N \l__chemmacros_ox_top_bool -\bool_new:N \l__chemmacros_ox_align_center_bool - -\ChemCompatibilityFrom{5.11} -\tl_new:N \l__chemmacros_ox_format_tl -\EndChemCompatibility - -\int_new:N \l__chemmacros_ox_number_int -\fp_new:N \l__chemmacros_ox_number_fp - -\cs_new_protected:Npn \__chemmacros_ox_format:n #1 - { - \chemmacros_if_compatibility:nnTF {>=} {5.11} - { { \l__chemmacros_ox_format_tl {#1} } } - { \use:n {#1} } - } - -\cs_new_protected:Npn \__chemmacros_ox_process_number:n #1 - { - \bool_if:NTF \l__chemmacros_ox_parse_bool - { - \tl_if_in:nnTF {#1} { / } - { \__chemmacros_ox_fraction:w #1 \q_stop } - { - \__chemmacros_ox_sign:n {#1} - \__chemmacros_ox_value:n {#1} - } - } - {#1} - } - -\cs_new_protected:Npn \__chemmacros_ox_fraction:w #1/#2 \q_stop - { - \group_begin: - \bool_set_false:N \l__chemmacros_ox_format_roman_bool - \__chemmacros_ox_sign:n {#1} - \bool_if:NTF \l__chemmacros_ox_side_bool - { \chemmacros_ox_text_frac:nn } - { \chemmacros_ox_super_frac:nn } - { \__chemmacros_ox_value:n {#1} } - {#2} - \group_end: - } - -\ChemCompatibilityTo{5.4} -\cs_new_protected:Npn \__chemmacros_ox_sign:n #1 - { - \bool_lazy_and:nnT - { \fp_compare_p:n { #1 > 0 } } - { \l__chemmacros_ox_explicit_sign_bool } - { \c_math_toggle_token + \c_math_toggle_token } - \bool_lazy_and:nnT - { \fp_compare_p:n { #1 = 0 } } - { \l__chemmacros_ox_explicit_sign_bool } - { \c_math_toggle_token \pm \c_math_toggle_token } - \fp_compare:nT { #1 < 0 } - { \c_math_toggle_token - \c_math_toggle_token } - } -\EndChemCompatibility -\ChemCompatibilityFrom{5.4} -\cs_new_protected:Npn \__chemmacros_ox_sign:n #1 - { - \bool_lazy_and:nnT - { \fp_compare_p:n { #1 > 0 } } - { \l__chemmacros_ox_explicit_sign_bool } - { \c_math_toggle_token + \c_math_toggle_token } - \bool_lazy_all:nT - { - { \fp_compare_p:n { #1 = 0 } } - { \l__chemmacros_ox_explicit_sign_bool } - { \l__chemmacros_ox_explicit_zero_sign_bool } - } - { \c_math_toggle_token \pm \c_math_toggle_token } - \fp_compare:nT { #1 < 0 } - { \c_math_toggle_token - \c_math_toggle_token } - } -\EndChemCompatibility - -\cs_new_protected:Npn \__chemmacros_ox_value:n #1 - { - \fp_set:Nn \l__chemmacros_ox_number_fp { abs(#1) } - \__chemmacros_ox_is_integer:n { \l__chemmacros_ox_number_fp } - \bool_if:NTF \l__chemmacros_ox_format_roman_bool - { \__chemmacros_fp_to_Roman:n { \l__chemmacros_ox_number_fp } } - { - \bool_if:NTF \l__chemmacros_ox_integer_bool - { - \c_math_toggle_token - \__chemmacros_fp_to_arabic:n { \l__chemmacros_ox_number_fp } - \c_math_toggle_token - } - { - \c_math_toggle_token - \fp_use:N \l__chemmacros_ox_number_fp - \c_math_toggle_token - } - } - } - -\cs_new_protected:Npn \__chemmacros_ox_is_integer:n #1 - { - \fp_compare:nNnTF {#1} = { round((#1) + 1 , 0 ) - 1 } - { \bool_set_true:N \l__chemmacros_ox_integer_bool } - { - \bool_set_false:N \l__chemmacros_ox_integer_bool - \bool_set_false:N \l__chemmacros_ox_format_roman_bool - } - } - -\cs_new_protected:Npn \__chemmacros_fp_to_Roman:n #1 - { - \group_begin: - \fp_compare:nNnTF {#1} = { 0 } - {0} - { \int_to_Roman:n { \fp_to_int:n {#1} } } - \group_end: - } - -\cs_new_protected:Npn \__chemmacros_fp_to_arabic:n #1 - { - \group_begin: - \bool_if:NTF \l__chemmacros_ox_decimal_marker_comma_bool - { - \tl_set:Nx \l__chemmacros_tmpa_tl { \fp_to_decimal:n {#1} } - \tl_replace_once:Nnn \l__chemmacros_tmpa_tl {.} { {,} } - \tl_use:N \l__chemmacros_tmpa_tl - } - { \fp_to_decimal:n {#1} } - \group_end: - } - -\tl_new:N \l__chemmacros_ox_side_connect_tl - -\cs_new_protected:Npn \__chemmacros_ox_write:nn #1#2 - { - \tl_if_blank:nT {#1} - { \msg_error:nnn {chemmacros} {redox} {\ox} {oxidation~number~missing} } - \tl_if_blank:nT {#2} - { \msg_error:nnn {chemmacros} {redox} {\ox} {oxidation-atom~missing} } - \hbox_set:Nn \l__chemmacros_tmpa_box - { - \chemmacros_text:n - { - \__chemmacros_ox_format:n - { \relsize {-3} \__chemmacros_ox_process_number:n {#1} } - } - } - \hbox_set:Nn \l__chemmacros_tmpb_box { \chemmacros_chemformula:n {#2} } - \chemmacros_math:n - { - \bool_if:NT \l__chemmacros_ox_super_bool - { - \box_use:N \l__chemmacros_tmpb_box - \c_math_superscript_token { \box_use:N \l__chemmacros_tmpa_box } - } - \bool_if:NT \l__chemmacros_ox_side_bool - { - \chemmacros_text:n - { - \box_use:N \l__chemmacros_tmpb_box - \tl_use:N \l__chemmacros_ox_side_connect_tl - ( - \__chemmacros_ox_format:n - { \__chemmacros_ox_process_number:n {#1} } - ) - } - } - \bool_if:NT \l__chemmacros_ox_top_bool - { - \bool_if:NF \l__chemmacros_ox_align_center_bool - { - \hbox_set_to_wd:Nnn \l__chemmacros_tmpa_box - { \box_wd:N \l__chemmacros_tmpb_box } - { \rlap { \hbox_unpack:N \l__chemmacros_tmpa_box } \hfil } - } - \overset - { - \bool_if:NTF \l__chemmacros_ox_align_center_bool - { \clap } - { \use:n } - { \box_use:N \l__chemmacros_tmpa_box } - } - { \box_use:N \l__chemmacros_tmpb_box } - } - } - } - -\cs_new_protected:Npn \__chemmacros_ox_pos_top: - { - \bool_set_true:N \l__chemmacros_ox_top_bool - \bool_set_false:N \l__chemmacros_ox_super_bool - \bool_set_false:N \l__chemmacros_ox_side_bool - } - -\cs_new_protected:Npn \__chemmacros_ox_pos_super: - { - \bool_set_false:N \l__chemmacros_ox_top_bool - \bool_set_true:N \l__chemmacros_ox_super_bool - \bool_set_false:N \l__chemmacros_ox_side_bool - } - -\cs_new_protected:Npn \__chemmacros_ox_pos_side: - { - \bool_set_false:N \l__chemmacros_ox_top_bool - \bool_set_false:N \l__chemmacros_ox_super_bool - \bool_set_true:N \l__chemmacros_ox_side_bool - } - -\chemmacros_define_keys:nn {redox} - { - pos .choice: , - pos / top .code:n = \__chemmacros_ox_pos_top: , - pos / super .code:n = \__chemmacros_ox_pos_super: , - pos / side .code:n = \__chemmacros_ox_pos_side: , - pos .initial:n = super , - side-connect .tl_set:N = \l__chemmacros_ox_side_connect_tl , - side-connect .initial:n = \, , - text-frac .code:n = - \cs_set_protected:Npn \chemmacros_ox_text_frac:nn ##1##2 {#1} , - text-frac .initial:n = \chemfrac[text]{#1}{#2} , - super-frac .code:n = - \cs_set_protected:Npn \chemmacros_ox_super_frac:nn ##1##2 {#1} , - super-frac .initial:n = \chemfrac[superscript]{#1}{#2} , - roman .bool_set:N = \l__chemmacros_ox_format_roman_bool , - roman .default:n = true , - roman .initial:n = true , - parse .bool_set:N = \l__chemmacros_ox_parse_bool , - parse .default:n = true , - parse .initial:n = true , - explicit-sign .bool_set:N = \l__chemmacros_ox_explicit_sign_bool , - explicit-sign .default:n = true , - decimal-marker .choice: , - decimal-marker / comma .code:n = - { \bool_set_true:N \l__chemmacros_ox_decimal_marker_comma_bool } , - decimal-marker / point .code:n = - { \bool_set_false:N \l__chemmacros_ox_decimal_marker_comma_bool } , - decimal-marker .initial:n = point , - align .choice: , - align / center .code:n = - \bool_set_true:N \l__chemmacros_ox_align_center_bool , - align / right .code:n = - \bool_set_false:N \l__chemmacros_ox_align_center_bool , - align .initial:n = center - } - -\ChemCompatibilityFrom{5.4} -\chemmacros_define_keys:nn {redox} - { - explicit-zero-sign .bool_set:N = \l__chemmacros_ox_explicit_zero_sign_bool , - explicit-zero-sign .default:n = true - } -\EndChemCompatibility - -\ChemCompatibilityFrom{5.11} -\chemmacros_define_keys:nn {redox} - { format .tl_set:N = \l__chemmacros_ox_format_tl } -\EndChemCompatibility - -% \ox[<keyval>]{<num>,<atom>} -% \ox*[<keyval>]{<num>,<atom>} => always number on the top -\cs_new_protected:Npn \chemmacros_ox:nnnn #1#2#3#4 - { - \group_begin: - \chemmacros_set_keys:nn {redox} {#2} - \tl_if_blank:nF {#1} { \__chemmacros_ox_pos_top: } - \__chemmacros_ox_write:nn {#3} {#4} - \group_end: - } - -\NewDocumentCommand \ox { sO{}>{\SplitArgument{1}{,}}m } - { - \IfBooleanTF {#1} - { \chemmacros_ox:nnnn {#1} {#2} #3 } - { \chemmacros_ox:nnnn { } {#2} #3 } - } - -% --------------------------------------------------------------------------- -% redox reactions -\tl_new:N \l__chemmacros_redox_begin_tl -\tl_new:N \l__chemmacros_redox_end_tl -\tl_new:N \l__chemmacros_redox_tikz_tl -\tl_new:N \l__chemmacros_redox_shift_tl -\tl_new:N \l__chemmacros_redox_anchor_tl -\tl_new:N \l__chemmacros_redox_side_tl - -\fp_new:N \l__chemmacros_redox_shift_fp - -\dim_new:N \l__chemmacros_redox_sep_dim -\dim_new:N \l__chemmacros_redox_sep_default_dim -\dim_set:Nn \l__chemmacros_redox_sep_default_dim {.2em} -\dim_new:N \l__chemmacros_redox_dist_dim -\dim_set:Nn \l__chemmacros_redox_dist_dim {.6em} - -% place and name nodes: -% \OX{<name>,<atom>} -\NewDocumentCommand \OX { >{\SplitArgument{1}{,}}m } - { \chemmacros_redox_partner:nn #1 } - -% TODO: add option to make `#2' be parsed as chem formula -\cs_new_protected:Npn \chemmacros_redox_partner:nn #1#2 - { - \legacy_if:nTF {measuring@} - { - \group_begin: - \tikz[baseline=(#1.base)] { \node [inner~sep=0pt] (#1) {#2} ; } - \group_end: - } - { - \tl_if_blank:nT {#1} - { \msg_error:nnnn {chemmacros} {redox} {\OX} {node~name~missing} } - \tl_if_blank:nT {#2} - { \msg_error:nnnn {chemmacros} {redox} {\OX} {atom~missing} } - \tikz[baseline=(#1.base),remember~picture] - { \node [inner~sep=0pt] (#1) {#2} ; } - } - } - -\cs_new_protected:Npn \__chemmacros_redox_coordinates:nn #1#2 - { - \tl_set:Nn \l__chemmacros_redox_begin_tl {#1} - \tl_set:Nn \l__chemmacros_redox_end_tl {#2} - } - -\cs_new_protected:Npn \chemmacros_redox:nnnnn #1#2#3#4#5 - { - \tl_clear:N \l__chemmacros_redox_begin_tl - \tl_clear:N \l__chemmacros_redox_end_tl - \tl_clear:N \l__chemmacros_redox_tikz_tl - \__chemmacros_redox_coordinates:nn {#1} {#2} - \tl_if_blank:nF {#3} - { \tl_set:Nn \l__chemmacros_redox_tikz_tl {#3} } - \tl_if_blank:nTF {#4} - { - \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 - } - { - \fp_compare:nNnTF {#4} < {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 } - } - { - \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 - } - \fp_set:Nn \l__chemmacros_redox_shift_fp {#4} - } - \tl_set:Nx \l__chemmacros_redox_shift_tl - { \fp_to_decimal:N \l__chemmacros_redox_shift_fp } - \tikz[remember~picture,overlay] - { - \chemmacros_tikz_draw:x { \exp_not:V \l__chemmacros_redox_tikz_tl } - ($ - (\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] { {#5} } - ($ - (\l__chemmacros_redox_end_tl . - \l__chemmacros_redox_side_tl)+(0,\l__chemmacros_redox_sep_dim) - $) ; - } - } - -\NewDocumentCommand \redox { >{\SplitArgument{1}{,}}r()ooG{} } - { - \IfNoValueT {#1} - { - \msg_error:nnnn {chemmacros} {redox} {\redox} - {You~need~to~specify~coordinates} - } - \IfNoValueTF {#2} - { \chemmacros_redox:nnnnn #1 { } { } {#4} } - { - \IfNoValueTF {#3} - { \chemmacros_redox:nnnnn #1 {#2} { } {#4} } - { \chemmacros_redox:nnnnn #1 {#2} {#3} {#4} } - } - } - -% redox-keys -\chemmacros_define_keys:nn {redox} - { - dist .dim_set:N = \l__chemmacros_redox_dist_dim , - dist .initial:n = {.6em} , - sep .dim_set:N = \l__chemmacros_redox_sep_default_dim , - sep .initial:n = {.2em} - } - -% -------------------------------------------------------------------------- -\file_input_stop: -2015/09/30 - new option `explicit-zero-sign' -2020/02/02 - lazy boolean evaluation - - prefer \legacy_if:nTF over \chemmacros_if_tex:nnTF -2020/03/02 - add option redox/format |