summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/semantex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-12-04 03:01:36 +0000
committerNorbert Preining <norbert@preining.info>2022-12-04 03:01:36 +0000
commitb153d9b098596910fb2be9311f13c4415233c2a2 (patch)
treef0f44c9b4caa5756e6957885e8691c0268920a56 /macros/latex/contrib/semantex
parent34896a353fe22e8ac88ef0b4e39f4fa878e2b0b6 (diff)
CTAN sync 202212040301
Diffstat (limited to 'macros/latex/contrib/semantex')
-rw-r--r--macros/latex/contrib/semantex/semantex.pdfbin397454 -> 397760 bytes
-rw-r--r--macros/latex/contrib/semantex/semantex.sty107
-rw-r--r--macros/latex/contrib/semantex/semantex.tex62
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.lua620
-rw-r--r--macros/latex/contrib/semantex/stripsemantex.sty2
5 files changed, 447 insertions, 344 deletions
diff --git a/macros/latex/contrib/semantex/semantex.pdf b/macros/latex/contrib/semantex/semantex.pdf
index 64e0bae6cf..62ad68d435 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 1937f4e5c4..0543e3c030 100644
--- a/macros/latex/contrib/semantex/semantex.sty
+++ b/macros/latex/contrib/semantex/semantex.sty
@@ -1,5 +1,5 @@
\RequirePackage{xparse,l3keys2e,leftindex,semtex}
-\ProvidesExplPackage{semantex}{2022/10/04}{0.522}{}
+\ProvidesExplPackage{semantex}{2022/12/03}{0.523}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
@@ -10,7 +10,7 @@
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\tl_set:Nn\SemantexVersion{0.522}
+\tl_set:Nn\SemantexVersion{0.523}
\cs_set_eq:NN \semantex_keyval_parse:NNn \keyval_parse:NNn
\cs_set:Npn \semantex_singlekey_parse:Nn#1#2 { \clist_map_function:nN { #2 } #1 }
@@ -7072,6 +7072,7 @@
{dots}{sep~i~dots},
{...}{dots},
{slot}{sep~i~slot},
+ {---}{slot},
{*}{sep~d~*},
{**}{sep~d~**},
},
@@ -7101,12 +7102,14 @@
data~provide=pre~arg,
data~provide=post~arg,
define~keys={
- {arg~dots}{set~arg~keys={...}},
- {arg~...}{set~arg~keys={dots}},
+ {arg~dots}{set~arg~keys={dots}},
+ {arg~...}{set~arg~keys={...}},
{comma~arg~dots}{set~arg~keys={comma~dots}},
{comma~arg~...}{set~arg~keys={comma~...}},
{arg~slot}{set~arg~keys={slot}},
+ {arg~---}{set~arg~keys={---}},
{comma~arg~slot}{set~arg~keys={comma~slot}},
+ {comma~arg~---}{set~arg~keys={comma~---}},
{clear~arg}{ execute={
\semantex_data_tl_clear:nn { ##1 } { arg }
\semantex_data_int_clear:nn { ##1 } { number~of~arguments }
@@ -7303,8 +7306,9 @@
{sep~arg}{set~arg~keys={sep={#1}}},
{comma~arg}{set~arg~keys={comma={#1}}},
{arg~dots~with~other~sep}{set~arg~keys={dots~with~other~sep={#1}}},
- {arg~...~with~other~sep}{set~arg~keys={dots~with~other~sep={#1}}},
+ {arg~...~with~other~sep}{set~arg~keys={...~with~other~sep={#1}}},
{arg~slot~with~other~sep}{set~arg~keys={slot~with~other~sep={#1}}},
+ {arg~---~with~other~sep}{set~arg~keys={---~with~other~sep={#1}}},
},
define~keys[2]={
{arg~with~other~sep}{set~arg~keys={other~sep={#1}{#2}}},
@@ -7380,8 +7384,11 @@
data~provide=post~upper,
define~keys={
{upper~slot}{ set~keys~x={ upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~slot } } },
+ {upper~---}{upper~slot},
{sep~upper~slot}{ set~keys~x={ sep~upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~slot } } },
+ {sep~upper~---}{sep~upper~slot},
{comma~upper~slot}{ set~keys~x={ comma~upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~slot } } },
+ {comma~upper~---}{comma~upper~slot},
{upper~dots}{ set~keys~x={ upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~dots } } },
{upper~...}{upper~dots},
{sep~upper~dots}{ set~keys~x={ sep~upper=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~dots } } },
@@ -7503,6 +7510,15 @@
}
},
},
+ {upper~---~with~other~sep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upper~with~other~sep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upper~slot } }
+ }
+ },
+ },
{set~upper~dots}{
execute={ \semantex_data_tl_set:nnn { ##1 } { upper~dots } { #1 } },
},
@@ -7567,8 +7583,11 @@
data~provide=post~lower,
define~keys={
{lower~slot}{ set~keys~x={ lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~slot } } },
+ {lower~---}{lower~slot},
{sep~lower~slot}{ set~keys~x={ sep~lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~slot } } },
+ {sep~lower~---}{sep~lower~slot},
{comma~lower~slot}{ set~keys~x={ comma~lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~slot } } },
+ {comma~lower~---}{comma~lower~slot},
{lower~dots}{ set~keys~x={ lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~dots } } },
{lower~...}{lower~dots},
{sep~lower~dots}{ set~keys~x={ sep~lower=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~dots } } },
@@ -7689,6 +7708,15 @@
}
},
},
+ {lower~---~with~other~sep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lower~with~other~sep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lower~slot } }
+ }
+ },
+ },
{set~lower~dots}{
execute={ \semantex_data_tl_set:nnn { ##1 } { lower~dots } { #1 } },
},
@@ -7753,8 +7781,11 @@
data~provide=post~upper~left,
define~keys={
{upper~left~slot}{ set~keys~x={ upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~slot } } },
+ {upper~left~---}{upper~left~slot},
{sep~upper~left~slot}{ set~keys~x={ sep~upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~slot } } },
+ {sep~upper~left~---}{sep~upper~left~slot},
{comma~upper~left~slot}{ set~keys~x={ comma~upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~slot } } },
+ {comma~upper~left~---}{comma~upper~left~slot},
{upper~left~dots}{ set~keys~x={ upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~dots } } },
{upper~left~...}{upper~left~dots},
{sep~upper~left~dots}{ set~keys~x={ sep~upper~left=\semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~dots } } },
@@ -7875,6 +7906,15 @@
}
},
},
+ {upper~left~---~with~other~sep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { upper~left~with~other~sep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { upper~left~slot } }
+ }
+ },
+ },
{set~upper~left~dots}{
execute={ \semantex_data_tl_set:nnn { ##1 } { upper~left~dots } { #1 } },
},
@@ -7939,8 +7979,11 @@
data~provide=post~lower~left,
define~keys={
{lower~left~slot}{ set~keys~x={ lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~slot } } },
+ {lower~left~---}{lower~left~slot},
{sep~lower~left~slot}{ set~keys~x={ sep~lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~slot } } },
+ {sep~lower~left~---}{sep~lower~left~slot},
{comma~lower~left~slot}{ set~keys~x={ comma~lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~slot } } },
+ {comma~lower~left~---}{comma~lower~left~slot},
{lower~left~dots}{ set~keys~x={ lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~dots } } },
{lower~left~...}{lower~left~dots},
{sep~lower~left~dots}{ set~keys~x={ sep~lower~left=\semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~dots } } },
@@ -8061,6 +8104,15 @@
}
},
},
+ {lower~left~---~with~other~sep}{
+ execute={
+ \semantex_valuekey:nnx { ##1 } { lower~left~with~other~sep }
+ {
+ { \exp_not:n { #1 } }
+ { \semantex_data_tl_get_exp_not:nn { ##1 } { lower~left~slot } },
+ }
+ },
+ },
{set~lower~left~dots}{
execute={ \semantex_data_tl_set:nnn { ##1 } { lower~left~dots } { #1 } },
},
@@ -8124,16 +8176,19 @@
{ upper~slot }
{ lower~slot },
},
+ {d~---}{d~slot},
{sep~d~slot}{
bool~if~TF={upper~grading}
{ sep~upper~slot }
{ sep~lower~slot },
},
+ {sep~d~---}{sep~d~slot},
{comma~d~slot}{
bool~if~TF={upper~grading}
{ comma~upper~slot }
{ comma~lower~slot },
},
+ {comma~d~---}{comma~d~slot},
{d~dots}{
bool~if~TF={upper~grading}
{ upper~dots }
@@ -8283,6 +8338,15 @@
lower~slot~with~other~sep={#1},
},
},
+ {d~---~with~other~sep}{
+ bool~if~TF={upper~grading}
+ {
+ upper~---~with~other~sep={#1},
+ }
+ {
+ lower~---~with~other~sep={#1},
+ },
+ },
{set~d~dots}{
bool~if~TF={upper~grading}
{
@@ -8302,7 +8366,13 @@
},
},
{d~...~with~other~sep}{
- d~dots~with~other~sep={#1},
+ bool~if~TF={upper~grading}
+ {
+ upper~...~with~other~sep={#1},
+ }
+ {
+ lower~...~with~other~sep={#1},
+ },
},
{d~*~with~other~sep}{
bool~if~TF={upper~grading}
@@ -8369,16 +8439,19 @@
{ lower~slot }
{ upper~slot },
},
+ {i~---}{i~slot},
{sep~i~slot}{
bool~if~TF={upper~grading}
{ sep~lower~slot }
{ sep~upper~slot },
},
+ {sep~i~---}{sep~i~slot},
{comma~i~slot}{
bool~if~TF={upper~grading}
{ comma~lower~slot }
{ comma~upper~slot },
},
+ {comma~i~---}{comma~i~slot},
{i~dots}{
bool~if~TF={upper~grading}
{ lower~dots }
@@ -8527,6 +8600,15 @@
upper~slot~with~other~sep={#1},
},
},
+ {i~---~with~other~sep}{
+ bool~if~TF={upper~grading}
+ {
+ lower~---~with~other~sep={#1},
+ }
+ {
+ upper~---~with~other~sep={#1},
+ },
+ },
{set~i~dots}{
bool~if~TF={upper~grading}
{
@@ -8546,7 +8628,13 @@
},
},
{i~...~with~other~sep}{
- i~dots~with~other~sep={#1},
+ bool~if~TF={upper~grading}
+ {
+ lower~...~with~other~sep={#1},
+ }
+ {
+ upper~...~with~other~sep={#1},
+ },
},
{i~*~with~other~sep}{
bool~if~TF={upper~grading}
@@ -8712,7 +8800,6 @@
{set~arg~without~keyval~x}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
{arg~without~keyval~set~x}{ execute={ \semantex_arg_without_keyval:nx { ##1 } { #1 } } },
{default}{sep={#1}},
- {...~with~other~sep}{dots~with~other~sep={#1}},
{sep}{
execute={
\semantex_data_bool_get:nnTF { ##1 } { next~arg~with~sep }
@@ -8752,6 +8839,7 @@
}
},
},
+ {...~with~other~sep}{dots~with~other~sep={#1}},
{slot~with~other~sep}{
execute={
\semantex_arg_valuekey:nnx { ##1 } { other~sep }
@@ -8761,6 +8849,7 @@
}
},
},
+ {---~with~other~sep}{slot~with~other~sep={#1}},
},
define~arg~keys={
{dots}{
@@ -8789,6 +8878,7 @@
}
},
},
+ {---}{slot},
{comma~slot}{
execute={
\semantex_arg_valuekey:nnx { ##1 } { comma }
@@ -8797,6 +8887,7 @@
}
},
},
+ {comma~---}{comma~slot},
},
define~arg~keys[2]={
{other~sep}{
diff --git a/macros/latex/contrib/semantex/semantex.tex b/macros/latex/contrib/semantex/semantex.tex
index 08587d1ad8..5868300ec0 100644
--- a/macros/latex/contrib/semantex/semantex.tex
+++ b/macros/latex/contrib/semantex/semantex.tex
@@ -1952,7 +1952,7 @@ on \( \vn \)~elements.
]
\NewObject\MyVar\inner[left par=\langle, right par=\rangle]
-In this chapter, se show how to define delimiter commands like \( \norm{slot} \) and~\( \inner{slot,slot} \).
+In this chapter, se show how to define delimiter commands like \( \norm{---} \) and~\( \inner{---,---} \).
This is easy to do via the keys \lstinline!left par! and~\lstinline!right par!:
\begin{lstlisting}
\NewObject\MyVar\norm[left par=\lVert, right par=\rVert]
@@ -1962,10 +1962,10 @@ Indeed:
\begin{LTXexample}
$\norm{\va}$,
$\inner{\va,\vb}$,
-$\inner{slot,slot}$
+$\inner{---,---}$
\end{LTXexample}
In the case where you want to use different kinds of
-norms, say \( \norm[2]{slot} \) or~\( \norm[\infty]{slot} \),
+norms, say \( \norm[2]{---} \) or~\( \norm[\infty]{---} \),
you can use the key~\mylst!output options={$\<options\>$}!.
This allows you to pass the~\<options\> to the output class
(in this case,~\lstinline!\MyVar!):
@@ -3706,12 +3706,12 @@ In the following sections, we include the full list.
Adds a double bullet to the \lstinline!d!-index.
\item
- \mylst!slot!
+ \mylst!---!, \mylst!slot!
Adds a slot to the \lstinline!i!-index.
\item
- \mylst!dots!, \mylst!...!
+ \mylst!...!, \mylst!dots!
Adds three dots to the \lstinline!i!-index.
@@ -4034,33 +4034,35 @@ In the following sections, we include the full list.
argument by the \<separator\>.
\item
+ \mylst!arg --- with other sep={$\<separator\>$}!,
\mylst!arg slot with other sep={$\<separator\>$}!
Adds a slot to the argument, separated from any previous
argument by the \<separator\>.
\item
- \mylst!arg dots!, \mylst!arg ...!
+ \mylst!arg ...!, \mylst!arg dots!
Adds three dots to the argument,
separated from any previous arguments
by the standard separator.
\item
- \mylst!comma arg dots!, \mylst!comma arg ...!
+ \mylst!comma arg ...!, \mylst!comma arg dots!
Adds three dots to the argument,
separated from any previous arguments
by a comma.
\item
- \mylst!arg slot!
+ \mylst!arg ---!, \mylst!arg slot!
Adds a slot to the argument,
separated from any previous arguments
by the standard separator.
\item
+ \mylst!comma arg ---!,
\mylst!comma arg slot!
Adds a slot to the argument,
@@ -4156,12 +4158,14 @@ In the following sections, we include the full list.
any prevous upper index by~\<separator\>.
\item
+ \mylst!upper ---!,
\mylst!upper slot!
Adds a slot to the upper index,
with no separator from any previous upper index.
\item
+ \mylst!sep upper ---!,
\mylst!sep upper slot!
Adds a slot to the upper index,
@@ -4169,6 +4173,7 @@ In the following sections, we include the full list.
index by the default separator.
\item
+ \mylst!comma upper ---!,
\mylst!comma upper slot!
Adds a slot to the upper index,
@@ -4182,6 +4187,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!upper --- with other sep={$\<separator\>$}!,\\
\mylst!upper slot with other sep={$\<separator\>$}!
@@ -4364,20 +4370,20 @@ In the following sections, we include the full list.
any prevous lower index by~\<separator\>.
\item
- \mylst!lower slot!
+ \mylst!lower ---!, \mylst!lower slot!
Adds a slot to the lower index,
with no separator from any previous lower index.
\item
- \mylst!sep lower slot!
+ \mylst!sep lower ---!, \mylst!sep lower slot!
Adds a slot to the lower index,
separated from any previous lower
index by the default separator.
\item
- \mylst!comma lower slot!
+ \mylst!comma lower ---!, \mylst!comma lower slot!
Adds a slot to the lower index,
separated from any previous lower
@@ -4390,6 +4396,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!lower --- with other sep={$\<separator\>$}!,\\
\mylst!lower slot with other sep={$\<separator\>$}!
@@ -4572,20 +4579,20 @@ In the following sections, we include the full list.
any prevous upper left index by~\<separator\>.
\item
- \mylst!upper left slot!
+ \mylst!upper left ---!, \mylst!upper left slot!
Adds a slot to the upper left index,
with no separator from any previous upper left index.
\item
- \mylst!sep upper left slot!
+ \mylst!sep upper left ---!, \mylst!sep upper left slot!
Adds a slot to the upper left index,
separated from any previous upper left
index by the default separator.
\item
- \mylst!comma upper left slot!
+ \mylst!comma upper left ---!, \mylst!comma upper left slot!
Adds a slot to the upper left index,
separated from any previous upper left
@@ -4598,6 +4605,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!upper left --- with other sep={$\<separator\>$}!,\\
\mylst!upper left slot with other sep={$\<separator\>$}!
@@ -4780,20 +4788,20 @@ In the following sections, we include the full list.
any prevous lower left index by~\<separator\>.
\item
- \mylst!lower left slot!
+ \mylst!lower left ---!, \mylst!lower left slot!
Adds a slot to the lower left index,
with no separator from any previous lower left index.
\item
- \mylst!sep lower left slot!
+ \mylst!sep lower left ---!, \mylst!sep lower left slot!
Adds a slot to the lower left index,
separated from any previous lower left
index by the default separator.
\item
- \mylst!comma lower left slot!
+ \mylst!comma lower left ---!, \mylst!comma lower left slot!
Adds a slot to the lower left index,
separated from any previous lower left
@@ -4806,6 +4814,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!lower left --- with other sep={$\<separator\>$}!,\\
\mylst!lower left slot with other sep={$\<separator\>$}!
@@ -4988,20 +4997,20 @@ In the following sections, we include the full list.
any prevous \lstinline!d!-index by~\<separator\>.
\item
- \mylst!d slot!
+ \mylst!d ---!, \mylst!d slot!
Adds a slot to the \lstinline!d!-index,
with no separator from any previous \lstinline!d!-index.
\item
- \mylst!sep d slot!
+ \mylst!sep d ---!, \mylst!sep d slot!
Adds a slot to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
by the default separator.
\item
- \mylst!comma d slot!
+ \mylst!comma d ---!, \mylst!comma d slot!
Adds a slot to the \lstinline!d!-index,
separated from any previous \lstinline!d!-index
@@ -5014,6 +5023,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!d --- with other sep={$\<separator\>$}!,
\mylst!d slot with other sep={$\<separator\>$}!
Adds a slot to the \lstinline!d!-index, separated
@@ -5195,20 +5205,20 @@ In the following sections, we include the full list.
any prevous \lstinline!i!-index by~\<separator\>.
\item
- \mylst!i slot!
+ \mylst!i ---!, \mylst!i slot!
Adds a slot to the \lstinline!i!-index,
with no separator from any previous \lstinline!i!-index.
\item
- \mylst!sep i slot!
+ \mylst!sep i ---!, \mylst!sep i slot!
Adds a slot to the \lstinline!i!-index,
separated from any previous \lstinline!i!-index
by the default separator.
\item
- \mylst!comma i slot!
+ \mylst!comma i ---!, \mylst!comma i slot!
Adds a slot to the \lstinline!i!-index,
separated from any previous \lstinline!i!-index
@@ -5221,6 +5231,7 @@ In the following sections, we include the full list.
By default, this is~\lstinline!{-}!.
\item
+ \mylst!i --- with other sep={$\<separator\>$}!,
\mylst!i slot with other sep={$\<separator\>$}!
@@ -5445,14 +5456,14 @@ These are the predefined keys that work inside the argument.
by a comma.
\item
- \mylst!slot!
+ \mylst!---!, \mylst!slot!
Adds a slot to the argument,
separated from any previous argument
by the default separator.
\item
- \mylst!comma slot!
+ \mylst!comma ---!, \mylst!comma slot!
Adds a slot to the argument,
separated from any previous argument
@@ -5480,6 +5491,7 @@ These are the predefined keys that work inside the argument.
by~\<separator\>.
\item
+ \mylst!--- with other sep={$\<separator\>$}!,
\mylst!slot with other sep={$\<separator\>$}!
Adds a slot to the argument, separated
diff --git a/macros/latex/contrib/semantex/stripsemantex.lua b/macros/latex/contrib/semantex/stripsemantex.lua
index d0eb5d1963..30d4c58be6 100644
--- a/macros/latex/contrib/semantex/stripsemantex.lua
+++ b/macros/latex/contrib/semantex/stripsemantex.lua
@@ -1,311 +1,311 @@
--- aliases for protected environments
-local assert, io_open
- = assert, io.open
-
--- load the ltn12 module
-local ltn12 = require("ltn12")
-
--- No more global accesses after this point
-if _VERSION == "Lua 5.2" then _ENV = nil end
-
--- copy a file
-copy_file = function(path_src, path_dst)
- ltn12.pump.all(
- ltn12.source.file(assert(io_open(path_src, "rb"))),
- ltn12.sink.file(assert(io_open(path_dst, "wb")))
- )
-end
-
-openFile = function(file)
- f = io.open(file, "r")
- filecontent = f:read("*all")
- local beginDocPosition = filecontent:find('\\begin{document}')
- if not beginDocPosition then
- tex.sprint( [[\begingroup\ExplSyntaxOn
- \msg_fatal:nnn { stripsemantex } { begin_document_not_found } { ]] .. file .. [[ }
- \endgroup]] )
- return
- end
- precontent = filecontent:sub(1,beginDocPosition-1)
- content = filecontent:sub(beginDocPosition,-1)
- f:close()
-end
-
-closeFile = function(file)
- f = io.open(file, "w")
- f:write(precontent .. content)
- f:close()
-end
-
-removeStricttexFormatting = function(str)
- -- We do this in case the package "stricttex" was used
- str = str:gsub('numberZERO','0')
- str = str:gsub('numberONE','1')
- str = str:gsub('numberTWO','2')
- str = str:gsub('numberTHREE','3')
- str = str:gsub('numberFOUR','4')
- str = str:gsub('numberFIVE','5')
- str = str:gsub('numberSIX','6')
- str = str:gsub('numberSEVEN','7')
- str = str:gsub('numberEIGHT','8')
- str = str:gsub('numberNINE','9')
- str = str:gsub('symbolPRIME','\'')
- return str
-end
-
-addIDsToRegisters = function(str)
- str = removeStricttexFormatting(str)
- content = content:gsub('\\' .. str .. '([^%a])' ,'\\SemantexID{}\\' .. str .. '%1')
- -- '%f[^%a]' does not work here, as it will not react if the last character of str is a number,
- -- which stricttex allows.
- -- Because of this choice, there will be an issue if you use stricttex and let
- -- \<command> by a SemanTeX command and \<command>' be a non-SemanTeX command.
- -- So simply *don't do that*.
-end
-
-removeSuperfluousIDs = function()
- local p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
- while p do
- content = content:gsub('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)','%1%2')
- p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
- end
- content = content:gsub('parent(%s*)=(%s*)\\SemantexID{}','parent%1=%2')
- content = content:gsub('class(%s*)=(%s*)\\SemantexID{}','class%1=%2')
- content = content:gsub('clone(%s*)=(%s*)\\SemantexID{}','clone%1=%2')
- content = content:gsub('copy(%s*)=(%s*)\\SemantexID{}','copy%1=%2')
- content = content:gsub('\\New(%w+)Class(%s*{?)\\SemantexID{}','\\New%1Class%2')
- content = content:gsub('\\NewObject(%s*{?%s*)\\SemantexID{}(\\%w+%s*}?%s*{?%s*)\\SemantexID{}', '\\NewObject%1%2')
- content = content:gsub('\\SetupClass(%s*{?%s*)\\SemantexID{}', '\\SetupClass%1')
- content = content:gsub('\\SetupObject(%s*{?%s*)\\SemantexID{}', '\\SetupObject%1')
-end
-
-addNumbersToIDs = function()
- local n = 0
- local p,q = string.find(content,'\\SemantexID{}')
- while q do
- n = n + 1
- content = content:sub(1,q-1) .. n .. content:sub(q,-1)
- p, q = string.find(content,'\\SemantexID{}')
- end
-end
-
-semantexIDluacommand = function(id, source, output)
- local p, q = string.find(content, '\\SemantexID{' .. id .. '}')
-
- while p do
- content = content:sub(1,p-1) .. content:sub(q+1,-1)
-
- source = source:gsub('%s+', '')
-
- -- We do this in case the package "stricttex" was used
- source = removeStricttexFormatting(source)
-
- -- This is because #1's in the code becomes ##1
- -- in the .semtex file.
- source = source:gsub('#(%d)', '%1')
-
- local length = source:len()
-
- local i = 1
-
- local s
-
- while i <= length do
- s = content:sub(p,p)
- if s == source:sub(i,i) then
- content = content:sub(1 , p-1) .. content:sub(p+1, -1)
- i = i + 1
- elseif s:match('%s') then
- content = content:sub(1, p-1) .. content:sub(p+1, -1)
- elseif s == '%' then
- content = content:sub(1 , p-1) .. content:sub(p,-1):gsub('%%.-\n','',1)
- elseif s == '{' then
- -- In this case, we remove the corresponding right brace,
- -- once we find it
- local netto = 1 -- The current brace group level
- local q = 0 -- The position we have moved forward so far
- while netto > 0 do
- q = q + 1
- local e = content:sub(p+q,p+q)
- if e == '}' then
- netto = netto - 1
- elseif e == '{' then
- netto = netto + 1
- elseif e == '\\' then
- q = q + 1
- elseif e == '%' then
- content = content:sub(1, p+q-1) .. content:sub(p+q,-1):gsub('%%.-\n','',1)
- q = q - 1
- end
- end
- content = content:sub(1,p-1) .. content:sub(p+1,p+q-1) .. content:sub(p+q+1,-1)
- elseif s == '<' and content:sub(p+1,p+2) == '[>' then
- content = content:sub(1,p-1) .. content:sub(p+3,-1)
- i = i + 1
- elseif s == '<' and content:sub(p+1,p+2) == ']>' then
- content = content:sub(1,p-1) .. content:sub(p+3,-1)
- i = i + 1
- elseif source:sub(i,i) == '{' then
- -- In this case, we remove the corresponding right brace,
- -- once we find it
- local netto = 1 -- The current brace group level
- local q = 0 -- The position we have moved forward so far
- while netto > 0 do
- q = q + 1
- local e = source:sub(i+q,i+q)
- if e == '}' then
- netto = netto - 1
- elseif e == '{' then
- netto = netto + 1
- elseif e == '\\' then
- q = q + 1
- -- there is no chance that the source contains an unescaped %, so we do not
- -- check for this
- end
- end
- source = source:sub(1,i-1) .. source:sub(i+1,i+q-1) .. source:sub(i+q+1,-1)
- length = source:len()
- else
- tex.sprint( [[\begingroup\ExplSyntaxOn
- \msg_fatal:nnnn { stripsemantex } { source_not_expected } { ]] .. source:sub(i,i) .. [[ } { ]] .. s .. [[ }
- \endgroup]] )
- break
- end
- end
-
-
- output = output:gsub('%s*\\sp {', '^{')
- output = output:gsub('%s*\\sb {', '_{')
- output = output:gsub('\\mathopen \\big ', '\\bigl')
- output = output:gsub('\\mathclose \\big ', '\\bigr')
- output = output:gsub('\\mathopen \\Big ', '\\Bigl')
- output = output:gsub('\\mathclose \\Big ', '\\Bigr')
- output = output:gsub('\\mathopen \\bigg ', '\\biggl')
- output = output:gsub('\\mathclose \\bigg ', '\\biggr')
- output = output:gsub('\\mathopen \\Bigg ', '\\Biggl')
- output = output:gsub('\\mathclose \\Bigg ', '\\Biggr')
- output = output:gsub('\\mathopen %(', '(')
- output = output:gsub('\\mathclose %)', ')')
- output = output:gsub('\\mathopen %[', '[')
- output = output:gsub('\\mathclose %]', ']')
- output = output:gsub('\\mathopen \\{', '\\{')
- output = output:gsub('\\mathclose \\}', '\\}')
- output = output:gsub('\\mathopen \\lbrace', '\\lbrace')
- output = output:gsub('\\mathclose \\rbrace', '\\rbrace')
- output = output:gsub('\\mathopen \\lbrack', '\\lbrack')
- output = output:gsub('\\mathclose \\rbrack', '\\rbrack')
- output = output:gsub('\\mathopen \\langle', '\\langle')
- output = output:gsub('\\mathclose \\rangle', '\\rangle')
- output = output:gsub('\\mathopen \\lvert', '\\lvert')
- output = output:gsub('\\mathclose \\rvert', '\\rvert')
- output = output:gsub('\\mathopen \\vert', '\\lvert')
- output = output:gsub('\\mathclose \\vert', '\\rvert')
- output = output:gsub('\\mathopen \\lVert', '\\lVert')
- output = output:gsub('\\mathclose \\rVert', '\\rVert')
- output = output:gsub('\\mathopen \\Vert', '\\lVert')
- output = output:gsub('\\mathclose \\Vert', '\\rVert')
- output = output:gsub('%^{\\prime }', '\'')
- output = output:gsub('%^{\\prime \\prime }', '\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime }', '\'\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime \\prime }', '\'\'\'\'')
- output = output:gsub('%^{\\prime \\prime \\prime \\prime \\prime }', '\'\'\'\'\'')
-
- output = output:gsub('%s+%f[{}%[%]%(%)%$,]','')
- output = output:gsub('([}%]%)])%f[\\%w%+%-%(%[=]', '%1 ')
- output = output:gsub(',',', ')
- output = output:gsub('%s+$', '')
-
-
- -- We now check whether the string we add will follow right
- -- after a control sequence, causing it to be interpreted
- -- as part of that control sequence.
- -- Because we want to allow the user to use stricttex, we
- -- check for alphanumerical control sequences rather than
- -- just alphabetic ones. This could add spaces that
- -- the user might not have intended, but it's a minor issue.
- if output:sub(1,1):match('%w') and content:sub(1, p-1):match('\\%w+$') then
- content = content:sub(1,p-1) .. ' ' .. output .. content:sub(p,-1)
- else
- content = content:sub(1,p-1) .. output .. content:sub(p,-1)
- end
- p, q = string.find(content, '\\SemantexID{' .. id .. '}')
- end
-end
-
-stripRemainingSemantexIDs = function()
- content = content:gsub('\\SemantexID{%d+}', '')
-end
-
-removeParenthesisCommands = function()
- content = content:gsub('\\SemantexMathOpen \\bigg%s?', '\\biggl')
- content = content:gsub('\\SemantexMathClose \\bigg%s?', '\\biggr')
- content = content:gsub('\\SemantexMathOpen \\Bigg%s?', '\\Biggl')
- content = content:gsub('\\SemantexMathClose \\Bigg%s?', '\\Biggr')
- content = content:gsub('\\SemantexMathOpen \\big%s?', '\\bigl')
- content = content:gsub('\\SemantexMathClose \\big%s?', '\\bigr')
- content = content:gsub('\\SemantexMathOpen \\Big%s?', '\\Bigl')
- content = content:gsub('\\SemantexMathClose \\Big%s?', '\\Bigr')
- content = content:gsub('\\SemantexMathOpen{} %(', '(')
- content = content:gsub('%s*\\SemantexMathClose{}%)', ')')
- content = content:gsub('\\SemantexMathOpen{} %[', '[')
- content = content:gsub('%s*\\SemantexMathClose{}%]', ']')
- content = content:gsub('\\SemantexMathOpen{} \\{', '\\{')
- content = content:gsub('%s*\\SemantexMathClose{} \\}', '\\}')
- content = content:gsub('\\SemantexMathOpen{} \\lbrace', '\\lbrace')
- content = content:gsub('\\SemantexMathClose{} \\rbrace', '\\rbrace')
- content = content:gsub('\\SemantexMathOpen{} \\lbrack', '\\rbrack')
- content = content:gsub('\\SemantexMathClose{} \\rbrack', '\\rbrack')
- content = content:gsub('\\SemantexMathOpen{} \\langle', '\\langle')
- content = content:gsub('\\SemantexMathClose{} \\rangle', '\\rangle')
- content = content:gsub('\\SemantexMathOpen{} \\lvert', '\\lvert')
- content = content:gsub('\\SemantexMathClose{} \\rvert', '\\rvert')
- content = content:gsub('\\SemantexMathOpen{} \\vert', '\\lvert')
- content = content:gsub('\\SemantexMathClose{} \\vert', '\\rvert')
- content = content:gsub('\\SemantexMathOpen{} \\lVert', '\\lVert')
- content = content:gsub('\\SemantexMathClose{} \\rVert', '\\rVert')
- content = content:gsub('\\SemantexMathOpen{} \\Vert', '\\lVert')
- content = content:gsub('\\SemantexMathClose{} \\Vert', '\\rVert')
- content = content:gsub('\\SemantexMathOpen{} .%s?', '')
- content = content:gsub('\\SemantexMathClose{} .%s?', '')
- content = content:gsub('\\SemantexMathOpen{}', '\\mathopen ')
- content = content:gsub('\\SemantexMathClose{}', '\\mathclose ')
- content = content:gsub('\\SemantexMathOpenAuto%s?', '\\SemantexLeft')
- content = content:gsub('\\SemantexMathCloseAuto%s?', '\\SemantexRight')
- content = content:gsub('\\SemantexMathOpenNoPar%s?', '')
- content = content:gsub('\\SemantexMathCloseNoPar%s?', '')
- content = content:gsub('\\SemantexMathOpen%s?', '\\mathopen')
- content = content:gsub('\\SemantexMathClose%s?', '\\mathclose')
-end
-
-stripComments = function()
- content = content:gsub('\\%%', '\\StripSemantexEscapedPercent')
- content = content:gsub('(\\%w+)%%.-\n%s*', '%1 ')
- content = content:gsub('%%.-\n%s*', '')
- content = content:gsub('\\StripSemantexEscapedPercent', '\\%%')
-end
-
-addSemtexPackageToFile = function()
- content = [[% The following was added by "stripsemantex":
-
-\usepackage{semtex,leftindex,graphicx}
-
-\providecommand\SemantexLeft{%
- \mathopen{}\mathclose\bgroup\left
-}
-
-\providecommand\SemantexRight{%
- \aftergroup\egroup\right
-}
-
-\makeatletter
-\DeclareRobustCommand\SemantexBullet{%
- \mathord{\mathpalette\SemantexBullet@{0.5}}%
-}
-\newcommand\SemantexBullet@[2]{%
- \vcenter{\hbox{\scalebox{#2}{$\m@th#1\bullet$}}}%
-}
-\DeclareRobustCommand\SemantexDoubleBullet{\SemantexBullet \SemantexBullet}
-\makeatother
-
-]] .. content
+-- aliases for protected environments
+local assert, io_open
+ = assert, io.open
+
+-- load the ltn12 module
+local ltn12 = require("ltn12")
+
+-- No more global accesses after this point
+if _VERSION == "Lua 5.2" then _ENV = nil end
+
+-- copy a file
+copy_file = function(path_src, path_dst)
+ ltn12.pump.all(
+ ltn12.source.file(assert(io_open(path_src, "rb"))),
+ ltn12.sink.file(assert(io_open(path_dst, "wb")))
+ )
+end
+
+openFile = function(file)
+ f = io.open(file, "r")
+ filecontent = f:read("*all")
+ local beginDocPosition = filecontent:find('\\begin{document}')
+ if not beginDocPosition then
+ tex.sprint( [[\begingroup\ExplSyntaxOn
+ \msg_fatal:nnn { stripsemantex } { begin_document_not_found } { ]] .. file .. [[ }
+ \endgroup]] )
+ return
+ end
+ precontent = filecontent:sub(1,beginDocPosition-1)
+ content = filecontent:sub(beginDocPosition,-1)
+ f:close()
+end
+
+closeFile = function(file)
+ f = io.open(file, "w")
+ f:write(precontent .. content)
+ f:close()
+end
+
+removeStricttexFormatting = function(str)
+ -- We do this in case the package "stricttex" was used
+ str = str:gsub('numberZERO','0')
+ str = str:gsub('numberONE','1')
+ str = str:gsub('numberTWO','2')
+ str = str:gsub('numberTHREE','3')
+ str = str:gsub('numberFOUR','4')
+ str = str:gsub('numberFIVE','5')
+ str = str:gsub('numberSIX','6')
+ str = str:gsub('numberSEVEN','7')
+ str = str:gsub('numberEIGHT','8')
+ str = str:gsub('numberNINE','9')
+ str = str:gsub('symbolPRIME','\'')
+ return str
+end
+
+addIDsToRegisters = function(str)
+ str = removeStricttexFormatting(str)
+ content = content:gsub('\\' .. str .. '([^%a])' ,'\\SemantexID{}\\' .. str .. '%1')
+ -- '%f[^%a]' does not work here, as it will not react if the last character of str is a number,
+ -- which stricttex allows.
+ -- Because of this choice, there will be an issue if you use stricttex and let
+ -- \<command> by a SemanTeX command and \<command>' be a non-SemanTeX command.
+ -- So simply *don't do that*.
+end
+
+removeSuperfluousIDs = function()
+ local p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
+ while p do
+ content = content:gsub('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)','%1%2')
+ p = content:find('([^\\]%%[^\n]-)\\SemantexID{}([^\n]-\n)')
+ end
+ content = content:gsub('parent(%s*)=(%s*)\\SemantexID{}','parent%1=%2')
+ content = content:gsub('class(%s*)=(%s*)\\SemantexID{}','class%1=%2')
+ content = content:gsub('clone(%s*)=(%s*)\\SemantexID{}','clone%1=%2')
+ content = content:gsub('copy(%s*)=(%s*)\\SemantexID{}','copy%1=%2')
+ content = content:gsub('\\New(%w+)Class(%s*{?)\\SemantexID{}','\\New%1Class%2')
+ content = content:gsub('\\NewObject(%s*{?%s*)\\SemantexID{}(\\%w+%s*}?%s*{?%s*)\\SemantexID{}', '\\NewObject%1%2')
+ content = content:gsub('\\SetupClass(%s*{?%s*)\\SemantexID{}', '\\SetupClass%1')
+ content = content:gsub('\\SetupObject(%s*{?%s*)\\SemantexID{}', '\\SetupObject%1')
+end
+
+addNumbersToIDs = function()
+ local n = 0
+ local p,q = string.find(content,'\\SemantexID{}')
+ while q do
+ n = n + 1
+ content = content:sub(1,q-1) .. n .. content:sub(q,-1)
+ p, q = string.find(content,'\\SemantexID{}')
+ end
+end
+
+semantexIDluacommand = function(id, source, output)
+ local p, q = string.find(content, '\\SemantexID{' .. id .. '}')
+
+ while p do
+ content = content:sub(1,p-1) .. content:sub(q+1,-1)
+
+ source = source:gsub('%s+', '')
+
+ -- We do this in case the package "stricttex" was used
+ source = removeStricttexFormatting(source)
+
+ -- This is because #1's in the code becomes ##1
+ -- in the .semtex file.
+ source = source:gsub('#(%d)', '%1')
+
+ local length = source:len()
+
+ local i = 1
+
+ local s
+
+ while i <= length do
+ s = content:sub(p,p)
+ if s == source:sub(i,i) then
+ content = content:sub(1 , p-1) .. content:sub(p+1, -1)
+ i = i + 1
+ elseif s:match('%s') then
+ content = content:sub(1, p-1) .. content:sub(p+1, -1)
+ elseif s == '%' then
+ content = content:sub(1 , p-1) .. content:sub(p,-1):gsub('%%.-\n','',1)
+ elseif s == '{' then
+ -- In this case, we remove the corresponding right brace,
+ -- once we find it
+ local netto = 1 -- The current brace group level
+ local q = 0 -- The position we have moved forward so far
+ while netto > 0 do
+ q = q + 1
+ local e = content:sub(p+q,p+q)
+ if e == '}' then
+ netto = netto - 1
+ elseif e == '{' then
+ netto = netto + 1
+ elseif e == '\\' then
+ q = q + 1
+ elseif e == '%' then
+ content = content:sub(1, p+q-1) .. content:sub(p+q,-1):gsub('%%.-\n','',1)
+ q = q - 1
+ end
+ end
+ content = content:sub(1,p-1) .. content:sub(p+1,p+q-1) .. content:sub(p+q+1,-1)
+ elseif s == '<' and content:sub(p+1,p+2) == '[>' then
+ content = content:sub(1,p-1) .. content:sub(p+3,-1)
+ i = i + 1
+ elseif s == '<' and content:sub(p+1,p+2) == ']>' then
+ content = content:sub(1,p-1) .. content:sub(p+3,-1)
+ i = i + 1
+ elseif source:sub(i,i) == '{' then
+ -- In this case, we remove the corresponding right brace,
+ -- once we find it
+ local netto = 1 -- The current brace group level
+ local q = 0 -- The position we have moved forward so far
+ while netto > 0 do
+ q = q + 1
+ local e = source:sub(i+q,i+q)
+ if e == '}' then
+ netto = netto - 1
+ elseif e == '{' then
+ netto = netto + 1
+ elseif e == '\\' then
+ q = q + 1
+ -- there is no chance that the source contains an unescaped %, so we do not
+ -- check for this
+ end
+ end
+ source = source:sub(1,i-1) .. source:sub(i+1,i+q-1) .. source:sub(i+q+1,-1)
+ length = source:len()
+ else
+ tex.sprint( [[\begingroup\ExplSyntaxOn
+ \msg_fatal:nnnn { stripsemantex } { source_not_expected } { ]] .. source:sub(i,i) .. [[ } { ]] .. s .. [[ }
+ \endgroup]] )
+ break
+ end
+ end
+
+
+ output = output:gsub('%s*\\sp {', '^{')
+ output = output:gsub('%s*\\sb {', '_{')
+ output = output:gsub('\\mathopen \\big ', '\\bigl')
+ output = output:gsub('\\mathclose \\big ', '\\bigr')
+ output = output:gsub('\\mathopen \\Big ', '\\Bigl')
+ output = output:gsub('\\mathclose \\Big ', '\\Bigr')
+ output = output:gsub('\\mathopen \\bigg ', '\\biggl')
+ output = output:gsub('\\mathclose \\bigg ', '\\biggr')
+ output = output:gsub('\\mathopen \\Bigg ', '\\Biggl')
+ output = output:gsub('\\mathclose \\Bigg ', '\\Biggr')
+ output = output:gsub('\\mathopen %(', '(')
+ output = output:gsub('\\mathclose %)', ')')
+ output = output:gsub('\\mathopen %[', '[')
+ output = output:gsub('\\mathclose %]', ']')
+ output = output:gsub('\\mathopen \\{', '\\{')
+ output = output:gsub('\\mathclose \\}', '\\}')
+ output = output:gsub('\\mathopen \\lbrace', '\\lbrace')
+ output = output:gsub('\\mathclose \\rbrace', '\\rbrace')
+ output = output:gsub('\\mathopen \\lbrack', '\\lbrack')
+ output = output:gsub('\\mathclose \\rbrack', '\\rbrack')
+ output = output:gsub('\\mathopen \\langle', '\\langle')
+ output = output:gsub('\\mathclose \\rangle', '\\rangle')
+ output = output:gsub('\\mathopen \\lvert', '\\lvert')
+ output = output:gsub('\\mathclose \\rvert', '\\rvert')
+ output = output:gsub('\\mathopen \\vert', '\\lvert')
+ output = output:gsub('\\mathclose \\vert', '\\rvert')
+ output = output:gsub('\\mathopen \\lVert', '\\lVert')
+ output = output:gsub('\\mathclose \\rVert', '\\rVert')
+ output = output:gsub('\\mathopen \\Vert', '\\lVert')
+ output = output:gsub('\\mathclose \\Vert', '\\rVert')
+ output = output:gsub('%^{\\prime }', '\'')
+ output = output:gsub('%^{\\prime \\prime }', '\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime }', '\'\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime \\prime }', '\'\'\'\'')
+ output = output:gsub('%^{\\prime \\prime \\prime \\prime \\prime }', '\'\'\'\'\'')
+
+ output = output:gsub('%s+%f[{}%[%]%(%)%$,]','')
+ output = output:gsub('([}%]%)])%f[\\%w%+%-%(%[=]', '%1 ')
+ output = output:gsub(',',', ')
+ output = output:gsub('%s+$', '')
+
+
+ -- We now check whether the string we add will follow right
+ -- after a control sequence, causing it to be interpreted
+ -- as part of that control sequence.
+ -- Because we want to allow the user to use stricttex, we
+ -- check for alphanumerical control sequences rather than
+ -- just alphabetic ones. This could add spaces that
+ -- the user might not have intended, but it's a minor issue.
+ if output:sub(1,1):match('%w') and content:sub(1, p-1):match('\\%w+$') then
+ content = content:sub(1,p-1) .. ' ' .. output .. content:sub(p,-1)
+ else
+ content = content:sub(1,p-1) .. output .. content:sub(p,-1)
+ end
+ p, q = string.find(content, '\\SemantexID{' .. id .. '}')
+ end
+end
+
+stripRemainingSemantexIDs = function()
+ content = content:gsub('\\SemantexID{%d+}', '')
+end
+
+removeParenthesisCommands = function()
+ content = content:gsub('\\SemantexMathOpen \\bigg%s?', '\\biggl')
+ content = content:gsub('\\SemantexMathClose \\bigg%s?', '\\biggr')
+ content = content:gsub('\\SemantexMathOpen \\Bigg%s?', '\\Biggl')
+ content = content:gsub('\\SemantexMathClose \\Bigg%s?', '\\Biggr')
+ content = content:gsub('\\SemantexMathOpen \\big%s?', '\\bigl')
+ content = content:gsub('\\SemantexMathClose \\big%s?', '\\bigr')
+ content = content:gsub('\\SemantexMathOpen \\Big%s?', '\\Bigl')
+ content = content:gsub('\\SemantexMathClose \\Big%s?', '\\Bigr')
+ content = content:gsub('\\SemantexMathOpen{} %(', '(')
+ content = content:gsub('%s*\\SemantexMathClose{}%)', ')')
+ content = content:gsub('\\SemantexMathOpen{} %[', '[')
+ content = content:gsub('%s*\\SemantexMathClose{}%]', ']')
+ content = content:gsub('\\SemantexMathOpen{} \\{', '\\{')
+ content = content:gsub('%s*\\SemantexMathClose{} \\}', '\\}')
+ content = content:gsub('\\SemantexMathOpen{} \\lbrace', '\\lbrace')
+ content = content:gsub('\\SemantexMathClose{} \\rbrace', '\\rbrace')
+ content = content:gsub('\\SemantexMathOpen{} \\lbrack', '\\rbrack')
+ content = content:gsub('\\SemantexMathClose{} \\rbrack', '\\rbrack')
+ content = content:gsub('\\SemantexMathOpen{} \\langle', '\\langle')
+ content = content:gsub('\\SemantexMathClose{} \\rangle', '\\rangle')
+ content = content:gsub('\\SemantexMathOpen{} \\lvert', '\\lvert')
+ content = content:gsub('\\SemantexMathClose{} \\rvert', '\\rvert')
+ content = content:gsub('\\SemantexMathOpen{} \\vert', '\\lvert')
+ content = content:gsub('\\SemantexMathClose{} \\vert', '\\rvert')
+ content = content:gsub('\\SemantexMathOpen{} \\lVert', '\\lVert')
+ content = content:gsub('\\SemantexMathClose{} \\rVert', '\\rVert')
+ content = content:gsub('\\SemantexMathOpen{} \\Vert', '\\lVert')
+ content = content:gsub('\\SemantexMathClose{} \\Vert', '\\rVert')
+ content = content:gsub('\\SemantexMathOpen{} .%s?', '')
+ content = content:gsub('\\SemantexMathClose{} .%s?', '')
+ content = content:gsub('\\SemantexMathOpen{}', '\\mathopen ')
+ content = content:gsub('\\SemantexMathClose{}', '\\mathclose ')
+ content = content:gsub('\\SemantexMathOpenAuto%s?', '\\SemantexLeft')
+ content = content:gsub('\\SemantexMathCloseAuto%s?', '\\SemantexRight')
+ content = content:gsub('\\SemantexMathOpenNoPar%s?', '')
+ content = content:gsub('\\SemantexMathCloseNoPar%s?', '')
+ content = content:gsub('\\SemantexMathOpen%s?', '\\mathopen')
+ content = content:gsub('\\SemantexMathClose%s?', '\\mathclose')
+end
+
+stripComments = function()
+ content = content:gsub('\\%%', '\\StripSemantexEscapedPercent')
+ content = content:gsub('(\\%w+)%%.-\n%s*', '%1 ')
+ content = content:gsub('%%.-\n%s*', '')
+ content = content:gsub('\\StripSemantexEscapedPercent', '\\%%')
+end
+
+addSemtexPackageToFile = function()
+ content = [[% The following was added by "stripsemantex":
+
+\usepackage{semtex,leftindex,graphicx}
+
+\providecommand\SemantexLeft{%
+ \mathopen{}\mathclose\bgroup\left
+}
+
+\providecommand\SemantexRight{%
+ \aftergroup\egroup\right
+}
+
+\makeatletter
+\DeclareRobustCommand\SemantexBullet{%
+ \mathord{\mathpalette\SemantexBullet@{0.5}}%
+}
+\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 5a98435644..1778ac29ec 100644
--- a/macros/latex/contrib/semantex/stripsemantex.sty
+++ b/macros/latex/contrib/semantex/stripsemantex.sty
@@ -1,5 +1,5 @@
\RequirePackage{xparse}
-\ProvidesExplPackage{stripsemantex}{2022/10/04}{0.522}{}
+\ProvidesExplPackage{stripsemantex}{2022/12/03}{0.523}{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %