summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-10-04 03:01:11 +0000
committerNorbert Preining <norbert@preining.info>2020-10-04 03:01:11 +0000
commit62f3109ec0fcb4a3309966bdcb9e4f307ff35dd2 (patch)
tree60447da370a4394b5fd095c64a5eebde30425c04 /macros/latex
parent0e644e6805342838052f46e6af93f81644d0390b (diff)
CTAN sync 202010040301
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/semantex/semantex.pdfbin356833 -> 357405 bytes
-rw-r--r--macros/latex/contrib/semantex/semantex.sty510
-rw-r--r--macros/latex/contrib/semantex/semantex.tex272
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.lua11
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.sty2
-rw-r--r--macros/latex/contrib/semtex/semtex.pdfbin61300 -> 63446 bytes
-rw-r--r--macros/latex/contrib/semtex/semtex.sty39
-rw-r--r--macros/latex/contrib/semtex/semtex.tex20
-rw-r--r--macros/latex/required/babel/base/README.md17
-rw-r--r--macros/latex/required/babel/base/babel.dtx505
-rw-r--r--macros/latex/required/babel/base/babel.ins2
-rw-r--r--macros/latex/required/babel/base/babel.pdfbin803286 -> 810453 bytes
-rw-r--r--macros/latex/required/babel/base/bbcompat.dtx2
13 files changed, 771 insertions, 609 deletions
diff --git a/macros/latex/contrib/semantex/semantex.pdf b/macros/latex/contrib/semantex/semantex.pdf
index 7ccf0be800..009f3033c9 100644
--- a/macros/latex/contrib/semantex/semantex.pdf
+++ b/macros/latex/contrib/semantex/semantex.pdf
Binary files differ
diff --git a/macros/latex/contrib/semantex/semantex.sty b/macros/latex/contrib/semantex/semantex.sty
index dcbf1f9193..82cf996f5a 100644
--- a/macros/latex/contrib/semantex/semantex.sty
+++ b/macros/latex/contrib/semantex/semantex.sty
@@ -1,5 +1,5 @@
-\RequirePackage{xparse,l3keys2e,leftindex}
-\ProvidesExplPackage{semantex}{2020/09/27}{0.44}{}
+\RequirePackage{xparse,l3keys2e,leftindex,semtex}
+\ProvidesExplPackage{semantex}{2020/10/03}{0.45}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
@@ -136,98 +136,6 @@
\cs_set_eq:NN\SemantexRecordObject\semantex_write_object_declaration_to_semtex_file:n
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% THE FOLLOWING SECTION IS IDENTICAL TO THE semtex PACKAGE
-%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-% These are some essential commands that are needed for bullets and parentheses,
-% and they are the only ones that will not be stripped by running the
-% stripsemantex algorithm. Therefore, they are also available as a standalone
-% package, called "semtex". This name is meant to suggest "stripped SemanTeX",
-% and at the same time, semtex is the name of a plastic explosive, suggesting
-% "blown-up SemanTeX".
-% (Mathematicians are not famous for the quality of their humour.)
-
-% Bullets:
-
-\box_if_exist:NF \g__semantex_bullet_box
-{
- \box_new:N \g__semantex_bullet_box
- \hbox_set:Nn \g__semantex_bullet_box { $\cdot$ }
- \box_scale:Nnn \g__semantex_bullet_box {1.2} {1.2}
- \tl_set:Nn\g_semantex_bullet
- {
- \box_move_up:nn{-0.25ex}{\box_use:N \g__semantex_bullet_box}
- }
-
- \tl_set:Nn\g_semantex_double_bullet{\g_semantex_bullet \g_semantex_bullet}
-
- \tl_set_eq:NN\SemantexBullet \g_semantex_bullet
-
- \tl_set_eq:NN \SemantexDoubleBullet \g_semantex_double_bullet
-}
-
-% Parentheses:
-
-\cs_set:Npn\SemantexLeft { \mathopen{}\mathclose\bgroup\left }
-
-\cs_set:Npn\SemantexRight { \aftergroup\egroup\right }
-
-\DeclareDocumentCommand\SemantexDelimiterSize { }
-{
- \semantex_write_original_source_to_semtex_file:n { \SemantexDelimiterSize }
- \semantex_write_output_to_semtex_file_V:N \l_semantex_delimiter_size_temp_tl
- \l_semantex_delimiter_size_temp_tl
-}
-
-\DeclareDocumentCommand\RecordSemantexDelimiterSize { }
-{
- \semantex_write_output_to_semtex_file_V:N \l_semantex_delimiter_size_temp_tl
-}
-
-\DeclareDocumentCommand\SemantexDelimiterSizeNoRecord { }
-{
- \l_semantex_delimiter_size_temp_tl
-}
-
-\DeclareDocumentCommand\SemantexMathOpen { mm }
-{
- \group_begin:
- \tl_set:Nn\l_semantex_delimiter_size_temp_tl { #1 }
- \str_if_eq:nnF { #2 } { . } { \mathopen #1 #2 }
-}
-
-\DeclareDocumentCommand\SemantexMathClose { mm }
-{
- \str_if_eq:nnF { #2 } { . } { \mathclose #1 #2 }
- \group_end:
-}
-
-\DeclareDocumentCommand\SemantexMathOpenAuto { m }
-{
- \group_begin:
- \tl_set:Nn\l_semantex_delimiter_size_temp_tl { \middle }
- \SemantexLeft #1
-}
-
-\DeclareDocumentCommand\SemantexMathCloseAuto { m }
-{
- \SemantexRight #1
- \group_end:
-}
-
-\DeclareDocumentCommand\SemantexMathOpenNoPar { }
-{
- \group_begin:
- \tl_clear:N\l_semantex_delimiter_size_temp_tl
-}
-
-\DeclareDocumentCommand\SemantexMathCloseNoPar { }
-{
- \group_end:
-}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -1355,7 +1263,7 @@
\use:c { __semantex_new_object_of_\semantex_class_to_register:N #1:Nw }
}
{
- \msg_error:nnnn { semantex } { created_object_of_unknown_class } { #1 }
+ \msg_error:nnn { semantex } { created_object_of_unknown_class } { #1 }
}
}
@@ -1375,7 +1283,7 @@
}
}
{
- \msg_error:nnnn { semantex } { used_unknown_class } { #1 }
+ \msg_error:nnn { semantex } { used_unknown_class } { #1 }
}
}
@@ -1795,6 +1703,60 @@
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\DeclareDocumentCommand\SemantexDelimiterSize { }
+{
+ \semantex_write_original_source_to_semtex_file:n { \SemantexDelimiterSize }
+ \semantex_write_output_to_semtex_file_V:N \l_semantex_delimiter_size_temp_tl
+ \l_semantex_delimiter_size_temp_tl
+}
+
+\DeclareDocumentCommand\RecordSemantexDelimiterSize { }
+{
+ \semantex_write_output_to_semtex_file_V:N \l_semantex_delimiter_size_temp_tl
+}
+
+\DeclareDocumentCommand\SemantexDelimiterSizeNoRecord { }
+{
+ \l_semantex_delimiter_size_temp_tl
+}
+
+\DeclareDocumentCommand\SemantexMathOpen { mm }
+{
+ \group_begin:
+ \tl_set:Nn\l_semantex_delimiter_size_temp_tl { #1 }
+ \str_if_eq:nnF { #2 } { . } { \mathopen #1 #2 }
+}
+
+\DeclareDocumentCommand\SemantexMathClose { mm }
+{
+ \str_if_eq:nnF { #2 } { . } { \mathclose #1 #2 }
+ \group_end:
+}
+
+\DeclareDocumentCommand\SemantexMathOpenAuto { m }
+{
+ \group_begin:
+ \tl_set:Nn\l_semantex_delimiter_size_temp_tl { \middle }
+ \SemantexLeft #1
+}
+
+\DeclareDocumentCommand\SemantexMathCloseAuto { m }
+{
+ \SemantexRight #1
+ \group_end:
+}
+
+\DeclareDocumentCommand\SemantexMathOpenNoPar { }
+{
+ \group_begin:
+ \tl_clear:N\l_semantex_delimiter_size_temp_tl
+}
+
+\DeclareDocumentCommand\SemantexMathCloseNoPar { }
+{
+ \group_end:
+}
+
\cs_new_protected:Npn \semantex_parentheses_store:nN#1#2
{
\semantex_data_tl_get_store:nnN { #1 } { parsize } \l__semantex_parentheses_store_temp_tl
@@ -2444,17 +2406,6 @@
}
}
-\cs_new_protected:Npn \semantex_data_clone_object:nn#1#2
-{
- \semantex_object_if_exist:NTF { #2 }
- {
- \tl_set:cx { g__semantex_data_tl_#1_parent } { \semantex_object_to_register:N #2 }
- }
- {
- \semantex_msg_error:nnnn { #1 } { object_not_found } { clone } { #2 }
- }
-}
-
% COMMANDS FOR HANDLING DATA CONSISTING OF TOKEN LISTS
\cs_new:Npn \semantex_data_tl_get:nn#1#2
@@ -2476,7 +2427,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_msg_error:nnn { #3 } { data_tl_not_found } { #2 }
+ \semantex_msg_error:nnx { #3 } { data_tl_not_found } { #2 }
}
{
\__semantex_data_tl_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -2505,7 +2456,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_msg_error:nnn { #3 } { data_tl_not_found } { #2 }
+ \semantex_msg_error:nnx { #3 } { data_tl_not_found } { #2 }
}
{
\__semantex_data_tl_get_exp_not_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -2536,7 +2487,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \msg_error:nnn { #4 } { data_tl_not_found } { #2 }
+ \semantex_msg_error:nnx { #4 } { data_tl_not_found } { #2 }
}
{
\__semantex_data_tl_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -2642,13 +2593,13 @@
\cs_new:Npn \semantex_data_int_get:nn#1#2{
% #1 = name of object
- % #2 = the intuence to get
+ % #2 = the integer to get
\__semantex_data_int_get_auxiliary:nnn { #1 } { #2 } { #1 }
}
\cs_new:Npn \__semantex_data_int_get_auxiliary:nnn#1#2#3{
% #1 = name of object
- % #2 = the intuence to get
+ % #2 = the integer to get
% #3 = stores the original register, for error message purposes
\bool_if_exist:cTF { g__semantex_data_int_#1_#2_bool_if_provided }
{
@@ -2659,7 +2610,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_msg_error:nnn { #3 } { data_int_not_found } { #2 }
+ \semantex_msg_error:nnx { #3 } { data_int_not_found } { #2 }
}
{
\__semantex_data_int_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -2669,7 +2620,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_msg_error:nnn { #3 } { data_int_not_found } { #2 }
+ \semantex_msg_error:nnx { #3 } { data_int_not_found } { #2 }
}
{
\__semantex_data_int_get_auxiliary:fnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 }
@@ -2682,14 +2633,14 @@
\cs_new_protected:Npn \semantex_data_int_get_store:nnN#1#2#3{
% #1 = name of object
- % #2 = the intuence to get
+ % #2 = the integer to get
% #3 = the command to store it in
\__semantex_data_int_get_store_auxiliary:nnNn { #1 } { #2 } #3 { #1 }
}
\cs_new_protected:Npn\__semantex_data_int_get_store_auxiliary:nnNn#1#2#3#4{
% #1 = name of object
- % #2 = the intuence to get
+ % #2 = the integer to get
% #3 = the command to store it in
\bool_if_exist:cTF { g__semantex_data_int_#1_#2_bool_if_provided }
{
@@ -2700,7 +2651,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_msg_error:nnn { #4 } { data_int_not_found } { #2 }
+ \semantex_msg_error:nnx { #4 } { data_int_not_found } { #2 }
}
{
\__semantex_data_int_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -2710,7 +2661,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \semantex_msg_error:nnn { #4 } { data_int_not_found } { #2 }
+ \semantex_msg_error:nnx { #4 } { data_int_not_found } { #2 }
}
{
\__semantex_data_int_get_store_auxiliary:fnNn { \semantex_data_parent_get:n { #1 } } { #2 } #3 { #4 }
@@ -2823,10 +2774,22 @@
\cs_new:Npn\semantex_data_bool_get:nnTF#1#2#3#4
{
- % #1 = name of the object
+ % #1 = name of the register
% #2 = boolean to get
% #3 = if true
% #4 = if false
+ \__semantex_data_bool_get_auxiliary:nnTFn { #1 } { #2 } { #3 } { #4 } { #1 }
+}
+
+\cs_new:Npn\__semantex_data_bool_get_auxiliary:nnTFn#1#2#3#4#5
+{
+ % We keep the somewhat unusual order of the arguments
+ % to be consistent with how these commands look elsewhere.
+ % #1 = name of the register
+ % #2 = boolean to get
+ % #3 = if true
+ % #4 = if false
+ % #5 = name of the original register, to be used for error messaging
\bool_if_exist:cTF { g__semantex_data_bool_#1_if_#2_bool_if_provided }
{
\bool_if:cTF { g__semantex_data_bool_#1_if_#2_bool_if_provided }
@@ -2839,22 +2802,24 @@
#4
}
{
- \semantex_data_bool_get:fnTF { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 }
+ \__semantex_data_bool_get_auxiliary:fnTFn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 } { #5 }
}
}
}
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- #4
+ \semantex_msg_error:nnx { #5 } { data_bool_not_found } { #2 }
}
{
- \semantex_data_bool_get:fnTF { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 }
+ \__semantex_data_bool_get_auxiliary:fnTFn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 } { #5 }
}
}
}
-\cs_generate_variant:Nn \semantex_data_bool_get:nnTF { fnTF, nnT }
+\cs_generate_variant:Nn \__semantex_data_bool_get_auxiliary:nnTFn { fnTFn }
+
+\cs_generate_variant:Nn \semantex_data_bool_get:nnTF { nnT }
\cs_new:Npn\semantex_data_bool_get:nnF#1#2#3
{
@@ -3112,7 +3077,7 @@
{
\str_if_eq:nnTF { #1 } { class_SemantexBaseObject }
{
- \msg_error:nnn { #1 } { arg_valuekey_not_found } { #2 }
+ \semantex_msg_error:nnn { #1 } { arg_valuekey_not_found } { #2 }
}
{
\__semantex_arg_valuekey:fnnn { \semantex_data_parent_get:n { #1 } } { #2 } { #3 } { #4 }
@@ -5313,6 +5278,8 @@
} { #3 }
}
+\cs_generate_variant:Nn \semantex_msg_error:nnn { nnx }
+
\cs_new_protected:Npn \semantex_msg_error:nnnn#1#2#3#4
{
\semantex_error_output_format:xN { #1 } \l__semantex_msg_error_nnnnn_temp_tl
@@ -5687,7 +5654,6 @@
{parent}{ execute={ \semantex_data_parent_set:nn { ##1 } { #1 } } },
{class}{ execute={ \semantex_data_class_set:nn { ##1 } { #1 } } },
{copy}{ execute={ \semantex_data_copy_object:nn { ##1 } { #1 } } },
- {clone}{ execute={ \semantex_data_clone_object:nn { ##1 } { #1 } } },
{texclass}{ execute={ \semantex_data_tl_set:nnn { ##1 } { texclass } { #1 } } },
{symbol}{
execute={
@@ -5749,8 +5715,8 @@
},
},
},
- {default}{si={#1}},
- {degreedefault}{sd={#1}},
+ {default}{sepi={#1}},
+ {degreedefault}{sepd={#1}},
{arg}{ execute={ \semantex_arg_singlekeys_set:nn { ##1 } { #1 } } },
{*withothersep}{
d*withothersep={#1},
@@ -5773,10 +5739,10 @@
{argreturn}{ execute={ \semantex_arg_return:n { ##1 } } },
{parse}{ execute={ \semantex_parse:n { ##1 } } },
{clearcommand}{ execute={ \semantex_data_seq_clear:nn { ##1 } { commands_sequence } } },
- {...}{sidots},
- {-}{sislot},
- {*}{sd*},
- {**}{sd**},
+ {...}{sepidots},
+ {-}{sepislot},
+ {*}{sepd*},
+ {**}{sepd**},
},
% The "spar" routine:
definekeys={
@@ -5806,12 +5772,12 @@
definekeys={
{argdots}{setargkeys={...}},
{arg...}{setargkeys={dots}},
- {cargdots}{setargkeys={cdots}},
- {carg...}{setargkeys={c...}},
+ {commaargdots}{setargkeys={commadots}},
+ {commaarg...}{setargkeys={comma...}},
{argslot}{setargkeys={slot}},
{arg-}{setargkeys={-}},
- {cargslot}{setargkeys={cslot}},
- {carg-}{setargkeys={c-}},
+ {commaargslot}{setargkeys={commaslot}},
+ {commaarg-}{setargkeys={comma-}},
{cleararg}{ execute={
\semantex_data_tl_clear:nn { ##1 } { arg }
\semantex_data_int_clear:nn { ##1 } { numberofarguments }
@@ -5908,8 +5874,8 @@
},
},
},
- {sarg}{setargkeys={s={#1}}},
- {carg}{setargkeys={c={#1}}},
+ {separg}{setargkeys={sep={#1}}},
+ {commaarg}{setargkeys={comma={#1}}},
{argdotswithothersep}{setargkeys={dotswithothersep={#1}}},
{arg...withothersep}{setargkeys={dotswithothersep={#1}}},
{argslotwithothersep}{setargkeys={slotwithothersep={#1}}},
@@ -5990,16 +5956,16 @@
definekeys={
{upperslot}{ setkeysx={ upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } } },
{upper-}{upperslot},
- {supperslot}{ setkeysx={ supper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } } },
- {supper-}{supperslot},
- {cupperslot}{ setkeysx={ cupper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } } },
- {cupper-}{cupperslot},
+ {sepupperslot}{ setkeysx={ sepupper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } } },
+ {sepupper-}{sepupperslot},
+ {commaupperslot}{ setkeysx={ commaupper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperslot } } },
+ {commaupper-}{commaupperslot},
{upperdots}{ setkeysx={ upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } } },
{upper...}{upperdots},
- {supperdots}{ setkeysx={ supper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } } },
- {supper...}{supperdots},
- {cupperdots}{ setkeysx={ cupper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } } },
- {cupper...}{cupperdots},
+ {sepupperdots}{ setkeysx={ sepupper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } } },
+ {sepupper...}{sepupperdots},
+ {commaupperdots}{ setkeysx={ commaupper=\semantex_data_tl_get_exp_not:nn { ##1 } { upperdots } } },
+ {commaupper...}{commaupperdots},
{clearupper}{
execute={
\semantex_data_tl_clear:nn { ##1 } { upper }
@@ -6015,10 +5981,10 @@
},
{upper*}{upper=\SemantexBullet},
{upper**}{upper=\SemantexDoubleBullet},
- {supper*}{supper=\SemantexBullet},
- {supper**}{supper=\SemantexDoubleBullet},
- {cupper*}{cupper=\SemantexBullet},
- {cupper**}{cupper=\SemantexDoubleBullet},
+ {sepupper*}{sepupper=\SemantexBullet},
+ {sepupper**}{sepupper=\SemantexDoubleBullet},
+ {commaupper*}{commaupper=\SemantexBullet},
+ {commaupper**}{commaupper=\SemantexDoubleBullet},
},
definekeys[1]={
{upper}{
@@ -6031,7 +5997,7 @@
}
},
},
- {supper}{
+ {sepupper}{
execute={
\tl_if_blank:nF { #1 }
{
@@ -6049,7 +6015,7 @@
}
},
},
- {cupper}{
+ {commaupper}{
execute={
\tl_if_blank:nF{#1}
{
@@ -6175,16 +6141,16 @@
definekeys={
{lowerslot}{ setkeysx={ lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } } },
{lower-}{lowerslot},
- {slowerslot}{ setkeysx={ slower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } } },
- {slower-}{slowerslot},
- {clowerslot}{ setkeysx={ clower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } } },
- {clower-}{clowerslot},
+ {seplowerslot}{ setkeysx={ seplower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } } },
+ {seplower-}{seplowerslot},
+ {commalowerslot}{ setkeysx={ commalower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerslot } } },
+ {commalower-}{commalowerslot},
{lowerdots}{ setkeysx={ lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } } },
{lower...}{lowerdots},
- {slowerdots}{ setkeysx={ slower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } } },
- {slower...}{slowerdots},
- {clowerdots}{ setkeysx={ clower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } } },
- {clower...}{clowerdots},
+ {seplowerdots}{ setkeysx={ seplower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } } },
+ {seplower...}{seplowerdots},
+ {commalowerdots}{ setkeysx={ commalower=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerdots } } },
+ {commalower...}{commalowerdots},
{clearlower}{
execute={
\semantex_data_tl_clear:nn { ##1 } { lower }
@@ -6200,10 +6166,10 @@
},
{lower*}{lower=\SemantexBullet},
{lower**}{lower=\SemantexDoubleBullet},
- {slower*}{slower=\SemantexBullet},
- {slower**}{slower=\SemantexDoubleBullet},
- {clower*}{clower=\SemantexBullet},
- {clower**}{clower=\SemantexDoubleBullet},
+ {seplower*}{seplower=\SemantexBullet},
+ {seplower**}{seplower=\SemantexDoubleBullet},
+ {commalower*}{commalower=\SemantexBullet},
+ {commalower**}{commalower=\SemantexDoubleBullet},
},
definekeys[1]={
{lower}{
@@ -6215,7 +6181,7 @@
}
},
},
- {slower}{
+ {seplower}{
execute={
\tl_if_blank:nF { #1 }
{
@@ -6233,7 +6199,7 @@
}
},
},
- {clower}{
+ {commalower}{
execute={
\tl_if_blank:nF{#1}
{
@@ -6359,16 +6325,16 @@
definekeys={
{upperleftslot}{ setkeysx={ upperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } } },
{upperleft-}{upperleftslot},
- {supperleftslot}{ setkeysx={ supperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } } },
- {supperleft-}{supperleftslot},
- {cupperleftslot}{ setkeysx={ cupperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } } },
- {cupperleft-}{cupperleftslot},
+ {sepupperleftslot}{ setkeysx={ sepupperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } } },
+ {sepupperleft-}{sepupperleftslot},
+ {commaupperleftslot}{ setkeysx={ commaupperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftslot } } },
+ {commaupperleft-}{commaupperleftslot},
{upperleftdots}{ setkeysx={ upperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } } },
{upperleft...}{upperleftdots},
- {supperleftdots}{ setkeysx={ supperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } } },
- {supperleft...}{supperleftdots},
- {cupperleftdots}{ setkeysx={ cupperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } } },
- {cupperleft...}{cupperleftdots},
+ {sepupperleftdots}{ setkeysx={ sepupperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } } },
+ {sepupperleft...}{sepupperleftdots},
+ {commaupperleftdots}{ setkeysx={ commaupperleft=\semantex_data_tl_get_exp_not:nn { ##1 } { upperleftdots } } },
+ {commaupperleft...}{commaupperleftdots},
{clearupperleft}{
execute={
\semantex_data_tl_clear:nn { ##1 } { upperleft }
@@ -6384,10 +6350,10 @@
},
{upperleft*}{upperleft=\SemantexBullet},
{upperleft**}{upperleft=\SemantexDoubleBullet},
- {supperleft*}{supperleft=\SemantexBullet},
- {supperleft**}{supperleft=\SemantexDoubleBullet},
- {cupperleft*}{cupperleft=\SemantexBullet},
- {cupperleft**}{cupperleft=\SemantexDoubleBullet},
+ {sepupperleft*}{sepupperleft=\SemantexBullet},
+ {sepupperleft**}{sepupperleft=\SemantexDoubleBullet},
+ {commaupperleft*}{commaupperleft=\SemantexBullet},
+ {commaupperleft**}{commaupperleft=\SemantexDoubleBullet},
},
definekeys[1]={
{upperleft}{
@@ -6399,7 +6365,7 @@
}
},
},
- {supperleft}{
+ {sepupperleft}{
execute={
\tl_if_blank:nF { #1 }
{
@@ -6417,7 +6383,7 @@
}
},
},
- {cupperleft}{
+ {commaupperleft}{
execute={
\tl_if_blank:nF{#1}
{
@@ -6543,16 +6509,16 @@
definekeys={
{lowerleftslot}{ setkeysx={ lowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } } },
{lowerleft-}{lowerleftslot},
- {slowerleftslot}{ setkeysx={ slowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } } },
- {slowerleft-}{slowerleftslot},
- {clowerleftslot}{ setkeysx={ clowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } } },
- {clowerleft-}{clowerleftslot},
+ {seplowerleftslot}{ setkeysx={ seplowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } } },
+ {seplowerleft-}{seplowerleftslot},
+ {commalowerleftslot}{ setkeysx={ commalowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftslot } } },
+ {commalowerleft-}{commalowerleftslot},
{lowerleftdots}{ setkeysx={ lowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } } },
{lowerleft...}{lowerleftdots},
- {slowerleftdots}{ setkeysx={ slowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } } },
- {slowerleft...}{slowerleftdots},
- {clowerleftdots}{ setkeysx={ clowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } } },
- {clowerleft...}{clowerleftdots},
+ {seplowerleftdots}{ setkeysx={ seplowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } } },
+ {seplowerleft...}{seplowerleftdots},
+ {commalowerleftdots}{ setkeysx={ commalowerleft=\semantex_data_tl_get_exp_not:nn { ##1 } { lowerleftdots } } },
+ {commalowerleft...}{commalowerleftdots},
{clearlowerleft}{
execute={
\semantex_data_tl_clear:nn { ##1 } { lowerleft }
@@ -6568,10 +6534,10 @@
},
{lowerleft*}{lowerleft=\SemantexBullet},
{lowerleft**}{lowerleft=\SemantexDoubleBullet},
- {slowerleft*}{slowerleft=\SemantexBullet},
- {slowerleft**}{slowerleft=\SemantexDoubleBullet},
- {clowerleft*}{clowerleft=\SemantexBullet},
- {clowerleft**}{clowerleft=\SemantexDoubleBullet},
+ {seplowerleft*}{seplowerleft=\SemantexBullet},
+ {seplowerleft**}{seplowerleft=\SemantexDoubleBullet},
+ {commalowerleft*}{commalowerleft=\SemantexBullet},
+ {commalowerleft**}{commalowerleft=\SemantexDoubleBullet},
},
definekeys[1]={
{lowerleft}{
@@ -6583,7 +6549,7 @@
}
},
},
- {slowerleft}{
+ {seplowerleft}{
execute={
\tl_if_blank:nF { #1 }
{
@@ -6601,7 +6567,7 @@
}
},
},
- {clowerleft}{
+ {commalowerleft}{
execute={
\tl_if_blank:nF{#1}
{
@@ -6726,36 +6692,36 @@
{ lowerslot },
},
{d-}{dslot},
- {sdslot}{
+ {sepdslot}{
boolifTF={uppergrading}
- { supperslot }
- { slowerslot },
+ { sepupperslot }
+ { seplowerslot },
},
- {sd-}{sdslot},
- {cdslot}{
+ {sepd-}{sepdslot},
+ {commadslot}{
boolifTF={uppergrading}
- { cupperslot }
- { clowerslot },
+ { commaupperslot }
+ { commalowerslot },
},
- {cd-}{cdslot},
+ {commad-}{commadslot},
{ddots}{
boolifTF={uppergrading}
{ upperdots }
{ lowerdots },
},
{d...}{ddots},
- {sddots}{
+ {sepddots}{
boolifTF={uppergrading}
- { supperdots }
- { slowerdots },
+ { sepupperdots }
+ { seplowerdots },
},
- {sd...}{sddots},
- {cddots}{
+ {sepd...}{sepddots},
+ {commaddots}{
boolifTF={uppergrading}
- { cupperdots }
- { clowerdots },
+ { commaupperdots }
+ { commalowerdots },
},
- {cd...}{cddots},
+ {commad...}{commaddots},
{cleard}{
boolifTF={uppergrading}
{ clearupper }
@@ -6781,25 +6747,25 @@
{ upper** }
{ lower** },
},
- {sd*}{
+ {sepd*}{
boolifTF={uppergrading}
- { supper* }
- { slower* },
+ { sepupper* }
+ { seplower* },
},
- {sd**}{
+ {sepd**}{
boolifTF={uppergrading}
- { supper** }
- { slower** },
+ { sepupper** }
+ { seplower** },
},
- {cd*}{
+ {commad*}{
boolifTF={uppergrading}
- { cupper* }
- { clower* },
+ { commaupper* }
+ { commalower* },
},
- {cd**}{
+ {commad**}{
boolifTF={uppergrading}
- { cupper** }
- { clower** },
+ { commaupper** }
+ { commalower** },
},
},
definekeys[1]={
@@ -6810,18 +6776,18 @@
{ \semantex_valuekey:nnn { ##1 } { lower } { #1 } }
},
},
- {sd}{
+ {sepd}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { uppergrading }
- { \semantex_valuekey:nnn { ##1 } { supper } { #1 } }
- { \semantex_valuekey:nnn { ##1 } { slower } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { sepupper } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { seplower } { #1 } }
},
},
- {cd}{
+ {commad}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { uppergrading }
- { \semantex_valuekey:nnn { ##1 } { cupper } { #1 } }
- { \semantex_valuekey:nnn { ##1 } { clower } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { commaupper } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { commalower } { #1 } }
},
},
{pred}{
@@ -6959,36 +6925,36 @@
{ upperslot },
},
{i-}{islot},
- {sislot}{
+ {sepislot}{
boolifTF={uppergrading}
- { slowerslot }
- { supperslot },
+ { seplowerslot }
+ { sepupperslot },
},
- {si-}{sislot},
- {cislot}{
+ {sepi-}{sepislot},
+ {commaislot}{
boolifTF={uppergrading}
- { clowerslot }
- { cupperslot },
+ { commalowerslot }
+ { commaupperslot },
},
- {ci-}{cislot},
+ {commai-}{commaislot},
{idots}{
boolifTF={uppergrading}
{ lowerdots }
{ upperdots },
},
{i...}{idots},
- {sidots}{
+ {sepidots}{
boolifTF={uppergrading}
- { slowerdots }
- { supperdots },
+ { seplowerdots }
+ { sepupperdots },
},
- {si...}{sidots},
- {cidots}{
+ {sepi...}{sepidots},
+ {commaidots}{
boolifTF={uppergrading}
- { clowerdots }
- { cupperdots },
+ { commalowerdots }
+ { commaupperdots },
},
- {ci...}{cidots},
+ {commai...}{commaidots},
{cleari}{
boolifTF={uppergrading}
{ clearlower }
@@ -7014,25 +6980,25 @@
{ lower** }
{ upper** },
},
- {si*}{
+ {sepi*}{
boolifTF={uppergrading}
- { slower* }
- { supper* },
+ { seplower* }
+ { sepupper* },
},
- {si**}{
+ {sepi**}{
boolifTF={uppergrading}
- { slower** }
- { supper** },
+ { seplower** }
+ { sepupper** },
},
- {ci*}{
+ {commai*}{
boolifTF={uppergrading}
- { clower* }
- { cupper* },
+ { commalower* }
+ { commaupper* },
},
- {ci**}{
+ {commai**}{
boolifTF={uppergrading}
- { clower** }
- { cupper** },
+ { commalower** }
+ { commaupper** },
},
},
definekeys[1]={
@@ -7043,18 +7009,18 @@
{ \semantex_valuekey:nnn { ##1 } { upper } { #1 } }
},
},
- {si}{
+ {sepi}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { uppergrading }
- { \semantex_valuekey:nnn { ##1 } { slower } { #1 } }
- { \semantex_valuekey:nnn { ##1 } { supper } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { seplower } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { sepupper } { #1 } }
},
},
- {ci}{
+ {commai}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { uppergrading }
- { \semantex_valuekey:nnn { ##1 } { clower } { #1 } }
- { \semantex_valuekey:nnn { ##1 } { cupper } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { commalower } { #1 } }
+ { \semantex_valuekey:nnn { ##1 } { commaupper } { #1 } }
},
},
{prei}{
@@ -7204,10 +7170,10 @@
{argwithoutkeyvalset}{ execute={ \semantex_arg_without_keyval:nn { ##1 } { #1 } } },
{setargwithoutkeyvalx}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
{argwithoutkeyvalsetx}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
- {default}{s={#1}},
+ {default}{sep={#1}},
{-withothersep}{slotwithothersep={#1}},
{...withothersep}{dotswithothersep={#1}},
- {s}{
+ {sep}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { nextargwithsep }
{
@@ -7224,7 +7190,7 @@
\semantex_data_bool_set_true:nn { ##1 } { nextargwithsep }
}
},
- {c}{
+ {comma}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { nextargwithsep }
{
@@ -7259,40 +7225,40 @@
defineargkeys={
{dots}{
execute={
- \semantex_arg_valuekey:nnx { ##1 } { s }
+ \semantex_arg_valuekey:nnx { ##1 } { sep }
{
\semantex_data_tl_get_exp_not:nn { ##1 } { argdots }
}
},
},
{...}{dots},
- {cdots}{
+ {commadots}{
execute={
- \semantex_arg_valuekey:nnx { ##1 } { c }
+ \semantex_arg_valuekey:nnx { ##1 } { comma }
{
\semantex_data_tl_get_exp_not:nn { ##1 } { argdots }
}
},
},
- {c...}{cdots},
+ {comma...}{commadots},
{slot}{
execute={
- \semantex_arg_valuekey:nnx { ##1 } { s }
+ \semantex_arg_valuekey:nnx { ##1 } { sep }
{
\semantex_data_tl_get_exp_not:nn { ##1 } { argslot }
}
},
},
{-}{slot},
- {cslot}{
+ {commaslot}{
execute={
- \semantex_arg_valuekey:nnx { ##1 } { c }
+ \semantex_arg_valuekey:nnx { ##1 } { comma }
{
\semantex_data_tl_get_exp_not:nn { ##1 } { argslot }
}
},
},
- {c-}{cslot},
+ {comma-}{commaslot},
},
defineargkeys[2]={
{othersep}{
diff --git a/macros/latex/contrib/semantex/semantex.tex b/macros/latex/contrib/semantex/semantex.tex
index e692b55010..c1a4a97f73 100644
--- a/macros/latex/contrib/semantex/semantex.tex
+++ b/macros/latex/contrib/semantex/semantex.tex
@@ -38,7 +38,7 @@
\usepackage[nameinlink]{cleveref}
-\title{Seman\!\TeX: semantic, keyval-based mathematics (v0.44)}
+\title{Seman\!\TeX: semantic, keyval-based mathematics (v0.45)}
\date{\today}
\author{Sebastian Ørsted (\href{mailto:sorsted@gmail.com}{sorsted@gmail.com})}
@@ -73,6 +73,8 @@
\newcommand\mylst{\lstinline[mathescape]}
+\let\at=@
+
\def\<#1\>{\textrm{\textlangle\textit{#1}\textrangle}}
\def\usercommand\<#1\>{\textrm{\textbackslash\textlangle\textit{#1}\textrangle}}
@@ -247,10 +249,11 @@ Still, suggestions, ideas, and bug reports are more than welcome!
},
definekeys[1]={
{der}{upper={ (#1) } },
- {res}{ rightreturn ,symbolputright ={|}, lower ={#1} },
- {stalk}{clower={#1}},
- % "clower" means "comma lower", i.e. lower index
- % separated from any previous lower index by a comma
+ {res}{ rightreturn ,symbolputright={|}, lower={#1} },
+ {stalk}{seplower={#1}},
+ % "seplower" means "separator + lower", i.e. lower index
+ % separated from any previous lower index by a separator,
+ % which by default is a comma
},
}
@@ -331,9 +334,10 @@ $ \vh[inverseimage]{\sheafF}[spar,stalk=\vp]
},
definekeys[1]={ % we define keys taking 1 value
{der}{upper={(#1)}},
- {stalk}{clower={#1}},
- % "clower" means "comma lower", i.e. lower index
- % separated from any previous lower index by a comma
+ {stalk}{seplower={#1}},
+ % "seplower" means "separator + lower", i.e. lower index
+ % separated from any previous lower index by a separator,
+ % which by default is a comma
{res}{ rightreturn, symbolputright={|}, lower={#1} },
},
}
@@ -429,15 +433,14 @@ $\vf[lower=3]$
In fact, there are quite a few keys for manipulating upper and lower indices.
Right now, apart from \lstinline!upper! and~\lstinline!lower!,
we shall only need a couple more:
-\lstinline!supper! and~\lstinline!slower! mean
-\enquote{separator~+~upper} and \enquote{separator~+~lower}\footnote{Yes, I have noticed that the words unfortunately have other meanings already. But the notation has to be brief and consistent, and I have decided convention that \mylst!s$\<anything\>$! means \<anything\>, possibly separated from previous \<anything\> by a separator.}.
+\lstinline!sepupper! and~\lstinline!seplower! mean
+\enquote{separator~+~upper} and \enquote{separator~+~lower}.
These are like \lstinline!upper! and~\lstinline!lower!,
but if there already was an upper or lower index,
the new index will be separated from the old one by a separator.
By default, this separator is a comma.
There are also two more commands,
-\lstinline!cupper! and~\lstinline!clower!,
-which mean \enquote{comma~+~upper} and~\enquote{comma~+~lower}.
+\lstinline!commaupper! and~\lstinline!commalower!.
These will use a comma as separator, even if you have changed the
default separator.
@@ -627,16 +630,16 @@ ever need~\lstinline!definekeys[1]!. So you can do
\begingroup
\SetupClass\MyVar{
definekeys={
- {key1}{ upper=3, slower=7 },
- {key2}{ lower=6, supper=4 },
+ {key1}{ upper=3, seplower=7 },
+ {key2}{ lower=6, sepupper=4 },
},
definekeys[1]={
- {key3}{ supper=\{#1\} },
- {key4}{ slower=(#1) },
+ {key3}{ sepupper=\{#1\} },
+ {key4}{ seplower=(#1) },
},
definekeys[2]={
- {key5}{ supper=3+#1, slower=7-#2 },
- {key6}{ slower=6\cdot#1, supper=4/#2 },
+ {key5}{ sepupper=3+#1, seplower=7-#2 },
+ {key6}{ seplower=6\cdot#1, sepupper=4/#2 },
},
}
Let us see these rather ridiculous keys in action:
@@ -961,7 +964,7 @@ Let us look at some other algebraic operations that we can control via \semantex
% we use \lbrack and \rbrack rather than [ and ] since in some
% cases (using constructions like in @{\itshape\cref{ch:the_class_command}}@),
% the [...] might be interpreted as an optional argument.
- {localizeprime}{slower={#1}},
+ {localizeprime}{seplower={#1}},
% for localization at a prime ideal
},
}
@@ -991,7 +994,7 @@ Let us look at some other algebraic operations that we can control via \semantex
% for notation like R^{\otimes n}
{localize}{symbolputright={ \lbrack #1^{-1} \rbrack }},
% localization at a multiplicative subset
- {localizeprime}{slower={#1}},
+ {localizeprime}{seplower={#1}},
% for localization at a prime ideal
},
}
@@ -1379,9 +1382,10 @@ However, we might need to stalk, sheafify, take dual sheaves, and twist sheaves.
\begin{lstlisting}
\SetupClass\MyVar{
definekeys[1]={
- {stalk}{clower={#1}},
- % "clower" means "comma lower", i.e. lower index
- % separated from any previous lower index by a comma
+ {stalk}{seplower={#1}},
+ % "seplower" means "separator + lower", i.e. lower index
+ % separated from any previous lower index by a separator,
+ % which by default is a comma
{sheaftwist}{return,symbolputright={(#1)}},
},
definekeys={
@@ -1392,9 +1396,10 @@ However, we might need to stalk, sheafify, take dual sheaves, and twist sheaves.
\end{lstlisting}
\SetupClass\MyVar{
definekeys[1]={
- {stalk}{clower={#1}},
- % "clower" means "comma lower", i.e. lower index
- % separated from any previous lower index by a comma
+ {stalk}{seplower={#1}},
+ % "seplower" means "separator + lower", i.e. lower index
+ % separated from any previous lower index by a separator,
+ % which by default is a comma
{sheaftwist}{return,symbolputright={(#1)}},
},
definekeys={
@@ -1475,12 +1480,16 @@ You can adjust this by writing
We already learned about the keys \lstinline!upper! and~\lstinline!lower!,
-as well as their friends \lstinline!supper!, \lstinline!slower!, \lstinline!cupper!, \lstinline!clower!, etc.
+as well as their friends \lstinline!sepupper!, \lstinline!seplower!, \lstinline!commaupper!, \lstinline!commalower!, etc.
There also exist \enquote{relative} versions of these keys that print the index either as an upper index or as a lower index, depending on your preference for cohomological or homological grading. They are called
\begin{center}
- \lstinline!d!
+ \lstinline!d!,
+ \lstinline!sepd!,
+ \lstinline!commad!
\qquad\qquad and\qquad\qquad
- \lstinline!i!
+ \lstinline!i!,
+ \lstinline!sepi!,
+ \lstinline!commai!,
\end{center}
and consequently, we shall refer to the indices
they correspond to as the \enquote{\lstinline!d!-index} and the \enquote{\lstinline!i!-index}.
@@ -1691,10 +1700,10 @@ $\Hom[Rder]{\vX,\vY}$
If you get tired of having to write \lstinline!\Hom[Rder]! all
the time, you can create a shortcut:
\begin{lstlisting}
-\NewObject\MyVar\RHom[clone=\Hom,Rder]
+\NewObject\MyVar\RHom[copy=\Hom,Rder]
\end{lstlisting}
-\NewObject\MyVar\RHom[clone=\Hom,Rder]
-The \lstinline!clone! key is like the \lstinline!parent! key,
+\NewObject\MyVar\RHom[copy=\Hom,Rder]
+The \lstinline!copy! key is like the \lstinline!parent! key,
except it allows you to inherit the settings from an \emph{object} rather than a \emph{class}. Notice that we did not specify a symbol; the symbol argument is optional, and in this case, it was unnecessary, as the symbol was inherited from~\lstinline!\Hom!. Let us see it in action:
\begin{LTXexample}
$\RHom{\vX,\vY}$
@@ -1795,10 +1804,10 @@ Our solution for left indices in \semantex is based directly on the one
from \pack{leftindex}. However, it works much better if you use \semantex
than if you just used \pack{leftindex} alone, due to the ability to centrally control all your notation. This allows you to choose height and slanting phantoms once and for all in the preamble and never have to worry about it in your document body.
-Just like we have keys like \lstinline!upper!, \lstinline!lower!, \lstinline!supper!, \lstinline!slower!, \lstinline!cupper!, \lstinline!clower!,
+Just like we have keys like \lstinline!upper!, \lstinline!lower!, \lstinline!sepupper!, \lstinline!seplower!, \lstinline!commaupper!, \lstinline!commalower!,
etc., we have a similar collection of keys for the left
indices:
-\lstinline!upperleft!, \lstinline!lowerleft!, \lstinline!supperleft!, \lstinline!slowerleft!, \lstinline!cupperleft!, \lstinline!clowerleft!:
+\lstinline!upperleft!, \lstinline!lowerleft!, \lstinline!sepupperleft!, \lstinline!seplowerleft!, \lstinline!commaupperleft!, \lstinline!commalowerleft!:
\begin{LTXexample}
$ \vf[upperleft=*] $,
$ \vGamma[upperleft=*] $,
@@ -2017,10 +2026,10 @@ One can also use delimiters for other, less obvious purposes, like calculus diff
\NewDelimiterClass\CalculusDifferential[
parent=\MyVar,
defineargkeys[1]={
- {default}{s={d\!#1}},
+ {default}{sep={d\!#1}},
% default is the key that is automatically applied by the
% system to anything you write in the argument that is
- % not recognized as an argument key. The s key
+ % not recognized as an argument key. The sep key
% is a key that prints the value of the key with the
% standard argument separator in front.
},
@@ -2044,10 +2053,10 @@ One can also use delimiters for other, less obvious purposes, like calculus diff
\NewDelimiterClass\CalculusDifferential[
parent=\MyVar,
defineargkeys[1]={
- {default}{s={d\!#1}},
+ {default}{sep={d\!#1}},
% default is the key that is automatically applied by the
% system to anything you write in the argument that is
- % not recognized as an argument key. The s key
+ % not recognized as an argument key. The sep key
% is a key that prints the value of the key with the
% standard argument separator in front.
},
@@ -2298,7 +2307,7 @@ of other situations, like
ifblankF={\SemantexDataGetExpNot{field}}
{
setargkeysx={
- s={\SemantexDataGetExpNot{field}},
+ sep={\SemantexDataGetExpNot{field}},
},
},
},
@@ -2325,7 +2334,7 @@ of other situations, like
{
setargkeysx={
% Set the argument keys, but fully expand their values first
- s={\SemantexDataGetExpNot{field}},
+ sep={\SemantexDataGetExpNot{field}},
},
},
},
@@ -2343,7 +2352,7 @@ of other situations, like
ifblankF={\SemantexDataGetExpNot{space}}
{
setargkeysx={
- s=\SemantexDataGetExpNot{space},
+ sep=\SemantexDataGetExpNot{space},
},
},
ifblankF={\SemantexDataGetExpNot{coefficient}}
@@ -2394,7 +2403,7 @@ We can in principle do the following:
\SetupObject\GL{
dataclear=parseoptions,
definekeys[1]={
- {arg}{ setargkeys={s=#1} }
+ {arg}{ setargkeys={sep=#1} }
},
}
\begin{lstlisting}
@@ -2441,7 +2450,7 @@ To set up the notation from above, we do the following:
{
setargkeysx={
% Set the argument keys, but fully expand their values first
- s={\SemantexDataGetExpNot{field}},
+ sep={\SemantexDataGetExpNot{field}},
},
},
},
@@ -2504,7 +2513,7 @@ We accomplish this by the following:
ifblankF={\SemantexDataGetExpNot{field}}
{
setargkeysx={
- s={\SemantexDataGetExpNot{field}},
+ sep={\SemantexDataGetExpNot{field}},
},
},
},
@@ -2536,7 +2545,7 @@ and show how to set up a syntax like the below:
ifblankF={\SemantexDataGetExpNot{space}}
{
setargkeysx={
- s=\SemantexDataGetExpNot{space},
+ sep=\SemantexDataGetExpNot{space},
},
},
ifblankF={\SemantexDataGetExpNot{coefficient}}
@@ -2567,7 +2576,7 @@ Let us look at a more complicated example: Let us create a command for partial d
setisep=\,,
definekeys[1]={
{default}{
- si={\partial #1},
+ sepi={\partial #1},
},
{raise}{
strifeqTF={#1}{true}
@@ -2660,7 +2669,7 @@ Let us look at a more complicated example: Let us create a command for partial d
setisep=\,,
definekeys[1]={
{default}{
- si={\partial #1},
+ sepi={\partial #1},
},
{raise}{
strifeqTF={#1}{true}
@@ -2896,12 +2905,15 @@ add the following lines to your document right before~\lstinline!\begin{document
\aftergroup\egroup\right
}
-\providecommand\SemantexBullet{%
- \raisebox{-0.25ex}{\scalebox{1.2}{$\cdot$}}%
+\makeatletter
+\DeclareRobustCommand\SemantexBullet{%
+ \mathord{\mathpalette\SemantexBullet@\at@{0.5}}%
}
-\providecommand\SemantexDoubleBullet{%
- \SemantexBullet\SemantexBullet
+\newcommand\SemantexBullet@\at@[2]{%
+ \vcenter{\hbox{\scalebox{#2}{$\m@\at@th#1\bullet$}}}%
}
+\DeclareRobustCommand\SemantexDoubleBullet{\SemantexBullet \SemantexBullet}
+\makeatother
\end{lstlisting}
The package \pack{leftindex} is loaded to take care of any
possible left indices. The package~\pack{graphicx}
@@ -3297,10 +3309,9 @@ In the following sections, we include the full list.
Sets the object to have class~\<Class\>.
\item
- \mylst!copy={$\<object\>$}!,
- \mylst!clone={$\<object\>$}!
+ \mylst!copy={$\<object\>$}!
- Sets the object to be a copy (also known as a clone)
+ Sets the object to be a copy
of~\<object\>.
Then \<object\> works as a \enquote{parent object}, and all information
will be inherited from~\<object\> unless modified for the current object.
@@ -3443,7 +3454,7 @@ In the following sections, we include the full list.
This is the key that is applied whenever the
user writes something in the options which is not a key,
e.g.~the~\lstinline!1! in~\lstinline!\vf[1]!.
- By default, this keys has been set to be equal to~\lstinline!si!,
+ By default, this keys has been set to be equal to~\lstinline!sepi!,
but it is meant to be changeable by the user.
\item
@@ -3451,7 +3462,7 @@ In the following sections, we include the full list.
This is the key where the grading goes.
It is the one used by \lstinline!Cohomology! class types.
- By default, this key has been set to be equal to~\lstinline!sd!,
+ By default, this key has been set to be equal to~\lstinline!sepd!,
but it is meant to be changable by the user.
\item
@@ -3756,13 +3767,13 @@ In the following sections, we include the full list.
system will automatically change this when needed.
\item
- \mylst!sarg={$\<value\>$}!
+ \mylst!separg={$\<value\>$}!
Adds \<value\> to the argument, separated from any previous
argument by the default argument separator.
\item
- \mylst!carg={$\<value\>$}!
+ \mylst!commarg={$\<value\>$}!
Adds \<value\> to the argument, separated from any previous
argument by a comma.
@@ -3795,7 +3806,7 @@ In the following sections, we include the full list.
by the standard separator.
\item
- \mylst!cargdots!, \mylst!carg...!
+ \mylst!commargdots!, \mylst!commarg...!
Adds three dots to the argument,
separated from any previous arguments
@@ -3809,7 +3820,7 @@ In the following sections, we include the full list.
by the standard separator.
\item
- \mylst!cargslot!, \mylst!carg-!
+ \mylst!commargslot!, \mylst!commarg-!
Adds a slot to the argument,
separated from any previous arguments
@@ -3842,14 +3853,14 @@ In the following sections, we include the full list.
with no separator from any previous upper index.
\item
- \mylst!supper={$\<value\>$}!
+ \mylst!sepupper={$\<value\>$}!
Adds to the upper index,
separated from any previous upper
index by the default separator.
\item
- \mylst!cupper={$\<value\>$}!
+ \mylst!commaupper={$\<value\>$}!
Adds to the upper index,
separated from any previous upper
@@ -3900,14 +3911,14 @@ In the following sections, we include the full list.
with no separator from any previous upper index.
\item
- \mylst!supper-!, \mylst!supperslot!
+ \mylst!sepupper-!, \mylst!sepupperslot!
Adds a slot to the upper index,
separated from any previous upper
index by the default separator.
\item
- \mylst!cupper-!, \mylst!cupperslot!
+ \mylst!commaupper-!, \mylst!commaupperslot!
Adds a slot to the upper index,
separated from any previous upper
@@ -3934,14 +3945,14 @@ In the following sections, we include the full list.
with no separator from any previous upper index.
\item
- \mylst!supper...!, \mylst!supperdots!
+ \mylst!sepupper...!, \mylst!sepupperdots!
Adds three dots to the upper index,
separated from any previous upper
index by the default separator.
\item
- \mylst!cupper...!, \mylst!cupperdots!
+ \mylst!commaupper...!, \mylst!commaupperdots!
Adds three dots to the upper index,
separated from any previous upper
@@ -3974,28 +3985,28 @@ In the following sections, we include the full list.
with no separator from any previous upper index.
\item
- \mylst!supper*!
+ \mylst!sepupper*!
Adds a bullet to the upper index,
separated from any previous upper
index by the default separator.
\item
- \mylst!supper**!
+ \mylst!sepupper**!
Adds a double bullet to the upper index,
separated from any previous upper
index by the default separator.
\item
- \mylst!cupper*!
+ \mylst!commaupper*!
Adds a bullet to the upper index,
separated from any previous upper
index by a comma.
\item
- \mylst!cupper**!
+ \mylst!commaupper**!
Adds a double bullet to the upper index,
separated from any previous upper
@@ -4041,14 +4052,14 @@ In the following sections, we include the full list.
with no separator from any previous lower index.
\item
- \mylst!slower={$\<value\>$}!
+ \mylst!seplower={$\<value\>$}!
Adds to the lower index,
separated from any previous lower
index by the default separator.
\item
- \mylst!clower={$\<value\>$}!
+ \mylst!commalower={$\<value\>$}!
Adds to the lower index,
separated from any previous lower
@@ -4099,14 +4110,14 @@ In the following sections, we include the full list.
with no separator from any previous lower index.
\item
- \mylst!slower-!, \mylst!slowerslot!
+ \mylst!seplower-!, \mylst!seplowerslot!
Adds a slot to the lower index,
separated from any previous lower
index by the default separator.
\item
- \mylst!clower-!, \mylst!clowerslot!
+ \mylst!commalower-!, \mylst!commalowerslot!
Adds a slot to the lower index,
separated from any previous lower
@@ -4133,14 +4144,14 @@ In the following sections, we include the full list.
with no separator from any previous lower index.
\item
- \mylst!slower...!, \mylst!slowerdots!
+ \mylst!seplower...!, \mylst!seplowerdots!
Adds three dots to the lower index,
separated from any previous lower
index by the default separator.
\item
- \mylst!clower...!, \mylst!clowerdots!
+ \mylst!commalower...!, \mylst!commalowerdots!
Adds three dots to the lower index,
separated from any previous lower
@@ -4173,28 +4184,28 @@ In the following sections, we include the full list.
with no separator from any previous lower index.
\item
- \mylst!slower*!
+ \mylst!seplower*!
Adds a bullet to the lower index,
separated from any previous lower
index by the default separator.
\item
- \mylst!slower**!
+ \mylst!seplower**!
Adds a double bullet to the lower index,
separated from any previous lower
index by the default separator.
\item
- \mylst!clower*!
+ \mylst!commalower*!
Adds a bullet to the lower index,
separated from any previous lower
index by a comma.
\item
- \mylst!clower**!
+ \mylst!commalower**!
Adds a double bullet to the lower index,
separated from any previous lower
@@ -4240,14 +4251,14 @@ In the following sections, we include the full list.
with no separator from any previous upper left index.
\item
- \mylst!supperleft={$\<value\>$}!
+ \mylst!sepupperleft={$\<value\>$}!
Adds to the upper left index,
separated from any previous upper left
index by the default separator.
\item
- \mylst!cupperleft={$\<value\>$}!
+ \mylst!commaupperleft={$\<value\>$}!
Adds to the upper left index,
separated from any previous upper left
@@ -4264,9 +4275,9 @@ In the following sections, we include the full list.
Sets the post-upper left index.
\item
- \mylst!upperleftputleft={$\<value\>$}!
+ \mylst!upperleftputright={$\<value\>$}!
- Adds something to the left of the upper left index.
+ Adds something to the right of the upper left index.
As with keys like~\lstinline!upperleft!, this
will also increase the number of registered
upper left indices by~\( 1 \), and
@@ -4298,14 +4309,14 @@ In the following sections, we include the full list.
with no separator from any previous upper left index.
\item
- \mylst!supperleft-!, \mylst!supperleftslot!
+ \mylst!sepupperleft-!, \mylst!sepupperleftslot!
Adds a slot to the upper left index,
separated from any previous upper left
index by the default separator.
\item
- \mylst!cupperleft-!, \mylst!cupperleftslot!
+ \mylst!commaupperleft-!, \mylst!commaupperleftslot!
Adds a slot to the upper left index,
separated from any previous upper left
@@ -4332,14 +4343,14 @@ In the following sections, we include the full list.
with no separator from any previous upper left index.
\item
- \mylst!supperleft...!, \mylst!supperleftdots!
+ \mylst!sepupperleft...!, \mylst!sepupperleftdots!
Adds three dots to the upper left index,
separated from any previous upper left
index by the default separator.
\item
- \mylst!cupperleft...!, \mylst!cupperleftdots!
+ \mylst!commaupperleft...!, \mylst!commaupperleftdots!
Adds three dots to the upper left index,
separated from any previous upper left
@@ -4372,28 +4383,28 @@ In the following sections, we include the full list.
with no separator from any previous upper left index.
\item
- \mylst!supperleft*!
+ \mylst!sepupperleft*!
Adds a bullet to the upper left index,
separated from any previous upper left
index by the default separator.
\item
- \mylst!supperleft**!
+ \mylst!sepupperleft**!
Adds a double bullet to the upper left index,
separated from any previous upper left
index by the default separator.
\item
- \mylst!cupperleft*!
+ \mylst!commaupperleft*!
Adds a bullet to the upper left index,
separated from any previous upper left
index by a comma.
\item
- \mylst!cupperleft**!
+ \mylst!commaupperleft**!
Adds a double bullet to the upper left index,
separated from any previous upper left
@@ -4439,14 +4450,14 @@ In the following sections, we include the full list.
with no separator from any previous lower left index.
\item
- \mylst!slowerleft={$\<value\>$}!
+ \mylst!seplowerleft={$\<value\>$}!
Adds to the lower left index,
separated from any previous lower left
index by the default separator.
\item
- \mylst!clowerleft={$\<value\>$}!
+ \mylst!commalowerleft={$\<value\>$}!
Adds to the lower left index,
separated from any previous lower left
@@ -4463,9 +4474,9 @@ In the following sections, we include the full list.
Sets the post-lower left index.
\item
- \mylst!lowerleftputleft={$\<value\>$}!
+ \mylst!lowerleftputright={$\<value\>$}!
- Adds something to the left of the lower left index.
+ Adds something to the right of the lower left index.
As with keys like~\lstinline!lowerleft!, this
will also increase the number of registered
lower left indices by~\( 1 \), and
@@ -4497,14 +4508,14 @@ In the following sections, we include the full list.
with no separator from any previous lower left index.
\item
- \mylst!slowerleft-!, \mylst!slowerleftslot!
+ \mylst!seplowerleft-!, \mylst!seplowerleftslot!
Adds a slot to the lower left index,
separated from any previous lower left
index by the default separator.
\item
- \mylst!clowerleft-!, \mylst!clowerleftslot!
+ \mylst!commalowerleft-!, \mylst!commalowerleftslot!
Adds a slot to the lower left index,
separated from any previous lower left
@@ -4531,14 +4542,14 @@ In the following sections, we include the full list.
with no separator from any previous lower left index.
\item
- \mylst!slowerleft...!, \mylst!slowerleftdots!
+ \mylst!seplowerleft...!, \mylst!seplowerleftdots!
Adds three dots to the lower left index,
separated from any previous lower left
index by the default separator.
\item
- \mylst!clowerleft...!, \mylst!clowerleftdots!
+ \mylst!commalowerleft...!, \mylst!commalowerleftdots!
Adds three dots to the lower left index,
separated from any previous lower left
@@ -4571,28 +4582,28 @@ In the following sections, we include the full list.
with no separator from any previous lower left index.
\item
- \mylst!slowerleft*!
+ \mylst!seplowerleft*!
Adds a bullet to the lower left index,
separated from any previous lower left
index by the default separator.
\item
- \mylst!slowerleft**!
+ \mylst!seplowerleft**!
Adds a double bullet to the lower left index,
separated from any previous lower left
index by the default separator.
\item
- \mylst!clowerleft*!
+ \mylst!commalowerleft*!
Adds a bullet to the lower left index,
separated from any previous lower left
index by a comma.
\item
- \mylst!clowerleft**!
+ \mylst!commalowerleft**!
Adds a double bullet to the lower left index,
separated from any previous lower left
@@ -4638,14 +4649,14 @@ In the following sections, we include the full list.
with no separator from any previous \lstinline!d!-index.
\item
- \mylst!sd={$\<value\>$}!
+ \mylst!sepd={$\<value\>$}!
Adds to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
by the default separator.
\item
- \mylst!cd={$\<value\>$}!
+ \mylst!commad={$\<value\>$}!
Adds to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
@@ -4696,14 +4707,14 @@ In the following sections, we include the full list.
with no separator from any previous \lstinline!d!-index.
\item
- \mylst!sd-!, \mylst!sdslot!
+ \mylst!sepd-!, \mylst!sepdslot!
Adds a slot to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
by the default separator.
\item
- \mylst!cd-!, \mylst!cdslot!
+ \mylst!commad-!, \mylst!commadslot!
Adds a slot to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
@@ -4718,8 +4729,7 @@ In the following sections, we include the full list.
\item
\mylst!d-withothersep={$\<separator\>$}!,
\mylst!dslotwithothersep={$\<separator\>$}!
-
-
+
Adds a slot to the \lstinline!d!-index, separated
from any previous \lstinline!d!-index by~\<separator\>.
@@ -4730,14 +4740,14 @@ In the following sections, we include the full list.
with no separator from any previous \lstinline!d!-index.
\item
- \mylst!sd...!, \mylst!sddots!
+ \mylst!sepd...!, \mylst!sepddots!
Adds three dots to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
by the default separator.
\item
- \mylst!cd...!, \mylst!cddots!
+ \mylst!commad...!, \mylst!commaddots!
Adds three dots to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
@@ -4770,28 +4780,28 @@ In the following sections, we include the full list.
with no separator from any previous \lstinline!d!-index.
\item
- \mylst!sd*!
+ \mylst!sepd*!
Adds a bullet to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
by the default separator.
\item
- \mylst!sd**!
+ \mylst!sepd**!
Adds a double bullet to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
by the default separator.
\item
- \mylst!cd*!
+ \mylst!commad*!
Adds a bullet to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
by a comma.
\item
- \mylst!cd**!
+ \mylst!commad**!
Adds a double bullet to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
@@ -4837,14 +4847,14 @@ In the following sections, we include the full list.
with no separator from any previous \lstinline!i!-index.
\item
- \mylst!si={$\<value\>$}!
+ \mylst!sepi={$\<value\>$}!
Adds to the \lstinline!i!-index,
separated from any previous
\lstinline!i!-index by the default separator.
\item
- \mylst!ci={$\<value\>$}!
+ \mylst!commai={$\<value\>$}!
Adds to the \lstinline!i!-index,
separated from any previous
@@ -4895,14 +4905,14 @@ In the following sections, we include the full list.
with no separator from any previous \lstinline!i!-index.
\item
- \mylst!si-!, \mylst!sislot!
+ \mylst!sepi-!, \mylst!sepislot!
Adds a slot to the \lstinline!i!-index,
separated from any previous \lstinline!i!-index
by the default separator.
\item
- \mylst!ci-!, \mylst!cislot!
+ \mylst!commai-!, \mylst!commaislot!
Adds a slot to the \lstinline!i!-index,
separated from any previous \lstinline!i!-index
@@ -4929,14 +4939,14 @@ In the following sections, we include the full list.
with no separator from any previous \lstinline!i!-index.
\item
- \mylst!si...!, \mylst!sidots!
+ \mylst!sepi...!, \mylst!sepidots!
Adds three dots to the \lstinline!i!-index,
separated from any previous \lstinline!i!-index
by the default separator.
\item
- \mylst!ci...!, \mylst!cidots!
+ \mylst!commai...!, \mylst!commaidots!
Adds three dots to the \lstinline!i!-index,
separated from any previous \lstinline!i!-index
@@ -4969,28 +4979,28 @@ In the following sections, we include the full list.
with no separator from any previous \lstinline!i!-index.
\item
- \mylst!si*!
+ \mylst!sepi*!
Adds a bullet to the \lstinline!i!-index,
separated from any previous
\lstinline!i!-index by the default separator.
\item
- \mylst!si**!
+ \mylst!sepi**!
Adds a double bullet to the \lstinline!i!-index,
separated from any previous
\lstinline!i!-index by the default separator.
\item
- \mylst!ci*!
+ \mylst!commai*!
Adds a bullet to the \lstinline!i!-index,
separated from any previous
\lstinline!i!-index by a comma.
\item
- \mylst!ci**!
+ \mylst!commai**!
Adds a double bullet to the \lstinline!i!-index,
separated from any previous
@@ -5123,17 +5133,17 @@ These are the predefined keys that work inside the argument.
recognized as a key, e.g.~the~\lstinline!\vx!
in~\lstinline!\vf{\vx}!.
By default, this is set to be equivalent
- to~\lstinline!s!.
+ to~\lstinline!sep!.
\item
- \mylst!s={$\<value\>$}!
+ \mylst!sep={$\<value\>$}!
Adds the \<value\> to the argument,
separated from any previous argument
by the default separator.
\item
- \mylst!c={$\<value\>$}!
+ \mylst!comma={$\<value\>$}!
Adds the \<value\> to the argument,
separated from any previous argument
@@ -5147,7 +5157,7 @@ These are the predefined keys that work inside the argument.
by the default separator.
\item
- \mylst!c-!, \mylst!cslot!
+ \mylst!comma-!, \mylst!commaslot!
Adds a slot to the argument,
separated from any previous argument
@@ -5161,7 +5171,7 @@ These are the predefined keys that work inside the argument.
by the default separator.
\item
- \mylst!c...!, \mylst!cdots!
+ \mylst!comma...!, \mylst!commadots!
Adds three dots to the argument,
separated from any previous argument
diff --git a/macros/latex/contrib/semantex/stripsemantex.lua b/macros/latex/contrib/semantex/stripsemantex.lua
index 0ecb5e6240..f50648dd23 100644
--- a/macros/latex/contrib/semantex/stripsemantex.lua
+++ b/macros/latex/contrib/semantex/stripsemantex.lua
@@ -297,12 +297,15 @@ addSemtexPackageToFile = function()
\aftergroup\egroup\right
}
-\providecommand\SemantexBullet{%
- \raisebox{-0.25ex}{\scalebox{1.2}{$\cdot$}}%
+\makeatletter
+\DeclareRobustCommand\SemantexBullet{%
+ \mathord{\mathpalette\SemantexBullet@{0.5}}%
}
-\providecommand\SemantexDoubleBullet{%
- \SemantexBullet\SemantexBullet
+\newcommand\SemantexBullet@[2]{%
+ \vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}%
}
+\DeclareRobustCommand\SemantexDoubleBullet{\SemantexBullet \SemantexBullet}
+\makeatother
]] .. content
end \ No newline at end of file
diff --git a/macros/latex/contrib/semantex/stripsemantex.sty b/macros/latex/contrib/semantex/stripsemantex.sty
index 419a4dd75a..679b2ab72c 100644
--- a/macros/latex/contrib/semantex/stripsemantex.sty
+++ b/macros/latex/contrib/semantex/stripsemantex.sty
@@ -1,5 +1,5 @@
\RequirePackage{xparse}
-\ProvidesExplPackage{stripsemantex}{2020/09/27}{0.44}{}
+\ProvidesExplPackage{stripsemantex}{2020/10/03}{0.45}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
diff --git a/macros/latex/contrib/semtex/semtex.pdf b/macros/latex/contrib/semtex/semtex.pdf
index 6500750b39..3928388d96 100644
--- a/macros/latex/contrib/semtex/semtex.pdf
+++ b/macros/latex/contrib/semtex/semtex.pdf
Binary files differ
diff --git a/macros/latex/contrib/semtex/semtex.sty b/macros/latex/contrib/semtex/semtex.sty
index 28c9303f69..077cdb1983 100644
--- a/macros/latex/contrib/semtex/semtex.sty
+++ b/macros/latex/contrib/semtex/semtex.sty
@@ -1,5 +1,5 @@
\RequirePackage{xparse}
-\ProvidesExplPackage{semtex}{2020/09/27}{0.44}{}
+\ProvidesExplPackage{semtex}{2020/10/03}{0.45}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
@@ -12,23 +12,32 @@
% Bullets:
-\box_if_exist:NF \g__semantex_bullet_box
+\cs_new_protected:Npn\semantex_set_mathsurround_to_zero:
{
- \box_new:N \g__semantex_bullet_box
- \hbox_set:Nn \g__semantex_bullet_box { $\cdot$ }
- \box_scale:Nnn \g__semantex_bullet_box {1.2} {1.2}
- \tl_set:Nn\g_semantex_bullet
- {
- \box_move_up:nn{-0.25ex}{\box_use:N \g__semantex_bullet_box}
- }
-
- \tl_set:Nn\g_semantex_double_bullet{\g_semantex_bullet \g_semantex_bullet}
-
- \tl_set_eq:NN\SemantexBullet \g_semantex_bullet
-
- \tl_set_eq:NN \SemantexDoubleBullet \g_semantex_double_bullet
+ % This is equivalent to "\m@th"
+ \dim_set:Nn \mathsurround { 0pt }
}
+\cs_new_protected:Npn\semantex_bullet:
+{
+ \mathord{\mathpalette\__semantex_bullet_auxiliary:Nn{0.5}}
+}
+
+\box_new:N \l__semantex_bullet_box
+
+\cs_new_protected:Npn\__semantex_bullet_auxiliary:Nn#1#2
+{
+ \hbox_set:Nn \l__semantex_bullet_box { $\semantex_set_mathsurround_to_zero: #1 \bullet$ }
+ \box_scale:Nnn \l__semantex_bullet_box { #2 } { #2 }
+ \vcenter{ \hbox:n { \box_use_drop:N \l__semantex_bullet_box } }
+}
+
+\cs_new_protected:Nn\semantex_double_bullet: {\semantex_bullet: \semantex_bullet:}
+
+\cs_set_eq:NN\SemantexBullet \semantex_bullet:
+
+\cs_set_eq:NN \SemantexDoubleBullet \semantex_double_bullet:
+
% Parentheses:
\cs_set:Npn\SemantexLeft { \mathopen{}\mathclose\bgroup\left }
diff --git a/macros/latex/contrib/semtex/semtex.tex b/macros/latex/contrib/semtex/semtex.tex
index e390c4ba23..67f8d548bf 100644
--- a/macros/latex/contrib/semtex/semtex.tex
+++ b/macros/latex/contrib/semtex/semtex.tex
@@ -38,7 +38,7 @@
\usepackage[nameinlink]{cleveref}
-\title{\texttt{semtex}: For stripped Seman\!\TeX\ documents (v0.44)}
+\title{\texttt{semtex}: For stripped Seman\!\TeX\ documents (v0.45)}
\date{\today}
\author{Sebastian Ørsted (\href{mailto:sorsted@gmail.com}{sorsted@gmail.com})}
@@ -58,7 +58,7 @@
basicstyle=\ttfamily\small,
commentstyle=\itshape\ttfamily\small,
alsoletter={\\},
- escapechar=@,
+ %escapechar=@,
breaklines=true,
breakindent={0pt},
captionpos=t,
@@ -123,7 +123,8 @@ the macros it provides by macros from other packages.
The package provides the commands \mylst!\SemantexBullet! and \mylst!\SemantexDoubleBullet!.
These commands print bullets which are smaller (and prettier, in my opinion)
-than the standard \lstinline!\bullet! command from~\LaTeX:
+than the standard \lstinline!\bullet! command from~\LaTeX.
+They are (of course) based on code by egreg, see \url{tex.stackexchange.com/a/564506/19809}.
\begin{LTXexample}
$ H^{\SemantexBullet} $,
$ H^{\SemantexDoubleBullet} $
@@ -132,12 +133,17 @@ $ H^{\SemantexDoubleBullet} $
You can recreate them yourself as follows, rendering
the package \pack{semtex} unnecessary for this purpose:
\begin{lstlisting}
-\newcommand\SemantexBullet{%
- \raisebox{-0.25ex}{\scalebox{1.2}{$\cdot$}}%
+\usepackage{graphicx}
+
+\makeatletter
+\DeclareRobustCommand\SemantexBullet{%
+ \mathord{\mathpalette\SemantexBullet@{0.5}}%
}
-\newcommand\SemantexDoubleBullet{%
- \SemantexBullet\SemantexBullet
+\newcommand\SemantexBullet@[2]{%
+ \vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}%
}
+\DeclareRobustCommand\SemantexDoubleBullet{\SemantexBullet \SemantexBullet}
+\makeatother
\end{lstlisting}
\chapter*{Replacements for \texorpdfstring{\textbackslash\texttt{left} and~\textbackslash\texttt{right}}{\left and \right}}
diff --git a/macros/latex/required/babel/base/README.md b/macros/latex/required/babel/base/README.md
index 46f331e428..9c0dd6e35b 100644
--- a/macros/latex/required/babel/base/README.md
+++ b/macros/latex/required/babel/base/README.md
@@ -1,4 +1,4 @@
-## Babel 3.48
+## Babel 3.49
This package manages culturally-determined typographical (and other)
rules, and hyphenation patterns for a wide range of languages. Many
@@ -7,11 +7,11 @@ lualatex out of the box. A few even work with plain formats.
The latest stable version is available on <https://ctan.org/pkg/babel>.
-Changes in version 3.48 are described in:
+Changes in version 3.49 are described in:
-https://github.com/latex3/babel/wiki/What's-new-in-babel-3.48
+https://github.com/latex3/babel/wiki/What's-new-in-babel-3.49
-Included is a set of ini files for about 200 languages.
+Included is a set of ini files for about 250 languages.
The best way to install and/or update it is with the help of package
managers.
@@ -42,8 +42,14 @@ Bugs related to specific languages are best reported to their
respective authors.
### Latest changes
-
```
+3.49 2020-10-03
+ - Allow standard LaTeX syntax to recognize locales based on ini
+ files in the most common cases.
+ - frenchspacing is set with ini files.
+ - Fixes:
+ - layout.lists=off didn't work (#94)
+
3.48 2020-09-01
- New (tentative) tools to customize some labels (like chapters
in CJK and Hungarian).
@@ -53,6 +59,7 @@ respective authors.
- \babelshorthand didn't work with some dialects (#91).
- \selectlanguage and otherlanguage raised an error inside
tabular.
+https://github.com/latex3/babel/wiki/What's-new-in-babel-3.48
3.47 2020-07-13
- Fixes:
diff --git a/macros/latex/required/babel/base/babel.dtx b/macros/latex/required/babel/base/babel.dtx
index 51153eb550..73badc9980 100644
--- a/macros/latex/required/babel/base/babel.dtx
+++ b/macros/latex/required/babel/base/babel.dtx
@@ -31,7 +31,7 @@
%
% \iffalse
%<*filedriver>
-\ProvidesFile{babel.dtx}[2020/09/01 v3.48 The Babel package]
+\ProvidesFile{babel.dtx}[2020/10/03 v3.49 The Babel package]
\documentclass{ltxdoc}
\GetFileInfo{babel.dtx}
\usepackage{fontspec}
@@ -256,7 +256,7 @@ You can follow the development of \babel{} in
free to fork it and make pull requests. If you are the author of a
package, send to me a few test files which I'll add to mine, so that
possible issues can be caught in the development phase.
-
+
\item[\sffamily\color{messages}It doesn't work for me!] You can ask for
help in some forums like \textsf{tex.stackexchange}, but if you have
found a bug, I strongly beg you to report it in
@@ -272,7 +272,7 @@ of loading a language (with |ldf| files), which is usually all you need.
The alternative way based on |ini| files, which complements the
previous one (it does \textit{not} replace it, although it is still
necessary in some languages), is described below; go to \ref{inifiles}.
-
+
\item[\sffamily\color{messages}I don’t like manuals. I prefer sample
files.] This manual contains lots of examples and tips, but in GitHub
there are many
@@ -287,9 +287,14 @@ necessary in some languages), is described below; go to \ref{inifiles}.
In most cases, a single language is required, and then all you need in
\LaTeX{} is to load the package using its standard mechanism for this
purpose, namely, passing that language as an optional argument. In
-addition, you may want to set the font and input encodings.
+addition, you may want to set the font and input encodings.
-Many languages are compatible with \textsf{xetex} and \textsf{luatex}.
+Another approach is making the language a global option in order to let
+other packages detect and use it. This is the standard way in \LaTeX{}
+for an option – in this case a language – to be recognized by several
+packages.
+
+Many languages are compatible with \textsf{xetex} and \textsf{luatex},.
With them you can use \babel{} to localize the documents. When these
engines are used, the Latin script is covered by default in current
\LaTeX{} (provided the document encoding is UTF-8), because the font
@@ -319,6 +324,15 @@ Plus ça change, plus c'est la même chose!
\end{document}
\end{verbatim}
+
+Now consider something like:
+\begin{verbatim}
+_\documentclass[french]{article}_
+\usepackage{babel}
+\usepackage{varioref}
+\end{verbatim}
+With this setting, the package \texttt{varioref} will also see
+the option |french| and will be able to use it.
\end{example}
\begin{example}
@@ -330,11 +344,11 @@ in UTF-8 and a so-called Unicode font must be loaded (in this example
\setengine{luatex/xetex}
\begin{verbatim}
-\documentclass{article}
+_\documentclass[russian]{article}_
-_\usepackage[russian]{babel}_
+\usepackage{babel}
-\babelfont{rm}{DejaVu Serif}
+_\babelfont{rm}{DejaVu Serif}_
\begin{document}
@@ -363,17 +377,6 @@ Or the more explanatory:
Make sure you set the encoding actually used by your editor.
\end{troubleshooting}
-Another approach is making the language (\Lopt{french} in the example)
-a global option in order to let other packages detect and use it:
-\begin{verbatim}
-_\documentclass[french]{article}_
-\usepackage{babel}
-\usepackage{varioref}
-\end{verbatim}
-
-In this last example, the package \texttt{varioref} will also see
-the option and will be able to use it.
-
\begin{note}
Because of the way \babel{} has evolved, ``language'' can refer to
(1) a set of hyphenation patterns as preloaded into the format, (2)
@@ -547,8 +550,8 @@ until required, so that it can be used just in case.
A trivial document is:
\setengine{luatex/xetex}
\begin{verbatim}
-\documentclass{article}
-\usepackage[english]{babel}
+\documentclass[english]{article}
+\usepackage{babel}
\babelfont[russian]{rm}{FreeSerif}
@@ -1301,9 +1304,8 @@ main exception being the |\...name| strings).
Most of them set the date, and many also the captions (Unicode and
LICR). They will be evolving with the time to add more features
(something to keep in mind if backward compatibility is important). The
-following section shows how to make use of them currently (by means of
-|\babelprovide|), but a higher interface, based on package options, in
-under study. In other words, |\babelprovide| is mainly meant
+following section shows how to make use of them by means of
+|\babelprovide|. In other words, |\babelprovide| is mainly meant
for auxiliary tasks, and as alternative when the |ldf|, for some
reason, does work as expected.
@@ -1319,7 +1321,7 @@ reason, does work as expected.
\usepackage{babel}
_\babelprovide[import, main]{georgian}_
-\babelfont{rm}{DejaVu Sans}
+\babelfont{rm}[Renderer=Harfbuzz]{DejaVu Sans}
\begin{document}
@@ -1334,6 +1336,36 @@ _\babelprovide[import, main]{georgian}_
\endgroup
\end{example}
+\New{3.49} Alternatively, you can tell babel to load all or some
+languages passed as options with |\babelprovide| and not from the |ldf|
+file in a few few typical cases. Thus, |provide=*| means ‘load the main
+language with the |\babelprovide| mechanism instead of the |ldf| file’
+applying the basic features, which in this case means |import,| |main|.
+There are (currently) three options:
+\begin{itemize}
+\item |provide=*| is the option just explained, for the main language;
+\item |provide+=*| is the same for additional languages (the main
+ language is still the |ldf| file);
+\item |provide*=*| is the same for all languages, ie, main and
+ additional.
+\end{itemize}
+
+\begin{example}
+ The preamble in the previous example can be more compactly written
+ as:
+\begin{verbatim}
+\documentclass{book}
+\usepackage[_georgian, provide=*_]{babel}
+\babelfont{rm}[Renderer=Harfbuzz]{DejaVu Sans}
+\end{verbatim}
+Or also:
+\begin{verbatim}
+\documentclass[_georgian_]{book}
+\usepackage[_provide=*_]{babel}
+\babelfont{rm}[Renderer=Harfbuzz]{DejaVu Sans}
+\end{verbatim}
+\end{example}
+
\begin{note}
The \texttt{ini} files just define and set some parameters, but the
corresponding behavior is not always implemented. Also, there are
@@ -1389,8 +1421,8 @@ need to set explicitly the script to either |deva| or |dev2|, eg:
be used in conjunction with the |ldf| for |japanese|, because the
following piece of code loads \textsf{luatexja}:
\begin{verbatim}
-\documentclass{ltjbook}
-\usepackage[japanese]{babel}
+\documentclass[japanese]{ltjbook}
+\usepackage{babel}
\end{verbatim}
\item[Latin, Greek, Cyrillic] Combining chars with the default
\luatex{} font renderer might be wrong; on then other hand, with the
@@ -4744,8 +4776,8 @@ help from Bernd Raichle, for which I am grateful.
% \section{Tools}
%
% \begin{macrocode}
-%<<version=3.48>>
-%<<date=2020/09/01>>
+%<<version=3.49>>
+%<<date=2020/10/03>>
% \end{macrocode}
%
% \textbf{Do not use the following macros in \texttt{ldf} files. They
@@ -4895,12 +4927,15 @@ help from Bernd Raichle, for which I am grateful.
%
% \begin{macro}{\bbl@ifblank}
% A tool from \textsf{url}, by Donald Arseneau, which tests if a
-% string is empty or space.
+% string is empty or space. The companion macros tests if a macro is
+% defined with some `real' value, ie, not |\relax| and not empty,
%
% \begin{macrocode}
\def\bbl@ifblank#1{%
\bbl@ifblank@i#1\@nil\@nil\@secondoftwo\@firstoftwo\@nil}
\long\def\bbl@ifblank@i#1#2\@nil#3#4#5\@nil{#4}
+\def\bbl@ifset#1#2#3{%
+ \bbl@ifunset{#1}{#3}{\bbl@exp{\\\bbl@ifblank{#1}}{#3}{#2}}}
% \end{macrocode}
% \end{macro}
%
@@ -5040,6 +5075,25 @@ help from Bernd Raichle, for which I am grateful.
\else
\let\bbl@esphack\@empty
\fi}
+% \end{macrocode}
+%
+% Another hackish tool, to apply case changes inside a protected
+% macros. It's based on the internal |\let|'s made by |\MakeUppercase|
+% and |\MakeLowercase| between things like |\oe| and |\OE|.
+%
+% \begin{macrocode}
+\def\bbl@cased{%
+ \ifx\oe\OE
+ \expandafter\in@\expandafter
+ {\expandafter\OE\expandafter}\expandafter{\oe}%
+ \ifin@
+ \bbl@afterelse\expandafter\MakeUppercase
+ \else
+ \bbl@afterfi\expandafter\MakeLowercase
+ \fi
+ \else
+ \expandafter\@firstofone
+ \fi}
%<</Basic macros>>
% \end{macrocode}
%
@@ -5273,17 +5327,24 @@ help from Bernd Raichle, for which I am grateful.
% \begin{macrocode}
\bbl@trace{key=value and another general options}
\bbl@csarg\let{tempa\expandafter}\csname opt@babel.sty\endcsname
-\def\bbl@tempb#1.#2{%
+\def\bbl@tempb#1.#2{% Remove trailing dot
#1\ifx\@empty#2\else,\bbl@afterfi\bbl@tempb#2\fi}%
-\def\bbl@tempd#1.#2\@nnil{%
+\def\bbl@tempd#1.#2\@nnil{% TODO. Refactor lists?
\ifx\@empty#2%
\edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1}%
\else
- \in@{=}{#1}\ifin@
- \edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1.#2}%
+ \in@{,provide,}{,#1,}%
+ \ifin@
+ \edef\bbl@tempc{%
+ \ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1.\bbl@tempb#2}%
\else
- \edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1}%
- \bbl@csarg\edef{mod@#1}{\bbl@tempb#2}%
+ \in@{=}{#1}%
+ \ifin@
+ \edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1.#2}%
+ \else
+ \edef\bbl@tempc{\ifx\bbl@tempc\@empty\else\bbl@tempc,\fi#1}%
+ \bbl@csarg\edef{mod@#1}{\bbl@tempb#2}%
+ \fi
\fi
\fi}
\let\bbl@tempc\@empty
@@ -5307,9 +5368,17 @@ help from Bernd Raichle, for which I am grateful.
\DeclareOption{silent}{}
\DeclareOption{mono}{}
\DeclareOption{shorthands=off}{\bbl@tempa shorthands=\bbl@tempa}
+\chardef\bbl@iniflag\z@
+\DeclareOption{provide=*}{\chardef\bbl@iniflag\@ne} % main -> +1
+\DeclareOption{provide+=*}{\chardef\bbl@iniflag\tw@} % add = 2
+\DeclareOption{provide*=*}{\chardef\bbl@iniflag\thr@@} % add + main
% Don't use. Experimental. TODO.
\newif\ifbbl@single
\DeclareOption{selectors=off}{\bbl@singletrue}
+\DeclareOption{provide@=*}{} % autoload with cat @=letter
+\makeatother
+\DeclareOption{provide@=*}{} % autoload with cat @=other
+\makeatletter
<@More package options@>
% \end{macrocode}
%
@@ -6278,7 +6347,7 @@ help from Bernd Raichle, for which I am grateful.
\AtEndOfPackage{%
\EnableBabelHook{babel-bidi}%
\ifx\fontspec\@undefined
- \usepackage{fontspec}% bidi needs fontspec
+ \bbl@loadfontspec % bidi needs fontspec
\fi
\usepackage#1{bidi}}%
\fi}
@@ -6287,10 +6356,8 @@ help from Bernd Raichle, for which I am grateful.
\bbl@tentative{bidi=bidi}
\bbl@loadxebidi{}
\or
- \bbl@tentative{bidi=bidi-r}
\bbl@loadxebidi{[rldocument]}
\or
- \bbl@tentative{bidi=bidi-l}
\bbl@loadxebidi{}
\fi
\fi
@@ -6566,7 +6633,7 @@ help from Bernd Raichle, for which I am grateful.
{\bbl@error{%
Unknown option `\CurrentOption'. Either you misspelled it\\%
or the language definition file \CurrentOption.ldf was not found}{%
- Valid options are: shorthands=, KeepShorthandsActive,\\%
+ Valid options are, among others: shorthands=, KeepShorthandsActive,\\%
activeacute, activegrave, noconfigs, safe=, main=, math=\\%
headfoot=, strings=, config=, hyphenmap=, or a language name.}}}
% \end{macrocode}
@@ -6578,9 +6645,9 @@ help from Bernd Raichle, for which I am grateful.
%
% \begin{macrocode}
\def\bbl@try@load@lang#1#2#3{%
- \IfFileExists{\CurrentOption.ldf}%
- {\bbl@load@language{\CurrentOption}}%
- {#1\bbl@load@language{#2}#3}}
+ \IfFileExists{\CurrentOption.ldf}%
+ {\bbl@load@language{\CurrentOption}}%
+ {#1\bbl@load@language{#2}#3}}
\DeclareOption{afrikaans}{\bbl@try@load@lang{}{dutch}{}}
\DeclareOption{hebrew}{%
\input{rlbabel.def}%
@@ -6631,38 +6698,83 @@ help from Bernd Raichle, for which I am grateful.
% file are the same.
%
% \begin{macrocode}
-\bbl@for\bbl@tempa\bbl@language@opts{%
- \bbl@ifunset{ds@\bbl@tempa}%
- {\edef\bbl@tempb{%
- \noexpand\DeclareOption
- {\bbl@tempa}%
- {\noexpand\bbl@load@language{\bbl@tempa}}}%
- \bbl@tempb}%
- \@empty}
+\let\bbl@tempc\relax
+\bbl@foreach\bbl@language@opts{%
+ \ifcase\bbl@iniflag
+ \bbl@ifunset{ds@#1}%
+ {\DeclareOption{#1}{\bbl@load@language{#1}}}%
+ {}%
+ \or
+ \@gobble % case 2 same as 1
+ \or
+ \bbl@ifunset{ds@#1}%
+ {\IfFileExists{#1.ldf}{}%
+ {\IfFileExists{babel-#1.tex}{}{\DeclareOption{#1}{}}}}%
+ {}%
+ \bbl@ifunset{ds@#1}%
+ {\def\bbl@tempc{#1}%
+ \DeclareOption{#1}{%
+ \ifnum\bbl@iniflag>\@ne
+ \bbl@ldfinit
+ \babelprovide[import]{#1}%
+ \bbl@afterldf{}%
+ \else
+ \bbl@load@language{#1}%
+ \fi}}%
+ {}%
+ \or
+ \def\bbl@tempc{#1}%
+ \bbl@ifunset{ds@#1}%
+ {\DeclareOption{#1}{%
+ \bbl@ldfinit
+ \babelprovide[import]{#1}%
+ \bbl@afterldf{}}}%
+ {}%
+ \fi}
% \end{macrocode}
%
% Now, we make sure an option is explicitly declared for any
% language set as global option, by checking if an |ldf|
% exists. The previous step was, in fact, somewhat redundant, but
-% that way we minimize accesing the file system just to see if the
+% that way we minimize accessing the file system just to see if the
% option could be a language.
%
% \begin{macrocode}
+\let\bbl@tempb\@nnil
\bbl@foreach\@classoptionslist{%
\bbl@ifunset{ds@#1}%
- {\IfFileExists{#1.ldf}%
- {\DeclareOption{#1}{\bbl@load@language{#1}}}%
- {}}%
+ {\IfFileExists{#1.ldf}{}%
+ {\IfFileExists{babel-#1.tex}{}{\DeclareOption{#1}{}}}}%
+ {}%
+ \bbl@ifunset{ds@#1}%
+ {\def\bbl@tempb{#1}%
+ \DeclareOption{#1}{%
+ \ifnum\bbl@iniflag>\@ne
+ \bbl@ldfinit
+ \babelprovide[import]{#1}%
+ \bbl@afterldf{}%
+ \else
+ \bbl@load@language{#1}%
+ \fi}}%
{}}
% \end{macrocode}
%
% If a main language has been set, store it for the third pass.
%
% \begin{macrocode}
+\ifnum\bbl@iniflag=\z@\else
+ \ifx\bbl@opt@main\@nnil
+ \ifx\bbl@tempc\relax
+ \let\bbl@opt@main\bbl@tempb
+ \else
+ \let\bbl@opt@main\bbl@tempc
+ \fi
+ \fi
+\fi
\ifx\bbl@opt@main\@nnil\else
\expandafter
\let\expandafter\bbl@loadmain\csname ds@\bbl@opt@main\endcsname
- \DeclareOption{\bbl@opt@main}{}
+ \expandafter\let\csname ds@\bbl@opt@main\endcsname\@empty
\fi
% \end{macrocode}
%
@@ -6708,10 +6820,17 @@ help from Bernd Raichle, for which I am grateful.
option. Reported}%
\fi
\else
- \DeclareOption{\bbl@opt@main}{\bbl@loadmain}
- \ExecuteOptions{\bbl@opt@main}
- \DeclareOption*{}
- \ProcessOptions*
+ \ifodd\bbl@iniflag % case 1,3
+ \bbl@ldfinit
+ \let\CurrentOption\bbl@opt@main
+ \bbl@exp{\\\babelprovide[import,main]{\bbl@opt@main}}
+ \bbl@afterldf{}%
+ \else % case 0,2
+ \chardef\bbl@iniflag\z@ % Force ldf
+ \expandafter\let\csname ds@\bbl@opt@main\endcsname\bbl@loadmain
+ \DeclareOption*{}%
+ \ProcessOptions*
+ \fi
\fi
\def\AfterBabelLanguage{%
\bbl@error
@@ -7229,7 +7348,7 @@ help from Bernd Raichle, for which I am grateful.
\let\bbl@select@type\z@
\expandafter\bbl@switch\expandafter{\languagename}%
\fi}}
-\def\babel@aux#1#2{%
+\def\babel@aux#1#2{% TODO. See how to avoid undefined nil's
\select@language{#1}%
\bbl@foreach\BabelContentsFiles{%
\@writefile{##1}{\babel@toc{#1}{#2}}}}% %% TODO - ok in plain?
@@ -8757,7 +8876,8 @@ help from Bernd Raichle, for which I am grateful.
% A user level command to change the language from which shorthands
% are used. Unfortunately, \babel{} currently does not keep track
% of defined groups, and therefore there is no way to catch a
-% possible change in casing [TODO. Unclear].
+% possible change in casing to fix it in the same way languages names
+% are fixed. [TODO].
%
% \begin{macrocode}
\def\languageshorthands#1{\def\language@group{#1}}
@@ -9218,6 +9338,12 @@ help from Bernd Raichle, for which I am grateful.
\let\bbl@nonfrenchspacing\nonfrenchspacing
\fi}
\let\bbl@nonfrenchspacing\nonfrenchspacing
+%
+\let\bbl@elt\relax
+\edef\bbl@fs@chars{%
+ \bbl@elt{\string.}\@m{3000}\bbl@elt{\string?}\@m{3000}%
+ \bbl@elt{\string!}\@m{3000}\bbl@elt{\string:}\@m{2000}%
+ \bbl@elt{\string;}\@m{1500}\bbl@elt{\string,}\@m{1250}}
% \end{macrocode}
%
% \end{macro}
@@ -9643,13 +9769,12 @@ help from Bernd Raichle, for which I am grateful.
% order as defined. Finally, the string is set.
%
% \begin{macrocode}
-\def\bbl@setstring#1#2{%
+\def\bbl@setstring#1#2{% eg, \prefacename{<string>}
\bbl@forlang\bbl@tempa{%
\edef\bbl@LC{\bbl@tempa\bbl@stripslash#1}%
\bbl@ifunset{\bbl@LC}% eg, \germanchaptername
- {\global\expandafter % TODO - con \bbl@exp ?
- \bbl@add\csname\bbl@G\bbl@tempa\expandafter\endcsname\expandafter
- {\expandafter\bbl@scset\expandafter#1\csname\bbl@LC\endcsname}}%
+ {\bbl@exp{%
+ \global\\\bbl@add\<\bbl@G\bbl@tempa>{\\\bbl@scset\\#1\<\bbl@LC>}}}%
{}%
\def\BabelString{#2}%
\bbl@usehooks{stringprocess}{}%
@@ -10625,47 +10750,6 @@ help from Bernd Raichle, for which I am grateful.
\fi}
% \end{macrocode}
%
-% A tool to define the macros for native digits from the list provided
-% in the |ini| file. Somewhat convoluted because there are 10 digits,
-% but only 9 arguments in \TeX. Non-digits characters are kept. The
-% first macro is the generic “localized” command.
-%
-% \begin{macrocode}
-% TODO. Merge with \localenumeral:
-% \newcommand\localedigits{\@nameuse{\languagename digits}}
-\def\bbl@setdigits#1#2#3#4#5{%
- \bbl@exp{%
- \def\<\languagename digits>####1{% ie, \langdigits
- \<bbl@digits@\languagename>####1\\\@nil}%
- \let\<bbl@cntr@digits@\languagename>\<\languagename digits>%
- \def\<\languagename counter>####1{% ie, \langcounter
- \\\expandafter\<bbl@counter@\languagename>%
- \\\csname c@####1\endcsname}%
- \def\<bbl@counter@\languagename>####1{% ie, \bbl@counter@lang
- \\\expandafter\<bbl@digits@\languagename>%
- \\\number####1\\\@nil}}%
- \def\bbl@tempa##1##2##3##4##5{%
- \bbl@exp{% Wow, quite a lot of hashes! :-(
- \def\<bbl@digits@\languagename>########1{%
- \\\ifx########1\\\@nil % ie, \bbl@digits@lang
- \\\else
- \\\ifx0########1#1%
- \\\else\\\ifx1########1#2%
- \\\else\\\ifx2########1#3%
- \\\else\\\ifx3########1#4%
- \\\else\\\ifx4########1#5%
- \\\else\\\ifx5########1##1%
- \\\else\\\ifx6########1##2%
- \\\else\\\ifx7########1##3%
- \\\else\\\ifx8########1##4%
- \\\else\\\ifx9########1##5%
- \\\else########1%
- \\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi
- \\\expandafter\<bbl@digits@\languagename>%
- \\\fi}}}%
- \bbl@tempa}
-% \end{macrocode}
-%
% Depending on whether or not the language exists, we define two macros.
%
% \begin{macrocode}
@@ -10702,14 +10786,43 @@ help from Bernd Raichle, for which I am grateful.
\fi
\bbl@endcommands
\bbl@load@basic{#1}%
+ % == hyphenmins == (only if new)
\bbl@exp{%
\gdef\<#1hyphenmins>{%
{\bbl@ifunset{bbl@lfthm@#1}{2}{\bbl@cs{lfthm@#1}}}%
{\bbl@ifunset{bbl@rgthm@#1}{3}{\bbl@cs{rgthm@#1}}}}}%
+ % == hyphenrules ==
\bbl@provide@hyphens{#1}%
+ % == frenchspacing == (only if new)
+ \bbl@ifunset{bbl@frspc@#1}{}%
+ {\edef\bbl@tempa{\bbl@cl{frspc}}%
+ \edef\bbl@tempa{\expandafter\@car\bbl@tempa\@nil}%
+ \if u\bbl@tempa % do nothing
+ \else\if n\bbl@tempa % non french
+ \expandafter\bbl@add\csname extras#1\endcsname{%
+ \let\bbl@elt\bbl@fs@elt@i
+ \bbl@fs@chars}%
+ \else\if y\bbl@tempa % french
+ \expandafter\bbl@add\csname extras#1\endcsname{%
+ \let\bbl@elt\bbl@fs@elt@ii
+ \bbl@fs@chars}%
+ \fi\fi\fi}%
+ %
\ifx\bbl@KVP@main\@nil\else
\expandafter\main@language\expandafter{#1}%
\fi}
+% A couple of macros used above, to avoid hashes #######...
+\def\bbl@fs@elt@i#1#2#3{%
+ \ifnum\sfcode`#1=#2\relax
+ \babel@savevariable{\sfcode`#1}%
+ \sfcode`#1=#3\relax
+ \fi}%
+\def\bbl@fs@elt@ii#1#2#3{%
+ \ifnum\sfcode`#1=#3\relax
+ \babel@savevariable{\sfcode`#1}%
+ \sfcode`#1=#2\relax
+ \fi}%
+%
\def\bbl@provide@renew#1{%
\ifx\bbl@KVP@captions\@nil\else
\StartBabelCommands*{#1}{captions}%
@@ -10730,6 +10843,16 @@ help from Bernd Raichle, for which I am grateful.
% more), while captions and dates are left out. But it may happen some
% data has been loaded before automatically, so we first discard the
% saved values.
+\def\bbl@linebreak@export{%
+ \bbl@exportkey{lnbrk}{typography.linebreaking}{h}%
+ \bbl@exportkey{hyphr}{typography.hyphenrules}{}%
+ \bbl@exportkey{lfthm}{typography.lefthyphenmin}{2}%
+ \bbl@exportkey{rgthm}{typography.righthyphenmin}{3}%
+ \bbl@exportkey{prehc}{typography.prehyphenchar}{}%
+ \bbl@exportkey{hyotl}{typography.hyphenate.other.locale}{}%
+ \bbl@exportkey{hyots}{typography.hyphenate.other.script}{}%
+ \bbl@exportkey{intsp}{typography.intraspace}{}%
+ \bbl@exportkey{chrng}{characters.ranges}{}}
\def\bbl@load@basic#1{%
\bbl@ifunset{bbl@inidata@\languagename}{}%
{\getlocaleproperty\bbl@tempa{\languagename}{identification/load.level}%
@@ -10739,21 +10862,12 @@ help from Bernd Raichle, for which I am grateful.
\bbl@ifunset{bbl@lname@#1}%
{\def\BabelBeforeIni##1##2{%
\begingroup
- \catcode`\[=12 \catcode`\]=12 \catcode`\==12
- \catcode`\;=12 \catcode`\|=12 \catcode`\%=14
\let\bbl@ini@captions@aux\@gobbletwo
\def\bbl@inidate ####1.####2.####3.####4\relax ####5####6{}%
\bbl@read@ini{##1}0%
- \bbl@exportkey{prehc}{typography.prehyphenchar}{}%
- \bbl@exportkey{lnbrk}{typography.linebreaking}{h}%
- \bbl@exportkey{lfthm}{typography.lefthyphenmin}{2}%
- \bbl@exportkey{rgthm}{typography.righthyphenmin}{3}%
- \bbl@exportkey{hyphr}{typography.hyphenrules}{}%
- \bbl@exportkey{hyotl}{typography.hyphenate.other.locale}{}%
- \bbl@exportkey{hyots}{typography.hyphenate.other.script}{}%
- \bbl@exportkey{intsp}{typography.intraspace}{}%
- \bbl@exportkey{chrng}{characters.ranges}{}%
+ \bbl@linebreak@export
\bbl@exportkey{dgnat}{numbers.digits.native}{}%
+ \bbl@exportkey{frspc}{typography.frenchspacing}{u}% unset
\ifx\bbl@initoload\relax\endinput\fi
\endgroup}%
\begingroup % boxed, to avoid extra spaces:
@@ -10831,8 +10945,10 @@ help from Bernd Raichle, for which I am grateful.
\\\bbl@elt{\bbl@section}{\bbl@tempa}{\the\toks@}}}%
\expandafter\bbl@inireader\bbl@tempa=#2\@@}%
{}}%
-\def\bbl@read@ini#1#2{%
- \bbl@csarg\edef{lini@\languagename}{#1}%
+\def\bbl@fetch@ini#1#2{%
+ \bbl@exp{\def\\\bbl@inidata{%
+ \\\bbl@elt{identification}{tag.ini}{#1}%
+ \\\bbl@elt{identification}{load.level}{#2}}}%
\openin\bbl@readstream=babel-#1.ini
\ifeof\bbl@readstream
\bbl@error
@@ -10841,14 +10957,8 @@ help from Bernd Raichle, for which I am grateful.
is not complete.}%
{Fix the name or reinstall babel.}%
\else
- \bbl@exp{\def\\\bbl@inidata{%
- \\\bbl@elt{identification}{tag.ini}{#1}%
- \\\bbl@elt{identification}{load.level}{#2}}}%
- \let\bbl@section\@empty
- \let\bbl@savestrings\@empty
- \let\bbl@savetoday\@empty
- \let\bbl@savedate\@empty
- \let\bbl@inireader\bbl@iniskip
+ \catcode`\[=12 \catcode`\]=12 \catcode`\==12
+ \catcode`\;=12 \catcode`\|=12 \catcode`\%=14
\bbl@info{Importing
\ifcase#2 \or font and identification \or basic \fi
data for \languagename\\%
@@ -10862,28 +10972,35 @@ help from Bernd Raichle, for which I am grateful.
\expandafter\bbl@iniline\bbl@line\bbl@iniline
\fi
\repeat
- \bbl@foreach\bbl@renewlist{%
- \bbl@ifunset{bbl@renew@##1}{}{\bbl@inisec[##1]\@@}}%
- \global\let\bbl@renewlist\@empty
- % Ends last section. See \bbl@inisec
- \def\bbl@elt##1##2{\bbl@inireader##1=##2\@@}%
- \bbl@cs{renew@\bbl@section}%
- \global\bbl@csarg\let{renew@\bbl@section}\relax
- \bbl@cs{secpost@\bbl@section}%
- \bbl@csarg{\global\expandafter\let}{inidata@\languagename}\bbl@inidata
- \bbl@exp{\\\bbl@add@list\\\bbl@ini@loaded{\languagename}}%
- \bbl@toglobal\bbl@ini@loaded
\fi}
+\def\bbl@read@ini#1#2{%
+ \bbl@csarg\edef{lini@\languagename}{#1}%
+ \let\bbl@section\@empty
+ \let\bbl@savestrings\@empty
+ \let\bbl@savetoday\@empty
+ \let\bbl@savedate\@empty
+ \let\bbl@inireader\bbl@iniskip
+ \bbl@fetch@ini{#1}{#2}%
+ \bbl@foreach\bbl@renewlist{%
+ \bbl@ifunset{bbl@renew@##1}{}{\bbl@inisec[##1]\@@}}%
+ \global\let\bbl@renewlist\@empty
+ % Ends last section. See \bbl@inisec
+ \def\bbl@elt##1##2{\bbl@inireader##1=##2\@@}%
+ \bbl@cs{renew@\bbl@section}%
+ \global\bbl@csarg\let{renew@\bbl@section}\relax
+ \bbl@cs{secpost@\bbl@section}%
+ \bbl@csarg{\global\expandafter\let}{inidata@\languagename}\bbl@inidata
+ \bbl@exp{\\\bbl@add@list\\\bbl@ini@loaded{\languagename}}%
+ \bbl@toglobal\bbl@ini@loaded}
\def\bbl@iniline#1\bbl@iniline{%
\@ifnextchar[\bbl@inisec{\@ifnextchar;\bbl@iniskip\bbl@inipreread}#1\@@}% ]
% \end{macrocode}
%
% The special cases for comment lines and sections are handled by the
% two following commands. In sections, we provide the posibility to
-% take extra actions at the end or at the start (TODO - but note the last
-% section is not ended). By default, key=val pairs are ignored. The
-% |secpost| ``hook'' is used only by `identification', while |secpre|
-% only by |date.gregorian.licr|.
+% take extra actions at the end or at the start. By default, key=val
+% pairs are ignored. The |secpost| ``hook'' is used only by
+% `identification', while |secpre| only by |date.gregorian.licr|.
%
% \begin{macrocode}
\def\bbl@iniskip#1\@@{}% if starts with ;
@@ -11023,18 +11140,10 @@ help from Bernd Raichle, for which I am grateful.
\bbl@csarg{\global\expandafter\let}{cntr@#1@\languagename}\bbl@tempa
\fi}
\def\bbl@after@ini{%
- \bbl@exportkey{lfthm}{typography.lefthyphenmin}{2}%
- \bbl@exportkey{rgthm}{typography.righthyphenmin}{3}%
- \bbl@exportkey{prehc}{typography.prehyphenchar}{}%
- \bbl@exportkey{lnbrk}{typography.linebreaking}{h}%
- \bbl@exportkey{hyphr}{typography.hyphenrules}{}%
- \bbl@exportkey{hyotl}{typography.hyphenate.other.locale}{}%
- \bbl@exportkey{hyots}{typography.hyphenate.other.script}{}%
- \bbl@exportkey{intsp}{typography.intraspace}{}%
- \bbl@exportkey{jstfy}{typography.justify}{w}%
- \bbl@exportkey{chrng}{characters.ranges}{}%
+ \bbl@linebreak@export
\bbl@exportkey{dgnat}{numbers.digits.native}{}%
\bbl@exportkey{rqtex}{identification.require.babel}{}%
+ \bbl@exportkey{frspc}{typography.frenchspacing}{u}% unset
\bbl@toglobal\bbl@savetoday
\bbl@toglobal\bbl@savedate}
% \end{macrocode}
@@ -11227,18 +11336,6 @@ help from Bernd Raichle, for which I am grateful.
% Arguments are _not_ protected.
\let\bbl@calendar\@empty
\DeclareRobustCommand\localedate[1][]{\bbl@localedate{#1}}
-\def\bbl@cased{% TODO. Move
- \ifx\oe\OE
- \expandafter\in@\expandafter
- {\expandafter\OE\expandafter}\expandafter{\oe}%
- \ifin@
- \bbl@afterelse\expandafter\MakeUppercase
- \else
- \bbl@afterfi\expandafter\MakeLowercase
- \fi
- \else
- \expandafter\@firstofone
- \fi}
\def\bbl@localedate#1#2#3#4{%
\begingroup
\ifx\@empty#1\@empty\else
@@ -11374,8 +11471,6 @@ help from Bernd Raichle, for which I am grateful.
\fi}}%
\fi
\bbl@csarg\bbl@toglobal{lsys@#1}}
-\def\bbl@ifset#1#2#3{% TODO. Move to the correct place.
- \bbl@ifunset{#1}{#3}{\bbl@exp{\\\bbl@ifblank{#1}}{#3}{#2}}}
\def\bbl@xenohyph@d{%
\bbl@ifset{bbl@prehc@\languagename}%
{\ifnum\hyphenchar\font=\defaulthyphenchar
@@ -11410,14 +11505,51 @@ help from Bernd Raichle, for which I am grateful.
\def\BabelBeforeIni##1##2{%
\begingroup
\bbl@add\bbl@secpost@identification{\closein\bbl@readstream }%
- \catcode`\[=12 \catcode`\]=12 \catcode`\==12
- \catcode`\;=12 \catcode`\|=12 \catcode`\%=14
\bbl@read@ini{##1}1%
\endinput % babel- .tex may contain onlypreamble's
\endgroup}% boxed, to avoid extra spaces:
{\bbl@input@texini{#1}}}
% \end{macrocode}
%
+% A tool to define the macros for native digits from the list provided
+% in the |ini| file. Somewhat convoluted because there are 10 digits,
+% but only 9 arguments in \TeX. Non-digits characters are kept. The
+% first macro is the generic “localized” command.
+%
+% \begin{macrocode}
+\def\bbl@setdigits#1#2#3#4#5{%
+ \bbl@exp{%
+ \def\<\languagename digits>####1{% ie, \langdigits
+ \<bbl@digits@\languagename>####1\\\@nil}%
+ \let\<bbl@cntr@digits@\languagename>\<\languagename digits>%
+ \def\<\languagename counter>####1{% ie, \langcounter
+ \\\expandafter\<bbl@counter@\languagename>%
+ \\\csname c@####1\endcsname}%
+ \def\<bbl@counter@\languagename>####1{% ie, \bbl@counter@lang
+ \\\expandafter\<bbl@digits@\languagename>%
+ \\\number####1\\\@nil}}%
+ \def\bbl@tempa##1##2##3##4##5{%
+ \bbl@exp{% Wow, quite a lot of hashes! :-(
+ \def\<bbl@digits@\languagename>########1{%
+ \\\ifx########1\\\@nil % ie, \bbl@digits@lang
+ \\\else
+ \\\ifx0########1#1%
+ \\\else\\\ifx1########1#2%
+ \\\else\\\ifx2########1#3%
+ \\\else\\\ifx3########1#4%
+ \\\else\\\ifx4########1#5%
+ \\\else\\\ifx5########1##1%
+ \\\else\\\ifx6########1##2%
+ \\\else\\\ifx7########1##3%
+ \\\else\\\ifx8########1##4%
+ \\\else\\\ifx9########1##5%
+ \\\else########1%
+ \\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi\\\fi
+ \\\expandafter\<bbl@digits@\languagename>%
+ \\\fi}}}%
+ \bbl@tempa}
+% \end{macrocode}
+%
% Alphabetic counters must be converted from a space separated list to
% an |\ifcase| structure.
%
@@ -11594,7 +11726,7 @@ help from Bernd Raichle, for which I am grateful.
\bbl@adjust@layout{\let\@tabular\bbl@OL@@tabular}}
\@namedef{bbl@ADJ@layout.lists@on}{%
\bbl@adjust@layout{\let\list\bbl@NL@list}}
-\@namedef{bbl@ADJ@layout.lists@on}{%
+\@namedef{bbl@ADJ@layout.lists@off}{%
\bbl@adjust@layout{\let\list\bbl@OL@list}}
\@namedef{bbl@ADJ@hyphenation.extra@on}{%
\bbl@activateposthyphen}
@@ -12051,9 +12183,35 @@ help from Bernd Raichle, for which I am grateful.
% |bbl@font| replaces hardcoded font names inside |\..family| by the
% corresponding macro |\..default|.
%
+% At the time of this writing, \textsf{fontspec} shows a warning about
+% there are languages not available, which some people think refers to
+% \babel{}, even if there is nothing wrong. Here is hack to patch
+% \textsf{fontspec} to avoid the misleading message, which is replaced
+% ba a more explanatory one.
+%
% \begin{macrocode}
%<<*Font selection>>
\bbl@trace{Font handling with fontspec}
+\ifx\ExplSyntaxOn\@undefined\else
+ \ExplSyntaxOn
+ \catcode`\ =10
+ \def\bbl@loadfontspec{%
+ \usepackage{fontspec}%
+ \expandafter
+ \def\csname msg~text~>~fontspec/language-not-exist\endcsname##1##2##3##4{%
+ Font '\l_fontspec_fontname_tl' is using the\\%
+ default features for language '##1'.\\%
+ That's usually fine, because many languages\\%
+ require no specific features, but if the output is\\%
+ not as expected, consider selecting another font.}
+ \expandafter
+ \def\csname msg~text~>~fontspec/no-script\endcsname##1##2##3##4{%
+ Font '\l_fontspec_fontname_tl' is using the\\%
+ default features for script '##2'.\\%
+ That's not always wrong, but if the output is\\%
+ not as expected, consider selecting another font.}}
+ \ExplSyntaxOff
+\fi
\@onlypreamble\babelfont
\newcommand\babelfont[2][]{% 1=langs/scripts 2=fam
\bbl@foreach{#1}{%
@@ -12065,7 +12223,7 @@ help from Bernd Raichle, for which I am grateful.
\edef\bbl@tempa{#1}%
\def\bbl@tempb{#2}% Used by \bbl@bblfont
\ifx\fontspec\@undefined
- \usepackage{fontspec}%
+ \bbl@loadfontspec
\fi
\EnableBabelHook{babel-fontspec}% Just calls \bbl@switchfont
\bbl@bblfont}
@@ -12210,7 +12368,7 @@ help from Bernd Raichle, for which I am grateful.
\let\bbl@mapselect\relax
\let\bbl@temp@fam#4% eg, '\rmfamily', to be restored below
\let#4\@empty % Make sure \renewfontfamily is valid
- \bbl@exp{%
+ \bbl@exp{%
\let\\\bbl@temp@pfam\<\bbl@stripslash#4\space>% eg, '\rmfamily '
\<keys_if_exist:nnF>{fontspec-opentype}{Script/\bbl@cl{sname}}%
{\\\newfontscript{\bbl@cl{sname}}{\bbl@cl{sotf}}}%
@@ -13729,6 +13887,9 @@ end
if not u.find(patt, '()', nil, true) then
patt = '()' .. patt .. '()'
end
+ patt = string.gsub(patt, '%(%)%^', '^()')
+ patt = string.gsub(patt, '%$%(%)', '()$')
+ texio.write('***************' .. patt)
patt = u.gsub(patt, '{(.)}',
function (n)
return '%' .. (tonumber(n) and (tonumber(n)+1) or n)
diff --git a/macros/latex/required/babel/base/babel.ins b/macros/latex/required/babel/base/babel.ins
index 68356b04c0..3112ec6eb5 100644
--- a/macros/latex/required/babel/base/babel.ins
+++ b/macros/latex/required/babel/base/babel.ins
@@ -26,7 +26,7 @@
%% and covered by LPPL is defined by the unpacking scripts (with
%% extension .ins) which are part of the distribution.
%%
-\def\filedate{2020/09/01}
+\def\filedate{2020/10/03}
\def\batchfile{babel.ins}
\input docstrip.tex
diff --git a/macros/latex/required/babel/base/babel.pdf b/macros/latex/required/babel/base/babel.pdf
index 7fa3c8712a..85865d7cf6 100644
--- a/macros/latex/required/babel/base/babel.pdf
+++ b/macros/latex/required/babel/base/babel.pdf
Binary files differ
diff --git a/macros/latex/required/babel/base/bbcompat.dtx b/macros/latex/required/babel/base/bbcompat.dtx
index a94e0170db..09bc92e3ef 100644
--- a/macros/latex/required/babel/base/bbcompat.dtx
+++ b/macros/latex/required/babel/base/bbcompat.dtx
@@ -30,7 +30,7 @@
%
% \iffalse
%<*dtx>
-\ProvidesFile{bbcompat.dtx}[2020/09/01 v3.48]
+\ProvidesFile{bbcompat.dtx}[2020/10/03 v3.49]
%</dtx>
%
%% File 'bbcompat.dtx'