summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r--Master/texmf-dist/tex/latex/chemgreek/chemgreek.sty409
1 files changed, 288 insertions, 121 deletions
diff --git a/Master/texmf-dist/tex/latex/chemgreek/chemgreek.sty b/Master/texmf-dist/tex/latex/chemgreek/chemgreek.sty
index 14e477c3e05..c1fe03e1109 100644
--- a/Master/texmf-dist/tex/latex/chemgreek/chemgreek.sty
+++ b/Master/texmf-dist/tex/latex/chemgreek/chemgreek.sty
@@ -27,8 +27,8 @@
% The Current Maintainer of this work is Clemens Niederberger.
% --------------------------------------------------------------------------
\RequirePackage{expl3,xparse}
-\def\chemgreek@version{0.5a}
-\def\chemgreek@date{2015/03/13}
+\def\chemgreek@version{1.0}
+\def\chemgreek@date{2015/04/09}
\ProvidesExplPackage{chemgreek}{\chemgreek@date}{\chemgreek@version}
{interface for upright greek letters for use in chemistry (CN)}
@@ -55,8 +55,10 @@
{ \prg_return_true: }
{ \prg_return_false: }
}
-\cs_generate_variant:Nn \chemgreek_if_package_loaded:nF { V }
+\cs_generate_variant:Nn \chemgreek_if_package_loaded:nTF { V }
+\cs_generate_variant:Nn \chemgreek_if_package_loaded:nF { V }
+% check if a package has been loaded with a certain option:
\prg_new_protected_conditional:Npnn \chemgreek_if_package_with:nn #1#2 {T,F,TF}
{
\cs_if_exist:cTF {opt@#1.sty}
@@ -68,9 +70,32 @@
{ \prg_return_false: }
}
+% check if a mapping needs a package:
+\tl_new:N \l__chemgreek_mapping_package_tl
+\prg_new_protected_conditional:Npnn \chemgreek_if_mapping_package:n #1 {T,F,TF}
+ {
+ \prop_get:NnN \l__chemgreek_packages_prop {#1}
+ \l__chemgreek_mapping_package_tl
+ \quark_if_no_value:VTF \l__chemgreek_mapping_package_tl
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+
+% check if needed package has been loaded:
+\prg_new_protected_conditional:Npnn \chemgreek_if_mapping_package_loaded:n #1 {T,F,TF}
+ {
+ \chemgreek_if_mapping_package:nTF {#1}
+ {
+ \chemgreek_if_package_loaded:VTF \l__chemgreek_mapping_package_tl
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+ { \prg_return_true: }
+ }
+
% ----------------------------------------------------------------------------
% messages
-\msg_new:nnn { chemgreek } { mapping-not-defined }
+\msg_new:nnn {chemgreek} {mapping-not-defined}
{
You~ chose~ the~ mapping~ `#1'~ \msg_line_context: \c_space_tl which~ has~
apparently~ not~ been~ defined,~ yet.~ If~ this~ is~ due~ to~ a~
@@ -79,7 +104,7 @@
\declarechemgreekmapping .
}
-\msg_new:nnn { chemgreek } { mapping-already-defined }
+\msg_new:nnn {chemgreek} {mapping-already-defined}
{
It~ seems~ you're~ trying~ to~ define~ the~ mapping~ `#1'~
\msg_line_context: .~ However,~ this~ mapping~ does~ already~ exist.~ If~
@@ -87,21 +112,23 @@
via~ \token_to_str:N \renewchemgreekmapping .
}
-\msg_new:nnn { chemgreek } { mapping-active }
+\msg_new:nnn {chemgreek} {mapping-active}
{
The~ mapping~ `#1'~ already~ is~ active~ \msg_line_context: .~ I'm~ doing~
nothing.
}
-\msg_new:nnn { chemgreek } { package-missing }
+\msg_new:nnn {chemgreek} {mapping-activated}
+ { Activating~ mapping~ `#1'~ \msg_line_context: . }
+
+\msg_new:nnn {chemgreek} {package-missing}
{
- You've~ activated~ mapping~ `#1'~ which~ needs~ package~ `#2'~ loaded.~
- However,~ package~ `#2'~ does~ not~ seem~ to~ be~ loaded~
- \msg_line_context: .~ Using~ the~ letter~ macros~ will~ probably~ not~
- work.~ If~ I'm~ mistaken~ then~ ignore~ this~ warning.
+ You're~ trying~ to~ activate~ the~ mapping~ `#1'~ which~ needs~ package~
+ `#2'~ loaded.~ However,~ package~ `#2'~ does~ not~ seem~ to~ be~ loaded~
+ \msg_line_context: .~ I'm~ loading~ the~ `default'~ mapping~ instead.
}
-\msg_new:nnn { chemgreek } { command-dropped }
+\msg_new:nnn {chemgreek} {command-dropped}
{
The~ command~ \token_to_str:N #1 has~ been~ dropped.~ Use~ \token_to_str:N #2
instead~ \msg_line_context: .
@@ -112,10 +139,7 @@
\cs_new_protected:Npn \chemgreek_define_dropped:NN #1#2
{
\cs_new_protected:Npn #1
- {
- \msg_error:nnnn { chemgreek } { command-dropped }
- { #1 } { #2 }
- }
+ { \msg_error:nnnn {chemgreek} {command-dropped} {#1} {#2} }
}
\cs_generate_variant:Nn \chemgreek_define_dropped:NN { cc }
@@ -152,16 +176,19 @@
% ----------------------------------------------------------------------------
% variants of kernel functions:
-\cs_generate_variant:Nn \prop_put:Nnn { cxV }
-\cs_generate_variant:Nn \tl_if_eq:nnTF { V }
+\cs_generate_variant:Nn \prop_put:Nnn { cxV }
+\cs_generate_variant:Nn \prop_get:Nn { cV }
+\cs_generate_variant:Nn \tl_if_eq:nnTF { V }
+\cs_generate_variant:Nn \msg_warning:nnnn { nnnV }
+\cs_generate_variant:Nn \quark_if_no_value:nTF { V }
% ----------------------------------------------------------------------------
% helper function to retrieve upper- and lowercase entries while the mapping
% happens:
\cs_new_protected:Npn \__chemgreek_get_upper_lower:w #1 / #2 \q_stop
{
- \tl_set:Nn \l__chemgreek_tmpa_tl { #1 }
- \tl_set:Nn \l__chemgreek_tmpb_tl { #2 }
+ \tl_set:Nn \l__chemgreek_tmpa_tl {#1}
+ \tl_set:Nn \l__chemgreek_tmpb_tl {#2}
}
% ----------------------------------------------------------------------------
@@ -178,11 +205,11 @@
}
% a conditional for testing if a mapping is active:
-\tl_new:N \l__chemgreek_active_mapping_tl
+\tl_new:N \l_chemgreek_active_mapping_tl
\prg_new_conditional:Npnn \chemgreek_if_mapping_active:n #1 {p,T,F,TF}
{
\tl_if_eq:NcTF
- \l__chemgreek_active_mapping_tl
+ \l_chemgreek_active_mapping_tl
{ c__chemgreek_mapping_#1_tl }
{ \prg_return_true: }
{ \prg_return_false: }
@@ -196,40 +223,33 @@
% the main mapping function:
% #1: mapping-name
% #2: package name
-% #3: mapping-entries
-\cs_new_protected:Npn \chemgreek_new_mapping:nnn #1#2#3
+% #3: mapping entries
+\cs_new_protected:Npn \chemgreek_declare_mapping:nnn #1#2#3
{
- \chemgreek_if_mapping_exists:nTF { #1 }
- { \msg_error:nnn { chemgreek } { mapping-already-defined } { #1 } }
- {
- \prop_new:c { l__chemgreek_uppercase_mapping_#1_prop }
- \prop_new:c { l__chemgreek_lowercase_mapping_#1_prop }
- \tl_const:cn { c__chemgreek_mapping_#1_tl } { #1 }
- \prop_put:Nnn \l__chemgreek_packages_prop { #1 } { #2 }
- \__chemgreek_set_mapping:nn { #1 } { #3 }
- }
+ \prop_if_exist:cF { l__chemgreek_uppercase_mapping_#1_prop }
+ { \prop_new:c { l__chemgreek_uppercase_mapping_#1_prop } }
+ \prop_if_exist:cF { l__chemgreek_lowercase_mapping_#1_prop }
+ { \prop_new:c { l__chemgreek_lowercase_mapping_#1_prop } }
+ \tl_if_exist:cF { c__chemgreek_mapping_#1_tl }
+ { \tl_const:cn { c__chemgreek_mapping_#1_tl } {#1} }
+ \tl_if_blank:nTF {#2}
+ { \prop_remove:Nn \l__chemgreek_packages_prop {#1} }
+ { \prop_put:Nnn \l__chemgreek_packages_prop {#1} {#2} }
+ \__chemgreek_set_mapping:nn {#1} {#3}
}
-\cs_new_protected:Npn \chemgreek_renew_mapping:nnn #1#2#3
+\cs_new_protected:Npn \chemgreek_new_mapping:nnn #1#2#3
{
- \chemgreek_if_mapping_exists:nTF { #1 }
- {
- \prop_put:Nnn \l__chemgreek_packages_prop { #1 } { #2 }
- \__chemgreek_set_mapping:nn { #1 } { #3 }
- }
- { \msg_error:nnn { chemgreek } { mapping-not-defined } { #1 } }
+ \chemgreek_if_mapping_exists:nTF {#1}
+ { \msg_error:nnn {chemgreek} {mapping-already-defined} {#1} }
+ { \chemgreek_declare_mapping:nnn {#1} {#2} {#3} }
}
-\cs_new_protected:Npn \chemgreek_declare_mapping:nnn #1#2#3
+\cs_new_protected:Npn \chemgreek_renew_mapping:nnn #1#2#3
{
- \chemgreek_if_mapping_exists:nF { #1 }
- {
- \prop_new:c { l__chemgreek_uppercase_mapping_#1_prop }
- \prop_new:c { l__chemgreek_lowercase_mapping_#1_prop }
- \tl_const:cn { c__chemgreek_mapping_#1_tl } { #1 }
- }
- \prop_put:Nnn \l__chemgreek_packages_prop { #1 } { #2 }
- \__chemgreek_set_mapping:nn { #1 } { #3 }
+ \chemgreek_if_mapping_exists:nTF {#1}
+ { \chemgreek_declare_mapping:nnn {#1} {#2} {#3} }
+ { \msg_error:nnn {chemgreek} {mapping-not-defined} {#1} }
}
\cs_new_protected:Npn \__chemgreek_set_mapping:nn #1#2
@@ -237,7 +257,7 @@
\prop_clear:c { l__chemgreek_lowercase_mapping_#1_prop }
\prop_clear:c { l__chemgreek_uppercase_mapping_#1_prop }
\int_zero:N \l__chemgreek_tmpa_int
- \clist_map_inline:nn { #2 }
+ \clist_map_inline:nn {#2}
{
\int_incr:N \l__chemgreek_tmpa_int
\__chemgreek_get_upper_lower:w ##1 \q_stop
@@ -250,16 +270,78 @@
}
}
+% aliasing mappings:
+% #1: new mapping
+% #2: existing mapping
+\cs_new_protected:Npn \chemgreek_new_mapping_alias:nn #1#2
+ {
+ \chemgreek_if_mapping_exists:nTF {#1}
+ { \msg_error:nnn {chemgreek} {mapping-already-defined} {#1} }
+ {
+ \chemgreek_if_mapping_exists:nTF {#2}
+ { \chemgreek_declare_mapping_alias:nn {#1} {#2} }
+ { \msg_error:nnn {chemgreek} {mapping-not-defined} {#2} }
+ }
+ }
+
+\cs_new_protected:Npn \chemgreek_renew_mapping_alias:nn #1#2
+ {
+ \chemgreek_if_mapping_exists:nTF {#1}
+ {
+ \chemgreek_if_mapping_exists:nTF {#2}
+ { \chemgreek_declare_mapping_alias:nn {#1} {#2} }
+ { \msg_error:nnn {chemgreek} {mapping-not-defined} {#2} }
+ }
+ { \msg_error:nnn {chemgreek} {mapping-not-defined} {#1} }
+ }
+
+\cs_new_protected:Npn \chemgreek_declare_mapping_alias:nn #1#2
+ {
+ \chemgreek_if_mapping_exists:nT {#2}
+ {
+ \prop_if_exist:cF { l__chemgreek_uppercase_mapping_#1_prop }
+ { \prop_new:c { l__chemgreek_uppercase_mapping_#1_prop } }
+ \prop_if_exist:cF { l__chemgreek_lowercase_mapping_#1_prop }
+ { \prop_new:c { l__chemgreek_lowercase_mapping_#1_prop } }
+ \prop_get:NnNT \l__chemgreek_packages_prop {#2} \l__chemgreek_tmpa_tl
+ { \prop_put:NnV \l__chemgreek_packages_prop {#1} \l__chemgreek_tmpa_tl }
+ \prop_put:Nnn \l__chemgreek_packages_prop {#1} {#2}
+ \tl_map_inline:Nn \c__chemgreek_alphabet_tl
+ {
+ \prop_put:cnx { l__chemgreek_uppercase_mapping_#1_prop } {##1}
+ { \prop_get:cn { l__chemgreek_uppercase_mapping_#2_prop } {##1} }
+ \prop_put:cnx { l__chemgreek_lowercase_mapping_#1_prop } {##1}
+ { \prop_get:cn { l__chemgreek_lowercase_mapping_#2_prop } {##1} }
+ }
+ }
+ }
+
+% ----------------------------------------------------------------------------
% the user commands:
+
+% #1: package name (optional)
+% #2: mapping-name
+% #3: mapping entries
\NewDocumentCommand \newchemgreekmapping { O{}mm }
- { \chemgreek_new_mapping:nn { #2 } { #1 } { #3 } }
+ { \chemgreek_new_mapping:nnn {#2} {#1} {#3} }
\NewDocumentCommand \renewchemgreekmapping { O{}mm }
- { \chemgreek_renew_mapping:nnn { #2 } { #1 } { #3 } }
+ { \chemgreek_renew_mapping:nnn {#2} {#1} {#3} }
\NewDocumentCommand \declarechemgreekmapping { O{}mm }
- { \chemgreek_declare_mapping:nnn { #2 } { #1 } { #3 } }
+ { \chemgreek_declare_mapping:nnn {#2} {#1} {#3} }
+% #1: new mapping
+% #2: existing mapping
+\NewDocumentCommand \newchemgreekmappingalias { mm }
+ { \chemgreek_new_mapping_alias:nn {#1} {#2} }
+
+\NewDocumentCommand \renewchemgreekmappingalias { mm }
+ { \chemgreek_renew_mapping_alias:nn {#1} {#2} }
+
+\NewDocumentCommand \declarechemgreekmappingalias { mm }
+ { \chemgreek_declare_mapping_alias:nn {#1} {#2} }
+
% ----------------------------------------------------------------------------
% a function to selectively change specific entries in a mapping:
@@ -274,106 +356,144 @@
% #4: entry
\cs_new_protected:Npn \chemgreek_change:nnnn #1#2#3#4
{
- \chemgreek_if_mapping_exists:nTF { #1 }
+ \chemgreek_if_mapping_exists:nTF {#1}
{
\prop_put:cnn { l__chemgreek_#2 case_mapping_#1_prop }
- { #3 }
- { #4 }
+ {#3}
+ {#4}
\prop_put:Nnn \l__chemgreek_changed_mappings_prop
- { #1 }
- { #1 }
+ {#1}
+ {#1}
}
- { \msg_error:nnn { chemgreek } { mapping-not-defined } { #1 } }
+ { \msg_error:nnn {chemgreek} {mapping-not-defined} {#1} }
}
% the user command:
\NewDocumentCommand \changechemgreeksymbol { mmmm }
- { \chemgreek_change:nnnn { #1 } { #2 } { #3 } { #4 } }
+ { \chemgreek_change:nnnn {#1} {#2} {#3} {#4} }
% ----------------------------------------------------------------------------
+\cs_new_protected:Npn \chemgreek_load_mapping_package:n #1
+ {
+ \chemgreek_if_mapping_package:nT {#1}
+ { \exp_args:NV \RequirePackage \l__chemgreek_mapping_package_tl }
+ }
+
% a function to activate a mapping:
% #1: mapping-name
-% TODO: error if needed package has not been loaded
\cs_new_protected:Npn \chemgreek_activate_mapping:n #1
{
- \chemgreek_if_mapping_exists:nTF { #1 }
+ \chemgreek_if_mapping_exists:nTF {#1}
{
\bool_if:nTF
{
- ( \chemgreek_if_mapping_active_p:n { #1 } )
+ ( \chemgreek_if_mapping_active_p:n {#1} )
&&
- !( \prop_if_in_p:Nn \l__chemgreek_changed_mappings_prop { #1 } )
+ !( \prop_if_in_p:Nn \l__chemgreek_changed_mappings_prop {#1} )
}
- { \msg_info:nnn { chemgreek } { mapping-active } { #1 } }
+ { \msg_info:nnn {chemgreek} {mapping-active} {#1} }
{
- \tl_set:Nn \l__chemgreek_active_mapping_tl { #1 }
- \prop_get:NnN \l__chemgreek_packages_prop { #1 }
- \l__chemgreek_tmpa_tl
- \tl_if_blank:VF \l__chemgreek_tmpa_tl
- {
- \chemgreek_if_package_loaded:VF \l__chemgreek_tmpa_tl
- {
- \msg_warning:nnxx { chemgreek } { package-missing }
- { #1 }
- { \l__chemgreek_tmpa_tl }
- }
- }
- \tl_map_inline:Nn \c__chemgreek_alphabet_tl
+ \chemgreek_if_mapping_package_loaded:nTF {#1}
+ { \__chemgreek_activate_mapping:n {#1} }
{
- \cs_set_protected:cpx
- {
- chem
- \str_upper_case:f { \tl_head:n {##1} }
- \str_lower_case:f { \tl_tail:n {##1} }
- }
- { \prop_get:cn { l__chemgreek_uppercase_mapping_#1_prop } { ##1 } }
- \cs_set_protected:cpx { chem \str_lower_case:f {##1} }
- { \prop_get:cn { l__chemgreek_lowercase_mapping_#1_prop } { ##1 } }
- }
+ \msg_warning:nnnV {chemgreek} {package-missing}
+ {#1}
+ \l__chemgreek_mapping_package_tl
+ \__chemgreek_activate_mapping:n {default}
+ }
\prop_get:NnNT \l__chemgreek_changed_mappings_prop
- { #1 }
+ {#1}
\l__chemgreek_tmpa_tl
- { \prop_remove:Nn \l__chemgreek_changed_mappings_prop { #1 } }
+ { \prop_remove:Nn \l__chemgreek_changed_mappings_prop {#1} }
}
}
- { \msg_error:nnn { chemgreek } { mapping-not-defined } { #1 } }
+ { \msg_error:nnn {chemgreek} {mapping-not-defined} {#1} }
}
+\cs_generate_variant:Nn \chemgreek_activate_mapping:n { V }
+
+\cs_new_protected:Npn \__chemgreek_activate_mapping:n #1
+ {
+ \tl_set:Nn \l_chemgreek_active_mapping_tl {#1}
+ \tl_map_inline:Nn \c__chemgreek_alphabet_tl
+ {
+ \cs_set_protected:cpx
+ {
+ chem
+ \str_upper_case:f { \tl_head:n {##1} }
+ \str_lower_case:f { \tl_tail:n {##1} }
+ }
+ { \prop_get:cn { l__chemgreek_uppercase_mapping_#1_prop } {##1} }
+ \cs_set_eq:cc
+ {
+ chemgreek_
+ \str_upper_case:f { \tl_head:n {##1} }
+ \str_lower_case:f { \tl_tail:n {##1} }
+ :
+ }
+ {
+ chem
+ \str_upper_case:f { \tl_head:n {##1} }
+ \str_lower_case:f { \tl_tail:n {##1} }
+ }
+ \cs_set_protected:cpx { chem \str_lower_case:f {##1} }
+ { \prop_get:cn { l__chemgreek_lowercase_mapping_#1_prop } {##1} }
+ \cs_set_eq:cc
+ { chemgreek_ \str_lower_case:f {##1} : }
+ { chem \str_lower_case:f {##1} }
+ }
+ \msg_info:nnn {chemgreek} {mapping-activated} {#1}
+ }
+
+% #1: mapping name
+% #2: symbol name
+\cs_new_protected:Npn \chemgreek_get_from_mapping:nn #1#2
+ {
+ \tl_set:Nx \l__chemgreek_tmpa_tl
+ {
+ \str_upper_case:f { \tl_head:n {#2} }
+ \str_lower_case:f { \tl_tail:n {#2} }
+ }
+ \str_if_eq:nVTF {#2} \l__chemgreek_tmpa_tl
+ {
+ \tl_set:Nx \l__chemgreek_tmpa_tl { \str_lower_case:f {#2} }
+ \prop_get:cV
+ { l__chemgreek_uppercase_mapping_#1_prop }
+ \l__chemgreek_tmpa_tl
+ }
+ { \prop_get:cn { l__chemgreek_lowercase_mapping_#1_prop } {#2} }
+ }
+
+\NewDocumentCommand \chemgreekmappingsymbol { mm }
+ { \chemgreek_get_from_mapping:nn {#1} {#2} }
% user command that also loads the needed package:
% #1: load package
% #2: mapping-name
\NewDocumentCommand \activatechemgreekmapping { sm }
{
- \IfBooleanT { #1 }
- {
- \prop_get:NnN \l__chemgreek_packages_prop
- { #2 }
- \l__chemgreek_tmpa_tl
- \tl_if_blank:VF \l__chemgreek_tmpa_tl
- { \exp_args:No \RequirePackage { \l__chemgreek_tmpa_tl } }
- }
- \chemgreek_activate_mapping:n { #2 }
+ \IfBooleanT {#1} { \chemgreek_load_mapping_package:n {#2} }
+ \chemgreek_activate_mapping:n {#2}
}
\@onlypreamble\activatechemgreekmapping
% user command that activates a new mapping without loading the package:
\NewDocumentCommand \selectchemgreekmapping { m }
- { \chemgreek_activate_mapping:n { #1 } }
+ { \chemgreek_activate_mapping:n {#1} }
% ----------------------------------------------------------------------------
% debugging commands:
\cs_new_protected:Npn \chemgreek_print_mapping:n #1
{
\int_gzero:N \g__chemgreek_tmpa_int
- \begin { tabular } { llcc }
+ \begin {tabular} {llcc}
pos & name & lower & upper \\
\tl_map_inline:Nn \c__chemgreek_alphabet_tl
{
\int_gincr:N \g__chemgreek_tmpa_int
\int_use:N \g__chemgreek_tmpa_int . &
##1 &
- \prop_get:cn { l__chemgreek_lowercase_mapping_#1_prop } { ##1 } &
- \prop_get:cn { l__chemgreek_uppercase_mapping_#1_prop } { ##1 } \\
+ \prop_get:cn { l__chemgreek_lowercase_mapping_#1_prop } {##1} &
+ \prop_get:cn { l__chemgreek_uppercase_mapping_#1_prop } {##1} \\
}
\end{tabular}
}
@@ -394,7 +514,7 @@
{
. \c_space_tl \c_space_tl \c_space_tl \c_space_tl \c_space_tl
\str_lower_case:f {##1} ~ => ~
- \prop_get:cn { l__chemgreek_lowercase_mapping_#1_prop } { ##1 }
+ \prop_get:cn { l__chemgreek_lowercase_mapping_#1_prop } {##1}
}
\iow_log:x
{
@@ -402,7 +522,7 @@
\str_upper_case:f { \tl_head:n {##1} }
\str_lower_case:f { \tl_tail:n {##1} }
\c_space_tl => ~
- \prop_get:cn { l__chemgreek_uppercase_mapping_#1_prop } { ##1 }
+ \prop_get:cn { l__chemgreek_uppercase_mapping_#1_prop } {##1}
}
}
\iow_log:n { ................................................. }
@@ -437,7 +557,7 @@
{
\tl_map_inline:Nn \c__chemgreek_alphabet_tl
{
- \chemgreek_drop_symbol:n { ##1 }
+ \chemgreek_drop_symbol:n {##1}
\chemgreek_drop_symbol:n
{
\str_upper_case:f { \tl_head:n {##1} }
@@ -453,7 +573,7 @@
% of \int_to_alph:n
\cs_new:Npn \chemgreek_int_to_greek:n #1
{
- \int_to_symbols:nnn { #1 } { 24 }
+ \int_to_symbols:nnn {#1} {24}
{
{ 1 } { \chemalpha }
{ 2 } { \chembeta }
@@ -484,7 +604,7 @@
\cs_new:Npn \chemgreek_int_to_Greek:n #1
{
- \int_to_symbols:nnn { #1 } { 24 }
+ \int_to_symbols:nnn {#1} {24}
{
{ 1 } { \chemAlpha }
{ 2 } { \chemBeta }
@@ -516,7 +636,7 @@
% ----------------------------------------------------------------------------
% predefine some mappings
% default:
-\chemgreek_new_mapping:nnn { default } { }
+\chemgreek_new_mapping:nnn {default} { }
{
\ensuremath{\alpha} / \ensuremath{\mathrm{A}} , % 1
\ensuremath{\beta} / \ensuremath{\mathrm{B}} , % 2
@@ -545,7 +665,7 @@
}
% default-variant:
-\chemgreek_new_mapping:nnn { var-default } { }
+\chemgreek_new_mapping:nnn {var-default} { }
{
\ensuremath{\alpha} / \ensuremath{\mathrm{A}} , % 1
\ensuremath{\beta} / \ensuremath{\mathrm{B}} , % 2
@@ -574,7 +694,7 @@
}
% mathdesign:
-\chemgreek_new_mapping:nnn { mathdesign } { mathdesign }
+\chemgreek_new_mapping:nnn {mathdesign} {mathdesign}
{
\ensuremath{\alphaup} / \ensuremath{\mathrm{A}} , % 1
\ensuremath{\betaup} / \ensuremath{\mathrm{B}} , % 2
@@ -603,7 +723,7 @@
}
% textgreek:
-\chemgreek_new_mapping:nnn { textgreek } { textgreek }
+\chemgreek_new_mapping:nnn {textgreek} {textgreek}
{
\mbox{\textalpha} / \mbox{\textAlpha} , % 1
\mbox{\textbeta} / \mbox{\textBeta} , % 2
@@ -632,7 +752,7 @@
}
% upgreek:
-\chemgreek_new_mapping:nnn { upgreek } { upgreek }
+\chemgreek_new_mapping:nnn {upgreek} {upgreek}
{
\ensuremath{\upalpha} / \ensuremath{\mathrm{A}} , % 1
\ensuremath{\upbeta} / \ensuremath{\mathrm{B}} , % 2
@@ -661,7 +781,7 @@
}
% kpfonts:
-\chemgreek_new_mapping:nnn { kpfonts } { kpfonts }
+\chemgreek_new_mapping:nnn {kpfonts} {kpfonts}
{
\ensuremath{\alphaup} / \ensuremath{\mathrm{A}} , % 1
\ensuremath{\betaup} / \ensuremath{\mathrm{B}} , % 2
@@ -690,7 +810,7 @@
}
% newtx:
-\chemgreek_new_mapping:nnn { newtx } { newtxmath }
+\chemgreek_new_mapping:nnn {newtx} {newtxmath}
{
\ensuremath{\upalpha} / \ensuremath{\mathrm{A}} , % 1
\ensuremath{\upbeta} / \ensuremath{\mathrm{B}} , % 2
@@ -733,7 +853,7 @@
{ \ensuremath { \use:c { other #1 } } }
}
-\chemgreek_new_mapping:nnn { fourier } { fourier }
+\chemgreek_new_mapping:nnn {fourier} {fourier}
{
\__chemgreek_lfourier:n {alpha} / \ensuremath{\mathrm{A}} , % 1
\__chemgreek_lfourier:n {beta} / \ensuremath{\mathrm{B}} , % 2
@@ -762,7 +882,7 @@
}
% textalpha:
-\chemgreek_new_mapping:nnn { textalpha } { textalpha }
+\chemgreek_new_mapping:nnn {textalpha} {textalpha}
{
\mbox{\textalpha} / \mbox{\textAlpha} , % 1
\mbox{\textbeta} / \mbox{\textBeta} , % 2
@@ -791,7 +911,7 @@
}
% textgreek:
-\chemgreek_new_mapping:nnn { fontspec } { fontspec }
+\chemgreek_new_mapping:nnn {fontspec} {fontspec}
{
\mbox{\textalpha} / \mbox{\textAlpha} , % 1
\mbox{\textbeta} / \mbox{\textBeta} , % 2
@@ -819,9 +939,32 @@
\mbox{\textomega} / \mbox{\textOmega} % 24
}
-% activate default mapping
-\chemgreek_activate_mapping:n { default }
+% ----------------------------------------------------------------------------
+% default activating of a mapping if a corresponding package has been loaded.
+
+\cs_new_protected:Npn \chemgreek_choose_mapping:
+ {
+ \tl_if_blank:VT \l_chemgreek_active_mapping_tl
+ {
+ \int_zero:N \l__chemgreek_tmpa_int
+ \prop_map_inline:Nn \l__chemgreek_packages_prop
+ {
+ \chemgreek_if_package_loaded:nT {##2}
+ {
+ \int_incr:N \l__chemgreek_tmpa_int
+ \tl_set:Nn \l__chemgreek_tmpa_tl {##1}
+ }
+ }
+ \int_compare:nTF { \l__chemgreek_tmpa_int = 1 }
+ { \chemgreek_activate_mapping:V \l__chemgreek_tmpa_tl }
+ { \chemgreek_activate_mapping:n {default} }
+ }
+ }
+
+\AtBeginDocument { \chemgreek_choose_mapping: }
+% ----------------------------------------------------------------------------
+% Greek letters in bookmarks:
\AtBeginDocument
{
\chemgreek_if_package_with:nnT {hyperref} {unicode}
@@ -843,7 +986,20 @@
\str_upper_case:f { \tl_head:n {#1} }
\str_lower_case:f { \tl_tail:n {#1} }
}
+ \cs_set_eq:cc
+ {
+ chemgreek_
+ \str_upper_case:f { \tl_head:n {#1} }
+ \str_lower_case:f { \tl_tail:n {#1} }
+ :
+ }
+ {
+ text
+ \str_upper_case:f { \tl_head:n {#1} }
+ \str_lower_case:f { \tl_tail:n {#1} }
+ }
\cs_set_eq:cc { chem #1 } { text #1 }
+ \cs_set_eq:cc { chemgreek_ #1 : } { text #1 }
}
}
}
@@ -882,6 +1038,17 @@ HISTORY:
2015/03/13 - v0.5a - adapt to expl3's new case changing functions
- change status of \Chem... macros from deprecated to
dropped
+2015/04/09 - v1.0 - if a mapping is activated that needs a package and the
+ package is missing the mapping falls back to `default'
+ - if exactly one package for one of the mappings has been
+ loaded the corresponding mapping is activated at begin
+ document
+ - expl3 versions of the letter macros (\chemgreek_alpha: ,
+ \chemgreek_Alpha: , ...)
+ - \chemgreek_get_from_mapping:nn
+ - \chemgreek_declare_mapping_alias:nn ,
+ \chemgreek_new_mapping_alias:nn ,
+ \chemgreek_renew_mapping_alias:nn
TODO: