diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/chemmacros/ghsystem.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/chemmacros/ghsystem.sty | 436 |
1 files changed, 436 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/chemmacros/ghsystem.sty b/Master/texmf-dist/tex/latex/chemmacros/ghsystem.sty new file mode 100644 index 00000000000..1f1be06e3cd --- /dev/null +++ b/Master/texmf-dist/tex/latex/chemmacros/ghsystem.sty @@ -0,0 +1,436 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% --------------------------------------------------------------------------- % +% - the CHEMMACROS bundle - % +% - ghsystem.sty - % +% - macros and commands for chemists - % +% --------------------------------------------------------------------------- % +% - Clemens Niederberger - % +% - 2012/01/30 - % +% --------------------------------------------------------------------------- % +% - http://www.mychemistry.eu/ - % +% - contact@mychemistry.eu - % +% --------------------------------------------------------------------------- % +% - If you have any ideas, questions, suggestions or bugs to report, please - % +% - feel free to contact me. - % +% --------------------------------------------------------------------------- % +% - 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 - % +% - 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 } +\ProvidesExplPackage {ghsystem} {2012/01/30} {3.0a} {globally harmonised system} + +% --------------------------------------------------------------------------- % +% error and warning messages: +\msg_set:nnnn { ghsystem } { explicit } + { It~seems~you've~loaded~`ghsystem'~explicitly. } + { + It~seems~you've~loaded~`ghsystem'~explicitly.~This~should~work~but~the~ + recommended~way~is~to~load~it~via~the~bundle,~i.e.~by~using~ + \token_to_str:N \usepackage \{ chemmacros \}. + } + +\msg_set:nnnn { ghsystem } { statements } + { + You've~tried~to~call~statement~#1#2~ \msg_line_context: \c_space_tl but~it~ + it~is~not~defined~in~ghsystem.sty . + } + { + You've~tried~to~call~statement~#1#2~ \msg_line_context: \c_space_tl but~it~ + it~is~not~defined~in~ghsystem.sty . ~ Are~you~sure~it~exists? ~ If~so~please~send + ~a~message~to~the~author.~Thanks. + } + +\msg_set:nnnn { ghsystem } { booktabs } + { Package~`booktabs'~missing~\msg_line_context: . } + { + Option~#1~of~the~\token_to_str:N \ghslistall \c_space_tl command~ + \msg_line_context: \c_space_tl needs~the~`booktabs'~package . ~Please~make~ + sure~to~load~it~in~your~preamble. + } + +% --------------------------------------------------------------------------- % +% test, if we are loaded without the `chemmacros' package +\cs_if_exist:cF { ver@chemmacros.sty } + { \msg_warning:nn { ghsystem } { explicit } } + +% pass options to the `chemmacros' package +\DeclareOption* + { \PassOptionsToPackage { \CurrentOption } { chemmacros } } +\ProcessOptions\relax + +% load required packages: +\RequirePackage{ chemmacros , graphicx , tabu , longtable , ifpdf } + +% --------------------------------------------------------------------------- % +% define variables: +\prop_new:N \l_ghsystem_h_prop +\prop_new:N \l_ghsystem_euh_prop +\prop_new:N \l_ghsystem_p_prop + +\cs_new:Npn \ghsystem_exposure: {} +\cs_new:Npn \ghsystem_effect: {} +\cs_new:Npn \ghsystem_organs: {} +\cs_new:Npn \ghsystem_substance: {} +\cs_new:Npn \ghsystem_text: {} + +\bool_new:N \l_ghsystem_fill_in_bool +\bool_new:N \l_ghsystem_show_number_bool +\bool_new:N \l_ghsystem_substance_bool +\bool_new:N \l_ghsystem_organs_bool +\bool_new:N \l_ghsystem_hide_statement_bool +\bool_new:N \l_ghsystem_engine_pdftex_bool +\bool_new:N \l_ghsystem_engine_xetex_bool +\bool_new:N \l_ghsystem_engine_luatex_bool + +\tl_new:N \l_ghsystem_number_space_tl +\tl_new:N \l_ghsystem_celsius_temperature_tl +\tl_new:N \l_ghsystem_fahrenheit_temperature_tl +\tl_new:N \l_ghsystem_kg_mass_tl +\tl_new:N \l_ghsystem_lbs_mass_tl +\tl_new:N \l_ghsystem_dots_tl +\tl_set:Nn \l_ghsystem_dots_tl { \ldots } +\tl_new:N \l_ghsystem_picture_scale_default_tl +\tl_set:Nn \l_ghsystem_picture_scale_default_tl { .05 } +\tl_new:N \l_ghsystem_picture_scale_tl +\tl_set_eq:NN \l_ghsystem_picture_scale_tl \l_ghsystem_picture_scale_default_tl +\tl_new:N \l_ghsystem_picture_includegraphics_tl +\tl_new:N \l_ghsystem_picture_type_tl +\tl_new:N \l_ghsystem_identifier_tl +\tl_new:N \l_ghsystem_table_text_tl +\tl_new:N \l_ghsystem_table_next_page_tl +\tl_new:N \l_ghsystem_table_head_rule_tl +\tl_set:Nn \l_ghsystem_table_head_rule_tl { \hline } +\tl_new:N \l_ghsystem_table_top_head_rule_tl +\tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \hline } +\tl_new:N \l_ghsystem_table_foot_rule_tl +\tl_set:Nn \l_ghsystem_table_foot_rule_tl { \hline } +\tl_new:N \l_ghsystem_table_last_foot_rule_tl +\tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \hline } +\tl_new:N \l_ghsystem_table_caption_tl +\tl_new:N \l_ghsystem_table_caption_short_tl +\tl_new:N \l_ghsystem_table_label_tl +\tl_set:Nn \l_ghsystem_table_label_tl { tab : ghs-hp-statements } + +\dim_new:N \l_ghsystem_table_line_sep_dim +\dim_set:Nn \l_ghsystem_table_line_sep_dim { 3pt } + +\fp_new:N \l_ghsystem_picture_scale_fp +\fp_set:Nn \l_ghsystem_picture_scale_fp { \l_ghsystem_picture_scale_tl } + +\DeclareSIUnit { \GHSfahrenheit } { \SIUnitSymbolDegree F } +\DeclareSIUnit { \GHScelsius } { \SIUnitSymbolDegree C } +\DeclareSIUnit { \GHSkilogram } { kg } +\DeclareSIUnit { \GHSpounds } { lbs } + +\bool_if:NTF \l_chemmacros_german_bool + { \input { language / ghsystem_german.def } \ExplSyntaxOn } + { \input { language / ghsystem_english.def } \ExplSyntaxOn } + +\cs_new_nopar:Nn \ghsystem_booktabs:n + { + \cs_if_exist:cF { ver@booktabs.sty } + { \msg_error:nnx { ghsystem } { booktabs } { #1 } } + } + +% --------------------------------------------------------------------------- % +% define options: +\keys_define:nn { chemmacros / ghsystem } + { + % general options: + language .code:n = + \bool_set_true:c { l_ghsystem_#1_bool } + \input { language / ghsystem_#1.def } \ExplSyntaxOn , + % \ghs options: + hide .bool_set:N = \l_ghsystem_hide_statement_bool , + hide .default:n = true , + fill-in .bool_set:N = \l_ghsystem_fill_in_bool , + fill-in .default:n = true , + exposure .code:n = + \cs_set:Npn \ghsystem_exposure: { ~ #1 } , + effect .code:n = + \cs_set:Npn \ghsystem_effect: { ~ #1 } , + organs .code:n = + \bool_set_true:N \l_ghsystem_organs_bool + \cs_set:Npn \ghsystem_organs: { ~ #1 } , + substance .code:n = + \bool_set_true:N \l_ghsystem_substance_bool + \cs_set:Npn \ghsystem_substance: { ~ #1 } , + text .code:n = + \cs_set:Npn \ghsystem_text: { ~ #1 } , + space .tl_set:N = \l_ghsystem_number_space_tl , + C-temperature .tl_set:N = \l_ghsystem_celsius_temperature_tl , + F-temperature .tl_set:N = + \l_ghsystem_fahrenheit_temperature_tl , + kg-mass .tl_set:N = \l_ghsystem_kg_mass_tl , + lbs-mass .tl_set:N = \l_ghsystem_lbs_mass_tl , + dots .tl_set:N = \l_ghsystem_dots_tl , + % \ghspic options: + scale .code:n = + \fp_mul:Nn \l_ghsystem_picture_scale_fp { #1 } , + includegraphics .code:n = + \tl_set:Nn \l_ghsystem_picture_includegraphics_tl { , #1 } , + pic-type .choices:nn = { eps , jpg , png } + { \tl_set_eq:NN \l_ghsystem_picture_type_tl \l_keys_choice_tl } , + % \ghslistall options: + table-head-number .tl_set:N = \l_ghsystem_identifier_tl , + table-head-text .tl_set:N = \l_ghsystem_table_text_tl , + table-next-page .tl_set:N = \l_ghsystem_table_next_page_tl , + table-row-sep .dim_set:N = \l_ghsystem_table_line_sep_dim , + table-head-rule .choice: , + table-head-rule / default .code:n = + \tl_set:Nn \l_ghsystem_table_head_rule_tl { \hline } , + table-head-rule / booktabs .code:n = + \ghsystem_booktabs:n { table-head-rule } + \tl_set:Nn \l_ghsystem_table_head_rule_tl { \midrule } , + table-head-rule / none .code:n = + \tl_clear:N \l_ghsystem_table_head_rule_tl , + table-top-head-rule .choice: , + table-top-head-rule / default .code:n = + \tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \hline } , + table-top-head-rule / booktabs .code:n = + \ghsystem_booktabs:n { table-top-head-rule } + \tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \toprule } , + table-top-head-rule / none .code:n = + \tl_clear:N \l_ghsystem_table_top_head_rule_tl , + table-foot-rule .choice: , + table-foot-rule / default .code:n = + \tl_set:Nn \l_ghsystem_table_foot_rule_tl { \hline } , + table-foot-rule / booktabs .code:n = + \ghsystem_booktabs:n { table-foot-rule } + \tl_set:Nn \l_ghsystem_table_foot_rule_tl { \midrule } , + table-foot-rule / none .code:n = + \tl_clear:N \l_ghsystem_table_foot_rule_tl , + table-last-foot-rule .choice: , + table-last-foot-rule / default .code:n = + \tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \hline } , + table-last-foot-rule / booktabs .code:n = + \ghsystem_booktabs:n { table-last-foot-rule } + \tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \bottomrule } , + table-last-foot-rule / none .code:n = + \tl_clear:N \l_ghsystem_table_last_foot_rule_tl , + table-rules .choice: , + table-rules / default .code:n = + \tl_set:Nn \l_ghsystem_table_head_rule_tl { \hline } + \tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \hline } + \tl_set:Nn \l_ghsystem_table_foot_rule_tl { \hline } + \tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \hline } , + table-rules / booktabs .code:n = + \ghsystem_booktabs:n { table-rules } + \tl_set:Nn \l_ghsystem_table_head_rule_tl { \midrule } + \tl_set:Nn \l_ghsystem_table_top_head_rule_tl { \toprule } + \tl_set:Nn \l_ghsystem_table_foot_rule_tl { \midrule } + \tl_set:Nn \l_ghsystem_table_last_foot_rule_tl { \bottomrule } , + table-rules / none .code:n = + \tl_clear:N \l_ghsystem_table_head_rule_tl + \tl_clear:N \l_ghsystem_table_top_head_rule_tl + \tl_clear:N \l_ghsystem_table_foot_rule_tl + \tl_clear:N \l_ghsystem_table_last_foot_rule_tl , + table-caption .tl_set:N = \l_ghsystem_table_caption_tl , + table-caption-short .tl_set:N = \l_ghsystem_table_caption_short_tl , + table-label .tl_set:N = \l_ghsystem_table_label_tl + } + +% --------------------------------------------------------------------------- % +% the main command for getting the H/EUH/P statements +% \ghs{<type>}{<num>} +% \ghs*{<type>}{<num>} : type without number +% +\NewDocumentCommand \ghs { somm } + { + \group_begin: + \IfBooleanF { #1 } { \bool_set_true:N \l_ghsystem_show_number_bool } + \IfNoValueF { #2 } { \keys_set:nn { chemmacros / ghsystem } { #2 } } + \ghsystem_read_args:nn { #3 } { #4 } + \group_end: + } + +\cs_new:Nn \ghsystem_read_args:nn + { + \ghsystem_get_type:nN { #1 } \l_tmpa_tl + \prop_get:cnNTF { l_ghsystem_ \l_tmpa_tl _prop } { #2 } \l_tmpb_tl + { + \ghsystem_is_combination:nn { #1 } { #2 } + \bool_if:NF \l_ghsystem_hide_statement_bool + { \tl_use:N \l_tmpb_tl } + } + { \chemmacros_msg:nnxx { ghsystem } { statements } { #1 } { #2 } } + } + +\cs_new:Nn \ghsystem_get_type:nN + { + \tl_if_eq:nnT { #1 } { h } { \tl_set:Nn #2 { h } } + \tl_if_eq:nnT { #1 } { H } { \tl_set:Nn #2 { h } } + \tl_if_eq:nnT { #1 } { euh } { \tl_set:Nn #2 { euh } } + \tl_if_eq:nnT { #1 } { Euh } { \tl_set:Nn #2 { euh } } + \tl_if_eq:nnT { #1 } { euH } { \tl_set:Nn #2 { euh } } + \tl_if_eq:nnT { #1 } { eUh } { \tl_set:Nn #2 { euh } } + \tl_if_eq:nnT { #1 } { EUh } { \tl_set:Nn #2 { euh } } + \tl_if_eq:nnT { #1 } { EuH } { \tl_set:Nn #2 { euh } } + \tl_if_eq:nnT { #1 } { eUH } { \tl_set:Nn #2 { euh } } + \tl_if_eq:nnT { #1 } { EUH } { \tl_set:Nn #2 { euh } } + \tl_if_eq:nnT { #1 } { p } { \tl_set:Nn #2 { p } } + \tl_if_eq:nnT { #1 } { P } { \tl_set:Nn #2 { p } } + } + +\cs_new:Nn \ghsystem_is_combination:nn + { + \tl_if_in:nnTF { #2 } { + } + { \ghsystem_is_combination_aux_i:w #1,#2 \q_stop } + { \ghsystem_is_combination_aux_ii:w #1,#2 \q_stop } + } + +\cs_new:Npn \ghsystem_is_combination_aux_i:w #1,#2+#3 \q_stop + { + \bool_if:NT \l_ghsystem_show_number_bool + { + \tl_to_uppercase:n { #1 } + \tl_use:N \l_ghsystem_number_space_tl + #2 ~ + ~ + \tl_if_in:nnTF { #3 } { + } + { \ghsystem_is_combination_aux_iii:w #1,#3 \q_stop } + { + \tl_to_uppercase:n { #1 } + \tl_use:N \l_ghsystem_number_space_tl + #3 \bool_if:NF \l_ghsystem_hide_statement_bool { : ~ } + } + } + } + +\cs_new:Npn \ghsystem_is_combination_aux_ii:w #1,#2 \q_stop + { + \bool_if:NT \l_ghsystem_show_number_bool + { + \tl_to_uppercase:n { #1 } + \tl_use:N \l_ghsystem_number_space_tl + #2 \bool_if:NF \l_ghsystem_hide_statement_bool { : ~ } + } + } + +\cs_new:Npn \ghsystem_is_combination_aux_iii:w #1,#2+#3 \q_stop + { + \bool_if:NT \l_ghsystem_show_number_bool + { + \tl_to_uppercase:n { #1 } + \tl_use:N \l_ghsystem_number_space_tl + #2 ~ + ~ + \tl_to_uppercase:n { #1 } + \tl_use:N \l_ghsystem_number_space_tl + #3 \bool_if:NF \l_ghsystem_hide_statement_bool { : ~ } + } + } + +% --------------------------------------------------------------------------- % +% list all statements in a table +% +\NewDocumentCommand \ghslistall { o } + { + \group_begin: + \IfNoValueF { #1 } { \keys_set:nn { chemmacros / ghsystem } { #1 } } + \int_zero:N \l_tmpa_int + \int_zero:N \l_tmpb_int + \prop_map_inline:Nn \l_ghsystem_p_prop { \int_incr:N \l_tmpa_int } + \dim_set_eq:NN \tabulinesep \l_ghsystem_table_line_sep_dim +% \taburowcolors [2] 2{white .. gray!15} + \begin { longtabu } { X[3]X[7,L] } + \caption [ \l_ghsystem_table_caption_short_tl ] + { + \l_ghsystem_table_caption_tl + \exp_args:No \label { \l_ghsystem_table_label_tl } + } \\ + \l_ghsystem_table_top_head_rule_tl + \textbf { \l_ghsystem_identifier_tl } & \textbf { \l_ghsystem_table_text_tl } \\ + \l_ghsystem_table_head_rule_tl + \endfirsthead + \l_ghsystem_table_top_head_rule_tl + \textbf { \l_ghsystem_identifier_tl } & \textbf { \l_ghsystem_table_text_tl } \\ + \l_ghsystem_table_head_rule_tl + \endhead + \l_ghsystem_table_last_foot_rule_tl + \multicolumn{2}{r} { \textit { \l_ghsystem_table_next_page_tl } } + \endfoot + \l_ghsystem_table_foot_rule_tl \multicolumn{2}{r} { } + \endlastfoot + \prop_map_inline:Nn \l_ghsystem_h_prop + { \ghsystem_read_number:nn { H } { ##1 } & ##2 \\ } + \prop_map_inline:Nn \l_ghsystem_euh_prop + { \ghsystem_read_number:nn { EUH } { ##1 } & ##2 \\ } + \prop_map_inline:Nn \l_ghsystem_p_prop + { \ghsystem_read_number:nn { P } { ##1 } & ##2 \\ } + \end { longtabu } + \group_end: + } + +\cs_new:Nn \ghsystem_read_number:nn + { + \tl_if_in:nnTF { #2 } { + } + { \ghsystem_read_number_aux_i:w #1 , #2 \q_stop } + { #1#2 } + } + +\cs_new:Npn \ghsystem_read_number_aux_i:w #1,#2+#3\q_stop + { + #1#2 ~+~ + \tl_if_in:nnTF { #3 } { + } + { \ghsystem_read_number_aux_ii:w #1,#3 \q_stop } + { #1#3 } + } + +\cs_new:Npn \ghsystem_read_number_aux_ii:w #1,#2+#3\q_stop { #1#2 ~+~ #1#3 } + +% --------------------------------------------------------------------------- % +% the picture command +% \ghspic[<options>]{<name>} +% +% test for compilation engine/mode: +\pdftex_if_engine:T { \bool_set_true:N \l_ghsystem_engine_pdftex_bool } +\xetex_if_engine:T { \bool_set_true:N \l_ghsystem_engine_xetex_bool } +\luatex_if_engine:T { \bool_set_true:N \l_ghsystem_engine_luatex_bool } + +\bool_if:NT \l_ghsystem_engine_pdftex_bool + { + \ifpdf + \tl_set:Nn \l_ghsystem_picture_type_tl { png } + \else + \tl_set:Nn \l_ghsystem_picture_type_tl { eps } + \fi + } +\bool_if:NT \l_ghsystem_engine_xetex_bool + { \tl_set:Nn \l_ghsystem_picture_type_tl { png } } +\bool_if:NT \l_ghsystem_engine_luatex_bool + { \tl_set:Nn \l_ghsystem_picture_type_tl { png } } + +% the command: +\NewDocumentCommand \ghspic { om } + { + \group_begin: + \IfNoValueF { #1 } { \keys_set:nn { chemmacros / ghsystem } { #1 } } + \ghsystem_includegraphics:xn + { scale=\fp_to_tl:N \l_ghsystem_picture_scale_fp \l_ghsystem_picture_includegraphics_tl } + { pictures / #2 . \l_ghsystem_picture_type_tl } + \group_end: + } + +\cs_new:Nn \ghsystem_includegraphics:nn + { \includegraphics[#1]{#2} } +\cs_generate_variant:Nn \ghsystem_includegraphics:nn { xn } + +\tex_endinput:D +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +VERSION HISTORY +2012/01/28 - version 3.0 - first published to CTAN with the chemmacros bundle +2012/01/30 - version 3.0a - bugfix in chemormula.sty, renamed ghs => ghsystem + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% TODO: +- add option to switch between `longtable` and `supertabular` for \ghslistall
\ No newline at end of file |