diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml')
-rw-r--r-- | Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml | 75 |
1 files changed, 75 insertions, 0 deletions
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; |