diff options
author | Karl Berry <karl@freefriends.org> | 2022-09-14 19:58:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-09-14 19:58:16 +0000 |
commit | 17b3bbda651c5296c1e222bb44b6a1d348a737bd (patch) | |
tree | e895b9d34f6ca6723d2b106d94fd0b334d31a9a4 /Master/texmf-dist/tex | |
parent | 732ae3fbb7543a76e6ed337dcc853e4dec34efbb (diff) |
stex (14sep22)
git-svn-id: svn://tug.org/texlive/trunk@64383 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
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'. |