summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/chemmacros/chemmacros.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/chemmacros/chemmacros.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/chemmacros/chemmacros.sty')
-rw-r--r--macros/latex/contrib/chemmacros/chemmacros.sty272
1 files changed, 272 insertions, 0 deletions
diff --git a/macros/latex/contrib/chemmacros/chemmacros.sty b/macros/latex/contrib/chemmacros/chemmacros.sty
new file mode 100644
index 0000000000..fb25545aad
--- /dev/null
+++ b/macros/latex/contrib/chemmacros/chemmacros.sty
@@ -0,0 +1,272 @@
+% --------------------------------------------------------------------------
+% the CHEMMACROS package
+%
+% comprehensive support for typesetting chemistry documents
+%
+% --------------------------------------------------------------------------
+% 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-2017 Clemens Niederberger
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% 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 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Clemens Niederberger.
+% --------------------------------------------------------------------------
+\RequirePackage{expl3,xparse,l3keys2e}
+\ExplSyntaxOn
+
+% --------------------------------------------------------------------------
+% package information:
+\tl_const:Nn \c_chemmacros_date_tl {2017/08/28}
+\tl_const:Nn \c_chemmacros_version_major_number_tl {5}
+\tl_const:Nn \c_chemmacros_version_minor_number_tl {8}
+\tl_const:Nn \c_chemmacros_version_subrelease_tl {b}
+\tl_const:Nx \c_chemmacros_version_number_tl
+ {
+ \c_chemmacros_version_major_number_tl .
+ \c_chemmacros_version_minor_number_tl
+ }
+\tl_const:Nx \c_chemmacros_version_tl
+ {
+ \c_chemmacros_version_number_tl
+ \c_chemmacros_version_subrelease_tl
+ }
+\tl_const:Nn \c_chemmacros_info_tl
+ {comprehensive~ support~ for~ typesetting~ chemistry~ documents}
+
+\ProvidesExplPackage
+ {chemmacros}
+ {\c_chemmacros_date_tl}
+ {\c_chemmacros_version_tl}
+ {\c_chemmacros_info_tl \c_space_tl (CN)}
+
+% --------------------------------------------------------------------------
+% set compatibility
+\tl_new:N \l__chemmacros_compatibility_version_tl
+\tl_set_eq:NN \l__chemmacros_compatibility_version_tl \c_chemmacros_version_tl
+
+\keys_define:nn {chemmacros/compatibility}
+ {
+ compatibility .code:n =
+ \str_case:nnTF {#1}
+ {
+ {newest} {}
+ {latest} {}
+ }
+ {
+ \tl_set_eq:NN
+ \l__chemmacros_compatibility_version_tl
+ \c_chemmacros_version_tl
+ }
+ { \tl_set:Nn \l__chemmacros_compatibility_version_tl {#1} } ,
+ unknown .code:n =
+ \PassOptionsToPackage{\CurrentOption}{chemmacros4}
+ \PassOptionsToPackage{\CurrentOption}{chemmacros5}
+ }
+
+\ProcessKeysPackageOptions {chemmacros/compatibility}
+
+% --------------------------------------------------------------------------
+% compare version numbers
+% #1: version
+% #2: relation
+% #3: version
+% #4: true
+% #5: false
+\prg_new_conditional:Npnn \chemmacros_if_version:nnn #1#2#3 {p,T,F,TF}
+ {
+ \fp_compare:nTF
+ {
+ (
+ \chemmacros_get_major_version:n {#1} * 1e6 +
+ \chemmacros_get_minor_version:n {#1} * 1e3 +
+ 0 \chemmacros_get_subrelease:n {#1}
+ )
+ #2
+ (
+ \chemmacros_get_major_version:n {#3} * 1e6 +
+ \chemmacros_get_minor_version:n {#3} * 1e3 +
+ 0 \chemmacros_get_subrelease:n {#3}
+ )
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_generate_variant:Nn \chemmacros_if_version:nnnTF {fnf}
+
+\cs_new:Npn \__chemmacros_get_minor_version:w #1.#2.#3 \q_stop
+ {
+ \tl_if_blank:nTF {#2} {0} {
+ \tl_map_function:nN {#2} \__chemmacros_get_minor_number:n
+ }
+ }
+
+\cs_new:Npn \chemmacros_get_minor_version:n #1
+ { \__chemmacros_get_minor_version:w #1.. \q_stop }
+
+\cs_new:Npn \__chemmacros_get_minor_number:n #1
+ {
+ \str_case:nn {#1}
+ {
+ {0} {0}
+ {1} {1}
+ {2} {2}
+ {3} {3}
+ {4} {4}
+ {5} {5}
+ {6} {6}
+ {7} {7}
+ {8} {8}
+ {9} {9}
+ }
+ }
+
+\cs_new:Npn \__chemmacros_get_major_version:w #1.#2.#3 \q_stop
+ { \tl_if_blank:nTF {#1} {0} {#1} }
+
+\cs_new:Npn \chemmacros_get_major_version:n #1
+ { \__chemmacros_get_major_version:w #1.. \q_stop }
+
+\cs_new:Npn \__chemmacros_get_subrelease:w #1.#2.#3 \q_stop
+ {
+ \tl_if_blank:nTF {#2} {0} {
+ \tl_map_function:nN {#2} \__chemmacros_get_subrelease_number:n
+ }
+ }
+
+\cs_new:Npn \chemmacros_get_subrelease:n #1
+ { \__chemmacros_get_subrelease:w #1.. \q_stop }
+
+\cs_new:Npn \__chemmacros_get_subrelease_number:n #1
+ {
+ \str_case:nnF {#1}
+ {
+ {0} {}
+ {1} {}
+ {2} {}
+ {3} {}
+ {4} {}
+ {5} {}
+ {6} {}
+ {7} {}
+ {8} {}
+ {9} {}
+ }
+ { \int_from_alph:n {#1} }
+ }
+
+% check compatibility
+% #1: relation
+% #2: number
+% #3: true
+% #4: false
+\prg_new_conditional:Npnn \chemmacros_if_compatibility:nn #1#2 {p,T,F,TF}
+ {
+ \chemmacros_if_version:fnfTF
+ { \l__chemmacros_compatibility_version_tl }
+ {#1}
+ {#2}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_generate_variant:Nn \chemmacros_if_compatibility:nnT {nV}
+
+% user checks:
+\NewExpandableDocumentCommand \IfChemCompatibilityTF {mm+m+m}
+ { \chemmacros_if_compatibility:nnTF {#1} {#2} {#3} {#4} }
+
+\NewExpandableDocumentCommand \IfChemCompatibilityT {mm+m}
+ { \chemmacros_if_compatibility:nnT {#1} {#2} {#3} }
+
+\NewExpandableDocumentCommand \IfChemCompatibilityF {mm+m}
+ { \chemmacros_if_compatibility:nnF {#1} {#2} {#3} }
+
+% --------------------------------------------------------------------------
+% compatibility coding:
+\cs_new_protected:Npn \ChemCompatibility #1#2 \EndChemCompatibility
+ { \chemmacros_if_compatibility:nnT {=} {#1} {#2} }
+
+\cs_new_protected:Npn \ChemCompatibilityFrom #1#2 \EndChemCompatibility
+ { \chemmacros_if_compatibility:nnT {>=} {#1} {#2} }
+
+\cs_new_protected:Npn \ChemCompatibilityTo #1#2 \EndChemCompatibility
+ { \chemmacros_if_compatibility:nnT {<} {#1} {#2} }
+
+\cs_new_protected:Npn \ChemCompatibilityBetween #1#2#3 \EndChemCompatibility
+ {
+ \bool_if:nT
+ {
+ \chemmacros_if_compatibility_p:nn {>=} {#1} &&
+ \chemmacros_if_compatibility_p:nn {<} {#2}
+ }
+ {#3}
+ }
+
+% --------------------------------------------------------------------------
+% messages:
+\msg_new:nnn {chemmacros} {too-low-compatibility}
+ {
+ Compatibility~ for~ versions~ below~ v4.7~ is~ not~ supported!~ You~
+ requested~ version~ v #1.~ Loading~ v4.7~ instead.
+ }
+
+\msg_new:nnn {chemmacros} {too-high-compatibility}
+ {
+ You~ requested~ compatibility~ mode~ v #1~ while~ the~ current~ version~
+ of~ chemmacros~ is~ v \c_chemmacros_version_tl .~ Falling~ back~
+ to~ v \c_chemmacros_version_number_tl !
+ }
+
+\msg_new:nnn {chemmacros} {low-compatibility}
+ {
+ You~ requested~ compatibility~ mode~ v #1~ while~ the~ current~ version~
+ of~ chemmacros~ is~ v \c_chemmacros_version_tl .~ Not~ all~ features~
+ or~ fixes~ will~ be~ available!
+ }
+
+% --------------------------------------------------------------------------
+% let's see that the max number is the newest (=current) version
+\chemmacros_if_compatibility:nnT {>} { \c_chemmacros_version_tl }
+ {
+ \tl_set_eq:NN
+ \l__chemmacros_compatibility_version_tl
+ \c_chemmacros_version_tl
+ }
+
+% --------------------------------------------------------------------------
+% compatibility too low:
+\chemmacros_if_compatibility:nnT {<} {4.7}
+ {
+ \msg_warning:nnx {chemmacros} {too-low-compatibility}
+ { \l__chemmacros_compatibility_version_tl }
+ }
+
+% not the newest version:
+\chemmacros_if_compatibility:nnT {<} { \c_chemmacros_version_tl }
+ {
+ \msg_warning:nnx {chemmacros} {low-compatibility}
+ { \l__chemmacros_compatibility_version_tl }
+ }
+
+% --------------------------------------------------------------------------
+\chemmacros_if_compatibility:nnTF {<} {5.0}
+ { \RequirePackage{chemmacros4} }
+ { \RequirePackage{chemmacros5} }
+
+% --------------------------------------------------------------------------
+\tex_endinput:D
+