summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/chemmacros/ghsystem.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/chemmacros/ghsystem.sty')
-rw-r--r--Master/texmf-dist/tex/latex/chemmacros/ghsystem.sty436
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