summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/stex/problem
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-03-30 23:23:02 +0000
committerKarl Berry <karl@freefriends.org>2012-03-30 23:23:02 +0000
commit849996eca72af498b48b10fbea7f14c4b9d21b8f (patch)
tree2d40d42dfc9fc0b0622212cc220868f98345305f /Master/texmf-dist/tex/latex/stex/problem
parentd82e1c23973fd0271f93686f487bd1cee8dcd947 (diff)
restore stex (ca. 28jan12)
git-svn-id: svn://tug.org/texlive/trunk@25792 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/stex/problem')
-rw-r--r--Master/texmf-dist/tex/latex/stex/problem/problem.sty117
-rw-r--r--Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml75
2 files changed, 192 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/stex/problem/problem.sty b/Master/texmf-dist/tex/latex/stex/problem/problem.sty
new file mode 100644
index 00000000000..220ad52bb29
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/problem/problem.sty
@@ -0,0 +1,117 @@
+%%
+%% This is file `problem.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% problem.dtx (with options: `package')
+%%
+\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+\ProvidesPackage{problem}[2012/01/28 v0.9c Semantic Markup for Problems]
+\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}}
+\newif\ifexnotes\exnotesfalse\DeclareOption{notes}{\exnotestrue}
+\newif\ifhints\hintsfalse\DeclareOption{hints}{\hintstrue}
+\newif\ifsolutions\solutionsfalse\DeclareOption{solutions}{\solutionstrue}
+\newif\ifpts\ptsfalse\DeclareOption{pts}{\ptstrue}
+\newif\ifmin\minfalse\DeclareOption{min}{\mintrue}
+\newif\ifboxed\boxedfalse\DeclareOption{boxed}{\boxedtrue}
+\newif\ifextract\extractfalse\DeclareOption{extract}{\extracttrue}
+\ProcessOptions
+\RequirePackage{keyval}[1997/11/10]
+\RequirePackage{xcomment}
+\RequirePackage{sref}
+\srefaddidkey[prefix=prob.]{problem}
+\addmetakey{problem}{pts}
+\addmetakey{problem}{min}
+\addmetakey*{problem}{title}
+\addmetakey{problem}{refnum}
+\newsavebox{\probbox}
+\newcounter{problem}[section]
+\def\prob@number{\ifx\inclprob@refnum\@empty
+\ifx\problem@refnum\@empty\thesection.\theproblem\else\problem@refnum\fi
+\inclprob@refnum\fi}
+\def\prob@heading{Problem \prob@number%
+\ifx\sref@id\@empty\else{\sref@label@id{Problem \thesection.\theproblem}}\fi%
+\ifx\inclprob@title\@empty% if there is no outside title
+\ifx\problem@title\@empty{:\quad}\else{\quad(\problem@title)\hfill\\}\fi
+\else\quad(\inclprob@title)\hfill\\\fi}% else show the outside title
+\ifboxed
+\newenvironment{problem}[1][]{\metasetkeys{problem}{#1}\sref@target%
+\stepcounter{problem}\show@pts\show@min\record@problem%
+\begin{lrbox}{\probbox}\begin{minipage}{.9\textwidth}\ignorespaces}
+{\end{minipage}\end{lrbox}
+\setbox0=\hbox{\begin{minipage}{.9\textwidth}%
+\noindent\textbf\prob@heading\rm%
+\end{minipage}}
+\smallskip\noindent\fbox{\vbox{\box0\vspace*{.2em}\usebox\probbox}}\smallskip}
+\else
+\newenvironment{problem}[1][]{\metasetkeys{problem}{#1}\sref@target%
+\stepcounter{problem}\show@pts\show@min\record@problem%
+\par\noindent\textbf\prob@heading\rm\ignorespaces}
+{\smallskip}
+\fi%boxed
+\def\record@problem{\protected@write\@auxout{}%
+{\string\@problem{\prob@number}%
+{\ifx\inclprob@pts\@empty\problem@pts\else\inclprob@pts\fi}%
+{\ifx\inclprob@min\@empty\problem@min\else\inclprob@min\fi}}}
+\def\@problem#1#2#3{}
+\define@key{soln}{id}{\def\soln@id{#1}}
+\define@key{soln}{for}{\def\soln@for{#1}}
+\define@key{soln}{height}{\def\soln@height{#1}}
+\ifsolutions
+\newenvironment{solution}[1][]%
+{\hrule\smallskip{\bf Solution: }\begin{small}}%
+{\hrule\end{small}}
+\else\newxcomment[]{solution}\fi
+\ifexnotes
+\newenvironment{exnote}[1][]%
+{\par\noindent\hrule\smallskip{\bf Note: }\small}
+{\smallskip\hrule}
+\else%ifexnotes
+\newxcomment[]{exnote}
+\fi%ifexnotes
+\ifhints
+\newenvironment{hint}[1][]%
+{\par\noindent\hrule\smallskip{\bf Hint: }\small}
+{\smallskip\hrule}
+\else%ifhints
+\newxcomment[]{hint}
+\fi%ifhints
+\ifextract
+\newwrite\problem@file
+\immediate\openout\problem@file=\jobname-problems.tex
+\AtEndDocument{\closeout\problem@file}
+\fi
+\addmetakey{inclprob}{pts}
+\addmetakey{inclprob}{min}
+\addmetakey*{inclprob}{title}
+\addmetakey{inclprob}{refnum}
+\clear@inclprob@keys
+\newcommand{\includeproblem}[2][]{%
+\bgroup\metasetkeys{inclprob}{#1}\input{#2}\ifsolutions\newpage\fi\egroup
+\ifextract\def\@test{#1}
+\def\prob@num{\ifx\inclprob@refnum\@empty\thesection.\theproblem\else\inclprob@refnum\fi}
+\def\inclprob@keys{#1\ifx\@test\@empty\else,\fi refnum=\prob@num}
+\protected@write\problem@file{}{\string\includeproblem[\inclprob@keys]{#2}}
+\fi}
+\def\pts#1{\ifpts\marginpar{#1 pt}\fi}
+\def\min#1{\ifmin\marginpar{#1 min}\fi}
+\AtEndDocument{\ifpts\message{Total: \arabic{pts} points}\fi
+\ifmin\message{Total: \arabic{min} minutes}\fi}
+\newcounter{pts}
+\def\show@pts{\ifx\inclprob@pts\@empty%
+\ifx\problem@pts\@empty\else%
+\ifpts\marginpar{\problem@pts pt\smallskip}\addtocounter{pts}{\problem@pts}\fi%
+\fi\else%
+\ifpts\marginpar{\inclprob@pts pt\smallskip}\addtocounter{pts}{\inclprob@pts}\fi%
+\fi}
+\newcounter{min}
+\def\show@min{\ifx\inclprob@min\@empty%
+\ifx\problem@min\@empty\else%
+\ifmin\marginpar{\problem@min min}\addtocounter{min}{\problem@min}\fi%
+\fi\else%
+\ifmin\marginpar{\inclprob@min min}\addtocounter{min}{\inclprob@min}\fi
+\fi}
+\endinput
+%%
+%% End of file `problem.sty'.
diff --git a/Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml b/Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml
new file mode 100644
index 00000000000..85fb12e7bbe
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml
@@ -0,0 +1,75 @@
+RawTeX('
+\newif\ifexnotes\exnotesfalse
+\newif\ifhints\hintsfalse
+\newif\ifsolutions\solutionsfalse
+\newif\ifpts\ptsfalse
+\newif\ifmin\minfalse
+\newif\ifboxed\boxedfalse
+\newif\ifextract\extractfalse
+');
+# -*- CPERL -*-
+package LaTeXML::Package::Pool;
+use strict;
+use LaTeXML::Package;
+RequirePackage('sref');
+RegisterNamespace('prob'=>"http://omdoc.org/ontology/problems#");
+RegisterDocumentNamespace('prob'=>"http://omdoc.org/ontology/problems#");
+DefEnvironment('{problem} OptionalKeyVals:problem',
+ "<omdoc:exercise ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>"
+ . "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
+ . "?&KeyVal(#1,'min')("
+ . "<omdoc:meta property='prob:solvedinminutes' prob:dummy='for the namespace'>"
+ . "&KeyVal(#1,'min')"
+ . "</omdoc:meta>)()"
+ . "?&KeyVal(#1,'pts')("
+ . "<omdoc:meta property='prob:points' prob:dummy='for the namespace'>"
+ . "&KeyVal(#1,'pts')"
+ . "</omdoc:meta>)()"
+ . "<omdoc:CMP><omdoc:p>#body"
+ ."</omdoc:exercise>",
+ afterDigest => sub {
+ my ($stomach,$kv)=@_;
+ my $kvi = LookupValue('inclprob');
+ my @keys = qw(id title min pts);
+ my @vals = $kvi && map($kvi->getValue($_), @keys);
+ foreach my $i(0..$#vals) {
+ $kv->setValue($keys[$i],$vals[$i]) if $vals[$i];
+ }
+ return;});#$
+DefKeyVal('soln','id','Semiverbatim');
+DefKeyVal('soln','height','Semiverbatim');
+DefKeyVal('soln','for','Semiverbatim');
+DefEnvironment('{solution} OptionalKeyVals:soln',
+ "<omdoc:solution ?&KeyVals(#1,'for')(for='&KeyVal(#1,'for')')()>"
+ . "#body"
+ . "</omdoc:solution>");
+DefEnvironment('{exnote}',"<omdoc:hint><omdoc:CMP><omdoc:p>#body</omdoc:hint>");
+DefEnvironment('{hint}',"<omdoc:hint><omdoc:CMP><omdoc:p>#body</omdoc:hint>");
+DefConstructor('\pts{}',"");
+DefConstructor('\min{}',"");
+DefKeyVal('prob','pts','Semiverbatim');
+DefKeyVal('prob','min','Semiverbatim');
+DefKeyVal('prob','title','Semiverbatim');
+DefConstructor('\includeproblem OptionalKeyVals:prob Semiverbatim',
+ "<omdoc:ref type='cite' xref='#2'>"
+ . "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
+ . "?&KeyVal(#1,'min')("
+ . "<omdoc:meta property='prob:solvedinminutes' prob:dummy='for the namespace'>"
+ . "&KeyVal(#1,'min')"
+ . "</omdoc:meta>)()"
+ . "?&KeyVal(#1,'pts')("
+ . "<omdoc:meta property='prob:points' prob:dummy='for the namespace'>"
+ . "&KeyVal(#1,'pts')"
+ . "</omdoc:meta>)()"
+ ."</omdoc:ref>",
+ afterDigest => sub{
+ my ($stomach,$kv) = @_;
+ AssignValue('inclprob',$kv) if $kv;
+ });
+Tag('omdoc:exercise',afterOpen=>\&numberIt);
+Tag('omdoc:solution',afterOpen=>\&numberIt);
+Tag('omdoc:hint',afterOpen=>\&numberIt);
+Tag('omdoc:exercise',afterOpen=>\&numberIt,afterClose=>\&locateIt);
+Tag('omdoc:solution',afterOpen=>\&numberIt,afterClose=>\&locateIt);
+Tag('omdoc:hint',afterOpen=>\&numberIt,afterClose=>\&locateIt);
+1;