summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/stex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-10-17 03:01:53 +0000
committerNorbert Preining <norbert@preining.info>2023-10-17 03:01:53 +0000
commit3e9c5c6e1c118283b7775fd707379f8c9fdd3fd5 (patch)
tree40f420b2cc25378ebd0cd509854828b1b7aa337f /macros/latex/contrib/stex
parentc4125da665ac93db063e3c177f4fc5d172f5866f (diff)
CTAN sync 202310170301
Diffstat (limited to 'macros/latex/contrib/stex')
-rw-r--r--macros/latex/contrib/stex/Makefile2
-rw-r--r--macros/latex/contrib/stex/doc/packages/stex-problem.tex12
-rw-r--r--macros/latex/contrib/stex/doc/stex-doc.pdfbin4835495 -> 4940119 bytes
-rw-r--r--macros/latex/contrib/stex/doc/stex-doc.tex1
-rw-r--r--macros/latex/contrib/stex/doc/stex-docheader.tex7
-rw-r--r--macros/latex/contrib/stex/doc/stex-manual.pdfbin745718 -> 745799 bytes
-rw-r--r--macros/latex/contrib/stex/doc/stex-tutorial.pdfbin3432339 -> 3457463 bytes
-rw-r--r--macros/latex/contrib/stex/source/hwexam.dtx28
-rw-r--r--macros/latex/contrib/stex/source/notesslides.dtx4
-rw-r--r--macros/latex/contrib/stex/source/problem.dtx536
-rw-r--r--macros/latex/contrib/stex/source/stex.dtx226
-rw-r--r--macros/latex/contrib/stex/source/tikzinput.dtx2
-rw-r--r--macros/latex/contrib/stex/tex/etc/hwexam-default.header6
-rw-r--r--macros/latex/contrib/stex/tex/etc/lststex.sty21
-rw-r--r--macros/latex/contrib/stex/tex/etc/stex-highlighting.sty59
-rw-r--r--macros/latex/contrib/stex/tex/etc/stex-logo.sty6
-rw-r--r--macros/latex/contrib/stex/tex/etc/stex.cls.ltxml10
-rw-r--r--macros/latex/contrib/stex/tex/etc/stex.sty.ltxml23
-rw-r--r--macros/latex/contrib/stex/tex/etc/stexthm.sty2
-rw-r--r--macros/latex/contrib/stex/tex/ldf/problem-english.ldf6
-rw-r--r--macros/latex/contrib/stex/tex/ldf/problem-finnish.ldf4
-rw-r--r--macros/latex/contrib/stex/tex/ldf/problem-french.ldf4
-rw-r--r--macros/latex/contrib/stex/tex/ldf/problem-ngerman.ldf5
-rw-r--r--macros/latex/contrib/stex/tex/ldf/problem-russian.ldf6
-rw-r--r--macros/latex/contrib/stex/tex/ldf/stex-en.ldf5
25 files changed, 711 insertions, 264 deletions
diff --git a/macros/latex/contrib/stex/Makefile b/macros/latex/contrib/stex/Makefile
index 43942d6051..d12908d2d4 100644
--- a/macros/latex/contrib/stex/Makefile
+++ b/macros/latex/contrib/stex/Makefile
@@ -4,5 +4,3 @@ MAKEDIRS = source doc
all package doc:
@for d in $(MAKEDIRS); do (cd $$d && $(MAKE) -$(MAKEFLAGS) $@) || exit $$?; done
- ls
- pdflatex test.en.tex
diff --git a/macros/latex/contrib/stex/doc/packages/stex-problem.tex b/macros/latex/contrib/stex/doc/packages/stex-problem.tex
index 81315415a4..75032724f5 100644
--- a/macros/latex/contrib/stex/doc/packages/stex-problem.tex
+++ b/macros/latex/contrib/stex/doc/packages/stex-problem.tex
@@ -1,10 +1,8 @@
\begin{sfragment}{Introduction}
- The \pkg{problem} package supplies an infrastructure that allows specify problem. Problems
-are text fragments that come with auxiliary functions: hints, notes, and
-solutions\footnote{for the moment multiple choice problems are not supported, but may
- well be in a future version}. Furthermore, we can specify how long the solution to a
-given problem is estimated to take and how many points will be awarded for a perfect
-solution.
+ The \pkg{problem} package supplies an infrastructure that allows specify problem.
+ Problems are text fragments that come with auxiliary functions: hints, notes, and
+ solutions. Furthermore, we can specify how long the solution to a given problem is
+ estimated to take and how many points will be awarded for a perfect solution.
Finally, the \pkg{problem} package facilitates the management of problems in small files,
so that problems can be re-used in multiple environment.
@@ -48,7 +46,7 @@ so that problems can be re-used in multiple environment.
\begin{exnote}
Justify your answer
\end{exnote}
-\begin{solution}[for=elefants]
+\begin{solution}
Four, two in the front seats, and two in the back.
\begin{gnote}
if they do not give the justification deduct 5 pts
diff --git a/macros/latex/contrib/stex/doc/stex-doc.pdf b/macros/latex/contrib/stex/doc/stex-doc.pdf
index a978cbb2e7..1a4a1e5a14 100644
--- a/macros/latex/contrib/stex/doc/stex-doc.pdf
+++ b/macros/latex/contrib/stex/doc/stex-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/stex/doc/stex-doc.tex b/macros/latex/contrib/stex/doc/stex-doc.tex
index 6dbf566c2c..ff82e9457f 100644
--- a/macros/latex/contrib/stex/doc/stex-doc.tex
+++ b/macros/latex/contrib/stex/doc/stex-doc.tex
@@ -40,6 +40,7 @@
\end{sfragment}
\begin{sfragment}{User Manual}
+ \let\RequirePackage\documentclass
\inputref[sTeX/Documentation]{manual}
\begin{sfragment}{Additional Packages}
diff --git a/macros/latex/contrib/stex/doc/stex-docheader.tex b/macros/latex/contrib/stex/doc/stex-docheader.tex
index b8b6313be8..34d3c93eb0 100644
--- a/macros/latex/contrib/stex/doc/stex-docheader.tex
+++ b/macros/latex/contrib/stex/doc/stex-docheader.tex
@@ -5,7 +5,7 @@
\usepackage[hyperref=auto,style=alphabetic]{biblatex}
%\usepackage[mathhub=\stexdocpath/mh,usedeps]{stex}
\usepackage[lang={en,de}]{stex}
-
+\usepackage[show]{ed}
\usepackage{rustex}
\usepackage{stex-highlighting,stexthm}
@@ -36,7 +36,7 @@
\newif\ifhadtitle\hadtitlefalse
-\def\stexversion{3.3.0}
+\def\stexversion{3.4.0}
\def\changedate{\today}
\def\stextoptitle#1#2{\title{#1\thanks{Version {\stexversion} (last revised {\changedate})} }\def\thispkg{#2}}
@@ -402,4 +402,5 @@
}
-\AtBeginDocument{\catcode`_=8} \ No newline at end of file
+\AtBeginDocument{\catcode`_=8}
+
diff --git a/macros/latex/contrib/stex/doc/stex-manual.pdf b/macros/latex/contrib/stex/doc/stex-manual.pdf
index dcc5371fad..f866203912 100644
--- a/macros/latex/contrib/stex/doc/stex-manual.pdf
+++ b/macros/latex/contrib/stex/doc/stex-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/stex/doc/stex-tutorial.pdf b/macros/latex/contrib/stex/doc/stex-tutorial.pdf
index 1c380fadde..c7740a4d90 100644
--- a/macros/latex/contrib/stex/doc/stex-tutorial.pdf
+++ b/macros/latex/contrib/stex/doc/stex-tutorial.pdf
Binary files differ
diff --git a/macros/latex/contrib/stex/source/hwexam.dtx b/macros/latex/contrib/stex/source/hwexam.dtx
index 003d8a3d87..783c8c2382 100644
--- a/macros/latex/contrib/stex/source/hwexam.dtx
+++ b/macros/latex/contrib/stex/source/hwexam.dtx
@@ -41,7 +41,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{hwexam}{2023/03/19}{3.3.0}{homework assignments and exams}
+\ProvidesExplPackage{hwexam}{2023/10/13}{3.4.0}{homework assignments and exams}
\RequirePackage{l3keys2e}
\keys_define:nn {hwexam / pkg}{
@@ -63,7 +63,7 @@
\ExplSyntaxOn\makeatletter
\input{hwexam-english.ldf}
\ltx@ifpackageloaded{babel}{
- \clist_set:Nx \l_tmpa_clist {\bbl@loaded}
+ \clist_set:Nx \l_tmpa_clist {\exp_args:No \tl_to_str:n \bbl@loaded}
\exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{ngerman}}{
\input{hwexam-ngerman.ldf}
}
@@ -130,10 +130,10 @@
}\par\smallskip
\textbf{
\tl_if_empty:NF \l_stex_key_given_tl {
- \hwexam@kw@given:~\l_stex_key_given_tl\quad
+ \hwexam@kw@given :~\l_stex_key_given_tl\quad
}
\tl_if_empty:NF \l_stex_key_due_tl {
- \hwexam@kw@due:~\l_stex_key_due_tl\quad
+ \hwexam@kw@due :~\l_stex_key_due_tl\quad
}
}
\end{center}
@@ -246,26 +246,6 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\testemptypage}
-% \begin{macrocode}
-\newcommand\testemptypage[1][]{%
- \bool_if:NT \c__problems_test_bool {\ \vfill\begin{center}\hwexam@kw@testemptypage\end{center}\eject}
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\testspace}
-% \begin{macrocode}
-\newcommand\testspace[1]{\bool_if:NT \c__problems_test_bool {\vspace*{#1}}}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\testnewpage}
-% \begin{macrocode}
-\newcommand\testnewpage{\bool_if:NT \c__problems_test_bool {\newpage}}
-% \end{macrocode}
-% \end{macro}
-%
%
% \begin{macrocode}
%</package>
diff --git a/macros/latex/contrib/stex/source/notesslides.dtx b/macros/latex/contrib/stex/source/notesslides.dtx
index c2f9f594c9..31f012240b 100644
--- a/macros/latex/contrib/stex/source/notesslides.dtx
+++ b/macros/latex/contrib/stex/source/notesslides.dtx
@@ -46,7 +46,7 @@
% \begin{macrocode}
%<*cls>
%<@@=notesslides>
-\ProvidesExplClass{notesslides}{2023/03/19}{3.3.0}{notesslides Class}
+\ProvidesExplClass{notesslides}{2023/10/13}{3.4.0}{notesslides Class}
\RequirePackage{l3keys2e}
\str_const:Nn \c_@@_class_str {article}
@@ -93,7 +93,7 @@
% now we do the same for the |notesslides| package.
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{notesslides}{2023/03/19}{3.3.0}{notesslides Package}
+\ProvidesExplPackage{notesslides}{2023/10/13}{3.4.0}{notesslides Package}
\RequirePackage{l3keys2e}
\keys_define:nn{notesslides / pkg}{
diff --git a/macros/latex/contrib/stex/source/problem.dtx b/macros/latex/contrib/stex/source/problem.dtx
index c62a9242ba..9d503e0d52 100644
--- a/macros/latex/contrib/stex/source/problem.dtx
+++ b/macros/latex/contrib/stex/source/problem.dtx
@@ -19,7 +19,7 @@
%
% \begin{stexmanual}
% \begin{sfragment}{Problem Manual}
- % \input{\stexdocpath/packages/stex-problem}
+% \input{\stexdocpath/packages/stex-problem}
% \end{sfragment}
% \end{stexmanual}
%
@@ -42,7 +42,7 @@
% \begin{macrocode}
%<*package>
%<@@=problems>
-\ProvidesExplPackage{problem}{2023/03/19}{3.3.0}{Semantic Markup for Problems}
+\ProvidesExplPackage{problem}{2023/10/13}{3.4.0}{Semantic Markup for Problems}
\RequirePackage{l3keys2e}
\keys_define:nn { problem / pkg }{
@@ -74,6 +74,13 @@
}{
\solutionsfalse
}
+\newif\ifintest
+\bool_if:NTF \c_@@_test_bool {
+ \intesttrue
+}{
+ \intestfalse
+}
+
\RequirePackage{stex}
% \end{macrocode}
%
@@ -85,7 +92,7 @@
\ExplSyntaxOn\makeatletter
\input{problem-english.ldf}
\ltx@ifpackageloaded{babel}{
- \clist_set:Nx \l_tmpa_clist {\bbl@loaded}
+ \clist_set:Nx \l_tmpa_clist {\exp_args:No \tl_to_str:n \bbl@loaded}
\exp_args:NNx \clist_if_in:NnT \l_tmpa_clist {\detokenize{ngerman}}{
\input{problem-ngerman.ldf}
}
@@ -110,16 +117,20 @@
% internal macros.
%
% \begin{macrocode}
+\bool_new:N \l_stex_key_autogradable_bool
\stex_keys_define:nnnn{ problem }{
\tl_set:Nn \l_stex_key_pts_tl 0
\tl_set:Nn \l_stex_key_min_tl 0
\str_clear:N \l_stex_key_name_str
\str_clear:N \l_stex_key_mhrepos_str
+ \bool_set_false:N \l_stex_key_autogradable_bool
}{
pts .tl_set:N = \l_stex_key_pts_tl,
min .tl_set:N = \l_stex_key_min_tl,
name .str_set:N = \l_stex_key_name_str,
- archive .str_set:N = \l_stex_key_mhrepos_str,
+ autogradable .bool_set:N = \l_stex_key_autogradable_bool,
+ archive .code:n = {},
+ %archive .str_set:N = \l_stex_key_mhrepos_str,
creators .code:n = {}
%imports .tl_set:N = \l_@@_prob_imports_tl,
%refnum .int_set:N = \l_@@_prob_refnum_int,
@@ -142,9 +153,26 @@
%
% \begin{environment}{sproblem}
% \begin{macrocode}
+\cs_new:Nn \_@@_activate_macros: {
+ \stex_reactivate_macro:N \solution
+ \stex_reactivate_macro:N \mcb
+ \stex_reactivate_macro:N \scb
+ \stex_reactivate_macro:N \fillinsol
+ \stex_reactivate_macro:N \hint
+ \stex_reactivate_macro:N \exnote
+ \stex_reactivate_macro:N \gnote
+}
+
\newcounter{pts}
\newcounter{min}
+\bool_new:N \l_@@_in_problem_bool
+\bool_new:N \l_@@_has_pts_bool
+\bool_new:N \l_@@_has_min_bool
+\bool_set_false:N \l_@@_in_problem_bool
\stex_new_stylable_env:nnnnnnn {problem} {O{}}{
+ \bool_if:NT \l_@@_in_problem_bool {
+ \msg_error:nn{stex}{error/nestedproblem}
+ }
\cs_if_exist:NTF \l_problem_inputproblem_keys_tl {
\tl_put_left:Nn \l_problem_inputproblem_keys_tl {#1,}
\exp_args:Nno \stex_keys_set:nn{problem}{
@@ -154,60 +182,65 @@
\stex_keys_set:nn{problem}{#1}
}
\refstepcounter{sproblem}
- \str_if_empty:NT \l_stex_key_name_str {
- \stex_file_split_off_lang:NN \l_@@_path_seq \g_stex_current_file
- \seq_get_right:NN \l_@@_path_seq \l_stex_key_name_str
- }
-
- \exp_args:No \stex_module_setup:n \l_stex_key_name_str
\stex_if_do_html:T {
+ \str_if_empty:NT \l_stex_key_name_str {
+ \stex_file_split_off_lang:NN \l_@@_path_seq \g_stex_current_file
+ \seq_get_right:NN \l_@@_path_seq \l_stex_key_name_str
+ }
\exp_args:Nne \begin{stex_annotate_env} {
- shtml:problem={\l_stex_current_module_str},
+ shtml:problem={\l_stex_key_name_str},
shtml:language={ \l_stex_current_language_str},
- shtml:signature={\l_stex_key_sig_str}
- \tl_if_empty:NF \l_stex_metatheory_uri {,
- shtml:metatheory={\stex_uri_use:N \l_stex_metatheory_uri}
- }
+ shtml:autogradable={\bool_if:NTF \l_stex_key_autogradable_bool {true}{false}}
}
- \stex_annotate_invisible:n{}
\tl_if_empty:NF \l_stex_key_title_tl {
\exp_args:No \stexdoctitle \l_stex_key_title_tl
}
+ \stex_annotate_invisible:nn{
+ shtml:problempoints={\l_stex_key_pts_tl}
+ }{ \l_stex_key_pts_tl }
}
- \stex_if_smsmode:F {
- \str_set_eq:NN \thismoduleuri \l_stex_current_module_str
- \tl_set_eq:NN \thismodulename \l_stex_key_name_str
- \tl_set_eq:NN \thistitle \l_stex_key_title_tl
- \stex_style_apply:
- \addtocounter{pts}{\l_stex_key_pts_tl}
- \addtocounter{min}{\l_stex_key_min_tl}
- \_stex_do_id:
- \_@@_record_problem:
- }
- \stex_reactivate_macro:N \solution
- \stex_reactivate_macro:N \mcb
- \stex_reactivate_macro:N \fillinsol
- \stex_smsmode_do:
+
+ \tl_set_eq:NN \thistitle \l_stex_key_title_tl
+
+ \bool_set_true:N \l_@@_in_problem_bool
+ \tl_set_eq:NN \l_@@_pts_tl \l_stex_key_pts_tl
+ \tl_set_eq:NN \l_@@_min_tl \l_stex_key_min_tl
+ \tl_if_eq:NnTF \l_@@_pts_tl {0}
+ {\bool_set_false:N \l_@@_has_pts_bool}
+ {\bool_set_true:N \l_@@_has_pts_bool}
+ \tl_if_eq:NnTF \l_@@_min_tl {0}
+ {\bool_set_false:N \l_@@_has_min_bool}
+ {\bool_set_true:N \l_@@_has_min_bool}
+ \int_gzero:N \g_@@_subproblem_int
+
+ \stex_style_apply:
+ \_stex_do_id:
+ \_@@_activate_macros:
}{
- \stex_close_module:
- \stex_if_smsmode:F \stex_style_apply:
+ \addtocounter{pts}{\l_@@_pts_tl}
+ \addtocounter{min}{\l_@@_min_tl}
+ \_@@_record_problem:
+ \stex_style_apply:
\stex_if_do_html:T{ \end{stex_annotate_env} }
}{
\par\noindent\problemheader
\bool_if:NT \c_@@_pts_bool {
- \marginpar{\l_stex_key_pts_tl{}~\problem@kw@points\smallskip}
+ \tl_if_eq:NnF \l_@@_pts_tl {0}{
+ \marginpar{\l_@@_pts_tl{}~\problem@kw@pts\smallskip}
+ }
}
\bool_if:NT \c_@@_min_bool {
- \marginpar{\l_stex_key_min_tl{}~\problem@kw@minutes\smallskip}
+ \tl_if_eq:NnF \l_@@_min_tl {0} {
+ \marginpar{\l_@@_min_tl{}~\problem@kw@minutes\smallskip}
+ }
}
- \\
+ \par
\stex_ignore_spaces_and_pars:
}{
\par\bigskip
% \bool_if:NT \c_@@_test_bool \pagebreak
}{s}
-\stex_sms_allow_env:n{sproblem}
\tl_set:Nn \problemheader {
\textbf{\sproblemautorefname{~}\thesproblem
@@ -219,7 +252,7 @@
\cs_new_protected:Nn \_@@_record_problem: {
\exp_args:NNe \iow_now:Nn \@auxout {
- \problem@restore {\thesproblem}{\l_stex_key_pts_tl}{\l_stex_key_min_tl}
+ \problem@restore {\thesproblem}{\l_@@_pts_tl}{\l_@@_min_tl}
}
}
@@ -227,6 +260,73 @@
% \end{macrocode}
% \end{environment}
%
+% \begin{environment}{subproblem}
+% \begin{macrocode}
+\int_new:N \g_@@_subproblem_int
+
+\stex_new_stylable_env:nnnnnnn {subproblem} {O{}}{
+ \stex_keys_set:nn{problem}{#1}
+ \bool_if:NF \l_@@_in_problem_bool{
+ \ifstexhtml\else
+ \par{\bfseries WARNING~subproblem~to~be~used~in~some~problem}\par
+ \fi
+ \_@@_activate_macros:
+ \bool_set_true:N \l_@@_in_problem_bool
+ \tl_set:Nn \l_@@_pts_tl{0}
+ \tl_set:Nn \l_@@_min_tl{0}
+ }
+ \str_if_empty:NT \l_stex_key_name_str {
+ \stex_file_split_off_lang:NN \l_@@_path_seq \g_stex_current_file
+ \seq_get_right:NN \l_@@_path_seq \l_stex_key_name_str
+ }
+ \stex_if_do_html:T {
+ \str_if_empty:NT \l_stex_key_name_str {
+ \stex_file_split_off_lang:NN \l_@@_path_seq \g_stex_current_file
+ \seq_get_right:NN \l_@@_path_seq \l_stex_key_name_str
+ }
+ \exp_args:Nne \begin{stex_annotate_env} {
+ shtml:subproblem={\l_stex_key_name_str},
+ shtml:language={ \l_stex_current_language_str},
+ shtml:autogradable={\bool_if:NTF \l_stex_key_autogradable_bool {true}{false}}
+ }
+ \stex_annotate_invisible:n{}
+ \tl_if_empty:NF \l_stex_key_title_tl {
+ \exp_args:No \stexdoctitle \l_stex_key_title_tl
+ }
+ }
+ \int_gincr:N \g_@@_subproblem_int
+ \bool_if:NF \l_@@_has_pts_bool {
+ \tl_gset:Nx \l_@@_pts_tl {\int_eval:n {\l_@@_pts_tl + \l_stex_key_pts_tl}}
+ }
+ \bool_if:NF \l_@@_has_min_bool {
+ \tl_gset:Nx \l_@@_min_tl {\int_eval:n {\l_@@_min_tl + \l_stex_key_min_tl}}
+ }
+ \stex_if_smsmode:F \stex_style_apply:
+}{
+ \stex_if_smsmode:F \stex_style_apply:
+ \stex_if_do_html:T{ \end{stex_annotate_env} }
+}{
+ \begin{list}{}{
+ \setlength\topsep{0pt}
+ \setlength\parsep{0pt}
+ \setlength\rightmargin{0pt}
+ }\item[\int_use:N \g_@@_subproblem_int .]
+ \bool_if:NT \c_@@_pts_bool {
+ \bool_if:NF \l_@@_has_pts_bool {
+ \marginpar{\smallskip\l_stex_key_pts_tl{}~\problem@kw@pts}
+ }
+ }
+ \bool_if:NT \c_@@_min_bool {
+ \bool_if:NF \l_@@_has_min_bool{
+ \marginpar{\smallskip\l_stex_key_min_tl{}~\problem@kw@minutes}
+ }
+ }
+}{
+ \end{list}
+}{}
+% \end{macrocode}
+% \end{environment}
+%
% \begin{macro}{\includeproblem}
% \begin{macrocode}
\stex_keys_define:nnnn{ includeproblem }{
@@ -250,10 +350,17 @@
% \begin{environment}{solution}
% \begin{macrocode}
\int_new:N \g_problem_id_counter
+\dim_new:N \l_stex_key_testspace_dim
+\stex_keys_define:nnnn{ solution }{
+ \str_clear:N \l_stex_key_answerclass_str
+ \dim_zero:N \l_stex_key_testspace_dim
+}{
+ testspace .dim_set:N = \l_stex_key_testspace_dim,
+ answerclass .str_set:N = \l_stex_key_answerclass_str
+}{id,title,style}
\cs_new_protected:Nn \_@@_solution_start:n {
- \str_set:Nn \l_stex_key_title_tl {#1}
- \str_set:Nn \l_stex_key_id_str {#1}
+ \stex_keys_set:nn{ solution }{#1}
\str_if_empty:NT \l_stex_key_id_str {
\int_gincr:N \g_problem_id_counter
\str_set:Nx \l_stex_key_id_str {
@@ -262,7 +369,8 @@
}
\stex_if_do_html:T{
\begin{stex_annotate_env}{
- shtml:solution=\l_stex_key_id_str
+ shtml:solution=\l_stex_key_id_str,
+ shtml:answerclass={\l_stex_key_answerclass_str}
}
}
\stex_style_apply:
@@ -275,6 +383,8 @@
\ifsolutions
\_@@_solution_start:n{#1}
\else
+ \stex_keys_set:nn{ solution }{#1}
+ \testspace{\l_stex_key_testspace_dim}
\setbox\l_tmpa_box\vbox\bgroup
\fi
}
@@ -293,12 +403,14 @@
\fi
}
}{
- \par\smallskip\hrule\smallskip
- \noindent\emph{Solution\str_if_empty:NF \l_stex_key_title_tl{
- {~}\l_stex_key_title_tl
+ \par\smallskip\rule[.3em]{\linewidth}{0.4pt}\newline\smallskip
+ \noindent\emph{\problem@kw@solution\tl_if_empty:NF \l_stex_key_title_tl{
+ {~}\l_stex_key_title_tl \str_if_empty:NF \l_stex_key_answerclass_str {
+ (Answer Class: \l_stex_key_answerclass_str)
+ }
} :~}
}{
- \par\smallskip\hrule
+ \par\rule[.3em]{\linewidth}{0.4pt}\newline
}{}
\stex_deactivate_macro:Nn \solution {sproblem~environments}
@@ -318,9 +430,11 @@
%
% \begin{environment}{hint}
% \begin{macrocode}
+
+\stex_keys_define:nnnn{ problemenv }{}{}{id,title,style}
+
\cs_new_protected:Nn \_@@_hint_start:n {
- \str_set:Nn \l_stex_key_title_tl {#1}
- \str_set:Nn \l_stex_key_id_str {#1}
+ \stex_keys_set:nn{ problemenv }{#1}
\str_if_empty:NT \l_stex_key_id_str {
\int_gincr:N \g_problem_id_counter
\str_set:Nx \l_stex_key_id_str {
@@ -360,21 +474,21 @@
}
}
}{
- \par\smallskip\hrule\smallskip
- \noindent\emph{Hint\str_if_empty:NF \l_stex_key_title_tl{
+ \par\smallskip\rule[.3em]{\linewidth}{0.4pt}\newline\smallskip
+ \noindent\emph{\problem@kw@hint\tl_if_empty:NF \l_stex_key_title_tl{
{~}\l_stex_key_title_tl
} :~}
}{
- \par\smallskip\hrule
+ \par\rule[.3em]{\linewidth}{0.4pt}\newline
}{}
+\stex_deactivate_macro:Nn \hint {sproblem~environments}
% \end{macrocode}
% \end{environment}
%
% \begin{environment}{exnote}
% \begin{macrocode}
\cs_new_protected:Nn \_@@_exnote_start:n {
- \str_set:Nn \l_stex_key_title_tl {#1}
- \str_set:Nn \l_stex_key_id_str {#1}
+ \stex_keys_set:nn{ problemenv }{#1}
\str_if_empty:NT \l_stex_key_id_str {
\int_gincr:N \g_problem_id_counter
\str_set:Nx \l_stex_key_id_str {
@@ -414,26 +528,29 @@
}
}
}{
- \par\smallskip\hrule\smallskip
- \noindent\emph{Note\str_if_empty:NF \l_stex_key_title_tl{
+ \par\smallskip\rule[.3em]{\linewidth}{0.4pt}\newline\smallskip
+ \noindent\emph{\problem@kw@note\tl_if_empty:NF \l_stex_key_title_tl{
{~}\l_stex_key_title_tl
} :~}
}{
- \par\smallskip\hrule
+ \par\rule[.3em]{\linewidth}{0.4pt}\newline
}{}
+\stex_deactivate_macro:Nn \exnote {sproblem~environments}
% \end{macrocode}
% \end{environment}
%% \begin{environment}{gnote}
% \begin{macrocode}
+\int_new:N \l_@@_anscls_int
+
\cs_new_protected:Nn \_@@_gnote_start:n {
- \str_set:Nn \l_stex_key_title_tl {#1}
- \str_set:Nn \l_stex_key_id_str {#1}
+ \stex_keys_set:nn{ problemenv }{#1}
\str_if_empty:NT \l_stex_key_id_str {
\int_gincr:N \g_problem_id_counter
\str_set:Nx \l_stex_key_id_str {
GNOTE_\int_use:N \g_problem_id_counter
}
}
+
\stex_if_do_html:T{
\begin{stex_annotate_env}{
shtml:problemgnote=\l_stex_key_id_str
@@ -452,6 +569,7 @@
\setbox\l_tmpa_box\vbox\bgroup
}
}
+ \stex_reactivate_macro:N \anscls
}{
\stex_if_do_html:TF{
\stex_style_apply:
@@ -467,13 +585,59 @@
}
}
}{
- \par\smallskip\hrule\smallskip
- \noindent\emph{Grading\str_if_empty:NF \l_stex_key_title_tl{
+ \par\smallskip\rule[.3em]{\linewidth}{0.4pt}\newline\smallskip
+ \noindent\emph{\problem@kw@grading\str_if_empty:NF \l_stex_key_title_tl{
{~}\l_stex_key_title_tl
} :~}
}{
- \par\smallskip\hrule
+ \par\rule[.3em]{\linewidth}{0.4pt}\newline
}{}
+\stex_deactivate_macro:Nn \gnote {sproblem~environments}
+
+
+\stex_keys_define:nnnn{ anscls }{
+ \str_clear:N \l_stex_key_pts_str
+ \tl_clear:N \l_stex_key_feedback_tl
+}{
+ pts .str_set:N = \l_stex_key_pts_str,
+ feedback .tl_set:N = \l_stex_key_feedback_str,
+ update .code:n = {}
+}{id}
+\newcommand \anscls [2][] {
+ \stex_keys_set:nn{ anscls }{#1}
+ \str_if_empty:NT \l_stex_key_id_str {
+ \int_incr:N \l_@@_anscls_int
+ \str_set:Nx \l_stex_key_id_str {
+ AC\int_use:N \l_@@_anscls_int
+ }
+ }
+ \begin{list}{}{
+ \setlength\topsep{0pt}
+ \setlength\parsep{0pt}
+ \setlength\rightmargin{0pt}
+ }\item[\l_stex_key_id_str]
+ \stex_if_do_html:TF{
+ \stex_annotate:nn{
+ shtml:answerclass={\l_stex_key_id_str}
+ \str_if_empty:NF \l_stex_key_pts_str{
+ ,shtml:answerclass-pts={\l_stex_key_pts_str}
+ }
+ \str_if_empty:NF \l_stex_key_feedback_str{
+ ,shtml:answerclass-feedback={\l_stex_key_feedback_str}
+ }
+ }{
+ #2
+ }
+ }{#2}
+ \str_if_empty:NF \l_stex_key_pts_str {\par
+ ~ \problem@kw@points:~\l_stex_key_pts_str
+ }
+ \str_if_empty:NF \l_stex_key_feedback_str {\par
+ ~ \problem@kw@feedback :~\l_stex_key_feedback_str
+ }
+ \end{list}
+}
+\stex_deactivate_macro:Nn \anscls {gnote~environments}
% \end{macrocode}
% \end{environment}
%
@@ -482,33 +646,55 @@
% \begin{macrocode}
\def\pts#1{
\bool_if:NT \c_@@_pts_bool {
- \marginpar{#1~\problem@kw@points}
- }
+ \stex_annotate:nn{shtml:problempoints={#1}}{\marginpar{#1~\problem@kw@pts}}
+ }\hbox_unpack:N\c_empty_box
}
\def\min#1{
\bool_if:NT \c_@@_min_bool {
- \marginpar{#1~\problem@kw@minutes}
- }
+ \stex_annotate:nn{shtml:problemminutes={}}{\marginpar{#1~\problem@kw@minutes}}
+ }\hbox_unpack:N\c_empty_box
}
% \end{macrocode}
%
% \begin{environment}{mcb}
%
% \begin{macrocode}
-\newenvironment{mcb}{\par
+\stex_new_stylable_env:nnnnnnn{mcb}{O{}}{
+ \stex_keys_set:nn{style}{#1}
\stex_if_do_html:T{
- \begin{stex_annotate_env}{shtml:multiple-choice-block={}}
+ \tl_set:Nn\problem_mcc_box_tl{}
+ \exp_args:Nne \begin{stex_annotate_env}{
+ shtml:multiple-choice-block={}
+ \clist_if_empty:NF \l_stex_key_style_clist {,
+ shtml:styles={\l_stex_key_style_clist}
+ }
+ }
}
\stex_deactivate_macro:Nn \mcb {sproblem~environments}
+ \stex_deactivate_macro:Nn \scb {sproblem~environments}
\stex_deactivate_macro:Nn \solution {sproblem~environments}
+ \stex_deactivate_macro:Nn \hint {sproblem~environments}
+ \stex_deactivate_macro:Nn \exnote {sproblem~environments}
+ \stex_deactivate_macro:Nn \gnote {sproblem~environments}
\stex_reactivate_macro:N \mcc
- \begin{enumerate}
+ \cs_set:Nn \_@@_mccline:n{
+ \begin{list}{}{
+ \setlength\topsep{0pt}
+ \setlength\parsep{0pt}
+ \setlength\rightmargin{0pt}
+ }\item[\problem_mcc_box_tl] ##1 \end{list}
+ }
+ \stex_style_apply:
}{
- \end{enumerate}
+ \stex_style_apply:
\stex_if_do_html:T{
\end{stex_annotate_env}
}
-}
+}{\par}{}{}
+\stexstylemcb[inline]{
+ \cs_set:Nn \_@@_mccline:n{\problem_mcc_box_tl{~} #1}
+}{}
+
\stex_deactivate_macro:Nn \mcb {sproblem~environments}
% \end{macrocode}
%
@@ -529,9 +715,7 @@
\tl_clear:N \l_stex_key_Ftext_tl
}{
feedback .tl_set:N = \l_stex_key_feedback_tl ,
- T .default:n = { false } ,
- T .bool_set:N = \l_stex_key_T_bool ,
- F .default:n = { false } ,
+ T .code:n = {\bool_set_true:N \l_stex_key_T_bool} ,
F .code:n = {\bool_set_false:N \l_stex_key_T_bool} ,
Ttext .tl_set:N = \l_stex_key_Ttext_tl ,
Ftext .tl_set:N = \l_stex_key_Ftext_tl ,
@@ -547,8 +731,8 @@
}
}
\newcommand\mcc[2][]{
- \stex_keys_set:nn{mcc}{#1}\par
- \tl_set:Nn \l_tmpb_tl {~--~
+ \stex_keys_set:nn{mcc}{#1}
+ \tl_set:Nn \l_tmpa_tl{
\bool_if:NTF \l_stex_key_T_bool {
\tl_if_empty:NTF \l_stex_key_Ttext_tl \problem@kw@correct \l_stex_key_Ttext_tl
}{
@@ -558,51 +742,217 @@
\\\emph{\l_stex_key_feedback_tl}
}
}
- \tl_set:Nn \l_tmpa_tl {
- #2
- \stex_if_do_html:TF{
- \stex_annotate:nn{shtml:mcc-solution={}}{\l_tmpb_tl}
+
+ \_@@_mccline:n{
+ \stex_if_do_html:TF{
+ \stex_annotate:nn{shtml:mcc={
+ \bool_if:NTF \l_stex_key_T_bool {true}{false}
+ }}{
+ #2\stex_annotate:nn{shtml:mcc-solution={}}{\l_tmpa_tl}
+ }
}{
- \ifsolutions\l_tmpb_tl\fi
+ #2\ifsolutions\footnote{\l_tmpa_tl}\fi
}
}
- \item[\problem_mcc_box_tl]{}~
- \stex_if_do_html:TF{
- \stex_annotate:nn{shtml:mcc={
- \bool_if:NTF \l_stex_key_T_bool {true}{false}
- }}{\l_tmpa_tl}
- }{\l_tmpa_tl}
}
\stex_deactivate_macro:Nn \mcc {mcb~environments}
% \end{macrocode}
% \end{macro}
+% \end{environment}
+%
+% \begin{environment}{scb}
+%
+% \begin{macrocode}
+
+\tl_set:Nn\problem_scc_box_tl{$\bigcirc$}
+
+\stex_new_stylable_env:nnnnnnn{scb}{O{}}{
+ \stex_keys_set:nn{style}{#1}
+ \stex_if_do_html:T{
+ \exp_args:Nne\begin{stex_annotate_env}{
+ shtml:single-choice-block={}
+ \clist_if_empty:NF \l_stex_key_style_clist {,
+ shtml:styles={\l_stex_key_style_clist}
+ }
+ }
+ \tl_set:Nn\problem_scc_box_tl{}
+ }
+ \stex_deactivate_macro:Nn \mcb {sproblem~environments}
+ \stex_deactivate_macro:Nn \scb {sproblem~environments}
+ \stex_deactivate_macro:Nn \solution {sproblem~environments}
+ \stex_deactivate_macro:Nn \hint {sproblem~environments}
+ \stex_deactivate_macro:Nn \exnote {sproblem~environments}
+ \stex_deactivate_macro:Nn \gnote {sproblem~environments}
+ \stex_reactivate_macro:N \scc
+ \cs_set:Nn \_@@_sccline:n{
+ \begin{list}{}{
+ \setlength\topsep{0pt}
+ \setlength\parsep{0pt}
+ \setlength\rightmargin{0pt}
+ }\item[\problem_scc_box_tl] ##1 \end{list}
+ }
+ \stex_style_apply:
+}{
+ \stex_style_apply:
+ \stex_if_do_html:T{
+ \end{stex_annotate_env}
+ }
+}{\par}{}{}
+\stexstylescb[inline]{
+ \cs_set:Nn \_@@_sccline:n{\problem_scc_box_tl{~} #1}
+}{}
+
+\stex_deactivate_macro:Nn \scb {sproblem~environments}
+% \end{macrocode}
+%
+% \begin{macro}{\scc}
+% \begin{macrocode}
+
+\newcommand\scc[2][]{
+ \stex_keys_set:nn{mcc}{#1}
+ \tl_set:Nn \l_tmpa_tl{
+ \bool_if:NTF \l_stex_key_T_bool {
+ \tl_if_empty:NTF \l_stex_key_Ttext_tl \problem@kw@correct \l_stex_key_Ttext_tl
+ }{
+ \tl_if_empty:NTF \l_stex_key_Ftext_tl \problem@kw@wrong \l_stex_key_Ftext_tl
+ }
+ \tl_if_empty:NF \l_stex_key_feedback_tl {
+ \\\emph{\l_stex_key_feedback_tl}
+ }
+ }
+
+ \_@@_sccline:n{
+ \stex_if_do_html:TF{
+ \stex_annotate:nn{shtml:scc={
+ \bool_if:NTF \l_stex_key_T_bool {true}{false}
+ }}{
+ #2\stex_annotate:nn{shtml:scc-solution={}}{\l_tmpa_tl}
+ }
+ }{
+ #2\ifsolutions\footnote{\l_tmpa_tl}\fi
+ }
+ }
+}
+\stex_deactivate_macro:Nn \scc {scb~environments}
+
+
+\newcommand\yesTnoF{
+ \begin{scb}[style=inline]
+ \scc[T]{yes}~\scc[F]{no}
+ \end{scb}
+}
+\newcommand\yesFnoT{
+ \begin{scb}[style=inline]
+ \scc[F]{yes}~\scc[T]{no}
+ \end{scb}
+}
+\newcommand\trueTfalseF{
+ \begin{scb}[style=inline]
+ \scc[T]{true}~\scc[F]{false}
+ \end{scb}
+}
+\newcommand\trueFfalseT{
+ \begin{scb}[style=inline]
+ \scc[F]{true}~\scc[T]{false}
+ \end{scb}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{environment}
%
% \begin{macro}{\fillinsol}
% \begin{macrocode}
+\stex_keys_define:nnnn{fillinsol}{
+ \tl_clear:N \l_@@_fillin_solution_tl
+ \dim_zero:N \l_stex_key_testspace_dim
+}{
+ testspace .dim_set:N = \l_stex_key_testspace_dim,
+ exact .code:n = {\_@@_parse_fillin_arg:nnnn{exact}#1 },
+ numrange .code:n = {\_@@_parse_fillin_arg:nnnn{numrange}#1 },
+ regex .code:n = {\_@@_parse_fillin_arg:nnnn{regex}#1 }
+}{}
+
+\cs_new:Nn \_@@_parse_fillin_arg:nnnn {
+ \stex_if_do_html:TF{
+ \tl_set:Nn \l_tmpa_tl{#3}
+ \tl_set:Nn \l_tmpb_tl{T}
+ \stex_annotate_invisible:nn{
+ shtml:fillin-case={#1},
+ shtml:fillin-case-value={#2},
+ shtml:fillin-case-verdict={
+ \tl_if_eq:NNTF\l_tmpa_tl\l_tmpb_tl{true}{false}
+ },
+ }{#4}
+ }{
+ \tl_put_right:Nn \l_@@_fillin_solution_tl {
+ #1{~} & #2{~} & #3{~} & #4{~} \\
+ }
+ }
+}
+
\newcommand\fillinsol[2][]{
\quad
+ \mode_if_math:TF{
+ \hbox{\_@@_fillinsol:nn{#1}{$#2$}}
+ }{
+ \_@@_fillinsol:nn{#1}{#2}
+ }
+ \quad
+}
+\cs_new_protected:Nn \_@@_fillinsol:nn {
+ \stex_keys_set:nn{fillinsol}{#1}
\stex_if_do_html:TF{
- \stex_annotate:nn{shtml:fillinsol={}}{ \_stex_annotate_force_break:n{#2} }
+ \stex_annotate:nn{shtml:fillinsol={}}{ \_stex_annotate_force_break:n{
+ #2
+ \l_@@_fillin_solution_tl
+ } }
}{
\ifsolutions
\textcolor{red}{\fbox{#2}}
- \else
- \fbox{
- \tl_if_empty:nTF{#1}{
- \phantom{\huge{#2}}
- }{
- \hspace{#1}
+ \tl_if_empty:NF \l_@@_fillin_solution_tl {
+ \footnote{
+ \halign{ ##\hfil & ##\hfil &##\hfil&##\hfil \cr
+ \textbf{type }&\textbf{case }&\textbf{verdict }&\textbf{feedback }\cr
+ \l_@@_fillin_solution_tl
+ }
}
}
+ \else
+ \fbox{\dim_compare:nNnTF\l_stex_key_testspace_dim={0pt}{
+ \phantom{\huge{#2}}
+ }{
+ \hspace{\l_stex_key_testspace_dim}
+ }}
\fi
}
- \quad
}
\stex_deactivate_macro:Nn \fillinsol {sproblem~environments}
% \end{macrocode}
% \end{macro}
%
-% \end{environment}
+%
+% \begin{macro}{\testemptypage}
+% \begin{macrocode}
+\newcommand\testemptypage[1][]{%
+ \bool_if:NT \c_@@_test_bool {\ \vfill\begin{center}\hwexam@kw@testemptypage\end{center}\eject}
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\testspace}
+% \begin{macrocode}
+\newcommand\testspace[1]{\bool_if:NT \c_@@_test_bool {\vspace*{#1}}}
+\newcommand\testsmallspace{\testspace{1cm}}
+\newcommand\testmedspace{\testspace{2cm}}
+\newcommand\testbigspace{\testspace{3cm}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\testnewpage}
+% \begin{macrocode}
+\newcommand\testnewpage{\bool_if:NT \c_@@_test_bool {\newpage}}
+% \end{macrocode}
+% \end{macro}
%
%
% \begin{macrocode}
diff --git a/macros/latex/contrib/stex/source/stex.dtx b/macros/latex/contrib/stex/source/stex.dtx
index dcbc4dfe7a..b128f38dd1 100644
--- a/macros/latex/contrib/stex/source/stex.dtx
+++ b/macros/latex/contrib/stex/source/stex.dtx
@@ -36,7 +36,10 @@
%%%%%%%%%%%%% stex.dtx %%%%%%%%%%%%%
\RequirePackage{expl3,l3keys2e}
-\ProvidesExplClass{stex}{2023/03/19}{3.3.0}{sTeX document class}
+\ProvidesExplClass{stex}{2023/10/13}{3.4.0}{sTeX document class}
+\IfFileExists{stex-expl-compat.sty}{
+ \usepackage{stex-expl-compat}
+}{}
\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{stex}}
\ProcessOptions
@@ -52,11 +55,14 @@
% \begin{macrocode}
%<*package>
\RequirePackage{expl3,l3keys2e,ltxcmds}
-\ProvidesExplPackage{stex}{2023/03/19}{3.3.0}{sTeX package}
+\ProvidesExplPackage{stex}{2023/10/13}{3.4.0}{sTeX package}
+\IfFileExists{stex-expl-compat.sty}{
+ \usepackage{stex-expl-compat}
+}{}
\RequirePackage{stex-logo} % externalized for backwards-compatibility reasons
\RequirePackage{standalone}
-\message{^^J*~This~is~sTeX~version~3.3.0~*^^J}
+\message{^^J*~This~is~sTeX~version~3.4.0~*^^J}
% \end{macrocode}
%
% Package options:
@@ -70,6 +76,7 @@
writesms .bool_set:N = \c_stex_persist_write_mode_bool ,
checkterms .bool_set:N = \c_stex_check_terms_bool ,
image .bool_set:N = \c_tikzinput_image_bool,
+ nofrontmatter .bool_set:N = \c_stex_no_frontmatter_bool,
unknown .code:n = {}
}
\exp_args:NNo \clist_set:Nn \c_stex_debug_clist \c_stex_debug_clist
@@ -185,11 +192,11 @@
}
\exp_args:NNo \clist_if_in:NnTF \c_stex_debug_clist {\tl_to_str:n{all}} {
- \msg_redirect_module:nnn{ stex }{ none }{ term }
+ \msg_redirect_module:nnn{ stex }{ none }{ warning }
\stex_debug:nn{all}{Logging~everything!}
}{
\clist_map_inline:Nn \c_stex_debug_clist {
- \msg_redirect_name:nnn{ stex }{ debug / #1 }{ term }
+ \msg_redirect_name:nnn{ stex }{ debug / #1 }{ warning }
\stex_debug:nn{#1}{Logging~#1}
}
}
@@ -547,8 +554,8 @@
% \begin{macrocode}
\cs_new_protected:Nn \stex_deactivate_macro:Nn {
\tl_set_eq:cN{\tl_to_str:n{#1}~-~orig}#1
- \tl_set:Nn#1{
- \msg_error:nnnn{stex}{error/deactivated-macro}{\detokenize{#1}}{#2}
+ \cs_set_protected:Npn#1{
+ \exp_args:Nnno\msg_error:nnnn{stex}{error/deactivated-macro}{#1}{#2}
}
}
\cs_new_protected:Nn \stex_reactivate_macro:N {
@@ -1915,46 +1922,48 @@
}
\AtBeginDocument{
- \cs_if_exist:NTF\frontmatter{
- \let\_@@_orig_frontmatter\frontmatter
- \let\frontmatter\relax
- }{
- \tl_set:Nn\_@@_orig_frontmatter{
- \clearpage
- %\@mainmatterfalse
- \pagenumbering{roman}
+ \bool_if:NF \c_stex_no_frontmatter_bool {
+ \cs_if_exist:NTF\frontmatter{
+ \let\_@@_orig_frontmatter\frontmatter
+ \let\frontmatter\relax
+ }{
+ \tl_set:Nn\_@@_orig_frontmatter{
+ \clearpage
+ %\@mainmatterfalse
+ \pagenumbering{roman}
+ }
}
- }
- \cs_if_exist:NTF\backmatter{
- \let\_@@_orig_backmatter\backmatter
- \let\backmatter\relax
- }{
- \tl_set:Nn\_@@_orig_backmatter{
- \clearpage
- %\@mainmatterfalse
- \pagenumbering{roman}
+ \cs_if_exist:NTF\backmatter{
+ \let\_@@_orig_backmatter\backmatter
+ \let\backmatter\relax
+ }{
+ \tl_set:Nn\_@@_orig_backmatter{
+ \clearpage
+ %\@mainmatterfalse
+ \pagenumbering{roman}
+ }
}
- }
- \newenvironment{frontmatter}{
- \_@@_orig_frontmatter
- }{
- \cs_if_exist:NTF\mainmatter{
- \mainmatter
+ \newenvironment{frontmatter}{
+ \_@@_orig_frontmatter
}{
- \clearpage
- %\@mainmattertrue
- \pagenumbering{arabic}
+ \cs_if_exist:NTF\mainmatter{
+ \mainmatter
+ }{
+ \clearpage
+ %\@mainmattertrue
+ \pagenumbering{arabic}
+ }
}
- }
- \newenvironment{backmatter}{
- \_@@_orig_backmatter
- }{
- \cs_if_exist:NTF\mainmatter{
- \mainmatter
+ \newenvironment{backmatter}{
+ \_@@_orig_backmatter
}{
- \clearpage
- %\@mainmattertrue
- \pagenumbering{arabic}
+ \cs_if_exist:NTF\mainmatter{
+ \mainmatter
+ }{
+ \clearpage
+ %\@mainmattertrue
+ \pagenumbering{arabic}
+ }
}
}
}
@@ -2320,7 +2329,10 @@
}
\cs_new_protected:Nn \stex_ref_new_sym_target:n {
- \exp_args:Ne \label{\tl_to_str:n{sref@sym@ #1}}
+ \cs_if_exist:NT \hypertarget{
+ \exp_args:Ne \hypertarget{\tl_to_str:n{sref@sym@ #1}}{}
+ \str_gset:cx{\tl_to_str:n{r@sref@sym@ #1}}{\tl_to_str:n{sref@sym@ #1}}
+ }
}
\cs_new_protected:Nn \stex_ref_new_sym_target:nn {
@@ -2342,8 +2354,8 @@
}
\cs_new_protected:Npn \_@@_do_internal_link:nn #1 {
- \cs_if_exist:NTF \hyperref {
- \hyperref[{#1}]
+ \cs_if_exist:NTF \hyperlink {
+ \hyperlink{#1}
}\use:n
}
@@ -2352,7 +2364,7 @@
}
\cs_new_protected:Npn \_@@_sym_aux:nn #1 {
- \cs_if_exist:cTF{r@sref@sym@\tl_to_str:n{#1}}{
+ \cs_if_exist:cTF{\tl_to_str:n{r@sref@sym@#1}}{
\exp_args:Ne \_@@_do_internal_link:nn{\tl_to_str:n{sref@sym@#1}}
}{
\str_if_exist:cTF{g_stex_sref_sym_#1_label}{
@@ -2448,9 +2460,9 @@
}
}{
\IfFileExists{ \stex_file_use:N \c_stex_mathhub_file / #1 / source / #2 }{
- \par\stex_annotate_invisible:nn{shtml:inputref={
+ \ifvmode\noindent\fi\stex_annotate_invisible:nn{shtml:inputref={
\l_tmpa_str / #2
- }}{~}
+ }}{}
}{
\input{ \stex_file_use:N \c_stex_mathhub_file / #1 / source / #2 }
}
@@ -2536,7 +2548,9 @@
\bool_while_do:nn { ! \seq_if_empty_p:N \l_@@_id_seq }{
\str_set:Nx \l_@@_path_str {\stex_file_use:N \l_@@_path_seq / meta-inf / lib / #1.#2}
\IfFileExists{ \l_@@_path_str }{
- \seq_put_right:No \l_@@_libinput_files_seq \l_@@_path_str
+ \exp_args:NNo \seq_if_in:NnF \l_@@_libinput_files_seq \l_@@_path_str {
+ \seq_put_right:No \l_@@_libinput_files_seq \l_@@_path_str
+ }
}{}
\seq_pop_left:NN \l_@@_id_seq \l_@@_path_str
\seq_put_right:No \l_@@_path_seq \l_@@_path_str
@@ -2544,7 +2558,9 @@
\str_set:Nx \l_@@_path_str {\stex_file_use:N \l_@@_path_seq / lib / #1.#2}
\IfFileExists{ \l_@@_path_str }{
- \seq_put_right:No \l_@@_libinput_files_seq \l_@@_path_str
+ \exp_args:NNo \seq_if_in:NnF \l_@@_libinput_files_seq \l_@@_path_str {
+ \seq_put_right:No \l_@@_libinput_files_seq \l_@@_path_str
+ }
}{}
}
@@ -2637,7 +2653,7 @@
%
% \begin{macro}{\libusetikzlibrary}
% \begin{macrocode}
-\cs_new_protected:Nn \_@@_usetikzlibrary:nn {
+\cs_new_protected:Nn \_@@_usetikzlibrary_i:nn {
\pgfkeys@spdef\pgf@temp{#1}
\expandafter\ifx\csname tikz@library@\pgf@temp @loaded\endcsname\relax%
\expandafter\global\expandafter\let\csname tikz@library@\pgf@temp @loaded\endcsname=\pgfutil@empty%
@@ -2653,17 +2669,25 @@
\catcode`\$=\csname tikz@library@#1@dollarcode\endcsname
}
-\cs_new_protected:Npn \libusetikzlibrary #1 {
- \cs_if_exist:NF \usetikzlibrary {
- \msg_error:nnx{stex}{error/notikz}{\tl_to_str:n{\libusetikzlibrary}}
- }
+\cs_new_protected:Nn \_@@_usetikzlibrary:n{
\_@@_up_archive:nn{tikzlibrary#1}{code.tex}
\int_compare:nNnTF {\seq_count:N \l_@@_libinput_files_seq} = 1 {
- \exp_args:Nne \_@@_usetikzlibrary:nn{#1}{ \seq_item:Nn \l_@@_libinput_files_seq 1 }
+ \exp_args:Nne \_@@_usetikzlibrary_i:nn{#1}{ \seq_item:Nn \l_@@_libinput_files_seq 1 }
}{
\stex_fatal_error:nnn{error/nofile}{\libusetikzlibrary}{tikzlibrary#1.code.tex}
}
}
+
+\newcommand \libusetikzlibrary [2][] {
+ \cs_if_exist:NF \usetikzlibrary {
+ \msg_error:nnx{stex}{error/notikz}{\tl_to_str:n{\libusetikzlibrary}}
+ }
+ \tl_if_empty:nTF{#1}{
+ \_@@_usetikzlibrary:n{#2}
+ }{
+ \stex_in_archive:nn{#1}{\_@@_usetikzlibrary:n{#2}}
+ }
+}
% \end{macrocode}
% \end{macro}
%
@@ -4370,11 +4394,14 @@
\str_clear:N \l_@@_name_str
\str_clear:N \l_@@_newname_str
\tl_clear:N \l_@@_ass_tl
+ \stex_debug:nn{morphisms}{Parsing~#1}
\exp_args:NNe \seq_set_split:Nnn \l_@@_seq {\tl_to_str:n{@}} {#1}
\int_compare:nNnTF {\seq_count:N \l_@@_seq} = 1 {
+ \stex_debug:nn{morphisms}{No~@}
\seq_pop_left:NN \l_@@_seq \l_@@_next_tl
}{
\seq_pop_left:NN \l_@@_seq \l_@@_name_str
+ \stex_debug:nn{morphisms}{Name:~\l_@@_name_str}
\exp_args:NNo \str_set:Nn \l_@@_name_str \l_@@_name_str
\tl_set:Nx \l_@@_next_tl {\seq_use:Nn \l_@@_seq @}
}
@@ -4449,7 +4476,7 @@
}{}
\stex_deactivate_macro:Nn \interpretmod {module~environments}
\stex_every_module:n {
- \stex_reactivate_macro:N \iterpretmod
+ \stex_reactivate_macro:N \interpretmod
}
\stex_sms_allow_escape:N\interpretmod
@@ -4553,12 +4580,14 @@
\tl_clear:N \l_stex_key_type_tl
\tl_clear:N \l_stex_key_def_tl
\tl_clear:N \l_stex_key_return_tl
+ \str_clear:N \l_stex_key_wikidata_str
\clist_clear:N \l_stex_key_argtypes_clist
}{
name .str_set:N = \l_stex_key_name_str ,
return .tl_set:N = \l_stex_key_return_tl ,
argtypes .clist_set:N = \l_stex_key_argtypes_clist ,
+ wikidata .str_set:N = \l_stex_key_wikidata_str ,
type .tl_set:N = \l_stex_key_type_tl ,
def .tl_set:N = \l_stex_key_def_tl ,
@@ -4640,6 +4669,9 @@
\str_if_empty:NF \l_stex_macroname_str {,
shtml:macroname={\l_stex_macroname_str}
}
+ \str_if_empty:NF \l_stex_key_wikidata_str {,
+ shtml:wikidata={\l_stex_key_wikidata_str}
+ }
\str_if_empty:NF \l_stex_key_assoc_str {,
shtml:assoctype={\l_stex_key_assoc_str}
}
@@ -5036,7 +5068,11 @@
intent .str_set:N = \l_stex_key_intent_str ,
argnames .clist_set:N = \l_stex_key_intent_args_clist ,
unknown .code:n = {
- \str_set_eq:NN \l_stex_key_variant_str \l_keys_key_str
+ \str_if_empty:NTF \l_keys_key_str {
+ \str_set:Nx \l_stex_key_variant_str {\l_keys_key_tl}
+ }{
+ \str_set_eq:NN \l_stex_key_variant_str \l_keys_key_str
+ }
}
}{style}
% \end{macrocode}
@@ -5368,10 +5404,21 @@
}
\cs_new_protected:Nn \_stex_notation_set_default:n{
- \stex_module_add_notation:eoeoo{#1}{}
- {\int_use:N \l_stex_get_symbol_arity_int}
- \l_stex_notation_macrocode_cs
- \l_stex_key_op_tl
+ \stex_if_in_module:TF{
+ \stex_module_add_notation:eoeoo{#1}{}
+ {\int_use:N \l_stex_get_symbol_arity_int}
+ \l_stex_notation_macrocode_cs
+ \l_stex_key_op_tl
+ }{
+ \cs_set_eq:cN {l_stex_notation_
+ \l_stex_get_symbol_mod_str?\l_stex_get_symbol_name_str
+ __cs}\l_stex_notation_macrocode_cs
+ \tl_if_empty:NF \l_stex_key_op_tl {
+ \cs_set_eq:cN{l_stex_notation_
+ \l_stex_get_symbol_mod_str?\l_stex_get_symbol_name_str
+ _op__cs}\l_stex_key_op_tl
+ }
+ }
}
% \end{macrocode}
% \end{macro}
@@ -7278,7 +7325,11 @@
}{
this .tl_set:N = \l_stex_current_this_tl ,
unknown .code:n = {
- \str_set_eq:NN \l_@@_name_str \l_keys_key_str
+ \str_if_empty:NTF \l_keys_key_str {
+ \str_set:Nx \l_@@_name_str {\l_keys_key_tl}
+ }{
+ \str_set_eq:NN \l_@@_name_str \l_keys_key_str
+ }
}
}{}
@@ -8304,7 +8355,7 @@
\NewDocumentCommand \premise {O{} m} {
\tl_if_empty:nF {#1} {
\stex_debug:nn{Here:}{Variable~#1}
- \exp_args:NNx\exp_args:Nnx\vardef{v#1}{#1}
+ \exp_args:Nne\use:nn{\vardef}{{v#1}[name=#1]{#1}}
}
\stex_annotate:nn{shtml:premise={#1}}{#2}
}
@@ -8684,7 +8735,7 @@
\stex_keys_set:nn{spfsteps}{##2}
\str_if_empty:NF \l_stex_key_name_str {
\stex_debug:nn{Here:}{Variable~\l_stex_key_name_str}
- \exp_args:NNx\exp_args:Nnx\vardef{v\l_stex_key_name_str}{\l_stex_key_name_str}
+ \exp_args:Nne\use:nn{\vardef}{{v\l_stex_key_name_str}[name=\l_stex_key_name_str]{\l_stex_key_name_str}}
}
\begin{spfstepenv}
@@ -8983,6 +9034,51 @@
% \end{macrocode}
% \end{macro}
%
+% VoLL-KI Annotations
+% \begin{macrocode}
+\newcommand\precondition[2]{
+ \str_clear:N \l_stex_get_symbol_name_str
+ \stex_get_symbol:n{#2}
+ \str_if_empty:NTF \l_stex_get_symbol_name_str{
+ \errmessage{Unknown~symbol~#2}
+ }{
+ \str_case:nnTF {#1}{
+ {remember}{}
+ {understand}{}
+ {analyze}{}
+ {evaluate}{}
+ {apply}{}
+ {create}{}
+ }{
+ \stex_annotate_invisible:nn{
+ shtml:preconditionsymbol={\l_stex_get_symbol_mod_str ? \l_stex_get_symbol_name_str},
+ shtml:preconditiondimension={#1}
+ }{}
+ }{\errmessage{Unknown~cognitive~dimension~#1}}
+ }
+}
+\newcommand\objective[2]{
+ \str_clear:N \l_stex_get_symbol_name_str
+ \stex_get_symbol:n{#2}
+ \str_if_empty:NTF \l_stex_get_symbol_name_str{
+ \errmessage{Unknown~symbol~#2}
+ }{
+ \str_case:nnTF {#1}{
+ {remember}{}
+ {understand}{}
+ {analyze}{}
+ {evaluate}{}
+ {apply}{}
+ {create}{}
+ }{
+ \stex_annotate_invisible:nn{
+ shtml:objectivesymbol={\l_stex_get_symbol_mod_str ? \l_stex_get_symbol_name_str},
+ shtml:objectivedimension={#1}
+ }{}
+ }{\errmessage{Unknown~cognitive~dimension~#1}}
+ }
+}
+% \end{macrocode}
%
% \begin{macrocode}
\seq_if_empty:NT \g_stex_current_file {
diff --git a/macros/latex/contrib/stex/source/tikzinput.dtx b/macros/latex/contrib/stex/source/tikzinput.dtx
index 988d483b12..da4615fbbe 100644
--- a/macros/latex/contrib/stex/source/tikzinput.dtx
+++ b/macros/latex/contrib/stex/source/tikzinput.dtx
@@ -42,7 +42,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{tikzinput}{2023/03/19}{3.3.0}{tikzinput package}
+\ProvidesExplPackage{tikzinput}{2023/10/13}{3.4.0}{tikzinput package}
\RequirePackage{l3keys2e}
\keys_define:nn { tikzinput } {
diff --git a/macros/latex/contrib/stex/tex/etc/hwexam-default.header b/macros/latex/contrib/stex/tex/etc/hwexam-default.header
index d36a97c718..fa70218e14 100644
--- a/macros/latex/contrib/stex/tex/etc/hwexam-default.header
+++ b/macros/latex/contrib/stex/tex/etc/hwexam-default.header
@@ -3,7 +3,7 @@ Matriculation Number:\hspace*{2cm}\strut\\[1ex]
\begin{center}
\Large\textbf{\@title}\\[1ex]
- \large\@date\\[3ex]
+ \large\@date\strut\\[3ex]
\end{center}
\textbf{You have {\hwexamminutes} (sharp) for the test};\\
@@ -22,11 +22,9 @@ You will only need {\hwexam@reqpts} points for a perfect score, i.e.
\vfill
\begin{center}
{
- \Large\em You have ample time, so take it slow and avoid rushing
- to mistakes!\\[2ex]
Different problems test different skills and knowledge, so do not
get stuck on one problem.
}\vfill
\correction@table\\[3ex]
-\end{center} \ No newline at end of file
+\end{center}
diff --git a/macros/latex/contrib/stex/tex/etc/lststex.sty b/macros/latex/contrib/stex/tex/etc/lststex.sty
index 423e0b4a20..7d127fddc5 100644
--- a/macros/latex/contrib/stex/tex/etc/lststex.sty
+++ b/macros/latex/contrib/stex/tex/etc/lststex.sty
@@ -15,6 +15,7 @@
symdef,symdecl,notation,sref},
morekeywords={smodule,sdefinition,sassertion,sparagraph,
inputref,
+ sproblem,hint,exnote,solution,gnote,
sproof,spfstep,spfcases,spfcase,justification,premise}}
\definecolor{backcolor}{gray}{.96}
@@ -71,8 +72,10 @@
classoffset=5,keywordstyle=\color{magenta},morekeywords={
smodule,sdefinition,sassertion,sparagraph,sexample,
sproof,subproof,spfcases,spfcase,spfstep,spfcomment,spfblock,
+ sproblem,subproblem,solution,hint,exnote,mcb,scb,
\\spfidea,\\spfsketch,\\spfcasesketch,\\sproofend,
\\spfjust,\\premise,\\justarg,\\inlinedef,\\inlineex,\\inlineass,
+ \\scc,\\mcc,\\objective,
\\varbind,
copymodule,interpretmodule,mathstructure,sexample,extstructure,
extstructure*,realization
@@ -125,11 +128,21 @@
}
},
unknown .code:n = {
- \tl_if_empty:nTF{#1}{
- \exp_args:NNo \clist_put_right:Nn \l_lststex_pass_on_args_clist \l_keys_key_str
+ \str_if_empty:NTF \l_keys_key_str {
+ \tl_if_empty:nTF{#1}{
+ \exp_args:NNo \clist_put_right:Nn \l_lststex_pass_on_args_clist \l_keys_key_tl
+ }{
+ \exp_args:NNx \clist_put_right:Nn \l_lststex_pass_on_args_clist {
+ \l_keys_key_tl = \exp_not:n{{#1}}
+ }
+ }
}{
- \exp_args:NNx \clist_put_right:Nn \l_lststex_pass_on_args_clist {
- \l_keys_key_str = \exp_not:n{{#1}}
+ \tl_if_empty:nTF{#1}{
+ \exp_args:NNo \clist_put_right:Nn \l_lststex_pass_on_args_clist \l_keys_key_str
+ }{
+ \exp_args:NNx \clist_put_right:Nn \l_lststex_pass_on_args_clist {
+ \l_keys_key_str = \exp_not:n{{#1}}
+ }
}
}
}
diff --git a/macros/latex/contrib/stex/tex/etc/stex-highlighting.sty b/macros/latex/contrib/stex/tex/etc/stex-highlighting.sty
index 0cd04872a1..ec0058d519 100644
--- a/macros/latex/contrib/stex/tex/etc/stex-highlighting.sty
+++ b/macros/latex/contrib/stex/tex/etc/stex-highlighting.sty
@@ -1,5 +1,16 @@
%\RequirePackage{xcolor}
\RequirePackage{pdfcomment}
+\RequirePackage{l3keys2e}
+\ExplSyntaxOn
+
+\keys_define:nn { stexhighlighting / pkg}{
+ boxes .default:n = {true},
+ boxes .bool_set:N = \c_stexhighlighting_boxes_bool,
+}
+
+\ProcessKeysOptions{ stexhighlighting / pkg}
+
+\ExplSyntaxOff
\def\compemph#1{%
\ifcsname textcolor\endcsname
@@ -28,20 +39,40 @@
}
\def\varemph#1{\ifcsname textcolor\endcsname\textcolor{gray}{#1}\else#1\fi}
-\protected\def\compemph@uri#1#2{%
- \pdftooltip{%
- \srefsymuri{#2}{\compemph{#1}}%
- }{%
- URI:~\detokenize{#2}%
- }%
+\ExplSyntaxOn
+
+\bool_if:NTF\c_stexhighlighting_boxes_bool{
+ \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\compemph@uri#1#2{
+ \pdftooltip{{\hypersetup{pdfborder={0~0~0}}
+ \srefsymuri{#2}{\compemph{#1}}
+ }}{
+ URI:~\detokenize{#2}
+ }
+ }
+ \protected\def\symrefemph@uri#1#2{
+ \pdftooltip{{\hypersetup{pdfborder={0~0~0}}
+ \srefsymuri{#2}{\symrefemph{#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}%
@@ -56,3 +87,5 @@
Variable~\detokenize{#2}%
}%
}
+
+\ExplSyntaxOff \ No newline at end of file
diff --git a/macros/latex/contrib/stex/tex/etc/stex-logo.sty b/macros/latex/contrib/stex/tex/etc/stex-logo.sty
index 1bcb487aba..cc4c6154ac 100644
--- a/macros/latex/contrib/stex/tex/etc/stex-logo.sty
+++ b/macros/latex/contrib/stex/tex/etc/stex-logo.sty
@@ -1,7 +1,7 @@
\RequirePackage{xspace}
\protected\def\stex{%
\@ifundefined{texorpdfstring}{\raisebox{-.5ex}S\kern-.5ex\TeX}{%
- \texorpdfstring{\raisebox{-.5ex}S\kern-.5ex\TeX}{sTeX}\xspace%
- }%
+ \texorpdfstring{\raisebox{-.5ex}S\kern-.5ex\TeX}{sTeX}%
+ }\xspace%
}
-\let\sTeX\stex \ No newline at end of file
+\let\sTeX\stex
diff --git a/macros/latex/contrib/stex/tex/etc/stex.cls.ltxml b/macros/latex/contrib/stex/tex/etc/stex.cls.ltxml
deleted file mode 100644
index 6915d0db92..0000000000
--- a/macros/latex/contrib/stex/tex/etc/stex.cls.ltxml
+++ /dev/null
@@ -1,10 +0,0 @@
-package LaTeXML::Package::Pool;
-use strict;
-use warnings;
-use LaTeXML::Package;
-
-RequirePackage('xparse');
-
-InputDefinitions('stex', type => 'cls', noltxml => 1);
-
-1; \ No newline at end of file
diff --git a/macros/latex/contrib/stex/tex/etc/stex.sty.ltxml b/macros/latex/contrib/stex/tex/etc/stex.sty.ltxml
deleted file mode 100644
index 44e30b44c5..0000000000
--- a/macros/latex/contrib/stex/tex/etc/stex.sty.ltxml
+++ /dev/null
@@ -1,23 +0,0 @@
-package LaTeXML::Package::Pool;
-use strict;
-use warnings;
-use LaTeXML::Package;
-
-RequirePackage('xparse');
-
-DefPrimitive('\csname stex_kpsewhich:Nn\endcsname Token {}',sub {
- my ($stomach, $target, $value) = @_;
- $value = ToString(Expand($value));
- my $out = ToString(`kpsewhich $value`);
- $out =~ s/^\s+//;
- $out =~ s/\s+$//;
- Note("Here: $value => $out");
- my @ret = Explode($out);
- DefMacroI($target, undef, Tokens(@ret));
-},locked=>1);
-
-\DefMacroI('\stex@backend',undef,Explode("latexml"));
-
-InputDefinitions('stex', type => 'sty', noltxml => 1);
-
-1; \ No newline at end of file
diff --git a/macros/latex/contrib/stex/tex/etc/stexthm.sty b/macros/latex/contrib/stex/tex/etc/stexthm.sty
index 4b89af5b39..7c37c2678a 100644
--- a/macros/latex/contrib/stex/tex/etc/stexthm.sty
+++ b/macros/latex/contrib/stex/tex/etc/stexthm.sty
@@ -1,4 +1,4 @@
-\ProvidesExplPackage{stexthm}{2023/03/19}{3.3.0}{Default Typesetting for sTeX Statements}
+\ProvidesExplPackage{stexthm}{2023/10/13}{3.4.0}{Default Typesetting for sTeX Statements}
\RequirePackage{stex}
\RequirePackage{amsthm}
diff --git a/macros/latex/contrib/stex/tex/ldf/problem-english.ldf b/macros/latex/contrib/stex/tex/ldf/problem-english.ldf
index bd202814e6..137b9cbe9e 100644
--- a/macros/latex/contrib/stex/tex/ldf/problem-english.ldf
+++ b/macros/latex/contrib/stex/tex/ldf/problem-english.ldf
@@ -3,7 +3,9 @@
\tl_set:Nn \problem@kw@hint{Hint}
\tl_set:Nn \problem@kw@note{Note}
\tl_set:Nn \problem@kw@grading{Grading}
-\tl_set:Nn \problem@kw@points{pt}
+\tl_set:Nn \problem@kw@pts{pt}
\tl_set:Nn \problem@kw@minutes{min}
\tl_set:Nn \problem@kw@correct{Correct}
-\tl_set:Nn \problem@kw@wrong{Wrong} \ No newline at end of file
+\tl_set:Nn \problem@kw@wrong{Wrong}
+\tl_set:Nn \problem@kw@feedback{Feedback}
+\tl_set:Nn \problem@kw@points{Points}
diff --git a/macros/latex/contrib/stex/tex/ldf/problem-finnish.ldf b/macros/latex/contrib/stex/tex/ldf/problem-finnish.ldf
index 11fc490c4a..63718739b0 100644
--- a/macros/latex/contrib/stex/tex/ldf/problem-finnish.ldf
+++ b/macros/latex/contrib/stex/tex/ldf/problem-finnish.ldf
@@ -12,7 +12,9 @@
\tl_set:Nn \problem@kw@hint{Hint}
\tl_set:Nn \problem@kw@note{Note}
\tl_set:Nn \problem@kw@grading{Grading}
-\tl_set:Nn \problem@kw@points{pt}
+\tl_set:Nn \problem@kw@pts{pt}
\tl_set:Nn \problem@kw@minutes{min}
\tl_set:Nn \problem@kw@correct{Correct}
\tl_set:Nn \problem@kw@wrong{Wrong}
+\tl_set:Nn \problem@kw@schema{Schema}
+\tl_set:Nn \problem@kw@points{Points}
diff --git a/macros/latex/contrib/stex/tex/ldf/problem-french.ldf b/macros/latex/contrib/stex/tex/ldf/problem-french.ldf
index bdcae874b2..53004d1f39 100644
--- a/macros/latex/contrib/stex/tex/ldf/problem-french.ldf
+++ b/macros/latex/contrib/stex/tex/ldf/problem-french.ldf
@@ -12,7 +12,9 @@
\tl_set:Nn \problem@kw@hint{Hint}
\tl_set:Nn \problem@kw@note{Note}
\tl_set:Nn \problem@kw@grading{Grading}
-\tl_set:Nn \problem@kw@points{pt}
+\tl_set:Nn \problem@kw@pts{pt}
\tl_set:Nn \problem@kw@minutes{min}
\tl_set:Nn \problem@kw@correct{Correct}
\tl_set:Nn \problem@kw@wrong{Wrong}
+\tl_set:Nn \problem@kw@schema{Schema}
+\tl_set:Nn \problem@kw@points{Points}
diff --git a/macros/latex/contrib/stex/tex/ldf/problem-ngerman.ldf b/macros/latex/contrib/stex/tex/ldf/problem-ngerman.ldf
index 0747555783..beea10724a 100644
--- a/macros/latex/contrib/stex/tex/ldf/problem-ngerman.ldf
+++ b/macros/latex/contrib/stex/tex/ldf/problem-ngerman.ldf
@@ -11,8 +11,9 @@
\tl_set:Nn \problem@kw@hint{Hinweis}
\tl_set:Nn \problem@kw@note{Bemerkung}
\tl_set:Nn \problem@kw@grading{Bewertung}
-\tl_set:Nn \problem@kw@points{Pkt}
+\tl_set:Nn \problem@kw@pts{Pkt}
\tl_set:Nn \problem@kw@minutes{Min}
\tl_set:Nn \problem@kw@correct{Korrekt}
\tl_set:Nn \problem@kw@wrong{Falsch}
-
+\tl_set:Nn \problem@kw@feedback{Rückmeldung}
+\tl_set:Nn \problem@kw@points{Punkte}
diff --git a/macros/latex/contrib/stex/tex/ldf/problem-russian.ldf b/macros/latex/contrib/stex/tex/ldf/problem-russian.ldf
index f0a08c7761..7aa362391c 100644
--- a/macros/latex/contrib/stex/tex/ldf/problem-russian.ldf
+++ b/macros/latex/contrib/stex/tex/ldf/problem-russian.ldf
@@ -11,7 +11,9 @@
\tl_set:Nn \problem@kw@hint{Подсказка}
\tl_set:Nn \problem@kw@note{Примечание}
\tl_set:Nn \problem@kw@grading{Grading}
-\tl_set:Nn \problem@kw@points{бл}
+\tl_set:Nn \problem@kw@pts{бл}
\tl_set:Nn \problem@kw@minutes{мин}
\tl_set:Nn \problem@kw@correct{Correct}
-\tl_set:Nn \problem@kw@wrong{Wrong} \ No newline at end of file
+\tl_set:Nn \problem@kw@wrong{Wrong}
+\tl_set:Nn \problem@kw@schema{Schema}
+\tl_set:Nn \problem@kw@points{Points}
diff --git a/macros/latex/contrib/stex/tex/ldf/stex-en.ldf b/macros/latex/contrib/stex/tex/ldf/stex-en.ldf
index 1501a92c82..04a11c6208 100644
--- a/macros/latex/contrib/stex/tex/ldf/stex-en.ldf
+++ b/macros/latex/contrib/stex/tex/ldf/stex-en.ldf
@@ -3,7 +3,7 @@
}
\msg_set:nnn{stex}{warning/nomathhub}{
MATHHUB~system~variable~not~found~and~no~
- \tl_to_str:n{\mathhub}-value~set!
+ \tl_to_str:n{\mathhub}-value~set!^^JUsing~HOME/MathHub.
}
\msg_set:nnn{stex}{error/deactivated-macro}{
The~\tl_to_str:n{#1}~command~is~only~allowed~in~#2!
@@ -129,6 +129,9 @@
\msg_set:nnn{stex}{error/nomorphism}{
No~morphism~#1~found~in~domain~of~morphism
}
+\msg_set:nnn{stex}{error/nestedproblem}{
+ Nested~problem;~sproblem~not~allowed~in~another~sproblem
+}
\str_set:Nn \spfsketchenvautorefname {Proof~sketch}
\str_set:Nn \sproofautorefname {Proof}
\str_set:Nn \spfstepautorefname {Proof~step} \ No newline at end of file