summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-09-14 19:58:16 +0000
committerKarl Berry <karl@freefriends.org>2022-09-14 19:58:16 +0000
commit17b3bbda651c5296c1e222bb44b6a1d348a737bd (patch)
treee895b9d34f6ca6723d2b106d94fd0b334d31a9a4 /Master/texmf-dist/tex
parent732ae3fbb7543a76e6ed337dcc853e4dec34efbb (diff)
stex (14sep22)
git-svn-id: svn://tug.org/texlive/trunk@64383 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r--Master/texmf-dist/tex/latex/stex/document-structure.sty8
-rw-r--r--Master/texmf-dist/tex/latex/stex/etc/beamernotesthemesTeX.sty14
-rw-r--r--Master/texmf-dist/tex/latex/stex/etc/beamerthemesTeX.sty94
-rw-r--r--Master/texmf-dist/tex/latex/stex/etc/stex-backend-pdflatex.cfg2
-rw-r--r--Master/texmf-dist/tex/latex/stex/etc/stex-backend-rustex.cfg10
-rw-r--r--Master/texmf-dist/tex/latex/stex/etc/stex-backend-tex4ht.cfg13
-rw-r--r--Master/texmf-dist/tex/latex/stex/etc/stexthm.sty69
-rw-r--r--Master/texmf-dist/tex/latex/stex/hwexam.sty23
-rw-r--r--Master/texmf-dist/tex/latex/stex/ldf/problem-ngerman.ldf2
-rw-r--r--Master/texmf-dist/tex/latex/stex/notesslides.cls2
-rw-r--r--Master/texmf-dist/tex/latex/stex/notesslides.sty80
-rw-r--r--Master/texmf-dist/tex/latex/stex/problem.sty111
-rw-r--r--Master/texmf-dist/tex/latex/stex/stex-tikzinput.sty3
-rw-r--r--Master/texmf-dist/tex/latex/stex/stex.cls2
-rw-r--r--Master/texmf-dist/tex/latex/stex/stex.sty1460
-rw-r--r--Master/texmf-dist/tex/latex/stex/tikzinput.sty3
16 files changed, 1181 insertions, 715 deletions
diff --git a/Master/texmf-dist/tex/latex/stex/document-structure.sty b/Master/texmf-dist/tex/latex/stex/document-structure.sty
index b747cf4d052..246d94e18f4 100644
--- a/Master/texmf-dist/tex/latex/stex/document-structure.sty
+++ b/Master/texmf-dist/tex/latex/stex/document-structure.sty
@@ -6,12 +6,12 @@
%%
%% document-structure.dtx (with options: `package')
%%
-\ProvidesExplPackage{document-structure}{2022/05/24}{3.1.0}{Modular Document Structure}
+\ProvidesExplPackage{document-structure}{2022/09/14}{3.2.0}{Modular Document Structure}
\RequirePackage{l3keys2e}
\keys_define:nn{ document-structure }{
class .str_set_x:N = \c_document_structure_class_str,
- topsect .str_set_x:N = \c_document_structure_topsect_str,,
+ topsect .str_set_x:N = \c_document_structure_topsect_str,
unknown .code:n = {
\PassOptionsToClass{\CurrentOption}{stex}
\PassOptionsToClass{\CurrentOption}{tikzinput}
@@ -30,7 +30,7 @@
\AddToHook{begindocument}{
\ltx@ifpackageloaded{babel}{
\clist_set:Nx \l_tmpa_clist {\bbl@loaded}
- \clist_if_in:NnT \l_tmpa_clist {ngerman}{
+ \exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{ngerman}}{
\makeatletter\input{document-structure-ngerman.ldf}\makeatother
}
}{}
@@ -98,7 +98,6 @@
srccite .tl_set:N = \l__document_structure_sfragment_srccite_tl,
type .tl_set:N = \l__document_structure_sfragment_type_tl,
short .tl_set:N = \l__document_structure_sfragment_short_tl,
- display .tl_set:N = \l__document_structure_sfragment_display_tl,
intro .tl_set:N = \l__document_structure_sfragment_intro_tl,
imports .tl_set:N = \l__document_structure_sfragment_imports_tl,
loadmodules .bool_set:N = \l__document_structure_sfragment_loadmodules_bool
@@ -111,7 +110,6 @@
\tl_clear:N \l__document_structure_sfragment_srccite_tl
\tl_clear:N \l__document_structure_sfragment_type_tl
\tl_clear:N \l__document_structure_sfragment_short_tl
- \tl_clear:N \l__document_structure_sfragment_display_tl
\tl_clear:N \l__document_structure_sfragment_imports_tl
\tl_clear:N \l__document_structure_sfragment_intro_tl
\bool_set_false:N \l__document_structure_sfragment_loadmodules_bool
diff --git a/Master/texmf-dist/tex/latex/stex/etc/beamernotesthemesTeX.sty b/Master/texmf-dist/tex/latex/stex/etc/beamernotesthemesTeX.sty
deleted file mode 100644
index af1c0c2a4c3..00000000000
--- a/Master/texmf-dist/tex/latex/stex/etc/beamernotesthemesTeX.sty
+++ /dev/null
@@ -1,14 +0,0 @@
-% Beamer sTeX notes theme;
-% Copyright (c) 2022 Michael Kohlhase <michael.kohlhase@fau.de>.
-\ProvidesPackage{beamernotestheme-sTeX}
-\typeout{Beamer sTeX notes theme}
-\setbeamertemplate{theorem begin}
-{%
- \inserttheoremheadfont
- \inserttheoremname
- \inserttheoremnumber
- \ifx \inserttheoremaddition \empty \else\ (\inserttheoremaddition)\fi
- \inserttheorempunctuation\xspace
- \inserttheorembodyfont
-}
-\setbeamertemplate{theorem end}{}
diff --git a/Master/texmf-dist/tex/latex/stex/etc/beamerthemesTeX.sty b/Master/texmf-dist/tex/latex/stex/etc/beamerthemesTeX.sty
index d7b861086a4..85fd253eebe 100644
--- a/Master/texmf-dist/tex/latex/stex/etc/beamerthemesTeX.sty
+++ b/Master/texmf-dist/tex/latex/stex/etc/beamerthemesTeX.sty
@@ -1,25 +1,58 @@
% Beamer sTeX slide theme;
% Copyright (c) 20 Michael Kohlhase <michael.kohlhase@fau.de>.
-\ProvidesPackage{beamertheme-sTeX}
+\ProvidesPackage{beamerthemesTeX}
\typeout{Beamer sTeX theme}
\RequirePackage{xspace}
+\RequirePackage{xcolor}
+\RequirePackage{stex}
-% General appearance of theorems, like "ams style", but without the block env.
-\setbeamertemplate{theorem begin}
-{%
- \inserttheoremheadfont
- \inserttheoremname
- \inserttheoremnumber
- \ifx \inserttheoremaddition \empty \else\ (\inserttheoremaddition)\fi
- \inserttheorempunctuation\xspace
- \inserttheorembodyfont
+\ExplSyntaxOn
+\protected\def\stexbeamerthm#1#2#3#4#5#6#7#8{
+ \newcounter{#1}
+ \tl_if_empty:nF{#4}{
+ \tl_set:cn{the#1}{
+ \use:c{the#4}.\arabic{#1}
+ }
+ }
+ \tl_set:cn{#1autorefname}{#6}
+
+ \newenvironment{#1}{
+ \ifhmode\par\fi
+
+ \tl_if_empty:nF{#5}{
+ \setcounter{#1}{\value{#5}}
+ \stepcounter{#5}
+ }
+ \refstepcounter{#1}
+ \noindent#7{
+ #6~\use:c{the#1}
+ \tl_if_empty:cF{s#2title}{
+ {}~(\csname s#2title\endcsname)
+ }.
+ }
+ #8
+ }{\par}
+ \csname stexpatch#2\endcsname[#3]{\begin{#1}}{\end{#1}}
}
-\setbeamertemplate{theorem end}{}
+\ExplSyntaxOff
+
+\stexbeamerthm{theorem}{assertion}{theorem}{section}{}{Theorem}\textbf\itshape
+\stexbeamerthm{observation}{assertion}{observation}{section}{theorem}{Observation}\textbf\itshape
+\stexbeamerthm{corollary}{assertion}{corollary}{section}{theorem}{Corollary}\textbf\itshape
+\stexbeamerthm{lemma}{assertion}{lemma}{section}{theorem}{Lemma}\textbf\itshape
+\stexbeamerthm{axiom}{assertion}{axiom}{section}{theorem}{Axiom}\textbf\itshape
+\stexbeamerthm{remark}{assertion}{remark}{section}{theorem}{Remark}\emph{}
+\stexpatchparagraph[remark]{\begin{remark}}{\end{remark}}
+\stexbeamerthm{example}{example}{}{section}{theorem}{Example}\textbf{}
+\stexbeamerthm{definition}{definition}{}{section}{theorem}{Definition}\textbf{}
+
% THEME
\mode
<presentation>
+\sffamily
+
\ifcsname slidelogo\endcsname\else
\newsavebox\slidelogo
\sbox\slidelogo{\sTeX}
@@ -64,3 +97,42 @@
\setlength\leftmarginii{1em}
\setlength\leftmarginiii{1em}
\providecommand{\vstretch}[1]{\vspace*{\stretch{#1}}}
+
+%% set the colors for sTeX content highlighting
+
+\def\compemph#1{\ifcsname textcolor\endcsname\textcolor{SteelBlue}{#1}\else#1\fi}
+\def\symrefemph#1{\ifcsname textcolor\endcsname\textcolor{SteelBlue}{#1}\else#1\fi}
+\def\defemph#1{\ifcsname textcolor\endcsname\textcolor{magenta}{#1}\else\textbf{#1}\fi}
+\def\varemph#1{\ifcsname textcolor\endcsname\textcolor{gray}{#1}\else#1\fi}
+\def\titleemph#1{\ifcsname textcolor\endcsname\textcolor{blue}{#1}\else\textbf{#1}\fi}
+
+%% set PDF tooltips
+\RequirePackage{pdfcomment}
+\protected\def\compemph@uri#1#2{%
+ \pdftooltip{%
+ \srefsymuri{#2}{\compemph{#1}}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
+}
+\protected\def\symrefemph@uri#1#2{%
+ \pdftooltip{%
+ \srefsymuri{#2}{\symrefemph{#1}}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
+}
+\protected\def\defemph@uri#1#2{%
+ \pdftooltip{%
+ \defemph{#1}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
+}
+\protected\def\varemph@uri#1#2{%
+ \pdftooltip{%
+ \varemph{#1}%
+ }{%
+ Variable~\detokenize{#2}%
+ }%
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/stex/etc/stex-backend-pdflatex.cfg b/Master/texmf-dist/tex/latex/stex/etc/stex-backend-pdflatex.cfg
index bdd2810d09d..484f930db6d 100644
--- a/Master/texmf-dist/tex/latex/stex/etc/stex-backend-pdflatex.cfg
+++ b/Master/texmf-dist/tex/latex/stex/etc/stex-backend-pdflatex.cfg
@@ -1,6 +1,8 @@
\tl_const:Nx \c_stex_html_emptyarg_tl {~}
\cs_new_protected:Nn \stex_annotate:nnn {#3}
+\cs_new_protected:Nn \stex_mathml_intent:nn { #2 }
+\cs_new_protected:Nn \stex_mathml_arg:nn { #2 }
\cs_new_protected:Nn \stex_annotate_invisible:n {}
\cs_new_protected:Nn \stex_annotate_invisible:nnn {}
\NewDocumentEnvironment{stex_annotate_env} { m m } {}{}
diff --git a/Master/texmf-dist/tex/latex/stex/etc/stex-backend-rustex.cfg b/Master/texmf-dist/tex/latex/stex/etc/stex-backend-rustex.cfg
index 3f48631e406..c9ad36613bc 100644
--- a/Master/texmf-dist/tex/latex/stex/etc/stex-backend-rustex.cfg
+++ b/Master/texmf-dist/tex/latex/stex/etc/stex-backend-rustex.cfg
@@ -20,6 +20,16 @@
}
}
}
+\cs_new_protected:Nn \stex_mathml_intent:nn {
+ \rustex_annotate_HTML:nn {
+ mml:intent="#1"
+ }{ #2 }
+}
+\cs_new_protected:Nn \stex_mathml_arg:nn {
+ \rustex_annotate_HTML:nn {
+ mml:arg="#1"
+ }{ #2 }
+}
\cs_new_protected:Nn \stex_annotate_invisible:n {
\_stex_html_checkempty:n { #1 }
diff --git a/Master/texmf-dist/tex/latex/stex/etc/stex-backend-tex4ht.cfg b/Master/texmf-dist/tex/latex/stex/etc/stex-backend-tex4ht.cfg
new file mode 100644
index 00000000000..b4c39b50b70
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/etc/stex-backend-tex4ht.cfg
@@ -0,0 +1,13 @@
+% TODO
+\tl_const:Nx \c_stex_html_emptyarg_tl {~}
+
+\cs_new_protected:Nn \stex_annotate:nnn {#3} % TODO
+\cs_new_protected:Nn \stex_mathml_intent:nn { #2 } % TODO
+\cs_new_protected:Nn \stex_mathml_arg:nn { #2 } % TODO
+\cs_new_protected:Nn \stex_annotate_invisible:n {} % TODO
+\cs_new_protected:Nn \stex_annotate_invisible:nnn {} % TODO
+\NewDocumentEnvironment{stex_annotate_env} { m m } {}{} % TODO
+
+\prg_new_conditional:Nnn \stex_html_backend: {p, T, F, TF} {
+ \prg_return_true:
+} \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/stex/etc/stexthm.sty b/Master/texmf-dist/tex/latex/stex/etc/stexthm.sty
index 16931b514a1..c81b6358dfa 100644
--- a/Master/texmf-dist/tex/latex/stex/etc/stexthm.sty
+++ b/Master/texmf-dist/tex/latex/stex/etc/stexthm.sty
@@ -4,51 +4,53 @@
\RequirePackage{amsthm}
\RequirePackage{thmtools}
+\ExplSyntaxOn
+
\declaretheorem[parent=section]{theorem}
\stexpatchassertion[theorem]
-{\ifx\sassertiontitle\@empty\begin{theorem}\else\begin{theorem}[\sassertiontitle]\fi}
+{\ifx\sassertiontitle\@empty\begin{theorem}\else\exp_args:Nno\use:nn{\begin{theorem}[}\sassertiontitle]\fi}
{\end{theorem}}
\declaretheorem[sibling=theorem]{observation}
\stexpatchassertion[observation]
-{\ifx\sassertiontitle\@empty\begin{observation}\else\begin{observation}[\sassertiontitle]\fi}
+{\ifx\sassertiontitle\@empty\begin{observation}\else\exp_args:Nno\use:nn{\begin{observation}[}\sassertiontitle]\fi}
{\end{observation}}
\declaretheorem[sibling=theorem]{corollary}
\stexpatchassertion[corollary]
-{\ifx\sassertiontitle\@empty\begin{corollary}\else\begin{corollary}[\sassertiontitle]\fi}
+{\ifx\sassertiontitle\@empty\begin{corollary}\else\exp_args:Nno\use:nn{\begin{corollary}[}\sassertiontitle]\fi}
{\end{corollary}}
\declaretheorem[sibling=theorem]{lemma}
\stexpatchassertion[lemma]
-{\ifx\sassertiontitle\@empty\begin{lemma}\else\begin{lemma}[\sassertiontitle]\fi}
+{\ifx\sassertiontitle\@empty\begin{lemma}\else\exp_args:Nno\use:nn{\begin{lemma}[}\sassertiontitle]\fi}
{\end{lemma}}
\declaretheorem[sibling=theorem]{axiom}
\stexpatchassertion[axiom]
-{\ifx\sassertiontitle\@empty\begin{axiom}\else\begin{axiom}[\sassertiontitle]\fi}
+{\ifx\sassertiontitle\@empty\begin{axiom}\else\exp_args:Nno\use:nn{\begin{axiom}[}\sassertiontitle]\fi}
{\end{axiom}}
\declaretheorem[sibling=theorem,style=remark]{remark}
\stexpatchassertion[remark]
-{\ifx\sassertiontitle\@empty\begin{remark}\else\begin{remark}[\sassertiontitle]\fi}
+{\ifx\sassertiontitle\@empty\begin{remark}\else\exp_args:Nno\use:nn{\begin{remark}[}\sassertiontitle]\fi}
{\end{remark}}
\stexpatchparagraph[remark]
-{\ifx\sparagraphtitle\@empty\begin{remark}\else\begin{remark}[\sparagraphtitle]\fi}
+{\ifx\sparagraphtitle\@empty\begin{remark}\else\exp_args:Nno\use:nn{\begin{remark}[}\sparagraphtitle]\fi}
{\end{remark}}
\declaretheorem[sibling=theorem,style=definition]{example}
\stexpatchexample
-{\ifx\sexampletitle\@empty\begin{example}\else\begin{example}[\sexampletitle]\fi}
+{\ifx\sexampletitle\@empty\begin{example}\else\exp_args:Nno\use:nn{\begin{example}[}\sexampletitle]\fi}
{\end{example}}
\declaretheorem[sibling=theorem,style=definition]{definition}
\stexpatchdefinition
-{\ifx\sdefinitiontitle\@empty\begin{definition}\else\begin{definition}[\sdefinitiontitle]\fi}
+{\ifx\sdefinitiontitle\@empty\begin{definition}\else\exp_args:Nno\use:nn{\begin{definition}[}\sdefinitiontitle]\fi}
{\end{definition}}
-
-\RequirePackage{pdfcomment}
+\ExplSyntaxOff
+
\RequirePackage{xcolor}
\def\compemph#1{\ifcsname textcolor\endcsname\textcolor{blue}{#1}\else#1\fi}
@@ -56,31 +58,32 @@
\def\defemph#1{\ifcsname textcolor\endcsname\textcolor{blue}{\textbf{#1}}\else\textbf{#1}\fi}
\def\varemph#1{\ifcsname textcolor\endcsname\textcolor{gray}{#1}\else#1\fi}
+\RequirePackage{pdfcomment}
\protected\def\compemph@uri#1#2{%
- \pdftooltip{%
- \srefsymuri{#2}{\compemph{#1}}%
- }{%
- URI:~\detokenize{#2}%
- }%
+ \pdftooltip{%
+ \srefsymuri{#2}{\compemph{#1}}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
}
\protected\def\symrefemph@uri#1#2{%
- \pdftooltip{%
- \srefsymuri{#2}{\symrefemph{#1}}%
- }{%
- URI:~\detokenize{#2}%
- }%
-}
+ \pdftooltip{%
+ \srefsymuri{#2}{\symrefemph{#1}}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
+ }
\protected\def\defemph@uri#1#2{%
- \pdftooltip{%
- \defemph{#1}%
- }{%
- URI:~\detokenize{#2}%
- }%
+ \pdftooltip{%
+ \defemph{#1}%
+ }{%
+ URI:~\detokenize{#2}%
+ }%
}
\protected\def\varemph@uri#1#2{%
- \pdftooltip{%
- \varemph{#1}%
- }{%
- Variable~\detokenize{#2}%
- }%
-} \ No newline at end of file
+ \pdftooltip{%
+ \varemph{#1}%
+ }{%
+ Variable~\detokenize{#2}%
+ }%
+}
diff --git a/Master/texmf-dist/tex/latex/stex/hwexam.sty b/Master/texmf-dist/tex/latex/stex/hwexam.sty
index 84387461ed3..f7f7e27947b 100644
--- a/Master/texmf-dist/tex/latex/stex/hwexam.sty
+++ b/Master/texmf-dist/tex/latex/stex/hwexam.sty
@@ -6,13 +6,14 @@
%%
%% hwexam.dtx (with options: `package')
%%
-\ProvidesExplPackage{hwexam}{2022/05/24}{3.1.0}{homework assignments and exams}
+\ProvidesExplPackage{hwexam}{2022/09/14}{3.2.0}{homework assignments and exams}
\RequirePackage{l3keys2e}
\newif\iftest\testfalse
-\DeclareOption{test}{\testtrue}
+\DeclareOption{test}{\testtrue\PassOptionsToPackage{\CurrentOption}{problem}}
\newif\ifmultiple\multiplefalse
\DeclareOption{multiple}{\multipletrue}
+\DeclareOption{lang}{\PassOptionsToPackage{\CurrentOption}{problem}}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{problem}}
\ProcessOptions
\RequirePackage{keyval}[1997/11/10]
@@ -20,9 +21,8 @@
\newcommand\hwexam@assignment@kw{Assignment}
\newcommand\hwexam@given@kw{Given}
\newcommand\hwexam@due@kw{Due}
-\newcommand\hwexam@testemptypage@kw{This~page~was~intentionally~left~
-blank~for~extra~space}
-\def\hwexam@minutes@kw{minutes}
+\newcommand\hwexam@testemptypage@kw{This~page~was~intentionally~left~blank~for~extra~space}
+\newcommand\hwexam@minutes@kw{minutes}
\newcommand\correction@probs@kw{prob.}
\newcommand\correction@pts@kw{total}
\newcommand\correction@reached@kw{reached}
@@ -33,16 +33,16 @@ blank~for~extra~space}
\ltx@ifpackageloaded{babel}{
\makeatletter
\clist_set:Nx \l_tmpa_clist {\bbl@loaded}
-\clist_if_in:NnT \l_tmpa_clist {ngerman}{
+\exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{ngerman}}{
\input{hwexam-ngerman.ldf}
}
-\clist_if_in:NnT \l_tmpa_clist {finnish}{
+\exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{finnish}}{
\input{hwexam-finnish.ldf}
}
-\clist_if_in:NnT \l_tmpa_clist {french}{
+\exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{french}}{
\input{hwexam-french.ldf}
}
-\clist_if_in:NnT \l_tmpa_clist {russian}{
+\exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{russian}}{
\input{hwexam-russian.ldf}
}
\makeatother
@@ -145,7 +145,7 @@ loadmodules .code:n = {
}{
\global\setcounter{assignment}{\int_use:N\l__problems_assign_number_int}
}
-\setcounter{problem}{0}
+\setcounter{sproblem}{0}
\renewcommand\prob@label[1]{\assignment@number.##1}
\def\current@section@level{\document@hwexamtype}
\begin{@assignment}
@@ -262,9 +262,6 @@ tools .tl_set:N = \testheading@tools
}{
\newpage
}
-\newcommand\testspace[1]{\iftest\vspace*{#1}\fi}
-\newcommand\testnewpage{\iftest\newpage\fi}
-\newcommand\testemptypage[1][]{\iftest\begin{center}\hwexam@testemptypage@kw\end{center}\vfill\eject\else\fi}
\renewcommand\@problem[3]{
\stepcounter{assignment@probs}
\def\__problemspts{#2}
diff --git a/Master/texmf-dist/tex/latex/stex/ldf/problem-ngerman.ldf b/Master/texmf-dist/tex/latex/stex/ldf/problem-ngerman.ldf
index d53bed5591c..6cadab08509 100644
--- a/Master/texmf-dist/tex/latex/stex/ldf/problem-ngerman.ldf
+++ b/Master/texmf-dist/tex/latex/stex/ldf/problem-ngerman.ldf
@@ -14,4 +14,6 @@
\def\prob@note@kw{Bewertung}
\def\prob@pt@kw{Pkt}
\def\prob@min@kw{Min}
+\def\prob@correct@kw{Korrekt}
+\def\prob@wrong@kw{Falsch}
}
diff --git a/Master/texmf-dist/tex/latex/stex/notesslides.cls b/Master/texmf-dist/tex/latex/stex/notesslides.cls
index 1eb33611a58..9de67664bfb 100644
--- a/Master/texmf-dist/tex/latex/stex/notesslides.cls
+++ b/Master/texmf-dist/tex/latex/stex/notesslides.cls
@@ -6,7 +6,7 @@
%%
%% notesslides.dtx (with options: `cls')
%%
-\ProvidesExplClass{notesslides}{2022/05/24}{3.1.0}{notesslides Class}
+\ProvidesExplClass{notesslides}{2022/09/14}{3.2.0}{notesslides Class}
\RequirePackage{l3keys2e}
\keys_define:nn{notesslides / cls}{
diff --git a/Master/texmf-dist/tex/latex/stex/notesslides.sty b/Master/texmf-dist/tex/latex/stex/notesslides.sty
index 2d8ba8faa28..3d853b27552 100644
--- a/Master/texmf-dist/tex/latex/stex/notesslides.sty
+++ b/Master/texmf-dist/tex/latex/stex/notesslides.sty
@@ -6,7 +6,7 @@
%%
%% notesslides.dtx (with options: `package')
%%
-\ProvidesExplPackage{notesslides}{2022/05/24}{3.1.0}{notesslides Package}
+\ProvidesExplPackage{notesslides}{2022/09/14}{3.2.0}{notesslides Package}
\RequirePackage{l3keys2e}
\keys_define:nn{notesslides / pkg}{
@@ -52,24 +52,16 @@
\RequirePackage[bookmarks,bookmarksopen,bookmarksnumbered,breaklinks,hidelinks]{hyperref}
}
\RequirePackage{stex-tikzinput}
-\RequirePackage{etoolbox}
-\RequirePackage{amssymb}
-\RequirePackage{amsmath}
\RequirePackage{comment}
-\RequirePackage{textcomp}
\RequirePackage{url}
\RequirePackage{graphicx}
\RequirePackage{pgf}
+\RequirePackage{bookmark}
\bool_if:NT \c__notesslides_notes_bool {
- \renewcommand\usetheme[2][]{\usepackage[#1]{beamernotestheme#2}}
+ \renewcommand\usetheme[2][]{\usepackage[#1]{beamertheme#2}}
}
-
\NewDocumentCommand \libusetheme {O{} m} {
- \bool_if:NTF \c__notesslides_notes_bool {
- \libusepackage[#1]{beamernotestheme#2}
- }{
\libusepackage[#1]{beamertheme#2}
- }
}
\newcounter{slide}
@@ -236,9 +228,21 @@
\sbox{\slidelogo}{\mhgraphics[height=\slidelogoheight,mhrepos=#1]{#2}}
}
}
-\def\source{Michael Kohlhase}% customize locally
+\bool_if:NT \c__notesslides_notes_bool {
+ \def\author{\@dblarg\ns@author}
+ \long\def\ns@author[#1]#2{%
+ \def\c__notesslides_shortauthor{#1}%
+ \def\@author{#2}
+ }
+}
\newrobustcmd{\setsource}[1]{\def\source{#1}}
-\def\copyrightnotice{\footnotesize\copyright :\hspace{.3ex}{\source}}
+\def\copyrightnotice{%
+ \footnotesize\copyright :\hspace{.3ex}%
+ \ifcsname source\endcsname\source\else%
+ \ifcsname c__notesslides_shortauthor\endcsname\c__notesslides_shortauthor\else%
+ \PackageWarning{notesslides}{Author/Source~undefined~in~copyright~notice}%
+ ?source/author?\fi%
+ \fi}
\newsavebox{\cclogo}
\sbox{\cclogo}{\includegraphics[height=\slidelogoheight]{stex-cc_somerights}}
\newif\ifcchref\cchreffalse
@@ -317,37 +321,6 @@
\bool_if:NF \c__notesslides_notes_bool { \vfill }
}
} % ifmks@sty@frameimages
-\sffamily
-\AddToHook{begindocument}{
- \definecolor{green}{rgb}{0,.5,0}
- \definecolor{purple}{cmyk}{.3,1,0,.17}
-}
-\def\defemph#1{{\textcolor{magenta}{#1}}}
-\def\symrefemph#1{{\textcolor{cyan}{#1}}}
-\def\compemph#1{{\textcolor{blue}{#1}}}
-\def\titleemph#1{{\textcolor{blue}{#1}}}
-\def\__omtext_lec#1{(\textcolor{green}{#1})}
-\pgfdeclareimage[width=.8em]{miko@small@dbend}{stex-dangerous-bend}
-\def\smalltextwarning{
- \pgfuseimage{miko@small@dbend}
- \xspace
-}
-\pgfdeclareimage[width=1.2em]{miko@dbend}{stex-dangerous-bend}
-\newrobustcmd\textwarning{
- \raisebox{-.05cm}{\pgfuseimage{miko@dbend}}
- \xspace
-}
-\pgfdeclareimage[width=2.5em]{miko@big@dbend}{stex-dangerous-bend}
-\newrobustcmd\bigtextwarning{
- \raisebox{-.05cm}{\pgfuseimage{miko@big@dbend}}
- \xspace
-}
-\newrobustcmd\putgraphicsat[3]{
- \begin{picture}(0,0)\put(#1){\includegraphics[#2]{#3}}\end{picture}
-}
-\newrobustcmd\putat[2]{
- \begin{picture}(0,0)\put(#1){#2}\end{picture}
-}
\stex_html_backend:F {
\bool_if:NT \c__notesslides_sectocframes_bool {
\str_if_eq:VnTF \__notesslidestopsect{part}{
@@ -390,33 +363,48 @@
\ifcase\l_document_structure_section_level_int\or
\stepcounter{part}
\def\__notesslideslabel{{\omdoc@part@kw}~\Roman{part}}
+ \addcontentsline{toc}{part}{\protect\numberline{\thepart}#2}
+ \pdfbookmark[0]{\thepart\ #2}{part.\thepart}
\def\currentsectionlevel{\omdoc@part@kw}
\or
\stepcounter{chapter}
\def\__notesslideslabel{{\omdoc@chapter@kw}~\arabic{chapter}}
+ \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#2}
+ \pdfbookmark[1]{\thechapter\ #2}{chapter.\cs_if_exist:cT{thepart}\thepart.\thechapter}
\def\currentsectionlevel{\omdoc@chapter@kw}
\or
\stepcounter{section}
\def\__notesslideslabel{\part@prefix\arabic{section}}
+ \addcontentsline{toc}{section}{\protect\numberline{\thesection}#2}
+ \pdfbookmark[2]{\cs_if_exist:cT{thechapter}{\thechapter.}\thesection\ #2}
+ {section.\cs_if_exist:cT{thepart}{\thepart}.\cs_if_exist:cT{thechapter}{\thechapter}.\thesection}
\def\currentsectionlevel{\omdoc@section@kw}
\or
\stepcounter{subsection}
\def\__notesslideslabel{\part@prefix\arabic{section}.\arabic{subsection}}
+ \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}#2}
+ \pdfbookmark[3]{\cs_if_exist:cT{thechapter}{\thechapter.}\thesection.\thesubsection\ #2}
+ {subsection.\cs_if_exist:cT{thepart}{\thepart}.\cs_if_exist:cT{thechapter}{\thechapter}.\thesection.\thesubsection}
\def\currentsectionlevel{\omdoc@subsection@kw}
\or
\stepcounter{subsubsection}
\def\__notesslideslabel{\part@prefix\arabic{section}.\arabic{subsection}.\arabic{subsubsection}}
+ \addcontentsline{toc}{subsubsection}{\protect\numberline{\thesubsubsection}#2}
+ \pdfbookmark[4]{\cs_if_exist:cT{thechapter}{\thechapter.}\thesection.\thesubsection.\thesubsubsection\ #2}
+ {subsubsection.\cs_if_exist:cT{thepart}{\thepart}.\cs_if_exist:cT{thechapter}{\thechapter}.\thesection.\thesubsection.\thesubsubsection}
\def\currentsectionlevel{\omdoc@subsubsection@kw}
\or
\stepcounter{paragraph}
\def\__notesslideslabel{\part@prefix\arabic{section}.\arabic{subsection}.\arabic{subsubsection}.\arabic{paragraph}}
+ \addcontentsline{toc}{paragraph}{\protect\numberline{\theparagraph}#2}
+ \pdfbookmark[5]{\cs_if_exist:cT{thechapter}{\thechapter.}\thesection.\thesubsection.\thesubsubsection.\theparagraph\ #2}
+ {paragraph.\cs_if_exist:cT{thepart}{\thepart}.\cs_if_exist:cT{thechapter}{\thechapter}.\thesection.\thesubsection.\thesubsubsection.\theparagraph}
\def\currentsectionlevel{\omdoc@paragraph@kw}
\else
\def\__notesslideslabel{}
\def\currentsectionlevel{\omdoc@paragraph@kw}
\fi% end ifcase
- \__notesslideslabel%\sref@label@id\__notesslideslabel
- \quad #2%
+ \__notesslideslabel\quad #2%
}%
\vfill%
\end{frame}%
diff --git a/Master/texmf-dist/tex/latex/stex/problem.sty b/Master/texmf-dist/tex/latex/stex/problem.sty
index 091eb3c5b36..de10c534970 100644
--- a/Master/texmf-dist/tex/latex/stex/problem.sty
+++ b/Master/texmf-dist/tex/latex/stex/problem.sty
@@ -6,8 +6,9 @@
%%
%% problem.dtx (with options: `package')
%%
-\ProvidesExplPackage{problem}{2022/05/24}{3.1.0}{Semantic Markup for Problems}
-\RequirePackage{l3keys2e,stex}
+\ProvidesExplPackage{problem}{2022/09/14}{3.2.0}{Semantic Markup for Problems}
+\RequirePackage{l3keys2e}
+\RequirePackage{amssymb}% for \Box
\keys_define:nn { problem / pkg }{
notes .default:n = { true },
@@ -24,7 +25,11 @@
min .bool_set:N = \c__problems_min_bool,
boxed .default:n = { true },
boxed .bool_set:N = \c__problems_boxed_bool,
- unknown .code:n = {}
+ test .default:n = { true },
+ test .bool_set:N = \c__problems_test_bool,
+ unknown .code:n = {
+ \PassOptionsToPackage{\CurrentOption}{stex}
+ }
}
\newif\ifsolutions
@@ -34,6 +39,7 @@
}{
\solutionsfalse
}
+\RequirePackage{stex}
\RequirePackage{comment}
\bool_if:NT \c__problems_boxed_bool { \RequirePackage{mdframed} }
\def\prob@problem@kw{Problem}
@@ -43,20 +49,22 @@
\def\prob@gnote@kw{Grading}
\def\prob@pt@kw{pt}
\def\prob@min@kw{min}
+\def\prob@correct@kw{Correct}
+\def\prob@wrong@kw{Wrong}
\AddToHook{begindocument}{
\ltx@ifpackageloaded{babel}{
\makeatletter
\clist_set:Nx \l_tmpa_clist {\bbl@loaded}
- \clist_if_in:NnT \l_tmpa_clist {ngerman}{
+ \exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{ngerman}}{
\input{problem-ngerman.ldf}
}
- \clist_if_in:NnT \l_tmpa_clist {finnish}{
+ \exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{finnish}}{
\input{problem-finnish.ldf}
}
- \clist_if_in:NnT \l_tmpa_clist {french}{
+ \exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{french}}{
\input{problem-french.ldf}
}
- \clist_if_in:NnT \l_tmpa_clist {russian}{
+ \exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{russian}}{
\input{problem-russian.ldf}
}
\makeatother
@@ -86,8 +94,10 @@
\let\l__problems_prob_refnum_int\undefined
}
}
-\newcounter{problem}[section]
-\newcommand\numberproblemsin[1]{\@addtoreset{problem}{#1}}
+\newcounter{sproblem}[section]
+\newcommand\numberproblemsin[1]{\@addtoreset{sproblem}{#1}}
+\def\theplainsproblem{\arabic{sproblem}}
+\def\thesproblem{\thesection.\theplainsproblem}
\newcommand\prob@label[1]{\thesection.#1}
\newcommand\prob@number{
\int_if_exist:NTF \l__problems_inclprob_refnum_int {
@@ -96,18 +106,19 @@
\int_if_exist:NTF \l__problems_prob_refnum_int {
\prob@label{\int_use:N \l__problems_prob_refnum_int }
}{
- \prob@label\theproblem
+ \prob@label\theplainsproblem
}
}
}
+\def\sproblemautorefname{\prob@problem@kw}
\newcommand\prob@title[3]{%
\tl_if_exist:NTF \l__problems_inclprob_title_tl {
#2 \l__problems_inclprob_title_tl #3
}{
- \tl_if_exist:NTF \l__problems_prob_title_tl {
- #2 \l__problems_prob_title_tl #3
- }{
+ \tl_if_empty:NTF \l__problems_prob_title_tl {
#1
+ }{
+ #2 \l__problems_prob_title_tl #3
}
}
}
@@ -118,7 +129,7 @@
\newenvironment{sproblem}[1][]{
\__problems_prob_args:n{#1}%\sref@target%
\@in@omtexttrue% we are in a statement (for inline definitions)
- \stepcounter{problem}\record@problem
+ \refstepcounter{sproblem}\record@problem
\def\current@section@level{\prob@problem@kw}
\str_if_empty:NT \l__problems_prob_name_str {
@@ -183,7 +194,7 @@
}
}
\stex_ref_new_doc_target:n \sproblemid
- \stex_smsmode_do:
+ \stex_if_smsmode:TF \stex_smsmode_do: \ignorespacesandpars
}{
\__stex_modules_end_module:
\stex_if_smsmode:F{
@@ -251,41 +262,33 @@
\def\@problem#1#2#3{}
\keys_define:nn { problem / solution }{
id .str_set_x:N = \l__problems_solution_id_str ,
- for .tl_set:N = \l__problems_solution_for_tl ,
- height .dim_set:N = \l__problems_solution_height_dim ,
- creators .clist_set:N = \l__problems_solution_creators_clist ,
- contributors .clist_set:N = \l__problems_solution_contributors_clist ,
- srccite .tl_set:N = \l__problems_solution_srccite_tl
+ for .str_set_x:N = \l__problems_solution_for_str ,
+ type .str_set_x:N = \l__problems_solution_type_str ,
+ title .tl_set:N = \l__problems_solution_title_tl
}
\cs_new_protected:Nn \__problems_solution_args:n {
\str_clear:N \l__problems_solution_id_str
- \tl_clear:N \l__problems_solution_for_tl
- \tl_clear:N \l__problems_solution_srccite_tl
- \clist_clear:N \l__problems_solution_creators_clist
- \clist_clear:N \l__problems_solution_contributors_clist
- \dim_zero:N \l__problems_solution_height_dim
+ \str_clear:N \l__problems_solution_type_str
+ \str_clear:N \l__problems_solution_for_str
+ \tl_clear:N \l__problems_solution_title_tl
\keys_set:nn { problem / solution }{ #1 }
}
-\newcommand\@startsolution[1][]{
- \__problems_solution_args:n { #1 }
- \@in@omtexttrue% we are in a statement.
- \bool_if:NF \c__problems_boxed_bool { \hrule }
- \smallskip\noindent
- {\textbf\prob@solution@kw :\enspace}
- \begin{small}
- \def\current@section@level{\prob@solution@kw}
- \ignorespacesandpars
-}
\box_new:N \l__problems_solution_box
\newenvironment{solution}[1][]{
+ \__problems_solution_args:n{#1}
\stex_html_backend:TF{
\stex_if_do_html:T{
\begin{stex_annotate_env}{solution}{}
+ \str_if_empty:NF \l__problems_solution_type_str {
+ \par\noindent
+ \stex_annotate_invisible:nnn{typestrings}{\sexampletype}{}
+ }
+ \noindent\textbf{Solution\tl_if_empty:NF\l__problems_solution_title_tl{~(\l__problems_solution_title_tl)}: }~
}
}{
\setbox\l__problems_solution_box\vbox\bgroup
\par\smallskip\hrule\smallskip
- \noindent\textbf{Solution:}~
+ \noindent\textbf{Solution\tl_if_empty:NF\l__problems_solution_title_tl{~(\l__problems_solution_title_tl)}: }~
}
}{
\stex_html_backend:TF{
@@ -296,6 +299,7 @@
\smallskip\hrule
\egroup
\bool_if:NT \c__problems_solutions_bool {
+ \strut\par\noindent
\box\l__problems_solution_box
}
}
@@ -303,13 +307,9 @@
\newcommand\startsolutions{
\bool_set_true:N \c__problems_solutions_bool
+ \solutionstrue
}
-\newcommand\stopsolutions{\bool_set_false:N \c__problems_solutions_bool}%\excludecomment{solution}}
-\ifsolutions
- \startsolutions
-\else
- \stopsolutions
-\fi
+\newcommand\stopsolutions{\bool_set_false:N \c__problems_solutions_bool \solutionsfalse}%\excludecomment{solution}}
\bool_if:NTF \c__problems_notes_bool {
\newenvironment{exnote}[1][]{
\par\smallskip\hrule\smallskip
@@ -366,8 +366,8 @@
T .bool_set:N = \l__problems_mcc_t_bool ,
F .default:n = { false } ,
F .bool_set:N = \l__problems_mcc_f_bool ,
- Ttext .tl_set:N = \l__problems_mcc_Ttext_str ,
- Ftext .tl_set:N = \l__problems_mcc_Ftext_str
+ Ttext .tl_set:N = \l__problems_mcc_Ttext_tl ,
+ Ftext .tl_set:N = \l__problems_mcc_Ftext_tl
}
\cs_new_protected:Nn \l__problems_mcc_args:n {
\str_clear:N \l__problems_mcc_id_str
@@ -379,12 +379,12 @@
\str_clear:N \l__problems_mcc_id_str
\keys_set:nn { problem / mcc }{ #1 }
}
-\def\mccTrueText{\textbf{(true)~}}
-\def\mccFalseText{\textbf{(false)~}}
+\def\mccTrueText{\textbf{\prob@correct@kw!~}}
+\def\mccFalseText{\textbf{\prob@wrong@kw!~}}
\newcommand\mcc[2][]{
\l__problems_mcc_args:n{ #1 }
\item[$\Box$] #2
- \ifsolutions
+ \bool_if:NT \c__problems_solutions_bool{
\\
\bool_if:NT \l__problems_mcc_t_bool {
\tl_if_empty:NTF\l__problems_mcc_Ttext_tl\mccTrueText\l__problems_mcc_Ttext_tl
@@ -393,10 +393,16 @@
\tl_if_empty:NTF\l__problems_mcc_Ttext_tl\mccFalseText\l__problems_mcc_Ftext_tl
}
\tl_if_empty:NF \l__problems_mcc_feedback_tl {
- \emph{(\l__problems_mcc_feedback_tl)}
+ \emph{\l__problems_mcc_feedback_tl}
}
- \fi
+ }
} %solutions
+\newcommand\fillinsol[2][]{%
+ \def\@test{#1}
+ \quad%
+ \ifsolutions\textcolor{red}{#1!}\else%
+ \fbox{\ifx\@test\@empty\phantom{\huge{21}}\else\hspace{#1}\fi}%
+ \fi}
\keys_define:nn{ problem / inclproblem }{
id .str_set_x:N = \l__problems_inclprob_id_str,
@@ -524,6 +530,13 @@
}
}
}
+\newcommand\testspace[1]{\bool_if:NT \c__problems_boxed_bool {\vspace*{#1}}}
+\newcommand\testnewpage{\bool_if:NT \c__problems_boxed_bool {\newpage}}
+\newcommand\testemptypage[1][]{%
+\bool_if:NT \c__problems_boxed_bool {\begin{center}\hwexam@testemptypage@kw\end{center}\vfill\eject\else}}
+\newcommand\testsmallspace{\testspace{1cm}}
+\newcommand\testmedspace{\testspace{2cm}}
+\newcommand\testbigspace{\testspace{3cm}}
\endinput
%%
%% End of file `problem.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/stex-tikzinput.sty b/Master/texmf-dist/tex/latex/stex/stex-tikzinput.sty
index e148e1ed05f..ac5bd7e45e3 100644
--- a/Master/texmf-dist/tex/latex/stex/stex-tikzinput.sty
+++ b/Master/texmf-dist/tex/latex/stex/stex-tikzinput.sty
@@ -6,7 +6,7 @@
%%
%% tikzinput.dtx (with options: `stex')
%%
-\ProvidesExplPackage{stex-tikzinput}{2022/05/24}{3.1.0}{stex-tikzinput}
+\ProvidesExplPackage{stex-tikzinput}{2022/09/14}{3.2.0}{stex-tikzinput}
\RequirePackage{stex}
\RequirePackage{tikzinput}
@@ -72,6 +72,7 @@
}
}
+
\endinput
%%
%% End of file `stex-tikzinput.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/stex.cls b/Master/texmf-dist/tex/latex/stex/stex.cls
index 5d8d364e07f..994fa41cbf0 100644
--- a/Master/texmf-dist/tex/latex/stex/stex.cls
+++ b/Master/texmf-dist/tex/latex/stex/stex.cls
@@ -10,7 +10,7 @@
%%%%%%%%%%%%% basics.dtx %%%%%%%%%%%%%
\RequirePackage{expl3,l3keys2e}
-\ProvidesExplClass{stex}{2022/05/24}{3.1.0}{sTeX document class}
+\ProvidesExplClass{stex}{2022/09/14}{3.2.0}{sTeX document class}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{stex}}
\ProcessOptions
diff --git a/Master/texmf-dist/tex/latex/stex/stex.sty b/Master/texmf-dist/tex/latex/stex/stex.sty
index c4af84bc87b..3f23bb2557e 100644
--- a/Master/texmf-dist/tex/latex/stex/stex.sty
+++ b/Master/texmf-dist/tex/latex/stex/stex.sty
@@ -21,14 +21,14 @@
%%%%%%%%%%%%% basics.dtx %%%%%%%%%%%%%
\RequirePackage{expl3,l3keys2e,ltxcmds}
-\ProvidesExplPackage{stex}{2022/05/24}{3.1.0}{sTeX package}
+\ProvidesExplPackage{stex}{2022/09/14}{3.2.0}{sTeX package}
\bool_if_exist:NF \c_stex_document_class_bool {
\bool_set_false:N \c_stex_document_class_bool
\RequirePackage{standalone}
}
-\message{^^J*~This~is~sTeX~version~3.1.0~*^^J}
+\message{^^J*~This~is~sTeX~version~3.2.0~*^^J}
\keys_define:nn { stex } {
@@ -71,7 +71,7 @@
\msg_redirect_module:nnn{ stex }{ none }{ term }
}{
\clist_map_inline:Nn \c_stex_debug_clist {
- \msg_redirect_name:nnn{ stex }{ debug / ##1 }{ term }
+ \msg_redirect_name:nnn{ stex }{ debug / #1 }{ term }
}
}
@@ -100,14 +100,26 @@
}
}
}
+\ifcsname if@rustex\endcsname\else
+ \expandafter\newif\csname if@rustex\endcsname
+ \@rustexfalse
+\fi
+\ifcsname if@latexml\endcsname\else
+ \expandafter\newif\csname if@latexml\endcsname
+ \@latexmlfalse
+\fi
\tl_if_exist:NF\stex@backend{
- \ifcsname if@rustex\endcsname
+ \if@rustex
\def\stex@backend{rustex}
\else
- \ifcsname if@latexml\endcsname
+ \if@latexml
\def\stex@backend{latexml}
\else
- \def\stex@backend{pdflatex}
+ \cs_if_exist:NTF\HCode{
+ \def\stex@backend{tex4ht}
+ }{
+ \def\stex@backend{pdflatex}
+ }
\fi
\fi
}
@@ -192,6 +204,7 @@
}
}
}
+
\bool_if:NTF \c_stex_persist_mode_bool {
\def \stex_persist:n #1 {}
\def \stex_persist:x #1 {}
@@ -360,6 +373,7 @@
\detokenize{#1}~found~two~candidates~for~#2
}
\cs_new_protected:Nn \stex_path_from_string:Nn {
+ \stex_debug:nn{files}{#2}
\str_set:Nx \l_tmpa_str { #2 }
\str_if_empty:NTF \l_tmpa_str {
\seq_clear:N #1
@@ -375,6 +389,7 @@
}
\stex_path_canonicalize:N #1
}
+ \stex_debug:nn{files}{Yields: \stex_path_to_string:N#1}
}
\cs_new_protected:Nn \stex_path_to_string:NN {
@@ -476,6 +491,7 @@
}
\seq_gset_eq:NN\g_stex_currentfile_seq\g_stex_currentfile_seq
\exp_args:NNo\seq_gpush:Nn\g__stex_files_stack\g_stex_currentfile_seq
+ \stex_get_document_uri:
}
\cs_new_protected:Nn \stex_filestack_pop: {
\seq_if_empty:NF\g__stex_files_stack{
@@ -487,9 +503,14 @@
\seq_get:NN\g__stex_files_stack\l_tmpa_seq
\seq_gset_eq:NN\g_stex_currentfile_seq\l_tmpa_seq
}
+ \stex_get_document_uri:
}
\AddToHook{file/before}{
- \stex_filestack_push:n{\CurrentFilePath/\CurrentFile}
+ \tl_if_empty:NTF\CurrentFilePath{
+ \stex_filestack_push:n{\CurrentFile}
+ }{
+ \stex_filestack_push:n{\CurrentFilePath/\CurrentFile}
+ }
}
\AddToHook{file/after}{
\stex_filestack_pop:
@@ -499,6 +520,7 @@
\begingroup\escapechar=-1\catcode`\\=12
\exp_args:Nx\stex_kpsewhich:n{-expand-var~\c_percent_str MATHHUB\c_percent_str}
\exp_args:NNx\str_replace_all:Nnn\l_stex_kpsewhich_return_str{\c_backslash_str}/
+ \exp_args:NNx\str_if_eq:onT\l_stex_kpsewhich_return_str{\c_percent_str MATHHUB\c_percent_str}{\str_clear:N\l_stex_kpsewhich_return_str}
\exp_args:Nnx\use:nn{\endgroup}{\str_set:Nn\exp_not:N\l_stex_kpsewhich_return_str{\l_stex_kpsewhich_return_str}}
}{
\stex_kpsewhich:n{-var-value~MATHHUB}
@@ -514,15 +536,15 @@
}{
\stex_kpsewhich:n{-var-value~HOME}
}
- \ior_open:NnT \l_tmpa_ior{\l_stex_kpsewhich_return_str / .stex / mathhub.path}{
+ \ior_open:NnT \g_tmpa_ior{\l_stex_kpsewhich_return_str / .stex / mathhub.path}{
\begingroup\escapechar=-1\catcode`\\=12
- \ior_str_get:NN \l_tmpa_ior \l_tmpa_str
+ \ior_str_get:NN \g_tmpa_ior \l_tmpa_str
\sys_if_platform_windows:T{
\exp_args:NNx\str_replace_all:Nnn\l_tmpa_str{\c_backslash_str}/
}
\str_gset_eq:NN \c_stex_mathhub_str\l_tmpa_str
\endgroup
- \ior_close:N \l_tmpa_ior
+ \ior_close:N \g_tmpa_ior
}
}
\str_if_empty:NTF\c_stex_mathhub_str{
@@ -871,17 +893,23 @@
}
-%%%%%%%%%%%%% references.dtx %%%%%%%%%%%%%
-
+%%%%%%%%%%%%% stex-references.dtx %%%%%%%%%%%%%
+\msg_new:nnn{stex}{error/extrefmissing}{
+ Missing~in~or~cite~value~for~\detokenize{\extref}!
+}
+\msg_new:nnn{stex}{warning/smsmissing}{
+ .sref~file~#1~doesn't~exist!
+}
+\msg_new:nnn{stex}{warning/smslabelmissing}{
+ No~label~#2~in~.sref~file~#1!
+}
+\iow_new:N \c__stex_refs_refs_iow
\AtBeginDocument{
+ \iow_open:Nn \c__stex_refs_refs_iow {\jobname.sref}
}
\AtEndDocument{
-}
-\str_set:Nn \g__stex_refs_title_tl {Unnamed~Document}
-
-\NewDocumentCommand \STEXreftitle { m } {
- \tl_gset:Nx \g__stex_refs_title_tl { #1 }
+ \iow_close:N \c__stex_refs_refs_iow
}
\str_new:N \l_stex_current_docns_str
\cs_new_protected:Nn \stex_get_document_uri: {
@@ -916,13 +944,14 @@
}
\seq_if_empty:NTF \l_tmpa_seq {
- \str_set_eq:NN \l_stex_current_docns_str \l_tmpa_str
+ \str_gset_eq:NN \l_stex_current_docns_str \l_tmpa_str
}{
- \str_set:Nx \l_stex_current_docns_str {
+ \str_gset:Nx \l_stex_current_docns_str {
\l_tmpa_str/\stex_path_to_string:N \l_tmpa_seq
}
}
}
+ %\stex_get_document_url:
}
\str_new:N \l_stex_current_docurl_str
\cs_new_protected:Nn \stex_get_document_url: {
@@ -971,190 +1000,361 @@
\str_const:Nn \c__stex_refs_ref_str{REF}
\str_new:N \l__stex_refs_curr_label_str
\int_new:N \l__stex_refs_unnamed_counter_int
+\cs_new_protected:Npn \STEXInternalSrefRestoreTarget #1#2#3#4#5 {}
+\seq_new:N \g_stex_ref_files_seq
+
\cs_new_protected:Nn \stex_ref_new_doc_target:n {
- \stex_get_document_uri:
+ %\stex_get_document_uri:
\str_clear:N \l__stex_refs_curr_label_str
\str_set:Nx \l_tmpa_str { #1 }
\str_if_empty:NT \l_tmpa_str {
- \int_incr:N \l__stex_refs_unnamed_counter_int
+ \int_gincr:N \l__stex_refs_unnamed_counter_int
\str_set:Nx \l_tmpa_str {REF\int_use:N \l__stex_refs_unnamed_counter_int}
}
\str_set:Nx \l__stex_refs_curr_label_str {
\l_stex_current_docns_str?\l_tmpa_str
}
- \seq_if_exist:cF{g__stex_refs_labels_\l_tmpa_str _seq}{
- \seq_new:c {g__stex_refs_labels_\l_tmpa_str _seq}
- }
- \seq_if_in:coF{g__stex_refs_labels_\l_tmpa_str _seq}\l__stex_refs_curr_label_str {
- \seq_gput_right:co{g__stex_refs_labels_\l_tmpa_str _seq}\l__stex_refs_curr_label_str
- }
+
+ \exp_args:Noo \STEXInternalAuxAddDocRef\l_stex_current_docns_str\l_tmpa_str
+
+ %\seq_if_exist:cF{g__stex_refs_labels_\l_tmpa_str _seq}{
+ % \seq_new:c {g__stex_refs_labels_\l_tmpa_str _seq}
+ %}
+ %\seq_if_in:coF{g__stex_refs_labels_\l_tmpa_str _seq}\l__stex_refs_curr_label_str {
+ % \seq_gput_right:co{g__stex_refs_labels_\l_tmpa_str _seq}\l__stex_refs_curr_label_str
+ %}
+
\stex_if_smsmode:TF {
- \stex_get_document_url:
- \str_gset_eq:cN {sref_url_\l__stex_refs_curr_label_str _str}\l_stex_current_docurl_str
- \str_gset_eq:cN {sref_\l__stex_refs_curr_label_str _type}\c__stex_refs_url_str
+ %\stex_get_document_url:
+ %\str_gset_eq:cN {sref_url_\l__stex_refs_curr_label_str _str}\l_stex_current_docurl_str
+ %\str_gset_eq:cN {sref_\l__stex_refs_curr_label_str _type}\c__stex_refs_url_str
}{
- %\iow_now:Nx \c__stex_refs_refs_iow { \l_tmpa_str~=~\expandafter\unexpanded\expandafter{\@currentlabel}~in~\exp_args:No\unexpanded\g__stex_refs_title_tl,}
+ \iow_now:Nx \c__stex_refs_refs_iow {
+ \STEXInternalSrefRestoreTarget
+ {\l_stex_current_docns_str}
+ {\l_tmpa_str}
+ {\@currentcounter}
+ {\@currentlabel}
+ {\tl_if_exist:NT\@currentlabelname{\exp_args:No\unexpanded\@currentlabelname}}
+ }
+ %\iow_now:Nx \c__stex_refs_refs_iow {
+ % {\l_stex_current_docns_str?\l_tmpa_str}~=~{{\use:c{\@currentcounter autorefname}~\@currentlabel}~(\@currentlabelname)~in~\exp_args:No\unexpanded\g__stex_refs_title_tl},}
+ \stex_debug:nn{sref}{New~label~\l__stex_refs_curr_label_str~at~\use:c{\use:c{@currentcounter}autorefname}}
\exp_args:Nx\label{sref_\l__stex_refs_curr_label_str}
- \immediate\write\@auxout{\stexauxadddocref{\l_stex_current_docns_str}{\l_tmpa_str}}
- \str_gset:cx {sref_\l__stex_refs_curr_label_str _type}\c__stex_refs_ref_str
+ \immediate\write\@auxout{\STEXInternalAuxAddDocRef{\l_stex_current_docns_str}{\l_tmpa_str}}
+ %\str_gset:cx {sref_\l__stex_refs_curr_label_str _type}\c__stex_refs_ref_str
}
}
-\cs_new_protected:Npn \stexauxadddocref #1 #2 {
- \str_set:Nn \l_tmpa_str {#1?#2}
- \str_gset_eq:cN{sref_#1?#2_type}\c__stex_refs_ref_str
- \seq_if_exist:cF{g__stex_refs_labels_#2_seq}{
- \seq_new:c {g__stex_refs_labels_#2_seq}
- }
- \seq_if_in:coF{g__stex_refs_labels_#2_seq}\l_tmpa_str {
- \seq_gput_right:co{g__stex_refs_labels_#2_seq}\l_tmpa_str
- }
+\NewDocumentCommand \slabel {m} {\stex_ref_new_doc_target:n {#1}}
+\cs_new_protected:Npn \STEXInternalAuxAddDocRef #1 #2 {
+ \exp_args:NNx \seq_if_in:NnTF \g_stex_ref_files_seq {\detokenize{#1}} {
+ \exp_args:Nnx \seq_if_in:cnF{g_stex_ref_ #1 _seq}{\detokenize{#2}}{
+ \exp_args:Nnx \seq_gput_left:cn{g_stex_ref_ #1 _seq}{\detokenize{#2}}
+ }
+ }{
+ \exp_args:NNx \seq_gput_right:Nn \g_stex_ref_files_seq {\detokenize{#1}}
+ %\seq_if_exist:cF{g_stex_ref_ #1 _seq}{
+ \seq_new:c{g_stex_ref_ #1 _seq} % <- seq_new throws errors??
+ %}
+ \exp_args:Nnx \seq_gput_left:cn{g_stex_ref_ #1 _seq}{\detokenize{#2}}
+ }
+
+ %\str_set:Nn \l_tmpa_str {#1?#2}
+ %\str_gset_eq:cN{sref_#1?#2_type}\c__stex_refs_ref_str
+ %\seq_if_exist:cF{g__stex_refs_labels_#2_seq}{
+ % \seq_new:c {g__stex_refs_labels_#2_seq}
+ %}
+ %\seq_if_in:coF{g__stex_refs_labels_#2_seq}\l_tmpa_str {
+ % \seq_gput_right:co{g__stex_refs_labels_#2_seq}\l_tmpa_str
+ %}
}
\AtEndDocument{
- \def\stexauxadddocref#1 #2 {}{}
+ \def\STEXInternalAuxAddDocRef#1 #2 {}{}
}
\cs_new_protected:Nn \stex_ref_new_sym_target:n {
- \stex_if_smsmode:TF {
- \str_if_exist:cF{sref_sym_#1_type}{
- \stex_get_document_url:
- \str_gset_eq:cN {sref_sym_url_#1_str}\l_stex_current_docurl_str
- \str_gset_eq:cN {sref_sym_#1_type}\c__stex_refs_url_str
- }
- }{
- \str_if_empty:NF \l__stex_refs_curr_label_str {
- \str_gset_eq:cN {sref_sym_#1_label_str}\l__stex_refs_curr_label_str
- \immediate\write\@auxout{
- \exp_not:N\expandafter\def\exp_not:N\csname \exp_not:N\detokenize{sref_sym_#1_label_str}\exp_not:N\endcsname{
- \l__stex_refs_curr_label_str
- }
- }
- }
- }
+
}
-\str_new:N \l__stex_refs_indocument_str
-\keys_define:nn { stex / sref } {
- linktext .tl_set:N = \l__stex_refs_linktext_tl ,
- fallback .tl_set:N = \l__stex_refs_fallback_tl ,
- pre .tl_set:N = \l__stex_refs_pre_tl ,
- post .tl_set:N = \l__stex_refs_post_tl ,
+\keys_define:nn { stex / sref / 1 } {
+ archive .str_set_x:N = \l__stex_refs_repo_str,
+ file .str_set_x:N = \l__stex_refs_file_str,
+ % TODO get rid of this
+ fallback .code:n = {},
+ pre .code:n = {},
+ post .code:n = {}
}
-\cs_new_protected:Nn \__stex_refs_args:n {
- \tl_clear:N \l__stex_refs_linktext_tl
- \tl_clear:N \l__stex_refs_fallback_tl
- \tl_clear:N \l__stex_refs_pre_tl
- \tl_clear:N \l__stex_refs_post_tl
+\cs_new_protected:Nn \__stex_refs_args_i:n {
\str_clear:N \l__stex_refs_repo_str
- \keys_set:nn { stex / sref } { #1 }
-}
-\NewDocumentCommand \sref { O{} m}{
- \__stex_refs_args:n { #1 }
- \str_if_empty:NTF \l__stex_refs_indocument_str {
- \str_set:Nx \l_tmpa_str { #2 }
- \exp_args:NNno \seq_set_split:Nnn \l_tmpa_seq ? \l_tmpa_str
- \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} = 1 {
- \seq_if_exist:cTF{g__stex_refs_labels_\l_tmpa_str _seq}{
- \seq_get_left:cNF {g__stex_refs_labels_\l_tmpa_str _seq} \l_tmpa_str {
- \str_clear:N \l_tmpa_str
+ \str_clear:N \l__stex_refs_file_str
+ \keys_set:nn { stex / sref / 1 } { #1 }
+}
+\keys_define:nn { stex / sref / 2 } {
+ in .str_set_x:N = \l__stex_refs_in_str,
+ archive .str_set_x:N = \l__stex_refs_repob_str,
+ title .tl_set:N = \l__stex_refs_title_tl
+}
+\cs_new_protected:Nn \__stex_refs_args_ii:n {
+ \str_clear:N \l__stex_refs_in_str
+ \tl_clear:N \l__stex_refs_title_tl
+ \str_clear:N \l__stex_refs_repob_str
+ \keys_set:nn { stex / sref / 2 } { #1 }
+}
+\NewDocumentCommand \sref { O{} m O{}}{
+ \__stex_refs_args_i:n{#1}
+ \__stex_refs_args_ii:n{#3}
+ \str_clear:N \l__stex_refs_uri_str
+ \__stex_refs_find_uri:n{#2}
+ \__stex_refs_do_sref:n{#2}
+}
+\NewDocumentCommand \extref { O{} m m}{
+ \__stex_refs_args_i:n{#1}
+ \__stex_refs_args_ii:n{#3}
+ \str_if_empty:NT \l__stex_refs_in_str {
+ \msg_error:nn{stex}{error/extrefmissing}
+ }
+ \str_clear:N \l__stex_refs_uri_str
+ \__stex_refs_find_uri:n{#2}
+ \__stex_refs_do_sref_in:n{#2}
+}
+
+\cs_new_protected:Nn \__stex_refs_find_uri:n {
+ \stex_debug:nn{sref}{File:~\l__stex_refs_file_str^^JRepo:\l__stex_refs_repo_str}
+ \str_if_empty:NTF \l__stex_refs_file_str {
+ \stex_debug:nn{sref}{Empty.~Checking~current~file~for~#1}
+ \seq_if_exist:cT{g_stex_ref_\l_stex_current_docns_str _seq}{
+ \seq_map_inline:cn{g_stex_ref_\l_stex_current_docns_str _seq}{
+ \str_if_eq:nnT{#1}{##1}{
+ \str_set_eq:NN \l__stex_refs_uri_str \l_stex_current_docns_str
+ \stex_debug:nn{sref}{Found.}
+ \seq_map_break:
}
- }{
- \str_clear:N \l_tmpa_str
}
- }{
- \seq_pop_left:NN \l_tmpa_seq \l_tmpb_str
- \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
- \int_set:Nn \l_tmpa_int { \exp_args:Ne \str_count:n {\l_tmpb_str?\l_tmpa_str} }
- \seq_if_exist:cTF{g__stex_refs_labels_\l_tmpa_str _seq}{
- \str_set_eq:NN \l_tmpc_str \l_tmpa_str
- \str_clear:N \l_tmpa_str
- \seq_map_inline:cn {g__stex_refs_labels_\l_tmpc_str _seq} {
- \str_if_eq:eeT { \l_tmpb_str?\l_tmpc_str }{
- \str_range:nnn { ##1 }{ -\l_tmpa_int}{ -1 }
- }{
- \seq_map_break:n {
- \str_set:Nn \l_tmpa_str { ##1 }
- }
+ }
+ \str_if_empty:NT \l__stex_refs_uri_str {
+ \stex_debug:nn{sref}{Checking~other~files}
+ \seq_map_inline:Nn \g_stex_ref_files_seq {
+ \stex_debug:nn{sref}{##1...}
+ \seq_map_inline:cn{g_stex_ref_##1_seq}{
+ \str_if_eq:nnT{#1}{####1}{
+ \stex_debug:nn{sref}{Found~##1}
+ \str_set:Nn \l__stex_refs_uri_str {##1}
+ \seq_map_break:n{\seq_map_break:}
}
}
+ }
+ }
+ }{
+ \str_if_empty:NTF \l__stex_refs_repo_str {
+ \prop_if_exist:NTF \l_stex_current_repository_prop {
+ \prop_get:NnN \l_stex_current_repository_prop { ns } \l__stex_refs_uri_str
+ \str_set:Nx \l__stex_refs_uri_str {\l__stex_refs_uri_str / \l__stex_refs_file_str}
+ \stex_path_from_string:Nn \l_tmpb_seq \l__stex_refs_uri_str
+ \str_set:Nx \l__stex_refs_uri_str {\stex_path_to_string:N \l_tmpb_seq}
}{
- \str_clear:N \l_tmpa_str
+ \stex_path_from_string:Nn \l_tmpb_seq {
+ \stex_path_to_string:N \g_stex_currentfile_seq/ .. / \l__stex_refs_file_str
+ }
+ \str_set:Nx \l__stex_refs_uri_str {file:/\stex_path_to_string:N \l_tmpb_seq}
}
+ }{
+ \stex_require_repository:n \l__stex_refs_repo_str
+ \prop_get:cnN { c_stex_mathhub_\l__stex_refs_repo_str _manifest_prop } { ns } \l__stex_refs_uri_str
+ \str_set:Nx \l__stex_refs_uri_str {\l__stex_refs_uri_str / \l__stex_refs_file_str}
+ \stex_path_from_string:Nn \l_tmpb_seq \l__stex_refs_uri_str
+ \str_set:Nx \l__stex_refs_uri_str {\stex_path_to_string:N \l_tmpb_seq}
}
- \str_if_empty:NTF \l_tmpa_str {
- \tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl
+ }
+}
+
+\cs_new_protected:Nn \__stex_refs_do_autoref:n{
+ \cs_if_exist:cTF{autoref}{
+ \exp_args:Nx\autoref{sref_#1}
+ }{
+ \exp_args:Nx\ref{sref_#1}
+ }
+}
+
+\cs_new_protected:Nn \__stex_refs_do_sref:n {
+ \str_if_empty:NTF \l__stex_refs_uri_str {
+ \str_if_empty:NTF \l__stex_refs_in_str {
+ \stex_debug:nn{sref}{autoref~on~#1}
+ \__stex_refs_do_autoref:n{#1}
}{
- \str_if_eq:cNTF {sref_\l_tmpa_str _type} \c__stex_refs_ref_str {
- \tl_if_empty:NTF \l__stex_refs_linktext_tl {
- \cs_if_exist:cTF{autoref}{
- \l__stex_refs_pre_tl\exp_args:Nx\autoref{sref_\l_tmpa_str}\l__stex_refs_post_tl
- }{
- \l__stex_refs_pre_tl\exp_args:Nx\ref{sref_\l_tmpa_str}\l__stex_refs_post_tl
- }
- }{
- \ltx@ifpackageloaded{hyperref}{
- \hyperref[sref_\l_tmpa_str]\l__stex_refs_linktext_tl
- }{
- \l__stex_refs_linktext_tl
- }
- }
+ \stex_debug:nn{sref}{srefin~on~#1}
+ \__stex_refs_do_sref_in:n{#1}
+ }
+ }{
+ \exp_args:NNo \seq_if_in:NnTF \g_stex_ref_files_seq \l__stex_refs_uri_str {
+ \exp_args:Nnx \seq_if_in:cnTF{g_stex_ref_\l__stex_refs_uri_str _seq}{\detokenize{#1}}{
+ \stex_debug:nn{sref}{Reference~found~in~ref~files;~autoref~on~#1}
+ \__stex_refs_do_autoref:n{\l__stex_refs_uri_str?#1}
}{
- \ltx@ifpackageloaded{hyperref}{
- \href{\use:c{sref_url_\l_tmpa_str _str}}{\tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl}
+ \str_if_empty:NTF \l__stex_refs_in_str {
+ \stex_debug:nn{sref}{in~empty;~autoref~on~#1}
+ \__stex_refs_do_autoref:n{#1}
}{
- \tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl
+ \stex_debug:nn{sref}{in~non-empty;~srefin~on~#1}
+ \__stex_refs_do_sref_in:n{#1}
}
}
+ }{
+ \str_if_empty:NTF \l__stex_refs_in_str {
+ \stex_debug:nn{sref}{in~empty;~autoref~on~#1}
+ \__stex_refs_do_autoref:n{#1}
+ }{
+ \stex_debug:nn{sref}{in~non-empty;~srefin~on~#1}
+ \__stex_refs_do_sref_in:n{#1}
+ }
}
- }{
- % TODO
}
}
-\NewDocumentCommand \srefsym { O{} m}{
- \stex_get_symbol:n { #2 }
- \__stex_refs_sym_aux:nn{#1}{\l_stex_get_symbol_uri_str}
-}
-\cs_new_protected:Nn \__stex_refs_sym_aux:nn {
- \str_if_exist:cTF {sref_sym_#2 _label_str }{
- \sref[#1]{\use:c{sref_sym_#2 _label_str}}
+\cs_new_protected:Nn \__stex_refs_restore_target:nnnnn {
+ \str_if_empty:NTF \l__stex_refs_uri_str {
+ \exp_args:No \str_if_eq:nnT \l__stex_refs_id_str {#2}{
+ \tl_set:Nn \l__stex_refs_return_tl {
+ \use:c{#3autorefname}~#4\tl_if_empty:nF{#5}{~(#5)}~in~
+ \tl_if_empty:nTF\l__stex_refs_title_tl{
+ ???
+ }\l__stex_refs_title_tl
+ }
+ }
}{
- \__stex_refs_args:n { #1 }
- \str_if_empty:NTF \l__stex_refs_indocument_str {
- \tl_if_exist:cTF{sref_sym_#2 _type}{
- % doc uri in \l_tmpb_str
- \str_set:Nx \l_tmpa_str {\use:c{sref_sym_#2 _type}}
- \str_if_eq:NNTF \l_tmpa_str \c__stex_refs_ref_str {
- % reference
- \tl_if_empty:NTF \l__stex_refs_linktext_tl {
- \cs_if_exist:cTF{autoref}{
- \l__stex_refs_pre_tl\autoref{sref_sym_#2}\l__stex_refs_post_tl
- }{
- \l__stex_refs_pre_tl\ref{sref_sym_#2}\l__stex_refs_post_tl
- }
- }{
- \ltx@ifpackageloaded{hyperref}{
- \hyperref[sref_sym_#2]\l__stex_refs_linktext_tl
- }{
- \l__stex_refs_linktext_tl
- }
- }
- }{
- % URL
- \ltx@ifpackageloaded{hyperref}{
- \href{\use:c{sref_sym_url_#2 _str}}{\tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl}
- }{
- \tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl
- }
+ \stex_debug:nn{sref}{\l__stex_refs_uri_str{}~ == ~ #1 ~ ?}
+ \exp_args:No \str_if_eq:nnT \l__stex_refs_uri_str {#1}{
+ \stex_debug:nn{sref}{\l__stex_refs_id_str~ == ~ #2 ~ ?}
+ \exp_args:No \str_if_eq:nnT \l__stex_refs_id_str {#2}{
+ \stex_debug:nn{sref}{success!}
+ \tl_set:Nn \l__stex_refs_return_tl {
+ \use:c{#3autorefname}~#4\tl_if_empty:nF{#5}{~(#5)}~in~
+ \tl_if_empty:nTF\l__stex_refs_title_tl{
+ ???
+ }\l__stex_refs_title_tl
+ }
+ \endinput
+ }
+ }
+ }
+}
+
+\cs_new_protected:Nn \__stex_refs_do_sref_in:n {
+ \stex_debug:nn{sref}{In: \l__stex_refs_in_str^^JRepo:\l__stex_refs_repo_str}
+ \stex_debug:nn{sref}{URI: \l__stex_refs_uri_str?#1}
+ %\msg_warning:nnn{stex}{warning/smsmissing}{<filename>}
+ \begingroup\catcode13=9\relax\catcode10=9\relax
+ \str_if_empty:NTF \l__stex_refs_repob_str {
+ \prop_if_exist:NTF \l_stex_current_repository_prop {
+ \str_set:Nx \l_tmpa_str {
+ \c_stex_mathhub_str /
+ \prop_item:Nn \l_stex_current_repository_prop { id }
+ / source / \l__stex_refs_in_str .sref
}
}{
- \tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl
+ \str_set:Nx \l_tmpa_str {
+ \stex_path_to_string:N \g_stex_currentfile_seq/ .. / \l__stex_refs_in_str . sref
+ }
}
}{
- % TODO
+ \str_set:Nx \l_tmpa_str {
+ \c_stex_mathhub_str / \l__stex_refs_repob_str
+ / source / \l__stex_refs_in_str . sref
+ }
+ }
+ \stex_path_from_string:Nn \l_tmpb_seq \l_tmpa_str
+ \stex_path_to_string:NN \l_tmpb_seq \l_tmpa_str
+ \stex_debug:nn{sref}{File: \l_tmpa_str}
+ \exp_args:No \IfFileExists \l_tmpa_str {
+ \tl_clear:N \l__stex_refs_return_tl
+ \str_set:Nn \l__stex_refs_id_str {#1}
+ \let\STEXInternalSrefRestoreTarget\__stex_refs_restore_target:nnnnn
+ \use:c{@ @ input}{\l_tmpa_str}
+ \exp_args:No \tl_if_empty:nTF \l__stex_refs_return_tl {
+ \exp_args:Nnno \msg_warning:nnnn{stex}{warning/smslabelmissing}\l_tmpa_str{#1}
+ \__stex_refs_do_autoref:n{
+ \str_if_empty:NF\l__stex_refs_uri_str{\l__stex_refs_uri_str?}#1
+ }
+ }{
+ \l__stex_refs_return_tl
+ }
+ }{
+ \exp_args:Nnno \msg_warning:nnn{stex}{warning/smsmissing}\l_tmpa_str
+ \__stex_refs_do_autoref:n{
+ \str_if_empty:NF\l__stex_refs_uri_str{\l__stex_refs_uri_str?}#1
+ }
}
- }
+ \endgroup
}
-\cs_new_protected:Npn \srefsymuri #1 #2 {
- \__stex_refs_sym_aux:nn{linktext={#2}}{#1}
+
+ % \__stex_refs_args:n { #1 }
+ % \str_if_empty:NTF \l__stex_refs_indocument_str {
+ % \str_set:Nx \l_tmpa_str { #2 }
+ % \exp_args:NNno \seq_set_split:Nnn \l_tmpa_seq ? \l_tmpa_str
+ % \int_compare:nNnTF {\seq_count:N \l_tmpa_seq} = 1 {
+ % \seq_if_exist:cTF{g__stex_refs_labels_\l_tmpa_str _seq}{
+ % \seq_get_left:cNF {g__stex_refs_labels_\l_tmpa_str _seq} \l_tmpa_str {
+ % \str_clear:N \l_tmpa_str
+ % }
+ % }{
+ % \str_clear:N \l_tmpa_str
+ % }
+ % }{
+ % \seq_pop_left:NN \l_tmpa_seq \l_tmpb_str
+ % \seq_pop_right:NN \l_tmpa_seq \l_tmpa_str
+ % \int_set:Nn \l_tmpa_int { \exp_args:Ne \str_count:n {\l_tmpb_str?\l_tmpa_str} }
+ % \seq_if_exist:cTF{g__stex_refs_labels_\l_tmpa_str _seq}{
+ % \str_set_eq:NN \l_tmpc_str \l_tmpa_str
+ % \str_clear:N \l_tmpa_str
+ % \seq_map_inline:cn {g__stex_refs_labels_\l_tmpc_str _seq} {
+ % \str_if_eq:eeT { \l_tmpb_str?\l_tmpc_str }{
+ % \str_range:nnn { ##1 }{ -\l_tmpa_int}{ -1 }
+ % }{
+ % \seq_map_break:n {
+ % \str_set:Nn \l_tmpa_str { ##1 }
+ % }
+ % }
+ % }
+ % }{
+ % \str_clear:N \l_tmpa_str
+ % }
+ % }
+ % \str_if_empty:NTF \l_tmpa_str {
+ % \tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl
+ % }{
+ % \str_if_eq:cNTF {sref_\l_tmpa_str _type} \c__stex_refs_ref_str {
+ % \tl_if_empty:NTF \l__stex_refs_linktext_tl {
+ % \cs_if_exist:cTF{autoref}{
+ % \l__stex_refs_pre_tl\exp_args:Nx\autoref{sref_\l_tmpa_str}\l__stex_refs_post_tl
+ % }{
+ % \l__stex_refs_pre_tl\exp_args:Nx\ref{sref_\l_tmpa_str}\l__stex_refs_post_tl
+ % }
+ % }{
+ % \ltx@ifpackageloaded{hyperref}{
+ % \hyperref[sref_\l_tmpa_str]\l__stex_refs_linktext_tl
+ % }{
+ % \l__stex_refs_linktext_tl
+ % }
+ % }
+ % }{
+ % \ltx@ifpackageloaded{hyperref}{
+ % \href{\use:c{sref_url_\l_tmpa_str _str}}{\tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl}
+ % }{
+ % \tl_if_empty:NTF \l__stex_refs_linktext_tl \l__stex_refs_fallback_tl \l__stex_refs_linktext_tl
+ % }
+ % }
+ % }
+ % }{
+ % TODO
+ % }
+\NewDocumentCommand \srefsym { O{} m}{
+ \stex_get_symbol:n { #2 }
+ \__stex_refs_sym_aux:nn{#1}{\l_stex_get_symbol_uri_str}
+}
+
+\cs_new_protected:Nn \__stex_refs_sym_aux:nn {
+
+}
+\cs_new_protected:Npn \srefsymuri #1 #2 { % TODO
+ #2%\__stex_refs_sym_aux:nn{linktext={#2}}{#1}
}
%%%%%%%%%%%%% modules.dtx %%%%%%%%%%%%%
@@ -1641,6 +1841,15 @@
\use:c{ c_stex_module_#1_code }
}
}
+\NewDocumentEnvironment { mmtinterface } { O{} m m } {
+ \begin{smodule}[#1]{#3}
+ \str_set:Nx \l_stex_module_mmtfor_str {#2}
+ \MMTinclude{#2}
+ \stex_reactivate_macro:N \mmtdecl
+ \stex_reactivate_macro:N \mmtdef
+}{
+ \end{smodule}
+}
%%%%%%%%%%%%% inheritance.dtx %%%%%%%%%%%%%
@@ -1685,7 +1894,9 @@
sexample,
sassertion,
sparagraph,
- mathstructure
+ mathstructure,
+ extstructure,
+ extstructure*
}
}
\bool_new:N \g__stex_smsmode_bool
@@ -2036,14 +2247,11 @@
\stex_debug:nn{modules}{Importing~module:~
\l_stex_import_ns_str ? \l_stex_import_name_str
}
- \stex_import_require_module:nnnn
- { \l_stex_import_ns_str } { \l_stex_import_archive_str }
- { \l_stex_import_path_str } { \l_stex_import_name_str }
\stex_if_smsmode:F {
\stex_annotate_invisible:nnn
{import} {\l_stex_import_ns_str ? \l_stex_import_name_str} {}
}
- \exp_args:Nx \stex_add_to_current_module:n {
+ \stex_execute_in_module:x {
\stex_import_require_module:nnnn
{ \l_stex_import_ns_str } { \l_stex_import_archive_str }
{ \l_stex_import_path_str } { \l_stex_import_name_str }
@@ -2112,15 +2320,14 @@
}
\keys_define:nn { stex / symdecl } {
name .str_set_x:N = \l_stex_symdecl_name_str ,
- local .bool_set:N = \l_stex_symdecl_local_bool ,
args .str_set_x:N = \l_stex_symdecl_args_str ,
type .tl_set:N = \l_stex_symdecl_type_tl ,
deprecate .str_set_x:N = \l_stex_symdecl_deprecate_str ,
align .str_set:N = \l_stex_symdecl_align_str , % TODO(?)
gfc .str_set:N = \l_stex_symdecl_gfc_str , % TODO(?)
- specializes .str_set:N = \l_stex_symdecl_specializes_str , % TODO(?)
def .tl_set:N = \l_stex_symdecl_definiens_tl ,
reorder .str_set_x:N = \l_stex_symdecl_reorder_str ,
+ argnames .clist_set:N = \l_stex_symdecl_argnames_clist ,
assoc .choices:nn =
{bin,binl,binr,pre,conj,pwconj}
{\str_set:Nx \l_stex_symdecl_assoctype_str {\l_keys_choice_tl}}
@@ -2137,6 +2344,7 @@
\bool_set_false:N \l_stex_symdecl_local_bool
\tl_clear:N \l_stex_symdecl_type_tl
\tl_clear:N \l_stex_symdecl_definiens_tl
+ \clist_clear:N \l_stex_symdecl_argnames_clist
\keys_set:nn { stex / symdecl } { #1 }
}
@@ -2217,6 +2425,7 @@
}{##1}
}
}
+
\bool_if:NTF \l_tmpa_bool {
% possibly numeric
\str_if_empty:NTF \l_stex_symdecl_args_str {
@@ -2244,6 +2453,19 @@
\prop_put:Nnx \l_tmpa_prop { defined }{ true }
}
+ % argnames
+
+ \clist_clear:N \l_tmpa_clist
+ \int_step_inline:nn {\prop_item:Nn \l_tmpa_prop {arity}} {
+ \clist_if_empty:NTF \l_stex_symdecl_argnames_clist {
+ \clist_put_right:Nn \l_tmpa_clist {##1}
+ }{
+ \clist_pop:NN \l_stex_symdecl_argnames_clist \l_tmpa_tl
+ \exp_args:NNx \clist_put_right:Nn \l_tmpa_clist {\c_dollar_str\l_tmpa_tl}
+ }
+ }
+ \prop_put:Nnx \l_tmpa_prop {argnames} {\clist_use:Nn \l_tmpa_clist ,}
+
% semantic macro
\bool_if:NT \l_stex_symdecl_make_macro_bool {
@@ -2289,7 +2511,7 @@
_prop
} {
\bool_if:NTF \l_stex_symdecl_local_bool \stex_do_up_to_module:x \stex_execute_in_module:x {
- \__stex_symdecl_restore_symbol:nnnnnnn
+ \__stex_symdecl_restore_symbol:nnnnnnnn
{\l_stex_symdecl_name_str}
{ \prop_item:Nn \l_tmpa_prop {args} }
{ \prop_item:Nn \l_tmpa_prop {arity} }
@@ -2297,10 +2519,11 @@
{ \prop_item:Nn \l_tmpa_prop {defined} }
{\bool_if:NT \l_stex_symdecl_make_macro_bool {#1} }
{\l_stex_current_module_str}
+ { \prop_item:Nn \l_tmpa_prop {argnames} }
}
}
}
-\cs_new_protected:Nn \__stex_symdecl_restore_symbol:nnnnnnn {
+\cs_new_protected:Nn \__stex_symdecl_restore_symbol:nnnnnnnn {
\prop_clear:N \l_tmpa_prop
\prop_put:Nnn \l_tmpa_prop { module } { #7 }
\prop_put:Nnn \l_tmpa_prop { name } { #1}
@@ -2308,6 +2531,7 @@
\prop_put:Nnn \l_tmpa_prop { arity } { #3 }
\prop_put:Nnn \l_tmpa_prop { assocs } { #4 }
\prop_put:Nnn \l_tmpa_prop { defined } { #5 }
+ \prop_put:Nnn \l_tmpa_prop { argnames } { #8 }
\tl_if_empty:nF{#6}{
\tl_set:cx{#6}{\stex_invoke_symbol:n{\detokenize{#7 ? #1}}}
}
@@ -2323,6 +2547,7 @@
\cs_new_protected:Nn \_stex_textsymdecl_args:n {
\str_clear:N \l__stex_symdecl_name_str
\tl_clear:N \l__stex_symdecl_type_tl
+ \clist_clear:N \l_stex_symdecl_argnames_clist
\keys_set:nn { stex / textsymdecl } { #1 }
}
@@ -2338,12 +2563,12 @@
\stex_execute_in_module:n{
\cs_set_nopar:cpn{#1name}{
\ifvmode\hbox_unpack:N\c_empty_box\fi
- \hbox{#3}\xspace
+ \ifmmode\hbox{#3}\else#3\fi\xspace
}
\cs_set_nopar:cpn{#1}{
\ifmmode\csname#1-sym\expandafter\endcsname\else
\ifvmode\hbox_unpack:N\c_empty_box\fi
- \symref{#1-sym}{\hbox{#3}}\expandafter\xspace
+ \symref{#1-sym}{#3}\expandafter\xspace
\fi
}
}
@@ -2464,18 +2689,20 @@
}
}
\keys_define:nn { stex / notation } {
- variant .tl_set_x:N = \l__stex_notation_variant_str ,
- prec .str_set_x:N = \l__stex_notation_prec_str ,
- op .tl_set:N = \l__stex_notation_op_tl ,
- primary .bool_set:N = \l__stex_notation_primary_bool ,
- primary .default:n = {true} ,
- unknown .code:n = \str_set:Nx
+ variant .tl_set_x:N = \l__stex_notation_variant_str ,
+ prec .str_set_x:N = \l__stex_notation_prec_str ,
+ op .tl_set:N = \l__stex_notation_op_tl ,
+ primary .bool_set:N = \l__stex_notation_primary_bool ,
+ primary .default:n = {true} ,
+ hints .str_set_x:N = \l__stex_notation_hints_str,
+ unknown .code:n = \str_set:Nx
\l__stex_notation_variant_str \l_keys_key_str
}
\cs_new_protected:Nn \_stex_notation_args:n {
\str_clear:N \l__stex_notation_variant_str
\str_clear:N \l__stex_notation_prec_str
+ \str_clear:N \l__stex_notation_hints_str
\tl_clear:N \l__stex_notation_op_tl
\bool_set_false:N \l__stex_notation_primary_bool
@@ -2535,7 +2762,7 @@
\exp_args:NNNo \exp_args:NNno \seq_set_split:Nnn
\l_tmpa_seq {\tl_to_str:n{x} } { \l_tmpa_str }
\seq_map_inline:Nn \l_tmpa_seq {
- \seq_put_right:Nn \l_tmpb_seq { ##1 }
+ \seq_put_right:Nn \l__stex_notation_precedences_seq { ##1 }
}
}
}{
@@ -2668,11 +2895,12 @@
\seq_pop_left:NN \l__stex_notation_remaining_precs_seq \l_tmpa_str
\tl_put_right:Nx \l_stex_notation_dummyargs_tl { {
- \STEXInternalTermMathAssocArgiiii
- { #1\int_use:N \l__stex_notation_currarg_int }
+ \STEXInternalTermMathAssocArgiiiii
+ { \int_use:N \l__stex_notation_currarg_int }
{ \l_tmpa_str }
{ ####\int_use:N \l__stex_notation_currarg_int }
{ \l_tmpa_cs {####1} {####2} }
+ {#1}
} }
\__stex_notation_arguments:
}
@@ -2861,7 +3089,6 @@
\keys_define:nn { stex / symdef } {
name .str_set_x:N = \l_stex_symdecl_name_str ,
- local .bool_set:N = \l_stex_symdecl_local_bool ,
args .str_set_x:N = \l_stex_symdecl_args_str ,
type .tl_set:N = \l_stex_symdecl_type_tl ,
def .tl_set:N = \l_stex_symdecl_definiens_tl ,
@@ -2870,6 +3097,7 @@
% lang .str_set_x:N = \l__stex_notation_lang_str ,
variant .str_set_x:N = \l__stex_notation_variant_str ,
prec .str_set_x:N = \l__stex_notation_prec_str ,
+ argnames .clist_set:N = \l_stex_symdecl_argnames_clist ,
assoc .choices:nn =
{bin,binl,binr,pre,conj,pwconj}
{\str_set:Nx \l_stex_symdecl_assoctype_str {\l_keys_choice_tl}},
@@ -2885,6 +3113,7 @@
\bool_set_false:N \l_stex_symdecl_local_bool
\tl_clear:N \l_stex_symdecl_type_tl
\tl_clear:N \l_stex_symdecl_definiens_tl
+ \clist_clear:N \l_stex_symdecl_argnames_clist
% \str_clear:N \l__stex_notation_lang_str
\str_clear:N \l__stex_notation_variant_str
\str_clear:N \l__stex_notation_prec_str
@@ -2912,6 +3141,70 @@
}
\stex_deactivate_macro:Nn \symdef {module~environments}
+\keys_define:nn { stex / mmtdef } {
+ name .str_set_x:N = \l_stex_symdecl_name_str ,
+ args .str_set_x:N = \l_stex_symdecl_args_str ,
+ reorder .str_set_x:N = \l_stex_symdecl_reorder_str ,
+ op .tl_set:N = \l__stex_notation_op_tl ,
+ % lang .str_set_x:N = \l__stex_notation_lang_str ,
+ variant .str_set_x:N = \l__stex_notation_variant_str ,
+ prec .str_set_x:N = \l__stex_notation_prec_str ,
+ argnames .clist_set:N = \l_stex_symdecl_argnames_clist ,
+ assoc .choices:nn =
+ {bin,binl,binr,pre,conj,pwconj}
+ {\str_set:Nx \l_stex_symdecl_assoctype_str {\l_keys_choice_tl}},
+ unknown .code:n = \str_set:Nx
+ \l__stex_notation_variant_str \l_keys_key_str
+}
+\cs_new_protected:Nn \_stex_mmtdef_args:n {
+ \str_clear:N \l_stex_symdecl_name_str
+ \str_clear:N \l_stex_symdecl_args_str
+ \str_clear:N \l_stex_symdecl_assoctype_str
+ \str_clear:N \l_stex_symdecl_reorder_str
+ \bool_set_false:N \l_stex_symdecl_local_bool
+ \clist_clear:N \l_stex_symdecl_argnames_clist
+ % \str_clear:N \l__stex_notation_lang_str
+ \str_clear:N \l__stex_notation_variant_str
+ \str_clear:N \l__stex_notation_prec_str
+ \tl_clear:N \l__stex_notation_op_tl
+
+ \keys_set:nn { stex / mmtdef } { #1 }
+}
+
+\NewDocumentCommand \mmtdef {m O{} }{
+ \_stex_mmtdef_args:n{ #2 }
+ \bool_set_true:N \l_stex_symdecl_make_macro_bool
+ \str_if_empty:NT \l_stex_symdecl_name_str {
+ \str_set:Nx \l_stex_symdecl_name_str { #1 }
+ }
+ %\tl_set:Nx \l_stex_symdecl_definiens_tl {
+ % \stex_annotate:nnn{ OMID }{
+ % \l_stex_module_mmtfor_str?\l_stex_symdecl_name_str
+ % }{}
+ %}
+ \stex_symdecl_do:n { #1 }
+ \MMTrule{rules.stex.mmt.kwarc.info?SubstitutionRule}{
+ \stex_annotate:nnn{ OMID }{
+ \l_stex_current_module_str ? \l_stex_symdecl_name_str
+ }{},
+ \stex_annotate:nnn{ OMID }{
+ \l_stex_module_mmtfor_str?\l_stex_symdecl_name_str
+ }{}
+ }
+ \tl_set:Nn \l_stex_notation_after_do_tl {
+ \__stex_notation_final:
+ \stex_smsmode_do:\ignorespacesandpars
+ }
+ \str_set:Nx \l_stex_get_symbol_uri_str {
+ \l_stex_current_module_str ? \l_stex_symdecl_name_str
+ }
+ \exp_args:Nx \stex_notation_do:nnnnn
+ { \prop_item:cn {l_stex_symdecl_\l_stex_get_symbol_uri_str _prop } { args } }
+ { \prop_item:cn { l_stex_symdecl_\l_stex_get_symbol_uri_str _prop } { arity } }
+ { \l__stex_notation_variant_str }
+ { \l__stex_notation_prec_str}
+}
+
\keys_define:nn { stex / vardef } {
name .str_set_x:N = \l__stex_variables_name_str ,
args .str_set_x:N = \l__stex_variables_args_str ,
@@ -2920,6 +3213,7 @@
op .tl_set:N = \l__stex_variables_op_tl ,
prec .str_set_x:N = \l__stex_variables_prec_str ,
reorder .str_set_x:N = \l__stex_variables_reorder_str ,
+ argnames .clist_set:N = \l__stex_variables_argnames_clist ,
assoc .choices:nn =
{bin,binl,binr,pre,conj,pwconj}
{\str_set:Nx \l__stex_variables_assoctype_str {\l_keys_choice_tl}},
@@ -2938,6 +3232,7 @@
\tl_clear:N \l__stex_variables_type_tl
\tl_clear:N \l__stex_variables_def_tl
\tl_clear:N \l__stex_variables_op_tl
+ \clist_clear:N \l__stex_variables_argnames_clist
\keys_set:nn { stex / vardef } { #1 }
}
@@ -2994,7 +3289,20 @@
\prop_put:Nnx \l_tmpa_prop { assocs } { \int_use:N \l_tmpb_int }
\tl_set:cx { #1 }{ \stex_invoke_variable:n { \l__stex_variables_name_str } }
- \prop_set_eq:cN { l_stex_variable_\l__stex_variables_name_str _prop} \l_tmpa_prop
+ % argnames
+
+ \clist_clear:N \l_tmpa_clist
+ \int_step_inline:nn {\prop_item:Nn \l_tmpa_prop {arity}} {
+ \clist_if_empty:NTF \l__stex_variables_argnames_clist {
+ \clist_put_right:Nn \l_tmpa_clist {##1}
+ }{
+ \clist_pop:NN \l__stex_variables_argnames_clist \l_tmpa_tl
+ \exp_args:NNx \clist_put_right:Nn \l_tmpa_clist {\c_dollar_str\l_tmpa_tl}
+ }
+ }
+ \prop_put:Nnx \l_tmpa_prop {argnames} {\clist_use:Nn \l_tmpa_clist ,}
+
+ \prop_set_eq:cN { l_stex_symdecl_var://\l__stex_variables_name_str _prop} \l_tmpa_prop
\tl_if_empty:NF \l__stex_variables_op_tl {
\cs_set:cpx {
@@ -3169,6 +3477,14 @@
\cs_generate_from_arg_count:cNnn {stex_varseq_\l__stex_variables_name_str _cs}
\cs_set:Npn {\int_use:N \l__stex_variables_args_int} { #5 }
+ % argnames
+
+ \clist_clear:N \l_tmpa_clist
+ \int_step_inline:nn {\l__stex_variables_args_int} {
+ \clist_put_right:Nn \l_tmpa_clist {##1}
+ }
+ \prop_put:Nnx \l_tmpa_prop {argnames} {\clist_use:Nn \l_tmpa_clist ,}
+
\exp_args:NNo \tl_set:No \l_tmpa_tl {\use:c{stex_varseq_\l__stex_variables_name_str _cs}}
\int_step_inline:nn \l__stex_variables_args_int {
\tl_put_right:Nx \l_tmpa_tl { {\seq_item:Nn \l_tmpa_seq {##1}} }
@@ -3214,6 +3530,8 @@
\expandafter\meaning\csname stex_varseq_\l__stex_variables_name_str _cs\endcsname\\~\\
\prop_to_keyval:N \l_tmpa_prop
}
+ \prop_set_eq:cN {l_stex_symdecl_varseq://\l__stex_variables_name_str _prop}\l_tmpa_prop
+
\stex_if_do_html:T{\stex_annotate_invisible:nnn{varseq}{\l__stex_variables_name_str}{
\tl_if_empty:NF \l__stex_variables_type_tl {
\stex_annotate:nnn {type}{}{$\l__stex_variables_type_tl$}
@@ -3243,10 +3561,62 @@
}}
- \prop_set_eq:cN {stex_varseq_\l__stex_variables_name_str _prop}\l_tmpa_prop
\ignorespacesandpars
}
+\keys_define:nn { stex / mmtdecl } {
+ name .str_set_x:N = \l_stex_symdecl_name_str ,
+ args .str_set_x:N = \l_stex_symdecl_args_str ,
+ deprecate .str_set_x:N = \l_stex_symdecl_deprecate_str ,
+ reorder .str_set_x:N = \l_stex_symdecl_reorder_str ,
+ argnames .clist_set:N = \l_stex_symdecl_argnames_clist ,
+ assoc .choices:nn =
+ {bin,binl,binr,pre,conj,pwconj}
+ {\str_set:Nx \l_stex_symdecl_assoctype_str {\l_keys_choice_tl}}
+}
+
+\cs_new_protected:Nn \_stex_mmtdecl_args:n {
+ \str_clear:N \l_stex_symdecl_name_str
+ \str_clear:N \l_stex_symdecl_args_str
+ \str_clear:N \l_stex_symdecl_deprecate_str
+ \str_clear:N \l_stex_symdecl_reorder_str
+ \str_clear:N \l_stex_symdecl_assoctype_str
+ \bool_set_false:N \l_stex_symdecl_local_bool
+ \clist_clear:N \l_stex_symdecl_argnames_clist
+
+ \keys_set:nn { stex / symdecl } { #1 }
+}
+
+\NewDocumentCommand \mmtdecl { s m O{}} {
+ \_stex_mmtdecl_args:n{#3}
+ \IfBooleanTF #1 {
+ \bool_set_false:N \l_stex_symdecl_make_macro_bool
+ } {
+ \bool_set_true:N \l_stex_symdecl_make_macro_bool
+ }
+ \str_if_empty:NT \l_stex_symdecl_name_str {
+ \str_set:Nx \l_stex_symdecl_name_str { #1 }
+ }
+ %\tl_set:Nx \l_stex_symdecl_definiens_tl {
+ % \stex_annotate:nnn{ OMID }{
+ % \l_stex_module_mmtfor_str?\l_stex_symdecl_name_str
+ % }{}
+ %}
+ \stex_symdecl_do:n{#2}
+ \MMTrule{rules.stex.mmt.kwarc.info?SubstitutionRule}{
+ \stex_annotate:nnn{ OMID }{
+ \l_stex_current_module_str ? \l_stex_symdecl_name_str
+ }{},
+ \stex_annotate:nnn{ OMID }{
+ \l_stex_module_mmtfor_str?\l_stex_symdecl_name_str
+ }{}
+ }
+ \stex_smsmode_do:
+}
+
+\stex_deactivate_macro:Nn \mmtdecl {mmtinterface~environments}
+\stex_deactivate_macro:Nn \mmtdef {mmtinterface~environments}
+
%%%%%%%%%%%%% terms.dtx %%%%%%%%%%%%%
@@ -3340,8 +3710,10 @@
\def\comp{\_comp}
\str_set:Nn \STEXInternalCurrentSymbolStr { #1 }
\bool_set_false:N \l_stex_allow_semantic_bool
- \_stex_term_oms:nnn {#1}{#1 \c_hash_str CUSTOM-}{
- \comp{ #2 }
+ \stex_mathml_intent:nn{#1}{
+ \_stex_term_oms:nnn {#1}{#1 \c_hash_str CUSTOM-}{
+ \comp{ #2 }
+ }
}
}{
\_stex_reset:N \comp
@@ -3454,6 +3826,8 @@
}
\prop_new:N \l__stex_terms_custom_args_prop
+\clist_new:N \l_stex_argnames_seq
+\seq_new:N \l__stex_terms_tmp_seq
\cs_new_protected:Nn\__stex_terms_custom_comp:n{\bool_set_false:N \l_stex_allow_semantic_bool\_comp{#1}\bool_set_true:N \l_stex_allow_semantic_bool}
@@ -3466,23 +3840,47 @@
\prop_get:cnN {
l_stex_symdecl_#1 _prop
}{ args } \l_tmpa_str
+ \exp_args:NNx \seq_set_from_clist:Nn \l_stex_argnames_seq {
+ \prop_item:cn {l_stex_symdecl_#1 _prop}{argnames}
+ }
\prop_put:Nno \l__stex_terms_custom_args_prop {args} \l_tmpa_str
\tl_set:Nn \arg { \__stex_terms_arg: }
\str_if_empty:NTF \l_tmpa_str {
- \_stex_term_oms:nnn {#1}{#1\c_hash_str CUSTOM-}{\ignorespaces#2}
+ \stex_mathml_intent:nn{#1}{
+ \_stex_term_oms:nnn {#1}{#1\c_hash_str CUSTOM-}{\ignorespaces#2}
+ }
}{
- \str_if_in:NnTF \l_tmpa_str b {
- \_stex_term_ombind:nnn {#1}{#1\c_hash_str CUSTOM-\l_tmpa_str}{\ignorespaces#2}
+ \seq_clear:N \l__stex_terms_tmp_seq
+ \exp_args:Nx\int_step_inline:nn{\prop_item:cn{l_stex_symdecl_#1 _prop}{arity}}{
+ \tl_set:Nx \l__stex_terms_tmp_tl {\seq_item:Nn \l_stex_argnames_seq {##1}}
+ \bool_lazy_or:nnT{
+ \str_if_eq_p:nn{a}{\str_item:Nn\l_tmpa_str{##1}}
+ }{
+ \str_if_eq_p:nn{B}{\str_item:Nn\l_tmpa_str{##1}}
+ }{
+ \tl_put_right:Nn \l__stex_terms_tmp_tl +
+ }
+ \seq_put_right:No \l__stex_terms_tmp_seq \l__stex_terms_tmp_tl
+ }
+ \stex_mathml_intent:nn{
+ #1[\prop_item:cn {l_stex_symdecl_#1 _prop}{ args }](
+ \seq_use:Nn \l__stex_terms_tmp_seq ,
+ )
}{
- \str_if_in:NnTF \l_tmpa_str B {
+ \str_if_in:NnTF \l_tmpa_str b {
\_stex_term_ombind:nnn {#1}{#1\c_hash_str CUSTOM-\l_tmpa_str}{\ignorespaces#2}
}{
- \_stex_term_oma:nnn {#1}{#1\c_hash_str CUSTOM-\l_tmpa_str}{\ignorespaces#2}
+ \str_if_in:NnTF \l_tmpa_str B {
+ \_stex_term_ombind:nnn {#1}{#1\c_hash_str CUSTOM-\l_tmpa_str}{\ignorespaces#2}
+ }{
+ \_stex_term_oma:nnn {#1}{#1\c_hash_str CUSTOM-\l_tmpa_str}{\ignorespaces#2}
+ }
}
}
}
% TODO check that all arguments exist
}{
+ \_stex_reset:N \l_stex_argnames_seq
\_stex_reset:N \STEXInternalCurrentSymbolStr
\_stex_reset:N \arg
\_stex_reset:N \comp
@@ -3524,15 +3922,21 @@
}
}
\exp_args:NNx \prop_put:Nnn \l__stex_terms_custom_args_prop {\int_use:N \l_tmpa_int} {\ignorespaces#3}
- \bool_set_true:N \l_stex_allow_semantic_bool
- \IfBooleanTF#1{
- \stex_annotate_invisible:n { %TODO
+ \bool_if:NTF \l_stex_allow_semantic_bool \use_i:nn {
+ \bool_set_true:N \l_stex_allow_semantic_bool
+ \use:nn
+ }
+ {
+ \stex_mathml_arg:nn{\seq_item:Nn \l_stex_argnames_seq \l_tmpa_int}{
+ \IfBooleanTF#1{
+ \stex_annotate_invisible:n { %TODO
+ \exp_args:No \_stex_term_arg:nn {\l_tmpa_str\int_use:N \l_tmpa_int}{\ignorespaces#3}
+ }
+ }{ %TODO
\exp_args:No \_stex_term_arg:nn {\l_tmpa_str\int_use:N \l_tmpa_int}{\ignorespaces#3}
}
- }{ %TODO
- \exp_args:No \_stex_term_arg:nn {\l_tmpa_str\int_use:N \l_tmpa_int}{\ignorespaces#3}
- }
- \bool_set_false:N \l_stex_allow_semantic_bool
+ }}
+ {\bool_set_false:N \l_stex_allow_semantic_bool}
}
\cs_new_protected:Nn \_stex_term_arg:nn {
@@ -3544,30 +3948,32 @@
\cs_new_protected:Npn \STEXInternalTermMathArgiii #1#2#3 {
\exp_args:Nnx \use:nn
{ \int_set:Nn \l__stex_terms_downprec { #2 }
+ \stex_mathml_arg:nn{\seq_item:Nn \l_stex_argnames_seq \l_tmpa_int}{
\_stex_term_arg:nn { #1 }{ #3 }
+ }
}
{ \int_set:Nn \exp_not:N \l__stex_terms_downprec { \int_use:N \l__stex_terms_downprec } }
}
-\cs_new_protected:Npn \STEXInternalTermMathAssocArgiiii #1#2#3#4 {
+\cs_new_protected:Npn \STEXInternalTermMathAssocArgiiiii #1#2#3#4#5 {
\cs_set:Npn \l_tmpa_cs ##1 ##2 { #4 }
- \tl_set:Nn \l_tmpb_tl {\STEXInternalTermMathArgiii{#1}{#2}}
+ \tl_set:Nn \l_tmpb_tl {\STEXInternalTermMathArgiii{#5#1}{#2}}
\tl_if_empty:nTF { #3 }{
- \STEXInternalTermMathArgiii{#1}{#2}{}
+ \STEXInternalTermMathArgiii{#5#1}{#2}{}
}{
\exp_args:Nx \tl_if_empty:nTF { \tl_tail:n{ #3 }}{
\expandafter\if\expandafter\relax\noexpand#3
- \tl_set:Nn \l_tmpa_tl {\__stex_terms_math_assoc_arg_maybe_sequence:Nn#3{#1}}
+ \tl_set:Nn \l_tmpa_tl {\__stex_terms_math_assoc_arg_maybe_sequence:Nnn#3{#1}{#5}}
\else
- \tl_set:Nn \l_tmpa_tl {\__stex_terms_math_assoc_arg_simple:nn{#1}{#3}}
+ \tl_set:Nn \l_tmpa_tl {\__stex_terms_math_assoc_arg_simple:nnn{#1}{#3}{#5}}
\fi
\l_tmpa_tl
}{
- \__stex_terms_math_assoc_arg_simple:nn{#1}{#3}
+ \__stex_terms_math_assoc_arg_simple:nnn{#1}{#3}{#5}
}
}
}
-\cs_new_protected:Nn \__stex_terms_math_assoc_arg_maybe_sequence:Nn {
+\cs_new_protected:Nn \__stex_terms_math_assoc_arg_maybe_sequence:Nnn {
\str_set:Nx \l_tmpa_str { \cs_argument_spec:N #1 }
\str_if_empty:NTF \l_tmpa_str {
\exp_args:Nx \cs_if_eq:NNTF {
@@ -3575,7 +3981,7 @@
} \stex_invoke_sequence:n {
\tl_set:Nx \l_tmpa_tl {\tl_tail:N #1}
\str_set:Nx \l_tmpa_str {\exp_after:wN \use:n \l_tmpa_tl}
- \tl_set:Nx \l_tmpa_tl {\prop_item:cn {stex_varseq_\l_tmpa_str _prop}{notation}}
+ \tl_set:Nx \l_tmpa_tl {\prop_item:cn {l_stex_symdecl_varseq://\l_tmpa_str _prop}{notation}}
\exp_args:NNo \seq_set_from_clist:Nn \l_tmpa_seq \l_tmpa_tl
\tl_set:Nx \l_tmpa_tl {{\exp_not:N \exp_not:n{
\exp_not:n{\exp_args:Nnx \use:nn} {
@@ -3591,7 +3997,7 @@
}
}
}}}
- \exp_args:Nno \use:nn {\seq_set_map:NNn \l_tmpa_seq \l_tmpa_seq} \l_tmpa_tl
+ \exp_args:Nno \use:n {\seq_set_map:NNn \l_tmpa_seq \l_tmpa_seq} \l_tmpa_tl
\seq_reverse:N \l_tmpa_seq
\seq_pop:NN \l_tmpa_seq \l_tmpa_tl
\seq_map_inline:Nn \l_tmpa_seq {
@@ -3607,28 +4013,38 @@
}
\exp_args:No\l_tmpb_tl\l_tmpa_tl
}{
- \__stex_terms_math_assoc_arg_simple:nn{#2} { #1 }
+ \__stex_terms_math_assoc_arg_simple:nnn{#2} { #1 }{#3}
}
} {
- \__stex_terms_math_assoc_arg_simple:nn{#2} { #1 }
+ \__stex_terms_math_assoc_arg_simple:nnn{#2} { #1 }{#3}
}
}
-\cs_new_protected:Nn \__stex_terms_math_assoc_arg_simple:nn {
+\cs_new_protected:Nn \__stex_terms_math_assoc_arg_simple:nnn {
\clist_set:Nn \l_tmpa_clist{ #2 }
\int_compare:nNnTF { \clist_count:N \l_tmpa_clist } < 2 {
- \tl_set:Nn \l_tmpa_tl { \_stex_term_arg:nn{A#1}{ #2 } }
+ \tl_set:Nn \l_tmpa_tl {
+ \stex_mathml_arg:nn{\seq_item:Nn \l_stex_argnames_seq #1}{
+ \_stex_term_arg:nn{A#3#1}{ #2 } }
+ }
}{
\clist_reverse:N \l_tmpa_clist
\clist_pop:NN \l_tmpa_clist \l_tmpa_tl
- \tl_set:Nx \l_tmpa_tl { \_stex_term_arg:nn{A#1}{
- \exp_args:No \exp_not:n \l_tmpa_tl
+ \tl_set:Nx \l_tmpa_tl {
+ \stex_mathml_arg:nn{\seq_item:Nn \l_stex_argnames_seq #1}{
+ \_stex_term_arg:nn{A#3#1}{
+ \exp_args:No \exp_not:n \l_tmpa_tl
+ }
}}
\clist_map_inline:Nn \l_tmpa_clist {
\exp_args:NNNo \exp_args:NNo \tl_set:No \l_tmpa_tl {
\exp_args:Nno
- \l_tmpa_cs { \_stex_term_arg:nn{A#1}{##1} } \l_tmpa_tl
+ \l_tmpa_cs {
+ \stex_mathml_arg:nn{\seq_item:Nn \l_stex_argnames_seq #1}{
+ \_stex_term_arg:nn{A#3#1}{##1}
+ }
+ } \l_tmpa_tl
}
}
}
@@ -3699,7 +4115,9 @@
\cs_new_protected:Npn \STEXInternalTermMathOMSiiii #1#2#3#4 {
\__stex_terms_maybe_brackets:nn { #3 }{
- \_stex_term_oms:nnn { #1 } { #1\c_hash_str#2 } { #4 }
+ \stex_mathml_intent:nn{#1} {
+ \_stex_term_oms:nnn { #1 } { #1\c_hash_str#2 } { #4 }
+ }
}
}
\cs_new_protected:Nn \_stex_term_omv:nn {
@@ -3714,8 +4132,35 @@
}
\cs_new_protected:Npn \STEXInternalTermMathOMAiiii #1#2#3#4 {
+ \exp_args:Nnx \use:nn {
+ \seq_clear:N \l__stex_terms_tmp_seq
+ \prop_if_exist:cT{l_stex_symdecl_#1 _prop}{
+ \exp_args:NNx \seq_set_from_clist:Nn \l_stex_argnames_seq {
+ \prop_item:cn {l_stex_symdecl_#1 _prop}{argnames}
+ }
+ \exp_args:Nx\int_step_inline:nn{\prop_item:cn{l_stex_symdecl_#1 _prop}{arity}}{
+ \tl_set:Nx \l__stex_terms_tmp_tl {\seq_item:Nn \l_stex_argnames_seq {##1}}
+ \bool_lazy_or:nnT{
+ \str_if_eq_p:nn{a}{\str_item:Nn\l_tmpa_str{##1}}
+ }{
+ \str_if_eq_p:nn{B}{\str_item:Nn\l_tmpa_str{##1}}
+ }{
+ \tl_put_right:Nn \l__stex_terms_tmp_tl +
+ }
+ \seq_put_right:No \l__stex_terms_tmp_seq \l__stex_terms_tmp_tl
+ }
+ }
\__stex_terms_maybe_brackets:nn { #3 }{
- \_stex_term_oma:nnn { #1 } { #1\c_hash_str#2 } { #4 }
+ \stex_mathml_intent:nn{
+ #1[\prop_item:cn {l_stex_symdecl_#1 _prop}{ args }](
+ \seq_use:Nn \l__stex_terms_tmp_seq ,
+ )
+ }{
+ \_stex_term_oma:nnn { #1 } { #1\c_hash_str#2 } { #4 }
+ }
+ }
+ }{
+ \_stex_reset:N \l_stex_argnames_seq
}
}
\cs_new_protected:Nn \_stex_term_ombind:nnn {
@@ -3725,8 +4170,35 @@
}
\cs_new_protected:Npn \STEXInternalTermMathOMBiiii #1#2#3#4 {
+ \exp_args:Nnx \use:nn {
+ \seq_clear:N \l__stex_terms_tmp_seq
+ \prop_if_exist:cT{l_stex_symdecl_#1 _prop}{
+ \exp_args:NNx \seq_set_from_clist:Nn \l_stex_argnames_seq {
+ \prop_item:cn {l_stex_symdecl_#1 _prop}{argnames}
+ }
+ \exp_args:Nx\int_step_inline:nn{\prop_item:cn{l_stex_symdecl_#1 _prop}{arity}}{
+ \tl_set:Nx \l__stex_terms_tmp_tl {\seq_item:Nn \l_stex_argnames_seq {##1}}
+ \bool_lazy_or:nnT{
+ \str_if_eq_p:nn{a}{\str_item:Nn\l_tmpa_str{##1}}
+ }{
+ \str_if_eq_p:nn{B}{\str_item:Nn\l_tmpa_str{##1}}
+ }{
+ \tl_put_right:Nn \l__stex_terms_tmp_tl +
+ }
+ \seq_put_right:No \l__stex_terms_tmp_seq \l__stex_terms_tmp_tl
+ }
+ }
\__stex_terms_maybe_brackets:nn { #3 }{
- \_stex_term_ombind:nnn { #1 } { #1\c_hash_str#2 } { #4 }
+ \stex_mathml_intent:nn{
+ #1[\prop_item:cn {l_stex_symdecl_#1 _prop}{ args }](
+ \seq_use:Nn \l__stex_terms_tmp_seq ,
+ )
+ }{
+ \_stex_term_ombind:nnn { #1 } { #1\c_hash_str#2 } { #4 }
+ }
+ }
+ }{
+ \_stex_reset:N \l_stex_argnames_seq
}
}
\cs_new:Nn \stex_capitalize:n { \uppercase{#1} }
@@ -3950,7 +4422,7 @@
\_stex_reset:N \STEXInternalCurrentSymbolStr
}
}{
- \int_compare:nNnTF {\prop_item:cn {l_stex_variable_#1_prop}{arity}} = 0{
+ \int_compare:nNnTF {\prop_item:cn {l_stex_symdecl_var://#1_prop}{arity}} = 0{
\__stex_variables_invoke_math_ii:n {#1}
}{
\msg_error:nnxx{stex}{error/noop}{variable~#1}{}
@@ -3984,7 +4456,7 @@
\prop_clear:N \l__stex_terms_custom_args_prop
\prop_put:Nnn \l__stex_terms_custom_args_prop {currnum} {1}
\prop_get:cnN {
- l_stex_variable_#1 _prop
+ l_stex_symdecl_var://#1 _prop
}{ args } \l_tmpa_str
\prop_put:Nno \l__stex_terms_custom_args_prop {args} \l_tmpa_str
\tl_set:Nn \arg { \__stex_terms_arg: }
@@ -4017,7 +4489,7 @@
\exp_args:Nnx \use:nn {
\def\comp{\_varcomp}
\str_set:Nn \STEXInternalCurrentSymbolStr {varseq://#1}
- \prop_item:cn{stex_varseq_#1_prop}{notation}
+ \prop_item:cn{l_stex_symdecl_varseq://#1_prop}{notation}
}{
\_stex_reset:N \comp
\_stex_reset:N \STEXInternalCurrentSymbolStr
@@ -4351,6 +4823,9 @@
{ \l_stex_import_ns_str } { \l_stex_import_archive_str }
{ \l_stex_import_path_str } { \l_stex_import_name_str }
}
+ \exp_args:Nx \stex_add_import_to_current_module:n{
+ \l_stex_import_ns_str ? \l_stex_import_name_str
+ }
\seq_map_inline:Nn \l__stex_copymodule_copymodule_modules_seq {
\seq_map_inline:cn {c_stex_module_##1_constants}{
@@ -4543,8 +5018,12 @@
\str_clear:N \l__stex_structures_name_str
\keys_set:nn { stex / features / structure } { #1 }
}
-
\NewDocumentEnvironment{mathstructure}{m O{}}{
+ \begin{mathstructure_inner}{#1}[#2]
+ \stex_smsmode_do:
+ \ignorespacesandpars
+ }{\end{mathstructure_inner}}
+\NewDocumentEnvironment{mathstructure_inner}{m O{}}{
\__stex_structures_structure_args:n { #2 }
\str_if_empty:NT \l__stex_structures_name_str {
\str_set:Nx \l__stex_structures_name_str { #1 }
@@ -4566,7 +5045,6 @@
\exp_args:Nnnx
\begin{structural_feature_module}{ structure }
{ \l__stex_structures_name_str }{}
- \stex_smsmode_do:
}{
\end{structural_feature_module}
\_stex_reset_up_to_module:n \l_stex_last_feature_str
@@ -4645,7 +5123,8 @@
\seq_map_inline:Nn \l_stex_all_modules_seq {
\prop_if_exist:cT {c_stex_module_##1_structures} {
\prop_map_inline:cn {c_stex_module_##1_structures} {
- \str_if_eq:eeT { \l_tmpa_str }{ \str_range:nnn {##1?####1}{-\l_tmpa_int}{-1}}{
+ \exp_args:No \str_if_eq:nnT \l_tmpa_str {####1}{
+ %\str_if_eq:eeT { \l_tmpa_str }{ \str_range:nnn {##1?####1}{-\l_tmpa_int}{-1}}{
\prop_map_break:n{\seq_map_break:n{
\tl_set:Nn \l_tmpa_tl {
\str_set:Nn \l_stex_get_structure_str {##1?####1}
@@ -4659,6 +5138,12 @@
\l_tmpa_tl
}
+\NewDocumentEnvironment{usestructure}{m}{
+ \stex_get_structure:n {#1}
+ \exp_args:Nnx \stex_debug:nn{features}{using~structure:~\l_stex_get_structure_module_str}
+ \exp_args:No \stex_activate_module:n \l_stex_get_structure_module_str
+}{}
+
\keys_define:nn { stex / instantiate } {
name .str_set_x:N = \l__stex_structures_name_str
}
@@ -4667,6 +5152,37 @@
\keys_set:nn { stex / instantiate } { #1 }
}
+\NewDocumentEnvironment{extstructure}{m m O{}}{
+ \begin{mathstructure_inner}{#1}[#3]
+ \seq_set_split:Nnn\__stex_structures_extstructure_imports_seq,{#2}
+ \seq_map_inline:Nn\__stex_structures_extstructure_imports_seq {
+ \stex_get_structure:n {##1}
+ \exp_args:Nnx \stex_debug:nn{features}{importing~structure:~\l_stex_get_structure_module_str{}~into~\l_stex_current_module_str}
+ \exp_args:No \stex_activate_module:n \l_stex_get_structure_module_str
+ \stex_if_smsmode:F {
+ \stex_annotate_invisible:nnn
+ {import} {\l_stex_get_structure_module_str} {}
+ }
+ \exp_args:Nx \stex_add_import_to_current_module:n {
+ \l_stex_get_structure_module_str
+ }
+ \exp_args:Nx \stex_add_to_current_module:n {
+ \exp_args:No \stex_activate_module:n \l_stex_get_structure_module_str
+ }
+ }
+ \stex_smsmode_do:
+ \ignorespacesandpars
+}{
+ \end{mathstructure_inner}
+}
+
+\NewDocumentEnvironment{extstructure*}{m m O{}}{
+ % TODO
+ \begin{extstructure}{#1}{#2}[#3]
+}{
+ \end{extstructure}
+}
+
\NewDocumentCommand \instantiate {m O{} m m O{}}{
\begingroup
\stex_get_structure:n {#3}
@@ -4718,7 +5234,8 @@
name = \l_tmpa_str ,
args = \prop_item:cn {l_stex_symdecl_##1_prop}{args} ,
arity = \prop_item:cn {l_stex_symdecl_##1_prop}{arity} ,
- assocs = \prop_item:cn {l_stex_symdecl_##1_prop}{assocs}
+ assocs = \prop_item:cn {l_stex_symdecl_##1_prop}{assocs} ,
+ argnames = {\prop_item:cn {l_stex_symdecl_##1_prop}{argnames}}
}
\seq_clear:c {l_stex_symdecl_\l_stex_current_module_str?\l_tmpa_str _notations}
}
@@ -4813,7 +5330,7 @@
}
\cs_new_protected:Nn \__stex_structures_symbolorvar_from_string:n {
- \prop_if_exist:cTF {l_stex_variable_#1 _prop}{
+ \prop_if_exist:cTF {l_stex_symdecl_var://#1 _prop}{
\bool_set_true:N \l_stex_symbol_or_var_bool
\str_set:Nn \l_stex_get_symbol_uri_str { #1 }
}{
@@ -4876,12 +5393,12 @@
\bool_if:NTF \l_stex_symbol_or_var_bool {
\exp_args:Nxx \str_if_eq:nnF
{\prop_item:cn{l_stex_symdecl_\l__stex_structures_dom_str _prop}{args}}
- {\prop_item:cn{l_stex_variable_\l_stex_get_symbol_uri_str _prop}{args}}{
+ {\prop_item:cn{l_stex_symdecl_var://\l_stex_get_symbol_uri_str _prop}{args}}{
\msg_error:nnxxxx{stex}{error/incompatible}
{\l__stex_structures_dom_str}
{\prop_item:cn{l_stex_symdecl_\l__stex_structures_dom_str _prop}{args}}
{\l_stex_get_symbol_uri_str}
- {\prop_item:cn{l_stex_variable_\l_stex_get_symbol_uri_str _prop}{args}}
+ {\prop_item:cn{l_stex_symdecl_var://\l_stex_get_symbol_uri_str _prop}{args}}
}
\prop_put:Nxx \l_tmpa_prop {\seq_item:Nn \l_tmpb_seq 1} {\stex_invoke_variable:n {\l_stex_get_symbol_uri_str}}
}{
@@ -4915,11 +5432,12 @@
}
\exp_args:NNx \tl_gput_right:Nn \g__stex_structures_aftergroup_tl {
- \prop_set_from_keyval:cn { l_stex_variable_ \l_tmpa_str _prop}{
+ \prop_set_from_keyval:cn { l_stex_symdecl_ var://\l_tmpa_str _prop}{
name = \l_tmpa_str ,
args = \prop_item:cn {l_stex_symdecl_##1_prop}{args} ,
arity = \prop_item:cn {l_stex_symdecl_##1_prop}{arity} ,
- assocs = \prop_item:cn {l_stex_symdecl_##1_prop}{assocs}
+ assocs = \prop_item:cn {l_stex_symdecl_##1_prop}{assocs} ,
+ argnames = {\prop_item:cn {l_stex_symdecl_##1_prop}{argnames}} ,
}
\cs_set_eq:cc {stex_var_notation_\l_tmpa_str _cs}
{g__stex_structures_tmpa_\l_tmpa_str _cs}
@@ -5287,6 +5805,7 @@
}
}
\clist_set_from_seq:NN \l__stex_statements_sdefinition_for_clist \l_tmpb_seq
+ \ifvmode\noindent\fi
\exp_args:Nnx
\stex_annotate:nnn{definition}{\seq_use:Nn \l_tmpb_seq {,}}{
\str_if_empty:NF \sdefinitiontype {
@@ -5445,6 +5964,7 @@
}
}
}
+ \ifvmode\noindent\fi
\exp_args:Nnx
\stex_annotate:nnn{assertion}{\seq_use:Nn \l_tmpb_seq {,}}{
\str_if_empty:NF \sassertiontype {
@@ -5590,6 +6110,7 @@
}
}
}
+ \ifvmode\noindent\fi
\exp_args:Nnx
\stex_annotate:nnn{example}{\seq_use:Nn \l_tmpb_seq {,}}{
\str_if_empty:NF \sexampletype {
@@ -5799,6 +6320,7 @@
}
}
}
+ \ifvmode\noindent\fi
\exp_args:Nnx
\stex_annotate:nnn{paragraph}{\seq_use:Nn \l_tmpb_seq {,}}{
\str_if_empty:NF \sparagraphtype {
@@ -5840,7 +6362,9 @@
title .tl_set:N = \spftitle,
continues .tl_set:N = \l__stex_sproof_spf_continues_tl,
functions .tl_set:N = \l__stex_sproof_spf_functions_tl,
- method .tl_set:N = \l__stex_sproof_spf_method_tl
+ term .tl_set:N = \l__stex_sproof_spf_term_tl,
+ method .tl_set:N = \l__stex_sproof_spf_method_tl,
+ hide .bool_set:N = \l__stex_sproof_spf_hide_bool
}
\cs_new_protected:Nn \__stex_sproof_spf_args:n {
\str_clear:N \spfid
@@ -5850,11 +6374,13 @@
\str_clear:N \spftype
\tl_clear:N \spftitle
\tl_clear:N \l__stex_sproof_spf_continues_tl
+\tl_clear:N \l__stex_sproof_spf_term_tl
\tl_clear:N \l__stex_sproof_spf_functions_tl
\tl_clear:N \l__stex_sproof_spf_method_tl
- \bool_set_false:N \l__stex_sproof_inc_counter_bool
+ \bool_set_false:N \l__stex_sproof_spf_hide_bool
\keys_set:nn { stex / spf }{ #1 }
}
+\bool_set_true:N \l__stex_sproof_inc_counter_bool
\str_set:Nn\c__stex_sproof_flow_str{inline}
\intarray_new:Nn\l__stex_sproof_counter_intarray{50}
\cs_new_protected:Npn \sproofnumber {
@@ -5987,155 +6513,130 @@
\stex_smsmode_do:
}
-\newenvironment{spfeq}[2][]{
- \__stex_sproof_spf_args:n{#1}
- \let \premise \stex_proof_premise:
- \stex_if_smsmode:TF {
- \str_if_empty:NF \spfid {
- \stex_ref_new_doc_target:n \spfid
- }
- }{
- \seq_clear:N \l_tmpa_seq
- \clist_map_inline:Nn \l__stex_sproof_spf_for_clist {
- \tl_if_empty:nF{ ##1 }{
- \stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
- \l_stex_get_symbol_uri_str
- }
- }
- }
- \exp_args:Nnnx
- \begin{stex_annotate_env}{spfeq}{\seq_use:Nn \l_tmpa_seq {,}}
- \str_if_empty:NF \spftype {
- \stex_annotate_invisible:nnn{type}{\spftype}{}
- }
+\bool_set_false:N \l__stex_sproof_in_spfblock_bool
- \clist_set:No \l_tmpa_clist \spftype
- \tl_clear:N \l_tmpa_tl
- \clist_map_inline:Nn \l_tmpa_clist {
- \tl_if_exist:cT {__stex_sproof_spfeq_##1_start:}{
- \tl_set:Nn \l_tmpa_tl {\use:c{__stex_sproof_spfeq_##1_start:}}
- }
- \exp_args:No \str_if_eq:nnT \c__stex_sproof_flow_str {##1} {
- \tl_set:Nn \l_tmpa_tl {\use:n{}}
- }
- }
- \tl_if_empty:NTF \l_tmpa_tl {
- \__stex_sproof_spfeq_start:
- }{
- \l_tmpa_tl
- }{~#2}
- \str_if_empty:NF \spfid {
- \stex_ref_new_doc_target:n \spfid
- }
- \begin{displaymath}\begin{array}{rcll}
+\cs_new_protected:Nn \__stex_sproof_maybe_comment: {
+ \bool_if:NF \l__stex_sproof_in_spfblock_bool {
+ \par \setbox \l_tmpa_box \vbox \bgroup \everypar{\__stex_sproof_start_comment:}
}
- \stex_smsmode_do:
-}{
- \stex_if_smsmode:F {
- \end{array}\end{displaymath}
- \clist_set:No \l_tmpa_clist \spftype
- \tl_clear:N \l_tmpa_tl
- \clist_map_inline:Nn \l_tmpa_clist {
- \tl_if_exist:cT {__stex_sproof_spfeq_##1_end:}{
- \tl_set:Nn \l_tmpa_tl {\use:c{__stex_sproof_spfeq_##1_end:}}
+}
+\cs_new_protected:Nn \__stex_sproof_maybe_comment_end: {
+ \bool_if:NF \l__stex_sproof_in_spfblock_bool { \egroup }
+}
+\cs_new_protected:Nn \__stex_sproof_start_comment: {
+ \csname @ @ par\endcsname\egroup\item[]\bgroup\stexcommentfont
+}
+
+\cs_new_protected:Npn \stexcommentfont {
+ \small\itshape
+}
+\cs_new_protected:Nn \__stex_sproof_start_env:nnn {
+ \seq_clear:N \l_tmpa_seq
+ \clist_map_inline:Nn \l__stex_sproof_spf_for_clist {
+ \tl_if_empty:nF{ ##1 }{
+ \stex_get_symbol:n { ##1 }
+ \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
+ \l_stex_get_symbol_uri_str
}
}
- \tl_if_empty:NTF \l_tmpa_tl {
- \__stex_sproof_spfeq_end:
- }{
- \l_tmpa_tl
- }
- \end{stex_annotate_env}
}
-}
+ \exp_args:Nnnx
+ \begin{stex_annotate_env}{#1}{\seq_use:Nn \l_tmpa_seq {,}}
+ \str_if_empty:NF \spftype {
+ \stex_annotate_invisible:nnn{type}{\spftype}{}
+ }
+ #3 {~\stex_annotate:nnn{spftitle}{}{#2}}
+ \str_if_empty:NF \spfid {
+ \stex_ref_new_doc_target:n \spfid
+ }
+ \begin{stex_annotate_env}{spfbody}{\bool_if:NTF \l__stex_sproof_spf_hide_bool {false}{true}}
+ \bool_if:NT \l__stex_sproof_spf_hide_bool{
+ \stex_html_backend:F{\setbox\l_tmpa_box\vbox\bgroup}
+ }
+ \begin{list}{}{
+ \setlength\topsep{0pt}
+ \setlength\parsep{0pt}
+ \setlength\rightmargin{0pt}
-\cs_new_protected:Nn \__stex_sproof_spfeq_start: {
- \titleemph{
- \tl_if_empty:NTF \spftitle {
- \spf@proof@kw
- }{
- \spftitle
- }
- }:
+ }\__stex_sproof_maybe_comment:
}
-\cs_new_protected:Nn \__stex_sproof_spfeq_end: {\sproofend}
-
-\newcommand\stexpatchspfeq[3][] {
- \str_set:Nx \l_tmpa_str{ #1 }
- \str_if_empty:NTF \l_tmpa_str {
- \tl_set:Nn \__stex_sproof_spfeq_start: { #2 }
- \tl_set:Nn \__stex_sproof_spfeq_end: { #3 }
- }{
- \exp_after:wN \tl_set:Nn \csname __stex_sproof_spfeq_#1_start:\endcsname{ #2 }
- \exp_after:wN \tl_set:Nn \csname __stex_sproof_spfeq_#1_end:\endcsname{ #3 }
+\cs_new_protected:Nn \__stex_sproof_end_env:n {
+ \stex_if_smsmode:F{
+ \__stex_sproof_maybe_comment_end:
+ \end{list}
+ \bool_if:NT \l__stex_sproof_spf_hide_bool{
+ \stex_html_backend:F{\egroup}
}
+ \clist_set:No \l_tmpa_clist \spftype
+ #1
+ \end{stex_annotate_env}
+ \end{stex_annotate_env}
+ }
}
-
-\newenvironment{sproof}[2][]{
- \let \premise \stex_proof_premise:
+\NewDocumentEnvironment{sproof}{s O{} m}{
\intarray_gzero:N \l__stex_sproof_counter_intarray
\intarray_gset:Nnn \l__stex_sproof_counter_intarray 1 1
- \__stex_sproof_spf_args:n{#1}
+ \stex_reactivate_macro:N \yield
+ \stex_reactivate_macro:N \eqstep
+ \stex_reactivate_macro:N \assumption
+ \stex_reactivate_macro:N \conclude
+ \stex_reactivate_macro:N \spfstep
+ \__stex_sproof_spf_args:n{#2}
\stex_if_smsmode:TF {
\str_if_empty:NF \spfid {
\stex_ref_new_doc_target:n \spfid
}
}{
- \seq_clear:N \l_tmpa_seq
- \clist_map_inline:Nn \l__stex_sproof_spf_for_clist {
- \tl_if_empty:nF{ ##1 }{
- \stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
- \l_stex_get_symbol_uri_str
+ \__stex_sproof_start_env:nnn{sproof}{#3}{
+ \clist_set:No \l_tmpa_clist \spftype
+ \tl_clear:N \l_tmpa_tl
+ \clist_map_inline:Nn \l_tmpa_clist {
+ \tl_if_exist:cT {__stex_sproof_sproof_##1_start:}{
+ \tl_set:Nn \l_tmpa_tl {\use:c{__stex_sproof_sproof_##1_start:}}
+ }
+ \exp_args:No \str_if_eq:nnT \c__stex_sproof_flow_str {##1} {
+ \tl_set:Nn \l_tmpa_tl {\use:n{}}
}
}
- }
- \exp_args:Nnnx
- \begin{stex_annotate_env}{sproof}{\seq_use:Nn \l_tmpa_seq {,}}
- \str_if_empty:NF \spftype {
- \stex_annotate_invisible:nnn{type}{\spftype}{}
- }
-
- \clist_set:No \l_tmpa_clist \spftype
- \tl_clear:N \l_tmpa_tl
- \clist_map_inline:Nn \l_tmpa_clist {
- \tl_if_exist:cT {__stex_sproof_sproof_##1_start:}{
- \tl_set:Nn \l_tmpa_tl {\use:c{__stex_sproof_sproof_##1_start:}}
- }
- \exp_args:No \str_if_eq:nnT \c__stex_sproof_flow_str {##1} {
- \tl_set:Nn \l_tmpa_tl {\use:n{}}
+ \tl_if_empty:NTF \l_tmpa_tl {
+ \__stex_sproof_sproof_start:
+ }{
+ \l_tmpa_tl
}
}
- \tl_if_empty:NTF \l_tmpa_tl {
- \__stex_sproof_sproof_start:
- }{
- \l_tmpa_tl
- }{~#2}
+ }
+ \stex_smsmode_do:
+}{\__stex_sproof_end_env:n{
+ \tl_clear:N \l_tmpa_tl
+ \clist_map_inline:Nn \l_tmpa_clist {
+ \tl_if_exist:cT {__stex_sproof_sproof_##1_end:}{
+ \tl_set:Nn \l_tmpa_tl {\use:c{__stex_sproof_sproof_##1_end:}}
+ }
+ }
+ \tl_if_empty:NTF \l_tmpa_tl {
+ \__stex_sproof_sproof_end:
+ }{
+ \l_tmpa_tl
+ }
+}}
+\NewDocumentEnvironment{subproof}{s O{} m}{
+ \__stex_sproof_spf_args:n{#2}
+ \stex_if_smsmode:TF {
\str_if_empty:NF \spfid {
\stex_ref_new_doc_target:n \spfid
}
- \begin{description}
+ }{
+ \__stex_sproof_start_env:nnn{subproof}{\item[\sproofnumber]\ignorespacesandpars #3}{}
}
+ \__stex_sproof_add_counter:
\stex_smsmode_do:
-}{
- \stex_if_smsmode:F{
- \end{description}
- \clist_set:No \l_tmpa_clist \spftype
- \tl_clear:N \l_tmpa_tl
- \clist_map_inline:Nn \l_tmpa_clist {
- \tl_if_exist:cT {__stex_sproof_sproof_##1_end:}{
- \tl_set:Nn \l_tmpa_tl {\use:c{__stex_sproof_sproof_##1_end:}}
- }
- }
- \tl_if_empty:NTF \l_tmpa_tl {
- \__stex_sproof_sproof_end:
- }{
- \l_tmpa_tl
- }
- \end{stex_annotate_env}
+}{\__stex_sproof_remove_counter:\__stex_sproof_end_env:n{}
+ \bool_if:NT \l__stex_sproof_inc_counter_bool {
+ \__stex_sproof_inc_counter:
}
+ \aftergroup\__stex_sproof_maybe_comment:
}
+\AddToHook{env/subproof/before}{\__stex_sproof_maybe_comment_end:}
\cs_new_protected:Nn \__stex_sproof_sproof_start: {
\par\noindent\titleemph{
@@ -6158,211 +6659,88 @@
\exp_after:wN \tl_set:Nn \csname __stex_sproof_sproof_#1_end:\endcsname{ #3 }
}
}
-\newcommand\spfidea[2][]{
- \__stex_sproof_spf_args:n{#1}
- \titleemph{
- \tl_if_empty:NTF \spftype {Proof~Idea}{
- \spftype
- }:
- }~#2
- \sproofend
+
+\keys_define:nn { stex / spfsteps } {
+ id .str_set_x:N = \spfstepid,
+ for .clist_set:N = \l__stex_sproof_spf_for_clist ,
+ type .str_set_x:N = \spftype,
+ title .tl_set:N = \spftitle,
+ method .tl_set:N = \l__stex_sproof_spf_method_tl,
+ term .tl_set:N = \l__stex_sproof_spf_term_tl
}
-\newenvironment{spfstep}[1][]{
- \__stex_sproof_spf_args:n{#1}
- \stex_if_smsmode:TF {
- \str_if_empty:NF \spfid {
- \stex_ref_new_doc_target:n \spfid
- }
- }{
- \@in@omtexttrue
- \clist_set:No \l_tmpa_clist \spftype
- \tl_set:Nn \l_tmpa_tl {
- \item[\sproofnumber]
- \bool_set_true:N \l__stex_sproof_inc_counter_bool
- }
- \clist_map_inline:Nn \l_tmpa_clist {
- \exp_args:No \str_if_eq:nnT \c__stex_sproof_flow_str {##1} {
- \tl_clear:N \l_tmpa_tl
+\cs_new_protected:Nn \__stex_sproof_spfstep_args:n {
+\str_clear:N \spfstepid
+\clist_clear:N \l__stex_sproof_spf_for_clist
+\str_clear:N \spftype
+\tl_clear:N \l__stex_sproof_spf_method_tl
+\tl_clear:N \l__stex_sproof_spf_term_tl
+ %\bool_set_false:N \l__stex_sproof_inc_counter_bool
+\keys_set:nn { stex / spfsteps }{ #1 }
+}
+
+\cs_new_protected:Nn \__stex_sproof_make_step_macro:Nnnnn {
+ \NewDocumentCommand #1 {s O{} +m} {
+ \__stex_sproof_maybe_comment_end:
+
+ \__stex_sproof_spfstep_args:n{##2}
+ \stex_annotate:nnn{spfstep}{#2}{
+ \tl_if_empty:NF \l__stex_sproof_spf_term_tl {
+ \stex_annotate_invisible:nnn{spfyield}{}{$\l__stex_sproof_spf_term_tl$}
}
- }
- \l_tmpa_tl
- \seq_clear:N \l_tmpa_seq
- \clist_map_inline:Nn \l__stex_sproof_spf_for_clist {
- \tl_if_empty:nF{ ##1 }{
- \stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
- \l_stex_get_symbol_uri_str
- }
+ \bool_if:NTF \l__stex_sproof_in_spfblock_bool {
+ #4
+ }{
+ \item[\IfBooleanTF ##1 {}{#3}]
}
+ \ignorespacesandpars ##3
}
- \exp_args:Nnnx
- \begin{stex_annotate_env}{spfstep}{\seq_use:Nn \l_tmpa_seq {,}}
- \str_if_empty:NF \spftype {
- \stex_annotate_invisible:nnn{type}{\spftype}{}
- }
- \tl_if_empty:NF \spftitle {
- {(\titleemph{\spftitle})\enspace}
- }
- \str_if_empty:NF \spfid {
- \stex_ref_new_doc_target:n \spfid
- }
- }
- \stex_smsmode_do:
- \ignorespacesandpars
-}{
- \bool_if:NT \l__stex_sproof_inc_counter_bool {
- \__stex_sproof_inc_counter:
- }
- \stex_if_smsmode:F {
- \end{stex_annotate_env}
+ \bool_if:NF \l__stex_sproof_in_spfblock_bool { \IfBooleanTF ##1 {}{ #5 } }
+ \__stex_sproof_maybe_comment:
}
+ \stex_deactivate_macro:Nn #1 {sproof~environments}
}
-\newenvironment{spfcomment}[1][]{
- \__stex_sproof_spf_args:n{#1}
- \clist_set:No \l_tmpa_clist \spftype
- \tl_set:Nn \l_tmpa_tl {
- \item[\sproofnumber]
- \bool_set_true:N \l__stex_sproof_inc_counter_bool
- }
- \clist_map_inline:Nn \l_tmpa_clist {
- \exp_args:No \str_if_eq:nnT \c__stex_sproof_flow_str {##1} {
- \tl_clear:N \l_tmpa_tl
- }
- }
- \l_tmpa_tl
-}{
- \bool_if:NT \l__stex_sproof_inc_counter_bool {
- \__stex_sproof_inc_counter:
+
+\__stex_sproof_make_step_macro:Nnnnn \assumption {assumption} \sproofnumber {} \__stex_sproof_inc_counter:
+\__stex_sproof_make_step_macro:Nnnnn \conclude {conclusion} {$\Rightarrow$} {} {}
+\__stex_sproof_make_step_macro:Nnnnn \spfstep {} \sproofnumber {} \__stex_sproof_inc_counter:
+
+\NewDocumentCommand \eqstep {s m}{
+ \__stex_sproof_maybe_comment_end:
+ \bool_if:NTF \l__stex_sproof_in_spfblock_bool {
+ $=$
+ }{
+ \item[$=$]
}
+ $\stex_annotate:nnn{spfstep}{eq}{ #2 }$
+ \__stex_sproof_maybe_comment:
}
-\newenvironment{subproof}[2][]{
- \__stex_sproof_spf_args:n{#1}
- \stex_if_smsmode:TF{
- \str_if_empty:NF \spfid {
- \stex_ref_new_doc_target:n \spfid
- }
- }{
- \seq_clear:N \l_tmpa_seq
- \clist_map_inline:Nn \l__stex_sproof_spf_for_clist {
- \tl_if_empty:nF{ ##1 }{
- \stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
- \l_stex_get_symbol_uri_str
- }
- }
- }
- \exp_args:Nnnx
- \begin{stex_annotate_env}{subproof}{\seq_use:Nn \l_tmpa_seq {,}}
- \str_if_empty:NF \spftype {
- \stex_annotate_invisible:nnn{type}{\spftype}{}
- }
+\stex_deactivate_macro:Nn \eqstep {sproof~environments}
- \clist_set:No \l_tmpa_clist \spftype
- \tl_set:Nn \l_tmpa_tl {
- \item[\sproofnumber]
- \bool_set_true:N \l__stex_sproof_inc_counter_bool
- }
- \clist_map_inline:Nn \l_tmpa_clist {
- \exp_args:No \str_if_eq:nnT \c__stex_sproof_flow_str {##1} {
- \tl_clear:N \l_tmpa_tl
- }
- }
- \l_tmpa_tl
- \tl_if_empty:NF \spftitle {
- {(\titleemph{\spftitle})\enspace}
- }
- {~#2}
- \str_if_empty:NF \spfid {
- \stex_ref_new_doc_target:n \spfid
- }
- }
- \__stex_sproof_add_counter:
- \stex_smsmode_do:
-}{
- \__stex_sproof_remove_counter:
- \bool_if:NT \l__stex_sproof_inc_counter_bool {
- \__stex_sproof_inc_counter:
- }
- \stex_if_smsmode:F{
- \end{stex_annotate_env}
- }
+\NewDocumentCommand \yield {+m}{
+ \stex_annotate:nnn{spfyield}{}{ #1 }
}
-\newenvironment{spfcases}[2][]{
- \tl_if_empty:nTF{#1}{
- \begin{subproof}[method=by-cases]{#2}
- }{
- \begin{subproof}[#1,method=by-cases]{#2}
- }
+\stex_deactivate_macro:Nn \yield {sproof~environments}
+
+\NewDocumentEnvironment{spfblock}{}{
+ \item[]
+ \bool_set_true:N \l__stex_sproof_in_spfblock_bool
}{
- \end{subproof}
+ \aftergroup\__stex_sproof_maybe_comment:
}
-\newenvironment{spfcase}[2][]{
+\AddToHook{env/spfblock/before}{\__stex_sproof_maybe_comment_end:}
+
+\NewDocumentCommand\spfidea{O{} +m}{
\__stex_sproof_spf_args:n{#1}
- \stex_if_smsmode:TF {
- \str_if_empty:NF \spfid {
- \stex_ref_new_doc_target:n \spfid
- }
- }{
- \seq_clear:N \l_tmpa_seq
- \clist_map_inline:Nn \l__stex_sproof_spf_for_clist {
- \tl_if_empty:nF{ ##1 }{
- \stex_get_symbol:n { ##1 }
- \exp_args:NNo \seq_put_right:Nn \l_tmpa_seq {
- \l_stex_get_symbol_uri_str
- }
- }
- }
- \exp_args:Nnnx
- \begin{stex_annotate_env}{spfcase}{\seq_use:Nn \l_tmpa_seq {,}}
- \str_if_empty:NF \spftype {
- \stex_annotate_invisible:nnn{type}{\spftype}{}
- }
- \clist_set:No \l_tmpa_clist \spftype
- \tl_set:Nn \l_tmpa_tl {
- \item[\sproofnumber]
- \bool_set_true:N \l__stex_sproof_inc_counter_bool
- }
- \clist_map_inline:Nn \l_tmpa_clist {
- \exp_args:No \str_if_eq:nnT \c__stex_sproof_flow_str {##1} {
- \tl_clear:N \l_tmpa_tl
- }
- }
- \l_tmpa_tl
- \tl_if_empty:nF{#2}{
- \titleemph{#2}:~
- }
- }
- \__stex_sproof_add_counter:
- \stex_smsmode_do:
-}{
- \__stex_sproof_remove_counter:
- \bool_if:NT \l__stex_sproof_inc_counter_bool {
- \__stex_sproof_inc_counter:
- }
- \stex_if_smsmode:F{
- \clist_set:No \l_tmpa_clist \spftype
- \tl_set:Nn \l_tmpa_tl{\sproofend}
- \clist_map_inline:Nn \l_tmpa_clist {
- \exp_args:No \str_if_eq:nnT \c__stex_sproof_flow_str {##1} {
- \tl_clear:N \l_tmpa_tl
- }
- }
- \l_tmpa_tl
- \end{stex_annotate_env}
- }
-}
-\newcommand\spfcasesketch[3][]{
- \begin{spfcase}[#1]{#2}#3\end{spfcase}
+ \titleemph{
+ \tl_if_empty:NTF \spftype {Proof~Idea}{
+ \spftype
+ }:
+ }~#2
+ \sproofend
}
-\keys_define:nn { stex / just }{
- id .str_set_x:N = \l__stex_sproof_just_id_str,
- method .tl_set:N = \l__stex_sproof_just_method_tl,
- premises .tl_set:N = \l__stex_sproof_just_premises_tl,
- args .tl_set:N = \l__stex_sproof_just_args_tl
+\newcommand\spfjust[1]{
+ #1
}
-\newcommand\spfjust[1][]{}
-\newcommand\stex_proof_premise:[2][]{#2}
-\newcommand\justarg[2][]{#2}
%%%%%%%%%%%%% metatheory.dtx %%%%%%%%%%%%%
@@ -6516,6 +6894,8 @@
\exp_args:Nx \stex_set_current_repository:n { \l_tmpa_str }
}
}
+
+\stex_get_document_uri:
\endinput
%%
%% End of file `stex.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/tikzinput.sty b/Master/texmf-dist/tex/latex/stex/tikzinput.sty
index 105ef77389e..d8cd67217b8 100644
--- a/Master/texmf-dist/tex/latex/stex/tikzinput.sty
+++ b/Master/texmf-dist/tex/latex/stex/tikzinput.sty
@@ -9,7 +9,7 @@
%%%%%%%%%%%%% tikzinput.dtx %%%%%%%%%%%%%
-\ProvidesExplPackage{tikzinput}{2022/05/24}{3.1.0}{tikzinput package}
+\ProvidesExplPackage{tikzinput}{2022/09/14}{3.2.0}{tikzinput package}
\RequirePackage{l3keys2e}
\keys_define:nn { tikzinput } {
@@ -64,6 +64,7 @@
}{}
+
\endinput
%%
%% End of file `tikzinput.sty'.