1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
|
\makeatletter
\ifcsname if@infulldoc\endcsname\else
\expandafter\newif\csname if@infulldoc\endcsname\@infulldocfalse
\fi
\makeatother
\csname if@infulldoc\endcsname\else
\def\bibfolder#1{../lib/bib/#1}
\input{stex-docheader}
\infulldoctrue
\begin{document}
\csname if@infulldoc\endcsname\else
\title{
The {\stex{3}} Manual
\thanks{Version {\fileversion} (last revised {\filedate})}
}
\author{Michael Kohlhase, Dennis Müller\\
FAU Erlangen-Nürnberg\\
\url{http://kwarc.info/}
}
\pagenumbering{roman}
\maketitle
\input{stex-abstract}\bigskip
This is the user manual for the \sTeX package and
associated software. It is primarily directed at end-users
who want to use \sTeX to author semantically
enriched documents. For the full documentation, see
\href{\basedocurl/stex-doc.pdf}{the \sTeX documentation}.
\makeatletter
\renewcommand\part{%
\clearpage
\thispagestyle{plain}%
\@tempswafalse
\null\vfil
\secdef\@part\@spart%
}
\newcounter{chapter}
\numberwithin{section}{chapter}
\renewcommand\thechapter{\@arabic\c@chapter}
\renewcommand\thesection{\thechapter.\@arabic\c@section}
\newcommand*\chaptermark[1]{}
\setcounter{secnumdepth}{2}
\newcommand\@chapapp{\chaptername}
%\newcommand\chaptername{Chapter}
\def\ps@headings{%
\let\@oddfoot\@empty
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
\let\@mkboth\markboth
\def\chaptermark##1{%
\markright{\MakeUppercase{%
\ifnum \c@secnumdepth >\m@ne
\@chapapp\ \thechapter. \ %
\fi
##1}}%
}%
}
\newcommand\chapter{\clearpage
\thispagestyle{plain}%
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter%
}
\def\@chapter[#1]#2{\refstepcounter{chapter}%
\typeout{\@chapapp\space\thechapter.}%
\addcontentsline{toc}{chapter}%
{\protect\numberline{\thechapter}#1}%
\chaptermark{#1}%
\addtocontents{lof}{\protect\addvspace{10\p@}}%
\addtocontents{lot}{\protect\addvspace{10\p@}}%
\@makechapterhead{#2}%
\@afterheading%
}
\def\@makechapterhead#1{%
\vspace*{50\p@}%
{\parindent \z@ \raggedright \normalfont
\huge\bfseries \@chapapp\space \thechapter
\par\nobreak
\vskip 20\p@
\interlinepenalty\@M
\Huge \bfseries #1\par\nobreak
\vskip 40\p@
}%
}
\newcommand*\l@chapter[2]{%
\ifnum \c@tocdepth >\m@ne
\addpenalty{-\@highpenalty}%
\vskip 1.0em \@plus\p@
\setlength\@tempdima{1.5em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode \bfseries
\advance\leftskip\@tempdima
\hskip -\leftskip
#1\nobreak\hfil
\nobreak\hb@xt@\@pnumwidth{\hss #2%
\kern-\p@\kern\p@}\par
\penalty\@highpenalty
\endgroup
\fi}
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.8em}}
\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
\renewcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}}
\def\partname{Part}
\def\toclevel@part{-1}
\def\maketitle{\chapter{\@title}}
\let\thanks\@gobble
\let\DelayPrintIndex\PrintIndex
\let\PrintIndex\@empty
\providecommand*{\hexnum}[1]{\text{\texttt{\char`\"}#1}}
\makeatother
\ExplSyntaxOn
\int_set:Nn \l_document_structure_section_level_int {1}
\ExplSyntaxOff
\clearpage
{%
\def\\{:}% fix "newlines" in the ToC
\tableofcontents
}
\clearpage
\pagenumbering{arabic}
\fi
\long\def\ignore#1{}
\begin{dangerbox}
Boxes like this one contain implementation details that are
mostly relevant for more advanced use cases, might be useful
to know when debugging, or might be good to know to better understand
how something works. They can easily be skipped on a first read.
\end{dangerbox}
\begin{mmtbox}
Boxes like this one explain how some \sTeX concept relates to the \mmt/\omdoc system,
philosophy or language; see \cite{uniformal:on,Kohlhase:OMDoc1.2} for introductions.
\end{mmtbox}
\begin{sfragment}{What is \sTeX?}
Formal systems for mathematics (such as interactive theorem provers)
have the potential to significantly increase both the accessibility
of published knowledge, as well as the confidence in its veracity,
by rendering the precise semantics of statements machine actionable.
This allows for a plurality of added-value services, from semantic
search up to verification and automated theorem proving.
Unfortunately, their usefulness is hidden behind severe barriers
to accessibility; primarily related to their surface languages
reminiscent of programming languages and very unlike informal
standards of presentation.
\sTeX minimizes this gap between informal and formal
mathematics by integrating formal methods into established
and widespread authoring workflows, primarily \LaTeX, via
non-intrusive semantic
annotations of arbitrary informal document fragments. That way
formal knowledge management services become available for informal
documents, accessible via an IDE for authors and via generated
\emph{active} documents for readers, while remaining fully compatible
with existing authoring workflows and publishing systems.
Additionally, an extensible library of reusable
document fragments is being developed, that serve as reference targets
for global disambiguation, intermediaries for content exchange
between systems and other services.
Every component of the system is designed modularly and extensibly,
and thus lay the groundwork for a potential full integration of
interactive theorem proving systems into established informal document
authoring workflows.
\paragraph{} The general \sTeX workflow combines functionalities
provided by several pieces of software:
\begin{itemize}
\item The \sTeX package collection to use semantic annotations in {\LaTeX} documents,
\item \RusTeX \cite{RusTeX:on} to convert |tex| sources to (semantically enriched) |xhtml|,
\item The \mmt system~\cite{uniformal:on}, that extracts semantic information from the
thus generated |xhtml| and provides semantically informed added value services.
Notably, \mmt integrates the \RusTeX system already.
\end{itemize}
\end{sfragment}
\begin{sfragment}{Quickstart}
\begin{sfragment}{Setup}
There are two ways of using \sTeX: as a
\begin{enumerate}
\item way of writing {\LaTeX} more modularly (object-oriented Math) for creating PDF
documents or
\item foundation for authoring active documents in HTML5 instrumented with knowledge
management services.
\end{enumerate}
Both are legitimate and useful. The first requires a significantly smaller
tool-chain, so we describe it first. The second requires a much more substantial
(and experimental) toolchain of knowledge management systems. Both workflows profit
from an integrated development environment (IDE), which (also) automates setup as
far as possible (see \sref{sec.sTeX-IDE}).
\begin{sfragment}[id=sec.minimal-setup]{Minimal Setup for the PDF-only Workflow}
In the best of all worlds, there is no setup, as you already have a new version of
{\TeX}Live on your system as a {\LaTeX} enthusiast. If not now is the time to
install it; see \cite{TeXLive:on}. You can usually update {\TeX}Live via a package
manager or the {\TeX}Live manager \textbf{tlmgr}.
Alternatively, you can install \sTeX from CTAN, the Comprehensive {\TeX} Archive
Network; see \cite{stexCTAN:on} for details.
\end{sfragment}
\begin{sfragment}[id=sec.git-setup]{GIT-based Setup for the \sTeX Development Version}
If you want use the latest and greatest \sTeX packages
that have not even been released to CTAN,
then you can directly clone them from the \sTeX development
repository \cite{sTeX:github:on} by the following command-line instructions:
\begin{lstlisting}[language=bash]
cd <stexdir>
git clone https://github.com/slatex/sTeX.git
\end{lstlisting}
and keep it updated by pulling updates via \lstinline|git pull| in the cloned \sTeX
directory.
Then update your \lstinline|TEXINPUTS| environment variable, e.g. by placing the following line in your \lstinline|.bashrc|:
\begin{lstlisting}[language=bash]
export TEXINPUTS="$(TEXINPUTS):<sTeXDIR>//:"
\end{lstlisting}
\end{sfragment}
\begin{sfragment}[id=sec.stex-archives]{\sTeX Archives (Manual Setup)}
Writing semantically annotated \sTeX becomes much easier, if we can use
well-designed libraries of already annotated content. \sTeX provides such
libraries as \sTeX archives -- i.e. GIT repositories at
\url{https://gl.mathhub.info} -- most prominently the SMGLoM libraries at
\url{https://gl.mathhub.info/smglom}.
To do so, we set up a \textbf{local MathHub} by creating a MathHub directory
\lstinline|<mhdir>|. Every \sTeX archive as an \textbf{archive path}
\lstinline|<apath>| and a name \lstinline|<archive>|. We can clone the \sTeX
archive by the following command-line instructions:
\begin{lstlisting}[language=bash]
cd <mhdir>/<apath>
git clone https://gl.mathhub.info/smglom/<archive>.git
\end{lstlisting}
Note that \sTeX archives often depend on other archives, thus you should be
prepared to clone these as well -- e.g. if \texttt{pdflatex} reports missing
files.
To make sure that \sTeX too knows where to find its archives, we need to set a global
system variable |MATHHUB|, that points to your local |MathHub|-directory (see
\sref{sec.stexarchives}).
\begin{lstlisting}[language=bash]
export MATHHUB="<mhdir>''
\end{lstlisting}
\end{sfragment}
\begin{sfragment}[id=sec.sTeX-IDE]{The \sTeX IDE}
We are currently working on an \sTeX IDE as an \sTeX plugin for |VScode|;
see~\cite{sTeX-IDE:on}. It will feature a setup procedure that automates the setup
described above (and below). For additional functionality see the (now obsolete)
plugin for \sTeX1 \cite{stexls:on,stexls-vscode-plugin:on}.
\end{sfragment}
\begin{sfragment}{Manual Setup for Active Documents and Knowledge Management Services}
Foregoing on the \sTeX IDE, we will need several additional (on top of the minimal
setup above) pieces of software; namely:
\begin{itemize}
\item \textbf{The \mmt System} available
\href{https://github.com/uniformal/MMT/tree/sTeX}{here}.
We recommend following
the setup routine documented
\href{https://uniformal.github.io//doc/setup/}{here}.
Following the setup routine (Step 3) will entail designating
a |MathHub|-directory on your local file system, where
the \mmt system will look for \sTeX/\mmt content archives.
\item \textbf{\sTeX Archives} If we only care about {\LaTeX} and generating
|pdf|s, we do not technically need \mmt at all; however, we still need the
|MATHHUB| system variable to be set. Furthermore, \mmt can make downloading
content archives we might want to use significantly easier, since it makes sure
that all dependencies of (often highly interrelated) \sTeX archives are cloned
as well.
Once set up, we can run |mmt| in a shell and download an archive along with all
of its dependencies like this: |lmh install <name-of-repository>|, or a whole
\emph{group} of archives; for example, |lmh install smglom| will download all
smglom archives.
\item \textbf{\RusTeX} The \mmt system will also set up \RusTeX for you, which is
used to generate (semantically annotated) |xhtml| from tex sources. In lieu of
using \mmt, you can also download and use \RusTeX directly
\href{https://github.com/slatex/RusTeX}{here}.
\end{itemize}
\end{sfragment}
\end{sfragment}
\input{stex-tutorial}
\end{sfragment}
\begin{sfragment}{Creating \sTeX Content}
\input{packages/stex-basics}
\begin{sfragment}{How Knowledge is Organized in \sTeX}
\sTeX content is organized on multiple levels:
\begin{enumerate}
\item \sTeX \textbf{archives} (see \sref{sec.stexarchives})
contain individual |.tex|-files.
\item These may contain \sTeX \textbf{modules}, introduced via
\stexcode"\begin{smodule}{ModuleName}".\iffalse\end{smodule}\fi
\item Modules contain \sTeX \textbf{symbol declarations}, introduced via
\stexcode"\symdecl{symbolname}", \stexcode"\symdef{symbolname}" and some other
constructions. Most symbols have a \emph{notation} that can
be used via a \emph{semantic macro} \stexcode"\symbolname" generated
by symbol declarations.
\item \sTeX \textbf{expressions} finally are built up from
usages of semantic macros.
\end{enumerate}
\begin{mmtbox}
\begin{itemize}
\item \sTeX archives are simultaneously \mmt archives, and the same directory
structure is consequently used.
\item \sTeX modules correspond to \omdoc/\mmt \emph{theories}.
\stexcode"\importmodule"s (and similar constructions) induce \mmt |include|s and
other \emph{theory morphisms}, thus giving rise to a \emph{theory graph} in the
\omdoc sense~\cite{RabKoh:WSMSML13}.
\item Symbol declarations induce \omdoc/\mmt \emph{constants}, with optional
(formal) \emph{type} and \emph{definiens} components.
\item Finally, \sTeX expressions are converted to \omdoc/\mmt terms, which use the
abstract syntax (and XML encoding) of \openmath \cite{BusCapCar:2oms04}.
\end{itemize}
\end{mmtbox}
\end{sfragment}
\begin{sfragment}[id=sec.stexarchives]{\sTeX Archives}
\input{packages/stex-mathhub}
\end{sfragment}
\begin{sfragment}[id=sec.decls]{Module, Symbol and Notation Declarations}
\input{packages/stex-modules}
\input{packages/stex-symbols}
\end{sfragment}
\begin{sfragment}{Module Inheritance and Structures}
The \sTeX features for modular document management are inherited from the OMDoc/MMT
model that organizes knowledge into a graph, where the nodes are theories (called
modules in \sTeX) and the edges are truth-preserving mappings (called theory
morphismes in MMT). We have already seen modules/theories above.
Before we get into theory morphisms in \sTeX we will see a very simple application of
modules: managing multilinguality modularly.
\begin{sfragment}{Multilinguality and Translations}
If we load the \sTeX document class or package with the option |lang=<lang>|, \sTeX
will load the appropriate \pkg{babel} language for you -- e.g. |lang=de| will load
the babel language |ngerman|. Additionally, it makes \sTeX aware of the current
document being set in (in this example) \emph{german}. This matters for reasons
other than mere \pkg{babel}-purposes, though:
Every \emph{module} is assigned a language. If no \sTeX
package option is set that allows for inferring a language,
\sTeX will check whether the current file name ends in
e.g. |.en.tex| (or |.de.tex| or |.fr.tex|, or...) and
set the language accordingly. Alternatively, a language
can be explicitly assigned via
\stexcode"\begin{smodule}[lang=<language>]{Foo}".
\iffalse\end{smodule}\fi
\begin{mmtbox}
Technically, each |smodule|-environment induces \emph{two}
\omdoc/\mmt theories:
\stexcode"\begin{smodule}[lang=<lang>]{Foo}"
\iffalse\end{smodule}\fi
generates a theory |some/namespace?Foo| that only contains
the ``formal'' part of the module -- i.e. exactly the
content that is exported when using \stexcode"\importmodule".
Additionally, \mmt generates a \emph{language theory}
|some/namespace/Foo?<lang>| that includes |some/namespace?Foo|
and contains all the other document content -- variable
declarations, includes for each \stexcode"\usemodule", etc.
\end{mmtbox}
Notably, the language suffix in a filename is ignored
for \stexcode"\usemodule", \stexcode"\importmodule"
and in generating/computing URIs for modules. This however
allows for providing \emph{translations} for modules
between languages without needing to duplicate content:
If a module |Foo| exists in e.g. english in a file |Foo.en.tex|,
we can provide a file |Foo.de.tex| right next to it, and write
\stexcode"\begin{smodule}[sig=en]{Foo}".
\iffalse\end{smodule}\fi
The |sig|-key then signifies, that the ``signature'' of the
module is contained in the \emph{english} version of the module,
which is immediately imported from there, just like
\stexcode"\importmodule" would.
Additionally to translating the informal content of a module
file to different languages, it also allows for customizing
notations between languages. For example,
the \emph{least common multiple} of two numbers is often
denoted as $\mathtt{lcm}(a,b)$ in english, but is
called \emph{kleinstes gemeinsames Vielfaches} in german
and consequently denoted as $\mathtt{kgV}(a,b)$ there.
We can therefore imagine a german version of an lcm-module
looking something like this:
\begin{latexcode}[gobble=8]
\begin{smodule}[sig=en]{lcm}
\notation*{lcm}[de]{\comp{\mathtt{kgV}}(#1,#2)}
Das \symref{lcm}{kleinste gemeinsame Vielfache}
$\lcm{a,b}$ von zwei Zahlen $a,b$ ist...
\end{smodule}
\end{latexcode}
If we now do \stexcode"\importmodule{lcm}"
(or \stexcode"\usemodule{lcm}") within a \emph{german} document,
it will also load the content of the german translation,
including the |de|-notation for \stexcode"\lcm".
\end{sfragment}
\input{packages/stex-inheritance}
\input{packages/stex-features}
\end{sfragment}
\begin{sfragment}{Primitive Symbols (The \sTeX Metatheory)}
\input{packages/stex-metatheory}
\end{sfragment}
\end{sfragment}
\begin{sfragment}[id=sec.textsymbols]{Using \sTeX Symbols}
\input{packages/stex-terms}
\input{packages/stex-references}
\end{sfragment}
\begin{sfragment}{\sTeX Statements}
\input{packages/stex-statements}
\input{packages/stex-proofs}
\end{sfragment}
\begin{sfragment}[id=sec.customhighlight]{Highlighting and Presentation Customizations}
The environments starting with |s| (i.e. \stexcode"smodule", \stexcode"sassertion",
\stexcode"sexample", \stexcode"sdefinition", \stexcode"sparagraph" and
\stexcode"sproof") by default produce no additional output whatsoever (except for the
environment content of course). Instead, the document that uses them (whether directly
or e.g. via \stexcode"\inputref") can decide how these environments are supposed to look
like.
The \pkg{stexthm} package defines some default customizations that can be used, but of
course many existing \LaTeX\xspace templates come with their own |definition|, |theorem|
and similar environments that authors are supposed (or even required) to use. Their
concrete syntax however is usually not compatible with all the additional arguments that
\sTeX allows for semantic information.
Therefore we introduced the separate environments \stexcode"sdefinition" etc. instead of
using \stexcode"definition" directly. We allow authors to specify how these environments
should be styled via the commands \stexcode"stexpatch*".
\begin{function}{\stexpatchmodule,\stexpatchdefinition,
\stexpatchassertion,\stexpatchexample,\stexpatchparagraph,
\stexpatchproof}
All of these commands take one optional and two proper arguments, i.e.\\
\stexcode"\stexpatch*[<type>]{<begin-code>}{<end-code>}".
After \stex reads and processes the optional arguments for these environments, (some
of) their values are stored in the macros \stexcode"\s*<field>"
(i.e. \stexcode"sexampleid", \stexcode"\sassertionname", etc.). It then checks for all
the values |<type>| in the |type=|-list, whether an \stexcode"\stexpatch*[<type>]" for
the current environment has been called. If it finds one, it uses the patches
|<begin-code>| and |<end-code>| to mark up the current environment. If no patch for
(any of) the type(s) is found, it checks whether and \stexcode"\stexpatch*" was called
without optional argument.
\end{function}
For example, if we want to use a predefined |theorem| environment for
\stexcode"sassertion"s with |type=theorem|, we can do
\begin{latexcode}
\stexpatchassertion[theorem]{\begin{theorem}}{\end{theorem}}
\end{latexcode}
...or, rather, since e.g. |theorem|-like environments defined using \pkg{amsthm} take an
optional title as argument, we can do:
\begin{latexcode}
\stexpatchassertion[theorem]
{\ifx\sassertiontitle\@empty
\begin{theorem}
\else
\begin{theorem}[\sassertiontitle]
\fi}
{\end{theorem}}
\end{latexcode}
Or, if we want \emph{all kinds of} \stexcode"sdefinition"s to use a predefined
|definition|-environment irrespective of their |type=|, then we can issue the following
customization patch:
\begin{latexcode}
\stexpatchdefinition
{\ifx\sdefinitiontitle\@empty
\begin{definition}
\else
\begin{definition}[\sdefinitiontitle]
\fi}
{\end{definition}}
\end{latexcode}
\begin{function}{\compemph,\varemph,\symrefemph,\defemph}
Apart from the environments, we can control how \sTeX highlights variables, notation
components, \stexcode"\symref"s and \stexcode"\definiendum"s, respectively.
To do so, we simply redefine these four macros. For example, to highlight notation
components (i.e. everything in a \stexcode"\comp") in blue, as in this document, we
can do \stexcode"\def\compemph#1{\textcolor{blue}{#1}}". By default, |\compemph| et
al do nothing.
\end{function}
\begin{function}{\compemph@uri,\varemph@uri,\symrefemph@uri,\defemph@uri}
For each of the four macros, there exists an additional macro that takes the full URI
of the relevant symbol currently being highlighted as a second argument. That allows
us to e.g. use pdf tooltips and links. For example, this document uses\Ednote{MK: why
|protected|, ... if we show that, then we should explain.}
\begin{latexcode}
\protected\def\symrefemph@uri#1#2{
\pdftooltip{
\srefsymuri{#2}{\symrefemph{#1}}
}{
URI:~\detokenize{#2}
}
}
\end{latexcode}
By default, |\compemph@uri| is simply defined as |\compemph{#1}| (analogously for the
other three commands).
\end{function}
\end{sfragment}
\begin{sfragment}{Additional Packages}
\begin{sfragment}{Tikzinput: Treating TIKZ code as images}
\input{packages/stex-tikzinput}
\end{sfragment}
\begin{sfragment}{Modular Document Structuring}
\input{packages/stex-document-structure}
\end{sfragment}
\begin{sfragment}{Slides and Course Notes}
\input{packages/stex-slides}
\end{sfragment}
\begin{sfragment}{Representing Problems and Solutions}
\input{packages/stex-problem}
\end{sfragment}
\begin{sfragment}{Homeworks, Quizzes and Exams}
\input{packages/stex-hwexam}
\end{sfragment}
\end{sfragment}
\csname if@infulldoc\endcsname\else
\newpage
\printbibliography
\end{document}
\fi
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
% LocalWords: stex-docheader infulldoctrue l@subsubsection toclevel@part ExplSyntaxOff
% LocalWords: l_document_structure_section_level_int dangerbox mmtbox omdoc OBJref lmh
% LocalWords: own:fifom MueRabRot:rslffml20 sec.stexarchives stex-mathhub ngerman a,b
% LocalWords: Metatheory sec.customhighlight sproof stexthm xspace stexpatchmodule
% LocalWords: stexpatchexample stexpatchparagraph sexampleid amsthm sassertiontitle
% LocalWords: sdefinitiontitle compemph varemph srefsymuri stex-hwexam TeXLive:on tlmgr
% LocalWords: stexls:on,stexls-vscode-plugin:on
|