From 66a28e0c48dbe5e98f85c13320d4c1aa27deed16 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 9 Jan 2012 22:43:47 +0000 Subject: rm stex, cannot get right: bin programs, xml, etc. git-svn-id: svn://tug.org/texlive/trunk@25063 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/stex/README | 12 - Master/texmf-dist/doc/latex/stex/cmathml/README | 13 - .../texmf-dist/doc/latex/stex/cmathml/cmathml.pdf | Bin 449387 -> 0 bytes Master/texmf-dist/doc/latex/stex/cnx/README | 13 - Master/texmf-dist/doc/latex/stex/cnx/cnx.pdf | Bin 342228 -> 0 bytes Master/texmf-dist/doc/latex/stex/dcm/README | 12 - Master/texmf-dist/doc/latex/stex/dcm/dcm.pdf | Bin 302878 -> 0 bytes Master/texmf-dist/doc/latex/stex/example/Makefile | 4 - Master/texmf-dist/doc/latex/stex/example/README | 18 - .../doc/latex/stex/example/background/Makefile | 8 - .../doc/latex/stex/example/background/all.omdoc | 155 -- .../doc/latex/stex/example/background/all.tex | 12 - .../latex/stex/example/background/functions.omdoc | 83 - .../latex/stex/example/background/functions.sms | 5 - .../latex/stex/example/background/functions.tex | 15 - .../doc/latex/stex/example/background/post.tex | 1 - .../doc/latex/stex/example/background/pre.tex | 6 - .../doc/latex/stex/example/background/reals.omdoc | 72 - .../doc/latex/stex/example/background/reals.sms | 5 - .../doc/latex/stex/example/background/reals.tex | 20 - .../doc/latex/stex/example/paper/Makefile | 7 - .../doc/latex/stex/example/paper/continuous.omdoc | 51 - .../doc/latex/stex/example/paper/continuous.sms | 6 - .../doc/latex/stex/example/paper/continuous.tex | 17 - .../latex/stex/example/paper/differentiable.omdoc | 51 - .../latex/stex/example/paper/differentiable.sms | 5 - .../latex/stex/example/paper/differentiable.tex | 16 - .../doc/latex/stex/example/paper/paper.omdoc | 311 --- .../doc/latex/stex/example/paper/paper.pdf | Bin 190417 -> 0 bytes .../doc/latex/stex/example/paper/paper.tex | 132 - .../doc/latex/stex/example/test/Makefile | 7 - Master/texmf-dist/doc/latex/stex/hwexam/README | 12 - Master/texmf-dist/doc/latex/stex/hwexam/hwexam.pdf | Bin 323506 -> 0 bytes Master/texmf-dist/doc/latex/stex/metakeys/README | 11 - .../doc/latex/stex/metakeys/metakeys.pdf | Bin 281364 -> 0 bytes Master/texmf-dist/doc/latex/stex/mikoslides/README | 11 - .../doc/latex/stex/mikoslides/mikoslides.pdf | Bin 293762 -> 0 bytes Master/texmf-dist/doc/latex/stex/modules/README | 21 - .../texmf-dist/doc/latex/stex/modules/modules.pdf | Bin 462421 -> 0 bytes Master/texmf-dist/doc/latex/stex/omdoc/README | 12 - Master/texmf-dist/doc/latex/stex/omdoc/omdoc.pdf | Bin 331026 -> 0 bytes Master/texmf-dist/doc/latex/stex/omtext/README | 12 - Master/texmf-dist/doc/latex/stex/omtext/omtext.pdf | Bin 334344 -> 0 bytes .../texmf-dist/doc/latex/stex/presentation/README | 16 - .../doc/latex/stex/presentation/presentation.pdf | Bin 404933 -> 0 bytes Master/texmf-dist/doc/latex/stex/problem/README | 10 - .../texmf-dist/doc/latex/stex/problem/problem.pdf | Bin 278705 -> 0 bytes Master/texmf-dist/doc/latex/stex/reqdoc/README | 12 - Master/texmf-dist/doc/latex/stex/reqdoc/reqdoc.pdf | Bin 287638 -> 0 bytes .../doc/latex/stex/reqdoc/requirements.pdf | Bin 113323 -> 0 bytes .../doc/latex/stex/reqdoc/requirements.tex | 126 - Master/texmf-dist/doc/latex/stex/sproof/README | 11 - Master/texmf-dist/doc/latex/stex/sproof/sproof.pdf | Bin 350369 -> 0 bytes Master/texmf-dist/doc/latex/stex/sref/README | 10 - Master/texmf-dist/doc/latex/stex/sref/book.pdf | Bin 89718 -> 0 bytes Master/texmf-dist/doc/latex/stex/sref/book.tex | 18 - Master/texmf-dist/doc/latex/stex/sref/idc.pdf | Bin 61341 -> 0 bytes Master/texmf-dist/doc/latex/stex/sref/idc.tex | 21 - Master/texmf-dist/doc/latex/stex/sref/scr.pdf | Bin 72075 -> 0 bytes Master/texmf-dist/doc/latex/stex/sref/scr.tex | 20 - Master/texmf-dist/doc/latex/stex/sref/sref.pdf | Bin 326248 -> 0 bytes Master/texmf-dist/doc/latex/stex/statements/README | 10 - .../doc/latex/stex/statements/statements.pdf | Bin 397686 -> 0 bytes Master/texmf-dist/doc/latex/stex/stex.pdf | Bin 350237 -> 0 bytes Master/texmf-dist/source/latex/stex/bin/Makefile | 5 - .../texmf-dist/source/latex/stex/bin/Modparse.pm | 189 -- Master/texmf-dist/source/latex/stex/bin/README | 151 -- Master/texmf-dist/source/latex/stex/bin/TexId.pm | 464 ---- Master/texmf-dist/source/latex/stex/bin/allgen | 30 - Master/texmf-dist/source/latex/stex/bin/bms | 340 --- Master/texmf-dist/source/latex/stex/bin/checksum | 71 - .../texmf-dist/source/latex/stex/bin/convert-paths | 56 - Master/texmf-dist/source/latex/stex/bin/filedate | 42 - .../source/latex/stex/bin/gen-symdef-table.pl | 85 - Master/texmf-dist/source/latex/stex/bin/grep-rerun | 59 - Master/texmf-dist/source/latex/stex/bin/idcheck | 29 - Master/texmf-dist/source/latex/stex/bin/msplit | 140 - .../texmf-dist/source/latex/stex/bin/old/Makefile | 28 - .../texmf-dist/source/latex/stex/bin/old/defcon.l | 91 - .../texmf-dist/source/latex/stex/bin/old/idcheck.l | 130 - .../texmf-dist/source/latex/stex/bin/old/modstr.l | 137 - Master/texmf-dist/source/latex/stex/bin/old/symdef | 46 - Master/texmf-dist/source/latex/stex/bin/rf | 63 - .../source/latex/stex/bin/rng2dot/ModelRNC.pm | 770 ------ .../source/latex/stex/bin/rng2dot/rng2dot | 37 - Master/texmf-dist/source/latex/stex/bin/sgraph | 173 -- Master/texmf-dist/source/latex/stex/bin/sms | 138 - Master/texmf-dist/source/latex/stex/bin/stexml | 2 - Master/texmf-dist/source/latex/stex/bin/stexmlmod | 2 - Master/texmf-dist/source/latex/stex/bin/termin | 279 -- .../source/latex/stex/cmathml/cmathml.dtx | 2503 ------------------ Master/texmf-dist/source/latex/stex/cnx/cnx.dtx | 1209 --------- Master/texmf-dist/source/latex/stex/dcm/dcm.dtx | 1067 -------- .../texmf-dist/source/latex/stex/hwexam/hwexam.dtx | 566 ---- .../source/latex/stex/metakeys/metakeys.dtx | 372 --- .../source/latex/stex/mikoslides/mikoslides.dtx | 554 ---- .../source/latex/stex/modules/modules.dtx | 1899 -------------- .../texmf-dist/source/latex/stex/omdoc/omdoc.dtx | 751 ------ .../texmf-dist/source/latex/stex/omtext/omtext.dtx | 850 ------ .../latex/stex/presentation/presentation.dtx | 1487 ----------- .../source/latex/stex/problem/problem.dtx | 578 ----- .../texmf-dist/source/latex/stex/reqdoc/reqdoc.dtx | 387 --- .../texmf-dist/source/latex/stex/sproof/sproof.dtx | 783 ------ Master/texmf-dist/source/latex/stex/sref/sref.dtx | 725 ------ .../source/latex/stex/statements/statements.dtx | 1376 ---------- .../texmf-dist/source/latex/stex/xsl/ltxml2cnx.xsl | 43 - .../texmf-dist/source/latex/stex/xsl/omdocpost.xsl | 457 ---- .../texmf-dist/source/latex/stex/xsl/owl2post.xsl | 62 - .../texmf-dist/tex/latex/stex/cmathml/cmathml.sty | 450 ---- .../tex/latex/stex/cmathml/cmathml.sty.ltxml | 974 ------- Master/texmf-dist/tex/latex/stex/cnx/cnx.cls | 142 - Master/texmf-dist/tex/latex/stex/cnx/cnx.cls.ltxml | 280 -- Master/texmf-dist/tex/latex/stex/dcm/dcm.sty | 178 -- Master/texmf-dist/tex/latex/stex/dcm/dcm.sty.ltxml | 159 -- Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty | 125 - .../tex/latex/stex/hwexam/hwexam.sty.ltxml | 29 - .../tex/latex/stex/metakeys/metakeys.sty | 49 - .../tex/latex/stex/metakeys/metakeys.sty.ltxml | 3 - .../latex/stex/mikoslides/beamerthemeJacobs.sty | 62 - .../tex/latex/stex/mikoslides/cc-by-sa.eps | 506 ---- .../tex/latex/stex/mikoslides/cc-by-sa.png | Bin 5083 -> 0 bytes .../tex/latex/stex/mikoslides/cc_somerights.eps | 506 ---- .../tex/latex/stex/mikoslides/cc_somerights.jpg | Bin 2963 -> 0 bytes .../tex/latex/stex/mikoslides/cc_somerights.pdf | Bin 4028 -> 0 bytes .../tex/latex/stex/mikoslides/jacobs-logo.eps | 2722 -------------------- .../tex/latex/stex/mikoslides/jacobs-logo.pdf | Bin 5996 -> 0 bytes .../tex/latex/stex/mikoslides/jacobs-logo.png | Bin 6260 -> 0 bytes .../tex/latex/stex/mikoslides/mikoaffiliation.sty | 54 - .../stex/mikoslides/mikoaffiliation.sty.ltxml | 25 - .../tex/latex/stex/mikoslides/mikoslides.cls | 104 - .../tex/latex/stex/mikoslides/mikoslides.cls.ltxml | 105 - .../tex/latex/stex/mikoslides/shading-l2r.eps | 458 ---- .../tex/latex/stex/mikoslides/shading-l2r.png | Bin 1732 -> 0 bytes .../texmf-dist/tex/latex/stex/modules/modules.sty | 230 -- .../tex/latex/stex/modules/modules.sty.ltxml | 503 ---- Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls | 28 - .../tex/latex/stex/omdoc/omdoc.cls.ltxml | 53 - Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty | 72 - .../tex/latex/stex/omdoc/omdoc.sty.ltxml | 112 - Master/texmf-dist/tex/latex/stex/omtext/omtext.sty | 79 - .../tex/latex/stex/omtext/omtext.sty.ltxml | 275 -- .../tex/latex/stex/presentation/presentation.sty | 163 -- .../latex/stex/presentation/presentation.sty.ltxml | 381 --- .../texmf-dist/tex/latex/stex/problem/problem.sty | 117 - .../tex/latex/stex/problem/problem.sty.ltxml | 60 - Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty | 66 - .../tex/latex/stex/reqdoc/reqdoc.sty.ltxml | 23 - Master/texmf-dist/tex/latex/stex/sproof/sproof.sty | 76 - .../tex/latex/stex/sproof/sproof.sty.ltxml | 126 - Master/texmf-dist/tex/latex/stex/sref/sref.sty | 95 - .../texmf-dist/tex/latex/stex/sref/sref.sty.ltxml | 33 - .../tex/latex/stex/statements/statements.sty | 141 - .../tex/latex/stex/statements/statements.sty.ltxml | 339 --- Master/texmf-dist/tex/latex/stex/stex-logo.sty | 5 - .../texmf-dist/tex/latex/stex/stex-logo.sty.ltxml | 18 - Master/texmf-dist/tex/latex/stex/stex.sty | 22 - Master/texmf-dist/tex/latex/stex/stex.sty.ltxml | 23 - Master/tlpkg/bin/tlpkg-ctan-check | 2 +- Master/tlpkg/libexec/ctan2tds | 1 + Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc | 1 - Master/tlpkg/tlpsrc/stex.tlpsrc | 0 161 files changed, 2 insertions(+), 30589 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex/stex/README delete mode 100644 Master/texmf-dist/doc/latex/stex/cmathml/README delete mode 100644 Master/texmf-dist/doc/latex/stex/cmathml/cmathml.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/cnx/README delete mode 100644 Master/texmf-dist/doc/latex/stex/cnx/cnx.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/dcm/README delete mode 100644 Master/texmf-dist/doc/latex/stex/dcm/dcm.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/example/Makefile delete mode 100644 Master/texmf-dist/doc/latex/stex/example/README delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/Makefile delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/all.omdoc delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/all.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/functions.omdoc delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/functions.sms delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/functions.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/post.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/pre.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/reals.omdoc delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/reals.sms delete mode 100644 Master/texmf-dist/doc/latex/stex/example/background/reals.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/Makefile delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/continuous.omdoc delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/continuous.sms delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/continuous.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/differentiable.omdoc delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/differentiable.sms delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/differentiable.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/paper.omdoc delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/paper.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/example/paper/paper.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/example/test/Makefile delete mode 100644 Master/texmf-dist/doc/latex/stex/hwexam/README delete mode 100644 Master/texmf-dist/doc/latex/stex/hwexam/hwexam.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/metakeys/README delete mode 100644 Master/texmf-dist/doc/latex/stex/metakeys/metakeys.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/mikoslides/README delete mode 100644 Master/texmf-dist/doc/latex/stex/mikoslides/mikoslides.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/modules/README delete mode 100644 Master/texmf-dist/doc/latex/stex/modules/modules.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/omdoc/README delete mode 100644 Master/texmf-dist/doc/latex/stex/omdoc/omdoc.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/omtext/README delete mode 100644 Master/texmf-dist/doc/latex/stex/omtext/omtext.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/presentation/README delete mode 100644 Master/texmf-dist/doc/latex/stex/presentation/presentation.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/problem/README delete mode 100644 Master/texmf-dist/doc/latex/stex/problem/problem.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/reqdoc/README delete mode 100644 Master/texmf-dist/doc/latex/stex/reqdoc/reqdoc.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/reqdoc/requirements.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/reqdoc/requirements.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/sproof/README delete mode 100644 Master/texmf-dist/doc/latex/stex/sproof/sproof.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/sref/README delete mode 100644 Master/texmf-dist/doc/latex/stex/sref/book.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/sref/book.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/sref/idc.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/sref/idc.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/sref/scr.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/sref/scr.tex delete mode 100644 Master/texmf-dist/doc/latex/stex/sref/sref.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/statements/README delete mode 100644 Master/texmf-dist/doc/latex/stex/statements/statements.pdf delete mode 100644 Master/texmf-dist/doc/latex/stex/stex.pdf delete mode 100644 Master/texmf-dist/source/latex/stex/bin/Makefile delete mode 100644 Master/texmf-dist/source/latex/stex/bin/Modparse.pm delete mode 100644 Master/texmf-dist/source/latex/stex/bin/README delete mode 100644 Master/texmf-dist/source/latex/stex/bin/TexId.pm delete mode 100755 Master/texmf-dist/source/latex/stex/bin/allgen delete mode 100755 Master/texmf-dist/source/latex/stex/bin/bms delete mode 100755 Master/texmf-dist/source/latex/stex/bin/checksum delete mode 100755 Master/texmf-dist/source/latex/stex/bin/convert-paths delete mode 100755 Master/texmf-dist/source/latex/stex/bin/filedate delete mode 100755 Master/texmf-dist/source/latex/stex/bin/gen-symdef-table.pl delete mode 100755 Master/texmf-dist/source/latex/stex/bin/grep-rerun delete mode 100755 Master/texmf-dist/source/latex/stex/bin/idcheck delete mode 100755 Master/texmf-dist/source/latex/stex/bin/msplit delete mode 100644 Master/texmf-dist/source/latex/stex/bin/old/Makefile delete mode 100644 Master/texmf-dist/source/latex/stex/bin/old/defcon.l delete mode 100644 Master/texmf-dist/source/latex/stex/bin/old/idcheck.l delete mode 100644 Master/texmf-dist/source/latex/stex/bin/old/modstr.l delete mode 100755 Master/texmf-dist/source/latex/stex/bin/old/symdef delete mode 100755 Master/texmf-dist/source/latex/stex/bin/rf delete mode 100644 Master/texmf-dist/source/latex/stex/bin/rng2dot/ModelRNC.pm delete mode 100755 Master/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot delete mode 100755 Master/texmf-dist/source/latex/stex/bin/sgraph delete mode 100755 Master/texmf-dist/source/latex/stex/bin/sms delete mode 100755 Master/texmf-dist/source/latex/stex/bin/stexml delete mode 100755 Master/texmf-dist/source/latex/stex/bin/stexmlmod delete mode 100755 Master/texmf-dist/source/latex/stex/bin/termin delete mode 100644 Master/texmf-dist/source/latex/stex/cmathml/cmathml.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/cnx/cnx.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/dcm/dcm.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/hwexam/hwexam.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/metakeys/metakeys.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/modules/modules.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/omdoc/omdoc.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/omtext/omtext.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/presentation/presentation.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/problem/problem.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/reqdoc/reqdoc.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/sproof/sproof.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/sref/sref.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/statements/statements.dtx delete mode 100644 Master/texmf-dist/source/latex/stex/xsl/ltxml2cnx.xsl delete mode 100644 Master/texmf-dist/source/latex/stex/xsl/omdocpost.xsl delete mode 100644 Master/texmf-dist/source/latex/stex/xsl/owl2post.xsl delete mode 100644 Master/texmf-dist/tex/latex/stex/cmathml/cmathml.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/cmathml/cmathml.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/cnx/cnx.cls delete mode 100644 Master/texmf-dist/tex/latex/stex/cnx/cnx.cls.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/dcm/dcm.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/dcm/dcm.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/beamerthemeJacobs.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/cc-by-sa.eps delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/cc-by-sa.png delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.eps delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.jpg delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.pdf delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.eps delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.pdf delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.png delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/mikoaffiliation.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/mikoaffiliation.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/mikoslides.cls delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/mikoslides.cls.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/shading-l2r.eps delete mode 100644 Master/texmf-dist/tex/latex/stex/mikoslides/shading-l2r.png delete mode 100644 Master/texmf-dist/tex/latex/stex/modules/modules.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/modules/modules.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls delete mode 100644 Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/omtext/omtext.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/omtext/omtext.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/presentation/presentation.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/presentation/presentation.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/problem/problem.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/sproof/sproof.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/sproof/sproof.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/sref/sref.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/sref/sref.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/statements/statements.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/statements/statements.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/stex-logo.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/stex-logo.sty.ltxml delete mode 100644 Master/texmf-dist/tex/latex/stex/stex.sty delete mode 100644 Master/texmf-dist/tex/latex/stex/stex.sty.ltxml delete mode 100644 Master/tlpkg/tlpsrc/stex.tlpsrc diff --git a/Master/texmf-dist/doc/latex/stex/README b/Master/texmf-dist/doc/latex/stex/README deleted file mode 100644 index 1952eb98cee..00000000000 --- a/Master/texmf-dist/doc/latex/stex/README +++ /dev/null @@ -1,12 +0,0 @@ -sTeX: An Infrastructure for Semantic Preloading of LaTeX Documents - -This directory contains the sTeX package collection, a version of TeX/LaTeX that allows -to markup TeX/LaTeX documents semantically without leaving the document format, -essentially turning it into a document format for mathematical knowledge management -(MKM). - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version of this -package can be found at https://svn.kwarc.info/repos/stex/trunk/sty/stex/ diff --git a/Master/texmf-dist/doc/latex/stex/cmathml/README b/Master/texmf-dist/doc/latex/stex/cmathml/README deleted file mode 100644 index 3117561fabb..00000000000 --- a/Master/texmf-dist/doc/latex/stex/cmathml/README +++ /dev/null @@ -1,13 +0,0 @@ -cmathml.sty: Semantic Macros for Content MathML in LaTeX -cmathmlx.sty: Semantic Macros for extended Content MathML - -This package provides a collection of semantic macros for Content MathML and their LateXML -bindings. These macros form the basis of a naive translation from semantically preloaded -LaTeX formulae into the Content MathML formulae via the LaTeXML system. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -The development version of this package can be found at -$HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/cmathml/README $ - diff --git a/Master/texmf-dist/doc/latex/stex/cmathml/cmathml.pdf b/Master/texmf-dist/doc/latex/stex/cmathml/cmathml.pdf deleted file mode 100644 index 54bc14c8d06..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/cmathml/cmathml.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/cnx/README b/Master/texmf-dist/doc/latex/stex/cnx/README deleted file mode 100644 index 113b526364f..00000000000 --- a/Master/texmf-dist/doc/latex/stex/cnx/README +++ /dev/null @@ -1,13 +0,0 @@ -cnx.cls: A LaTeX-based Syntax for Connexions Modules - -The cnx class is a collection of TeX macros that allow to write Connexions modules in the -CNXLaTeX format without leaving the LaTeX workflow. Modules are authored using cnx.cls -using only a text editor, transformed to PDF and proofread as usual. For publication, -CNXLaTeX modules are transformed to CNXML via the LaTeXML translator and can be uploaded -to the Connexions system. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -The development version of this package can be found at -$HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/cnx/README $ diff --git a/Master/texmf-dist/doc/latex/stex/cnx/cnx.pdf b/Master/texmf-dist/doc/latex/stex/cnx/cnx.pdf deleted file mode 100644 index 681044e8fdf..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/cnx/cnx.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/dcm/README b/Master/texmf-dist/doc/latex/stex/dcm/README deleted file mode 100644 index 5fd3874b04a..00000000000 --- a/Master/texmf-dist/doc/latex/stex/dcm/README +++ /dev/null @@ -1,12 +0,0 @@ -dcm.sty: An Infrastructure for marking up Dublin Core Metadata in LaTeX documents - -The dcm packge allows mark up Dublin Core Metadata in LaTeX documents that can be -harvested by automated tools or exported to PDF. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at -https://svn.kwarc.info/repos/stex/trunk/sty/stex/dcm - diff --git a/Master/texmf-dist/doc/latex/stex/dcm/dcm.pdf b/Master/texmf-dist/doc/latex/stex/dcm/dcm.pdf deleted file mode 100644 index e437276fac4..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/dcm/dcm.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/example/Makefile b/Master/texmf-dist/doc/latex/stex/example/Makefile deleted file mode 100644 index df87da1fbee..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -STEXDIR = .. -MAKEDIRS = background paper -CLEANDIRS = $(MAKEDIRS) -include $(STEXDIR)/make/Makefile.subdirs diff --git a/Master/texmf-dist/doc/latex/stex/example/README b/Master/texmf-dist/doc/latex/stex/example/README deleted file mode 100644 index 7424d68ebca..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/README +++ /dev/null @@ -1,18 +0,0 @@ -This directory contains a typical (if minimal) example of a sTeX -collection, and a Makefile-based conversion workflow. It is intended -to test the sTeX distribution and serve as an example for sTeX users -to set up their system. It contains - -README: this file -Makefile: this contains rules to automate the PDF formatting and - XML conversion process. -background: a directory with background modules, this is assumed to - exist before starting work on the paper, in real life this - would probably be a subversion external. -paper: a directory with a paper based on two modules and the - background modules. -test: a directory that has the makefiles to accomodate your tests; - just copy your files there adjust TARGET and type make. - -For an explanation of the design of the example see paper/example.pdf or -https://trac.kwarc.info/sTeX/wiki/sTeXCollections diff --git a/Master/texmf-dist/doc/latex/stex/example/background/Makefile b/Master/texmf-dist/doc/latex/stex/example/background/Makefile deleted file mode 100644 index af7cc21e5eb..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -STEXDIR = ../.. -TARGET = all.tex -BUTFILES = pre.tex post.tex -MODSLIBDIR = . - -include $(STEXDIR)/make/Makefile.vars -all: omdoc mods pdf -include $(STEXDIR)/make/Makefile.in diff --git a/Master/texmf-dist/doc/latex/stex/example/background/all.omdoc b/Master/texmf-dist/doc/latex/stex/example/background/all.omdoc deleted file mode 100644 index af660821194..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/all.omdoc +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -

Functions

-
-
- - - - - - - - - - - - - - - ( - - - × - - - - ) - - - - - - - - - - - - - - - - ( - - : - - - - ) - - - - - - - - - - - - - - - ( - - - - ) - - - - - - -

-A functionfunction is a left-total, right-unique relation in

-
-
-
-
- - - -

Real Numbers

-
-
- - - - - - - - - R - - - - - - - - - - - - - ( - | - - | - ) - - - - - - - - - - - - - - - - - - - - - - -

-We denote the set of real numbersrealnumbers we all know and love with -. -

-
-
- - -

-The absolute value of a real number . -

-
-
-
-
- -
diff --git a/Master/texmf-dist/doc/latex/stex/example/background/all.tex b/Master/texmf-dist/doc/latex/stex/example/background/all.tex deleted file mode 100644 index 27df61d1e61..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/all.tex +++ /dev/null @@ -1,12 +0,0 @@ -\documentclass{omdoc} -\usepackage{stex} -\usepackage{hyperref,amssymb} -\defpath{backmods}{../background} -\begin{document} -\input{functions} -\input{reals} -\end{document} -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: t -%%% End: diff --git a/Master/texmf-dist/doc/latex/stex/example/background/functions.omdoc b/Master/texmf-dist/doc/latex/stex/example/background/functions.omdoc deleted file mode 100644 index 4577907ced1..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/functions.omdoc +++ /dev/null @@ -1,83 +0,0 @@ - - - - - - Functions - - - - - - - - - - - - - - - ( - - - × - - - - ) - - - - - - - - - - - - - - - - ( - - : - - - - ) - - - - - - - - - - - - - - - ( - - - - ) - - - - - - -

-A functionfunction is a left-total, right-unique relation in

-
-
-
-
- -
diff --git a/Master/texmf-dist/doc/latex/stex/example/background/functions.sms b/Master/texmf-dist/doc/latex/stex/example/background/functions.sms deleted file mode 100644 index 9c7f4c79211..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/functions.sms +++ /dev/null @@ -1,5 +0,0 @@ -\begin{module}[id=functions]% -\symdef[assocarg=1]{cart}[1]{\assoc[p=500]{\times}{#1}}% -\symdef{fun}[3]{\mixfixiii[p=200]{}{#1}{\colon}{#2}{\rightarrow}{#3}{}}% -\symdef{inset}[2]{\infix[p=650]{\in}{#1}{#2}}% -\end{module}% diff --git a/Master/texmf-dist/doc/latex/stex/example/background/functions.tex b/Master/texmf-dist/doc/latex/stex/example/background/functions.tex deleted file mode 100644 index d71ee13a25b..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/functions.tex +++ /dev/null @@ -1,15 +0,0 @@ -\begin{omgroup}[id=sec.functions,creators=miko]{Functions} -\begin{module}[id=functions] -\symdef[assocarg=1]{cart}[1]{\assoc[p=500]{\times}{#1}} -\symdef{fun}[3]{\mixfixiii[p=200]{}{#1}{\colon}{#2}{\rightarrow}{#3}{}} -\symdef{inset}[2]{\infix[p=650]{\in}{#1}{#2}} - -\begin{definition}[id=functions.def] - A {\defin{function}} $\fun{f}AB$ is a left-total, right-unique relation in $\cart{A,B}$ -\end{definition} -\end{module} -\end{omgroup} -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: "all" -%%% End: diff --git a/Master/texmf-dist/doc/latex/stex/example/background/post.tex b/Master/texmf-dist/doc/latex/stex/example/background/post.tex deleted file mode 100644 index 6b47932f52b..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/post.tex +++ /dev/null @@ -1 +0,0 @@ -\end{document} diff --git a/Master/texmf-dist/doc/latex/stex/example/background/pre.tex b/Master/texmf-dist/doc/latex/stex/example/background/pre.tex deleted file mode 100644 index 38faacc82b0..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/pre.tex +++ /dev/null @@ -1,6 +0,0 @@ -\documentclass{omdoc} -\usepackage{stex,amssymb} -\usepackage{hyperref} -\defpath{backmods}{../background} -% \baseURI[\backmods{}]{http://linkeddata.tntbase.org/stex} -% \coolurion diff --git a/Master/texmf-dist/doc/latex/stex/example/background/reals.omdoc b/Master/texmf-dist/doc/latex/stex/example/background/reals.omdoc deleted file mode 100644 index 0f148890d06..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/reals.omdoc +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - Real Numbers - - - - - - - - - - R - - - - - - - - - - - - - ( - | - - | - ) - - - - - - - - - - - - - - - - - - - - - - -

-We denote the set of real numbersrealnumbers we all know and love with -. -

-
-
- - -

-The absolute value of a real number . -

-
-
-
-
- -
diff --git a/Master/texmf-dist/doc/latex/stex/example/background/reals.sms b/Master/texmf-dist/doc/latex/stex/example/background/reals.sms deleted file mode 100644 index 437865ee78c..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/reals.sms +++ /dev/null @@ -1,5 +0,0 @@ -\begin{module}[id=reals]% -\symdef{RealNumbers}{\mathbb{R}}% -\symdef{absval}[1]{\mixfixi[p=2000]|{#1}|}% -\symdef{rfrac}[2]{\frac{#1}{#2}}% -\end{module}% diff --git a/Master/texmf-dist/doc/latex/stex/example/background/reals.tex b/Master/texmf-dist/doc/latex/stex/example/background/reals.tex deleted file mode 100644 index 6acdee48cbe..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/background/reals.tex +++ /dev/null @@ -1,20 +0,0 @@ -\begin{omgroup}[id=sec.reals]{Real Numbers} -\begin{module}[id=reals] -\symdef{RealNumbers}{\mathbb{R}} -\symdef{absval}[1]{\mixfixi[p=2000]|{#1}|} -\symdef{rfrac}[2]{\frac{#1}{#2}} - -\begin{definition}[id=reals.def] - We denote the set of {\twindef{real}{numbers}} we all know and love with - $\RealNumbers$. -\end{definition} - -\begin{definition}[id=absval.def] - The absolute value $\absval{r}$ of a real number $r$. -\end{definition} -\end{module} -\end{omgroup} -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: "all" -%%% End: diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/Makefile b/Master/texmf-dist/doc/latex/stex/example/paper/Makefile deleted file mode 100644 index 1b71727ec2f..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -STEXDIR = ../.. -TARGET = paper.tex -MODSLIBDIR = ../background - -include $(STEXDIR)/make/Makefile.vars -all: omdoc mods pdf -include $(STEXDIR)/make/Makefile.in diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/continuous.omdoc b/Master/texmf-dist/doc/latex/stex/example/paper/continuous.omdoc deleted file mode 100644 index 6b73e519730..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/continuous.omdoc +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - Continuous Functions - - - - - - - - - - - - - - - - - - - C - 0 - - - - - - , - - - - - - - - - -

-A function is called continuouscontinuous at -, iff for all 0 there is a 0, such that - for all

-
-
-
-
- -
diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/continuous.sms b/Master/texmf-dist/doc/latex/stex/example/paper/continuous.sms deleted file mode 100644 index 6d42d0f52a6..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/continuous.sms +++ /dev/null @@ -1,6 +0,0 @@ -\begin{module}[id=continuous]% -\importmodule[\backmods{functions}]{functions}% -\importmodule[\backmods{reals}]{reals}% -\symdef{continuousfunctions}[2]{\mathcal{C}^0(#1,#2)}% -\abbrdef{ContRR}[2]{\continuousfunctions\RealNumbers\RealNumbers}% -\end{module}% diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/continuous.tex b/Master/texmf-dist/doc/latex/stex/example/paper/continuous.tex deleted file mode 100644 index 65b6f832eae..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/continuous.tex +++ /dev/null @@ -1,17 +0,0 @@ -\begin{omgroup}[id=sec.contfuncs]{Continuous Functions} -\begin{module}[id=continuous] -\importmodule[\backmods{functions}]{functions} -\importmodule[\backmods{reals}]{reals} -\symdef{continuousfunctions}[2]{\mathcal{C}^0(#1,#2)} -\abbrdef{ContRR}[2]{\continuousfunctions\RealNumbers\RealNumbers} -\begin{definition} - A function $\fun{f}\RealNumbers\RealNumbers$ is called {\defin{continuous}} at - $\inset{x}\RealNumbers$, iff for all $\epsilon>0$ there is a $\delta>0$, such that - $\absval{f(x)-f(y)}<\epsilon$ for all $\absval{x-y}<\delta$ -\end{definition} -\end{module} -\end{omgroup} -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: "paper" -%%% End: diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.omdoc b/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.omdoc deleted file mode 100644 index b1415a2334b..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.omdoc +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - Differentiable Functions - - - - - - - - - - - - - - - - - - C - 1 - - - - - - , - - - - - - - - - -

-A function is called differentiabledifferentiable at -, iff for all 0 there is a 0, such that - for all . -

-
-
-
-
- -
diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.sms b/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.sms deleted file mode 100644 index cb2122c1064..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.sms +++ /dev/null @@ -1,5 +0,0 @@ -\begin{module}[id=differentiable]% -\importmodule[continuous]{continuous}% -\symdef{difffunctions}[2]{\mathcal{C}^1(#1,#2)}% -\abbrdef{DiffRR}[2]{\difffunctions\RealNumbers\RealNumbers}% -\end{module}% diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.tex b/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.tex deleted file mode 100644 index ee9c66f9409..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/differentiable.tex +++ /dev/null @@ -1,16 +0,0 @@ -\begin{omgroup}[id=sec.differentiable]{Differentiable Functions} -\begin{module}[id=differentiable] -\importmodule[continuous]{continuous} -\symdef{difffunctions}[2]{\mathcal{C}^1(#1,#2)} -\abbrdef{DiffRR}[2]{\difffunctions\RealNumbers\RealNumbers} -\begin{definition} - A function $\fun{f}\RealNumbers\RealNumbers$ is called {\defin{differentiable}} at - $\inset{x}\RealNumbers$, iff for all $\epsilon>0$ there is a $\delta>0$, such that - $\rfrac{\absval{f(x)-f(y)}}{\absval{x-y}}<\epsilon$ for all $\absval{x-y}<\delta$. -\end{definition} -\end{module} -\end{omgroup} -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: "paper" -%%% End: diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/paper.omdoc b/Master/texmf-dist/doc/latex/stex/example/paper/paper.omdoc deleted file mode 100644 index 02d7d746649..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/paper.omdoc +++ /dev/null @@ -1,311 +0,0 @@ - - - - - MichaelKohlhase - Copyright (c) 2009 Michael Kohlhase - An example of semantic Markup in sTeX - In this note we give an example of semantic markup in sTeX: -Continuous and differentiable functions are introduced using real numbers, sets and -functions as an assumed background. - - - - Introduction - - - We will show how to semantically mark up mathematics in the sTeX -format  and how to convert it into -OMDoc . -We have some mathematical material in Section which will serve as example -content. In the rest of this section we will explain the setup of the example and -present an approach to automation of the OMDoc conversion via Unix Makefiles. - - - - - The Setup - - - - - - - - -

-The source of this note is contained in the file paper.tex. We call it -the targettarget, since formatting it with LaTeX will generate the main -document. The content in Section and Section -comes from included files continuous.tex and -differentiable.tex, we will call them modulemodules, since they may -be used (i.e. included) by other target documents as well. -

-
-
- - As the modules are built for inclusion into other documents, they are not -self-contained: - - - - - -

they do not contain a LaTeX preamble and -/, and -

-
-
- - -

they may depend on other modules, whose semantic macros they need to include, -

-
-
- - -

to facilitate this a module file modf.tex comes with a “semantic -macro short form” modf.sms that can be included without generating -output in the PDF. -

-
-
-
- - - this will have consequences for the automation. Concretely, the module on -differentiable functions in Section depends on that for continuous -functions in Section . Both of them depend on modules for real numbers, -sets and functions that we do not want to cover in this note. We assume that -they have already been marked up with the same methods as we describe here and are -accessible to us and call them background modulebackgroundmodules. In our setup we -keep them in the subdirectory background. - - -
-
- - - Formatting and OMDoc conversion - - - To format an sTeX document — i.e. to produce a PDF file from the sTeX marked-up -sources — we only need to run the pdflatex program over the target document -— assuming that all modules (regular or background) have semantic macro short forms. -To convert an sTeX document to OMDoc, we need to run latexml over it, -post-process the result by latexmlpost, and finally massage away all remaining -LaTeXML islands with a stylesheet, see   for details. - - - - - - Makefile-based Automation - - - As the conversion to OMDoc is rather complex (the programs in the three steps take a -variety of options), we support an automation by Unix Makefiles. There are three main -make targets. - - - - - - - make omdoc - - - -

will trigger the OMDoc transformation of the target -document. -

-
-
- - - - make mods - - - -

will trigger the OMDoc transformation of the modules. -

-
-
- - - - make pdf - - - -

will trigger the LaTeX formatting the target -

-
-
- - - - make mpdf - - - -

will trigger the LaTeX formatting the modules -

-
-
- - - - make sms - - - -

will trigger the re-generation of all semantic macro short -forms of modules (this is implicitly called in all the other make targets) -

-
-
-
- - To use this, we need to set up a Makefile of the following form: - -
STEXDIR = ../..
2TARGET = paper.tex
MODSLIBDIR = ../background
4
include $(STEXDIR)/make/Makefile.vars
6all: omdoc mods pdf
include $(STEXDIR)/make/Makefile.in
-The variable STEXDIR has to be set to the main directory of the sTeX -distribution. The variable TARGET specifies the target document (all other -*.tex files that are not excluded in the BUTFILES variables are -considered as modules). Here, the background directory for convenience. The -MODSLIBDIR specifies the location of the prefix and postfix files -pre.tex and post.tex that will be prepended and appended to the -modules to make them into complete files TeX files that can be converted. The last -three lines just include the Makefiles from the sTeX distribution and configure the -default make target (make all) to be produce the pdf version -Note that in the directory background we have a very similar Makefile as -above. The only differences are that the variable STEXDIR is adapted and -that the BUTFILE variable is set to pre.tex and -post.tex, so that they are not converted. In the directory -background we have followed good practice by establishing a phony -
-
-
-
- - - Mathematical Content - - - We present some standard mathematical definitions, here from calculus. - - - - - Continuous Functions - - - - - - - - - - - - - - - - - - - C - 0 - - - - - - , - - - - - - - - - -

-A function is called continuouscontinuous at -, iff for all 0 there is a 0, such that - for all

-
-
-
-
- - - Differentiable Functions - - - - - - - - - - - - - - - - - - C - 1 - - - - - - , - - - - - - - - - -

-A function is called differentiabledifferentiable at -, iff for all 0 there is a 0, such that - for all . -

-
-
-
-
-
- - - Conclusion - - - In this note we have given an example of standard mathematical markup and shown how a a -sTeX collection can be set up for automation. - - - - - - - - - - - -
diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/paper.pdf b/Master/texmf-dist/doc/latex/stex/example/paper/paper.pdf deleted file mode 100644 index 36705f2e2ba..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/example/paper/paper.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/example/paper/paper.tex b/Master/texmf-dist/doc/latex/stex/example/paper/paper.tex deleted file mode 100644 index 2949019944d..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/paper/paper.tex +++ /dev/null @@ -1,132 +0,0 @@ -\documentclass{omdoc} -\usepackage{stex,amssymb} -\usepackage{alltt} -\usepackage{hyperref} -\usepackage{listings} -\def\omdoc{OMDoc} -\def\latexml{LaTeXML} -\defpath{backmods}{../background} -%% defining the author metadata -\DCMperson[id=miko, - affiliation={Jacobs University, Bremen}, - url=http://kwarc.info/kohlhase] - {Michael Kohlhase} - -\begin{document} - -% metadata and title page -\begin{DCmetadata}[maketitle] - \DCMcreators{miko} - \DCMrights{Copyright (c) 2009 Michael Kohlhase} - \DCMtitle{An example of semantic Markup in {\sTeX}} - \DCMabstract{In this note we give an example of semantic markup in {\sTeX}: - Continuous and differentiable functions are introduced using real numbers, sets and - functions as an assumed background.} -\end{DCmetadata} - -\begin{omgroup}[id=intro]{Introduction} - We will show how to semantically mark up mathematics in the {\sTeX} - format~\cite{Kohlhase:ulsmf08} and how to convert it into - {\omdoc}~\cite{Kohlhase:OMDoc1.3}. - - We have some mathematical material in {\sref{sec.math}} which will serve as example - content. In the rest of this section we will explain the setup of the example and - present an approach to automation of the {\omdoc} conversion via Unix Makefiles. - \begin{omgroup}{The Setup} - \begin{module}[id=setup] - \begin{definition}[display=flow] - The source of this note is contained in the file {\texttt{paper.tex}}. We call it - the {\defin{target}}, since formatting it with {\LaTeX} will generate the main - document. The content in {\sref{sec.contfuncs}} and {\sref{sec.differentiable}} - comes from included files {\texttt{continuous.tex}} and - {\texttt{differentiable.tex}}, we will call them {\defin{module}s}, since they may - be used (i.e. included) by other target documents as well. - \end{definition} - As the modules are built for inclusion into other documents, they are not - self-contained: - \begin{enumerate} - \item they do not contain a {\LaTeX} preamble and - \verb|\begin|/\verb|\end{document}|, and - \item they may depend on other modules, whose semantic macros they need to include, - \item to facilitate this a module file {\texttt{modf.tex}} comes with a ``semantic - macro short form'' {\texttt{modf.sms}} that can be included without generating - output in the PDF. - \end{enumerate} - this will have consequences for the automation. Concretely, the module on - differentiable functions in {\sref{sec.differentiable}} depends on that for continuous - functions in {\sref{sec.contfuncs}}. Both of them depend on modules for real numbers, - sets and functions that we do not want to cover in this note. \inlinedef{We assume that - they have already been marked up with the same methods as we describe here and are - accessible to us and call them {\twindef{background}{module}s}}. In our setup we - keep them in the subdirectory {\texttt{background}}. - \end{module} -\end{omgroup} - -\begin{omgroup}{Formatting and {\omdoc} conversion} - To format an {\sTeX} document --- i.e. to produce a PDF file from the {\sTeX} marked-up - sources --- we only need to run the {\texttt{pdflatex}} program over the target document - --- assuming that all modules (regular or background) have semantic macro short forms. - - To convert an {\sTeX} document to {\omdoc}, we need to run {\texttt{latexml}} over it, - post-process the result by {\texttt{latexmlpost}}, and finally massage away all remaining - {\latexml} islands with a stylesheet, see ~\cite{Kohlhase:ssmtl*} for details. -\end{omgroup} - -\begin{omgroup}{Makefile-based Automation} - As the conversion to {\omdoc} is rather complex (the programs in the three steps take a - variety of options), we support an automation by Unix Makefiles. There are three main - {\texttt{make}} targets. -\begin{description} - \item[{\texttt{make omdoc}}] will trigger the {\omdoc} transformation of the target - document. - \item[{\texttt{make mods}}] will trigger the {\omdoc} transformation of the modules. - \item[{\texttt{make pdf}}] will trigger the {\LaTeX} formatting the target - \item[{\texttt{make mpdf}}] will trigger the {\LaTeX} formatting the modules - \item[{\texttt{make sms}}] will trigger the re-generation of all semantic macro short - forms of modules (this is implicitly called in all the other {\texttt{make}} targets) - \end{description} - To use this, we need to set up a {\texttt{{Makefile}}} of the following form: - - \lstset{columns=flexible,frame=lines,numbers=left,stepnumber=2,numberstyle=\tiny,basicstyle=\small} - \lstinputlisting[language=make]{Makefile} - - The variable {\lstinline{STEXDIR}} has to be set to the main directory of the {\sTeX} - distribution. The variable {\lstinline{TARGET}} specifies the target document (all other - {\texttt{*.tex}} files that are not excluded in the {\lstinline{BUTFILES}} variables are - considered as modules). Here, the {\texttt{background}} directory for convenience. The - {\lstinline{MODSLIBDIR}} specifies the location of the prefix and postfix files - {\texttt{pre.tex}} and {\texttt{post.tex}} that will be prepended and appended to the - modules to make them into complete files {\TeX} files that can be converted. The last - three lines just include the Makefiles from the {\sTeX} distribution and configure the - default make target (\texttt{make all}) to be produce the pdf version - - Note that in the directory {\texttt{background}} we have a very similar Makefile as - above. The only differences are that the variable {\lstinline{STEXDIR}} is adapted and - that the {\lstinline{BUTFILE}} variable is set to {\texttt{pre.tex}} and - {\texttt{post.tex}}, so that they are not converted. In the directory - {\texttt{background}} we have followed good practice by establishing a phony -\end{omgroup} - -\end{omgroup} - -\begin{omgroup}[id=sec.math]{Mathematical Content} - We present some standard mathematical definitions, here from calculus. - \sinput{continuous} - \sinput{differentiable} -\end{omgroup} - -\begin{omgroup}[id=concl]{Conclusion} - In this note we have given an example of standard mathematical markup and shown how a a - {\sTeX} collection can be set up for automation. -\end{omgroup} -\bibliographystyle{alpha} -\bibliography{kwarc} -\end{document} - -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: t -%%% End: - -% LocalWords: miko Makefiles tex contfuncs modf sms pdflatex latexml Makefile -% LocalWords: latexmlpost omdoc STEXDIR BUTFILES DIRS diff --git a/Master/texmf-dist/doc/latex/stex/example/test/Makefile b/Master/texmf-dist/doc/latex/stex/example/test/Makefile deleted file mode 100644 index 8417d489e81..00000000000 --- a/Master/texmf-dist/doc/latex/stex/example/test/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -STEXDIR = ../.. -TARGET = Konzept-Bremsmodell.tex -MODSLIBDIR = background - -include $(STEXDIR)/make/Makefile.vars -all: omdoc mods pdf -include $(STEXDIR)/make/Makefile.in diff --git a/Master/texmf-dist/doc/latex/stex/hwexam/README b/Master/texmf-dist/doc/latex/stex/hwexam/README deleted file mode 100644 index cebd165fa19..00000000000 --- a/Master/texmf-dist/doc/latex/stex/hwexam/README +++ /dev/null @@ -1,12 +0,0 @@ -hwexam.sty: An Infrastructure for marking up Homework Assignment Sheets and Exams - -The hwexam packge allows individual course assignment sheets and compond -assignment documents using problem files marked up with the problem package. - -Copyright (c) 2010 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at -https://svn.kwarc.info/repos/stex/trunk/sty/stex/hwexam - diff --git a/Master/texmf-dist/doc/latex/stex/hwexam/hwexam.pdf b/Master/texmf-dist/doc/latex/stex/hwexam/hwexam.pdf deleted file mode 100644 index cbb89e36794..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/hwexam/hwexam.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/metakeys/README b/Master/texmf-dist/doc/latex/stex/metakeys/README deleted file mode 100644 index 56c6eea13b2..00000000000 --- a/Master/texmf-dist/doc/latex/stex/metakeys/README +++ /dev/null @@ -1,11 +0,0 @@ -omd.sty: A generic framework for extensible Metadata in LaTeX - -The omd packge supplies the infrastructure for extending sTeX macros with ontology-based -metadata. This is a package primarily aimed at authors of sTeX extensions. - -Copyright (c) 2009 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at -https://svn.kwarc.info/repos/stex/trunk/sty/stex/metakeys diff --git a/Master/texmf-dist/doc/latex/stex/metakeys/metakeys.pdf b/Master/texmf-dist/doc/latex/stex/metakeys/metakeys.pdf deleted file mode 100644 index 735b2f53ddf..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/metakeys/metakeys.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/mikoslides/README b/Master/texmf-dist/doc/latex/stex/mikoslides/README deleted file mode 100644 index 822e74a199a..00000000000 --- a/Master/texmf-dist/doc/latex/stex/mikoslides/README +++ /dev/null @@ -1,11 +0,0 @@ -mikoslides.cls: A Document class for Semantic Slides - -The mikoslides class provides a practical basis for marking up slides semantically in sTeX. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at -https://svn.kwarc.info/repos/stex/trunk/sty/stex/mikoslides - diff --git a/Master/texmf-dist/doc/latex/stex/mikoslides/mikoslides.pdf b/Master/texmf-dist/doc/latex/stex/mikoslides/mikoslides.pdf deleted file mode 100644 index b90cbd5d30a..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/mikoslides/mikoslides.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/modules/README b/Master/texmf-dist/doc/latex/stex/modules/README deleted file mode 100644 index bc64ed35416..00000000000 --- a/Master/texmf-dist/doc/latex/stex/modules/README +++ /dev/null @@ -1,21 +0,0 @@ -modules.sty: An Infrastructure for Semantic Macros and Module Scoping - -The modules package supplies an infrastructure that allows mark up semantic macros -and to reuse them efficiently in multiple environments. - -This packge is a central part of the sTeX collection, a version of TeX/LaTeX that allows -to markup TeX/LaTeX documents semantically without leaving the document format, -essentially turning it into a document format for mathematical knowledge management -(MKM). - -This package supplies a definition mechanism for semantic macros and a non-standard -scoping construct for them, which is oriented at the semantic depency relation rather -than the document structure. This structure can be used by MKM systems for -added-value services, either directly from the sTeX sources, or after translation. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at -https://svn.kwarc.info/repos/stex/trunk/sty/stex/modules diff --git a/Master/texmf-dist/doc/latex/stex/modules/modules.pdf b/Master/texmf-dist/doc/latex/stex/modules/modules.pdf deleted file mode 100644 index 19325c00531..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/modules/modules.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/omdoc/README b/Master/texmf-dist/doc/latex/stex/omdoc/README deleted file mode 100644 index 2a5111f8d38..00000000000 --- a/Master/texmf-dist/doc/latex/stex/omdoc/README +++ /dev/null @@ -1,12 +0,0 @@ -omdoc.cls: A LaTeX Class for OMDoc Documents -omdoc.sty: A LaTeX Package for OMDoc Document structures - -This package and class supplies a the infrastructure for writing OMDoc documents -(see http://www.omdoc.org) in LaTeX. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at https://svn.kwarc.info/repos/stex/trunk/sty/stex/omdoc - diff --git a/Master/texmf-dist/doc/latex/stex/omdoc/omdoc.pdf b/Master/texmf-dist/doc/latex/stex/omdoc/omdoc.pdf deleted file mode 100644 index 748bd0ba232..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/omdoc/omdoc.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/omtext/README b/Master/texmf-dist/doc/latex/stex/omtext/README deleted file mode 100644 index 579f02789b3..00000000000 --- a/Master/texmf-dist/doc/latex/stex/omtext/README +++ /dev/null @@ -1,12 +0,0 @@ -omtext.sty: A LaTeX Package for OMDoc Text environments - -This package supplies a the infrastructure for writing OMDoc text fragments. -(see http://www.omdoc.org) in LaTeX. - -Copyright (c) 2010 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at -https://svn.kwarc.info/repos/stex/trunk/sty/stex/omtext - diff --git a/Master/texmf-dist/doc/latex/stex/omtext/omtext.pdf b/Master/texmf-dist/doc/latex/stex/omtext/omtext.pdf deleted file mode 100644 index eee9af67ad2..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/omtext/omtext.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/presentation/README b/Master/texmf-dist/doc/latex/stex/presentation/README deleted file mode 100644 index 6fd953f20d1..00000000000 --- a/Master/texmf-dist/doc/latex/stex/presentation/README +++ /dev/null @@ -1,16 +0,0 @@ -presentation.sty: An Infrastructure for Presenting Semantic Macros - -This package supplies an infrastructure that allows to specify the presentation of -semantic macros, including preference-based bracket elision. This allows to markup the -functional structure of mathematical formulae without having to lose high-quality -human-oriented presentation in {\LaTeX}. Moreover, the notation definitions can be used by -MKM systems for added-value services, either directly from the {\sTeX} sources, or after -translation. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at -https://svn.kwarc.info/repos/stex/trunk/sty/stex/presentation - diff --git a/Master/texmf-dist/doc/latex/stex/presentation/presentation.pdf b/Master/texmf-dist/doc/latex/stex/presentation/presentation.pdf deleted file mode 100644 index e7b90a82151..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/presentation/presentation.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/problem/README b/Master/texmf-dist/doc/latex/stex/problem/README deleted file mode 100644 index 77b9314109e..00000000000 --- a/Master/texmf-dist/doc/latex/stex/problem/README +++ /dev/null @@ -1,10 +0,0 @@ -problem.sty: An Infrastructure for marking up Problems - -The problem package supplies an infrastructure that allows mark up problems and to reuse -them efficiently in multiple environments. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at https://svn.kwarc.info/repos/stex/trunk/sty/stex/problem diff --git a/Master/texmf-dist/doc/latex/stex/problem/problem.pdf b/Master/texmf-dist/doc/latex/stex/problem/problem.pdf deleted file mode 100644 index 6f0232ee6d0..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/problem/problem.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/reqdoc/README b/Master/texmf-dist/doc/latex/stex/reqdoc/README deleted file mode 100644 index adc3131dbbd..00000000000 --- a/Master/texmf-dist/doc/latex/stex/reqdoc/README +++ /dev/null @@ -1,12 +0,0 @@ -reqdoc.sty: Semantic Markup for Requirement Specification Documents - -This package supplies a the infrastructure for writing requirement -specification documents with embedded semantic markup, and to generate -XML-based documents from them via the LaTeXML system. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the -LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at https://svn.kwarc.info/repos/stex/trunk/sty/stex/reqdoc diff --git a/Master/texmf-dist/doc/latex/stex/reqdoc/reqdoc.pdf b/Master/texmf-dist/doc/latex/stex/reqdoc/reqdoc.pdf deleted file mode 100644 index f9f7b443061..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/reqdoc/reqdoc.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/reqdoc/requirements.pdf b/Master/texmf-dist/doc/latex/stex/reqdoc/requirements.pdf deleted file mode 100644 index 6365a8adb7a..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/reqdoc/requirements.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/reqdoc/requirements.tex b/Master/texmf-dist/doc/latex/stex/reqdoc/requirements.tex deleted file mode 100644 index 78ea705fa5f..00000000000 --- a/Master/texmf-dist/doc/latex/stex/reqdoc/requirements.tex +++ /dev/null @@ -1,126 +0,0 @@ -\documentclass[twoside]{omdoc} -\usepackage{stex} -\usepackage[recorddeps]{reqdoc} -\usepackage{VMeta} -\usepackage[pdftex, colorlinks=true, linkcolor=blue, citecolor=blue, filecolor=blue, pagecolor=blue, urlcolor=blue, pdftitle=V 1.0, pdfauthor=Administrator, pdfsubject=, pdfkeywords=20.10.97]{hyperref} - - -\DCMperson[id=jdoe,affiliation={DFKI Bremen}, - url=http://dfki.de/jdoe]{John Doe} - -\DCMperson[id=miko,affiliation={Jacobs University, Bremen}, - url=http://kwarc.info/kohlhase]{Michael Kohlhase} - -\begin{document} -\svnInfo $Id: requirements.tex 1324 2010-05-07 07:18:32Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/reqdoc/requirements.tex $ -\begin{DCmetadata}[maketitle] - \DCMtitle{Requirements for Semantic Requirements Documents} - \DCMcreators{miko,jdoe} - \DCMdate{\today} - \DCMabstract{An example of a requirements document marked up with the {\texttt{reqdoc}} - and {\texttt{VMeta}} from {\stex}} - \VMversion{1.5} - \VMdocstate{current} - \VMcreated{28.01.2008} - \VMresponsible{miko} -\end{DCmetadata} - -\begin{VMchangelist} - \begin{VMchange}{07.02.08}{1.0}{miko} - made initiale version 1.0 (empty skeleton file) - \end{VMchange} - \begin{VMchange}{07.03.08}{1.1}{miko} - added two requirements - \end{VMchange} - \begin{VMchange}{12.05.08}{1.2}{miko} - simplified some formulations - \end{VMchange} - \begin{VMchange}{17.05.08}{1.3}{miko} - added third requirement that depends on the first two. - \end{VMchange} -\end{VMchangelist} - -\begin{VMcertification} - \begin{VMcertified}{12.02.08}{1.1}{miko}{needs work} - some formulations still unclear, but correct in principle - \end{VMcertified} - \begin{VMcertified}{15.05.08}{1.2}{jdoe}{at DFKI} - may need another requirement. - \end{VMcertified} - \begin{VMcertified}{19.02.08}{1.3}{jdoe}{at DFKI} - certified: this is what DFKI wants. - \end{VMcertified} -\end{VMcertification} -\clearpage - -\begin{omgroup}{Introduction} -\begin{omtext} -In this document we show how to use the {\texttt{reqdoc}} package, unfortauntely, the -requirements themselves are quite phony, since they are only for introductory purposes. -\end{omtext} -\end{omgroup} - - -\begin{module}[id=user-general-reqs] -\importmodule[cds/background]{background} - -\begin{omgroup}{Some Requirements} - -\begin{requirements}[numbering=yes,prefix=U] - \begin{requirement}[id=acceptdata,prio=2] - {Accept {\termref[cd=background,name=data]{data}} from heterogeneous - {\termref[cd=background,name=source]{data sources}}} - \reqnote{in particular: $\data$} - \end{requirement} - - \begin{requirement}[id=reftest,prio=1] - {do something with the data to test the reference} - \reqnote{not really, this is just a test} - \end{requirement} - - \begin{requirement}[id=areftest,prio=1,refs={acceptdata,reftest}] - {do something with the data to test the reference} - \reqnote{not really, this is just a test} - \end{requirement} -\end{requirements} -\end{omgroup} - -\begin{omgroup}{Requirements as tables} - -\begin{omtext} - We can also format requirements as tables -\end{omtext} - -\begin{reqtable}[prefix=U] - \reqline[id=tabacceptdata,prio=2] - {Accept {\termref[cd=background,name=data]{data}} from heterogeneous - {\termref[cd=background,name=source]{data sources}}} - {in particular: $\data$} - - \reqline[id=tabreftest,prio=1] - {do something with the data to test the reference - - do something with the data to test the reference} - {not really, this is just a test} - - \reqline[id=tabareftest,prio=1,refs={tabacceptdata,tabreftest}] - {do something with the data to test the reference} - {not really, this is just a test} -\end{reqtable} -\end{omgroup} -\end{module} - -\begin{omgroup}{Conclusion} - \begin{omtext} - See, it was quite simple - \end{omtext} -\end{omgroup} -\end{document} -\input{rest} - -%%% Local Variables: -%%% mode: latex -%%% TeX-master: t -%%% End: - diff --git a/Master/texmf-dist/doc/latex/stex/sproof/README b/Master/texmf-dist/doc/latex/stex/sproof/README deleted file mode 100644 index 0b2a9844ec0..00000000000 --- a/Master/texmf-dist/doc/latex/stex/sproof/README +++ /dev/null @@ -1,11 +0,0 @@ -sproof.sty: An Infrastructure for Structural Markup for Proofs - -This package supplies macros and environment that allow to annotate the structure of -mathematical proofs. This structure can be used by MKM systems for added-value services, -either directly from the sTeX sources, or after translation via the LaTeXML system. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at https://svn.kwarc.info/repos/stex/trunk/sty/stex/sproof diff --git a/Master/texmf-dist/doc/latex/stex/sproof/sproof.pdf b/Master/texmf-dist/doc/latex/stex/sproof/sproof.pdf deleted file mode 100644 index 28f43dfe3e7..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/sproof/sproof.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/sref/README b/Master/texmf-dist/doc/latex/stex/sref/README deleted file mode 100644 index 457691747cd..00000000000 --- a/Master/texmf-dist/doc/latex/stex/sref/README +++ /dev/null @@ -1,10 +0,0 @@ -sref.sty: A LaTeX Package for semantic crossreferences - -This package and class supplies a the infrastructure for crossreferencing across multiple files - -Copyright (c) 2009 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at https://svn.kwarc.info/repos/stex/trunk/sty/stex/sref - diff --git a/Master/texmf-dist/doc/latex/stex/sref/book.pdf b/Master/texmf-dist/doc/latex/stex/sref/book.pdf deleted file mode 100644 index f616243640d..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/sref/book.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/sref/book.tex b/Master/texmf-dist/doc/latex/stex/sref/book.tex deleted file mode 100644 index f2f6d5d0c0d..00000000000 --- a/Master/texmf-dist/doc/latex/stex/sref/book.tex +++ /dev/null @@ -1,18 +0,0 @@ -\documentclass{book} -\usepackage{omtext,omdoc} -\title{Advanced Crossreferencing in {\LaTeX}} -\author{Elder Researcher (ed.)} -\usepackage{hyperref} -\begin{document} -\maketitle -\tableofcontents -\newpage -\chapter{Semantic Crossreferencing (Jane Doe, ...)} -\input{idcmain}\newpage -\chapter{Inter-Document Crossreferencing (John Bull, ...)} -\input{scrmain} -\end{document} -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: t -%%% End: diff --git a/Master/texmf-dist/doc/latex/stex/sref/idc.pdf b/Master/texmf-dist/doc/latex/stex/sref/idc.pdf deleted file mode 100644 index c3d51b8e7ff..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/sref/idc.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/sref/idc.tex b/Master/texmf-dist/doc/latex/stex/sref/idc.tex deleted file mode 100644 index f85a3413758..00000000000 --- a/Master/texmf-dist/doc/latex/stex/sref/idc.tex +++ /dev/null @@ -1,21 +0,0 @@ -\documentclass[extrefs]{omdoc} -\usepackage{omtext} -\makeextrefs{idc} -\inputrefs{scr}{scr} -\extrefstyle{scr}{\cite[\protect{\theextref}]{scrcit}} -\title{Inter-Document Crossreferencing} -\author{John Bull} -\usepackage{hyperref} -\begin{document} -\maketitle\newpage -\input{idcmain}\newpage -\begin{thebibliography}{SCR} -\bibitem[SCR]{scrcit} -Jane Doe\newblock \href{scr.pdf}{Semantic Crossreferencing}\newblock Personal communication. -\end{thebibliography} -\end{document} - -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: t -%%% End: diff --git a/Master/texmf-dist/doc/latex/stex/sref/scr.pdf b/Master/texmf-dist/doc/latex/stex/sref/scr.pdf deleted file mode 100644 index dae710266c8..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/sref/scr.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/sref/scr.tex b/Master/texmf-dist/doc/latex/stex/sref/scr.tex deleted file mode 100644 index 16b35003027..00000000000 --- a/Master/texmf-dist/doc/latex/stex/sref/scr.tex +++ /dev/null @@ -1,20 +0,0 @@ -\documentclass[extrefs]{omdoc} -\usepackage{omtext} -\makeextrefs{scr} -\inputrefs{idc}{idc} -\extrefstyle{idc}{\cite[\protect{\theextref}]{idccit}} -\title{Semantic Crossreferencing} -\author{Jane Doe} -\usepackage{hyperref} -\begin{document} -\maketitle -\input{scrmain} -\begin{thebibliography}{IDC} -\bibitem[IDC]{idccit} -John Bull\newblock \href{scr.pdf}{Inter-Document Crossreferencing}\newblock Personal communication -\end{thebibliography} -\end{document} -%%% Local Variables: -%%% mode: LaTeX -%%% TeX-master: t -%%% End: diff --git a/Master/texmf-dist/doc/latex/stex/sref/sref.pdf b/Master/texmf-dist/doc/latex/stex/sref/sref.pdf deleted file mode 100644 index 1cb747475d1..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/sref/sref.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/statements/README b/Master/texmf-dist/doc/latex/stex/statements/README deleted file mode 100644 index fe5c2dbbe9c..00000000000 --- a/Master/texmf-dist/doc/latex/stex/statements/README +++ /dev/null @@ -1,10 +0,0 @@ -statements.sty: A LaTeX Package for mathematical Statements - -This package and class supplies a the infrastructure for writing OMDoc statements -(see http://www.omdoc.org) in LaTeX. - -Copyright (c) 2008 Michael Kohlhase -The package is distributed under the terms of the LaTeX Project Public License (LPPL) - -See http://trac.kwarc.info/sTeX for the project homepage, the development version -of this package can be found at https://svn.kwarc.info/repos/stex/trunk/sty/stex/ diff --git a/Master/texmf-dist/doc/latex/stex/statements/statements.pdf b/Master/texmf-dist/doc/latex/stex/statements/statements.pdf deleted file mode 100644 index 031b5a52334..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/statements/statements.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/stex/stex.pdf b/Master/texmf-dist/doc/latex/stex/stex.pdf deleted file mode 100644 index 8e8b19b4844..00000000000 Binary files a/Master/texmf-dist/doc/latex/stex/stex.pdf and /dev/null differ diff --git a/Master/texmf-dist/source/latex/stex/bin/Makefile b/Master/texmf-dist/source/latex/stex/bin/Makefile deleted file mode 100644 index c603315a964..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -all: - -clean: - rm -f *~ - diff --git a/Master/texmf-dist/source/latex/stex/bin/Modparse.pm b/Master/texmf-dist/source/latex/stex/bin/Modparse.pm deleted file mode 100644 index 3c4cc8c9dd4..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/Modparse.pm +++ /dev/null @@ -1,189 +0,0 @@ -####################################################################################### -# A module for loading .tex files and feeding the data to the various applications. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/Modparse.pm$ # -# $Date: 2005-09-26 12:44:28 -0500 (Mon, 26 Sep 2005) $ $Rev: 4243 $ # -####################################################################################### - -package Modparse; - -use File::Basename; -use File::Path; - -# if both snippath and snippathList are specified, -# snippathList is ignored ! - -# if a default snippath definition file is found -# (snippath.def) it is used if no snippath is given -# as argument; -sub new { - my ($class, %options) = @_; - - $options{recursion} = 1 unless defined $options{recursion}; - $options{requireStatus} = 'include|exclude' unless defined $options{requireStatus}; - $options{loadInputs} = 1 unless defined $options{loadInputs}; - $options{onlyModuleLines} = 0 unless defined $options{onlyModuleLines}; - - if ( !(%{$options{snippath}}) && (-e "snippath.def") ) { - open(SNIPPATHDEF, 'snippath.def'); - my @snlist = ; - close(SNIPPATHDEF); - for (my $i = 0 ; $i <= $#snlist; $i++) { chomp($snlist[$i]); } - %{$options{snippath}} = @snlist; } - @{$options{snippathList}} = keys(%{$options{snippath}}) - if ($options{snippath} && %{$options{snippath}}); - $options{debug} = 0; - - bless(\%options, $class); } - -sub execute{ - my ($self, $file) = @_; - - local *run_event = sub { - my ($event, $arg) = @_; - if ($self->{$event}) { $self->{$event}($arg); } - }; - - local *go = sub { - my ($location, %param) = @_; - my ($tex, $path, @tex_data) = $self->readLocation($location); - return unless @tex_data; - my $NL = $#tex_data+1; - - $param{filename} = $tex; - $param{depth}++; - $param{filecount}++; - my $i = 0; - - $param{nextline} = sub { $tex_data[++$i]; }; - $param{prevline} = sub { $tex_data[--$i]; }; - $param{rewriteline}= sub { $tex_data[$i] = $_[0]; }; - - print "Processing $tex...\n" if $self->{verbose}; - run_event('onBeginFile', \%param); - - while ($i<$NL){ - $param{original} = $tex_data[$i]; - $_ = $tex_data[$i]; chomp; /([^%]*)((%.*)?)/; - ($param{tex}, $param{comment}) = ($1, $2); $_ = $1; - s/\s+//g; $param{simple_tex} = $_; - - if (/\\begin\{module\}(\[([^\]]*)\])?/) { - if ($param{in_module}) { - push(@{$param{module_stack}}, [$param{module_id}, $param{module_arg}]); } - $param{in_module} = 1; - $param{module_args} = $1 ? $2 : undef; - $param{module_id} = ($param{module_args} && - $param{module_args} =~ /id=([^\],]+)/) ? $1 : undef; - $param{module_nesting}++; - run_event('onBeginModule', \%param); } - - if (/\\end\{module\}/) { - run_event('onEndModule', \%param); - if ($#{$param{module_stack}} >= 0) { - ($param{module_id}, $param{module_args}) = @{pop(@{$param{module_stack}})}; - } else { - $param{in_module} = 0; - ($param{module_id}, $param{module_args}) = (undef, undef); } - $param{module_nesting}--; - } - - foreach my $srch_snippath(@{$self->{snippathList}}){ - $self->{snippath}{$srch_snippath} = $1 - if (/\\def\\$srch_snippath\#1\{([^\#]+)\#1\}$/); } - - if (/\\((requiremodules(\[($self->{requireStatus})\])?)|input|include)\{([^\}]+)\}/){ - my $req_filename = $5; my $req_spath = ''; my $command = $1; - my $is_require = ($command =~ /requiremodules/) ? 1 : 0; - if ($is_require || $self->{loadInputs}) { - foreach my $srch_snippath(@{$self->{snippathList}}){ - if ($req_filename =~ /\\$srch_snippath\{(.+)/){ - ($req_spath, $req_filename) = ($self->{snippath}{$srch_snippath}, $1); - last; }} - run_event('onRecurse', \%param); - if ($self->{recursion} || !$is_require) { - go($self->makeLocation($req_filename, $path, $req_spath), %param); } - } - } - run_event('onEveryLine', \%param) if ($param{in_module} || !$self->{onlyModuleLines}); - - last if (/\\end\{document\}/ && $self->{stopAtEnd}); - $i++; - } - run_event('onEndFile', \%param); - $param{depth}--; return; - }; - - my %param = (pack=>$self, perm=>$self->{_AUX_DATA}, depth=>0, filecount=>0, - in_module=>0, module_nesting=>0); - run_event('onBegin', \%param); - go($self->makeLocation($file), %param); - run_event('onEnd', \%param); - return; -} - - -# add a [.tex] extension to the filename -sub add_ext{ - my ($self, $fn, $ext) = @_; - $ext = '.tex' unless $ext; - $fn.=$ext if $fn !~ /\Q$ext\E$/; - $fn; } - -# as long as the extension is .tex, drop it -sub drop_ext{ - my ($self, $filename) = @_; - while ($filename =~ /\.tex$/){ - while ($filename !~ /\.$/ ) { chop($filename); } - chop($filename); } - $filename; } - -sub new_ext{ - my ($self, $filename, $ext) = @_; - $self->add_ext($self->drop_ext($filename), $ext); } - -# location = pointer to array of strings -# first element is filename; next are possible paths -sub makeLocation{ my $self = shift; return \@_; } - -# read a location into an array of strings -# aslo return filename and path to it (just in -# case some changes were made to it, like adding -# extension and/or relative paths) -sub readLocation{ - my ($self, $location) = @_; - - my ($filename, @paths) = @{$location}; - # try to add proper extension; - my $filename_ext = $self->new_ext($filename) unless -e $filename; - $filename = $filename_ext if $filename_ext && -e $filename_ext; - - # try search paths - if (! -e $filename){ - my $all_p = ''; - foreach my $p(@paths){ - $all_p .= $p; - $filename = $all_p.$filename and last if -e $all_p.$filename; - $filename = $p.$filename and last if -e $p.$filename; - if ($filename_ext){ - $filename = $all_p.$filename_ext and last if -e $all_p.$filename_ext; - $filename = $p.$filename_ext and last if -e $p.$filename_ext; } - }} - # don't do the same work too many times - foreach my $file(@{$self->{loadedFiles}}) - { return undef if $file eq $filename; } - - push(@{$self->{loadedFiles}}, $filename); - open(FIN, $filename) or die "Cannot open '$filename'\n"; - my @data = ; - close(FIN); - - # find path of current file - my $path = dirname($filename); - $path.='/' if ($path ne ''); - - return ($filename, $path, @data); -} - -1; diff --git a/Master/texmf-dist/source/latex/stex/bin/README b/Master/texmf-dist/source/latex/stex/bin/README deleted file mode 100644 index 6af84e42bab..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/README +++ /dev/null @@ -1,151 +0,0 @@ -msplit -"Module Split" - -Usage: - msplit [options] - -Options: - --output filename of new main .tex file; default stdout - --path path where to write the module files; - --header filename of header file to be included in all new .tex files - --verbose verbose on - --stop stop when \end{document} is found, not at EOF - --help show help screen - - -NOTE: All options '--xoption' can be replaced by '-x' as long as there is only one option starting with 'x' - -This program splits the .tex file given at input into: - one main .tex file, that includes - more .tex files, each containing one module - -The name of the new main .tex file is specified by output option. The path to the inputted -files can be specified by path. The name of one generated input file is "name of the -module it contains".tex Running on one already split file will just make a copy. Example -usage: ./msplit slides.tex -o sl.tex -p ./modules -s - -Interpretation: "Split the file slides.tex; wite the new main file as sl.tex and the -inputted files should be placed in ./modules; if path does not exist, it is automatically -created; stop when (uncommented) \end{document} is found." - - - -rf -"Reuse Factor" - -Usage: - rf [options] - -Options: - --input .tex input file. stdin by default - --stop stop when \end{document} is found, not at EOF - --verbose verbose on - --help show help screen - - -This program computes the reuse factor for the .tex document given at input. This number -represents the ratio of latex processed lines of code to actual lines contained in file -given at input. This number will always be 1 for files that have no \input or \include. - -Example usage: -./rf -v -i slides.tex -Interpretation: "Compute the reuse factor of slides.tex and show all processed files(verbose mode)." - - - -sgraph -"Slides graph [representation]" - -Usage: - sgraph [options] - -Options: - --input .tex input file; stdin by default - --output output file; out.dot by default - --format output format; .ps by default; for available formats, see dot --help - --nodot do not generate .dot file, just target format - --root the 'root' of the graph. (name of course) - --theory generate a subgraph for the theory - --sliderange only look at the given slide range; (2:16 for example) - --stop stop reading data when \end{document} is found, not at EOF - --verbose verbose on - --help show help screen - -This program generates a .dot file readable by graphviz, containing a graph of the module -usage in the .tex file given at input, optionally looking at a specific theory and/or -slide range; it also adds a dummy 'root' for the graph, so one can see where everything -starts. It then converts the .dot file to a given format (.ps by default) using graphviz -and optionally deletes the intermediary .dot file. - -Example usage: -./sgraph -i slides.tex -o graph -f ps -n -t TCN --sliderange 20:10000 -r GenCS -v - -Interpretation: "Generate the graph of slides.tex in .ps format, write it in graph.ps, do -not keep the .dot file; include only the part needed for the theory 'TCN' and in the slide -range 20 to 10000; use as root for the graph the string 'GenCS' and show all processed -files." - - -sms -?? - -Usage: - sms [options] - -Options: - --input .tex file to split; default stdin - --verbose verbose on - --stop stop when \end{document} is found, not at EOF - --help show help screen - -Generate .sms file from .tex file given at input; .sms files contain only the modules and -the macros defined within, no other text. - -Example usage: -./sms -i slides.tex -s - -Interpretation: "Generate the slides.sms file for slides.tex; Stop when \end{document} is found." - - - - -bms -"Build Module Structure" - -Usage: - bms [options] - -Options: - --input .tex file to read from - --graph if mentioned, produce the suggested module structure as - a graphviz digraph (.dot file) - --path if mentioned, produce same input file/s (including - dependencies) in specified path with suggested - module structure. - --output the new name of the main .tex file in specified path - --root if mentioned, a father module is included, so that all - other modules descend from it. generally the course name - --stop stop when \end{document} is found; default is to go on - --definitions show a list of all definitions - --verbose verbose on - --help show help screen - - -This program has the purpose of computing a default module structure, such that a module -uses another module if and only if it needs that module and does not need another -descendant of it. First, the prgram reads all necessary data from the input .tex file, -computes the minimal strictly required module usage structure, and writes it as a graphviz -digraph, and/or writes a copy of the input .tex file (and maybe inputted files by the .tex -file) with the new module structure in the given path. All paths are created if not -existing. - -Example usage: -./bms -i slides.tex -s -g - | dot -Tps > out.ps; ggv out.ps -./bms -i slides.tex -g out.dot -p ./new - -Interpretation: "Build default module structure for slides.tex and write it to out.dot; -also use the obtained module structure and copy the input file to given path with changed -module usage." - -rng2dot -Convert Relax NG Compact form to Graphviz dot file diff --git a/Master/texmf-dist/source/latex/stex/bin/TexId.pm b/Master/texmf-dist/source/latex/stex/bin/TexId.pm deleted file mode 100644 index d0f28ccbce5..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/TexId.pm +++ /dev/null @@ -1,464 +0,0 @@ -# package for handling .tex IDs - -package TexId; - -use File::Basename; -use strict; - -# error messages markers - -use constant ERR => '[X]'; # error can't be fixed - -################### 'public' members ################### - -sub new{ - my ($class, %options) = @_; - my $self = {}; - - @{$self->{ENVIRONMENTS}} = qw(module note omtext example - definition problem proof - solution program); # the environments to look at - - @{$self->{ENV_PREFIXES}} = qw(mod not txt ex def prob pf sol prg); # the prefixes for environments - - - @{$self->{ENV_DEF}} = qw(id); # environment arguments that define new environments - @{$self->{ENV_USAGE}} = qw(use uses for from); # environment arguments that - # specify usage of other environments - - # options for the class - %{$self->{OPTIONS}} = %options; - - # in case \snippath{} is encountered, prepend this to the filename - $self->{OPTIONS}{snippath} = 'snippets/' unless defined $self->{OPTIONS}{snippath}; - - - # show progress while reading data - $self->{OPTIONS}{progress} = 1 unless defined $self->{OPTIONS}{progress}; - - bless ($self, $class); -} - -# check/set list of environments to look at -sub environments{ - my ($self, $new_environments, $new_prefixes) = @_; - if (defined $new_environments and defined $new_prefixes){ - @{$self->{ENVIRONMENTS}} = split(/,/, $new_environments); - @{$self->{ENV_PREFIXES}} = split(/,/, $new_prefixes); - die "Invalid argument combination (both arguments must have same number of elements)" - if $#{$self->ENVIRONMENTS} != $#{$self->ENV_PREFIXES}; - } - else { - return (join(',', @{$self->{ENVIRONMENTS}}), join(',', @{$self->{ENV_PREFIXES}})); - } -} - -# define/read environment definition arguments -sub env_def{ - my ($self, $new_env_def) = @_; - if (defined $new_env_def){ - @{$self->{ENV_DEF}} = split(/,/, $new_env_def); - } - else { - return join(',', @{$self->{ENV_DEF}}); - } -} - -# define/read the environment usage arguments -sub env_usage{ - my ($self, $new_env_usage) = @_; - if (defined $new_env_usage){ - @{$self->{ENV_USAGE}} = split(/,/, $new_env_usage); - } - else { - return join(',', @{$self->{ENV_USAGE}}); - } -} - -# define/read the snippets path -sub snippath{ - my ($self, $new_snippath) = @_; - if (defined $new_snippath){ - $new_snippath.='/' if ($new_snippath !~ /\/$/); - $self->{OPTIONS}{snippath} = $new_snippath; - } - else { - return $self->{OPTIONS}{snippath}; - } -} - - -# check all the definitions and module usages -# in all files referenced by base file -sub parse{ - - my ($self, $basefile) = @_; - - # recursive local function to go through each file - local *run_parse = sub - { - my ($filename) = @_; - - # read current .tex file - print STDERR "Loading $filename...\n" if ($self->{OPTIONS}{progress} == 1); - $filename = $self->load_file_data($filename); - my @text = @{$self->{FILEDATA}}; - my $line_no = 0; - - # go through every line of the read file - # depends on: \requiremodules, \snippath - # ignores \end{document} - - foreach (@text){ - # delete newline character, comments and redundant white space - - $line_no++; - /([^%]*)((%.*)?)/; - $_ = $1; - s/\s+//g; - - # see if an environment that has some arguments is defined - my ($possible_env, $env_args) = (undef, undef); - ($possible_env, $env_args) = ($1, $2) if (/\\begin\{([^\}]+)\}\[([^\]]+)\]/); - - # if it is, search it through the list of environments we want to look at - if (defined $possible_env){ - foreach my $environment(@{$self->{ENVIRONMENTS}}){ - next unless ($environment eq $possible_env); - - # if we found an anvironment we want to look at, - # go through the list of arguments - $env_args = $self->swap_exterior_char(',', ';', $env_args); - foreach (split(/;/, $env_args)){ - # we want arguments of type name=value - next unless /([^=]+)=(.+)/; - my ($arg_name, $arg_value) = ($1, $2); - - # see if the argument defines an environment - foreach my $current_env_arg(@{$self->{ENV_DEF}}){ - next unless ($arg_name eq $current_env_arg); - my @to_add = split(/,/, $arg_value); - push(@{$self->{'DEF'}->{$environment}}, @to_add); - foreach my $added_element(@to_add){ - $self->{'DEF'}->{LOCATION}{$added_element}.=$line_no.':'.$filename."\n"; - } - last; - } - - # see if the argument uses an environment - foreach my $current_env_arg(@{$self->{ENV_USAGE}}){ - next unless ($arg_name eq $current_env_arg); - my @to_add = split(/,/, $arg_value); - push(@{$self->{'USE'}->{$environment}}, @to_add); - foreach my $added_element(@to_add){ - $self->{'USE'}->{LOCATION}{$added_element}.=$line_no.':'.$filename."\n"; - } - last; - } - } - last; - } - } - # reference to another file - if (/\\requiremodules(\[(include|exclude)\])?\{([^\}]+)\}/){ - if (defined $2 && $2 eq 'include'){ - $_ = $3; - $_ = $self->{OPTIONS}{snippath}.$1 if (/\\snippath\{(.+)/); - $_ = $self->{path}.$_; - run_parse($_); - } - } - - # see definition of snippath - $self->snippath($1) if (/\\def\\snippath\#1\{([^\#]+)\#1\}$/); - } - }; - - run_parse($basefile); - -} - -# this is the first checking step to be done -sub check_uniq{ - - my ($self) = @_; - - my $error = 0; - - # sort environment definitions and see whether they are uniquely defined - foreach my $environment(@{$self->{ENVIRONMENTS}}){ - next unless defined $self->{'USE'}->{$environment}; - - my @list1 = sort @{$self->{'DEF'}->{$environment}}; - my @list2 = $self->uniq(@list1); - @{$self->{'DEF'}->{$environment}} = @list2; - - # some environments are defined multiple times - if ($#list1 != $#list2){ - my $j = 0; - for (my $i = 0; $i<=$#list2; $i++){ - my $start_j = $j; - while ($j<=$#list1 && $list1[$j] eq $list2[$i]){ - $j++; - } - if ($j - $start_j != 1){ - print STDERR ERR, " Environment '$list2[$i]' is defined multiple times ", - "within same environment type: \n"; - print STDERR $self->{'DEF'}->{LOCATION}{$list2[$i]}, "\n"; - $error = 1; - } - } - } - } - - # see that all environment references are unique (and sort them) - foreach my $environment(@{$self->{ENVIRONMENTS}}){ - next unless defined $self->{'USE'}->{$environment}; - @{$self->{'USE'}->{$environment}} = sort $self->uniq(@{$self->{'USE'}->{$environment}}); - } - - return $error; -} - -sub check_prefix{ - - my ($self) = @_; - - my $count = $#{$self->{ENVIRONMENTS}}+1; - - for (my $i = 0; $i < $count; $i++){ - my $environment = ${$self->{ENVIRONMENTS}}[$i]; - my $envprefix = ${$self->{ENV_PREFIXES}}[$i]; - next unless defined $self->{'DEF'}->{$environment}; - - foreach my $elem (@{$self->{'DEF'}->{$environment}}){ - - my $proper = undef; - if ($elem =~ /^([^:]+):(.+)/){ - $proper = $envprefix.':'.$2 if $1 ne $envprefix; - } else { - $proper = $envprefix.':'.$elem; - } - - if (defined $proper){ - print STDERR ERR, " $environment '$elem' has no prefix ($envprefix). Add it? [ , n ]"; - my $answer = ; - chomp($answer); - if ($answer eq 'y' or $answer eq ''){ - $self->add_change('DEF', $elem, $proper); - } - } - } - } -} - - -sub check_defs{ - my ($self) = @_; - - my $error = 0; - - # combine all definitions - my @defs; - map {push(@defs, @{$self->{'DEF'}->{$_}}) if defined @{$self->{'DEF'}->{$_}}} @{$self->{ENVIRONMENTS}}; - @defs = sort @defs; - - # combine all used environments - my @uses; - map {push(@uses, @{$self->{'USE'}->{$_}}) if defined @{$self->{'USE'}->{$_}}} @{$self->{ENVIRONMENTS}}; - @uses = sort @uses; - - - # for all environments - - foreach my $used_env(@uses){ - # if used environment is not defined - if ($self->find_elem($used_env, @defs) < 0){ - # maybe it is a typo - print STDERR ERR, " '$used_env' was not found. Replace options:\n"; - foreach my $definition(@defs){ - print STDERR "\t$definition\n" if $self->edit_dist($used_env,$definition)<4; - $error = 1; - } - } - } - - return $error; -} - - -sub add_change{ - my ($self, $location, $from, $to) = @_; - if ($self->{$location}->{LOCATION}{$from} =~ /([^:]+):([^\n]+)\n/){ - push(@{$self->{CHANGE}->{$2}}, ($1, $from, $to)); - } -} - -# write the stored changes -sub apply_changes{ - my ($self) = @_; - while (my ($filename, $changes) = each %{$self->{CHANGE}}){ - $filename = $self->load_file_data($filename); - my $count = int(($#{$changes}+1)/3); - for (my $i = 0; $i<$count ; $i++){ - my ($line, $from, $to) = (${$changes}[$i*3]-1, - ${$changes}[$i*3+1], ${$changes}[$i*3+2]); - ${$self->{FILEDATA}}[$line] =~ s/\Q$from/$to/; - } - print STDERR "Writing $filename\n" if ($self->{OPTIONS}{progress} == 1); - $self->write_file_data($filename); - } -} - -sub load_file_data{ - my ($self, $filename) = @_; - - # try to give proper file extension if file is not found - $filename = $self->add_ext($self->drop_ext($filename)) unless -e $filename; - - open(FIN, $filename) or die "Cannot open $filename\n"; - @{$self->{FILEDATA}} = ; - close(FIN); - - $self->{path} = dirname($filename).'/' unless defined $self->{path}; - - return $filename; -} - -sub write_file_data{ - my ($self, $filename) = @_; - - open(FOUT, ">$filename") or die "Cannot write $filename\n"; - print FOUT @{$self->{FILEDATA}}; - close(FOUT); -} - - -################### 'protected' members ################### - -sub def_env_list{ - my ($self, $env_name) = @_; - return @{$self->{'DEF'}->{$env_name}}; -} - -sub use_env_list{ - my ($self, $env_name) = @_; - return @{$self->{'USE'}->{$env_name}}; -} - - -################### 'private' members ################### - -sub drop_ext{ - my ($self, $filename) = @_; - while ($filename =~ /\.tex$/){ - while ($filename !~ /\.$/ ) { chop($filename); } - chop($filename); - } - return $filename; -} - -sub add_ext{ - my ($self, $filename) = @_; - $filename.='.tex' if $filename !~ /\.tex$/; - return $filename; -} - -# look at $word, and swap all occurances of $char_find with -# $new_char if they are not in a {...} environment - -sub swap_exterior_char{ - my ($self, $char_find, $new_char, $word) = @_; - my @new_word = (); - my $exterior = 0; - foreach (split('', $word)){ - if ($_ eq '{'){ - $exterior++; - next; - } - - if ($_ eq '}'){ - $exterior--; - next; - } - - if ($exterior == 0 && $_ eq $char_find){ - push(@new_word, $new_char); - } - else{ - push(@new_word, $_); - } - } - return join('',@new_word); -} - -# return unique elements from a list -sub uniq{ - my ($self, @list) = @_; - my %seen = (); - my @uniqu = grep { ! $seen{$_} ++ } @list; - return @uniqu; -} - - -# binary search -sub find_elem{ - my ($self, $elem, @list) = @_; - - local *search_elem = sub - { - my ($a, $b) = @_; - my $m = int(($a + $b)/2); - return $m if $list[$m] eq $elem; - return -1 if ($a >= $b); - return ($list[$m] le $elem)?search_elem($m+1,$b):search_elem($a,$m-1); - }; - - return search_elem(0, $#list); -} - -# edit distance between two strings -# insertions, deletions, replacement, transposition -sub edit_dist{ - my ($self, $s1, $s2) = @_; - my $m = length($s1); - my $n = length($s2); - my @w1 = split(//, $s1); - my @w2 = split(//, $s2); - - # add dummy char so we can have nicer indeces - unshift(@w1, '*'); - unshift(@w2, '*'); - - # distances matrix - my @d; - - # initialize - $d[0][0] = 0; - for (my $i = 1; $i <= $m ; $i++) { $d[$i][0] = $i;} - for (my $i = 1; $i <= $n ; $i++) { $d[0][$i] = $i;} - - # compute - for (my $i = 1; $i <= $m ; $i++){ - for (my $j = 1; $j <= $n ; $j++){ - my @possibilities = ($d[$i-1][$j-1] + ($w1[$i] ne $w2[$j]), - $d[$i-1][$j] + 1, $d[$i][$j-1] + 1); - - push(@possibilities, $d[$i-2][$j-2] + 1) - if ($i>1 && $j>1 && $w1[$i] eq $w2[$j-1] && $w1[$i-1] eq $w2[$j]); - - $d[$i][$j] = $self->minimum(@possibilities); - } - } - return $d[$m][$n]; -} - -sub minimum{ - my ($self, @list) = @_; - my $result = shift(@list); - map {$result = $_ if $result ge $_} @list; - return $result; -} - - -1; diff --git a/Master/texmf-dist/source/latex/stex/bin/allgen b/Master/texmf-dist/source/latex/stex/bin/allgen deleted file mode 100755 index 4728d89ee56..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/allgen +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -if [[ -z $STEX_CONTENT_HOME ]] -then - echo "STEX_CONTENT_HOME is not set; please set it in your ~/.bashrc" - exit 1 -fi - -LIB="$STEX_CONTENT_HOME/slides/lib" -cat <<'EOF' -% this file is automatically generated by allgen -% Note: This hack is needed to make mikoslides and problems work together. -\PassOptionsToPackage{solutions,notes,pts,min}{problems} -EOF - -sed -e '/\\begin{document}/ i\ -\\usepackage{problems} -' $LIB/pre.tex | \ - grep -v '^\\def\\snippets' - -cat <<'EOF' -EOF - -for file in *.tex -do - prefix=${file%.tex} # file name without .tex suffix - [[ $prefix != "all" ]] && echo -e "\\subsection{${prefix//_/\\\\_}} \n \\input{$prefix}" # in subsection replace "_" by "\_" -done - -cat $LIB/post.tex diff --git a/Master/texmf-dist/source/latex/stex/bin/bms b/Master/texmf-dist/source/latex/stex/bin/bms deleted file mode 100755 index 52f1002c0d9..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/bms +++ /dev/null @@ -1,340 +0,0 @@ -#!/usr/bin/perl -w - -####################################################################################### -# A tool for building a default module usage structure. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/bms$ # -# $Date: 2005-10-04 10:47:41 -0500 (Tue, 04 Oct 2005) $ $Rev: 4371 $ # -####################################################################################### - -use strict; - -use Getopt::Long; -use File::Path; -use Pod::Usage; -use Modparse; - - -########################################## -# Command Line processing -########################################## - -my $input="-", my $graph_output='', my $graph_root='', -my $verbose=0, my $stop_at_end=0; -my $show_definitions=0, my $show_modules = 0; -my %arg_snippath; my @snippathList; - -$main::path_new=''; -$main::new_name=''; - -GetOptions("path=s" => \%arg_snippath, - "defpath=s" => \@snippathList, - "graph=s" => \$graph_output, - "opath=s" => \$main::path_new, - "output=s" => \$main::new_name, - "root=s" => \$graph_root, - "definitions" => sub {$show_definitions = 1;}, - "modules" => sub {$show_modules = 1;}, - "stop" => sub {$stop_at_end = 1;}, - "verbose" => sub {$verbose = 1;}, - "help" => sub {pod2usage(2);}); - -$input = $ARGV[0] if ($#ARGV>=0); - -########################################## -# .tex data reading -########################################## - -$main::no_name_modules = 0; -%main::definition_module = (); -@main::definitions_list = (); - -%main::module_definitions = (); -%main::used_modules = (); -@main::modules_list = (); - -my $mp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - requireStatus=>'exclude', - onlyModuleLines=>1, - onBeginModule=>sub { - if (!defined $_[0]->{module_id}) { - $_[0]->{module_id} = "MOD".$main::no_name_modules; - $main::no_name_modules++; } - $_[0]->{defines} = ''; - }, - onEveryLine=>sub { - if ($_[0]->{simple_tex} =~ /\\(sym|abbr|ell)def\{\\([^\}]+)\}/) { - my $data = $2; - $_[0]->{defines} .= "$data;"; - $main::definition_module{$data} = $_[0]->{module_id}; - push(@main::definitions_list, $data); - } elsif ($_[0]->{simple_tex} =~ /\\STRlabel\{([^\}]*)\}/){ - my $data = "L:$1"; - $_[0]->{defines} .= "$data;"; - $main::definition_module{$data} = $_[0]->{module_id}; - push(@main::definitions_list, $data); - } - $_[0]->{module_content} .= $_[0]->{simple_tex}; - }, - onEndModule=>sub { - chop($_[0]->{defines}) if $_[0]->{defines}; - $main::module_definitions{$_[0]->{module_id}} = $_[0]->{defines}; - push(@main::modules_list, $_[0]->{module_id}); - my $module_refs = ''; - foreach my $def(@main::definitions_list){ - next if $main::definition_module{$def} eq $_[0]->{module_id}; - next unless $module_refs !~ /$main::definition_module{$def}/; - if ($def =~ /^L\:(.*)/){ - $module_refs .= "$main::definition_module{$def};" - if ($_[0]->{module_content} =~ /\\STRcopy\{$1\}/); - } else { - $module_refs .= "$main::definition_module{$def};" - if ($_[0]->{module_content} =~ /\\$def/); - } - } - chop($module_refs) if $module_refs; - $main::used_modules{$_[0]->{module_id}} = $module_refs; - }); - -################################################################## -# Internal routines for BMS -################################################################## - -%main::bms = (); - -# add a dummy module that uses nothig, such that any other module uses at least something -sub addroot { - foreach my $module(@main::modules_list){ - next if $main::used_modules{$module}; - $main::used_modules{$module} = $graph_root; - } - push(@main::modules_list, $graph_root); - $main::module_definitions{$graph_root}=''; - $main::used_modules{$graph_root}=''; -} -# end addroot - -sub included { - my ($a1_ref, $a2_ref) = @_; - my $ok; - foreach my $elem (@$a1_ref){ - $ok = 0; - foreach (@$a2_ref){ - if ($elem eq $_){ - $ok=1; - last; }} - return 0 unless $ok;} - return 1; -} - -# find if a module uses another module -sub can_go{ - my ($src,$dest) = @_; - return 1 if $src eq $dest; - foreach (split(/;/, $main::bms{$src})){ - return 1 if can_go($_,$dest); - } - return 0; -} -# end can_go - -# find the actual module structure -sub find_bms{ - my @added_modules, my @can_add, my @to_look, my @next_step; - - %main::bms=(); - @to_look = @main::modules_list; - @added_modules = (); - - while($#main::modules_list != $#added_modules){ - - @can_add=(); @next_step=(); - - foreach my $module(@to_look){ - my @temp = split(/;/, $main::used_modules{$module}); - included(\@temp,\@added_modules)?push(@can_add,$module):push(@next_step,$module); - } - @to_look = @next_step; - - foreach my $module(@can_add){ - - my @uses = split(/;/,$main::used_modules{$module}); - my $change = 1; - while ($change){ - $change = 0; - foreach my $f1(@uses){ - foreach my $f2(@uses){ - next if $f1 eq $f2; - if (can_go($f1,$f2)){ # i.e. f2 used by f1 => can remove f2 - my @new_uses; - foreach (@uses){ - push(@new_uses,$_) unless ($_ eq $f2); - } - @uses = @new_uses; - $change = 1; - last; - } - } - last if $change; - } - } - $main::bms{$module} = join(";",@uses); - push(@added_modules,$module); - } - } -} -# end find_bms - -# print the content of %bms in a .dot file; note: may change %bms by adding dummy root -sub printgraph { - my $out = shift; - - addroot if $graph_root; - - open(FOUT,">$out") or die "Can't write $out\n"; - print FOUT "digraph MS {\n"; - while (my ($module, $uses) = each %main::bms){ - $uses =~ s/-/_/g; - $module =~ s/-/_/g; - if ($uses){ - if ($uses =~ /;/){ - print FOUT "$module -> {$uses};\n"; - } else { - print FOUT "$module -> $uses;\n"; - } - } else { - print FOUT "$module [shape=box color=red];\n"; - } - } - print FOUT "}\n"; - close(FOUT); -} -# end printgraph - -# print the list of definitions -sub printdefinitions{ - while (my ($module,$def) = each %main::module_definitions){ - print "$module:\n" if $def; - foreach (split(/;/,$def)){ - print "\t$_\n"; - } - }} -# end printdefinitions - -#print the list of modules -sub printmodules{ - while (my ($module,$uses) = each %main::used_modules){ - print "'$module' uses:\n $uses\n\n\n"; - }} -#end printmodules - - -# wite the new .tex file, with found module usage, in given path -sub writenew { - my ($filename) = @_; - $main::no_name_modules = 0; - my $wmp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - requireStatus=>'exclude', - onlyModuleLines=>0, - onBeginFile=> sub { - $_[0]->{'new_content'.$_[0]->{depth}} = ''; - }, - onBeginModule=>sub { - if (!defined $_[0]->{module_id}) { - $_[0]->{module_id} = "MOD".$main::no_name_modules; - $main::no_name_modules++; } - my $new_uses = $main::bms{$_[0]->{module_id}}; - if (defined $new_uses) { - $new_uses =~ s/;/,/g; - $new_uses="{$new_uses}" if $new_uses =~ /,/; - my $arg = $_[0]->{module_args}; - my @new_arg=(); - my $done = 0; - while ($arg =~ /^([\w-]+)=(([\w-]+)|(\{[\w,-]+\}))/){ - if ($1 eq 'uses'){ - push(@new_arg,"$1=$new_uses")if $new_uses; - $done = 1; - } else { - push(@new_arg,"$1=$2"); - } - $arg=substr($arg,length($1)+length($2)+1); - $arg=substr($arg,1) if ($arg =~ /^,/); - } - if ($new_uses) { - push(@new_arg,"uses=$new_uses") unless $done; } - $_[0]->{original} = "\\begin{module}\[".join(',',@new_arg)."\] ". $_[0]->{comment}. "\n"; - } - }, - onEveryLine=>sub { - $_[0]->{'new_content'.$_[0]->{depth}} .= $_[0]->{original}; - }, - onEndFile=> sub { - my $filename = ($main::path_new).'/'.$_[0]->{filename}; - my $path = $filename; - while ($path !~ m!\/$!) { chop($path); } - mkpath($path); - $filename = $path.'/'.$main::new_name if ($main::new_name && $_[0]->{depth} == 1); - print "Writing $filename\n" if $_[0]->{pack}->{verbose}; - open(FS, ">$filename") or die "Cannot write $filename\n"; - print FS $_[0]->{'new_content'.$_[0]->{depth}}; - close(FS); - }); - - $wmp->execute($filename); -} - - -############################################################# -# Start program -############################################################# - -$mp->execute($input); - -printdefinitions if $show_definitions; -printmodules if $show_modules; - -if ($graph_output || $main::path_new){ - find_bms; - writenew($input) if $main::path_new; - printgraph($graph_output) if $graph_output; -} - -__END__ - - -=head1 SYNOPSIS - -bms [options] - -Options: - - --path XXX specify the value of \XXX (some snippath) in case it is - = somePath not defined in the processed .tex file - --defpath XXX specify which \XXX (snippath definitions) to look for - --graph if mentioned, produce the suggested module structure as - a graphviz digraph. (.dot file) - --opath if mentioned, produce same input file/s (including - dependencies) in specified path with suggested - module structure. - --output the new name of the main .tex file in specified path. - --root if mentioned, a father module is included, so that all - other modules descend from it. generally the course name. - --stop stop when \end{document} is found; default is to go on. - --definitions show a list of all definitions. - --modules show a list of all modules. - --verbose verbose on. - --help this screen. - - - This program has the purpose of computing a default module structure, according -to actual necessities. - Example: - ./bms -i slides.tex -g out.dot - ./bms -i slides.tex -s -g - | dot -Tps > out.ps; ggv out.ps diff --git a/Master/texmf-dist/source/latex/stex/bin/checksum b/Master/texmf-dist/source/latex/stex/bin/checksum deleted file mode 100755 index 9f0e533a8d4..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/checksum +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/perl -w -####################################################################################### -# A tool for updating .dtx files with a correspodning checksum counter # -# Copyright (c) 2010, Deyan Ginev, released under the Gnu General Public License (GPL)# -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: https://svn.kwarc.info/repos/stex/trunk/bin/checksum$ # -####################################################################################### - -use strict; - -use Getopt::Long; -use Modparse; -use Pod::Usage; -use Cwd qw(abs_path); - -####### start of program ####### -my $mode = "update"; #Default is update -my $action = { "update" => \&update, "disable" => \&disable, "enable"=>\&enable }; -GetOptions("disable" => sub { $mode="disable"; }, - "enable" => sub { $mode="enable"; }, - "update" => sub { $mode="update"; }); - - -my ($path) = @ARGV; -$path = abs_path($path); -my ($volume,$dir,$file) = File::Spec->splitpath( $path ); -my @lines = `cd $dir; pdflatex "\\nonstopmode\\input{$file}"` if ($mode eq "update"); -my ($checksum) = map {$_=~/^\* The checksum should be (\d+)!/; $1;} grep ($_ =~ /^\* The checksum should be (\d+)!/,@lines) if @lines; -if (!$checksum) { -#One more possible error message: - ($checksum) = map {$_=~/^! Package doc Error: Checksum not passed \((\d+)<>(\d+)\)\./; $2;} grep ($_ =~ /^! Package doc Error: Checksum not passed \((\d+)<>(\d+)\)\./,@lines) if @lines; -} -open(IN,"<$path") or die "Cannot open DTX source: $path\n"; -@lines = (); -while () { - push @lines, &{$$action{$mode}}($_,$checksum); -} -close(IN); -open(OUT,">$path") or die "Cannot write to DTX target: $path\n"; -print OUT join("",@lines); -close(OUT); -######### Subroutines ############ -sub update { - my $checksum=$_[1]; - $_[0]=~s/\\CheckSum\{\d*\}/\\CheckSum{$checksum}/ if $checksum; - $_[0]; -} - -sub disable { - $_[0]=~s/\\CheckSum\{(\d*)\}/\\iffalse\\CheckSum\{$1}\\fi/ unless $_[0]=~/\\iffalse\\CheckSum\{(\d*)\}\\fi/; - $_[0]; -} - -sub enable { - $_[0]=~s/\\iffalse\\CheckSum\{(\d*)\}\\fi/\\CheckSum{$1}/; - $_[0]; -} - - -__END__ - - -=head1 SYNOPSIS - -checksum --update|enable|disable - -Purpose: - Update, enable or disable the \CheckSum macro for a given .dtx source - -Example: - checksum omd.dtx --update diff --git a/Master/texmf-dist/source/latex/stex/bin/convert-paths b/Master/texmf-dist/source/latex/stex/bin/convert-paths deleted file mode 100755 index 55ee72a2370..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/convert-paths +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/perl -w -# -# A script that converts paths in sTeX files from the old \Foosnipppath{bar} -# to \snippets{foo/bar}, according to the definition of those path macros in -# paths.sty. -# -# Syntax: convert-paths path/to/paths.sty FILES -# -# © 2008 Christoph Lange, KWARC, Jacobs University - -use File::Copy; - -my %map; - -my $SNIPPATHRE = '\\\\[[:alnum:]]+(?i:snip|pic)path'; - -if (open(P, shift(@ARGV))) { - print STDERR "Mapping:\n"; - while (

) { - if (/^\\def($SNIPPATHRE)#1\{(\\KWARCslides\{[^#]+)#1\}/o) { - printf STDERR "\t%s -> %s\n", $1, $2; - $map{$1} = $2; - } - } - close(P); -} -else { - die "Could not open paths.sty"; -} - -print STDERR "Processing files:\n"; -while ($#ARGV >= 0) { - my $filename = shift(@ARGV); - print STDERR "\t$filename\n"; - copy($filename, "$filename~") || print STDERR "\t\tWARN: could not create backup\n"; - if (open(T, $filename)) { - # slurp the file into a string - local $/; - $data = ; - $data =~ s/($SNIPPATHRE)\{([^}]+)\}/ - $map{$1} ? "$map{$1}$2\}" - : ((print STDERR "\t\tWARN: could not replace $1\n"), "$1\{$2}") - /oxge; - close T; - if (open(T, ">$filename")) { - print T $data; - close T; - } - else { - print STDERR "\t\tWARN: could not save replacement\n"; - } - } - else { - print STDERR "\t\tWARN: could not open file\n"; - } -} diff --git a/Master/texmf-dist/source/latex/stex/bin/filedate b/Master/texmf-dist/source/latex/stex/bin/filedate deleted file mode 100755 index 8149b5e57bd..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/filedate +++ /dev/null @@ -1,42 +0,0 @@ -#!/usr/bin/perl -w -####################################################################################### -# A tool for updating .dtx files with a given package date. # -# Copyright (c) 2010, Deyan Ginev, released under the Gnu General Public License (GPL)# -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: https://svn.kwarc.info/repos/stex/trunk/bin/filedate$ # -####################################################################################### - -use strict; - -use Getopt::Long; -use Modparse; -use Pod::Usage; -use Cwd qw(abs_path); - -my ($file,$date) = @ARGV; -$file = abs_path($file); -open(IN,"<$file"); -my @lines = (); -while () { - if ($_ =~ /\\Provides(Package|Class)/) { - $_ =~ s/\[(.*?)\s/\[$date /; - } - push @lines, $_; -} -close(IN); -open(OUT,">$file"); -print OUT join("",@lines); -close(OUT); - -__END__ - - -=head1 SYNOPSIS - -filedate - -Purpose: - Update the dates for a \ProvidePackage invocation in a given .dtx source - -Example: - filedate omdoc.dtx "2010/06/24" diff --git a/Master/texmf-dist/source/latex/stex/bin/gen-symdef-table.pl b/Master/texmf-dist/source/latex/stex/bin/gen-symdef-table.pl deleted file mode 100755 index cd6da0dc06a..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/gen-symdef-table.pl +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/perl -use Cwd; - -die 'Set your environment variable "KWARC_HOME" and try again.' if !($ENV{KWARC_HOME}); - -open(PATH_STY,"$ENV{KWARC_HOME}/projects/stex/sty/paths.sty") || die "can't open path.sty"; -while ($line=) { - $line =~ m/\\def\\(\w*).*\/([\w-]*)\/#1/; - $macros{$2}=$1; # dir -> macro -} -close(PATH_STY); - -print <) { - $dir = substr($dir,0,-1); - if (@ARGV){ # take all dirs listet in @ARGV - next if !(grep(/$dir/,@ARGV)) - } else { # take all dirs but those listed here - # next if $dir lt "b"; #test break - # next if $dir gt "comb"; #test break - next if grep(/$dir/,qw(PIC activemath admin eLearning lib kwarc mathweb mbase old.assignments omdoc openmath physml quantumcomputing sTex search semweb setthy spl1 term-indexing trs varia xml)); #skip these - next if grep(/$dir/,qw(ai codeml fa graphs-trees kr mws nlfrags pl0 pl1 prolog regexp)); #broken dirs - } - print "\\begin{omgroup}{$dir}\n"; - foreach $file (<${dir}/en/*.sms>) { - $file =~ m/([^\/]*).sms/; - $prefix = $1; - next if grep(/$prefix/,qw(all admin)); - print "\\begin{omgroup}{$prefix}\n"; - print "\\requiremodules[exclude]{\\$macros{$dir}\{en/$prefix}\}\n"; - open (FILE,"./$file") || die "can't open $file"; - while ($line=) { - $line =~ s/%.*//; - if ($line =~ m/begin{module}/) { # many "begin{module}" in one line yields invalid stex!!! - $uses = ($line =~ m/id=([\w-]*)/) ? "[uses=$1]" : ""; - print "\\begin{module}$uses\n"; # symbols after inner modules yields stex errors!!! - print "\\begin{verbatim}\n"; - print "\\requiremodules[exclude]{\\$macros{$dir}\{en/$prefix}\}\n"; - print "\\begin{module}$uses\n"; - print "\\end{verbatim}\n"; -# print "\\begin{multicols}{2}\n"; - } - if ($line =~ m/\\symdef{([^}]*)}(?:\[(\d)\])?({\\assoc\[)?/) { - $symb = $1; - $arity = $2; - $isAssoc = $3 ne ""; - $defArity = $isAssoc ? 4 : $arity; - $exampleArity = $arity eq "" ? 0 : $defArity; - $arityOrAssoc = $isAssoc ? "assoc" : $arity; - $dummy_args = join("",map {"{$_}"} (qw(a b c d e f g h m)[0..$exampleArity-1])); - $dummy_args = "{a,b,c,d}" if $isAssoc; - $escaped_dummy_args = $dummy_args; - $escaped_dummy_args =~ s/{/\\{/g; - $escaped_dummy_args =~ s/}/\\}/g; -# print "{\\tt{$symb\[$arityOrAssoc\]}} $escaped_dummy_args\\hfill"; - print "{\\tt{$symb$escaped_dummy_args}} \\hfill "; - print "\$\\$symb$dummy_args\$\\\\\n"; - } - if ($line =~ m/end{module}/) { # several "end{mdoule}" allowed!!! -# print "\\end{multicols}\n"; - print $line; - } - } - close(FILE); - print "\\end{omgroup}\n"; - } - print "\\end{omgroup}\n"; -} - -print "\\end{document}"; diff --git a/Master/texmf-dist/source/latex/stex/bin/grep-rerun b/Master/texmf-dist/source/latex/stex/bin/grep-rerun deleted file mode 100755 index f73ef082fbb..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/grep-rerun +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/perl -w -####################################################################################### -# A tool for updating .dtx files with a correspodning checksum counter # -# Copyright (c) 2010, Deyan Ginev, released under the Gnu General Public License (GPL)# -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: https://svn.kwarc.info/repos/stex/trunk/bin/gre-rerun$ # -####################################################################################### - -use strict; - -use Getopt::Long; -use Pod::Usage; -use File::Spec; -use Cwd qw(abs_path); - -####### start of program ####### -my ($errlog,$pattern)=@ARGV; -my %rerun_set = (); -open(IN,"<",$errlog); -my ($errvol,$errdir)=File::Spec->splitpath($errlog); -my $currpath=abs_path($errdir); -while () { - #Entering, update path - if (/^Entering (.+)$/) { - $currpath.="/$1"; - } - #Leaving, update path - elsif (/^Leaving (.+)$/) { - $currpath =~ s/(\/$1)$//; - } - #Matching error, note source - elsif (/$pattern/) { - my ($name) = split(/:/,$_); - ($name) = split(/\./,$name); - $rerun_set{$currpath."/".$name.".tex"}=1; - } -} -#Perform rerun of affected sources: -print STDERR scalar(keys %rerun_set)." sources to rerun:\n"; -foreach (sort keys %rerun_set) { - my ($vol,$dir,$file) = File::Spec->splitpath( $_ ); - print STDERR "Trying $_\n"; - $file=~s/\.tex$/.omdoc/; - print STDERR `cd $dir; make $file -B`; -} -close(IN); - - -__END__ - - -=head1 SYNOPSIS - -grep-rerun - -Purpose: - Given an error log file, generated via the sTeX Makefiles, and an error pattern, fetches and reconverts all sources that suffered this error. -Example: - grep-rerun latex.errlog "Fatal:" diff --git a/Master/texmf-dist/source/latex/stex/bin/idcheck b/Master/texmf-dist/source/latex/stex/bin/idcheck deleted file mode 100755 index d832ac7788e..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/idcheck +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/perl -w -use strict; - -use Getopt::Long; -use File::Path; -use Pod::Usage; -use TexId; - - - -my $tex = TexId->new(progress => 1); - - - -$tex->load_file_data('../GenCS/notes.tex'); - -my ($a, $b) = $tex->environments(); -print $b, "\n"; - -print $tex->snippath(), "\n"; - -$tex->parse('../GenCS/notes.tex'); -#print join(', ', $tex->use_env_list('omtext')), "\n"; - -#print $tex->edit_dist('anaIU', 'aanUI'), "\n"; - -$tex->check_uniq; -$tex->check_prefix; -$tex->apply_changes; diff --git a/Master/texmf-dist/source/latex/stex/bin/msplit b/Master/texmf-dist/source/latex/stex/bin/msplit deleted file mode 100755 index cf178ce9b5f..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/msplit +++ /dev/null @@ -1,140 +0,0 @@ -#!/usr/bin/perl -w -############################################################################################## -# Program: msplit (a utility for splitting STeX documents along module boundaries) -############################################################################################## -# $URL: svn://kwarc.faculty.iu-bremen.de/kohlhase/kwarc/projects/content/bin/msplit$ -# $Rev: 3722 $; last modified by $Author: $ -# $Date: 2005-07-27 03:22:19 +0200 (Wed, 27 Jul 2005) $ -# Copyright (c) 2005 Ioan Sucan -############################################################################################## -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License [http://www.gnu.org/copyleft/gpl.html] -# for more details. -############################################################################################## -use strict; -use Getopt::Long; -use File::Path; -use Pod::Usage; - -my $input='-', my $output='-', my $path='', my $verbose=0, my $stop_at_end=0; -my $flag = "include"; -my $header='', my @hdr_data; - -sub texf { - my $fn = shift; - $fn.='.tex' if $fn !~ /\.tex$/; - return $fn; } - -sub write_file_data{ - my $filename = shift; - open(FS,$filename) or die "Cannot write $filename\n"; - print FS @_; - close(FS); } - -# remove the last component in a path -sub justpath{ - my $arg = shift; - return '' if ($arg !~ m!\/!); - while ($arg !~ m!\/$!) {chop($arg);} - return $arg; } -# end justpath - - -sub go { - my ($input, $output) = @_; - my $path = justpath($output); - - my @module_file=(); - my @out_data=(); - - print "Splitting $input...\n" if $verbose; - `mv $output $output~` if (-e $output); - $input="$input~" if ($input eq $output); - - open(FIN,$input) or die "Can't open $input\n"; - my $in_module=0; my $path_name; - foreach (){ - chomp; - /([^%]*)((%.*)?)/; - ($_,my $comment)=($1,$2); - if (/\\begin\s*\{module\}/){ - $_ =~ s/\s//g; - /id=([\w-]*)/; - my $module_name = $1; - $path_name = "$path$module_name.tex"; - print "$path_name\n" if $verbose; - `mv $path_name $path_name~` if (-e $path_name); - push(@module_file,@hdr_data) if $header; - push(@module_file,"\n$_$comment\n"); - push(@out_data,"\\requiremodules[$flag]{$module_name}\n"); - $in_module=1; - next; } - if (/\\end\s*\{module\}/){ - $_ =~ s/\s//g; - push(@module_file,"$_$comment\n"); - mkpath(justpath($path_name)); - write_file_data(">$path_name",@module_file); - $in_module=0; - next; } - if ($stop_at_end && /\\end\s*\{document\}/){ - $_ =~ s/\s//g; - push(@out_data,"$_$comment\n"); - last; } - $_="$_$comment\n"; - if ($in_module) {push(@module_file,$_);} - else {push(@out_data,$_); }} - close(FIN); - mkpath($path) if $path; - write_file_data(">$output",@out_data); } - -GetOptions("output=s" => \$output, - "path=s" => \$path, - "header=s" => \$header, - "exclude" => sub { $flag = "exclude"; }, - "verbose" => sub { $verbose=1; }, - "stop" => sub { $stop_at_end=1; }, - "help" => sub { pod2usage(2)}); - -$input = $ARGV[0] if ($#ARGV>=0); -die "Input file does not exist\n" if (! defined $input || ! -e $input); -$output = $input if (! defined $output); - -if ($header && -e $header) { - open(HDR,$header); - @hdr_data = ; - close(HDR); } - -$path.='/' if $path && $path !~ m!\/$!; -go($input,$path.$output); -print "Done.\n" if $verbose; - -__END__ - - -=head1 SYNOPSIS - -msplit [options] - -Options: - - --output filename of new main .tex file; default: same as input - --path path where to generate the new documents; '.' by default - --header file to be copied at beginning of all new module files - --exclude modules exluded by default; if not mentioned, modules - are included by default - --verbose verbose on - --stop stop when \end{document} is found; default is to go on - --help this screen - - - - This program splits a .tex file into more files, each containing a module. - Example usage: - ./msplit slides.tex -o sl.tex -p ./modules -s diff --git a/Master/texmf-dist/source/latex/stex/bin/old/Makefile b/Master/texmf-dist/source/latex/stex/bin/old/Makefile deleted file mode 100644 index d2ae41c6401..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/old/Makefile +++ /dev/null @@ -1,28 +0,0 @@ -all: src exec - -src: idcheck.l defcon.l modstr.l - flex -ft idcheck.l > idcheck.yy.c - flex -ft defcon.l > defcon.yy.c - flex -f+t modstr.l > modstr.yy.cc - -idcheck: idcheck.l - flex -f $< - gcc lex.yy.c -lfl -o idcheck - -defcon: defcon.l - flex -f $< - gcc lex.yy.c -lfl -o defcon - -modstr: modstr.l - flex -f+ $< - g++ lex.yy.cc -lfl -o modstr - -exec: idcheck.yy.c defcon.yy.c modstr.yy.cc - gcc idcheck.yy.c -lfl -o idcheck - gcc defcon.yy.c -lfl -o defcon - g++ modstr.yy.cc -lfl -o modstr - -clean: - rm -f *.yy.c *.yy.cc *~ - -distclean: clean diff --git a/Master/texmf-dist/source/latex/stex/bin/old/defcon.l b/Master/texmf-dist/source/latex/stex/bin/old/defcon.l deleted file mode 100644 index ad758086145..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/old/defcon.l +++ /dev/null @@ -1,91 +0,0 @@ -%{ - -#include - -char ltxml[100]; -char fext[6] = ".ltxml"; - -char symstr[200]; -char ltxmlstr[200]; - -int i,t,c,tmp,q; -FILE *lt; - -%} - -ID [a-zA-Z0-9._:\|-]* -NR [0-9]* - -%s idenv env sym - -%% - -"\\begin{module}"(" ")*"[" BEGIN(idenv); -"]" BEGIN(INITIAL); - -"id="{ID} { - for (i=3; i"symdef{\\"{ID}"}"(.)* { -i=7; -while (yytext[i]!='}'){ - symstr[i-7]=yytext[i]; - i++; -} -symstr[i-7]=0; -BEGIN(sym); -} - -"latexmldef{"(.)* { -i=11; -while (i"\\end{module}" { -fclose(lt); -BEGIN(INITIAL); -} - -\n c++; -. c++; - -%% - -main(argc, argv) - int argc; - char **argv; -{ - if (argc==1) { - printf("arguments expected: [-q] filename(s)\n"); - } else { - q=0; - i=1; - if (argv[1][0]=='-'){ - i++; - if (argv[1][1]=='q') q=1; - } - while (i -int ur,ok,a,lin,i,j,c,n,m,d,s,q,fe,f,for_ok,curr_lin; -typedef char idstr[50]; -idstr l[5000], r[5000]; -%} - -ID [a-zA-Z0-9._:\|-]* -WS [\n\t ]* - -%s env inenv fid foc - -%% - -"\\begin"{WS}"{"("proof"|"example")"}"{WS}"[" { -fe=1; -for_ok=0; -curr_lin=lin; -BEGIN(env); // stuff that "for" keyval is recommended for -} - -"\\begin"{WS}"{"("proof"|"example")"}" if (f) printf("Missing 'for' at line %d\n",lin); - -("\\begin"{WS}"{"("definition"|"assertion"|"proof"|"omtext"|"example"|"step"|"pfcase"|"module")"}"{WS}"[")|("\\justification"{WS}"[") { -fe=0; -BEGIN(env); -} - -"]" { -if (fe && !for_ok && f) printf("Missing 'for' at line %d\n",curr_lin); -BEGIN(INITIAL); -} - -"id"{WS}"="{WS} BEGIN(fid); - -{ID} { -for (i=0; i("for"){WS}"="{WS} { -for_ok=1; -BEGIN(foc); -} -("continues"|"for"|"uses"|"premises"){WS}"="{WS} BEGIN(foc); - -{ID} { -for (j=0; j("premises"|"uses"){WS}"="{WS}"{" BEGIN(inenv); - -{ID} { -strncpy(r[m],yytext,yyleng); -r[m][yyleng]=0; -m++; -} - -"}" BEGIN(env); - -\n {c++;lin++;} -. c++; - -%% - -main(argc, argv) - int argc; - char **argv; -{ - if (argc==1) { - printf("Usage: idcheck [-q | -s | -f] filename(s)\n"); - printf("Option -s shows all detected IDs. \n"); - printf("Option -f shows line numbers for examples and proofs\n that have 'for' keyval missing. \n"); - printf("Option -q for quiet mode.\n"); - } else{ - s=0; q=0; - a=1; - if (argv[1][0]=='-') { - a++; - for (j=1; j -#include -#include -#include -using namespace std; - - -const int indent = 4; -const char start_char = '*'; - -typedef struct { - vector defs,list; - int father; -} nodetype; - -map g; - -string vertex, data; -int d, miss, skip; - -int max(int, int); - -%} - -ID [a-zA-Z0-9._:\|-]* -SEP [,;]* -WS [\n\t ]* -M [^}]* - -%x in_module found_vertex in_module_cont mdef -%x found_one_child found_more_children - -%% - -"\\begin"{WS}"{module}"{WS}"[" BEGIN(in_module); - -"id"{WS}"=" BEGIN(found_vertex); -{ID} { -vertex = YYText(); -g[vertex].father=0; -if (miss) cout << endl << "<-------- Module '" << vertex - << "' -------->" << endl << endl; -BEGIN(in_module); -} -"uses"{WS}"=" BEGIN(found_one_child); -"{" BEGIN(found_more_children); -"}" BEGIN(in_module); -{ID} { -data=YYText(); -if (g[data].list.empty()) - g[vertex].father=g[data].father+1; -else - g[vertex].father=max(g[data].father+1,g[vertex].father); -g[data].list.push_back(vertex); -BEGIN(in_module); -} -{ID} { -data=YYText(); -if (g[data].list.empty()) - g[vertex].father=g[data].father+1; -else - g[vertex].father=max(g[data].father+1,g[vertex].father); -g[data].list.push_back(vertex); -} - -{SEP}|{WS} - -"]" BEGIN(in_module_cont); - -(.|\n) - -"\\"("symdef"|"abbrdef"|"elldef"|"aliasdef"){WS}"{"{WS} BEGIN(mdef); -{M} { -data = YYText(); -g[vertex].defs.push_back(data); -} -"}" BEGIN(in_module_cont); -"\\end"{WS}"{module}" BEGIN(INITIAL); - -(.|\n) if (miss) cout << YYText(); - -<*>{WS}(%)(.)*(\n)* - -%% - -void spc(int n){ - for(int i=0; ib?a:b; -} - -void go(map ::iterator node, int depth){ -if (skip && node->second.father!=depth) return; -spc(d); -cout << start_char << " " << node->first << "{"; -int tmp = node->second.defs.size()-1; -for (int j=0; j<=tmp; j++){ - cout << node->second.defs[j]; - if (j!=tmp) cout << ","; -} -cout << "}" << endl; -d+=indent; -for (int i=0; isecond.list.size(); i++) - go(g.find(node->second.list[i]),depth+1); -d-=indent; -} - -int main(int argc, char** argv){ -miss=0; -skip=0; -if (argc==2) - if (argv[1][0]=='-') - for (int z=1; argv[1][z]!=0; z++) - if (argv[1][z]=='m') miss=1; else - if (argv[1][z]=='s') skip=1; else - if (argv[1][z]=='h') { - cout << " Usage: modstr [-s|m|h]\n Input: stdin\n Output: stdout\n"; - cout << " Options: -s Show module usage only at the deepest level\n"; - cout << " -m Show text not within a module\n"; - cout << " -h This help screen\n"; - return 0; - } -if (miss) cout << "Text NOT within a module:\n" << endl; -FlexLexer* lex = new yyFlexLexer; -lex->yylex(); -d=0; -map ::iterator start = g.begin(); -map ::iterator stop = g.end(); -cout << endl; -for(;stop!=start;start++) - if (!start->second.father) go(start,0); -cout << endl; -return 0; -} diff --git a/Master/texmf-dist/source/latex/stex/bin/old/symdef b/Master/texmf-dist/source/latex/stex/bin/old/symdef deleted file mode 100755 index b5c789a1c72..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/old/symdef +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/perl -w - -use strict; -use Getopt::Long; -use Pod::Usage; - -my $output = "-"; -my $input = "-"; - -GetOptions("output=s",\$output); - -$input = $ARGV[0] if @ARGV; - -open(FIN,$input) or die "Can't open input file."; -open(FOUT,">$output"); - -my $line; - -while ($line=){ - if ($line !~ m/symdef/ && $line !~ m/elldef/ && $line !~ m/abbrdef/){ - print FOUT $line; - next; - } - if ($line =~ m/\}\[\d,/){ - print FOUT $line; - next; - } - - if ($line =~ m/\\(sym|abbr|ell)def\{\\([^\}]+)\}\[(\d)\]([^\n\%]+)(.*)/){ - print FOUT "\\$1def{\\$2}[$3,name=$2]$4$5\n"; - } else { - if ($line =~ m/\\(sym|ell|abbr)def\{\\([^\}]+)\}([^\n\%]+)(.*)/){ - print FOUT "\\$1def{\\$2}[0,name=$2]$3$4\n"; - } - } -} - -close(FIN); -close(FOUT); - - -__END__ - -=head1 SYNOPSIS - -symdef [--output=outputfile] [texfile] diff --git a/Master/texmf-dist/source/latex/stex/bin/rf b/Master/texmf-dist/source/latex/stex/bin/rf deleted file mode 100755 index 7de36042620..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/rf +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/perl -w - -####################################################################################### -# A tool for computing the module reuse factor for TEX files. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/rf$ # -# $Date: 2005-06-29 23:08:10 +0200 (Wed, 29 Jun 2005) $ $Rev: 3147 $ # -####################################################################################### - -use strict; -use Getopt::Long; -use Modparse; -use Pod::Usage; - -my $input = "-", my $verbose=0, my $stop_at_end=0; -my %arg_snippath; my @snippathList; - -GetOptions("path=s" => \%arg_snippath, - "defpath=s" => \@snippathList, - "verbose" => sub { $verbose=1; }, - "stop" => sub { $stop_at_end=1; }, - "help" => sub { pod2usage(2)}); - -$input = $ARGV[0] if ($#ARGV>=0); - -$main::lc1 = 0; $main::lc2 = 0; -my $mp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - onEveryLine=>sub { - $main::lc1++; - $main::lc2++ if $_[0]->{depth}==1; }); - -$mp->execute($input); -my $f = ($main::lc2>0)?$main::lc1/$main::lc2:0; -print "Reuse factor: $f\n"; - -__END__ - - -=head1 SYNOPSIS - -rf [options] - - This program computes the reuse factor for a .tex document - - Options: - --path XXX specify the value of \XXX (some snippath) in case it is - = somePath not defined in the processed .tex file - --defpath XXX specify which \XXX (snippath definitions) to look for - --stop stop when \end{document} is found; default is to go on - --verbose verbose on - --help this screen - - - Example usage: - ./rf slides.tex -d snippath -v - - Interpretation: - compute the reuse factor for the file slides.tex, look for definitions - of \snippath, in verbose mode diff --git a/Master/texmf-dist/source/latex/stex/bin/rng2dot/ModelRNC.pm b/Master/texmf-dist/source/latex/stex/bin/rng2dot/ModelRNC.pm deleted file mode 100644 index 53673e37dc8..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/rng2dot/ModelRNC.pm +++ /dev/null @@ -1,770 +0,0 @@ -# anything that starts with # is removed until \n (considered as a comment) -# except in literals; -# -# NCName is limited to a-zA-Z0-9.-_ -# -# no proper support for except nameClass -# no support for exceptPatterns - -package ModelRNC; - -use strict; -use File::Basename; - -my $DOCUMENT = '_Document_'; - -sub new{ - my ($class) = @_; - my $self = {}; - $self->{literalCount} = 0; - bless($self, $class); -} - -# this is the main method of the package -# it should be called right after new -sub process{ - my ($self, $filename) = @_; - $self->readfile($filename); - $self->clean_rnc; - $self->read_topLevel; - $self->build_info; - # free some memory - $self->{DATA} = ''; $self->{FILEPATH} = ''; $self->{GRAPH} = ''; -} - -sub Error{ - my ($self, $msg) = @_; - print "'$self->{DATA}'\n"; - die $msg."\n"; -} - -# read a file into $storage; -# or $self->{DATA} if $storage not given -sub readfile{ - my ($self, $filename, $storage) = @_; - - # NOTE: this is not exactly perfect - if ($self->{FILEPATH}){ - $filename = $self->{FILEPATH}.$filename unless -e $filename; } - my $basepath = dirname($filename); - $basepath .= '/' if ($basepath && $basepath !~ m|/$|); - $self->{FILEPATH} = $basepath; - - open(FIN, $filename) or $self->Error("Cout not open '$filename'"); - my @data = ; - close(FIN); - - # for use in namespace set selection - push(@{$self->{LOADEDFILES}}, $filename); - - if (defined $storage){ $$storage = join('',@data); } - else { $self->{DATA} = join('',@data); } -} - -# remove lines after ## -sub remove_annotations{ - my ($self, $data) = @_; - $data = \$self->{DATA} unless $data; - do {} while ($$data =~ s/\[[^\]\[]*\]//g); - $$data =~ s/\#\#[^\n]*//g; -} - -# remove all lines that start with # except -# the ones that start with ## -sub remove_comments{ - my ($self, $data) =@_; - $data = \$self->{DATA} unless $data; - $$data =~ s/\#[^\#\n][^\n]*//g; - $$data =~ s/\#\n/\n/g; -} - -sub scan_literals{ - my ($self, $data) = @_; - my @litseg; my $seg = 0; - $data = \$self->{DATA} unless $data; - while ($$data =~ s/\"\"\"((\"{0,2}[^\"])*)\"\"\"/_LITSEG$seg/) { $litseg[$seg++] = $1; } - while ($$data =~ s/\'\'\'((\'{0,2}[^\'])*)\'\'\'/_LITSEG$seg/) { $litseg[$seg++] = $1; } - while ($$data =~ s/\"([^\"\n]*)\"/_LITSEG$seg/) { $litseg[$seg++] = $1; } - while ($$data =~ s/\'([^\'\n]*)\'/_LITSEG$seg/) { $litseg[$seg++] = $1; } - - while ($$data =~ s/_LITSEG(\d+)\s*~\s*_LITSEG(\d+)/_LITSEG$seg/) - { $litseg[$seg++] = $litseg[$1].$litseg[$2]; } - - while ($$data =~ s/_LITSEG(\d+)/!LIT$self->{literalCount}/) - { $self->{literals}[$self->{literalCount}++] = $litseg[$1]; } -} - -# remove \x{N} sections -sub special_chars{ - my ($self, $data) = @_; - $data = \$self->{DATA} unless $data; - while ($$data =~ m/\\x\{([a-fA-F0-9x]+)\}/g){ - my $lng = length($&); my $p = pos($$data) - $lng; - substr($$data, $p, $lng) = chr(hex($1)); - pos($$data) = $p + 1; - } -} - -# remove redundant data from loaded file -sub clean_rnc{ - my ($self, $data) = @_; - $data = \$self->{DATA} unless $data; - $self->scan_literals($data); - $self->special_chars($data); - $self->remove_annotations($data); - $self->remove_comments($data); - # add a newline, just in case the last word is a keyword - # and for nice printing; - $$data.="\n"; -} - -# in the processing of the data, the data is destroyed -# provide two methods for resolving that -sub backup{ - my ($self) = @_; - $self->{BACKUP_DATA} = $self->{DATA}; -} - -sub restore{ - my ($self) = @_; - $self->{DATA} = $self->{BACKUP_DATA} if defined $self->{BACKUP_DATA}; -} - -# set or retrieve stored data -sub data{ - my ($self, $newdata) = @_; - if (defined $newdata){ $self->{DATA} = $newdata; } - else { return $self->{DATA}; } -} - -# put back some extracted string from DATA -sub put_back{ - my ($self, $back) = @_; - substr($self->{DATA}, 0, 0) = $back; -} - -# try to match a keyword; return 1 on success; 0 on failure -# NOTE: this implies that the used keywords should be followed by -# some non alphanumeric or space character -sub read_keyword{ - my ($self, $keyword) = @_; - return 0 if ($self->{DATA} !~ /^\s*\Q$keyword\E\s*[^a-zA-Z0-9_\-\.]/); - substr($self->{DATA}, 0, length($&)-1) = ''; - return 1; -} - -# same as read_keyword, except it dies not expect a non-word character -# after the word it searches -sub read_controlword{ - my ($self, $controlword) = @_; - return 0 if ($self->{DATA} !~ /^\s*\Q$controlword\E\s*/); - substr($self->{DATA},0,length($&)) = ''; - return 1; -} - -# expect a keyword; if the word is found, it is extracted -# otherwise, the program dies (the grammar is incorrect) -sub expect_keyword{ - my ($self, $keyword) = @_; - $self->Error("Expected keyword '$keyword' was not found") - if ($self->{DATA} !~ /^\s*\Q$keyword\E\s*/); - substr($self->{DATA}, 0, length($&)) = ''; -} - - -# Does not include Extender and CombiningChar -# (as in XML Namespaces: http://www.w3.org/TR/REC-xml/) -sub read_NCName{ - my ($self, $terminators) = @_; - my $termin_exists = 1; - if (defined $terminators) { $terminators = "[$terminators]"; } - else { $terminators = ''; $termin_exists = 0; } - if ($self->{DATA} =~ /^\s*([_a-zA-Z][_a-zA-Z0-9\.\-]*)\s*$terminators/){ - substr($self->{DATA}, 0, length($&)-$termin_exists) = ''; - return $1; - } - return undef; -} - -# try to match an identifierOrKeyword; return it in case -# of success; return undef in case of failure; -sub read_identifierOrKeyword{ - my ($self, $terminators) = @_; - $self->read_controlword('\\'); - return $self->read_NCName($terminators); -} - -# see if the argument is in the set of defined keyword of RelaxNG -sub isRNCKeyword{ - my ($word) = @_; - return ($word =~ /^\s*(attribute|default|datatypes|div|element|empty|external|grammar|include|inherit|list|mixed|namespace|notAllowed|parent|start|string|text|token)\s*$/); -} - -# read an identifier; return undef if no identifier can be read -sub read_identifier{ - my ($self, $terminators) = @_; - my $quote = $self->read_controlword('\\'); - my $ident = $self->read_NCName($terminators); - if (!$quote && $ident && isRNCKeyword($ident)){ - $self->put_back($ident); - return undef; - } - return $ident; -} - -# read a literal in any form given; -# segments are taken into account -sub read_literal{ - my ($self) = @_; - if ($self->{DATA} =~ /^\s*!LIT(\d+)\s*/){ - substr($self->{DATA}, 0, length($&)) = ''; - return $self->{literals}[$1]; - } - return undef; -} - -# read a namespace URI literal -sub read_namespaceURILiteral{ - my ($self, $inherited_namespace) = @_; - return $inherited_namespace if $self->read_keyword('inherit'); - return $self->read_literal; -} - -# read any URI literal -sub read_anyURILiteral{ - my ($self) = @_; - $self->read_literal; } - -sub getNS{ - my ($self, $nspref) = @_; - $self->{${$self->{LOADEDFILES}}[$#{$self->{LOADEDFILES}}]}->{NAMESPACE}{$nspref}; } - -sub setNS{ - my ($self, $nspref, $nsval) = @_; - $self->{${$self->{LOADEDFILES}}[$#{$self->{LOADEDFILES}}]}->{NAMESPACE}{$nspref} = $nsval; } - -# read all declarations, until none can be read -sub read_decl{ - my ($self, $inherited_namespace) = @_; - $inherited_namespace = '' unless defined $inherited_namespace; - $self->setNS('default',$inherited_namespace) unless $self->getNS('default'); - my $found = 1; - while ($found){ - if ($self->read_keyword('namespace')){ - my $namespace_name = $self->read_identifierOrKeyword('='); - $self->Error('Undefined namespace name') unless $namespace_name; - $self->expect_keyword('='); - my $namespace_value = - $self->read_namespaceURILiteral($inherited_namespace); - $self->Error('Undefined namespace URI') - unless defined $namespace_value; - $self->setNS($namespace_name, $namespace_value); - } - elsif ($self->read_keyword('default') && - $self->read_keyword('namespace')){ - my $namespace_name = undef; - if (!$self->read_controlword('=')){ - $namespace_name = $self->read_identifierOrKeyword('='); - $self->Error('Undefined namespace name') - unless $namespace_name; - $self->expect_keyword('='); - } - my $namespace_value = - $self->read_namespaceURILiteral($inherited_namespace); - $self->Error('Undefined namespace URI') - unless defined $namespace_value; - $self->setNS('default', $namespace_value); - $self->setNS($namespace_name, $namespace_value) - if $namespace_name; - } - elsif ($self->read_keyword('datatypes')){ - my $datatype_name = $self->read_identifierOrKeyword('='); - $self->Error('Undefined datatype name') unless $datatype_name; - $self->expect_keyword('='); - my $datatype_value = $self->read_literal; - $self->Error('Undefined datatype value') - unless defined $datatype_value; - } - else { $found = 0; } - } -} - -# ignore an annotation definition; -# (assumes annotation content does not exist) -# (it has been removed by clean_rnc) -sub ignore_annotation{ - my ($self) = @_; - $self->read_CName; } - -# read a name (CName) of the form NCName:NCName -sub read_CName{ - my ($self, $terminators) = @_; - $terminators = '\s' unless defined $terminators; - my $name = $self->read_NCName(':'); - if ($name){ - $self->expect_keyword(':'); - my $part2 = $self->read_NCName($terminators); - $self->Error('Incomplete CName definition') unless $part2; - $name .= ":$part2"; - } - return $name; -} - -# read a datatype name -sub read_datatypeName{ - my ($self, $terminators) = @_; - $terminators = '\s' unless defined $terminators; - if ($self->{DATA} =~ /^\s*string\s*[$terminators]/){ - substr($self->{DATA},0,length($&)-1) = ''; - return 'string'; - } - elsif ($self->{DATA} =~ /^\s*token\s*[$terminators]/){ - substr($self->{DATA},0,length($&)-1) = ''; - return 'token'; - } else { - return $self->read_CName($terminators); - } -} - -# read a datatype value -sub read_datatypeValue{ - my ($self) = @_; - return $self->read_literal; -} - -# return the set of names an element or an attribute can have -# this does not work well on complicated name classes -sub read_nameClassEx{ - my ($self, $terminators) = @_; - - my @result; - - if ($self->read_controlword('(')){ - @result = $self->read_nameClassEx($terminators.'\)'); - $self->expect_keyword(')'); - } else { - - #anyName - if ($self->read_controlword('*')){ - push(@result, '*'); - if ($self->read_controlword('-')){ - print STDERR "Warning: USE OF EXCEPT NAMECLASS NOT IMPLEMENTED\n"; - push(@result, $self->read_nameClassEx($terminators)); - } - } - # nsName or name(CName) - elsif (my $part1 = $self->read_NCName(':')){ - $self->expect_keyword(':'); - if ($self->read_controlword('*')){ - push(@result, "$part1:*"); - if ($self->read_controlword('-')){ - print STDERR - "Warning: USE OF EXCEPT NAMECLASS NOT IMPLEMENTED\n"; - push(@result, '-', - $self->read_nameClassEx($terminators)); - } - } else { - push(@result, $part1.':'.$self->read_NCName($terminators.'\|')); - } - } - # name(identifierOrKeyword) - else { - my $name = $self->read_identifierOrKeyword($terminators.'\|'); - $self->Error('Incomplete name class given') unless $name; - push(@result, $name); - } - } - - $self->Error('No name class provided') unless @result; - - # see if we have more possible names: - push(@result, $self->read_nameClassEx($terminators)) - if ($self->read_controlword('|')); - - return @result; -} - -sub read_nameClass{ - my ($self, $terminators, @parents) = @_; - $terminators = '\s' unless defined $terminators; - my @result = $self->read_nameClassEx($terminators); - my @finalRes; - - if (@parents && @result){ - - my @nsList, my %saw = (); - foreach (@parents){ - if (/\{(.*)\}:.+/){ - next if $saw{$1}; - push(@nsList, $1); $saw{$1} = 1; } - else { - next if $saw{'default'}; - push(@nsList, $self->getNS('default')); $saw{'default'} = 1; } - } - - foreach my $res(@result){ - if ($res =~ /(.+):(.+)/){ - push(@finalRes, $self->ns_prepend($2, $1)); } - else { - map(push(@finalRes, "{$_}:$res"), @nsList); } - } - } else { - map(push(@finalRes, (/(.+):(.+)/)? - $self->ns_prepend($2, $1):$self->ns_prepend($_)), @result); - } - return @finalRes; -} - - -# read a parameter declaration, if one exists -sub read_param{ - my ($self) = @_; - my $id = $self->read_identifierOrKeyword('='); - return (undef, undef) unless $id; - $self->expect_keyword('='); - my $val = $self->read_literal; - $self->Error('No parameter value specified') unless defined $val; - return ($id, $val); -} - -sub begin_read_newfile{ - my ($self) = @_; - my $file = $self->read_anyURILiteral; - my $inherit = 'default'; - if ($self->read_keyword('inherit')){ - $self->expect_keyword('='); - $inherit = $self->read_identifierOrKeyword; } - $inherit = $self->getNS($inherit); - my $newdata = ''; - $self->readfile($file, \$newdata); - $self->clean_rnc(\$newdata); - $self->put_back($newdata.'#'); - $self->read_decl($inherit); } - -sub end_read_newfile{ - my ($self) = @_; - pop(@{$self->{LOADEDFILES}}); - $self->expect_keyword('#'); } - -# read a pattern -sub read_pattern{ - my ($self, $grammarPath, $grammarIdent, @parentElements) = @_; - my $found = 1; my $grammarCount = 0; - my $DEF = $grammarPath.':'.$grammarIdent; - - if ($self->read_keyword('element')){ - my @elementNames = $self->read_nameClass('{', @parentElements); - $self->Error('Unspecified element name') unless @elementNames; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{ELEMENTS}}, - @elementNames), @parentElements); - $self->expect_keyword('{'); - $self->read_pattern($grammarPath, $grammarIdent, @elementNames); - $self->expect_keyword('}'); - } - elsif ($self->read_keyword('attribute')){ - my @attributeNames = $self->read_nameClass('{'); - $self->Error('Unspecified attribute name') unless @attributeNames; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{ATTRIBUTES}}, - @attributeNames), @parentElements); - $self->expect_keyword('{'); - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - $self->expect_keyword('}'); - } - elsif ($self->read_keyword('list') || $self->read_keyword('mixed')){ - $self->expect_keyword('{'); - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - $self->expect_keyword('}'); - } - elsif ($self->read_controlword('(')){ - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - $self->expect_keyword(')'); - } - elsif (my $datatypeValue = - $self->read_datatypeValue){ - # do nothing - } - elsif (my $datatypeName = - $self->read_datatypeName('\s\{\}\-!')){ - my $datatypeValue = $self->read_datatypeValue; - - # read parameters; ignore them for now - if ($self->read_controlword('{')){ - my ($ident, $val); - do{ - ($ident, $val) = $self->read_param; - } while ($ident && $val); - $self->expect_keyword('}'); - } - # read possible exceptPattern - if ($self->read_controlword('-')){ - print STDERR "Warning: USE OF EXCEPT PATTERN NOT IMPLEMENTED\n"; - $self->Error('exceptPattern expected but not found') - unless $self->read_pattern($grammarPath, $grammarIdent, - @parentElements); - } - } - elsif ($self->read_keyword('external')){ - $self->begin_read_newfile; - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - $self->end_read_newfile; - } - elsif ($self->read_keyword('grammar')){ - my $ident = $DEF.$grammarCount++; - $self->expect_keyword('{'); - $self->read_grammarContent($ident, @parentElements); - $ident .= ':start'; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{REFS}}, - $ident), @parentElements); - $self->expect_keyword('}'); - } - elsif ($self->read_keyword('parent')){ - my $ident = $self->read_identifier; - if ($grammarPath =~ /^([.]+:)[^:]+$/){ - $ident = $1.$ident; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{REFS}}, - $ident), @parentElements); - } - } - elsif ($self->read_keyword('empty') || $self->read_keyword('text') - || $self->read_keyword('notAllowed')){ - # do nothing - } - elsif (my $ident = $self->read_identifier){ - # check if we did not enter a grammar by mistake: - my $asg = $self->read_assignMethod(1); - if ($ident && $asg){ - $self->put_back($ident.$asg); - } else { - $ident = $grammarPath.':'.$ident; - map(push(@{$self->{GRAPH}->{$DEF}->{$_}{REFS}}, - $ident), @parentElements); - } - - } else { $found = 0; } - - if ($self->read_controlword('?') || $self->read_controlword('*') - || $self->read_controlword('+')){ - # ignore - } - - if ($self->read_controlword(',') || $self->read_controlword('|') - || $self->read_controlword('&')){ - Error('Pattern expected') unless - $self->read_pattern($grammarPath, $grammarIdent, @parentElements); - } - - return $found; -} - -sub read_assignMethod{ - my ($self, $asString) = @_; - if ($asString){ - return '&=' if ($self->read_controlword('&=')); - return '|=' if ($self->read_controlword('|=')); - return '=' if ($self->read_controlword('=')); - return undef; - } - return 3 if ($self->read_controlword('&=')); - return 2 if ($self->read_controlword('|=')); - return 1 if ($self->read_controlword('=')); - return 0; -} - -# read a grammar pattern -sub read_grammarPattern{ - my ($self, $DEF, @parentElements) = @_; - if ($self->read_keyword('grammar')){ - $self->expect_keyword('{'); - $self->read_grammarContent($DEF, @parentElements); - $self->expect_keyword('}'); } - else{ - $self->read_grammarContent($DEF, @parentElements);} -} - -# read all possible grammar contents -sub read_grammarContent{ - my ($self, $DEF, @parentElements) = @_; - my ($div, $found) = (0, 1); - - while ($found){ - if ($self->read_keyword('div')){ - $div++; - $self->expect_keyword('{'); - $self->read_grammarContent($DEF.':_G'.$div, @parentElements); - $self->expect_keyword('}'); - } - elsif ($self->read_keyword('include')){ - $self->begin_read_newfile; - $self->read_grammarPattern($DEF, @parentElements); - $self->end_read_newfile; - if ($self->read_controlword('{')){ - $self->read_grammarContent($DEF, @parentElements); - $self->expect_keyword('}'); } - } - elsif ($self->read_keyword('start')){ - my $asg = $self->read_assignMethod; - $self->Error('Invalid assign method') unless $asg; - @{$self->{GRAPH}->{$DEF.':start'}->{PARENTS}} = @parentElements; - $self->read_pattern($DEF, 'start', @parentElements); - } - elsif (my $ident = $self->read_identifier('=\|\&')){ - my $asg = $self->read_assignMethod; - $self->Error('Invalid assign method') unless $asg; - my $ref = $DEF.':'.$ident; - %{$self->{GRAPH}->{$ref}} = () if $asg == 1; - @{$self->{GRAPH}->{$ref}->{PARENTS}} = @parentElements; - $self->read_pattern($DEF, $ident, @parentElements); - } - elsif ($self->ignore_annotation) {} - else { $found = 0; } - } -} - -sub ns_prepend{ - my ($self, $tag, $ns_pref) = @_; - my $ns = $ns_pref?$self->getNS($ns_pref):undef; - $ns = $self->getNS('default') unless $ns; - return "{$ns}:$tag"; -} - -# this should match the whole file -sub read_topLevel{ - my ($self) = @_; - $self->read_decl; - $self->read_pattern($DOCUMENT, 'start', $DOCUMENT); - - my ($after, $before) = (0, 1); - while ($before != $after){ - $before = length($self->{DATA}); - $self->read_grammarContent($DOCUMENT, $DOCUMENT); - $after = length($self->{DATA}); - } - $self->{DATA} = trim($self->{DATA}); - $self->Error('Unable to completely process data') - unless $self->{DATA} eq ''; -} - -# remove leading and trailing white space -sub trim{ - my ($arg) = @_; - $arg =~ s/^\s+//; - $arg =~ s/\s+$//; - return $arg; -} - -sub build_info{ - my ($self) = @_; - - my %seen = (); - local *go = sub { - my ($reference, $node) = @_; - - my $ident = $reference.'#'.$node; - return if defined $seen{$ident}; - $seen{$ident} = 1; - - map($self->{ATTR}->{$node}{$_} = 1, - @{$self->{GRAPH}->{$reference}->{$node}{ATTRIBUTES}}) - if defined $self->{GRAPH}->{$reference}->{$node}{ATTRIBUTES}; - - my @sons; - map(push(@sons, ($reference, $_)), - @{$self->{GRAPH}->{$reference}->{$node}{ELEMENTS}}) - if defined $self->{GRAPH}->{$reference}->{$node}{ELEMENTS}; - - if (defined $self->{GRAPH}->{$reference}->{$node}{REFS}){ - my @refs = @{$self->{GRAPH}->{$reference}->{$node}{REFS}}; - foreach my $ref(@refs){ - next unless $self->{GRAPH}->{$ref}->{PARENTS}; - foreach my $son(@{$self->{GRAPH}->{$ref}->{PARENTS}}){ - map(push(@sons, ($ref, $_)), - @{$self->{GRAPH}->{$ref}->{$son}{ELEMENTS}}) - if defined $self->{GRAPH}->{$ref}->{$son}{ELEMENTS}; - push(@refs, @{$self->{GRAPH}->{$ref}->{$son}{REFS}}) - if defined $self->{GRAPH}->{$ref}->{$son}{REFS}; - # if a reference has attributes defined, - # they will appear as attributes to $DOCUMENT - # if the reference is not defined within some element - map($self->{ATTR}->{$node}{$_} = 1, - @{$self->{GRAPH}->{$ref}->{$son}{ATTRIBUTES}}) - if ($self->{GRAPH}->{$ref}->{$son}{ATTRIBUTES} && - ($son eq $DOCUMENT)); - } - } - } - my $sonCount = ($#sons+1)/2; - for (my $i = 0; $i < $sonCount; $i++){ - my ($ref, $son) = ($sons[2*$i], $sons[2*$i+1]); - go($sons[2*$i], $sons[2*$i+1]); - $self->{NODES}->{$node}{$son} = 1; - } - }; - - go($DOCUMENT.':start', $DOCUMENT); - - %seen = (); - local *gnodes = sub { - my ($node) = @_; - return if $seen{$node}; - $seen{$node} = 1; - foreach my $son(keys %{$self->{NODES}->{$node}}){ - map($self->{GNODES}->{$node}{$_} = $son, - keys %{$self->{NODES}->{$son}}); - gnodes($son); } - }; - - gnodes($DOCUMENT); - @{$self->{TAGLIST}} = keys %seen; -} - -sub getTagList { - my ($self) = @_; - return @{$self->{TAGLIST}}; -} - -sub tagChildren { - my ($self, $tag) = @_; - keys %{$self->{NODES}->{$tag}}; } - -# given a tag and a childtag, return whether -# tag can contain childtag -sub canContain() -{ - my ($self, $tag, $childtag) = @_; - return ($self->{NODES}->{$tag}{$childtag} || - $self->{NODES}->{$tag}{'*'})?1:0; -} - -# there can be more results: list ? -# there can be no result, but a class of results.. like a nsName -# choose representative? -sub canContainIndirect() -{ - my ($self, $tag, $childtag) = @_; - return $self->{GNODES}->{$tag}{$childtag} if - $self->{GNODES}->{$tag}{$childtag}; - - if ($self->{NODES}->{$tag}{'*'}){ - foreach (@{$self->{TAGLIST}}){ - return $_ if $self->{NODES}->{$_}{$childtag}; - } - } -} - -# given a tag and an attribute return whether -# the tag can have that attribute -sub canHaveAttribute() -{ - my ($self, $tag, $attr) = @_; - return ($self->{ATTR}->{$tag}{$attr} || - $self->{ATTR}->{$tag}{'*'})?1:0; -} - -sub canContainSomehow() -{ - my ($self, $tag, $childtag) = @_; - return ($self->canContain($tag, $childtag) || - $self->canContainIndirect($tag, $childtag)); -} - -1; diff --git a/Master/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot b/Master/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot deleted file mode 100755 index 588b8827c63..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/perl -w - -use ModelRNC; - -die "No input file\n" unless $ARGV[0]; -my $opt = $ARGV[1] || ''; - -my $rnc = ModelRNC->new(); -$rnc->process($ARGV[0]); -print STDERR 'Unable to properly parse ('.$rnc->data.")\n" if $rnc->data; - -my %seen = (); -sub make_graph { - my ($node) = @_; - my @children = $rnc->tagChildren($node); - my $pnode = $node; - $pnode =~ s/^\{[^\}]*\}://; $pnode =~ s/\-|\+|\*|\s/_/g; - my @pchildren = @children; - for (my $i = 0 ; $i < @pchildren; $i++) { - $pchildren[$i] =~ s/^\{[^\}]*\}://; - $pchildren[$i] =~ s/\-|\+|\*|\s/_/g; } - if ($opt eq 'txt') { - print "$pnode: ".join(', ', @pchildren)."\n\n"; } - else { - for (my $i = 0 ; $i < @pchildren; $i++) { - print "$pnode -> ".$pchildren[$i].";\n"; }} - return 0 if $seen{$node}; - $seen{$node} = 1; - foreach my $child(@children) { - make_graph($child); } - 1; } - -print "digraph RNC {\n" unless $opt eq 'txt'; -make_graph('_Document_'); -print "}\n" unless $opt eq 'txt'; - -__END__ diff --git a/Master/texmf-dist/source/latex/stex/bin/sgraph b/Master/texmf-dist/source/latex/stex/bin/sgraph deleted file mode 100755 index c4e709db476..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/sgraph +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/perl -w -####################################################################################### -# A tool for creating graphs of module usage patterns based on graphviz. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/sgraph$ # -# $Date: 2005-10-04 19:31:43 +0200 (Tue, 04 Oct 2005) $ $Rev: 4376 $ # -####################################################################################### - -use strict; - -use Getopt::Long; -use Modparse; -use Pod::Usage; - -my $input = "-", my $output = "out", my $format = "ps"; -my $root, my $stop_at_end=0, my $use_grouping = 0; -my $rmdot = 0, my $verbose=0, my $theory = '', my $srange = ''; -my %arg_snippath; my @snippathList; - -sub group_name{ - my ($st) = @_; - if ($st =~ /^(.*[\/\\])?([^\/\\]+)\.[^\.\/\\]*$/) { $st = $2; } - elsif ($st =~ /^(.*[\/\\])?([^\.\/\\]+)$/) { $st = $2; } - $st =~ s/-/_/g; - return $st; } - -GetOptions("output=s" => \$output, - "format=s" => \$format, - "nodot" => sub {$rmdot = 1;}, - "root=s" => \$root, - "theory=s" => \$theory, - "sliderange=s" => \$srange, - "path=s" => \%arg_snippath, - "defpath=s" => \@snippathList, - "verbose" => sub {$verbose = 1;}, - "grouping" => sub {$use_grouping = 1}, - "stop" => sub {$stop_at_end = 1}, - "help" => sub {pod2usage(2)}); - -$output = $1 if ($output =~ m/([^.]+)\..*/); -$input = $ARGV[0] if ($#ARGV>=0); -$root = group_name($input) unless $root; - - -my %data = (); my %group = (); -my $mp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - onBegin=>sub { $_[0]->{perm}->{slide} = 0; $_[0]->{perm}->{linecount} = 0; - if ($srange =~ /(\d+)\:(\d+)/){ - ($_[0]->{perm}->{sbegin}, $_[0]->{perm}->{send}) = ($1, $2); - $_[0]->{perm}->{in_sliderange} = ($_[0]->{perm}->{sbegin}<1); - } else { $_[0]->{perm}->{in_sliderange} = 1; }}, - onBeginFile=>sub { $_[0]->{grp} = group_name($_[0]->{filename}); }, - onBeginModule=>sub { - if ($_[0]->{perm}->{in_sliderange} && (my $id = $_[0]->{module_id})){ - $id =~ s/[:-]/_/g; - my $uses = ''; - if ($_[0]->{module_args} =~ /uses=(([\w-]+)|(\{[\w,-]+\}))/){ - $uses = $1; - $uses =~ s/,/;/g; $uses =~ s/[:-]/_/g; } - $data{$id}=$uses; - $group{$id}=$_[0]->{perm}->{grp}; - }}, - onEveryLine=>sub { - $_[0]->{perm}->{linecount}++; - print ". " if ($_[0]->{pack}->{verbose} && ($_[0]->{perm}->{linecount} % 1000==0)); - $_[0]->{perm}->{slide}++ if $_[0]->{simple_tex} =~ /\\begin\{slide\}/; - $_[0]->{perm}->{in_sliderange}=($_[0]->{perm}->{slide}<=$_[0]->{perm}->{send} && - $_[0]->{perm}->{slide}>=$_[0]->{perm}->{sbegin}) - if ($_[0]->{perm}->{sbegin} && $_[0]->{perm}->{send}); - }); - -print "\nGenerating graph...\n" if $verbose; - -$mp->execute($input); - -my @queue=(); - -if ($theory){ - $theory =~ s/-/_/g; - if ($data{$theory}){ - my $start = 0, my $end = 1, my %already_in; - $queue[0] = $theory; - $already_in{$theory} = 1; - while ($start<$end){ - my $idx, my $usesx; - $idx = $queue[$start]; - $usesx = $data{$queue[$start]}; - $start++; - if ($usesx){ - $usesx =~ s/\{//; - $usesx =~ s/\}//; - foreach (split(/;/,$usesx)){ - next if $already_in{$_}; - $queue[$end] = $_; - $already_in{$_} = 1; - $end++; - } - } - } - } -} else{ - @queue = keys %data; -} - -open(FOUT,">$output.dot") or die "Can't open output file\n"; -print FOUT "digraph TEX {\n"; -print FOUT "$root [shape=box];\n"; - -if ($use_grouping){ - my %subgraph = (); - foreach (@queue){ - $subgraph{$group{$_}}.="$_;"; - } - foreach my $subgr (keys %subgraph){ - print FOUT "subgraph cluster_$subgr {\n"; - print FOUT "color = blue;\n"; - print FOUT "label = $subgr;\n"; - print FOUT "$subgraph{$subgr}\n"; - print FOUT "}\n"; - } -} - -my $lk = 0; -for my $idx (@queue){ - my $usesx = $data{$idx}; - $lk=$lk+($usesx =~ tr/;//)+1; - if ($usesx){ - print FOUT "$idx -> $usesx;\n"; - } else { - print FOUT "$idx -> $root;\n"; - } -} - -print "Number of links: $lk\n" if $verbose; - - -print FOUT "}\n"; -close(FOUT); - -`dot -T$format -o $output.$format $output.dot`; -unlink "$output.dot" if ($rmdot==1); - -print "Done.\n" if $verbose; - -__END__ - -=head1 SYNOPSIS - -sgraph [options] - - .tex input file; stdin by default - - Options: - --output output file; out.dot by default - --format output format; .ps by default; for available formats, see dot --help - --nodot do not generate .dot file, just target format - --root the 'root' of the graph. (name of course) - --theory generate a subgraph for the theory - --sliderange only look at the given slide range; (2:16 for example) - --path XXX specify the value of \XXX (some snippath) in case it is - = somePath not defined in the processed .tex file - --defpath XXX specify which \XXX (snippath definitions) to look for - --stop stop reading data when \end{document} is found, not at EOF - --grouping group modules within sections. - --verbose verbose on - --help this screen - -Example: -./sgraph slides.tex -o graph -f ps -n -t TCN --sliderange 20:10000 -r GenCS -v diff --git a/Master/texmf-dist/source/latex/stex/bin/sms b/Master/texmf-dist/source/latex/stex/bin/sms deleted file mode 100755 index 360be4ea814..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/sms +++ /dev/null @@ -1,138 +0,0 @@ -#!/usr/bin/perl -w -####################################################################################### -# A tool for creating STeX Module Signatures (SMS) files. # -# Copyright (c) 2005, Ioan Sucan; (c) 2010, Deyan Ginev, -# released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/sms$ # -# $Date: 2006-10-22 20:01:47 +0200 (Sun, 22 Oct 2006) $ $Rev: 10669 $ # -####################################################################################### - -use strict; -use File::Spec::Functions qw(rel2abs); -use File::Basename; -use lib dirname(rel2abs($0)); #Assumption: Modparse is in the same folder as the sms binary. -use Getopt::Long; -use Modparse; -use Pod::Usage; - -my $input = "-", my $verbose=0, my $stop_at_end=0; -my %arg_snippath; my @snippathList; - -# match {,} brackets that are not comments or special characters -sub match{ - my $data = shift; - my $b = 0, my $i = 0, my $ignore = 0 ; - foreach (split('',$data)){ - $i++; - if ($ignore == 1){ - $ignore = 0; - next; - } - if ($ignore == 2){ - next if $_ ne "\n"; - $ignore = 0; - next; - } - if ($_ eq "\\"){ - $ignore = 1; - next; - } - if ($_ eq '%'){ - $ignore = 2; - next; - } - $b++ if $_ eq '{'; - $b-- if $_ eq '}'; - return (substr($data,0,$i),substr($data,$i,length($data)-$i+1)) if !$b; - } - return ('',$data); -} - - -####### start of program ####### - -GetOptions("verbose" => sub { $verbose=1; }, - "stop" => sub { $stop_at_end=1; }, - "path=s" => \%arg_snippath, - "defpath=s" => \@snippathList, - "help" => sub { pod2usage(2)}); - -$input = $ARGV[0] if ($#ARGV>=0); - -my $mp = Modparse->new(snippathList=>\@snippathList, - snippath=>\%arg_snippath, - stopAtEnd=>$stop_at_end, - verbose=>$verbose, - recursion=>0, - onBeginFile=>sub { @{$_[0]->{'sms'.$_[0]->{depth}}}=(); }, - onBeginModule=>sub { push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $_[0]->{original}); - @{$_[0]->{'sms'.$_[0]->{depth}}}[-1] =~ s/\n$/%\n/; }, - onEndModule=>sub { push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $_[0]->{original}); - @{$_[0]->{'sms'.$_[0]->{depth}}}[-1] =~ s/\n$/%\n/ }, - onRecurse=>sub { - my $recurse = $_[0]->{original}; - $recurse =~ s/include/exclude/g; - push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $recurse); }, - onEndFile=>sub { - my $file = $_[0]->{pack}->new_ext($_[0]->{filename},'.sms'); - open(FOUT, ">$file") or die "Cannot write $file\n"; - print FOUT @{$_[0]->{'sms'.$_[0]->{depth}}}; - close(FOUT); - `touch $file` unless @{$_[0]->{'sms'.$_[0]->{depth}}}; - print "Wrote $file\n" if $verbose; }, - onEveryLine=>sub { - my @lines = @{$_[0]->{'sms'.$_[0]->{depth}}}; - if ($_[0]->{in_module}){ - push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $_[0]->{original}) - if ($_[0]->{simple_tex} =~ /\\(sym|abbr|ell)def\{([^\}]+)\}/ || - $_[0]->{simple_tex} =~ /\\symdef\[([^\]]+)\]/); - push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $_[0]->{original}) - if ($_[0]->{simple_tex} =~ /\\importmodule/); - push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $_[0]->{original}) - if ($_[0]->{simple_tex} =~ /\\importOMDocmodule/); - push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $_[0]->{original}) - if ($_[0]->{simple_tex} =~ /\\requiremodules/); - push(@{$_[0]->{'sms'.$_[0]->{depth}}}, $_[0]->{original}) - if ($_[0]->{simple_tex} =~ /\\requirepackage/); - if ((/\\STRlabel\{([^\}]+)\}(\{.*)/) || (/\\STRsemantics\[([^\]]+)\](\{.*)/)){ - my ($label, $line) = ($1, "$2 $_[0]->{comment}"); - my ($matched, $rest) = (undef, undef); - while (1) { - ($matched, $rest) = match($line); - last if $matched; - $line.=$_[0]->{nextline}(); } - $_[0]->{rewriteline}($rest) if $rest; - $line = "\\STRlabeldef{$label}$matched"; chomp($line); - map(push(@{$_[0]->{'sms'.$_[0]->{depth}}},"$_\n"),split("\n",$line)); - } - @{$_[0]->{'sms'.$_[0]->{depth}}}[-1] =~ s/\n$/%\n/ - if (@lines < @{$_[0]->{'sms'.$_[0]->{depth}}}); - }} ); - -$mp->execute($input); - -print "Done.\n" if $verbose; - - -__END__ - - -=head1 SYNOPSIS - -sms [options] - -Options: - - --verbose verbose on - --stop stop when \end{document} is found; default is to go on - --path XXX=somePath specify the value of \XXX (some snippath) in case it is - not defined in the processed .tex file - --defpath XXX specify which \XXX (snippath definitions) to look for - --help this screen - -Purpose: - Generate .sms files (STeX Module Signatures) from .tex files - -Example: - sms slides.tex -v diff --git a/Master/texmf-dist/source/latex/stex/bin/stexml b/Master/texmf-dist/source/latex/stex/bin/stexml deleted file mode 100755 index 2c0586b9130..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/stexml +++ /dev/null @@ -1,2 +0,0 @@ -exec latexmlc $1 --path=../../../stex/sty --path=../../../stex/rnc --path=../../../stex/rnc/omdoc --path=../../../stex/sty/modules --path=../../../stex/sty/statements --path=../../../stex/sty/sproof --path=../../../stex/sty/omtext --path=../../../stex/sty/omdoc --path=../../../stex/sty/sref --path=../../../stex/sty/presentation --path=../../../stex/sty/dcm --path=../../../stex/sty/reqdoc --path=../../../stex/sty/metakeys --path=../../../stex/sty/mikoslides --path=../../../stex/sty/problem --path=../../../stex/sty/assignment --path=../../../stex/sty/etc --path=../../../sty --path=../../../sty/ded --path=../../../sty/ed --local --mode=standard --destination=#dir/#name.tex.xml --postdest=#dir/#name.omdoc --log=#dir/#name.ltxlog --post --stylesheet=../../../stex/xsl/omdocpost.xsl \ - --openmath --pmml \ No newline at end of file diff --git a/Master/texmf-dist/source/latex/stex/bin/stexmlmod b/Master/texmf-dist/source/latex/stex/bin/stexmlmod deleted file mode 100755 index 55dd1f6ab37..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/stexmlmod +++ /dev/null @@ -1,2 +0,0 @@ -exec latexmlc --preamble=../../../lib/pre.tex $1 --path=../../../stex/sty --path=../../../stex/rnc --path=../../../stex/rnc/omdoc --path=../../../stex/sty/modules --path=../../../stex/sty/statements --path=../../../stex/sty/sproof --path=../../../stex/sty/omtext --path=../../../stex/sty/omdoc --path=../../../stex/sty/sref --path=../../../stex/sty/presentation --path=../../../stex/sty/dcm --path=../../../stex/sty/reqdoc --path=../../../stex/sty/metakeys --path=../../../stex/sty/mikoslides --path=../../../stex/sty/problem --path=../../../stex/sty/assignment --path=../../../stex/sty/etc --path=../../../sty --path=../../../sty/ded --path=../../../sty/ed --local --mode=fragment --destination=#dir/#name.tex.xml --postdest=#dir/#name.omdoc --log=#dir/#name.ltxlog --post --stylesheet=../../../stex/xsl/omdocpost.xsl \ - --openmath --pmml diff --git a/Master/texmf-dist/source/latex/stex/bin/termin b/Master/texmf-dist/source/latex/stex/bin/termin deleted file mode 100755 index 0589be09c2f..00000000000 --- a/Master/texmf-dist/source/latex/stex/bin/termin +++ /dev/null @@ -1,279 +0,0 @@ -#!/usr/bin/perl -w - -####################################################################################### -# A tool for automatized replacement of plain words with their \termin macros. # -# Copyright (c) 2005, Ioan Sucan, released under the Gnu General Public License (GPL) # -# see http://www.gnu.org/copyleft/gpl.html # -# $URL: svn://kwarc.eecs.iu-bremen.de/repos/kwarc/projects/content/bin/termin$ # -# $Date: 2005-10-04 17:47:41 +0200 (Tue, 04 Oct 2005) $ $Rev: 4371 $ # -####################################################################################### - -use strict; - -use Getopt::Long; -use Term::ANSIColor; -use Pod::Usage; - -my $verbose = 0; -my $wordDefs={}, my $twinDefs={}, my $atwinDefs={}; - -use constant twin => 'T'; -use constant word => 'W'; -use constant atwin => 'A'; - -my $before_chars = 128; -my $after_chars = 128; - -sub loadDefs{ - my ($tex_file) = @_; - - # read file - open(FIN, $tex_file) or die "Cannot read $tex_file\n"; - my @contentLines = ; - close(FIN); - - my $content = join('',@contentLines); - $content =~ s/\s+//g; - $content =~ s/%[^\n]*\n//g; - pos($content) = 0; - - my %modules = (); - while ($content =~ m/\\begin\{module\}\[([^\]]+)\]/g){ - next unless $1 =~ /id=([^\],]+)/; - $modules{pos($content)} = $1; - } - my @posList = keys %modules; - my $modIndex, my $current_module; - - # see definiens of form \definiens[bar]{foobar} - # word 'foobar', concept 'bar', within module 'foo' - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\definiens\[([^\]\-]+)\]\{([^\}]+)\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$wordDefs->{modules}}, $current_module); - push(@{$wordDefs->{concepts}}, $1); - push(@{$wordDefs->{words}}, $2); - print word, " ==> $current_module: $1: $2\n" if $verbose>=2; - } - - # see definiens of form \definiens[aaa-bbb]{\twin{ccc}{ddd}} - # words 'ccc ddd', concept 'aaa-bbb', within module 'foo' - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\definiens\[([^\-\]]+)\-([^\]]+)\]\{\\twin\{([^\}]+)\}\{([^\}]+)\}\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$twinDefs->{modules}}, $current_module); - push(@{$twinDefs->{concepts}}, "$1-$2"); - push(@{$twinDefs->{words}}, $3); - push(@{$twinDefs->{twins}}, $4); - print twin, " ==> $current_module: $1-$2: $3 $4\n" if $verbose>=2; - } - - # \twindef{aaa}{bbb} - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\twindef\{([^\}]+)\}\{([^\}]+)\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$twinDefs->{modules}}, $current_module); - push(@{$twinDefs->{concepts}}, "$1-$2"); - push(@{$twinDefs->{words}}, $1); - push(@{$twinDefs->{twins}}, $2); - print twin, " ==> $current_module: $1-$2: $1 $2\n" if $verbose>=2; - } - - # see definiens of form \definiens[aaa-bbb-ccc]{\twin{ddd}{eee}{fff}} - # words 'ddd eee fff', concept 'aaa-bbb-ccc', within module 'foo' - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\definiens\[([^\-\]]+)\-([^\-\]]+)\-([^\]]+)\]\{\\atwin\{([^\}]+)\}\{([^\}]+)\}\{([^\}]+)\}\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$atwinDefs->{modules}}, $current_module); - push(@{$atwinDefs->{concepts}}, "$1-$2-$3"); - push(@{$atwinDefs->{words}}, $4); - push(@{$atwinDefs->{twins}}, $5); - push(@{$atwinDefs->{adjs}}, $6); - print atwin, " ==> $current_module: $1-$2-$3: $4 $5 $6\n" if $verbose>=2; - } - - # \atwindef{aaa}{bbb}{ccc} - pos($content) = 0; $modIndex = 0; $current_module = $modules{$posList[0]}; - while ($content =~ m/\\atwindef\{([^\}]+)\}\{([^\}]+)\}\{([^\}]+)\}/g){ - my $p = pos($content); - while ($modIndex < $#posList && $p > $posList[$modIndex+1]) { - $modIndex++; $current_module = $modules{$posList[$modIndex]}; } - push(@{$atwinDefs->{modules}}, $current_module); - push(@{$atwinDefs->{concepts}}, "$1-$2-$3"); - push(@{$atwinDefs->{words}}, $1); - push(@{$atwinDefs->{twins}}, $2); - push(@{$atwinDefs->{adjs}}, $3); - print atwin, " ==> $current_module: $1-$2-$3: $1 $2 $3\n" if $verbose>=2; - } - -} - -sub max{ - my ($max, @values) = @_; - foreach (@values) { $max = $_ if $_ gt $max;} - return $max; -} - -sub nospace{ - my ($str) = @_; - $str =~ s/\s+/ /g; - $str =~ s/^\s//; - $str =~ s/\s$//; - return $str; -} - -sub replaceDefs{ - my ($in_tex_file, $out_tex_file) = @_; - - open(FIN, $in_tex_file) or die "Cannot read $in_tex_file\n"; - my @content_lines = ; - close(FIN); - - my $content = join('',@content_lines); - my $lcont = length($content); - - local *go_word = sub { - - my ($word, $new_word1_ex, $new_word2_ex) = @_; - $new_word2_ex = $new_word1_ex unless defined $new_word2_ex; - - while ($content =~ m/([^\{\s]?)(\s*$word\s*)[^\}\s]?/gi){ - my $p = pos($content); - my $ahead_len = length($1); my $matched_word = $2; - my $wlen = length($matched_word); - my $trail_len = length($&) - $wlen - $ahead_len; - - if (($ahead_len != 0 || $trail_len != 0) || - ($ahead_len == 0 && $trail_len == 0 && ($p == $wlen || $p == $lcont))){ - my $start_pos = max(0, $p - $wlen - $trail_len - $before_chars); - my $new_word1 = $new_word1_ex; my $new_word2 = $new_word2_ex; - - my $word_count = 0; - while ($matched_word =~ /\s*([^\s]+)\s*/g){ - my $replace = $1; - $new_word1 =~ s/W%$word_count/$replace/g; - $new_word2 =~ s/W%$word_count/$replace/g; - $word_count++; - } - - print "\nAnnotate '"; - print color 'bold blue'; print nospace($matched_word); print color 'reset'; - print "' with \n Y = '"; print color 'red bold'; print $new_word2; - print color 'reset'; print "'\n y = '"; print color 'red bold'; - print $new_word1; print color 'reset'; print "'\n in: \n<<< "; - print color 'green'; - print substr($content, $start_pos, $before_chars); - print color 'bold blue'; - print substr($content, $start_pos + $before_chars, $wlen); - print color 'reset green'; - print substr($content, $start_pos + $before_chars + $wlen, $after_chars); - print color 'reset'; - print " >>> ?\n"; - print "Options: "; - - my $answer = ; - chomp($answer); - - if ($answer eq 'y'){ - substr($content, $p - $wlen - $trail_len, $wlen) = $new_word1; - $lcont = length($content); - pos($content) = $p + length($new_word1) - $wlen; - print "PROGRESS: Matched text was replaced with '$new_word1'\n" if $verbose; - } elsif ($answer eq 'Y'){ - substr($content, $p - $wlen - $trail_len, $wlen) = $new_word2; - $lcont = length($content); - pos($content) = $p + length($new_word2) - $wlen; - print "PROGRESS: Matched text was replaced with '$new_word2'\n" if $verbose; - } - - } - pos($content) = $p - $trail_len; - } - }; - - my $we = "(s|(ing))?"; # word endings - if (defined $wordDefs->{words}){ - my $wordDefsCount = $#{$wordDefs->{words}} + 1; - for (my $j = 0 ; $j < $wordDefsCount; $j++){ - my $word = "${$wordDefs->{words}}[$j]$we"; - my $new_word = " {\\termin[cd=${$wordDefs->{modules}}[$j],name=${$wordDefs->{concepts}}[$j]]". - "{W%0} "; - go_word($word, $new_word); - } - } - - if (defined $twinDefs->{words}){ - my $twinDefsCount = $#{$twinDefs->{words}} + 1; - for (my $j = 0 ; $j < $twinDefsCount; $j++){ - my $word = "${$twinDefs->{words}}[$j]$we\\s+${$twinDefs->{twins}}[$j]$we"; - my $new_word1 = " {\\termin[cd=${$twinDefs->{modules}}[$j],name=${$twinDefs->{concepts}}[$j]]". - "{W%0 W%1}} "; - my $new_word2 = " {\\termin[cd=${$twinDefs->{modules}}[$j],name=${$twinDefs->{concepts}}[$j]]". - "{\\twin{W%0}{W%1}}} "; - go_word($word, $new_word1, $new_word2); - } - } - - if (defined $atwinDefs->{words}){ - my $atwinDefsCount = $#{$atwinDefs->{words}} + 1; - for (my $j = 0 ; $j < $atwinDefsCount; $j++){ - my $word = "${$atwinDefs->{words}}[$j]$we\\s+${$atwinDefs->{twins}}[$j]$we\\s+${$atwinDefs->{adjs}}[$j]$we"; - my $new_word1 = " {\\termin[cd=${$atwinDefs->{modules}}[$j],name=${$atwinDefs->{concepts}}[$j]]". - "{W%0 W%1 W%2}} "; - my $new_word2 = " {\\termin[cd=${$atwinDefs->{modules}}[$j],name=${$atwinDefs->{concepts}}[$j]]". - "{\\atwin{W%0}{W%1}{W%2}}} "; - go_word($word, $new_word1, $new_word2); - } - } - - open(FOUT, ">$out_tex_file") or die "Cannot write $out_tex_file\n"; - print FOUT $content; - close(FOUT); - -} - -my @background, my @main, my @output; - -GetOptions("verbose" => sub {$verbose++;}, - "background=s" => \@background, - "main=s" => \@main, - "output=s" => \@output, - "help" => sub { pod2usage(2)}); - -foreach (@background) { loadDefs($_); } - -for (my $i = 0 ; $i <= $#main; $i++) { - replaceDefs($main[$i], $output[$i] || $main[$i]); -} - - -__END__ - -=head1 SYNOPSIS - -termin [options] - -Options: - - --verbose verbose on - --background background file to read \termin{} definitions from - --main main file to process - --output output file; the modified content of the main file will - be written here - --help this screen - -Purpose: - Read the \termin definitions from a background file and update a specific main file; - output will be written to the specified the output file. - Note: multiple background/main/output files may be specified. - -Example: - termin --background a.tex --background b.tex --main slides.tex --output new_slides.tex diff --git a/Master/texmf-dist/source/latex/stex/cmathml/cmathml.dtx b/Master/texmf-dist/source/latex/stex/cmathml/cmathml.dtx deleted file mode 100644 index 9d121dc25d9..00000000000 --- a/Master/texmf-dist/source/latex/stex/cmathml/cmathml.dtx +++ /dev/null @@ -1,2503 +0,0 @@ -% \iffalse meta-comment -% Semantic Macros for Content MathML in LaTeX -% Copyright (c) 2006 Michael Kohlhase, all rights reserved -% this file is released under the -% Gnu Library Public Licences (LGPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/cmathml/cmathml.dtx $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{cmathml}[2010/06/25 v1.0 CMathML Bindings] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,float,amsfonts,a4wide} -\usepackage{stex-logo,cmathml,cmathmlx,presentation} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage{../ctansvn} -\usepackage{hyperref} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: cmathml.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/cmathml/cmathml.dtx $ -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{cmathml.dtx}\end{document} -% -% \fi -% -%\iffalse\CheckSum{1586}\fi -% -% \changes{v0.1}{2006/01/10}{Initial Version} -% \changes{v0.2}{2006/01/16}{Added big operators} -% \changes{v1.0}{2010/06/18}{Declared complete} -% -% \GetFileInfo{cmathml.sty} -% -% \MakeShortVerb{\|} -% -% \def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \newenvironment{pcmtab}[1][5cm]{\begin{center}\begin{tabular}{|l|l|p{#1}|l|}\hline% -% macro & args & Example & Result\\\hline\hline}% -% {\end{tabular}\end{center}} -% \newenvironment{cmtab}{\begin{center}\begin{tabular}{|l|l|l|l|}\hline% -% macro & args & Example & Result\\\hline\hline}% -% {\end{tabular}\end{center}} -% -% \def\snippet#1{\hbox{\ttfamily{#1}}} -% \def\xml{{\scsys{Xml}}} -% \def\xslt{{\scsys{xslt}}} -% \def\element#1{{\ttfamily{#1}}} -% \def\mathml{{\scshape{MathML}}\index{MathML}} -% \def\latexml{\hbox{{\LaTeX}ML}\index{LaTexML}} -% \def\twin#1#2{\index{#1!#2}\index{#2!#1}} -% \def\twintoo#1#2{{#1 #2}\twin{#1}{#2}} -% \def\atwin#1#2#3{\index{#1!#2!#3}\index{#3!#2 (#1)}} -% \def\atwintoo#1#2#3{{#1 #2 #3}\atwin{#1}{#2}{#3}} -% -% \title{{\texttt{cmathml.sty}}: A {\TeX/\LaTeX}-based Syntax for Content -% {\mathml}\thanks{Version {\fileversion} (last revised {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |cmathml| package is part of the {\stex} collection, a version of {\TeX/\LaTeX} -% that allows to markup {\TeX/\LaTeX} documents semantically without leaving the -% document format, essentially turning {\TeX/\LaTeX} into a document format for -% mathematical knowledge management (MKM). -% -% This package provides a collection of semantic macros for content {\mathml} and their -% {\latexml} bindings. These macros form the basis of a naive translation from -% semantically preloaded {\LaTeX} formulae into the content {\mathml} formulae via the -% {\latexml} system. -% \end{abstract} -% -% \newpage\tableofcontents\newpage -% -%\section{Introduction}\label{sec:intro} -% -% This document describes the collection of semantic macros for content {\mathml} and -% their {\latexml} bindings. These macros can be used to mark up mathematical formulae, -% exposing their functional/logical structure. This structure can be used by MKM systems -% for added-value services, either directly from the {\sTeX} sources, or after -% translation. Even though it is part of the {\stex} collection, it can be used -% independently. Note that this documentation of the package presupposes the discussion of -% the {\stex} collection to be self-contained. -% -% \subsection{Encoding Content {\mathml} in {\TeX/\LaTeX}}\label{sec:encoding} -% -% The |cmathml| packge presented here addresses part of transformation problem: representing -% mathematical formulae in the {\LaTeX} workflow, so that content {\mathml} representations -% can be derived from them. The underlying problem is that run-of-the-mill {\TeX/\LaTeX} -% only specifies the presentation (i.e. what formulae look like) and not their content -% (their functional structure). Unfortunately, there are no good methods (yet) to infer the -% latter from the former, but there are ways to get presentation from content. -% -% The solution to this problem is to dump the extra work on the author (after all she knows -% what she is talking about) and give them the chance to specify the intended structure. The -% markup infrastructure supplied by the |cmathml| package lets the author do this without -% changing the visual appearance, so that the {\LaTeX} workflow is not disrupted. -% -% To use these |cmathml| macros in a {\LaTeX} document, you will have to include the -% |cmathml| package using |\usepackage{cmathml}| somewhere in the document preamble. Then -% you can use the macros -% \begin{verbatim} -% $\Ceq{\Cexp{\Ctimes{\Cimaginaryi,\Cpi}},\Cuminus{\Ccn{1}}}$ -% \end{verbatim} -% which will result in $e^{i\pi}=-1$ when the document is formatted in {\LaTeX}. If the -% document is converted to {\xml} using the {\latexml} conversion tool, then the result -% will be content {\mathml} representation: -% -%\begin{exfig} -% \begin{verbatim} -% -% -% -% -% -% -% -% 1 -% -% -% \end{verbatim}\vspace*{-.6cm} -% \caption{Content {\mathml} Form of $e^{i\pi}=-1$}\label{fig:cmathml-eip} -% \end{exfig} -% -% \subsection{Changing the {\TeX/\LaTeX} Presentation}\label{sec:changing} -% -% It is possible to change the default presentation (i.e. the result under {\LaTeX} -% formatting): The semantic macros only function as interface control sequences, which -% call an internal macro that does the actual presentation. Thus we simply have to -% redefine the internal macro to change the presentation. This is possible locally or -% globally in the following way: -% \begin{verbatim} -% \makeatletter -% \gdef\CMathML@exp#1{exp(#1)} -% \def\CMathML@pi{\varpi} -% \makeatother -% \end{verbatim} -% -% The first line is needed to lift the {\LaTeX} redefinition protection for internal -% macros (those that contain the $\snippet{\@}$ character), and the last line restores it -% for the rest of the document. The second line has a {\em{global}} (i.e. the presentation -% will be changed from this point on to the end of the document.) redefinition of the -% presentation of the exponential function in the {\LaTeX} output. The third line has a -% {\em{local}} redefinition of the presentation (i.e. in the local group induced by -% {\LaTeX}'s $\snippet{begin}/\snippet{end}$ grouping or by {\TeX}'s grouping induced by -% curly braces). Note that the argument structure has to be respected by the presentation -% redefinitions. Given the redefinitions above, our equation above would come out as -% $exp(i\varpi)=-1$. -% -% \subsection{The Future: Heuristic Parsing}\label{sec:future} -% -% The current implementation of content {\mathml} transformation from {\LaTeX} to -% {\mathml} lays a heavy burden on the content author: the {\LaTeX} source must be -% semantically preloaded --- the structure of the formulae must be fully annotated. In our -% example above, we had to write {|\Ceq{A,B}|} instead of the more conventional (and more -% legible) {|A=B|}.\ednote{come up with a good mixed example} -% -% The reason for this is that this keeps the transformation to content {\mathml} very -% simple, predictable and robust at the expense of authoring convenience. The -% implementation described in this module should be considered as a first step and -% fallback solution only. Future versions of the $\latexml$ tool will feature more -% intelligent solutions for determining the implicit structure of more conventional -% mathematical notations (and {\LaTeX} representations), so that writing content {\mathml} -% via {\LaTeX} will become less tedious. -% -% However, such more advanced techniques usually rely on linguistic, structural, and -% semantic information about the mathematical objects and their preferred -% representations. They tend to be less predictable to casual users and may lead to -% semantically unexpected results.\ednote{talk about sTeX and extensibility in -% MathML/OpenMath/OMDoc} -% -% \newpage -% \section{The User Interface}\label{sec:modules} -% -% We will now tabulate the semantic macros for the Content {\mathml} elements. We have -% divided them into modules based on the sectional structure of the {\mathml}2 -% recommendation ($2^{nd}$ edition). Before we go into the specific elements one-by-one, -% we will discuss some general properties of the |cmatml| macros and their {\latexml} -% bindings. -% -% \subsection{Generalities of the Encoding}\label{sec:generalities} -% -% The semantic macros provided by the |cmatml| package differ mainly in the way they treat -% their arguments. The simplest case are those for constants~\ref{sec:constants} that do -% not take any. Others take one, two, three, or even four arguments, which have to be -% {\TeX} tokens or have to be wrapped in curly braces. For operators that are associative -% {\twin{associative}{operator}} like addition the argument sequence is provided as a -% single {\TeX} argument (wrapped in curly braces) that contains a comma-separated -% sequence of arguments (wrapped in curly braces where necessary). -% -% \DescribeMacro{\Capply} The current setup of the |cmathml| infrastructure minimizes the -% need of specifying the {\mathml} {\element{apply}} element, since the macros are all in -% applied form: As we have seen in the example in the Introduction~\ref{sec:intro}, a -% macro call like {|\Cexp{A}|} corresponds to the application of the exponential function -% to some object, so the necessary {\element{apply}} elements in the {\mathml} -% representation are implicit in the {\LaTeX} formulation and are thus added by the -% transformation. Of course this only works, if the function is a content {\mathml} -% element. Often, in mathematics we will have situations, where the function is a variable -% (or ``arbitrary but fixed'') function. Then the formula $f(x)$ represented as |$f(x)$| -% in {\TeX} could (and sometimes will) be misunderstood by the Math parser as $f\cdot x$, -% i.e. a product of the number $f$ with the number $x$, where $x$ has brackets for some -% reason. In this case, we can disambiguate by using |\Capply{f}x|, which will also format -% as $f(x)$.\ednote{what about $n$-ary functions?} -% -% By the same token, we do not need to represent the qualifier elements -% {\element{condition}} and {\element{domainofapplication}}\footnote{We do not support the -% {\element{fn}} element as it is deprecated in {\mathml}2 and the {\element{declare}} -% and {\element{sep}} elements, since their semantic status is unclear (to the author, -% if you feel it is needed, please gripe to me).}, for -% {\twintoo{binding}{operator}s}. They are are folded into the special forms of the -% semantic macros for the binding operators below (the ones with the {|Cond|} and {|DA|} -% endings): -% -% For operators that are {\index*{associative}}, {\index*{commutative}}, and -% {\index*{idempotent}} ({\index*{ACI}} i.e. {\index*{bracketing}}, -% order\twin{argument}{order}, and {\index*{multiplicity}} of arguments does not matter) -% {\mathml} supplies the a special form of application as a binding operator (often called -% the corresponding ``{\twintoo{big}{operator}})'', which ranges over a whole set of -% arguments. For instance for the ACI operator $\cup$ for set union has the ``big'' -% operator for unions over collections of sets e.g. used in the power set -% $\bigcup_{S\subseteq T}S$ of a set $T$. In some cases, the ``big'' operators are -% provided independently by {\mathml}, e.g. the ACI addition operator has the sum operator -% as a corresponding ``big operator'': $\sum_{x\in\Cnaturalnumbers}{x^i}$ is the sum of -% the powers of $x$ for all natural numbers. Where they are not, we will supply extra -% macros in the |cmathml| package, e.g. the |\CUnion| macro as the big operator for -% |\Cunion|. -% -% Finally, some of the binding operators have multiple content models flagged by the -% existence of various modifier elements. In these cases, we have provided different -% semantic macros for the different cases. -% -% \subsection{The Token Elements}\label{sec:tokens} -% -% The {\mathml} token elements are very simple containers that wrap some presentation -% {\mathml} text. The {\element{csymbol}} element is the extension element in -% {\mathml}. It's content is the presentation of symbol, and it has a |definitionURL| -% attribute that allows to specify a URI that specifies the semantics of the symbol. This -% URL can be specified in an optional argument to the |\Ccsymbol| macro, in accordance -% with usual mathematical practice, the |definitionURL| is not presented. -% \DescribeMacro{\Ccn}\DescribeMacro{\Cci}\DescribeMacro{\Ccsymbol} -% \begin{cmtab} -% |\Ccn| & token & |\Ccn{t}| & $\Ccn{t}$\\\hline -% |\Cci| & token & |\Cci{t}| & $\Cci{t}$\\\hline -% |\Ccsymbol| & token, URI & |\Ccsymbol[http://w3.org]{t}| -% & $\Ccsymbol[http://w3.org]{t}$\\\hline -% \end{cmtab} -% Like the |\Ccsymbol| macro, all other macros in the |camthml| package take an optional -% argument\footnote{This may change into a KeyVaL argument in future versions of the -% |cmathml| package.} for the |definitionURL| attribute in the corresponding {\mathml} -% element. -% -%\newpage -% \subsection{The Basic Content Elements}\label{sec:basic} -% -% The basic elements comprise various pieces of the {\mathml} infrastructure. Most of the -% semantic macros in this section are relatively uneventful. -% -% \DescribeMacro{\Cinverse}\DescribeMacro{\Ccompose}\DescribeMacro{\Cident} -% \DescribeMacro{\Cdomain}\DescribeMacro{\Ccodomain}\DescribeMacro{\Cimage} -% \begin{cmtab} -% |\Cinverse| & 1 & |\Cinverse{f}| & $\Cinverse{f}$\\\hline -% |\Ccompose| & 1 & |\Ccompose{f,g,h}| & $\Ccompose{f,g,h}$\\\hline -% |\Cident| & 0 & |\Cident| & $\Cident$\\\hline -% |\Cdomain| & 1 & |\Cdomain{f}| & $\Cdomain{f}$\\\hline -% |\Ccodomain| & 1 & |\Ccodomain{f}| & $\Ccodomain{f}$\\\hline -% |\Cimage| & 1 & |\Cimage{f}| & $\Cimage{f}$\\\hline -% \end{cmtab} -% -% \DescribeMacro{\Clambda}\DescribeMacro{\ClambdaDA}\DescribeMacro{\Crestrict} For the -% {\element{lambda}} element, we only have the {\element{domainofapplication}} element, so -% that we have three forms a $\lambda$-construct can have. The first one is the simple one -% where the first element is a bound variable. The second one restricts the applicability -% of the bound variable via a {\element{domainofapplication}} element, while the third one -% does not have a bound variable, so it is just a function restriction -% operator.\ednote{need ClambdaCond} -% -% \begin{cmtab} -% |\Clambda| & 2 & |\Clambda{x,y}{A}| & $\Clambda{x,y}{A}$\\\hline -% |\ClambdaDA| & 3 & |\ClambdaDA{x}{C}{A}| & $\ClambdaDA{x,y}{C}{A}$\\\hline -% |\Crestrict| & 2 & |\Crestrict{f}{S}| & $\Crestrict{f}{S}$\\\hline -% \end{cmtab} -% -% \DescribeMacro{ccinterval}\DescribeMacro{cointerval} -% \DescribeMacro{ocinterval}\DescribeMacro{oointerval} -% The {\element{interval}} constructor actually represents four types of intervals in -% {\mathml}. Therefore we have four semantic macros, one for each combination of open and -% closed endings: -% \begin{cmtab} -% |\Cccinterval| & 2 & |\Cccinterval{1}{2}| & $\Cccinterval{1}{2}$\\\hline -% |\Ccointerval| & 2 & |\Ccointerval{1}{2}| & $\Ccointerval{1}{2}$\\\hline -% |\Cocinterval| & 2 & |\Cocinterval{1}{2}| & $\Cocinterval{1}{2}$\\\hline -% |\Coointerval| & 2 & |\Coointerval{1}{2}| & $\Coointerval{1}{2}$\\\hline -% \end{cmtab} -% -%\DescribeMacro{\Cpiecewise}\DescribeMacro{\Cpiece}\DescribeMacro{\Cotherwise} -% The final set of semantic macros are concerned with piecewise definition of functions. -% \begin{cmtab} -% |\Cpiecewise| & 1 & see below & see below\\\hline -% |\Cpiece| & 2 & |\Cpiece{A}{B}| & $\begin{array}{ll}\Cpiece{A}{B}\end{array}$\\\hline -% |\Cotherwise| & 1 & |\Cotherwise{B}| & $\begin{array}{ll}\Cotherwise{1}\end{array}$\\\hline -% \end{cmtab} -% -% For instance, we could define the abstract value function on the reals with the following -% markup -% -% \begin{center} -% \begin{tabular}{|l|l|}\hline -% Semantic Markup & Formatted\\\hline -% \begin{minipage}{8cm}\footnotesize -% \begin{verbatim} -% \Ceq{\Cabs{x}, -% \Cpiecewise{\Cpiece{\Cuminus{x}}{\Clt{x,0}} -% \Cpiece{0}{\Ceq{x,0}} -% \Cotherwise{x}}} -% \end{verbatim} -% \end{minipage} & -% $\Ceq{\Cabs{x},\Cpiecewise{\Cpiece{\Cuminus{x}}{\Clt{x,0}} -% \Cpiece{0}{\Ceq{x,0}} -% \Cotherwise{x}}}$ -% \\\hline -% \end{tabular} -% \end{center} -% -% \newpage -% \subsection{Elements for Arithmetic, Algebra, and Logic}\label{sec:arith} -% -% This section introduces the infrastructure for the basic arithmetic operators. The first -% set is very simple -% -% \DescribeMacro{\Cquotient}\DescribeMacro{\Cfactorial}\DescribeMacro{\Cdivide} -% \DescribeMacro{\Cminus}\DescribeMacro{\Cplus}\DescribeMacro{\Cpower} -% \DescribeMacro{\Crem}\DescribeMacro{\Ctimes}\DescribeMacro{\Croot} -% \begin{cmtab} -% |\Cquotient| & 2 & |\Cquotient{1}{2}| & $\Cquotient{1}{2}$\\\hline -% |\Cfactorial| & 1 & |\Cfactorial{7}| & $\Cfactorial{7}$\\\hline -% |\Cdivide| & 2 & |\Cdivide{1}{2}| & $\Cdivide{1}{2}$\\\hline -% |\Cminus| & 2 & |\Cminus{1}{2}| & $\Cminus{1}{2}$\\\hline -% |\Cplus| & 1 & |\Cplus{1}| & $\Cplus{1}$\\\hline -% |\Cpower| & 2 & |\Cpower{x}{2}| & $\Cpower{x}{2}$\\\hline -% |\Crem| & 2 & |\Crem{7}{2}| & $\Crem{7}{2}$\\\hline -% |\Ctimes| & 1 & |\Ctimes{1,2,3,4}| & $\Ctimes{1,2,3,4}$\\\hline -% |\Croot| & 2 & |\Croot{3}{2}| & $\Croot{3}{2}$\\\hline -% \end{cmtab} -% -% The second batch below is slightly more complicated, since they take a set of -% arguments. In the |cmathml| package, we treat them like {\index*{associative}} -% operators, i.e. they act on a single argument that contains a sequence of -% comma-separated arguments\ednote{implement this in the latexml side} -% -% \DescribeMacro{\Cmax}\DescribeMacro{\Cmin}\DescribeMacro{\Cgcd}\DescribeMacro{\Clcm} -% \begin{cmtab} -% |\Cmax| & 1 & |\Cmax{1,3,6}| & $\Cmax{1,3,6}$\\\hline -% |\Cmin| & 1 & |\Cmin{1,4,5}| & $\Cmin{1,4,7}$\\\hline -% |\Cgcd| & 1 & |\Cgcd{7,3,5}| & $\Cgcd{7,3,5}$\\\hline -% |\Clcm| & 1 & |\Clcm{3,5,4}| & $\Clcm{3,5,4}$\\\hline -% \end{cmtab} -% -% The operators for the logical connectives are associative as well\ednote{maybe add some -% precedences here.}. Here, conjunction, (exclusive) disjunction are $n$-ary associative -% operators, therefore their semantic macro only has one {\TeX} argument which contains a -% comma-separated list of subformulae. -% \DescribeMacro{\Cand}\DescribeMacro{\Cor}\DescribeMacro{\Cxor}\DescribeMacro{\Cnot} -% \DescribeMacro{\Cimplies} -% \begin{cmtab} -% |\Cand| & 1 & |\Cand{A,B,C}| & $\Cand{A,B,C}$\\\hline -% |\Cor| & 1 & |\Cor{A,B,C}| & $\Cor{A,B,C}$\\\hline -% |\Cxor| & 1 & |\Cxor{A,B,C}| & $\Cxor{A,B,C}$\\\hline -% |\Cnot| & 1 & |\Cnot{A}| & $\Cnot{A}$\\\hline -% |\Cimplies| & 2 & |\Cimplies{A}{B}| & $\Cimplies{A}{B}$\\\hline -% \end{cmtab} -% -% The following are the corresponding big operators, where appropriate. -% \DescribeMacro{\CAndDA}\DescribeMacro{\CAndCond} -% \DescribeMacro{\COrDA}\DescribeMacro{\COrCond} -% \DescribeMacro{\CXorDA}\DescribeMacro{\CXorCond} -% \begin{cmtab} -% |\CAndDA| & 2 & |\CAndDA\Cnaturalnumbers\phi| & $\CAndDA\Cnaturalnumbers\phi$\\\hline -% |\CAndCond| & 3 & |\CAndCond{x}{\Cgt{x}5}{\psi(x)}| -% & $\CAndCond{x}{\Cgt{x}5}{\psi(x)}$\\\hline -% |\COrDA| & 2 & |\COrDA\Cnaturalnumbers\phi| & $\COrDa\Cnaturalnumbers\phi$\\\hline -% |\COrCond| & 3 & |\COrCond{x}{\Cgt{x}5}{\psi(x)}| -% & $\COrCond{x}{\Cgt{x}5}{\psi(x)}$\\\hline -% |\CXorDA| & 2 & |\CXorDA\Cnaturalnumbers\phi| & $\CXorDA\Cnaturalnumbers\phi$\\\hline -% |\CXorCond| & 3 & |\CXorCond{x}{\Cgt{x}5}{\psi(x)}| -% & $\CXorCond{x}{\Cgt{x}5}{\psi(x)}$\\\hline -% \end{cmtab} -% -% The semantic macros for the quantifiers come in two forms: with- and without a condition -% qualifier. In a restricted quantification of the form $\forall x,C:A$, the bound variable -% $x$ ranges over all values, such that $C$ holds ($x$ will usually occur in the condition -% $C$). In an unrestricted quantification of the form $\forall x:A$, the bound variable -% ranges over all possible values for $x$. -% \DescribeMacro{\Cforall}\DescribeMacro{\CforallCond} -% \DescribeMacro{\Cexists}\DescribeMacro{\CexistsCond} -% \begin{cmtab} -% |\Cforall| & 2 & |\Cforall{x,y}{A}| & $\Cforall{x,y}{A}$\\\hline -% |\CforallCond| & 3 & |\CforallCond{x}{C}{A}| & $\CforallCond{x}{C}{A}$\\\hline -% |\Cexists| & 2 & |\Cexists{x,y}{A}| & $\Cexists{x,y}{A}$\\\hline -% |\CexistsCond| & 3 & |\CexistsCond{x}{C}{A}| & $\CexistsCond{x}{C}{A}$\\\hline -% \end{cmtab} -% -% The rest of the operators are very simple in structure. -% \DescribeMacro{\Cabs}\DescribeMacro{\Cconjugate}\DescribeMacro{\Carg} -% \DescribeMacro{\Creal}\DescribeMacro{\Cimaginary}\DescribeMacro{\Cfloor} -% \DescribeMacro{\Cceiling} -% \begin{cmtab} -% |\Cabs| & 1 & |\Cabs{x}| & $\Cabs{x}$\\\hline -% |\Cconjugate| & 1 & |\Cconjugate{x}| & $\Cconjugate{x}$\\\hline -% |\Carg| & 1 & |\Carg{x}| & $\Carg{x}$\\\hline -% |\Creal| & 1 & |\Creal{x}| & $\Creal{x}$\\\hline -% |\Cimaginary| & 1 & |\Cimaginary{x}| & $\Cimaginary{x}$\\\hline -% |\Cfloor| & 1 & |\Cfloor{1.3}| & $\Cfloor{1.3}$\\\hline -% |\Cceiling| & 1 & |\Cceiling{x}| & $\Cceiling{x}$\\\hline -% \end{cmtab} -% -% \subsection{Relations}\label{sec:rels} -% -% The relation symbols in {\mathml} are mostly $n$-ary associative operators (taking a -% comma-separated list as an argument). -% -% \DescribeMacro{\Ceq}\DescribeMacro{\Cneq}\DescribeMacro{\Cgt}\DescribeMacro{\Clt} -% \DescribeMacro{\Cgeq}\DescribeMacro{\Cleq}\DescribeMacro{\Cequivalent} -% \DescribeMacro{\Capprox}\DescribeMacro{\Cfactorof} -% \begin{cmtab} -% |\Ceq| & 1 & |\CeqA,B,C| & $\Ceq{A,B,C}$\\\hline -% |\Cneq| & 2 & |\Cneq{1}{2}| & $\Cneq{1}{2}$\\\hline -% |\Cgt| & 1 & |\Cgt{A,B,C}| & $\Cgt{A,B,C}$\\\hline -% |\Clt| & 1 & |\Clt{A,B,C}| & $\Clt{A,B,C}$\\\hline -% |\Cgeq| & 1 & |\Cgeq{A,B,C}| & $\Cgeq{A,B,C}$\\\hline -% |\Cleq| & 1 & |\Cleq{A,B,C}| & $\Cleq{A,B,C}$\\\hline -% |\Cequivalent| & 1 & |\Cequivalent{A,B,C}| & $\Cequivalent{A,B,C}$\\\hline -% |\Capprox| & 2 & |\Capprox{1}{2}| & $\Capprox{1}{1.1}$\\\hline -% |\Cfactorof| & 2 & |\Cfactorof{7}{21}| & $\Cfactorof{7}{21}$\\\hline -% \end{cmtab} -% -% \subsection{Elements for Calculus and Vector Calculus}\label{sec:calculus-vector-calculus} -% -% The elements for calculus and vector calculus have the most varied forms. -% -% The integrals come in four forms: the first one is just an indefinite integral over a -% function, the second one specifies the bound variables, upper and lower limits. The -% third one specifies a set instead of an interval, and finally the last specifies a -% bound variable that ranges over a set specified by a condition. -% -% \DescribeMacro{\Cint}\DescribeMacro{\CintLimits}\DescribeMacro{\CintDA}\DescribeMacro{\CintCond} -% \begin{cmtab} -% |\Cint| & 1 & |\Cint{f}| & $\Cint{f}$\\\hline -% |\CintLimits| & 4 & |\CintLimits{x}{0}{\Cinfinit}{f(x)}| -% & $\CintLimits{x}{0}{\infty}{f(x)}$\\\hline -% |\CintDA| & 2 & |\CintDA{\Creals}{f}| -% & $\CintDA{\mathbb{R}}{f}$\\\hline -% |\CintCond| & 3 & |\CintCond{x}{\Cin{x}{D}}{f(x)}| -% & $\CintCond{x}{x\in D}{f(x)}$\\\hline -% \end{cmtab} -% -% \DescribeMacro{\Cdiff}\DescribeMacro{\Cddiff} The differentiation operators are used in -% the usual way: simple differentiation is represented by the |\Cdiff| macro which takes -% the function to be differentiated as an argument, differentiation with the $d$-notation -% is possible by the |\Cddiff|, which takes the bound variable\ednote{really only one?} as -% the first argument and the function expression (in the bound variable) as a second -% argument. -% -% \DescribeMacro{\Cpartialdiff} Partial Differentiation is specified by the -% |\Cpartialdiff| macro. It takes the overall degree as the first argument (to leave it -% out, just pass the empty argument). The second argument is the list of bound variables -% (with their degrees; see below), and the last the function expression (in these bound -% variables). \DescribeMacro{\Cdegree} To specify the respective degrees of -% differentiation on the variables, we use the |\Cdegree| macro, which takes two arguments -% (but no optional argument), the first one is the degree (a natural number) and the -% second one takes the variable. Note that the overall degree has to be the sum of the -% degrees of the bound variables. -% -% \begin{pcmtab}[6cm] -% |\Cdiff| & 1 & |\Cdiff{f}| & $\Cdiff{f}$\\\hline -% |\Cddiff| & 2 & |\Cddiff{x}{f}| & $\Cddiff{x}{f}$\\\hline -% |\Cpartialdiff| & 3 & |\Cpartialdiff{3}{x,y,z}{f(x,y)}| -% & $\Cpartialdiff{3}{x,y,z}{f(x,y)}$\\\hline -% |\Cpartialdiff| & 3 & |\Cpartialdiff{7}| |{\Cdegree{2}{x},\Cdegree{4}{y},z}| |{f(x,y)}| -% & $\Cpartialdiff{7}{\Cdegree{2}{x},\Cdegree{4}{y},z}{f(x,y)}$\\\hline -% \end{pcmtab} -% -% \DescribeMacro{\Climit}\DescribeMacro{\ClimitCond} For content {\mathml}, there are two -% kinds of limit expressions: The simple one is specified by the |\Climit| macro, which -% takes three arguments: the bound variable, the target, and the limit expression. If we -% want to place additional conditions on the limit construction, then we use the -% |\ClimitCond| macro, which takes three arguments as well, the first one is a sequence of -% bound variables, the second one is the condition, and the third one is again the limit -% expression. -% -% \DescribeMacro{\Ctendsto}\DescribeMacro{\CtendstoAbove}\DescribeMacro{\CtendstoBelow} If -% we want to speak qualitatively about limit processes (e.g. in the condition of a -% |\ClimitCond| expression), then can use the {\mathml} {\element{tendsto}} element, which -% is represented by the |\Ctendsto| macro, wich takes two expressions arguments. In -% {\mathml}, the {\element{tendsto}} element can be further specialized by an attribute to -% indicate the direction from which a limit is approached. In the |cmathml| package, we -% supply two additional (specialized) macros for that: |\CtendstoAbove| and -% |\CtendstoBelow|. -% \begin{cmtab} -% |\Climit| & 3 & |\Climit{x}{0}{\Csin{x}}| & $\Climit{x}{0}{\Csin{x}}$\\\hline -% |\ClimitCond| & 3 & |\ClimitCond{x}{\Ctendsto{x}{0}}{\Ccos{x}}| -% & $\ClimitCond{x}{\Ctendsto{x}{0}}{\Ccos{x}}$\\\hline -% |\Ctendsto| & 2 & |\Ctendsto{f(x)}{2}| & $\Ctendsto{f(x)}{2}$\\\hline -% |\CtendstoAbove| & 2 & |\CtendstoAbove{x}{1}| & $\CtendstoAbove{x}{1}$\\\hline -% |\CtendstoBelow| & 2 & |\CtendstoBelow{x}{2}| & $\CtendstoBelow{x}{2}$\\\hline -% \end{cmtab} -% -% \DescribeMacro{\Cdivergence}\DescribeMacro{\Cgrad}\DescribeMacro{\Ccurl} -% \DescribeMacro{\Claplacian} -% \begin{cmtab} -% |\Cdivergence| & 1 & |\Cdivergence{A}| & $\Cdivergence{A}$\\\hline -% |\Cgrad| & 1 & |\Cgrad{\Phi}| & $\Cgrad{\Phi}$\\\hline -% |\Ccurl| & 1 & |\Ccurl{\Xi}| & $\Ccurl{\Xi}$\\\hline -% |\Claplacian| & 1 & |\Claplacian{A}| & $\Claplacian{A}$\\\hline -% \end{cmtab} -% -% \subsection{Sets and their Operations}\label{sec:sets} -% -% \DescribeMacro{\Cset}\DescribeMacro{\Clist} -% \DescribeMacro{\CsetDA}\DescribeMacro{\CsetRes}\DescribeMacro{\CsetCond} -% The |\Cset| macros is used as the simple finite set constructor, it takes one argument -% that is a comma-separated sequence of members of the set. |\CsetRes| allows to specify a -% set by restricting a set of variables, and |\CsetCond| is the general form of the set -% construction.\ednote{need to do this for lists as well? Probably} -% \begin{cmtab} -% |\Cset| & 1 & |\Cset{1,2,3}| & $\Cset{1,2,3}$\\\hline -% |\CsetRes| & 2 & |\CsetRes{x}{\Cgt{x}5}| -% & $\CsetRes{x}{\Cgt{x}5}$\\\hline -% |\CsetCond| & 3 & |\CsetCond{x}{\Cgt{x}5}{\Cpower{x}3}| -% & $\CsetCond{x}{\Cgt{x}5}{\Cpower{x}3}$\\\hline -% |\CsetDA| & 3 & |\CsetDA{x}{\Cgt{x}5}{S_x}}| -% & $\CsetDA{x}{\Cgt{x}5}{S_x}$\\\hline -% |\Clist| & 1 & |\Clist{3,2,1}| & $\Clist{3,2,1}$\\\hline -%\end{cmtab} -% -%\DescribeMacro{\Cunion}\DescribeMacro{\Cintersect}\DescribeMacro{\Ccartesianproduct} -% \DescribeMacro{\Csetdiff}\DescribeMacro{\Ccard}\DescribeMacro{\Cin}\DescribeMacro{\Cnotin} -% \begin{cmtab} -% |\Cunion| & 1 & |\Cunion{S,T,L}| & $\Cunion{S,T,L}$\\\hline -% |\Cintersect| & 1 & |\Cintersect{S,T,L}| & $\Cintersect{S,T,L}$\\\hline -% |\Ccartesianproduct| & 1 & |\Ccartesianproduct{A,B,C}| & $\Ccartesianproduct{A,B,C}$\\\hline -% |\Csetdiff| & 2 & |\Csetdiff{S}{L}| & $\Csetdiff{S}{L}$\\\hline -% |\Ccard| & 1 & |\Ccard{\Cnaturalnumbers}| & $\Ccard{\mathbb{N}}$\\\hline -% |\Cin| & 2 & |\Cin{a}{S}| & $\Cin{a}{S}$\\\hline -% |\Cnotin| & 2 & |\Cnotin{b}{S}| & $\Cnotin{b}{S}$\\\hline -%\end{cmtab} -% -% The following are the corresponding big operators for the first three binary ACI -% functions. \DescribeMacro{\CUnionDA}\DescribeMacro{\CUnionCond} -% \DescribeMacro{\CIntersectDA}\DescribeMacro{\CIntersectCond} -% \DescribeMacro{\CCartesianproductDA}\DescribeMacro{\CCartesianproductCond} -% \begin{cmtab} -% |\CUnionDA| & 2 & |\CUnionDA\Cnaturalnumbers{S_i}| -% & $\CUnionDA\Cnaturalnumbers{S_i}$\\\hline -% |\CUnionCond| & 3 & |\CUnionCond{x}{\Cgt{x}5}{S_x}}| -% & $\CUnionCond{x}{\Cgt{x}5}{S_x}$\\\hline -% |\CIntersectDA| & 2 & |\CIntersectDA\Cnaturalnumbers{S_i}| -% & $\CIntersectDa\Cnaturalnumbers{S_i}$\\\hline -% |\CIntersectCond| & 3 & |\CIntersectCond{x}{\Cgt{x}5}{S_x}| -% & $\CIntersectCond{x}{\Cgt{x}5}{S_x}$\\\hline -% |\CCartesianproductDA| & 2 & |\CCartesianproductDA\Cnaturalnumbers{S_i}| -% & $\CCartesianproductDA\Cnaturalnumbers{S_i}$\\\hline -% |\CCartesianproductCond| & 3 & |\CCartesianproductCond{x}{\Cgt{x}5}{S_x}| -% & $\CCartesianproductCond{x}{\Cgt{x}5}{S_x}$\\\hline -% \end{cmtab} -% -% \DescribeMacro{\Csubset}\DescribeMacro{\Cprsubset} -% \DescribeMacro{\Cnotsubset}\DescribeMacro{\Cnotprsubset} For the set containment -% relations, we are in a somewhat peculiar situation: content {\mathml} only supplies the -% subset side of the reations and leaves out the superset relations. Of course they are -% not strictly needed, since they can be expressed in terms of the subset relation with -% reversed argument order. But for the |cmathml| package, the macros have a presentational -% side (for the {\LaTeX} workflow) and a content side (for the {\latexml} converter) -% therefore we will need macros for both relations. -% -% \begin{cmtab} -% |\Csubset| & 1 & |\Csubset{S,T,K}| & $\Csubset{S,T,K}$\\\hline -% |\Cprsubset| & 1 & |\Cprsubset{S,T,K}| & $\Cprsubset{S,T,K}$\\\hline -% |\Cnotsubset| & 2 & |\Cnotsubset{S}{K}| & $\Cnotsubset{S}{K}$\\\hline -% |\Cnotprsubset| & 2 & |\Cnotprsubset{S}{L}| & $\Cnotprsubset{S}{L}$\\\hline -% \end{cmtab} -% \DescribeMacro{\Csupset}\DescribeMacro{\Cprsupset} -% \DescribeMacro{\Cnotsupset}\DescribeMacro{\Cnotprsupset} -% The following set of macros are presented in {\LaTeX} as their name suggests, but upon -% transformation will generate content markup with the {\mathml} elements (i.e. in terms -% of the subset relation). -% -% \begin{cmtab} -% |\Csupset| & 1 & |\Csupset{S,T,K}| & $\Csupset{S,T,K}$\\\hline -% |\Cprsupset| & 1 & |\Cprsupset{S,T,K}| & $\Cprsupset{S,T,K}$\\\hline -% |\Cnotsupset| & 2 & |\Cnotsupset{S}{K}| & $\Cnotsupset{S}{K}$\\\hline -% |\Cnotprsupset| & 2 & |\Cnotprsupset{S}{L}| & $\Cnotprsupset{S}{L}$\\\hline -% \end{cmtab} -% -% \subsection{Sequences and Series}\label{sec:sequences} -% -% \DescribeMacro{\CsumLimits}\DescribeMacro{\CsumCond}\DescribeMacro{\CsumDA} -% \DescribeMacro{\CprodLimist}\DescribeMacro{\CprodCond}\DescribeMacro{\CprodDA} -% \begin{cmtab} -% |\CsumLimits| & 4 & |\CsumLimits{i}{0}{50}{x^i}| & $\CsumLimits{i}{0}{50}{x^i}$\\\hline -% |\CsumCond| & 3 & |\CsumCond{i}{\Cintegers}{i}| & $\CsumCond{i}{\mathbb{Z}}{i}$\\\hline -% |\CsumDA| & 2 & |\CsumDA{\Cintegers}{f}| & $\CsumDA{\mathbb{Z}}{f}$\\\hline -% |\CprodLimits| & 4 & |\CprodLimits{i}{0}{20}{x^i}| & $\CprodLimits{i}{0}{20}{x^i}$\\\hline -% |\CprodCond| & 3 & |\CprodCond{i}{\Cintegers}{i}| & $\CprodCond{i}{\mathbb{Z}}{i}$\\\hline -% |\CprodDA| & 2 & |\CprodDA{\Cintegers}{f}| & $\CprodDA{\mathbb{Z}}{f}$\\\hline -% \end{cmtab} -% -% \subsection{Elementary Classical Functions}\label{sec:specfun} -% -% \DescribeMacro{\Csin}\DescribeMacro{\Ccos}\DescribeMacro{\Ctan} -% \DescribeMacro{\Csec}\DescribeMacro{\Ccsc}\DescribeMacro{\Ccot} -% \begin{cmtab} -% |\Csin| & 1 & |\Csin{x}| & $\Csin{x}$\\\hline -% |\Ccos| & 1 & |\Ccos{x}| & $\Ccos{x}$\\\hline -% |\Ctan| & 1 & |\Ctan{x}| & $\Ctan{x}$\\\hline -% |\Csec| & 1 & |\Csec{x}| & $\Csec{x}$\\\hline -% |\Ccsc| & 1 & |\Ccsc{x}| & $\Ccsc{x}$\\\hline -% |\Ccot| & 1 & |\Ccot{x}| & $\Ccot{x}$\\\hline -% \end{cmtab} -% -% \DescribeMacro{\Csinh}\DescribeMacro{\Ccosh}\DescribeMacro{\Ctanh} -% \DescribeMacro{\Csech}\DescribeMacro{\Ccsch}\DescribeMacro{\Ccoth} -% \begin{cmtab} -% |\Csinh| & 1 & |\Csinh{x}| & $\Csinh{x}$\\\hline -% |\Ccosh| & 1 & |\Ccosh{x}| & $\Ccosh{x}$\\\hline -% |\Ctanh| & 1 & |\Ctanh{x}| & $\Ctanh{x}$\\\hline -% |\Csech| & 1 & |\Csech{x}| & $\Csech{x}$\\\hline -% |\Ccsch| & 1 & |\Ccsch{x}| & $\Ccsch{x}$\\\hline -% |\Ccoth| & 1 & |\Ccoth{x}| & $\Ccoth{x}$\\\hline -% \end{cmtab} -% -% \DescribeMacro{\Carcsin}\DescribeMacro{\Carccos}\DescribeMacro{\Carctan} -% \DescribeMacro{\Carcsec}\DescribeMacro{\Carccsc}\DescribeMacro{\Carccot} -% \begin{cmtab} -% |\Carcsin| & 1 & |\Carcsin{x}| & $\Carcsin{x}$\\\hline -% |\Carccos| & 1 & |\Carccos{x}| & $\Carccos{x}$\\\hline -% |\Carctan| & 1 & |\Carctan{x}| & $\Carctan{x}$\\\hline -% |\Carccosh| & 1 & |\Carccosh{x}| & $\Carccosh{x}$\\\hline -% |\Carccot| & 1 & |\Carccot{x}| & $\Carccot{x}$\\\hline -% \end{cmtab} -% -% \DescribeMacro{\Carcsinh}\DescribeMacro{\Carccosh}\DescribeMacro{\Carctanh} -% \DescribeMacro{\Carcsech}\DescribeMacro{\Carccsch}\DescribeMacro{\Carccoth} -% \begin{cmtab} -% |\Carccoth| & 1 & |\Carccoth{x}| & $\Carccoth{x}$\\\hline -% |\Carccsc| & 1 & |\Carccsc{x}| & $\Carccsc{x}$\\\hline -% |\Carcsinh| & 1 & |\Carcsinh{x}| & $\Carcsinh{x}$\\\hline -% |\Carctanh| & 1 & |\Carctanh{x}| & $\Carctanh{x}$\\\hline -% |\Cexp| & 1 & |\Cexp{x}| & $\Cexp{x}$\\\hline -% |\Cln| & 1 & |\Cln{x}| & $\Cln{x}$\\\hline -% |\Clog| & 2 & |\Clog{5}{x}| & $\Clog{5}{x}$\\\hline -% \end{cmtab} -% -% \subsection{Statistics}\label{sec:statistics} -% -% The only semantic macro that is non-standard in this module is the one for the -% {\element{moment}} and {\element{momentabout}} elements in {\mathml}. They are combined -% into the semantic macro {|CmomentA|}; its first argument is the degree, its -% second one the point in the distribution, the moment is taken about, and the third is -% the distribution. -% -% \DescribeMacro{\Cmean}\DescribeMacro{\Csdev}\DescribeMacro{\Cvar}\DescribeMacro{\Cmedian} -% \DescribeMacro{\Cmode}\DescribeMacro{\Cmoment}\DescribeMacro{\CmomentA} -% \begin{cmtab} -% |\Cmean| & 1 & |\Cmean{X}| & $\Cmean{X}$\\\hline -% |\Csdev| & 1 & |\Csdev{X}| & $\Csdev{X}$\\\hline -% |\Cvar| & 1 & |\Cvar{X}| & $\Cvar{X}$\\\hline -% |\Cmedian| & 1 & |\Cmedian{X}| & $\Cmedian{X}$\\\hline -% |\Cmode| & 1 & |\Cmode{X}| & $\Cmode{X}$\\\hline -% |\Cmoment| & 3 & |\Cmoment{3}{X}| & $\Cmoment{3}{X}$\\\hline -% |\CmomentA| & 3 & |\CmomentA{3}{p}{X}| & $\CmomentA{3}{p}{X}$\\\hline -% \end{cmtab} -% -% \subsection{Linear Algebra}\label{sec:linalg} -% -% In these semantic macros, only the matrix constructor is unusual; instead of -% constructing a matrix from {\element{matrixrow}} elements like {\mathml} does, the macro -% follows the {\TeX/\LaTeX} tradition allows to give a matrix as an array. The first -% argument of the macro is the column specification (it will only be used for presentation -% purposes), and the second one the rows. -% -% \DescribeMacro{\Cvector}\DescribeMacro{\Cmatrix}\DescribeMacro{\Cdeterminant} -% \DescribeMacro{\Ctranspose}\DescribeMacro{\Cselector} -% \DescribeMacro{\Cvectorproduct}\DescribeMacro{\Cscalarproduct}\DescribeMacro{\Couterproduct} -% \begin{cmtab} -% |\Cvector| & 1 & |\Cvector{1,2,3}| & $\Cvector{1,2,3}$\\\hline -% |\Cmatrix| & 2 & |\Cmatrix{ll}{1 & 2\\ 3 & 4}| & $\Cmatrix{ll}{1 & 2\\3 & 4}$\\\hline -% |\Cdeterminant| & 1 & |\Cdeterminant{A}| & $\Cdeterminant{A}$\\\hline -% |\Ctranspose| & 1 & |\Ctranspose{A}| & $\Ctranspose{A}$\\\hline -% |\Cselector| & 2 & |\Cselector{A}{2}| & $\Cselector{A}{2}$\\\hline -% |\Cvectproduct| & 2 & |\Cvectproduct{\phi}{\psi}| & $\Cvectproduct{\phi}{\psi}$\\\hline -% |\Cscalarproduct| & 2 & |\Cscalarproduct{\phi}{\psi}| & $\Cscalarproduct{\phi}{\psi}$\\\hline -% |\Couterproduct| & 2 & |\Couterproduct{\phi}{\psi}| & $\Couterproduct{\phi}{\psi}$\\\hline -% \end{cmtab} -% -% \subsection{Constant and Symbol Elements}\label{sec:constants} -% -% The semantic macros for the {\mathml} constant and symbol elements are very simple, they -% do not take any arguments, and their name is just the {\mathml} element name prefixed by -% a capital C. -% -% \DescribeMacro{\Cintegers}\DescribeMacro{\Creals}\DescribeMacro{\Crationals} -% \DescribeMacro{\Ccomplexes}\DescribeMacro{\Cprimes} -% \begin{cmtab} -% |\Cintegers| & & |\Cintegers| & $\Cintegers$\\\hline -% |\Creals| & & |\Creals| & $\Creals$\\\hline -% |\Crationals| & & |\Crationals| & $\Crationals$\\\hline -% |\Cnaturalnumbers| & & |\Cnaturalnumbers| & $\Cnaturalnumbers$\\\hline -% |\Ccomplexes| & & |\Ccomplexes| & $\Ccomplexes$\\\hline -% |\Cprimes| & & |\Cprimes| & $\Cprimes$\\\hline -% \end{cmtab} -% -% \DescribeMacro{\Cexponentiale}\DescribeMacro{\Cimaginaryi} -% \DescribeMacro{\Ctrue}\DescribeMacro{\Cfalse} \DescribeMacro{\Cemptyset} -% \DescribeMacro{\Cpi}\DescribeMacro{\Ceulergamma}\DescribeMacro{\Cinfinit} -% \begin{cmtab} -% |\Cexponemtiale| & & |\Cexponemtiale| & $\Cexponemtiale$\\\hline -% |\Cimaginaryi| & & |\Cimaginaryi| & $\Cimaginaryi$\\\hline -% |\Cnotanumber| & & |\Cnotanumber| & $\Cnotanumber$\\\hline -% |\Ctrue| & & |\Ctrue| & $\Ctrue$\\\hline -% |\Cfalse| & & |\Cfalse| & $\Cfalse$\\\hline -% |\Cemptyset| & & |\Cemptyset| & $\Cemptyset$\\\hline -% |\Cpi| & & |\Cpi| & $\Cpi$\\\hline -% |\Ceulergamma| & & |\Ceulergamma| & $\Ceulergamma$\\\hline -% |\Cinfinit| & & |\Cinfinit| & $\Cinfinit$\\\hline -% \end{cmtab} -% -% \subsection{Extensions}\label{sec:cmathmlx} -% Content MathML does not (even though it claims to cover M-14 Math) symbols for all the -% common mathematical notions. The |cmathmlx| attempts to collect these and provide -% {\TeX/\LaTeX} and {\latexml} bindings. -% -%\DescribeMacro{\Ccomplement} -% \begin{cmtab} -% |\Ccomplement| & 1 & |\Ccomplement{\Cnaturalnumbers}| & $\Ccomplement{\mathbb{N}}$\\\hline -%\end{cmtab} -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography}\newpage -% -% \section{The Implementation}\label{sec:impl} -% -% In this file we document both the implementation of the |cmathml| package, as well as -% the corresponding {\latexml} bindings. This keeps similar items close to each other, -% even though they eventually go into differing files and helps promote consistency. We -% specify which code fragment goes into which file by the {\xml}-like grouping commands: -% The code between {\textsf{$\langle$*sty$\rangle$}} and {\textsf{$\langle$/sty$\rangle$}} -% goes into the package file |cmathml.sty|, and the code between -% {\textsf{$\langle$*ltxml$\rangle$}} and {\textsf{$\langle$/ltxml$\rangle$}} goes into -% |cmathml.ltxml| -% -% \subsection{Initialization and auxiliary functions}\label{sec:impl:init} -% -% We first make sure that the {\sTeX} |presentation| package is loaded. -% \begin{macrocode} -%<*sty|styx> -\RequirePackage{presentation} -% -% \end{macrocode} -% -% Before we start im plementing the {\mathml} macros, we will need to set up the packages -% for perl in the {\latexml} bindings file. -% \begin{macrocode} -%<*ltxml|ltxmlx> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use LaTeXML::Document; -RequirePackage('LaTeX'); -% -% \end{macrocode} -% -% The next step is to itroduce two auxiliary functions, they are needed to work with -% $n$-ary function elements. The first one removes arbitrary tokens from a list, and the -% specializes that to commas. In particular |remove_tokens_from_list($List, $pattern, $math)| -% returns a new |List| (or |MathList| if |$math| is true) -% with all the tokens in |$List| except the ones which follow -% the pattern |$pattern|. -% -% \begin{macrocode} -%<*ltxml> -sub remove_tokens_from_list { - my ($list, $pattern, $math) = @_; - if (ref $list) { - my @toks = $list->unlist; - @toks = grep($_->toString !~ /$pattern/, @toks); - ($math ? (LaTeXML::MathList->new(@toks)) : (LaTeXML::List)->new(@toks)); } - else { undef; } } - -sub remove_math_commas { - my ($whatsit, $argno) = @_; - my @args = $whatsit ? $whatsit->getArgs() : undef; - $argno--; - if ($args[$argno]) { - $args[$argno] = remove_tokens_from_list($args[$argno], ',', 1); - $whatsit->setArgs(@args); - } - return; -} -% -% \end{macrocode} -% -% The structural macros are rather simple: -% -% \begin{macrocode} -%<*sty> -\newcommand{\Capply}[3][]{#2(#3)} -% -%<*ltxml> -DefConstructor('\Capply [] {} {}', - "#2 #3"); -% -% after this, the implementation will always have the same form. We will first -% implement a block of {\LaTeX} macros via a |\newcommand| and then specify the -% corresponding {\latexml} bindings for them. -% -% \subsection{The Token Elements}\label{impl:tokens} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@cn#1{#1} -\newcommand{\Ccn}[2][]{\CMathML@cn{#2}} -\def\CMathML@ci#1{#1} -\newcommand{\Cci}[2][]{\CMathML@ci{#2}} -\def\CMathML@csymbol#1{#1} -\newcommand{\Ccsymbol}[2][]{\CMathML@csymbol{#2}} -% -%<*ltxml> -DefConstructor('\Ccn [] {}',"#2"); -DefConstructor('\Cci [] {}',"#2"); -DefConstructor('\Ccsymbol [] {}', - ""); -% -% \end{macrocode} -% -% \subsection{The Basic Elements}\label{impl:basic} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@ccinterval#1#2{[#1,#2]} -\newcommand{\Cccinterval}[3][]{\CMathML@ccinterval{#2}{#3}} -\def\CMathML@cointerval#1#2{[#1,#2)} -\newcommand{\Ccointerval}[3][]{\CMathML@cointerval{#2}{#3}} -\def\CMathML@ocinterval#1#2{(#1,#2]} -\newcommand{\Cocinterval}[3][]{\CMathML@ocinterval{#2}{#3}} -\def\CMathML@oointerval#1#2{(#1,#2)} -\newcommand{\Coointerval}[3][]{\CMathML@oointerval{#2}{#3}} -% -%<*ltxml> -DefConstructor('\Cccinterval [] {}{}', - "" - . "" - . "#2" - . "#3"); -DefConstructor('\Ccointerval [] {}{}', - "" - . "" - . "#2" - . "#3"); -DefConstructor('\Cocinterval [] {}{}', - "" - . "" - . "#2" - . "#3"); -DefConstructor('\Coointerval [] {}{}', - "" - . "" - . "#2" - . "#3"); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> -\newcommand{\Cinverse}[2][]{#2^{-1}} -% what about separator -% -%<*ltxml> -DefConstructor('\Cinverse [] {}', - "" - . "" - . "#2" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@lambda#1#2{\lambda({#1},{#2})} -\newcommand{\Clambda}[3][]{\CMathML@lambda{#2}{#3}} -\def\CMathML@lambdaDA#1#2#3{\lambda({#1}\colon{#2},#3)} -\newcommand{\ClambdaDA}[4][]{\CMathML@lambdaDA{#2}{#3}{#4}} -\def\CMathML@restrict#1#2{\left.#1\right|_{#2}} -\newcommand{\Crestrict}[3][]{\CMathML@restrict{#2}{#3}} -% -%\ednote{need do deal with multiple variables!} -%<*ltxml> -DefConstructor('\Clambda [] {}{}', - "" - . "" - . "#2" - . "#2" - . ""); -DefConstructor('\ClambdaDA [] {}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\Crestrict [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> - \def\CMathML@composeOp{\circ} - \newcommand{\CcomposeOp}{\CMathML@composeOp} -\def\CMathML@compose#1{\assoc[p=500,pi=500]{\CMathML@composeOp}{#1}} -\newcommand{\Ccompose}[2][]{\CMathML@compose{#2}} -\def\CMathML@ident#1{\mathrm{id}} -\newcommand{\Cident}[1][]{\CMathML@ident{#1}} -\def\CMathML@domain#1{\mbox{dom}(#1)} -\newcommand{\Cdomain}[2][]{\CMathML@domain{#2}} -\def\CMathML@codomain#1{\mbox{codom}(#1)} -\newcommand{\Ccodomain}[2][]{\CMathML@codomain{#2}} -\def\CMathML@image#1{{\mathbf{Im}}(#1)} -\newcommand{\Cimage}[2][]{\CMathML@image{#2}} -\def\CMathML@piecewise#1{\left\{\begin{array}{ll}#1\end{array}\right.} -\newcommand{\Cpiecewise}[2][]{\CMathML@piecewise{#2}} -\def\CMathML@piece#1#2{#1&{\mathrm{if}}\;{#2}\\} -\newcommand{\Cpiece}[3][]{\CMathML@piece{#2}{#3}} -\def\CMathML@otherwise#1{#1&else\\} -\newcommand{\Cotherwise}[2][]{\CMathML@otherwise{#2}} -% -%<*ltxml> -DefConstructor('\CcomposeOp []', - ""); -DefConstructor('\Ccompose [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\Cident []', - ""); -DefConstructor('\Cdomain [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccodomain [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cimage [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cpiecewise [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cpiece [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cotherwise [] {}', - "" - . "" - . "#2" - . ""); -% -% \end{macrocode} -% -% \subsection{Elements for Arithmetic, Algebra, and Logic}\label{impl:arith} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@quotient#1#2{\frac{#1}{#2}} -\newcommand{\Cquotient}[3][]{\CMathML@quotient{#2}{#3}} - \def\CMathML@factorialOp{!} - \newcommand{\CfactorialOp}{\CMathML@factorialOp} -\def\CMathML@factorial#1{#1{\CMathML@factorialOp}} -\newcommand{\Cfactorial}[2][]{\CMathML@factorial{#2}} - \def\CMathML@divideOp{\div} - \newcommand{\CdivideOp}{\CMathML@divideOp} -\def\CMathML@divide#1#2{\infix[p=400]{\CMathML@divideOp}{#1}{#2}} -\newcommand{\Cdivide}[3][]{\CMathML@divide{#2}{#3}} - \def\CMathML@maxOp{\mathrm{max}} - \newcommand{\CmaxOp}{\CMathML@maxOp} -\def\CMathML@max#1{{\CMathML@maxOp}(#1)} -\newcommand{\Cmax}[2][]{\CMathML@max{#2}} - \def\CMathML@minOp{\mathrm{min}} - \newcommand{\CminOp}{\CMathML@minOp} -\def\CMathML@min#1{{\CMathML@minOp}(#1)} -\newcommand{\Cmin}[2][]{\CMathML@min{#2}} - \def\CMathML@minusOp{-} - \newcommand{\CminusOp}{\CMathML@minusOp} -\def\CMathML@minus#1#2{\infix[p=500]{\CMathML@minusOp}{#1}{#2}} -\newcommand{\Cminus}[3][]{\CMathML@minus{#2}{#3}} -\def\CMathML@uminus#1{\prefix[p=200]{\CMathML@minusOp}{#1}} -\newcommand{\Cuminus}[2][]{\CMathML@uminus{#2}} - \def\CMathML@plusOp{+} - \newcommand{\CplusOp}{\CMathML@plusOp} -\def\CMathML@plus#1{\assoc[p=500]{\CMathML@plusOp}{#1}} -\newcommand{\Cplus}[2][]{\CMathML@plus{#2}} -\def\CMathML@power#1#2{\infix[p=200]{^}{#1}{#2}} -\newcommand{\Cpower}[3][]{\CMathML@power{#2}{#3}} - \def\CMathML@remOp{\bmod} - \newcommand{\CremOp}{\CMathML@remOp} -\def\CMathML@rem#1#2{#1 \CMathML@remOp #2} -\newcommand{\Crem}[3][]{\CMathML@rem{#2}{#3}} - \def\CMathML@timesOp{\cdot} - \newcommand{\CtimesOp}{\CMathML@timesOp} -\def\CMathML@times#1{\assoc[p=400]{\CMathML@timesOp}{#1}} -\newcommand{\Ctimes}[2][]{\CMathML@times{#2}} - \def\CMathML@rootOp{\sqrt} - \newcommand{\CrootOp}{\CMathML@rootOp{}} -\def\CMathML@root#1#2{\CMathML@rootOp[#1]{#2}} -\newcommand{\Croot}[3][]{\CMathML@root{#2}{#3}} -\def\CMathML@gcd#1{\gcd(#1)} -\newcommand{\Cgcd}[2][]{\CMathML@gcd{#2}} - \def\CMathML@andOp{\wedge} - \newcommand{\CandOp}{\CMathML@andOp} -\def\CMathML@and#1{\assoc[p=400]{\CMathML@andOp}{#1}} -\newcommand{\Cand}[2][]{\CMathML@and{#2}} - \def\CMathML@orOp{\vee} - \newcommand{\CorOp}{\CMathML@orOp} -\def\CMathML@or#1{\assoc[p=500]{\CMathML@orOp}{#1}} -\newcommand{\Cor}[2][]{\CMathML@or{#2}} - \def\CMathML@xorOp{\oplus} - \newcommand{\CxorOp}{\CMathML@xorOp} -\def\CMathML@xor#1{\assoc[p=400]{\CMathML@xorOp}{#1}} -\newcommand{\Cxor}[2][]{\CMathML@xor{#2}} - \def\CMathML@notOp{\neg} - \newcommand{\CnotOp}{\CMathML@notOp} -\def\CMathML@not#1{\CMathML@notOp{#1}} -\newcommand{\Cnot}[2][]{\CMathML@not{#2}} - \def\CMathML@impliesOp{\Longrightarrow} - \newcommand{\CimpliesOp}{\CMathML@impliesOp} -\def\CMathML@implies#1#2{#1\CMathML@impliesOp{#2}} -\newcommand{\Cimplies}[3][]{\CMathML@implies{#2}{#3}} -% -%<*ltxml> -DefConstructor('\Cquotient [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CfactorialOp []', - ""); -DefConstructor('\Cfactorial [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CdivideOp []', - ""); -DefConstructor('\Cdivide [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CmaxOp []', - ""); -DefConstructor('\Cmax [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CminOp []', - ""); -DefConstructor('\Cmin [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CminusOp []', - ""); -DefConstructor('\Cminus [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cuminus [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CplusOp []', - ""); -DefConstructor('\Cplus [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\Cpower [] {} {}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CremOp []', - ""); -DefConstructor('\Crem [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CtimesOp []', - ""); -DefConstructor('\Ctimes [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CrootOp []', - ""); -DefConstructor('\Croot [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cgcd [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CandOp []', - ""); -DefConstructor('\Cand [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CorOp []', - ""); -DefConstructor('\Cor [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CxorOp []', - ""); -DefConstructor('\Cxor [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CnotOp []', - ""); -DefConstructor('\Cnot [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CimpliesOp []', - ""); -DefConstructor('\Cimplies [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -% -% \end{macrocode} -% \ednote{need to do something about the associative things in ltxml} -% \begin{macrocode} -%<*sty> -\def\CMathML@AndDA#1#2{\bigwedge_{#1}{#2}} % set, scope -\newcommand{\CAndDA}[3][]{\CMathML@AndDA{#2}{#3}} -\def\CMathML@AndCond#1#2#3{\bigwedge_{#2}{#3}} % bvars,condition, scope -\newcommand{\CAndCond}[4][]{\CMathML@AndCond{#2}{#2}{#3}} -\def\CMathML@OrDA#1#2{\bigvee_{#1}{#2}} % set, scope -\newcommand{\COrDa}[3][]{\CMathML@OrDA{#2}{#3}} -\def\CMathML@OrCond#1#2#3{\bigvee_{#2}{#3}}% bvars,condition, scope -\newcommand{\COrCond}[4][]{\CMathML@OrCond{#2}{#3}{#4}} -\def\CMathML@XorDA#1#2{\bigoplus_{#1}{#2}} % set, scope -\newcommand{\CXorDA}[3][]{\CMathML@XorDA{#2}{#3}} -\def\CMathML@XorCond#1#2#3{\bigoplus_{#2}{#3}}% bvars,condition, scope -\newcommand{\CXorCond}[4][]{\CMathML@XorCond{#2}{#3}{#4}} -% -\def\CMathML@forall#1#2{\forall{#1}\colon{#2}} -\newcommand{\Cforall}[3][]{\CMathML@forall{#2}{#3}} -\def\CMathML@forallCond#1#2#3{\forall{#1},{#2}\colon{#3}} % list), condition, scope -\newcommand{\CforallCond}[4][]{\CMathML@forallCond{#2}{#3}{#4}} -% -%<*ltxml> -DefConstructor('\CAndDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CAndCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\COrDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\COrCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CXorDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CXorCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\Cforall [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CforallCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@exists#1#2{\exists{#1}\colon{#2}} -\newcommand{\Cexists}[3][]{\CMathML@exists{#2}{#3}} -\def\CMathML@esistsCont#1#2#3{\exists{#1},{#2}\colon{#3}} -\newcommand{\CexistsCond}[4][]{\CMathML@esistsCont{#2}{#3}{#4}} -% -%<*ltxml> -DefConstructor('\Cexists [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CexistsCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@abs#1{\left|#1\right|} -\newcommand{\Cabs}[2][]{\CMathML@abs{#2}} -\def\CMathML@conjugate#1{\overline{#1}} -\newcommand{\Cconjugate}[2][]{\CMathML@conjugate{#2}} -\def\CMathML@arg#1{\angle #1} -\newcommand{\Carg}[2][]{\CMathML@arg{#2}} -\def\CMathML@real#1{\Re #1} -\newcommand{\Creal}[2][]{\CMathML@real{#2}} -\def\CMathML@imaginary#1{\Im #1} -\newcommand{\Cimaginary}[2][]{\CMathML@imaginary{#2}} -\def\CMathML@lcm#1{\mbox{lcm}(#1)} -\newcommand{\Clcm}[2][]{\CMathML@lcm{#2}} -\def\CMathML@floor#1{\left\lfloor{#1}\right\rfloor} -\newcommand{\Cfloor}[2][]{\CMathML@floor{#2}} -\def\CMathML@ceiling#1{\left\lceil{#1}\right\rceil} -\newcommand{\Cceiling}[2][]{\CMathML@ceiling{#2}} -% -%<*ltxml> -DefConstructor('\Cabs [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cconjugate [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carg [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Creal [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cimaginary [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Clcm [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cfloor [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cceiling [] {}', - "" - . "" - . "#2" - . ""); -% -% \end{macrocode} -% -% \subsection{Relations}\label{impl:rels} -% -% \begin{macrocode} -%<*sty> - \def\CMathML@eqOp{=} - \newcommand{\CeqOp}{\CMathML@eqOp} -\def\CMathML@eq#1{\assoc[p=700]{\CMathML@eqOp}{#1}} -\newcommand{\Ceq}[2][]{\CMathML@eq{#2}} - \def\CMathML@neqOp{\neq} - \newcommand{\CneqOp}{\CMathML@neqOp} -\def\CMathML@neq#1#2{\infix[p=700]{\CMathML@neqOp}{#1}{#2}} -\newcommand{\Cneq}[3][]{\CMathML@neq{#2}{#3}} - \def\CMathML@gtOp{>} - \newcommand{\CgtOp}{\CMathML@gtOp} -\def\CMathML@gt#1{\assoc[p=700]{\CMathML@gtOp}{#1}} -\newcommand{\Cgt}[2][]{\CMathML@gt{#2}} - \def\CMathML@ltOp{<} - \newcommand{\CltOp}{\CMathML@ltOp} -\def\CMathML@lt#1{\assoc[p=700]{\CMathML@ltOp}{#1}} -\newcommand{\Clt}[2][]{\CMathML@lt{#2}} - \def\CMathML@geqOp{\geq} - \newcommand{\CgeqOp}{\CMathML@geqOp} -\def\CMathML@geq#1{\assoc[p=700]{\CMathML@geqOp}{#1}} -\newcommand{\Cgeq}[2][]{\CMathML@geq{#2}} - \def\CMathML@leqOp{\leq} - \newcommand{\CleqOp}{\CMathML@leqOp} -\def\CMathML@leq#1{\assoc[p=700]{\CMathML@leqOp}{#1}} -\newcommand{\Cleq}[2][]{\CMathML@leq{#2}} - \def\CMathML@equivalentOp{\equiv} - \newcommand{\CequivalentOp}{\CMathML@equivalentOp} -\def\CMathML@equivalent#1{\assoc[p=700]{\CMathML@equivalentOp}{#1}} -\newcommand{\Cequivalent}[2][]{\CMathML@equivalent{#2}} - \def\CMathML@approxOp{\approx} - \newcommand{\CapproxOp}{\CMathML@approxOp} -\def\CMathML@approx#1#2{#1\CMathML@approxOp{#2}} -\newcommand{\Capprox}[3][]{\CMathML@approx{#2}{#3}} - \def\CMathML@factorofOp{\mid} - \newcommand{\CfactorofOp}{\CMathML@factorofOp} -\def\CMathML@factorof#1#2{#1\CMathML@factorofOp{#2}} -\newcommand{\Cfactorof}[3][]{\CMathML@factorof{#2}{#3}} -% -%<*ltxml> -DefConstructor('\CeqOp []', - ""); -DefConstructor('\Ceq [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CneqOp []', - ""); -DefConstructor('\Cneq [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CgtOp []', - ""); -DefConstructor('\Cgt [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CltOp []', - ""); -DefConstructor('\Clt [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CgeqOp []', - ""); -DefConstructor('\Cgeq [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CleqOp []', - ""); -DefConstructor('\Cleq [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CequivalentOp []', - ""); -DefConstructor('\Cequivalent [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CapproxOp []', - ""); -DefConstructor('\Capprox [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CfactorofOp []', - ""); -DefConstructor('\Cfactorof [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> - - \def\CMathML@intOp{\int} - \newcommand{\CintOp}{\CMathML@intOp} -\def\CMathML@int#1{\CMathML@intOp{#1}} -\newcommand{\Cint}[2][]{\CMathML@int{#2}} -\def\CMathML@intLimits#1#2#3#4{\CMathML@intOp_{#2}^{#3}{#4}d{#1}} %bvars,llimit, ulimit,body -\newcommand{\CintLimits}[5][]{\CMathML@intLimits{#2}{#3}{#4}{#5}} -\def\CMathML@intSet#1#2{\CMathML@intOp_{#1}{#2}}% set,function -\newcommand{\CintDA}[3][]{\CMathML@intSet{#2}{#3}} -\def\CMathML@intCond#1#2#3{\CMathML@intOp_{#2}{#3}d{#1}} %bvars, condition, body -\newcommand{\CintCond}[4][]{\CMathML@intCond{#2}{#3}{#4}} - -% -%<*ltxml> -DefConstructor('\CintOp []', - ""); -DefConstructor('\Cint [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CintLimits [] {}{}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . "#5" - . ""); -DefConstructor('\CintDA [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CintCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@diff#1{#1'} -\newcommand{\Cdiff}[2][]{\CMathML@diff{#2}} -\def\CMathML@ddiff#1#2{{d{#2}(#1)\over{d{#1}}}} -\newcommand{\Cddiff}[3][]{\CMathML@ddiff{#2}{#3}} -\def\CMathML@partialdiff#1#2#3{{\partial^{#1}\over\partial{#2}}{#3}}% degree, bvars, body -\newcommand{\Cpartialdiff}[4][]{\CMathML@partialdiff{#2}{#3}{#4}} -\newcommand{\Cdegree}[2]{#1^{#2}} -% -%<*ltxml> -DefConstructor('\Cdiff [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cddiff [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cpartialdiff [] {}{}{}', - "" - . "" - . "#3" - . "?#2(#2)()" - . "#4" - . ""); -DefConstructor('\Cdegree {}{}', - "" - . "" - . "#2" - . "#1" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@limit#1#2#3{\lim_{#1\rightarrow{#2}}{#3}} -\newcommand{\Climit}[4][]{\CMathML@limit{#2}{#3}{#4}} % bvar, lowlimit, scope -\def\CMathML@limitCond#1#2#3{\lim_{#2}{#3}} -\newcommand{\ClimitCond}[4][]{\CMathML@limitCond{#2}{#3}{#4}} % bvars, condition, scope -% -%<*ltxml> -DefConstructor('\Climit [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\ClimitCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> - \def\CMathML@tendstoOp{\rightarrow} - \newcommand{\CtendstoOp}{\CMathML@tendstoOp} -\def\CMathML@tendsto#1#2{#1\CMathML@tendstoOp{#2}} -\newcommand{\Ctendsto}[3][]{\CMathML@tendsto{#2}{#3}} - \def\CMathML@tendstoAboveOp{\searrow} - \newcommand{\CtendstoAboveOp}{\CMathML@tendstoAboveOp} -\def\CMathML@tendstoAbove#1#2{#1\searrow{#2}} -\newcommand{\CtendstoAbove}[3][]{\CMathML@tendstoAbove{#2}{#3}} - \def\CMathML@tendstoBelowOp{\nearrow} - \newcommand{\CtendstoBelowOp}{\CMathML@tendstoBelowOp} -\def\CMathML@tendstoBelow#1#2{#1\CMathML@tendstoBelowOp{#2}} -\newcommand{\CtendstoBelow}[3][]{\CMathML@tendstoBelow{#2}{#3}} -% -%<*ltxml> -DefConstructor('\CtendstoOp []', - ""); -DefConstructor('\Ctendsto [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CtendstoAboveOp []', - ""); -DefConstructor('\CtendstoAbove [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CtendstoBelowOp []', - ""); -DefConstructor('\CtendstoBelow [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@divergence#1{\nabla\cdot{#1}} -\newcommand{\Cdivergence}[2][]{\CMathML@divergence{#2}} -\def\CMathML@grad#1{\nabla{#1}} -\newcommand{\Cgrad}[2][]{\CMathML@grad{#2}} -\def\CMathML@curl#1{\nabla\times{#1}} -\newcommand{\Ccurl}[2][]{\CMathML@curl{#2}} -\def\CMathML@laplacian#1{\nabla^2#1} -\newcommand{\Claplacian}[2][]{\CMathML@laplacian{#2}} -% -%<*ltxml> -DefConstructor('\Cdivergence [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cgrad [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Curl [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Claplacian [] {}', - "" - . "" - . "#2" - . ""); -% -% \end{macrocode} -% -% \subsection{Sets and their Operations}\label{impl:sets} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@set#1{\left\{#1\right\}} -\newcommand{\Cset}[2][]{\CMathML@set{#2}} -\def\CMathML@setRes#1#2{\{#1|#2\}} -\newcommand{\CsetRes}[3][]{\CMathML@setRes{#2}{#3}} -\def\CMathML@setCond#1#2#3{\{#2|#3\}} -\newcommand{\CsetCond}[4][]{\CMathML@setCond{#2}{#3}{#4}} -\def\CMathML@setDA#1#2#3{\{#1\in{#2}|#3\}} -\newcommand{\CsetDA}[4][]{\CMathML@setDA{#2}{#3}{#4}} - \def\CMathML@listOp{\mbox{list}} - \newcommand{\ClistOp}{\CMathML@listOp} -\def\CMathML@list#1{\CMathML@listOp({#1})} -\newcommand{\Clist}[2][]{\CMathML@list{#2}} - \def\CMathML@unionOp{\cup} - \newcommand{\CunionOp}{\CMathML@unionOp} -\def\CMathML@union#1{\assoc[p=500]{\CMathML@unionOp}{#1}} -\newcommand{\Cunion}[2][]{\CMathML@union{#2}} - \def\CMathML@intersectOp{\cap} - \newcommand{\CintersectOp}{\CMathML@intersectOp} -\def\CMathML@intersect#1{\assoc[p=400]{\CMathML@intersectOp}{#1}} -\newcommand{\Cintersect}[2][]{\CMathML@intersect{#2}} - \def\CMathML@inOp{\in} - \newcommand{\CinOp}{\CMathML@inOp} -\def\CMathML@in#1#2{#1\CMathML@inOp{#2}} -\newcommand{\Cin}[3][]{\CMathML@in{#2}{#3}} - \def\CMathML@notinOp{\notin} - \newcommand{\CnotinOp}{\CMathML@notinOp} -\def\CMathML@notin#1#2{#1\CMathML@notinOp{#2}} -\newcommand{\Cnotin}[3][]{\CMathML@notin{#2}{#3}} - \def\CMathML@setdiffOp{\setminus} - \newcommand{\CsetdiffOp}{\CMathML@setdiffOp} -\def\CMathML@setdiff#1#2{#1\CMathML@setdiffOp{#2}} -\newcommand{\Csetdiff}[3][]{\CMathML@setdiff{#2}{#3}} - \def\CMathML@cardOp{\#} - \newcommand{\CcardOp}{\CMathML@cardOp} -\def\CMathML@card#1{\CMathML@cardOp #1} -\newcommand{\Ccard}[2][]{\CMathML@card{#2}} - \def\CMathML@cartesianproductOp{\times} - \newcommand{\CcartesianproductOp}{\CMathML@cartesianproductOp} -\def\CMathML@cartesianproduct#1{\assoc[p=400]{\CMathML@cartesianproductOp}{#1}} -\newcommand{\Ccartesianproduct}[2][]{\CMathML@cartesianproduct{#2}} - \def\CMathML@subsetOp{\subseteq} - \newcommand{\CsubsetOp}{\CMathML@subsetOp} -\def\CMathML@subset#1{\assoc[p=700]{\CMathML@subsetOp}{#1}} -\newcommand{\Csubset}[2][]{\CMathML@subset{#2}} - \def\CMathML@prsubsetOp{\subset} - \newcommand{\CprsubsetOp}{\CMathML@prsubsetOp} -\def\CMathML@prsubset#1{\assoc[p=700]{\CMathML@prsubsetOp}{#1}} -\newcommand{\Cprsubset}[2][]{\CMathML@prsubset{#2}} - \def\CMathML@notsubsetOp{\not\subseteq} - \newcommand{\CnotsubsetOp}{\CMathML@notsubsetOp} -\def\CMathML@notsubset#1#2{#1\CMathML@notsubsetOp{#2}} -\newcommand{\Cnotsubset}[3][]{\CMathML@notsubset{#2}{#3}} - \def\CMathML@notprsubsetOp{\not\subset} - \newcommand{\CnotprsubsetOp}{\CMathML@notprsubsetOp} -\def\CMathML@notprsubset#1#2{#1\CMathML@notprsubsetOp{#2}} -\newcommand{\Cnotprsubset}[3][]{\CMathML@notprsubset{#2}{#3}} -% -%<*ltxml> -DefConstructor('\Cset [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CsetRes [] {}{}', - "" - . "" - . "#2" - . "#3" - . "#2" - . ""); -DefConstructor('\CsetCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CsetDA [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\ClistOp []', - ""); -DefConstructor('\Clist [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CunionOp []', - ""); -DefConstructor('\Cunion [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CintersectOp []', - ""); -DefConstructor('\Cintersect [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CinOp []', - ""); -DefConstructor('\Cin [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CnotinOp []', - ""); -DefConstructor('\Cnotin [] {}{}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CsubsetOp []', - ""); -DefConstructor('\Csubset [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CprsubsetOp []', - ""); -DefConstructor('\Cprsubset [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CnotsubsetOp []', - ""); -DefConstructor('\Cnotsubset [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CnotprsubsetOp []', - ""); -DefConstructor('\Cnotprsubset [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CsetdiffOp []', - ""); -DefConstructor('\Csetdiff [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CcardOp []', - ""); -DefConstructor('\Ccard [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CcartesianproductOp []', - ""); -DefConstructor('\Ccartesianproduct [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -% -% \end{macrocode} -% The next set of macros are needed, since they are presentational. -% \begin{macrocode} -%<*sty> - \def\CMathML@supsetOp{\supseteq} - \newcommand{\CsupsetOp}{\CMathML@supsetOp} -\def\CMathML@supset#1{\assoc[p=700]{\CMathML@supsetOp}{#1}} -\newcommand{\Csupset}[2][]{\CMathML@supset{#2}} - \def\CMathML@prsupsetOp{\supset} - \newcommand{\CprsupsetOp}{\CMathML@prsupsetOp} -\def\CMathML@prsupset#1{\assoc[p=700]{\CMathML@prsupsetOp}{#1}} -\newcommand{\Cprsupset}[2][]{\CMathML@prsupset{#2}} - \def\CMathML@notsupsetOp{\not\supseteq} - \newcommand{\CnotsupsetOp}{\CMathML@notsupsetOp} -\def\CMathML@notsupset#1#2{#1\CMathML@notsupsetOp{#2}} -\newcommand{\Cnotsupset}[3][]{\CMathML@notsupset{#2}{#3}} - \def\CMathML@notprsupsetOp{\not\supset} - \newcommand{\CnotprsupsetOp}{\CMathML@notprsupsetOp} -\def\CMathML@notprsupset#1#2{#1\CMathML@notprsupsetOp{#2}} -\newcommand{\Cnotprsupset}[3][]{\CMathML@notprsupset{#2}{#3}} -% -% \end{macrocode} -% -% On the semantic side (in {\latexml}), we need to implement them in terms of the -% {\mathml} elements. Fortunately, we can just turn them around. \ednote{ooooops, this -% does not work for the associative ones.} -% -% \begin{macrocode} -%<*ltxml> -DefConstructor('\CsupsetOp []', - ""); -DefConstructor('\CprsupsetOp []', - ""); -DefConstructor('\CnotsupsetOp []', - ""); -DefConstructor('\CnotprsupsetOp []', - ""); -DefMacro('\Csupset[]{}','\Csubset[#1]{#2}'); -DefMacro('\Cprsupset[]{}','\Cprsubset[#1]{#2}'); -DefMacro('\Cnotsupset[]{}{}','\Cnotsubset[#1]{#3}{#2}'); -DefMacro('\Cnotprsupset[]{}{}','\Cnotprsubset[#1]{#3}{#2}'); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*sty> - \def\CMathML@UnionDAOp{\bigwedge} - \newcommand{\CUnionDAOp}{\CMathML@UnionDAOp} -\def\CMathML@UnionDA#1#2{\CMathML@UnionDAOp_{#1}{#2}} % set, scope -\newcommand{\CUnionDA}[3][]{\CMathML@UnionDA{#2}{#3}} -\def\CMathML@UnionCond#1#2#3{\CMathML@UnionDAOp_{#2}{#3}} % bvars,condition, scope -\newcommand{\CUnionCond}[4][]{\CMathML@UnionCond{#2}{#2}{#3}} - \def\CMathML@IntersectDAOp{\bigvee} - \newcommand{\CIntersectDAOp}{\CMathML@IntersectDAOp} -\def\CMathML@IntersectDA#1#2{\CMathML@IntersectDAOp_{#1}{#2}} % set, scope -\newcommand{\CIntersectDa}[3][]{\CMathML@IntersectDA{#2}{#3}} -\def\CMathML@IntersectCond#1#2#3{\CMathML@IntersectDAOp_{#2}{#3}}% bvars,condition, scope -\newcommand{\CIntersectCond}[4][]{\CMathML@IntersectCond{#2}{#3}{#4}} - \def\CMathML@CartesianproductDAOp{\bigoplus} - \newcommand{\CCartesianproductDAOp}{\CMathML@CartesianproductDAOp} -\def\CMathML@CartesianproductDA#1#2{\CMathML@CartesianproductDAOp_{#1}{#2}} % set, scope -\newcommand{\CCartesianproductDA}[3][]{\CMathML@CartesianproductDA{#2}{#3}} -\def\CMathML@CartesianproductCond#1#2#3{\CMathML@CartesianproductDAOp_{#2}{#3}}% bvars,condition, scope -\newcommand{\CCartesianproductCond}[4][]{\CMathML@CartesianproductCond{#2}{#3}{#4}} -% -%<*ltxml> -DefConstructor('\CUnionDAOp []', - ""); -DefConstructor('\CUnionDA [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CUnionCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CIntersectDaOp []', - ""); -DefConstructor('\CIntersectDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CIntersectCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CCartesianproductDaOp []', - ""); -DefConstructor('\CCartesianproductDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CCartesianproductCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -% -% \end{macrocode} -% -% \subsection{Sequences and Series}\label{impl:sequences} -% -% \begin{macrocode} -%<*sty> - \def\CMathML@sumOp{\sum} - \newcommand{\CsumOp}{\CMathML@sumOp} -\def\CMathML@sumLimits#1#2#3#4{\CMathML@sumOp_{#1=#2}^{#3}#4}% bvar, llimit, ulimit, body -\newcommand{\CsumLimits}[5][]{\CMathML@sumLimits{#2}{#3}{#4}{#5}} -\def\CMathML@sumCond#1#2#3{\CMathML@sumOp_{#1\in{#2}}#3} % bvar, condition, body -\newcommand{\CsumCond}[4][]{\CMathML@sumCond{#2}{#3}{#4}} -\def\CMathML@sumDA#1#2{\CMathML@sumOp_{#1}#2} % set, body -\newcommand{\CsumDA}[3][]{\CMathML@sumDA{#2}{#3}} -% -%<*ltxml> -DefConstructor('\CsumOp []', - ""); -DefConstructor('\CsumLimits [] {}{}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . "#5"); -% -% \end{macrocode} -% \ednote{complete the other cases}\ednote{add a keyword argument to all newcommands} -% \begin{macrocode} -%<*sty> - \def\CMathML@prodOp{\prod} - \newcommand{\CprodOp}{\CMathML@prodOp} -\def\CMathML@prodLimits#1#2#3#4{\CMathML@prodOp_{#1=#32^{#3}#4}}% bvar, llimit, ulimit, body -\newcommand{\CprodLimits}[5][]{\CMathML@prodLimits{#2}{#3}{#4}{#5}} -\def\CMathML@prodCond#1#2#3{\CMathML@prodOp_{#1\in{#2}}#3} % bvar, condition, body -\newcommand{\CprodCond}[4][]{\CMathML@prodCond{#2}{#3}{#4}} -\def\CMathML@prodDA#1#2{\CMathML@prodOp_{#1}#2} % set, body -\newcommand{\CprodDA}[3]{\CMathML@prodDA{#2}{#3}} -% -%<*ltxml> -DefConstructor('\CprodOp []', - ""); -DefConstructor('\CprodLimits [] {}{}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . "#5"); -% -% \end{macrocode} -% \ednote{complete the other cases} -% \subsection{Elementary Classical Functions}\label{impl:specfun} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@sin#1{\sin(#1)} -\newcommand{\Csin}[2][]{\CMathML@sin{#2}} -\def\CMathML@cos#1{\cos(#1)} -\newcommand{\Ccos}[2][]{\CMathML@cos{#2}} -\def\CMathML@tan#1{\tan(#1)} -\newcommand{\Ctan}[2][]{\CMathML@tan{#2}} -\def\CMathML@sec#1{\sec(#1)} -\newcommand{\Csec}[2][]{\CMathML@sec{#2}} -\def\CMathML@csc#1{\csc(#1)} -\newcommand{\Ccsc}[2][]{\CMathML@csc{#2}} -\def\CMathML@cot#1{\cot(#1)} -\newcommand{\Ccot}[2][]{\CMathML@cot{#2}} -\def\CMathML@sinh#1{\sinh(#1)} -\newcommand{\Csinh}[2][]{\CMathML@sinh{#2}} -\def\CMathML@cosh#1{\cosh(#1)} -\newcommand{\Ccosh}[2][]{\CMathML@cosh{#2}} -\def\CMathML@tanh#1{\tanh(#1)} -\newcommand{\Ctanh}[2][]{\CMathML@tanh{#2}} -\def\CMathML@sech#1{\mbox{sech}(#1)} -\newcommand{\Csech}[2][]{\CMathML@sech{#2}} -\def\CMathML@csch#1{\mbox{csch}(#1)} -\newcommand{\Ccsch}[2][]{\CMathML@csch{#2}} -\def\CMathML@coth#1{\mbox{coth}(#1)} -\newcommand{\Ccoth}[2][]{\CMathML@coth{#2}} -\def\CMathML@arcsin#1{\arcsin(#1)} -\newcommand{\Carcsin}[2][]{\CMathML@arcsin{#2}} -\def\CMathML@arccos#1{\arccos(#1)} -\newcommand{\Carccos}[2][]{\CMathML@arccos{#2}} -\def\CMathML@arctan#1{\arctan(#1)} -\newcommand{\Carctan}[2][]{\CMathML@arctan{#2}} -\def\CMathML@arccosh#1{\mbox{arccosh}(#1)} -\newcommand{\Carccosh}[2][]{\CMathML@arccosh{#2}} -\def\CMathML@arccot#1{\mbox{arccot}(#1)} -\newcommand{\Carccot}[2][]{\CMathML@arccot{#2}} -\def\CMathML@arccoth#1{\mbox{arccoth}(#1)} -\newcommand{\Carccoth}[2][]{\CMathML@arccoth{#2}} -\def\CMathML@arccsc#1{\mbox{arccsc}(#1)} -\newcommand{\Carccsc}[2][]{\CMathML@arccsc{#2}} -\def\CMathML@arcsinh#1{\mbox{arcsinh}(#1)} -\newcommand{\Carcsinh}[2][]{\CMathML@arcsinh{#2}} -\def\CMathML@arctanh#1{\mbox{arctanh}(#1)} -\newcommand{\Carctanh}[2][]{\CMathML@arctanh{#2}} - -\def\CMathML@exp#1{\exp(#1)} -\newcommand{\Cexp}[2][]{\CMathML@exp{#2}} -\def\CMathML@ln#1{\ln(#1)} -\newcommand{\Cln}[2][]{\CMathML@ln{#2}} -\def\CMathML@log#1#2{\log_{#1}(#2)} -\newcommand{\Clog}[3][]{\CMathML@log{#2}{#3}} -% -%<*ltxml> -DefConstructor('\Csin [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccos [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ctan [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Csec [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccsc [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccot [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Csinh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccosh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ctanh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Csech [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccsch [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccoth [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carcsin [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccos [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carctan [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carcsec [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccsc [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccot [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carcsinh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccosh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carctanh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carcsech [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccsch [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccoth [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cexp [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cln [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Clog [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -% -% \end{macrocode} -% -% \subsection{Statistics}\label{impl:statistics} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@mean#1{\mbox{mean}(#1)} -\newcommand{\Cmean}[2][]{\CMathML@mean{#2}} -\def\CMathML@sdev#1{\mbox{std}(#1)} -\newcommand{\Csdev}[2][]{\CMathML@sdev{#2}} -\def\CMathML@var#1{\mbox{var}(#1)} -\newcommand{\Cvar}[2][]{\CMathML@var{#2}} -\def\CMathML@median#1{\mbox{median}(#1)} -\newcommand{\Cmedian}[2][]{\CMathML@median{#2}} -\def\CMathML@mode#1{\mbox{mode}(#1)} -\newcommand{\Cmode}[2][]{\CMathML@mode{#2}} -\def\CMathML@moment#1#2{\langle{#2}^{#1}\rangle}% degree, momentabout, scope -\newcommand{\Cmoment}[3][]{\CMathML@moment{#2}{#3}} -\def\CMathML@momentA#1#2{\langle{#2}^{#1}\rangle}% degree, momentabout, scope -\newcommand{\CmomentA}[4][]{\CMathML@momentA{#2}{#3}{#4}} -% -%<*ltxml> -DefConstructor('\Cmean [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Csdev [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cvar [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cmedian [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cmode [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cmoment [] {}', - "" - . "" - . "#2" - . ""); -% -% \end{macrocode} -% \ednote{we do not seem to need the momentabout.}\ednote{moment and momentA have funny -% elided arguments} -% -% \subsection{Linear Algebra}\label{impl:linalg} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@vector#1{(#1)} -\newcommand{\Cvector}[2][]{\CMathML@vector{#2}} -\def\CMathML@matrix#1#2{\left(\begin{array}{#1}#2\end{array}\right)}% row pattern, body -\newcommand{\Cmatrix}[3][]{\CMathML@matrix{#2}{#3}} -\def\CMathML@determinant#1{\left|#1\right|} -\newcommand{\Cdeterminant}[2][]{\CMathML@determinant{#2}} -\def\CMathML@transpose#1{#1^\top} -\newcommand{\Ctranspose}[2][]{\CMathML@transpose{#2}} -\def\CMathML@selector#1#2{#1_{#2}} -\newcommand{\Cselector}[3][]{\CMathML@selector{#2}{#3}} - \def\CMathML@vectproductOp{\cdot} - \newcommand{\CvectproductOp}{\CMathML@vectproductOp} -\def\CMathML@vectproduct#1#2{#1\CMathML@vectproductOp{#2}} -\newcommand{\Cvectproduct}[3][]{\CMathML@vectproduct{#2}{#3}} -\def\CMathML@scalarproduct#1#2{{#1}#2} -\newcommand{\Cscalarproduct}[3][]{\CMathML@scalarproduct{#2}{#3}} - \def\CMathML@outerproductOp{\times} - \newcommand{\CouterproductOp}{\CMathML@outerproductOp} -\def\CMathML@outerproduct#1#2{#1\CMathML@outerproductOp{#2}} -\newcommand{\Couterproduct}[3][]{\CMathML@outerproduct{#2}{#3}} -% -%<*ltxml> -DefConstructor('\Cvector [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\Cmatrix [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cdeterminant [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ctranspose [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cselector [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CvectorproductOp []', - ""); -DefConstructor('\Cvectorproduct [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cscalarproduct [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CouterproductOp []', - ""); -DefConstructor('\Couterproduct [] {}{}', - "" - . "" - . "#2" - . "#3" - . "");#$ -% -% \end{macrocode} -% -% \subsection{Constant and Symbol Elements}\label{impl:constants} -% -% \begin{macrocode} -%<*sty> -\def\CMathML@integers{{\mathbb{Z}}} -\newcommand{\Cintegers}[1][]{\CMathML@integers} -\def\CMathML@reals{{\mathbb{R}}} -\newcommand{\Creals}[1][]{\CMathML@reals} -\def\CMathML@rationals{{\mathbb{Q}}} -\newcommand{\Crationals}[1][]{\CMathML@rationals} -\def\CMathML@naturalnumbers{{\mathbb{N}}} -\newcommand{\Cnaturalnumbers}[1][]{\CMathML@naturalnumbers} -\def\CMathML@complexes{{\mathbb{C}}} -\newcommand{\Ccomplexes}[1][]{\CMathML@complexes} -\def\CMathML@primes{{\mathbb{P}}} -\newcommand{\Cprimes}[1][]{\CMathML@primes} -\def\CMathML@exponemtiale{e} -\newcommand{\Cexponemtiale}[1][]{\CMathML@exponemtiale} -\def\CMathML@imaginaryi{i} -\newcommand{\Cimaginaryi}[1][]{\CMathML@imaginaryi} -\def\CMathML@notanumber{{\mathrm{NaN}}} -\newcommand{\Cnotanumber}[1][]{\CMathML@notanumber} -\def\CMathML@true{{\mathrm{true}}} -\newcommand{\Ctrue}[1][]{\CMathML@true} -\def\CMathML@false{{\mathrm{false}}} -\newcommand{\Cfalse}[1][]{\CMathML@false} -\def\CMathML@emptyset{\emptyset} -\newcommand{\Cemptyset}[1][]{\CMathML@emptyset} -\def\CMathML@pi{\pi} -\newcommand{\Cpi}[1][]{\CMathML@pi} -\def\CMathML@eulergamma{\gamma} -\newcommand{\Ceulergamma}[1][]{\CMathML@eulergamma} -\def\CMathML@infinit{\infty} -\newcommand{\Cinfinit}[1][]{\CMathML@infinit} -% -%<*ltxml> -DefConstructor('\Cintegers []', - ""); -DefConstructor('\Creals []', - ""); -DefConstructor('\Crationals []', - ""); -DefConstructor('\Cnaturalnumbers []', - ""); -DefConstructor('\Ccomplexes []', - ""); -DefConstructor('\Cprimes []', - ""); -DefConstructor('\Cexponentiale []', - ""); -DefConstructor('\Cimaginaryi []', - ""); -DefConstructor('\Cnotanumber []', - ""); -DefConstructor('\Ctrue []', - ""); -DefConstructor('\Cfalse []', - ""); -DefConstructor('\Cemptyset []', - ""); -DefConstructor('\Cpi []', - ""); -DefConstructor('\Ceulergamma []', - ""); -DefConstructor('\Cinfinit []', - ""); -% -% \end{macrocode} -% -% \subsection{Extensions}\label{sec:impl:cmathmlx} -% \begin{macro}{\Ccomplement} -% \begin{macrocode} -%<*styx> -\def\CMathML@complement#1{#1^c} -\newcommand{\Ccomplement}[2][]{\CMathML@complement{#2}} -% -%<*ltxmlx> -DefConstructor('\Ccomplement [] {}', - "" - . "" - . "#2" - . ""); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Finale}\label{sec:impl:finale} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput -% \iffalse -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi - -% LocalWords: STeX cmathml symdefs CMathML dom codom Im ll reln fn bvar arith -% LocalWords: alg lcm rels Ceq llimit ulimit bvars lowlimit specfun sech csch -% LocalWords: coth arccosh arccot arccoth arccsc arcsinh arctanh logbase std -% LocalWords: var momentabout linalg matrixrow bruce NaN stex cnxml symdef sc -% LocalWords: DefinitionURLs domainofapplication CmomentA concl iffalse scsys -% LocalWords: cmathml.dtx sc newenvironment pcmtab hline cmtab hbox ttfamily -% LocalWords: xslt xslt mathml scshape latexml twintoo atwin atwintoo texttt -% LocalWords: fileversion maketitle newpage tableofcontents newpage exfig exp -% LocalWords: usepackage vspace cmathml-eip varpi ednote nd cmatml Capply Cexp -% LocalWords: cdot ary Cond bigcup subseteq Cnaturalnumbers Cunion csymbol Ccn -% LocalWords: Ccsymbol camthml Cinverse Ccompose Cident Cdomain Ccodomain Clt -% LocalWords: Cimage Clambda ClambdaDA Crestrict ccinterval cointerval Cpiece -% LocalWords: ocinterval oointerval Cccinterval Cccinterval Cccinterval Cminus -% LocalWords: Ccointerval Ccointerval Ccointerval Cocinterval Cocinterval Cmax -% LocalWords: Cocinterval Coointerval Coointerval Coointerval Cpiecewise Cplus -% LocalWords: Cotherwise footnotesize Cuminus Cquotient Cfactorial Cdivide Cgt -% LocalWords: Cpower Ctimes Croot Cmin Cgcd Cand Cxor Cnot Cimplies forall cn -% LocalWords: Cforall CforallCond Cexists CexistsCond Cconjugate Carg Creal eq -% LocalWords: Cimaginary Cfloor Cceiling Cneq Cgeq Cleq Cequivalent Capprox gt -% LocalWords: Cfactorof Cint CintLimits CintDA CintCond Cinfinit infty Creals -% LocalWords: mathbb Cdiff Cddiff varible Cpartialdiff Cdegree Climit Ctendsto -% LocalWords: ClimitCond CtendstoAbove CtendstoBelow tendsto Csin Csin Ccos ln -% LocalWords: Cdivergence Cgrad Ccurl Claplacian Cset Clist Cintersect Ccard -% LocalWords: Ccartesianproduct Csetdiff Cnotin CCartesianproductDA Csubset ln -% LocalWords: CCartesianproductCond Cprsubset Cnotsubset Cnotprsubset reations -% LocalWords: Csupset Cprsupset Cnotsupset Cnotprsupset CsumLimits CsumCond -% LocalWords: CsumDA CprodLimist CprodCond CprodDA Cintegers CprodLimits Ctan -% LocalWords: CprodLimits CprodLimits Csec Ccsc Ccot Csinh Ccosh Ctanh Csech -% LocalWords: Ccsch Ccoth Carcsin Carccos Carctan Carcsec Carccsc Carccot Cln -% LocalWords: Carccosh Carccosh Carccosh Carcsinh Carctanh Carcsech Carccsch -% LocalWords: Carccoth Cln Cln Cmean Csdev Cvar Cmedian Cmode Cmoment Cvector -% LocalWords: Cmatrix Cdeterminant Ctranspose Cselector Cvectorproduct Cprimes -% LocalWords: Cscalarproduct Couterproduct Cvectproduct Cvectproduct Ctrue Cpi -% LocalWords: Cvectproduct Crationals Ccomplexes Cexponentiale Cimaginaryi ltx -% LocalWords: Cfalse Cemptyset Ceulergamma Cexponemtiale Cexponemtiale impl -% LocalWords: Cexponemtiale Cnotanumber Cnotanumber Cnotanumber cmathmlx ltxml -% LocalWords: Ccomplement printbibliography textsf langle textsf langle ltxml -% LocalWords: plementing ltxmlx itroduce unlist whatsit argno newcommand circ -% LocalWords: OPFUNCTION assoc ident mathrm mbox mathbf uminus bmod sqrt oplus -% LocalWords: Longrightarrow bigwedge bigvee bigoplus esistsCont overline eqOp -% LocalWords: lfloor rfloor lceil rceil neqOp neq gtOp geqOp geq leqOp leq csc -% LocalWords: equiv approxOp approx factorofOp factorof ddiff partialdiff csc -% LocalWords: rightarrow searrow nearrow RELOP'meaning setdiffOp setdiff sinh -% LocalWords: cartesianproductOp cartesianproduct prsubsetOp prsubset supseteq -% LocalWords: notsubsetOp notsubset notprsubsetOp notprsubset prsupsetOp sinh -% LocalWords: prsupset notsupsetOp notsupset notprsupsetOp notprsupset ooooops -% LocalWords: CsumOp newcommands CprodOp tanh tanh arccos arccos TRIGFUNCTION -% LocalWords: arcsec arcsech arccsch sdev vectproductOp vectproduct imaginaryi -% LocalWords: scalarproduct outerproductOp outerproduct vectorproduct emptyset -% LocalWords: naturalnumbers exponemtiale notanumber emptyset eulergamma -% LocalWords: exponentiale doctex diff --git a/Master/texmf-dist/source/latex/stex/cnx/cnx.dtx b/Master/texmf-dist/source/latex/stex/cnx/cnx.dtx deleted file mode 100644 index 55a197b6501..00000000000 --- a/Master/texmf-dist/source/latex/stex/cnx/cnx.dtx +++ /dev/null @@ -1,1209 +0,0 @@ -% \iffalse meta-comment -% A LaTeX Class for CNXML -% Copyright (c) 2006 Michael Kohlhase, all rights reserved -% this file is released under the -% Gnu Library Public Licences (LGPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/cnx/cnx.dtx $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesClass{cnx}[2010/06/25 v1.0 LaTeX Bindings for CNXML] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,float,stex-logo} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage{ctansvn} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: cnx.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/cnx/cnx.dtx $ -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{cnx.dtx}\end{document} -% -% \fi -% -%\iffalse\CheckSum{432}\fi -% -% \changes{v0.1}{2005/12/06}{Initial Version} -% \changes{v0.2}{2006/01/11}{Namespaces now work} -% \changes{v1.0}{2006/01/11}{this is a good as it is every going to get} -% -% \GetFileInfo{cnx.cls} -% -% \MakeShortVerb{\|} -%\def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\xml{\scshape{XML}} -% \def\cnxml{\scshape{CNXml}} -% \def\connexions{\scshape{Connexions}} -% \def\element#1{{\ttfamily{#1}}} -% \def\snippet#1{{\ttfamily{#1}}} -% \def\cnxlatex{CNX\LaTeX} -% \def\mathml{{\scshape{MathML}}} -% \def\latexml{\hbox{{\LaTeX}ML}} -% \title{{\cnxlatex}: A {\LaTeX}-based Syntax for Connexions Modules\thanks{Version {\fileversion} -% (last revised {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% We present {\cnxlatex}, a collection of {\LaTeX} macros that allow to write -% {\connexions} modules without leaving the {\LaTeX} workflow. Modules are authored in -% {\cnxlatex} using only a text editor, transformed to PDF and proofread as usual. In -% particular, the {\LaTeX} workflow is independent of having access to the {\connexions} -% system, which makes {\cnxlatex} attractive for the initial version of single-author -% modules. -% -% For publication, {\cnxlatex} modules are transformed to {\cnxml} via the {\latexml} -% translator and can be uploaded to the {\connexions} system. -% \end{abstract} -% -% \newpage\tableofcontents\newpage -% -%\section{Introduction} -% -% The Connexions project is a\ednote{continue; copy from somewhere...} -% -% The {\cnxml} format --- in particular the embedded content {\mathml} --- is hard to write -% by hand, so we provide a set of environments that allow to embed the {\cnxml} document -% model into {\LaTeX}. -% -%\section{The User Interface} -% -% This document is not a manual for the Connexions XML encoding, or a practical guide how -% to write Connexions modules. We only document the {\LaTeX} bindings for {\cnxml} and will -% presuppose experience with the format or familiarity with\ednote{cite the relevant stuff -% here}. Note that formatting {\cnxlatex} documents with the {\LaTeX} formatter does -% little to enforce the restrictions imposed by the {\cnxml} document model. You will need to -% run the {\latexml} converter for that (it includes DTD validation) and any CNX-specific -% quality assurance tools after that. \ednote{talk about Content {\mathml} and cmathml.sty -% somewhere} -% -% The {\cnxlatex} class makes heavy use of the |KeyVal| package, which is part of your -% {\LaTeX} distribution. This allows to add optional information to {\LaTeX} macros in the -% form of key-value pairs: A macro |\foo| that takes a KeyVal argument and a regular one, -% so a call might look like |\foo{bar}| (no KeyVal information given) or -% |\foo[key1=val1,...,keyn=valn]{bar}|, where |key1|,\dots,|keyn| are predefined keywords -% and values are {\LaTeX} token sequences that do not contain comma characters (though -% they may contain blank characters). If a value needs to contain commas, then it must be -% enclosed in curly braces, as in |\foo[args={a,comma,separated,list}]|. Note that the -% order the key/value pairs appear in a KeyVal Argument is immaterial. -% -% \subsection{Package Options}\label{sec:user:options} -% -% The |cnx| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If this is -% set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for details and -% customization options). -% -% \subsection{Document Structure} -% -% \begin{exfig} -%\begin{verbatim} -% \documentclass{cnx} -% \begin{document} -% \begin{cnxmodule}[name=Hello World,id=m4711] -% \begin{ccontent} -% \begin{cpara}[id=p01] Hello World\end{cpara} -% \end{ccontent} -% \end{cnxmodule} -% \end{document} -% \end{verbatim} -% \caption{A Minimal {\cnxlatex} Document}\label{fig:minimal} -%\end{exfig} -% -% The first set of {\cnxlatex} environments concern the top-level structure of the -% modules. The minimal Connexions document in {\LaTeX} can be seen in -% Figure~\ref{fig:minimal}: we still need the {\LaTeX} document environment, then -% \DescribeEnv{cnxmodule} -% the |cnxmodule| environment contains the module-specific information as a KeyVal -% argument with the two keys: |id| for the module identifier supplied by the -% {\connexions} system) and |name| for the title of the module. -% -% \DescribeEnv{ccontent} -% The |content| environment delineates the module content from the metadata (see -% Section~\ref{sec:metadata}). It is needed to make the conversion to {\cnxml} simpler. -% -% \DescribeEnv{c*section} -% {\cnxml} knows three levels of sectioning, so the {\cnxlatex} class supplies three as -% well: |csection|, |csubsection| and |csubsubsection|. In contrast to regular -% {\LaTeX}, these are environments to keep the tight connection between the -% formats. These environments take an optional KeyVal argument with key |id| for the -% identifier and a regular argument for the title of the section (to be transformed into -% the {\cnxml} {\element{name}} element). -% -% \DescribeEnv{cpara, cnote} -% The lowest levels of the document structure are given by paragraphs and notes. The -% |cpara| and |cnote| environment take a KeyVal argument with the |id| key for -% identification, the latter also allows a |type| key for the note type (an unspecified -% string\ednote{what are good values?}). -% -% -% \subsection{Mathematics} -% -% Mathematical formulae are integrated into text via the {\LaTeX} math mode, i.e. wrapped -% in |$| characters or between |\(| and |\)| for inline mathematics and wrapped in |$$| or -% between |\[| and |\]| for display-style math. Note that {\cnxml} expects Content -% {\mathml} as the representation format for mathematical formulae, while run-of-the-mill -% {\LaTeX} only specifies the presentation (i.e. the two-dimensional layout of -% formulae). The {\latexml} converter can usually figure out some of the content {\mathml} -% from regular {\LaTeX}, in other cases, the author has to specify it e.g. using the -% infrastructure supplied by the |cmathml| package. -% -% \DescribeEnv{cequation} -% For numbered equations, {\cnxml} supplies the {\element{equation}} element, for which -% {\cnxlatex} provides the |cequation| environment. This environment takes a KeyVal -% argument with the |id| key for the (required) identifier. -% -% -% \subsection{Statements} -% -% {\cnxml} provides special elements that make various types of claims; we -% collectively call them statements. -% -% \DescribeEnv{cexample} -% The |cexample| environment and |definition| elements take a KeyVal argument with key -% |id| for identification. -% -% -% \DescribeEnv{crule, statement, proof} -% In {\cnxml}, the {\element{rule}} element is used to represent a general assertion -% about the state of the world. The {\cnxlatex} |rule|\ednote{we have called this -% ``crule'', since ``rule'' is already used by {\TeX}.} environment is its {\cnxlatex} -% counterpart. It takes a KeyVal attribute with the keys |id| for identification, |type| -% to specify the type of the assertion (e.g. ``Theorem'', ``Lemma'' or ``Conjecture''), -% and |name|, if the assertion has a title. The body of the |crule| environment contains -% the statement of assertion in the |statement| environment and (optionally) a proof in -% the |proof| environment. Both take a KeyVal argument with an |id| key for -% identification. -% -%\begin{exfig} -%\begin{verbatim} -% \begin{crule}[id=prop1,type=Proposition] -% \begin{statement}[id=prop1s] -% Sample statement -% \end{statement} -% \begin{proof}[id=prop1p] -% Your favourite proof -% \end{proof} -% \end{crule} -% \end{verbatim} -% \caption{A Basic crule Example}\label{fig:crule} -%\end{exfig} -% -% \DescribeEnv{definition, cmeaning} A definition defines a new technical term or concept -% for later use. The |definition| environment takes a KeyVal argument with the keys |id| -% for identification and |term| for the concept (definiendum) defined in this form. The -% definition text is given in the |cmeaning| environment\footnote{we have called this -% |cmeaning|, since |meaning| is already taken by {\TeX}}, which takes a KeyVal argument -% with key |id| for identification. After the |cmeaning| environment, a |definition| can -% contain arbitrarily many |cexample|s. -% -%\begin{exfig} -%\begin{verbatim} -% \begin{definition}{term=term-to-be-defined, id=termi-def] -% \begin{cmeaning}[id=termi-meaning] -% {\term{Term-to-be-defined}} is defined as: Sample meaning -% \end{cmeaning} -% \end{definition} -%\end{verbatim} -% \caption{A Basic {\tt{definition}} and {\tt{cmeaning}} Example}\label{fig:def-cmean} -%\end{exfig} -% -% \subsection{Connexions: Links and Cross-References} -% -% As the name {\connexions} already suggests, links and cross-references are very -% important for {\connexions} modules. {\cnxml} provides three kinds of them. Module -% links, hyperlinks, and concept references. -% -% \DescribeMacro{cnxn} -% Module links are specified by the |\cnxn| macro, which takes a keyval argument with -% the keys |document|, |target|, and |strength|. The |document| key allows to specify -% the module identifier of the desired module in the repository, if it is empty, then -% the current module is intended. The |target| key allows to specify the document -% fragment. Its value is the respective identifier (given by its |id| attribute in -% {\cnxml} or the |id| key of the corresponding environment in {\cnxlatex}). Finally, -% the |strength| key allows to specify the relevance of the link. -% -% The regular argument of the |\cnxn| macro is used to supply the link text. -% -% -% \DescribeMacro{link} -% Hyperlinks can be specified by the |\link| macro in {\cnxlatex}. It takes a KeyVal -% argument with the key |src| to specify the URL of the link. The regular argument of -% the |\link| macro is used to supply the link text. -% -% -% \DescribeMacro{term} -% The |\term| marco can be used to specify the\ednote{continue, pending Chuck's -% investigation. } -% -% -% \subsection{Metadata}\label{sec:metadata} -% -% Metadata is mostly managed by the system in {\connexions}, so we often do not need to -% care about it. On the other hand, it influences the system, so if we have work on the -% module extensively before converting it to {\cnxml}, it may be worth-wile specify some of -% the data in advance. -% -% \begin{exfig} -%\begin{verbatim} -% \begin{metadata}[version=2.19, -% created=2000/07/21,revised=2004/08/17 22:07:27.213 GMT-5] -% \begin{authorlist} -% \cnxauthor[id=miko,firstname=Michael,surname=Kohlhase, -% email=m.kohlhase@iu-bremen.de] -% \end{authorlist} -% \begin{keywordlist}\keyword{Hello}\end{keywordlist} -% \begin{cnxabstract} -% A Minimal CNXLaTeX Document -% \end{cnxabstract} -% \end{metadata} -% \end{verbatim} -% \caption{Typical {\cnxlatex} Metadata}\label{fig:metadata} -%\end{exfig} -% -% \DescribeEnv{metadata} -% The |metadata| environment takes a KeyVal argument with the keys |version|, |created|, -% and |revised| with the obvious meanings. The latter keys take ISO 8601 norm -% representations for dates and times. Concretely, the format is -% {\snippet{CCYY-MM-DDThh:mm:ss}} where ``{\snippet{CC}}'' represents the century, -% ``{\snippet{YY}}'' the year, ``{\snippet{MM}}'' the month, and ``{\snippet{DD}}'' the -% day, preceded by an optional leading ``{\snippet{-}}'' sign to indicate a negative -% number. If the sign is omitted, ``{\snippet{+}}'' is assumed. The letter -% ``{\snippet{T}}'' is the date/time separator and ``{\snippet{hh}}'', -% ``{\snippet{mm}}'', ``{\snippet{ss}}'' represent hour, minutes, and seconds -% respectively. -% -% -% \DescribeEnv{authorlist, maintainerlist} -% The lists of authors and maintainers can be specified in the |authorlist| and -% |maintainerlist| environments, which take no arguments. -% -% \DescribeMacro{cnxauthor,maintainer} -% The entries on this lists are specified by the |\cnxauthor| and |\maintainer| -% macros. Which take a KeyVal argument specifying the individual. The |id| key is the -% identifier for the person, the |honorific|, |firstname|, |other|, |surname|, and -% |lineage| keys are used to specify the various name parts, and the |email| key is used -% to specify the e-mail address of the person. -% -% -% \DescribeEnv{keywordlist, keyword} -% The keywords are specified with a list of |keyword| macros, which take the respective -% keyword in their only argument, inside a |keyword| environment. Neither take any -% KeyVal arguments. -% -% -% \DescribeEnv{cnxabstract} -% The abstract of a {\connexions} module is considered to be part of the metadata. It is -% specified using the |cnxabstract| environment. It does not take any arguments. -% -% -% \subsection{Exercises} -% -% \DescribeEnv{cexercise, cproblem, csolution} -% An exercise or problem in {\connexions} is specified by the |cexercise| environment, -% which takes an optional keyval argument with the keys |id| and |name|. It must contain -% a |cproblem| environment for the problem statement and a (possibly) empty set of -% |csolution| environments. Both of these take an optional keyval argument with the key -% |id|. -% -% \subsection{Graphics, etc.} -% -% \DescribeMacro{cfigure} For graphics we will use the |cfigure|\ednote{probably better -% call it {\tt{cgraphics}}} macro, which provides a non-floating environment for -% including graphics into {\cnxml} files. |cfigure| takes three arguments first an -% optional {\cnxml} keys, then the keys of the |graphicx| package in a regular argument -% (leave that empty if you don't have any) and finally a path. So -% \begin{center} -% |\cfigure[id=foo,type=image/jpeg,caption=The first FOO]{width=7cm,height=2cm}{../images/foo}| -% \end{center} -% Would include a graphic from the file at the path |../images/foo|, equip this image with -% a caption, and tell {\latexml} that\ednote{err, exactly what does it tell latexml?} the -% original of the images has the MIME type |image/jpeg|. -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography}\newpage -% -% \section{The Implementation} -% -% The |cnx| package generates to files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$}} and -% {\textsf{$\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% \subsection{Package Options}\label{sec:impl:options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false). First we have the general options -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{omdoc}} -% \end{macrocode} -% Finally, we need to declare the end of the option declaration section to {\LaTeX}. -% \begin{macrocode} -\ProcessOptions -% -% \end{macrocode} -% -% We first make sure that the |sref|~\ctancite{Kohlhase:sref} and |graphicx| packages are -% loaded. -% \begin{macrocode} -%<*cls> -\RequirePackage{sref} -\RequirePackage{graphicx} -% \end{macrocode} -% -% The next step is to declare (a few) class options that handle the paper size; this is -% useful for printing. -% \begin{macrocode} -\DeclareOption{letterpaper} - {\setlength\paperheight {11in}% - \setlength\paperwidth {8.5in}} -\DeclareOption{a4paper} - {\setlength\paperheight {297mm}% - \setlength\paperwidth {210mm}} -\ExecuteOptions{letterpaper} -\ProcessOptions -% \end{macrocode} -% Finally, we input all the usual size settings. There is no sense to use something else, -% and we initialize the page numbering counter and tell it to output the numbers in arabic -% numerals (otherwise label and reference do not work). -% \begin{macrocode} -\input{size10.clo} -\pagenumbering{roman} -% -% \end{macrocode} -% Now comes the equivalent for {\latexml}: this is something that we will have throughout -% this document. Every part of the {\TeX/\LaTeX} implementation has a {\latexml} -% equivalent. We keep them together to ensure that they do not get out of sync. -% \begin{macrocode} -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('metakeys'); -% \end{macrocode} -% We set up the necessary namespaces, the first one is the default one for {\cnxml} -% \begin{macrocode} -RegisterNamespace('cnx'=>"http://cnx.rice.edu/cnxml"); -RegisterNamespace('md'=>"http://cnx.rice.edu/mdml/0.4"); -RegisterNamespace('bib'=>"http://bibtexml.sf.net/"); -RegisterNamespace('m'=>"http://www.w3.org/1998/Math/MathML"); -% \end{macrocode} -% For {\latexml} we also have to set up the correct document type information. The first line -% gives the root element. The second gives the public identifier for the CNX DTD, then we -% have its URL, and finally the CNX namespace. -% \begin{macrocode} -DocType("cnx:document", - "-//CNX//DTD CNXML 0.5 plus LaTeXML//EN", - "../dtd/cnxml+ltxml.dtd", - '#default'=>"http://cnx.rice.edu/cnxml", - 'md'=>"http://cnx.rice.edu/mdml/0.4", - 'bib'=>"http://bibtexml.sf.net/", - 'm'=>"http://www.w3.org/1998/Math/MathML", - 'ltx'=>"http://dlmf.nist.gov/LaTeXML"); -% \end{macrocode} -% -% And finally, we need to set up the counters for itemization, since we are defining a -% class file from scratch.\ednote{this will have to change, when Bruce updates to the next -% version (0.6?)} -% -% \begin{macrocode} -NewCounter('@itemizei', 'document', idprefix=>'I'); -NewCounter('@itemizeii', '@itemizei', idprefix=>'I'); -NewCounter('@itemizeiii', '@itemizeii', idprefix=>'I'); -NewCounter('@itemizeiv', '@itemizeiii',idprefix=>'I'); -NewCounter('@itemizev', '@itemizeiv', idprefix=>'I'); -NewCounter('@itemizevi', '@itemizev', idprefix=>'I'); - -NewCounter('enumi', '@itemizei', idprefix=>'i'); -NewCounter('enumii', '@itemizeii', idprefix=>'i'); -NewCounter('enumiii','@itemizeiii', idprefix=>'i'); -NewCounter('enumiv', '@itemizeiv', idprefix=>'i'); -# A couple of more levels, since we use these for ID's! -NewCounter('enumv', '@itemizev', idprefix=>'i'); -NewCounter('enumvi', '@itemizevi', idprefix=>'i'); - -DefMacro('\theenumi', '\arabic{enumi}'); -DefMacro('\theenumii', '\alph{enumii}'); -DefMacro('\theenumiii', '\roman{enumiii}'); -DefMacro('\theenumiv', '\Alph{enumiv}'); - -NewCounter('equation', 'document', idprefix=>'E'); -DefMacro('\theequation', '\arabic{equation}'); -DefMacro('\textwidth','16cm'); -% \end{macrocode} -% -% And another thing that is now needed: -% -% \begin{macrocode} -Let('\thedocument@ID','\@empty'); -% -% \end{macrocode} -% -% \subsection{Document Structure} -% -% Now, we start with the document structure markup. The |cnxmodule| environment does not -% add anything to the {\LaTeX} output, it's attributes only show up in the {\xml}. There -% we have a slight complication: we have to put an |id| attribute on the |document| -% element in {\cnxml}, but we cannot redefine the |document| environment in -% {\LaTeX}. Therefore we specify the information in the |cnxmodule| environment. This -% means however that we have to put in on the |document| element when we are already past -% this. The solution here is that when we parse the |cnxmodule| environement, we store the -% value and put it on the |document| element when we leave the |document| environment -% (thanks for Ioan Sucan for the code). -% -% \begin{environment}{cnxmodule} -% \begin{macrocode} -%<*cls> -\addmetakey{cnxmodule}{name} -\srefaddidkey{cnxmodule}{id} -\newenvironment{cnxmodule}[1][]{\metasetkeys{cnxmodule}{#1}}{} -% -%<*ltxml> -DefKeyVal('cnxmodule','name','Semiverbatim'); -DefKeyVal('cnxmodule','id','Semiverbatim'); -DefEnvironment('{document}','#body', - beforeDigest=> sub { AssignValue(inPreamble=>0); }, - afterDigest=> sub { $_[0]->getGullet->flush; return; }); -DefEnvironment('{cnxmodule} OptionalKeyVals:cnxmodule', - "&KeyVal('#1','name')\n#body\n", - afterDigestBegin => sub { - AssignValue('cnxmodule_id', - KeyVal($_[1]->getArg(1), 'id')->toString, - 'global'); - });#$ -Tag('cnx:document', afterClose => sub { - $_[1]->setAttribute('id', LookupValue('cnxmodule_id')); - }); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{ccontent} -% The |ccontent| environment is only used for transformation. Its optional |id| attribute -% is not taken up in the {\LaTeX} bindings. -% \begin{macrocode} -%<*cls> -\newenvironment{ccontent}{}{} -% -%<*ltxml> -DefEnvironment('{ccontent}',"#body"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{c*section} -% The sectioning environments employ the obvious nested set of counters. -% \begin{macrocode} -%<*cls> -\newcounter{section} -\srefaddidkey{sectioning}{id} -\newenvironment{csection}[2][]% -{\stepcounter{section}\strut\\[1.5ex]\noindent% -{\Large\bfseries\arabic{section}.~{#2}}\\[1.5ex] -\metasetkeys{sectioning}{#1}} -{} -\newcounter{subsection}[section] -\newenvironment{csubsection}[2][] -{\refstepcounter{subsection}\strut\\[1ex]\noindent% -{\large\bfseries{\arabic{section}.\arabic{subsection}.~#2\\[1ex]}}% -\metasetkeys{sectioning}{#1}}% -{} -\newcounter{subsubsection}[subsection] -\newenvironment{csubsubsection}[2][] -{\refstepcounter{subsubsection}\strut\\[.5ex]\noindent -{\bfseries\arabic{section}.\arabic{subsection}.\arabic{subsubsecction}~#2\\[.5ex]}% -\metasetkeys{sectioning}{#1}}{} -% -%<*ltxml> -DefKeyVal('sectioning','id','Semiverbatim'); -DefEnvironment('{csection}OptionalKeyVals:sectioning{}', - "\n" - . "?#2(#2\n)()" - . "#body\n\n"); -DefEnvironment('{csubsection}OptionalKeyVals:sectioning{}', - "\n" - . "?#2(#2\n)()" - . "#body\n\n"); -DefEnvironment('{csubsubsection}OptionalKeyVals:sectioning{}', - "\n" - . "?#2(#2\n)()" - . "#body\n\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{cpara} -% For the || element we have to do some work, since we want them to be -% numbered. This handling is adapted from Bruce Miller's |LaTeX.ltxml| -% numbered. -% \begin{macrocode} -%<*cls> -\srefaddidkey{para}{id} -\newenvironment{cpara}[1][]{\metasetkeys{para}{#1}}{\par} -% -%<*ltxml> -DefKeyVal('para','id','Semiverbatim'); -DefEnvironment('{cpara} OptionalKeyVals:para','#body'); -sub number_para { - my($document,$node,$whatsit)=@_; - # Get prefix from first parent with an id. - my(@parents)=$document->findnodes('ancestor::*[@id]',$node); # find 1st id'd parent. - my $prefix= (@parents ? $parents[$#parents]->getAttribute('id')."." : ''); - # Get the previous number within parent; Worried about intervening elements around para's, but... - my(@siblings)=$document->findnodes("preceding-sibling::cnx:para",$node); - my $n=1; - $n = $1+1 if(@siblings && $siblings[$#siblings]->getAttribute('id')=~/(\d+)$/); - $node->setAttribute(id=>$prefix."p$n"); } -Tag('cnx:para',afterOpen=>\&number_para); -DefConstructor('\par',sub { $_[0]->maybeCloseElement('cnx:para'); },alias=>"\\par\n"); -Tag('cnx:para', autoClose=>1, autoOpen=>1); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{cnote} -% \begin{macrocode} -%<*cls> -\srefaddidkey{note} -\addmetakey{note}{type} -\newenvironment{cnote}[1][]% -{\metasetkeys{note}{#1}\par\noindent\strut\hfill\begin{minipage}{10cm}{\bfseries\note@type}:~}% -{\end{minipage}\hfill\strut\par} -% -%<*ltxml> -DefKeyVal('note','id','Semiverbatim'); -DefKeyVal('note','type','Semiverbatim'); -DefEnvironment('{cnote}OptionalKeyVals:note','#body'); -% -% \end{macrocode} -% \end{environment} -% -% \subsection{Mathematics} -% -% \begin{environment}{cequation} -% \begin{macrocode} -%<*cls> -\srefaddidkey{equation}{id} -\newenvironment{cequation}[1][]% -{\metasetkeys{equation}{#1}\begin{displaymath}} -{\end{displaymath}} -% -%<*ltxml> -DefKeyVal('equation','id','Semiverbatim'); -DefEnvironment('{cequation} OptionalKeyVals:equation', - "" - . "" - . "#body" - . "", - mode=>'display_math'); -% -% \end{macrocode} -% \end{environment} -% -% \subsection{Rich Text} -% -% In this section, we redefine some of {\LaTeX} commands that have their counterparts in -% {\cnxml}. -% -% \begin{environment}{quote} -% \begin{macrocode} -%<*cls> -\srefaddidkey{cquote} -\addmetakey{cquote}{type} -\addmetakey{cquote}{src} -\newenvironment{cquote}[1][]{% -\metasetkeys{cquote}{#1}\begin{center}\begin{minipage}{.8\textwidth}}{\end{minipage}\end{center}} -% -%<*ltxml> -DefKeyVal('cquote','id','Semiverbatim'); -DefKeyVal('cquote','type','Semiverbatim'); -DefKeyVal('cquote','src','Semiverbatim'); -DefEnvironment('{cquote} OptionalKeyVals:cquote', - "#body"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{footnote} -% \begin{macrocode} -%<*ltxml> -DefConstructor('\footnote[]{}',"#2"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{emph} -% \begin{macrocode} -%<*ltxml> -DefConstructor('\emph{}',"#1"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{displaymath, eqnarray} -% We redefine the abbreviate display math envionment and the |eqnarray| and |eqnarray*| -% environments to use the {\cnxml} equation tags, everything else stays the same. -% -% \begin{macrocode} -%<*ltxml> -DefConstructor('\[', - "" - . "" - . "" - . "#body" - . "" - . "" - ."", - beforeDigest=> sub{ $_[0]->beginMode('display_math'); }, - captureBody=>1, - properties=> sub { RefStepID('equation') }); -DefConstructor('\]' ,"",beforeDigest=> sub{ $_[0]->endMode('display_math'); }); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{displaymath} -% We redefine the abbreviate display math envionment to use the {\cnxml} equation tags, -% everything else stays the same.\ednote{check {\tt{LaTeX.ltxml}} frequently and try to -% keep in sync, it would be good, if the code in LaTeXML.ltxml could be modularized, -% so that the {\tt{cnx}}/{\tt{ltx}} namespace differences could be relegated to -% config options} -% -% \begin{macrocode} -%<*ltxml> -DefConstructor('\[', - "" - . "" - . "" - . "#body" - . "" - . "" - ."", - beforeDigest=> sub{ $_[0]->beginMode('display_math'); }, - captureBody=>1, - properties=> sub { RefStepID('equation') }); -DefConstructor('\]' ,"",beforeDigest=> sub{ $_[0]->endMode('display_math'); }); - -DefMacro('\eqnarray', '\@@eqnarray\@start@alignment'); -DefMacro('\endeqnarray', '\@finish@alignment\end@eqnarray'); -DefMacro('\csname eqnarray*\endcsname', '\@@eqnarray*\@start@alignment'); -DefMacro('\csname endeqnarray*\endcsname', '\@finish@alignment\end@eqnarray'); -DefConstructor('\@@eqnarray OptionalMatch:* AlignmentBody:\end@eqnarray', - sub { - my($document,$star,$body,%props)=@_; - $document->openElement('cnx:equation',refnum=>$props{refnum},id=>$props{id}); - $document->openElement('ltx:Math',mode=>'display'); - $document->openElement('ltx:XMath'); - constructAlignment($document,$body,attributes=>{name=>'eqnarray'}); - $document->closeElement('ltx:XMath'); - $document->closeElement('ltx:Math'); - $document->closeElement('cnx:equation'); }, - mode=>'display_math', - beforeDigest=>sub { alignmentBindings('rcl'); }, - properties=> sub { ($_[1] ? RefStepID('equation') : RefStepCounter('equation')); }, - afterDigest=>sub { - $_[1]->setProperty(body=>$_[1]->getArg(2));}, # So we get TeX - reversion=>'\begin{eqnarray#1}#2\end{eqnarray#1}'); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{displaymath} -% We redefine the abbreviate display math envionment to use the {\cnxml} equation tags, -% everything else stays the same.\ednote{check {\tt{LaTeX.ltxml}} frequently and try to -% keep in sync, it would be good, if the code in LaTeXML.ltxml could be modularized, -% so that the {\tt{cnx}}/{\tt{ltx}} namespace differences could be relegated to -% config options} -% -% \begin{macrocode} -%<*cls> -\newcommand{\litem}[2][]{\item[#1]\label{#2}} -% -%<*ltxml> -Tag('cnx:item', autoClose=>1); -DefConstructor('\item[]',"?#1(#1)"); -DefConstructor('\litem[]{}',"?#1(#1)"); -DefConstructor('\itemize@item[]', - "?#1(#1)", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\enumerate@item[]', - "?#1(#1)", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\description@item[]', - "?#1(#1)", - properties=>sub{ RefStepItemCounter(); }); -AssignValue(itemlevel=>0); -DefEnvironment('{itemize}', - "#body", - properties=>sub { beginItemize('itemize'); }); -DefEnvironment('{enumerate}', - "#body", - properties=>sub { beginItemize('enumerate'); }); -DefEnvironment('{description}', - "#body", - properties=>sub { beginItemize('description'); }); -% -% \end{macrocode} -% \end{environment} -% -% The next set of commands and environments are largely presentational, so we just skip -% them. -% -% \begin{macrocode} -%<*ltxml> -DefEnvironment('{center}','#body'); -DefEnvironment('{minipage}{}','#body'); -DefEnvironment('{small}','#body'); -DefEnvironment('{footnotesize}','#body'); -DefEnvironment('{tiny}','#body'); -DefEnvironment('{scriptsize}','#body'); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*ltxml> -DefConstructor('\ref Semiverbatim', "&LookupValue('LABEL@#1')"); -% -% \end{macrocode} -% -% \subsection{Statements} -% -% \begin{environment}{cexample} -% \begin{macrocode} -%<*cls> -\srefaddidkey{example} -\addmetakey{example}{name} -\newenvironment{cexample}[1][]{\metasetkeys{example}{#1} -{\ifx\example@name\@empty\else\noindent\bfseries{\example@name}\fi}} -{} -% -%<*ltxml> -DefKeyVal('example','id','Semiverbatim'); -DefEnvironment('{cexample}OptionalKeyVals:example', - "#body"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{cexercise} -% The |cexercise|, |cproblem| and |csolution| environments are very simple to set up for -% {\LaTeX}. For the {\latexml} side, we simplify matters considerably for the moment by -% restricting the possibilities we have on the {\cnxml} side: We assume that the content -% is just one || element for the || and || -% elements.\ednote{relax this when we have automated the generation of {\tt{cnx:para}} -% elements} -% \begin{macrocode} -%<*cls> -\newcounter{cexercise} -\srefaddidkey{cexercise} -\addmetakey{cexercise}{name} -\newenvironment{cexercise}[1][]{\metasetkeys{cexercise}{#1} -{\ifx\cexercise@name\@empty\else\stepcounter{cexercise}\noindent\bfseries{\cexercise@name~\arabic{cexercise}}\fi}} -{} -\srefaddidkey{cproblem} -\newenvironment{cproblem}[1][]{\metasetkeys{cproblem}{#1}}{}{} -\srefaddidkey{csolution} -\newenvironment{csolution}[1][]{\metasetkeys{csolution}{#1}}{\par\noindent\bfseries{Solution}}{} -% -%<*ltxml> -DefKeyVal('cexercise','id','Semiverbatim'); -DefKeyVal('cexercise','name','Semiverbatim'); -DefEnvironment('{cexercise}OptionalKeyVals:exercise', - "" - . "#body" - . ""); -DefKeyVal('cproblem','id','Semiverbatim'); -DefKeyVal('cproblem','name','Semiverbatim'); -DefEnvironment('{cproblem}OptionalKeyVals:cproblem', - "" - . "?&defined(&KeyVal(#1,'name'))(&KeyVal(#1,'name')\n)()" - . "#body" - . ""); -DefKeyVal('csolution','id','Semiverbatim'); -DefKeyVal('csolution','name','Semiverbatim'); -DefEnvironment('{csolution}OptionalKeyVals:cproblem', - "" - . "?&defined(&KeyVal(#1,'name'))(&KeyVal(#1,'name')\n)()" - . "#body" - . ""); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{crule} -% \begin{macrocode} -%<*cls> -\srefaddidkey{rule} -\addmetakey{rule}{name} -\addmetakey{rule}{type} -\newenvironment{crule}[1][]{\metasetkeys{rule}{#1}% -{\noindent\bfseries{\rule@type:}\ifx\rule@name\@empty\else~(\rule@name)\fi}}% -{} -% -%<*ltxml> -DefKeyVal('rule','id','Semiverbatim'); -DefKeyVal('rule','name','Semiverbatim'); -DefKeyVal('rule','type','Semiverbatim'); -DefEnvironment('{crule}OptionalKeyVals:rule', - "\n" - . "?&defined(&KeyVal(#1,'name'))(&KeyVal(#1,'name')\n)()" - . "\n#body\n" - . "\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{statement} -% \begin{macrocode} -%<*cls> -\srefaddidkey{statement} -\newenvironment{statement}[1][]{\metasetkeys{statement}{#1}}{} -% -%<*ltxml> -DefKeyVal('statement','id','Semiverbatim'); -DefEnvironment('{statement} OptionalKeyVals:statement','#body'); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{proof} -% \begin{macrocode} -%<*cls> -\srefaddidkey{proof} -\newenvironment{proof}[1][]{\metasetkeys{proof}{#1}}{} -% -%<*ltxml> -DefKeyVal('proof','id','Semiverbatim'); -DefEnvironment('{proof}OptionalKeyVals:proof','#body'); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{definition} -% \begin{macrocode} -%<*cls> -\srefaddidkey{definition} -\addmetakey{definition}{term} -\addmetakey{definition}{seealso} -\newenvironment{definition}[1][]{\metasetkeys{definition}{#1}{\noindent\bfseries{Definition:}}}{} -% -%<*ltxml> -DefKeyVal('definition','id','Semiverbatim'); -DefKeyVal('definition','term','Semiverbatim'); -DefKeyVal('definition','seealso','Semiverbatim'); -DefEnvironment('{definition}OptionalKeyVals:definition', - "\n" - . "?&defined(&KeyVal(#1,'term'))(&KeyVal(#1,'term')\n)()" - . "\n#body\n" - . "?&defined(&KeyVal(#1,'seealso'))(&KeyVal(#1,'term')\n)()" - . "\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{cmeaning} -% \begin{macrocode} -%<*cls> -\srefaddidkey{meaning} -\newenvironment{cmeaning}[1][]{\metasetkeys{meaning}{#1}}{} -% -%<*ltxml> -DefKeyVal('meaning','id','Semiverbatim'); -DefEnvironment('{cmeaning}OptionalKeyVals:meaning','#body'); -% -% \end{macrocode} -% \end{environment} -% -% \subsection{Conexxions} -% -% \begin{macro}{cnxn} -% \begin{macrocode} -%<*cls> -\addmetakey{cnxn}{document} -\addmetakey{cnxn}{target} -\addmetakey{cnxn}{strength} -\newcommand{\cnxn}[2][]% keys, link text -{\metasetkeys{cnxn}{#1}{\underline{#2}}\footnote{{\ttfamily\@ifx\cnxn@document\@empty\cnxn@document\fi\#\cnxn@target}}} -\newcommand\@makefntext[1]{\parindent 1em\noindent\hb@xt@1.8em{\hss\@makefnmark}#1} -% -%<*ltxml> -DefKeyVal('cnxn','document','Semiverbatim'); -DefKeyVal('cnxn','target','Semiverbatim'); -DefKeyVal('cnxn','strength','Semiverbatim'); -DefConstructor('\cnxn OptionalKeyVals:cnxn {}','#1'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{link} -% \begin{macrocode} -%<*cls> -\addmetakey{link}{src} -\newcommand{\link}[2][]{\metasetkeys{link}{#1}\underline{#2}} -% -%<*ltxml> -DefKeyVal('link','src','Semiverbatim'); -DefConstructor('\link OptionalKeyVals:link {}','#2'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{cfigure} -% The |cfigure| only gives us one of the possible instances of the |

| -% element\ednote{extend that}.\ednote{do more about required and optional keys in -% arguments.} In {\LaTeX}, we just pipe the size information through to -% |includegraphics|, in {\latexml}, we construct the {\cnxml} structure\ednote{what do -% we do with the graphicx information about size,... CSS?} -% \begin{macrocode} -%<*cls> -\srefaddidkey{cfigure} -\addmetakey{cfigure}{type} -\addmetakey{cfigure}{caption} -\newcounter{figure} -\newcommand{\cfigure}[3][]{% cnx_keys, graphicx_keys, path -\begin{center}% -\includegraphics[#2]{#3}% -\metasetkeys{cfigure}{#1}\sref@target% -\ifx\cfigure@caption\@empty\else -\par\noindent Figure\refstepcounter{figure} {\arabic{figure}}: \cfigure@caption% -\protected@edef\@currentlabel{\arabic{figure}}% -\sref@label@id{Figure \thefigure}\fi -\end{center}} -% -%<*ltxml> -DefKeyVal('cfigure','id','Semiverbatim'); -DefKeyVal('cfigure','name','Semiverbatim'); -DefKeyVal('cfigure','type','Semiverbatim'); -DefKeyVal('cfigure','caption','Semiverbatim'); -DefConstructor('\cfigure OptionalKeyVals:cfigure Semiverbatim Semiverbatim', - "" - . "?&defined(&KeyVal(#1,'name'))(&KeyVal(#1,'name')\n)()" - . "" - . "?&defined(&KeyVal(#1,'caption'))(&KeyVal(#1,'caption')\n)()" - . ""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{ccite} -% \begin{macrocode} -%<*cls> -\addmetakey{ccite}{src} -\newcommand{\ccite}[2][]{\metasetkeys{ccite}{#1}\emph{#2}} -% -%<*ltxml> -DefKeyVal('ccite','src','Semiverbatim'); -DefConstructor('\ccite OptionalKeyVals:ccite {}','#2'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{term} -% \begin{macrocode} -%<*cls> -\newcommand{\term}[1]{{\bfseries\underline{#1}}} -% -%<*ltxml> -DefConstructor('\term[]{}',"#2"); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Metadata} -% -% \begin{environment}{metadata} -% \begin{macrocode} -%<*cls> -\addmetakey{metadata}{version} -\addmetakey{metadata}{created} -\addmetakey{metadata}{revised} -\newsavebox{\metadatabox} -\newenvironment{metadata}[1][]% -{\noindent\hfill\begin{lrbox}{\metadatabox} -\begin{minipage}{.8\textwidth}% -{\Large\bfseries CNX Module: \cnx@name\hfill\strut}\\[2ex]}% -{\end{minipage}\end{lrbox}\fbox{\usebox\metadatabox}\hfill} -% \newenvironment{metadata}[1][]% -% {\noindent\strut\hfill\begin{lrbox}{\metadatabox}\begin{minipage}{10cm}% -% {\strut\hfill\Large\bfseries CNX Module: \cnx@name\hfill\strut}\\[2ex]}% -% {\end{minipage}\end{lrbox}\fbox{\usebox\metadatabox}\hfill\strut\\[3ex]} -% -%<*ltxml> -DefKeyVal('metadata','version','Semiverbatim'); -DefKeyVal('metadata','created','Semiverbatim'); -DefKeyVal('metadata','revised','Semiverbatim'); -DefEnvironment('{metadata}OptionalKeyVals:metadata', - "\n" - . "&KeyVal('#1','version')\n" - . "&KeyVal('#1','created')\n" - . "&KeyVal('#1','revised')\n" - . "#body\n" - . ""); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{authorlist} -% \begin{macrocode} -%<*cls> -\newenvironment{authorlist}{{\bfseries{Authors}:~}}{\\[1ex]} -% -%<*ltxml> -DefEnvironment('{authorlist}',"#body"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{maintainerlist} -% \begin{macrocode} -%<*cls> -\newenvironment{maintainerlist}{{\bfseries{Maintainers}:~}}{\\[1ex]} -% -%<*ltxml> -DefEnvironment('{maintainerlist}',"#body"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{cnxauthor} -% \begin{macrocode} -%<*cls> -\srefaddidkey{auth} -\addmetakey{auth}{honorific} -\addmetakey{auth}{firstname} -\addmetakey{auth}{other} -\addmetakey{auth}{surname} -\addmetakey{auth}{lineage} -\addmetakey{auth}{email} -\newcommand{\cnxauthor}[1][]{\metasetkeys{auth}{#1}\auth@first~\auth@sur,} -% -%<*ltxml> -DefKeyVal('auth','id','Semiverbatim'); -DefKeyVal('auth','firstname','Semiverbatim'); -DefKeyVal('auth','surname','Semiverbatim'); -DefKeyVal('auth','email','Semiverbatim'); -DefConstructor('\cnxauthor OptionalKeyVals:auth', - "\n" - . "?&defined(&KeyVal(#1,'honorific'))(&KeyVal('#1','honorific')\n)()" - . "?&defined(&KeyVal(#1,'firstname'))(&KeyVal('#1','firstname')\n)()" - . "?&defined(&KeyVal(#1,'other'))(&KeyVal('#1','other')\n)()" - . "?&defined(&KeyVal(#1,'surname'))(&KeyVal('#1','surname')\n)()" - . "?&defined(&KeyVal(#1,'lineage'))(&KeyVal('#1','lineage')\n)()" - . "?&defined(&KeyVal(#1,'email'))(&KeyVal('#1','email')\n)()" - . "\n"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{maintainer} -% \begin{macrocode} -%<*cls> -\newcommand{\maintainer}[1][]{\metasetkeys{auth}{#1}\auth@first~\auth@sur,} -% -%<*ltxml> -DefConstructor('\maintainer OptionalKeyVals:auth', - "\n" - . "?&defined(&KeyVal(#1,'honorific'))(&KeyVal('#1','honorific')\n)()" - . "?&defined(&KeyVal(#1,'firstname'))(&KeyVal('#1','firstname')\n)()" - . "?&defined(&KeyVal(#1,'other'))(&KeyVal('#1','other')\n)()" - . "?&defined(&KeyVal(#1,'surname'))(&KeyVal('#1','surname')\n)()" - . "?&defined(&KeyVal(#1,'lineage'))(&KeyVal('#1','lineage')\n)()" - . "?&defined(&KeyVal(#1,'email'))(&KeyVal('#1','email')\n)()" - . "\n"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{keywordlist} -% \begin{macrocode} -%<*cls> -\newenvironment{keywordlist}{\bfseries{Keywords}:~}{\\[1ex]} -% -%<*ltxml> -DefEnvironment('{keywordlist}',"\n#body\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{keyword} -% \begin{macrocode} -%<*cls> -\newcommand{\keyword}[1]{#1,} -% -%<*ltxml> -DefConstructor('\keyword {}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{cnxabstract} -% \begin{macrocode} -%<*cls> -\newenvironment{cnxabstract}% -{\par\noindent\strut\hfill\begin{minipage}{10cm}{\bfseries{Abstract}:~}}% -{\end{minipage}\hfill} -% -%<*ltxml> -DefEnvironment('{cnxabstract} OptionalKeyVals:cnxabstract', - "\n#body\n\n"); -1; -% -% \end{macrocode} -% \end{environment} -% \Finale -\endinput - -% \iffalse -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi - -% LocalWords: iffalse cnx cnx.dtx cnx.cls scsys sc sc scshape cnxml ttfamily -% LocalWords: cnxlatex mathml latexml hbox fileversion maketitle newpage foo -% LocalWords: tableofcontents newpage ednote cmathml.sty keyn valn keyn exfig -% LocalWords: DescribeEnv cnxmodule ccontent csection csubsection cpara cnote -% LocalWords: csubsubsection cmathml cequation cexample crule cmeaning tt tt -% LocalWords: def-cmean cnxn keyval hh ss authorlist maintainerlist cnxauthor -% LocalWords: firstname keywordlist cnxabstract cexercise cproblem csolution -% LocalWords: cfigure cfigure cgraphics graphicx printbibliography textsf sref -% LocalWords: langle textsf langle ltxml ctancite sref cls setlength ltx -% LocalWords: paperheight paperwidth size10.clo pagenumbering ltxml.dtd enumi -% LocalWords: itemizei idprefix itemizeii itemizeiii itemizeiv itemizev enumii -% LocalWords: itemizevi enumiii enumiv enumv enumvi theenumi theenumii Sucan -% LocalWords: theenumiii theenumiv theequation textwidth thedocument -% LocalWords: environement srefaddidkey newenvironment Semiverbatim -% LocalWords: OptionalKeyVals newcounter stepcounter noindent bfseries -% LocalWords: refstepcounter subsubsection whatsit findnodes hfill -% LocalWords: displaymath cquote emph eqnarray envionment endeqnarray csname -% LocalWords: endcsname refnum refnum rcl newcommand itemlevel -% LocalWords: footnotesize scriptsize ifx Conexxions makefntext parindent hss -% LocalWords: makefnmark includegraphics currentlabel thefigure ccite lrbox -% LocalWords: newsavebox metadatabox fbox usebox auth doctex diff --git a/Master/texmf-dist/source/latex/stex/dcm/dcm.dtx b/Master/texmf-dist/source/latex/stex/dcm/dcm.dtx deleted file mode 100644 index ba7bdc3df31..00000000000 --- a/Master/texmf-dist/source/latex/stex/dcm/dcm.dtx +++ /dev/null @@ -1,1067 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for marking up Dublin Core Metadata in LaTeX documents -% $URL: https://svn.kwarc.info/repos/stex/trunk/sty/dcm/dcm.dtx $ -% $Rev: 1671 $; last modified by $Author: kohlhase $ -% $Date: 2010-11-06 08:05:15 +0100 (Sat, 06 Nov 2010) $ -% Copyright (c) 2007 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% \fi -% -% \iffalse -%<*package> -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{dcm}[2010/06/25 v0.3 Dublin Core Metadata] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{dcm,sref,url,array,float} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage{../ctansvn} -\usepackage{hyperref} -\usepackage{stex-logo} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: dcm.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/dcm/dcm.dtx $ -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\DCMperson[id=jdoe,affiliation={DFKI Bremen}, - url=http://dfki.de/jdoe]{John Doe} -\DCMperson[id=miko,affiliation={Jacobs University, Bremen}, - url=http://kwarc.info/kohlhase]{Michael Kohlhase} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{dcm.dtx}\end{document} -% -% \fi -% -%\iffalse\CheckSum{667}\fi -% -% \changes{v0.1}{2007/01/02}{First Hack for OMDoc spec} -% \changes{v0.2}{2008/06/17}{First Version with Documentation} -% \changes{v0.2}{2008/07/02}{Renamed to dcm} -% \changes{v0.3}{2009/09/21}{much more documentation of the user interface} -% \changes{v0.3}{2009/09/21}{Adding sref support and made generated headings configurable} -% \changes{v0.3}{2010/01/11}{Eliminating stub author index that never worked anyways} -% -% \GetFileInfo{dcm.sty} -% -% \MakeShortVerb{\|} -% \def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\latexml{\scsys{LaTeXML}} -% -% \begin{DCmetadata}[maketitle] -% \DCMtitle{{\texttt{dcm.sty}}: An Infrastructure for marking up Dublin Core Metadata in {\LaTeX} -% documents\thanks{Version {\fileversion} (last revised {\filedate})}} -% \DCMcreators{miko,jdoe} -% \DCMabstract{The |dcm| package allows mark up Dublin -% Core Metadata in {\LaTeX} documents that can be harvested by automated tools or -% exported to PDF, while at the same time generating conventional title information.} -% \end{DCmetadata} -% -% \setcounter{tocdepth}{2}\tableofcontents\newpage -% -%\DCMsection[id=intro,creators={miko}]{Introduction} -% -% The |dcm| packge allows mark up Dublin Core Metadata~\cite{DCMI:dmt03} in {\LaTeX} -% documents so that it can be harvested by automated tools or exported to PDF\ednote{This -% still needs to be implemented, see \texttt{http://www.wlug.org.nz/PdfLatexNotes} for -% details}. This package allows to attribute authorship to arbitrary text -% fragments.\ednote{continue} -% -% \DCMsection[id=user,creators={miko,jdoe}]{The User Interface} -% -% \DCMsubsection[id=user.options]{Package Options} -% -% The |dcm| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If this is -% set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for details and -% customization options). -% -% \DCMsubsection{Persons} -% -% The |dcm| package recognizes that from a metadata perspective, persons are complex -% entities. In particular, specifying metadata is a tedious and repetitive task that leads -% to embarrassing errors. Therefore the |dcm| package takes a hint from bibTeX and allows -% to specify personal metadata in a database and use it by a database key. -% \begin{exfig}[ht] -% \begin{verbatim} -% \DCMperson[id=jdoe,affiliation={DFKI Bremen}, -% url=http://dfki.de/jdoe]{John Doe} -% \DCMperson[id=miko,affiliation={Jacobs University, Bremen}, -% url=http://kwarc.info/kohlhase]{Michael Kohlhase} -% \end{verbatim} -% \caption{A small database of Persons} -% \label{fig:persons} -% \end{exfig} -% The \DescribeMacro{\DCMperson}|\DCMperson| macro allows to specify personal metadata\ednote{This -% should be synchronized with the FOAF specification~\cite{FOAF:spec}} with the following -% keys: -% \begin{center} -% \begin{tabular}{|l|l|}\hline -% key & comment\\\hline\hline -% id & identifier of this person\\\hline -% birthdate & birthdate \\\hline -% email & the primary e-mail address\\\hline -% url & the URI of the primary home page \\\hline -% affiliation & the primary professional affiliation\\\hline -% personaltitle & the personal title e.g. {\texttt{King}}\\\hline -% academictitle & the academic title e.g. {\texttt{Prof. Dr.}}\\\hline -% department & the department specified in the work address\\\hline -% workaddress & the work address \\\hline -% privaddress & the private address \\\hline -% worktel & work telephone number \\\hline -% privtel & private telephone number\\\hline -% workfax & work fax number \\\hline -% privfax & private fax number \\\hline -% worktelfax & if the phone and fax share a prefix, give this as well \\\hline -% privtelfax & dito\\\hline -% \end{tabular} -% \end{center} -% In Figure~\ref{fig:persons} we have specified (minimal) metadata for the authors of the -% |dcm| package. The metadata can be accessed by specifying the identifiers (given by the -% |id| key) in the |dcm| macros defined below, see for instance the |\DCMcreators| macro -% in Figure~\ref{fig:dcmblock}, which leads to the title block of this note. -% -% Like in bibTeX~\cite{Patashnik:b88}, it is a good idea to collect the metadata in a separate -% file that is input in the document. In practice it may be possible to generate these -% files from conventional address databases. -% -% \DCMsubsection[id=user.dcm.mdblock]{The DC Metadata Block} -% -% \DescribeEnv{DCmetadata} The |dcm| provides the environment |DCmetadata| for Dublin Core -% Metadata Blocks. |DCmetadata| defines local macros for the specifying the relevant -% Dublin Core metadata fields and takes an optional argument that specifies the -% presentation of the metadata block, see Figure~\ref{fig:dcmblock} for an example which -% would generate the title block for the |dcm| package. Let us now come to the macros themselves -% -% \DescribeMacro{\DCMcreators}\DescribeMacro{\DCMcontributors} The |\DCMcreators| and -% |\DCMcontributors| macros are used to specify the authors and contributors to a text -% fragments. These macros take one argument, the authorship of a document specified in -% terms of |id|s of persons specified via |\DCMperson| before. They can occur multiply in -% a metadata block. -% -% \DescribeMacro{\DCMtitle} The |\DCMtitle| macro takes one argument, the -% -% \DescribeMacro{\DCMshorttitle} The |\DCMshorttitle| macro takes one argument, the -% -% \DescribeMacro{\DCMsubject} The |\DCMsubject| macro takes one argument, the -% -% \DescribeMacro{\DCMdescription} The |\DCMdescription| macro takes one argument, the -% -% \DescribeMacro{\DCMpublisher} The |\DCMpublisher| macro takes one argument, the -% -% \DescribeMacro{\DCMdate} The |\DCMdate| macro takes one argument, the -% -% \DescribeMacro{\DCMtype} The |\DCMtype| macro takes one argument, the -% -% \DescribeMacro{\DCMidentifier} The |\DCMidentifier| macro takes two arguments, the first one -% is the identification system, and the second one the identifier string itself. -% -% \DescribeMacro{\DCMsource} The |\DCMsource| macro takes one argument, the -% -% \DescribeMacro{\DCMlanguage} The |\DCMlanguage| macro takes one argument, the -% -% \DescribeMacro{\DCMrelation} The |\DCMrelation| macro takes one argument, the -% -% \DescribeMacro{\DCMrights} The |\DCMrights| macro takes one argument, the -% -% \DescribeMacro{\DCMlicense} The |\DCMlicense| macro takes one argument, the -% -% \DescribeMacro{\DCMabstract} The |\DCMabstract| macro takes one argument, the -% -% \DescribeMacro{\DCMlicensenotice} The |\DCMlicensenotice| macro takes one argument, the -% -% \DescribeMacro{\DCMcopyrightnotice} The |\DCMcopyrightnotice| macro takes one argument, the -% -% \DescribeMacro{\DCMcclicense} The |\DCMcclicense| macro -% -% \DescribeMacro{\attribution} -% -% \DescribeMacro{\noncommercial} -% -% \DescribeMacro{\sharealike} -% -% \DescribeMacro{\noderivativeworks} -% -% \begin{exfig}[ht] -% \begin{verbatim} -% \begin{DCmetadata}[maketitle] -% \DCMtitle{An Infrastructure for marking up Dublin Core Metadata in -% {\LaTeX} documents\thanks{Version {\fileversion} -% (last revised {\filedate})}} -% \DCMcreators{miko,jdoe} -% \DCMdate{\today} -% \DCMcopyrightnotice{2008}{Michael Kohlhase} -% \DCMlicensenotice{Copyright (c) 2008 Michael Kohlhase, all rights -% reserved. This file is released under the LaTeX Project Public -% License (LPPL)} -% \DCMabstract{The {\texttt{dcm}} packge allows mark up Dublin -% Core Metadata in {\LaTeX} documents that can be harvested by -% automated tools or exported to PDF, while at the same time -% generating conventional title information.} -% \end{DCmetadata} -% \end{verbatim} -% \caption{The DC Metadata block for the {\texttt{dcm}} package documentation} -% \label{fig:dcmblock} -% \end{exfig} -% -% \DCMsubsection[creators=jdoe,id=user.blockstyles]{DCM Metadata Block Styles} -% -% The |DCmetadata| environment takes an optional argument that specifies the style the -% metadata block is rendered in. The |dcm| package supplies two styles: -% \DescribeMacro{maketitle}|maketitle| and \DescribeMacro{titlepage}|titlepage|. The -% former uses the |\maketitle| macro from the calling class to assemble a title, whereas -% the latter builds a title page from scratch. The title block of this documentation has -% been created by the |maketitle| style. -% -% To add a further metadata block style \meta{sty}, we simply have to supply a -% \DescribeMacro{\dcm@*@block}|\dcm@|\meta{sty}|@block| macro that expands to the intended -% presentation. This macro does not take any arguments, but can use the internal token -% registers defined by the |DCmetadata| environment. Generally, for any of the metadata -% commands |\DCM|\meta{md} defined in {\sref{user.dcm.mdblock}} there is a token register -% |\dcm@|\meta{md} that contains the value specified in the key. -% -% \DCMsubsection{Augmented Sectioning Macros} -% -% The |dcm| package supplies sectioning commands customized for metadata handling: The -% \DescribeMacro{\DCMchapter}|\DCMchatper| \DescribeMacro{\DCMsection}|\DCMsection| -% \DescribeMacro{\DCMsubsection}|\DCMsubsection|, and -% \DescribeMacro{\DCMsubsubsection}|\DCMsubsubsection| macros behave like their regular -% {\LaTeX} counterpart, except that the optional argument, which is used to specify a -% short title there, is now a KeyVal argument. The |short| key takes over the role of -% specifying a short title in |\DCM|\meta{sect}. The |id| key allows to specify an -% identifier, which can be used for {\LaTeX}-style referencing (use -% |\ref{|\meta{sect}|.|\meta{id}|}|) or |sref|-style referencing~\ctancite{Kohlhase:sref} -% (use |\sref{|\meta{id}|}|). Finally, the keys |creators| and |contributors| can be used -% to specify the authors (creators in Dublin Core speak~\cite{DCMI:dmt03}) and -% contributors. For instance the following line was used to specify the heading of -% {\sref{user}}. -% \begin{verbatim} -% \DCMsection[id=user,creators={miko,jdoe}]{The User Interface} -% \end{verbatim} -% Finally, the |style| key can be used to specify a style. -% -% \DCMsubsection[id=user.conig]{Configuration} -% -% The |dcm| package provides a set of macros that customize (e.g. for multiple languages) -% the generated -% content. -% \DescribeMacro{\dcm@abstract@heading} -% \DescribeMacro{\dcm@creators@heading} -% \DescribeMacro{\dcm@contributors@connector} -% \DescribeMacro{\dcm@chapter@heading} -% \DescribeMacro{\dcm@section@heading} -% \DescribeMacro{\dcm@subsection@heading} -% \DescribeMacro{\dcm@subsubsection@heading} -% \begin{center}\makeatletter -% \begin{tabular}{|l|l|}\hline -% Macro & Default\\\hline\hline -% |\dcm@abstract@heading| & \dcm@abstract@heading \\\hline -% |\dcm@creators@heading| & \dcm@creators@heading \\\hline -% |\dcm@contributors@connector| & \dcm@contributors@connector \\\hline\hline -% |\dcm@chapter@heading| & \dcm@chapter@heading \\\hline -% |\dcm@section@heading| & \dcm@section@heading \\\hline -% |\dcm@subsection@heading| & \dcm@subsection@heading \\\hline -% |\dcm@subsubsection@heading| & \dcm@subsubsection@heading \\\hline -% \end{tabular} -% \end{center} -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\printbibliography} -% -% \DCMsection[creators=jdoe,id=impl]{The Implementation} -% -% The |dcm| package generates two files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and -% $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% \DCMsubsection[id=impl.options]{Package Options} -% The first step is to declare (a few) package options that handle whether certain -% information is printed or not. They all come with their own conditionals that are set by -% the options. -% -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\ProcessOptions -% -% \end{macrocode} -% -% The first measure is to ensure that the |KeyVal| package is loaded (in the right -% version). For {\latexml} we also initialize the package inclusions. -% \begin{macrocode} -%<*package> -\RequirePackage{sref} -% -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Global; -use LaTeXML::Package; -RequirePackage('sref'); -% -% \end{macrocode} -% -% \DCMsubsection{Persons} -% -% To implement the |\DCMperson| macro, we need to implement its keywords first and also -% the |\dcm@person@clear@keys| macro that clears them. \ednote{need some DCM stuff here} -% -% \begin{macrocode} -%<*package> -\addmetakey{dcm@person}{id} -\addmetakey{dcm@person}{birthdate} -\addmetakey{dcm@person}{email} -\addmetakey{dcm@person}{url} -\addmetakey{dcm@person}{affiliation} -\addmetakey{dcm@person}{personaltitle} -\addmetakey{dcm@person}{academictitle} -\addmetakey{dcm@person}{department} -\addmetakey{dcm@person}{workaddress} -\addmetakey{dcm@person}{privaddress} -\addmetakey{dcm@person}{worktel} -\addmetakey{dcm@person}{privtel} -\addmetakey{dcm@person}{workfax} -\addmetakey{dcm@person}{privfax} -\addmetakey{dcm@person}{worktelfax} -\addmetakey{dcm@person}{privtelfax} -% -% \end{macrocode} -% -% The next macro is an auxiliary one that puts the value into an appropriate token -% register. At the {\latexml} side we have a function |ExportMetadata| that does a similar -% job, fishing out the metadata keys from the keyval arguments and storing them in a safe -% place so they can be accessed later. -% -% \begin{macrocode} -%<*package> -\def\dcm@pers@def#1#2{\expandafter\xdef\csname dcm@person@\dcm@person@id @#1\endcsname{#2}} -\def\dcm@pers@ref#1#2{\csname dcm@person@#1@#2\endcsname} -\let\dcm@persons=\relax -% -%<*ltxml> - sub getKeyValue_noDelim { - my ($keyval,$key)=@_; - my $valuelist = ToString($keyval->getValue($key)); - $valuelist =~ s/^{(.*)}$/$1/g if $valuelist; - return $valuelist; -} -sub ExportMetadata { - my $keys = shift; - my($id, $email,$affill,$address,$url,$name)=$keys - && map(getKeyValue_noDelim($keys,$_),qw(id email affiliation address url name)); - if ($id) { - AssignValue('DCM_'.$id.'_email',$email,'global') if $email; - AssignValue('DCM_'.$id.'_affiliation',$affill,'global') if $affill; - AssignValue('DCM_'.$id.'_address',$email,'global') if $email; - AssignValue('DCM_'.$id.'_url',$url,'global') if $url; - AssignValue('DCM_'.$id.'_name',$name,'global') if $name; - } else {print STDERR "Warning: key 'id' undefined in \\DCMperson\n"}; - return;} -% -% \end{macrocode} -% -% With this we can define the |\DCMperson| macro, it just clears the keys, sets them -% again, and stores them in token registers. If course only if a |id| attribute is given, -% else we raise an error. -% -% \begin{macro}{DCMPerson} -% \begin{macrocode} -%<*package> -\newcommand{\DCMperson}[2][]{\metasetkeys{dcm@person}{#1} -\ifx\dcm@person@id\@empty\@latex@warning{key 'id' undefined in DCMperson}\else -\dcm@pers@def{name}{#2} -\dcm@pers@def{email}{\dcm@person@email} -\dcm@pers@def{birthdate}{\dcm@person@birthdate} -\dcm@pers@def{url}{\dcm@person@url} -\dcm@pers@def{affiliation}{\dcm@person@affiliation} -\dcm@pers@def{workaddress}{\dcm@person@workaddress} -\dcm@pers@def{privaddress}{\dcm@person@privaddress} -\dcm@pers@def{personaltitle}{\dcm@person@personaltitle} -\dcm@pers@def{academictitle}{\dcm@person@academictitle} -\dcm@pers@def{department}{\dcm@person@department} -\dcm@pers@def{workaddress}{\dcm@person@workaddress} -\dcm@pers@def{privaddress}{\dcm@person@privaddress} -\dcm@pers@def{worktel}{\dcm@person@worktel} -\dcm@pers@def{privtel}{\dcm@person@privtel} -\dcm@pers@def{workfax}{\dcm@person@workfax} -\dcm@pers@def{privfax}{\dcm@person@privfax} -\dcm@pers@def{worktelfax}{\dcm@person@worktelfax} -\dcm@pers@def{privtelfax}{\dcm@person@privtelfax} -\@ifundefined{dcm@persons}{\xdef\dcm@persons{\dcm@person@id}}{\xdef\dcm@persons{\dcm@persons,\dcm@person@id}} -\fi} -% -%<*ltxml> -DefKeyVal('dcm@person','id','Semiverbatim'); -DefKeyVal('dcm@person','birthdate','Semiverbatim'); -DefKeyVal('dcm@person','email','Semiverbatim'); -DefKeyVal('dcm@person','url','Semiverbatim'); -DefKeyVal('dcm@person','affiliation','Semiverbatim'); -DefKeyVal('dcm@person','personaltitle','Semiverbatim'); -DefKeyVal('dcm@person','academictitle','Semiverbatim'); -DefKeyVal('dcm@person','department','Semiverbatim'); -DefKeyVal('dcm@person','workaddress','Semiverbatim'); -DefKeyVal('dcm@person','privaddress','Semiverbatim'); -DefKeyVal('dcm@person','worktel','Semiverbatim'); -DefKeyVal('dcm@person','privtel','Semiverbatim'); -DefKeyVal('dcm@person','workfax','Semiverbatim'); -DefKeyVal('dcm@person','privfax','Semiverbatim'); -DefKeyVal('dcm@person','worktelfax','Semiverbatim'); -DefKeyVal('dcm@person','privtelfax','Semiverbatim'); - -DefConstructor('\DCMperson OptionalKeyVals:dcm@person {}','', -afterDigest=>sub { - my ($stomach,$whatsit)=@_; - my $keys=$whatsit->getArg(1); - my $name=ToString($whatsit->getArg(2)); - $keys->setValue('name',$name); - ExportMetadata($keys); - return; -});#$ -% -% \end{macrocode} -% \end{macro} -% -% Furthermore, we need a couple of helper functions for the -% -% \begin{macrocode} -%<*ltxml> -sub FishOutMetadata { - my ($document,$keyvals)=@_; - foreach my $role(qw(creators contributors)) { - my $idlist_string=getKeyValue_noDelim($keyvals,$role); - my @ids = split(/,\s*/, $idlist_string); - foreach my $id(@ids) { - my $name = LookupValue('DCM_'.$id.'_name'); - if ($name) { - my $prop_role = $role; - chop $prop_role if $prop_role; - $document->insertElement("dc:$prop_role",$name) if $role; - } else {print STDERR "Warning: no $role with 'id' $id !\n";} - } - } - return;}#$ -% -% \end{macrocode} -% -% \DCMsubsection{The DC Metadata Block} -% -% Then we make an environment for defining the metadata. Note that since we have defined -% the |omdoc:metadata| element to auto-open and auto-close, we do not have to (and should -% not for that matter) supply it in the |DCmetadata| element. -% -% \begin{environment}{DCmetadata} -% \begin{macrocode} -%<*package> -\newenvironment{DCmetadata}[1][]% -{\def\@style{#1}} % to set the way things are presented. -{\@ifundefined{dcm@\@style @block}{\message{style {\@style} not defined}}{\csname dcm@\@style @block\endcsname}} -% -%<*ltxml> -DefEnvironment('{DCmetadata}[]', "#body"); -% -% \end{macrocode} -% \end{environment} -% -% Now some auxiliary macros to make author blocks. \ednote{use and document them!} -% -% \begin{macrocode} -%<*package> -\def\dcm@tabline#1#2{\xdef\tab@line{}% -\@for\@p:={#1}\do{\xdef\tab@line{\tab@line&\dcm@pers@ref\@p{#2}}} -\tab@line} -\def\dcm@atabline#1#2#3{\xdef\tab@line{}% -\@for\@p:={#1}\do{\xdef\tab@line{\tab@line: \dcm@pers@ref\@p{#3}}} -\tab@line} -\def\dcm@bitabline#1#2#3#4{\xdef\tab@line{}% -\@for\@p:={#1}\do{\xdef\tab@line{\tab@line&\dcm@pers@ref\@p{#2} #3 \dcm@pers@ref\@p{#4}}} -\tab@line} -% -% \end{macrocode} -% Here come the constructors, most of them are relatively straightforward -% \begin{macro}{\DCMcreators} -% the |\DCMcreators| macro checks whether all ids are defined. -% \begin{macrocode} -%<*package> -\def\DCMcreators#1{\@for\@I:=#1\do{% -\ifx\csname dcm@person@\@I @id\endcsname\@empty% undefined \dcm@person@id -\PackageError{dcm}{reference to undefined DCMperson \@I}% -{you must define a person with id=\@I\MessageBreak% -via the macro \protect\DCMperson, before you can use it in \protect\DCMcreators}\fi}% -\def\dcm@creators{#1}} -% -%<*ltxml> -DefConstructor('\DCMcreators{}',sub{ - my ($document,$args,%properties) = @_; - my $keyval = LaTeXML::KeyVals->new('dcm@person',T_BEGIN,T_END,('creators'=>$args)); - FishOutMetadata($document,$keyval); - return;}); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMcontributors} -% the |\DCMcontributors| macro also checks whether all ids are defined. -% \begin{macrocode} -%<*package> -\def\DCMcontributors#1{\@for\@I:=#1\do{% -\ifx\csname dcm@person@\@I @id\endcsname\@empty% undefined \dcm@person@id -\PackageError{dcm}{reference to undefined DCMperson \@I}% -{you must define a person with id=\@I\MessageBreak% -via the macro \protect\DCMperson, before you can use it in \protect\DCMcontributors}}% -\else% all \dcm@person@id in the list are defined -\def\dcm@contributors{#1}\fi} -% -%<*ltxml> -DefConstructor('\DCMcontributors{}',sub{ - my ($document,$args,%properties) = @_; - my $keyval = LaTeXML::KeyVals->new('dcm@person',T_BEGIN,T_END,('contributors'=>$args)); - FishOutMetadata($document,$keyval); - return;}); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMtitle} -% \begin{macrocode} -%<*package> -\def\DCMtitle#1{\def\dcm@title{#1}\providecommand{\dcm@shorttitle}{#1}} -% -%<*ltxml> -DefConstructor('\DCMtitle{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMsubtitle} -% \begin{macrocode} -%<*package> -\def\dcm@subtitle{} -\def\DCMsubtitle#1{\def\dcm@subtitle{#1}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMshorttitle} -% \begin{macrocode} -%<*package> -\def\dcm@shorttitle{} -\def\DCMshorttitle#1{\def\dcm@shorttitle{#1}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMsubject} -% \begin{macrocode} -%<*package> -\def\DCMsubject#1{\def\dcm@subject{#1}} -% -%<*ltxml> -DefConstructor('\DCMsubject{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMdescription} -% \begin{macrocode} -%<*package> -\long\def\DCMdescription#1{\long\def\dcm@description{#1}} -% -%<*ltxml> -DefConstructor('\DCMdescription{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMpublisher} -% \begin{macrocode} -%<*package> -\def\DCMpublisher#1{\def\dcm@publisher{#1}} -% -%<*ltxml> -DefConstructor('\DCMpublisher{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMdate} -% the |\DCMdate| uses |\today| as a default\ednote{@DEYAN: do that in latexml} -% \begin{macrocode} -%<*package> -\def\dcm@date{\today} -\def\DCMdate#1{\def\dcm@date{#1}} -% -%<*ltxml> -DefConstructor('\DCMdate{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMtype} -% \begin{macrocode} -%<*package> -\def\DCMtype#1{\def\dcm@type{#1}} -% -%<*ltxml> -DefConstructor('\DCMtype{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMidentifier} -% \begin{macrocode} -%<*package> -\def\DCMidentifier#1#2{\def\dcm@scheme{#1}\def\dcm@identifier{#2}} -% -%<*ltxml> -DefConstructor('\DCMidentifier{}{}',"#2"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMsource} -% \begin{macrocode} -%<*package> -\def\DCMsource#1{\def\dcm@source{#1}} -% -%<*ltxml> -DefConstructor('\DCMsource{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMlanguage} -% \begin{macrocode} -%<*package> -\def\DCMlanguage#1{\def\dcm@language{#1}} -% -%<*ltxml> -DefConstructor('\DCMlanguage{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMrelation} -% \begin{macrocode} -%<*package> -\def\DCMrelation#1{\def\dcm@relation{#1}} -% -%<*ltxml> -DefConstructor('\DCMrelation{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMrights} -% \begin{macrocode} -%<*package> -\def\DCMrights#1{\long\def\dcm@rights{#1}} -% -%<*ltxml> -DefConstructor('\DCMrights{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMlicense} -% \begin{macrocode} -%<*package> -\def\DCMlicense#1{\def\dcm@license{#1}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMlicensenotice} -% here we have a default -% \begin{macrocode} -%<*package> -\def\dcm@license{All rights reserved} -\def\DCMlicensenotice#1{\long\def\dcm@license{\\[1ex]License: #1}} -% -%<*ltxml> -DefMacro('\DCMlicensenotice{}','\DCMrights{#1}'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMcopyrightnotice} -% \begin{macrocode} -%<*package> -\def\DCMcopyrightnotice#1#2{\DCMrights{Copyright {\copyright} #1: #2}} -% -%<*ltxml> -DefMacro('\DCMcopyrightnotice{}{}','\DCMrights{Copyright {\copyright} #1: #2}'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cclicense} -% \begin{macrocode} -%<*package> -\def\cclicense#1{\def\attribution{\def\dcm@by{yes}} - \def\noncommercial{\def\dcm@nc{yes}} - \def\sharealike{\defdcm@sharealike{yes}} - \def\noderivativeworks{\def\dcm@derivatives{no}}} -% -%<*ltxml> -DefConstructor('\cclicense{}',"#1"); -DefConstructor('\attribution',""); -DefConstructor('\noncommercial',""); -DefConstructor('\sharealike',""); -DefConstructor('\noderivativeworks',""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMabstract} -% \begin{macrocode} -%<*package> -\long\def\DCMabstract#1{\long\def\dcm@abstract{#1}} -% -%<*ltxml> -DefConstructor('\DCMabstract{}',"#1"); -% -% \end{macrocode} -% \end{macro} -% -% \DCMsubsection[creators=jdoe,id=impl.blockstyles]{DCM Block Styles} -% -% We now define various commonly used styles. -% -% \begin{macro}{\dcm@authorblock} -% This internal macro builds an author block from a list of |\DCMperson| labels in -% |\dcm@creators|. -% \begin{macrocode} -%<*package> -\def\dcm@authorblock{\newcounter{authors}\stepcounter{authors} -{\let\tabularnewline\relax - \@for\@I:=\dcm@creators\do{\stepcounter{authors}} - \def\@authors{}\def\@affs{}\def\@urls{} - \@for\@I:=\dcm@creators\do - {\xdef\@authors{\@authors&\csname dcm@person@\@I @name\endcsname} - \xdef\@affs{\@affs&\csname dcm@person@\@I @affiliation\endcsname} - \xdef\@urls{\@urls&\csname dcm@person@\@I @url\endcsname}} - \message{authors: \@authors}} - \begin{tabular}[t]{l*{\theauthors}{c}}\@authors\\\@affs\\\@urls\end{tabular}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dcm@titlepage@block} -% This style builds up a title page from scratch -% \begin{macrocode} -%<*package> -\def\dcm@titlepage@block{\begin{titlepage} - \null\vfil\vskip 60\p@ - \begin{center} - \ifx\dcm@title\@empty - \PackageWarning{dcm}{No title specified}{\LARGE Add title here\par} - \else\LARGE \dcm@title \par\fi - \ifx\dcm@subtitle\@empty - \vskip 3em\Large \dcm@subtitle \par\vskip 3em - \else\large\lineskip .75em\dcm@authorblock\vskip 1.5em\fi - \ifx\dcm@date\@empty - \PackageWarning{dcm}{No date specified}{\large\today\par} - \else{\large\dcm@date\par}\vskip 2em\fi - \end{center}\vskip2em - \ifx\dcm@abstract\@empty - \PackageWarning{dcm}{No Abstract specified}\else - \begin{quote}\textbf\dcm@abstract@heading:\dcm@abstract\end{quote}\fi - \vskip 2em\par\vfil\noindent - {\small\noindent\dcm@rights\dcm@license} - \end{titlepage}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dcm@maketitle@block} -% This style makes use of the title facility of the document class. -% \begin{macrocode} -%<*package> -\def\dcm@maketitle@block{\def\@title{\dcm@title\ifx\dcm@subtitle\empty\else\newline\dcm@subtitle\fi} -\def\@author{\dcm@authorblock}\def\@date{\dcm@date}\maketitle} -% -% \end{macrocode} -% \end{macro} -% -% \DCMsubsection{Augmented Sectioning Macros} -% -% \begin{macro}{\dcm@sect@clear@keys} -% We first define the sectioning keys with the infrastructure from the |metakeys| -% package~\ctancite{Kohlhase:metakeys} -% \begin{macrocode} -%<*package> -\srefaddidkey{dcm@sect} -\addmetakey{dcm@sect}{short} -\addmetakey{dcm@sect}{creators} -\addmetakey{dcm@sect}{contributors} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dcm@section} -% The next step is to define an auxiliary macro that does all the -% work. |\dcm@section{|\meta{type}|}{|\meta{title}|}{|\meta{keys}|}| delegates the -% presentation of the \meta{title} and the metadata in \meta{keys} to the -% |\dcm@section@*@style| macro specified \meta{style}. -% \begin{macrocode} -%<*package> -\def\dcm@section#1#2#3{\def\dcm@sect@type{#1}\metasetkeys{dcm@sect}{#3}\sref@target% -\ifx\dcm@sect@short\@empty\csname #1\endcsname{#2}% -\else\csname #1\endcsname[\dcm@sect@short]{#2}\fi~% -\@ifundefined{sect@style} % -{\dcm@section@default@style{#1}}% -{\csname dcm@section@\sect@style @style\endcsname{#1}}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\dcm@section@default@style} -% This is the default style for sectional metadata -% \begin{macrocode} -%<*package> -\def\dcm@section@default@style#1{% -\ifx\dcm@sect@creators\@empty\else% -\textbf{\dcm@creators@heading}:% -\@for\@I:=\dcm@sect@creators\do{~\csname dcm@person@\@I @name\endcsname}\fi% -\ifx\dcm@sect@contributors\@empty\else% there are contributors -\dcm@contributors@connector% -\@for\@I:=\dcm@sect@contributors\do{~\csname dcm@person@\@I @name\endcsname}\\\fi} -% -% \end{macrocode} -% \end{macro} -% -% Armed with these, the rest is very simple -% -% \begin{macro}{\DCMchapter} -% \begin{macrocode} -%<*package> -\newcommand{\DCMchapter}[2][]% -{\dcm@section{chapter}{#2}{#1}\sref@label@id{\dcm@chapter@heading\ \thechapter}} -% -% \end{macrocode} -% For the {\latexml} bindings we have to be a bit more creative. We only open the -% |omgroup| element (and declare it to autoclose)\ednote{@DEYAN, we need to document more -% here; and we should also close the metadata element just to be more tidy.} -% \begin{macrocode} -%<*ltxml> -Tag('omdoc:omgroup', autoClose=>1); -DefConstructor('\DCMchapter OptionalKeyVals:omgroup {}',sub { - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:chapter',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -% -% \end{macrocode} -% \end{macro} -% \ednote{@DEYAN: I guess since they all do the same as {\texttt{DCMchapter}}, we may -% actually get away with \texttt{Let(DCMsection,DCMchapter);} here.} -% \begin{macro}{\DCMsection} -% \begin{macrocode} -%<*package> -\newcommand{\DCMsection}[2][]% -{\dcm@section{section}{#2}{#1}\sref@label@id{\dcm@section@heading\ \thesection}} -% -%<*ltxml> -DefConstructor('\DCMsection OptionalKeyVals:omgroup {}',sub{ - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:section',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMsubsection} -% \begin{macrocode} -%<*package> -\newcommand{\DCMsubsection}[2][]% -{\dcm@section{subsection}{#2}{#1}\sref@label@id{\dcm@subsection@heading\ \thesubsection}} -% -%<*ltxml> -DefConstructor('\DCMsubsection OptionalKeyVals:omgroup {}',sub{ - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:subsection',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMsubsubsection} -% \begin{macrocode} -%<*package> -\newcommand{\DCMsubsubsection}[2][]% -{\dcm@section{subsubsection}{#2}{#1}\sref@label@id{\dcm@subsubsection@heading\ \thesubsubsection}} -% -%<*ltxml> -DefConstructor('\DCMsubsubsection OptionalKeyVals:omgroup {}',sub{ - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:subsubsection',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\DCMparagraph} -% \begin{macrocode} -%<*package> -\newcommand{\DCMparagraph}[2][]% -{\dcm@section{paragraph}{#2}{#1}\sref@label@id{this \dcm@paragraph@heading}} -% -%<*ltxml> -DefConstructor('\DCMparagraph OptionalKeyVals:omgroup {}',sub{ - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:paragraph',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -% -% \end{macrocode} -% \end{macro} -% -% We have to make sure that the DCM sectioning and metadata commands have IDs, so that we doc not get -% duplicates. -% -% \begin{macrocode} -%<*ltxml> -Tag('omdoc:chapter',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:section',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:subsection',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:subsubsection',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:paragraph',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:subparagraph',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:description',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:date',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:creator',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:contributor',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:title',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:subject',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:publisher',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:type',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:identifier',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:language',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:rights',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -% -% \end{macrocode} -% -% \DCMsubsection{Dealing with ISO Dates} -% -% The first step is to build a macro for making ISO dates.\ednote{make better ltxml} -% -% \begin{macrocode} -%<*package> -\def\ISOtimestamp{\count1=\time\divide\count1 by 60 % hours -\count2=\count1\multiply\count2 by 60% minutes in \count1 hours -\count3=\time\advance\count3 by -\count2 % minutes -\the\year -\ifnum\month>9\else0\fi\the\month-\ifnum\day>9\else0\fi\the\day -T\ifnum\count1>9\else0\fi\the\count1:\ifnum\count3>9\else0\fi\the\count3:00Z} -% -%<*ltxml> -RawTeX('\def\ISOtimestamp{\count1=\time\divide\count1 by 60 % hours -\count2=\count1\multiply\count2 by 60% minutes in \count1 hours -\count3=\time\advance\count3 by -\count2 % minutes -\the\year -\the\month-\the\day T\the\count1:\the\count3:00Z}'); -% -% \end{macrocode} -% -%\DCMsubsection{Configuration} -% -% \begin{macrocode} -%<*package> -\def\dcm@abstract@heading{Abstract} -\def\dcm@creators@heading{Author(s)} -\def\dcm@contributors@connector{with contributions from} -\def\dcm@chapter@heading{Chapter} -\def\dcm@section@heading{Section} -\def\dcm@subsection@heading{Subsection} -\def\dcm@subsubsection@heading{Subsubsection} -\def\dcm@paragraph@heading{Paragraph} -% -% \end{macrocode} -% -% \DCMsubsection[id=sec:impl:ids]{Providing IDs for {\omdoc} Elements} -% -% To provide default identifiers, we tag all {\omdoc} elements that allow |xml:id| -% attributes by executing the |numberIt| procedure below. -% -% \begin{macrocode} -%<*ltxml> -Tag('dc:title',afterOpen=>\&numberIt,afterClose=>\&locateIt); -% -% \end{macrocode} -% -%\DCMsubsection{Finale} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput -% \iffalse -% LocalWords: GPL structuresharing STR LaTeX dcm dtx keyval sref CPERL url qw -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi - -% LocalWords: RequirePackage birthdate personaltitle academictitle workaddress -% LocalWords: privaddress worktel privtel workfax privfax worktelfax noDelim -% LocalWords: privtelfax getKeyValue valuelist ToString getValue affill STDERR -% LocalWords: ExportMetadata AssignValue DCMperson DefConstructor afterDigest -% LocalWords: getArg setValue FishOutMetadata keyvals foreach idlist tabline -% LocalWords: LookupValue insertElement atabline bitabline shorttitle nc args -% LocalWords: sharealike noderivativeworks DefMacro authorblock subsubsection -% LocalWords: contribs OptionalKeyVals omgroup omdoc srcref locator xml RawTeX -% LocalWords: openElement iffalse kohlhase Thu scsys sc sc latexml DCmetadata -% LocalWords: maketitle DCMtitle texttt fileversion DCMcreators miko jdoe impl -% LocalWords: DCMabstract setcounter tocdepth tableofcontents newpage dmt03 -% LocalWords: DCMsection ednote DCMsubsection exfig hline dcmblock Patashnik -% LocalWords: DescribeEnv DCMcontributors DCMshorttitle DCMshorttitle DCMdate -% LocalWords: DCMsubject DCMsubject DCMdescription DCMdescription DCMpublisher -% LocalWords: DCMpublisher DCMdate DCMtype DCMtype DCMidentifier DCMidentifier -% LocalWords: DCMsource DCMsource DCMlanguage DCMlanguage DCMrelation ctancite -% LocalWords: DCMrelation DCMrights DCMrights DCMlicense DCMlicense titlepage -% LocalWords: DCMlicensenotice DCMlicensenotice DCMcopyrightnotice titlepage -% LocalWords: DCMcopyrightnotice DCMcclicense DCMcclicense user.blockstyles -% LocalWords: DCMchapter DCMchatper DCMsubsubsection DCMsubsubsection ltxml -% LocalWords: user.conig makeatletter printbibliography expandafter -% LocalWords: xdef csname endcsname newcommand ifx ifundefined affs -% LocalWords: Semiverbatim whatsit newenvironment mtabline providecommand vfil -% LocalWords: DCMsubtitle cclicense defdcm impl.blockstyles newcounter vskip -% LocalWords: stepcounter tabularnewline theauthors lineskip textbf noindent -% LocalWords: omd omd srefaddidkey thechapter autoclose thesection ifnum ifnum -% LocalWords: thesubsection thesubsubsection DCMparagraph ISOtimestamp doctex diff --git a/Master/texmf-dist/source/latex/stex/hwexam/hwexam.dtx b/Master/texmf-dist/source/latex/stex/hwexam/hwexam.dtx deleted file mode 100644 index f7abb4011cc..00000000000 --- a/Master/texmf-dist/source/latex/stex/hwexam/hwexam.dtx +++ /dev/null @@ -1,566 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for marking up Assignments -% $URL: https://svn.kwarc.info/repos/stex/trunk/sty/hwexam/hwexam.dtx $ -% $Rev: 1671 $; last modified by $Author: kohlhase $ -% $Date: 2010-11-06 08:05:15 +0100 (Sat, 06 Nov 2010) $ -% Copyright (c) 2007 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{hwexam}[2010/06/25 v0.9b homework assignments and exams] -%\ProvidesClass{hwexam}[2010/06/25 v0.9b assignment and exam documents] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,float} -\usepackage{hwexam} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: hwexam.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/hwexam/hwexam.dtx $ -\usepackage{stex-logo} -\usepackage{../ctansvn} -\usepackage{hyperref} -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{hwexam.dtx}\end{document} -% -% \fi -%\iffalse\CheckSum{323}\fi -% -% \changes{v0.9}{2006/09/18}{First Version with Documentation} -% \changes{v0.9a}{2010/06/25}{more semantic headers for exams} -% \changes{v0.9b}{2010/09/20}{adding \texttt{assignment.cls}} -% \changes{v0.9c}{2010/09/20}{renaming from \texttt{assignment} to \texttt{hwexam} to -% avoid name clashes with existing \texttt{assignment.cls} on CTAN.} -% -% \GetFileInfo{hwexam.sty} -% -% \MakeShortVerb{\|} -%\def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\latexml{\scsys{LaTeXML}} -% -% \title{\texttt{hwexam.sty/cls}: An Infrastructure for formatting Assignments -% and Exams\thanks{Version {\fileversion} (last revised {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |hwexam| packge and class allows individual course assignment sheets and -% compond assignment documents using problem files marked up with the |problem| package. -% \end{abstract} -% \setcounter{tocdepth}{2}\tableofcontents\newpage -% -%\section{Introduction}\label{sec:intro} -% -% The |hwexam| package and class supplies an infrastructure that allows to format -% nice-looking assignment sheets by simply including problems from problem files marked up -% with the |problem| package~\cite{Kohlhase:problem:ctan}. It is designed to be -% compatible with |problems.sty|, and inherits some of the functionality. -% -% \section{The User Interface} -% -% \subsection{Package and Class Options}\label{sec:user:options} -% -% The |hwexam| package and class take the options |solutions|, |notes|, |hints|, |pts|, -% |min|, and |boxed| that are just passed on to the |problems| package (cf. its -% documentation for a description of the intended behavior). -% -% If the \DescribeMacro{showmeta}|showmeta| option is set, then the metadata keys are -% shown (see~\cite{Kohlhase:metakeys:ctan} for details and customization options). -% -% The |hwexam| class additionally accepts the options |report|, |book|, |chapter|, |part|, -% and |showignores|, of the |omdoc| package~\cite{Kohlhase:smomdl:ctan} on which it is -% based and passes them on to that. For the |extrefs| option -% see~\cite{Kohlhase:sref:ctan}. -% -% \subsection{Assignments} -% -% \DescribeEnv{assignment} This package supplies the |assignment| environment that groups -% problems into assignment sheets. It takes an optional KeyVal argument with the keys -% \DescribeMacro{number}|number| (for the assignment number; if none is given, 1 is -% assumed as the default or --- in multi-assignment documents --- the ordinal of the -% |assignment| environment), \DescribeMacro{title}|title| (for the assignment title; this -% is referenced in the title of the assignment sheet), \DescribeMacro{type}|type| (for the -% assignment type; e.g. ``quiz'', or ``homework''), \DescribeMacro{given}|given| (for the -% date the assignment was given), and \DescribeMacro{due}|due| (for the date the -% assignment is due). -% -% \subsection{Typesetting Exams} -% -% Furthermore, the |hwexam| package takes the option -% \DescribeMacro{multiple}|multiple| that allows to combine multiple assigment sheets into -% a compound document (the assignment sheets are treated as section, there is a table of -% contents, etc.). -% -% Finally, there is the option \DescribeMacro{test}|test| that modifies the behavior to -% facilitate formatting tests. Only in |test| mode, the macros |\testspace|, -% |\testnewpage|, and |\testemptypage| have an effect: they generate space for the -% students to solve the given problems. Thus they can be left in the {\LaTeX} source. -% -% \DescribeMacro{\testspace}|\testspace| takes an argument that expands to a dimension, -% and leaves vertical space accordingly. \DescribeMacro{\testnewpage}|\testnewpage| makes -% a new page in |test| mode, and \DescribeMacro{\testemptypage}|\testemptypage| generates -% an empty page with the cautionary message that this page was intentionally left empty. -% -% Finally, the \DescribeEnv{testheading}|\testheading| takes an optional keyword argument -% where the keys \DescribeMacro{duration}|duration| specifies a string that specifies the -% duration of the test, \DescribeMacro{min}|min| specifies the equivalent in number of -% minutes, and \DescribeMacro{reqpts}|reqpts| the points that are required for a perfect -% grade. -% \begin{exfig}[ht] -% \makeatletter -% \@problem{1.1}{4}{10} -% \@problem{2.1}{4}{8} -% \@problem{2.2}{6}{10} -% \@problem{2.3}{6}{10} -% \@problem{3.1}{4}{8} -% \@problem{3.2}{4}{8} -% \@problem{3.3}{2}{4} -% \makeatother -% \begin{verbatim} -% \title{320101 General Computer Science (Fall 2010)} -% \begin{testheading}[duration=one hour,min=60,reqpts=27] -% Good luck to all students! -% \end{testheading} -% \end{verbatim} -% \vspace*{-3ex}\hrule\vspace*{.5ex} formats to\vspace*{1ex} -% \hrule\par\noindent\vspace*{2ex} -% \title{320101 General Computer Science (Fall 2010)} -% \begin{testheading}[duration=one hour,min=60,reqpts=27] -% good luck -% \end{testheading} -% \caption{A generated test heading.}\label{fig:testheading} -% \end{exfig} -% -% \subsection{Including Assignments} -% -% The \DescribeMacro{\includeassignment}|\includeassignment| macro can be used to include -% an assignment from another file. It takes an optional KeyVal argument and a second -% argument which is a path to the file containing the problem (the macro assumes that -% there is only one |assignment| environment in the included file). The keys -% \DescribeMacro{number}|number|, \DescribeMacro{title}|title|, -% \DescribeMacro{type}|type|, \DescribeMacro{given}|given|, and \DescribeMacro{due}|due| -% are just as for the |assignment| environment and (if given) overwrite the ones specified -% in the |assignment| environment in the included file. -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography}\newpage -% \newpage -% -% \section{Implementation: The hwexam Class}\label{sec:impl:cls} -% -% The functionality is spread over the |hwexam| class and package. The class provides -% the |document| environment and pre-loads some convenience packages, whereas the package -% provides the concrete functionality. -% -% |hwexam.dtx| generates four files: |hwexam.cls| (all the code between -% {\textsf{$\langle$*cls$\rangle$}} and {\textsf{$\langle$/cls$\rangle$}}), |hwexam.sty| -% (between {\textsf{$\langle$*package$\rangle$}} and -% {\textsf{$\langle$/package$\rangle$}}) and their {\latexml} bindings (between -% {\textsf{$\langle$*ltxml.cls$\rangle$}} and {\textsf{$\langle$/ltxml.cls$\rangle$}} and -% {\textsf{$\langle$*ltxml.sty$\rangle$}} and {\textsf{$\langle$/ltxml.sty$\rangle$ -% respetively}}). We keep the corresponding code fragments together, since the -% documentation applies to both of them and to prevent them from getting out of sync. -% -% \subsection{Class Options}\label{sec:impl:cls:options} -% -% To initialize the |hwexam| class, we declare and process the necessary options by -% passing them to the respective packages and classes they come from. -% -% \begin{macrocode} -%<*cls> -\DeclareOption{test}{\PassOptionsToPackage{\CurrentOption}{hwexam}} -\DeclareOption{multiple}{\PassOptionsToPackage{\CurrentOption}{hwexam}} -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\DeclareOption{extrefs}{\PassOptionsToPackage{\CurrentOption}{sref}} -\DeclareOption{notes}{\PassOptionsToPackage{\CurrentOption}{problem}} -\DeclareOption{hints}{\PassOptionsToPackage{\CurrentOption}{problem}} -\DeclareOption{solutions}{\PassOptionsToPackage{\CurrentOption}{problem}} -\DeclareOption{pts}{\PassOptionsToPackage{\CurrentOption}{problem}} -\DeclareOption{min}{\PassOptionsToPackage{\CurrentOption}{problem}} -\DeclareOption{boxed}{\PassOptionsToPackage{\CurrentOption}{problem}} -\DeclareOption{extract}{\PassOptionsToPackage{\CurrentOption}{problem}} -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{omdoc}} -\ProcessOptions -% -%<*ltxml.cls> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use LaTeXML::Util::Pathname; -use Cwd qw(cwd abs_path); -DeclareOption('test',,sub {PassOptions('hwexam','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('multiple',sub {PassOptions('hwexam','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('showmeta',sub {PassOptions('metakeys','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('extrefs',sub {PassOptions('sref','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('notes',sub {PassOptions('problem','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('hints',sub {PassOptions('problem','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('solutions',sub {PassOptions('problem','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('pts',sub {PassOptions('problem','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('min',sub {PassOptions('problem','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('boxed',sub {PassOptions('problem','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('extract',sub {PassOptions('problem','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption(undef,sub {PassOptions('omdoc','cls',ToString(Digest(T_CS('\CurrentOption')))); }); -ProcessOptions(); -% -% \end{macrocode} -% -% We load |article.cls|, and the desired packages. For the {\latexml} bindings, we make -% sure the right packages are loaded. -% -% \begin{macrocode} -%<*cls> -\LoadClass{omdoc} -\RequirePackage{stex} -\RequirePackage{hwexam} -\RequirePackage{graphicx} -\RequirePackage{a4wide} -\RequirePackage{amssymb} -\RequirePackage{amstext} -\RequirePackage{amsmath} -% -%<*ltxml.cls> -LoadClass('omdoc'); -RequirePackage('stex'); -RequirePackage('hwexam'); -RequirePackage('graphicx'); -RequirePackage('amssymb'); -RequirePackage('amstext'); -RequirePackage('amsmath'); -% -% \end{macrocode} -% -% \section{Implementation: The hwexam Package} -% -% \subsection{Package Options} -% -% The first step is to declare (a few) package options that handle whether certain -% information is printed or not. Some come with their own conditionals that are set by the -% options, the rest is just passed on to the |problems| package. -% -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\iftest\testfalse -\newif\ifsolutions\solutionsfalse -\DeclareOption{test}{\testtrue\solutionsfalse} -\newif\ifmultiple\multiplefalse -\DeclareOption{multiple}{\multipletrue} -\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{problem}} -\ProcessOptions -% -% \end{macrocode} -% Then we make sure that the necessary packages are loaded (in the right versions). -% \begin{macrocode} -%<*package> -\RequirePackage{keyval}[1997/11/10] -\RequirePackage{problem} -% -% \end{macrocode} -% -% Here comes the equivalent header information for {\latexml}, we also initialize the -% package inclusions. Since {\latexml} does not handle options yet, we have nothing to -% do. -% \begin{macrocode} -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('problem'); -% -% \end{macrocode} -% -% Then we register the namespace of the requirements ontology -% \begin{macrocode} -%<*ltxml> -RegisterNamespace('assig'=>"http://omdoc.org/ontology/assignments#"); -RegisterDocumentNamespace('assig'=>"http://omdoc.org/ontology/assignments#"); -% -% \end{macrocode} -% -% \subsection{Assignments} -% -% We will prepare the keyval support for the |assignment| environment. -% -% \begin{macrocode} -%<*package> -\addmetakey{assig}{number} -\addmetakey*{assig}{title} -\addmetakey{assig}{type} -\addmetakey{assig}{given} -\addmetakey{assig}{due} -% \end{macrocode} -% -% The next three macros are intermediate functions that handle the case gracefully, where -% the respective token registers are undefined. -% -% The |\given@due| macro prints information about the given and due status of the -% assignment. Its arguments specify the brackets. -% -% \begin{macrocode} -\def\given@due#1#2{% -\ifx\assig@given\@empty\else\ifx\assig@due\@empty\else{#1}\fi\fi% -\ifx\assig@given\@empty\else{Given {\assig@given}}\fi% -\ifx\assig@given\@empty\else\ifx\assig@due\@empty\else{, }\fi\fi% -\ifx\assig@due\@empty\else{Due {\assig@due}}\fi% -\ifx\assig@given\@empty\else{\ifx\assig@due\@empty\else{#2}\fi}\fi} -% \end{macrocode} -% -% With them, we can define the central |assignment| environment. This has two forms -% (separated by |\ifmultiple|) in one we make a title block for an assignment sheet, and -% in the other we make a section heading and add it to the table of -% contents. -% -% \begin{macro}{assignment@titleblock} -% This macro prints the title block of a section. If the |multiple| package option is -% given we make a section heading out of this, and if not, a title block. Note that as -% |problem|s are numbered by section, we also set the section counter in the latter -% case. -% \begin{macrocode} -\ifmultiple -\def\assignment@titleblock{% -\@ifundefined{assig@number}{\stepcounter{section}}{\setcounter{section}{\assig@number}}% -\section*{\document@hwexamtype~\arabic{section}:~\assig@title\given@due{\\(})}% -\addcontentsline{toc}{section}{\document@hwexamtype~{\arabic{section}}:~\assig@title}% -\setcounter{problem}{0}} -\else -\def\assignment@titleblock{% -\setcounter{section}{\assig@number} -\begin{center}\bf -\Large\@title\\ -\document@hwexamtype~\assig@number:~\assig@title\strut\\ -\large{\given@due()} -\end{center}} -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{assignment@process@keys} -% this macro collects the keys from its arugment and corrects them from the outside. -% \begin{macrocode} -\def\assignment@process@keys#1{\metasetkeys{assig}{#1} -\ifx\inclassig@title\@empty\else\def\assig@title{\inclassig@title}\fi -\ifx\inclassig@type\@empty\else\def\assig@type{\inclassig@type}\fi -\ifx\inclassig@number\@empty\else\def\assig@number{\inclassig@number}\fi -\ifx\inclassig@due\@empty\else\def\assig@due{\inclassig@due}\fi -\ifx\inclassig@given\@empty\else\def\assig@given{\inclassig@given}\fi} -% \end{macrocode} -% for this to work we need to define the |\inclassig| macros in case no -% |\includeassignment| is ever called. -% \begin{macrocode} -\def\inclassig@title{} -\def\inclassig@type{} -\def\inclassig@number{} -\def\inclassig@due{} -\def\inclassig@given{} -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{assignment} -% \begin{macrocode} -\newenvironment{assignment}[1][]{\assignment@process@keys{#1}% -\assignment@titleblock}{} -% -% \end{macrocode} -% -% \begin{macrocode} -%<*ltxml> -DefEnvironment('{assignment} OptionalKeyVals:assig', - "" - . "" - . "" - . "Assignment ?&KeyVal(#1,'num')(&KeyVal(#1,'num').)()" - . "?&KeyVal(#1,'title')((&KeyVal(#1,'title')))" - . "" - . "?&KeyVal(#1,'given')(&KeyVal(#1,'given'))()" - . "?&KeyVal(#1,'due')(&KeyVal(#1,'due'))()" - . "?&KeyVal(#1,'pts')(&KeyVal(#1,'pts'))()" - . "" - . "#body" - ."\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macrocode} -%<*package> -\addmetakey[\assig@default@type]{document}{hwexamtype} -% -% \end{macrocode} -% -% \subsection{Including Assignments} -% -% The next command is essentially a glorified |\include| statement, it just sets some -% internal macros first that overwrite the local points, \ednote{these keys should be done -% with \texttt{\textbackslash addmetakey}} -% -% \begin{macrocode} -%<*package> -\addmetakey{inclassig}{number} -\addmetakey{inclassig}{title} -\addmetakey{inclassig}{type} -\addmetakey{inclassig}{given} -\addmetakey{inclassig}{due} -\newcommand{\includeassignment}[2][]{\metasetkeys{inclassig}{#1}\include{#2}} -\newcommand{\inputassignment}[2][]{\metasetkeys{inclassig}{#1}\input{#2}} -% -%<*ltxml> -DefMacro('\includeassignment [] {}','\input{#2}'); -DefMacro('\inputassignment [] {}','\input{#2}'); -% -% \end{macrocode} -% -% \subsection{Typesetting Exams} -% -% \begin{macrocode} -%<*package> -\addmetakey{quizheading}{tas} -\newcommand\quizheading[1]{\def\@tas{#1}% -\large\noindent NAME: \hspace{8cm} MAILBOX:\\[2ex]% -\ifx\@tas\@empty\else% -\noindent YOUR TA: \@for\@I:=\@tas\do{$\Box$ \@I\hspace*{1em}}\\[2ex]\fi} -% -% \end{macrocode} -% \begin{macrocode} -%<*package> -\addmetakey{testheading}{min} -\addmetakey{testheading}{duration} -\addmetakey{testheading}{reqpts} -\newenvironment{testheading}[1][]{\metasetkeys{testheading}{#1} -{\noindent\large{}Name: \hfill Matriculation Number:\hspace*{2cm}\strut\\[1ex] -\begin{center}\Large\textbf{\@title}\\[1ex]\large\@date\\[3ex]\end{center} -{\textbf{You have -\ifx\test@heading@duration\@empty\testheading@min minutes\else\testheading@duration\fi -(sharp) for the test}};\\ Write the solutions to the sheet.}\par\noindent - -\newcount\check@time\check@time=\testheading@min -\advance\check@time by -\theassignment@totalmin -The estimated time for solving this exam is {\theassignment@totalmin} minutes, -leaving you {\the\check@time} minutes for revising your exam. - -\newcount\bonus@pts\bonus@pts=\theassignment@totalpts -\advance\bonus@pts by -\testheading@reqpts -You can reach {\theassignment@totalpts} points if you solve all problems. You will only need -{\testheading@reqpts} points for a perfect score, i.e.\ {\the\bonus@pts} points are -bonus points. \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\par\correction@table \\[3ex] -\end{center}} -{\newpage} -% -%<*ltxml> -DefEnvironment('{testheading}OptionalKeyVals:omdoc',''); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*package> -\def\testspace#1{\iftest\vspace*{#1}\fi} -\def\testnewpage{\iftest\newpage\fi} -\def\testemptypage{\iftest\begin{center}This page was intentionally left - blank for extra space\end{center}\vfill\eject\else\fi} -% -%<*ltxml> -DefConstructor('\testspace{}',''); -DefConstructor('\testnewpage',''); -DefConstructor('\testemptypage',''); -% -% \end{macrocode} -% -% \begin{macro}{\@problem} -% This macro acts on a problem's record in the |*.aux| file. Here we redefine it to -% generate the correction table. -% \begin{macrocode} -%<*package> -\def\@problem#1#2#3{\stepcounter{assignment@probs} -\def\@test{#2}\ifx\@test\@empty\else\addtocounter{assignment@totalpts}{#2}\fi -\def\@test{#3}\ifx\@test\@empty\else\addtocounter{assignment@totalmin}{#3}\fi -\xdef\correction@probs{\correction@probs & #1}% -\xdef\correction@pts{\correction@pts & #2} -\xdef\correction@reached{\correction@reached &}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\correction@table} -% This macro generates the correction table -% \begin{macrocode} -%<*package> -\newcounter{assignment@probs} -\newcounter{assignment@totalpts} -\newcounter{assignment@totalmin} -\def\correction@probs{prob.}% -\def\correction@pts{total}% -\def\correction@reached{reached}% -\stepcounter{assignment@probs} -\def\correction@table{\begin{tabular}{|l|*{\theassignment@probs}{c|}|p{3cm}|}\hline% -&\multicolumn{\theassignment@probs}{c||}% -{\footnotesize To be used for grading, do not write here} &\\\hline -\correction@probs & Sum & grade\\\hline -\correction@pts &\theassignment@totalpts & \strut\hspace{3cm}\strut\\\hline -\correction@reached & & \\[.7cm]\hline -\end{tabular}} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Leftovers} -% -% at some point, we may want to reactivate the logos font, then we use -% \begin{verbatim} -% here we define the logos that characterize the assignment -% \font\bierfont=../assignments/bierglas -% \font\denkerfont=../assignments/denker -% \font\uhrfont=../assignments/uhr -% \font\warnschildfont=../assignments/achtung -% -% \def\bierglas{{\bierfont\char65}} -% \def\denker{{\denkerfont\char65}} -% \def\uhr{{\uhrfont\char65}} -% \def\warnschild{{\warnschildfont\char 65}} -% \def\hardA{\warnschild} -% \def\longA{\uhr} -% \def\thinkA{\denker} -% \def\discussA{\bierglas} -% \end{verbatim} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput -% \iffalse -% LocalWords: GPL structuresharing STR -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi diff --git a/Master/texmf-dist/source/latex/stex/metakeys/metakeys.dtx b/Master/texmf-dist/source/latex/stex/metakeys/metakeys.dtx deleted file mode 100644 index c8ce7762f59..00000000000 --- a/Master/texmf-dist/source/latex/stex/metakeys/metakeys.dtx +++ /dev/null @@ -1,372 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for marking up Metadata in LaTeX documents -% $URL: https://svn.kwarc.info/repos/stex/trunk/sty/metakeys/metakeys.dtx $ -% $Rev: 1671 $; last modified by $Author: kohlhase $ -% $Date: 2010-11-06 08:05:15 +0100 (Sat, 06 Nov 2010) $ -% Copyright (c) 2009 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% \fi -% -% \iffalse -%<*package> -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{metakeys}[2010/09/02 v0.9 Framework for Metadata Keys] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{stex-logo,url,array,float} -\usepackage[show]{ed} -\usepackage{../ctansvn} -\usepackage[eso-foot,today]{svninfo} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\svnInfo $Id: metakeys.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/metakeys/metakeys.dtx $ -\usepackage{hyperref} -%\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\usepackage[showmeta]{metakeys} -\begin{document}\DocInput{metakeys.dtx}\end{document} -% -% \fi -% -%\iffalse\CheckSum{58}\fi -% -% \changes{v0.1}{2009/12/14}{First version} -% \changes{v0.8}{2010/06/18}{This is almost done} -% \changes{v0.9}{2010/09/02}{make sure that showkeys is always initialized} -% -% \GetFileInfo{metakeys.sty} -% -% \MakeShortVerb{\|} -% \def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\latexml{\scsys{LaTeXML}} -% \def\omdoc{OMDoc} -% \def\omdocv#1{\omdoc{#1}} -% -% \title{{\texttt{metakeys.sty}}: A generic framework for extensible Metadata in {\LaTeX}\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% \begin{abstract} -% The |metakeys| package is part of the {\sTeX} collection, a version of {\TeX/\LaTeX} that -% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document -% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical -% knowledge management (MKM). -% -% This package supplies the infrastructure for extending {\sTeX} macros with {\omdoc} -% metadata. This package is mainly intended for authors of {\sTeX} extension packages. -% \end{abstract} -% -% \setcounter{tocdepth}{2}\tableofcontents\newpage -% -% \section{The User Interface}\label{sec:user} -% -% The |metakeys| package supplies the infrastructure for extending {\sTeX} macros with -% ontology-based metadata. The |metakeys| infrastructure is intended to support the new -% metadata infrastructure for the {\omdoc} format~\cite{Kohlhase:omdoc1.2} introduced in -% {\omdocv{1.3}}~\cite{Kohlhase:OMDoc1.3}. -% -% \subsection{Package Options}\label{sec:user:options} -% -% The |metakeys| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If -% this is set, then the metadata keys defined by the |\addmetakey| are shown -% (see~\ref{sec:user:showmeta}) -% -% \subsection{Adding Metadata Keys to Commands}\label{sec:user:keys} -% -% If \meta{group} is the name of a metadata key-group \meta{key} is a metadata keyword -% name, then \DescribeMacro{\addmetakey} -% \begin{quote} -% |\addmetakey[|\meta{default}|]{|\meta{group}|}{|\meta{key}|}| -% \end{quote} -% registers \meta{key} in the metadata group \meta{group}, with an optional value -% \meta{default} for \meta{key}. The keys registered for a metadata group can be used for -% defining macros with a key/value arguments via the -% \DescribeMacro{\metasetkeys}|\metasetkeys| macro, see for instance the the definition in -% Figure~\ref{fig:foo}. With these definitions in a used package\footnote{The \texttt\@ -% character is only allowed in packages.} |\foo[type=bar,id=f4711]| is formatted to -% \begin{quote} -% \addmetakey{foo}{id}\addmetakey{foo}{type}\makeatletter -% \newcommand\foo[1][]{\metasetkeys{foo}{#1} I have seen a \emph{foo} of type \texttt{\foo@type} -% with identifier \texttt{\foo@id}!}\makeatother -% \foo[type=bar,id=f4711] -% \end{quote} -% -% \begin{exfig}[ht] -% \begin{verbatim} -% \addmetakey{foo}{id} -% \addmetakey{foo}{type} -% \addmetakey[yes]{foo}{visible} -% \def\@yes{yes} -% \newcommand\foo[1][]{\metasetkeys{foo}{#1} -% \ifx\foo@visible\@yes % testing for visibility -% I have seen a \emph{foo} of type \texttt{\foo@type} with identifier -% \texttt\foo@id! -% \fi} -% \end{verbatim} -% \vspace*{-2em} -% \caption{Defining a macro with metadata} -% \label{fig:foo} -% \end{exfig} -% -% \subsection{Showing Metadata Keys/Values}\label{sec:user:showmeta} -% -% If the |showmeta| package option is set, the |metakeys| package sets an internal switch that -% shows the values of all keys specified with the |\addmetakey| macro. The default behavior -% is to write the key/value pairs into the margin as \meta{key}|:|\meta{value}. Package -% designers can customize this behavior by redefining the |\metakeys@show@key| and -% |\metakeys@show@keys| macro. -% -% \DescribeMacro{\metakeys@show@key}|\metakeys@show@key{|\meta{key}|}{|\meta{value}|}| shows the a -% single key value pair, and -% \DescribeMacro{\metakeys@show@keys}|\metakeys@show@keys{|\meta{group}|}{|\meta{keys}|}| shows the -% a list of keys metadata, by default we disregard the \meta{group} and show \meta{keys} -% in a marginpar. -% -% For keys that should not be shown in this manner, the |\addmetakey| macro has a variant -% \DescribeMacro{\addmetakey*}|\addmetakey*|. Its behavior is exactly the same, only that -% it keeps the key from being shown by the |showmeta| option. -% -% Note that setting the |showmeta| option will enable metadata presentation on the whole -% document. But sometimes we want to disable that, e.g. inside figures, where |\marginpar| -% is not allowed. Therefore the |metakeys| package provides the -% \DescribeMacro{\hidemetakeys}|\hidemetakeys| macro that reverses this. The -% \DescribeMacro{\showmetakeys}|\showmetakeys| macro re-enables metadata presentation. -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintChanges\printbibliography} -% -% \section{The Implementation}\label{sec:impl} -% -% The |metakeys| package generates two files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and -% $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, since -% the documentation applies to both of them and to prevent them from getting out of sync. -% -% \subsection{Package Options}\label{sec:impl:options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false). First we have the general options -% \begin{macrocode} -%<*package> -\newif\ifmetakeys@showmeta\metakeys@showmetafalse -\DeclareOption{showmeta}{\metakeys@showmetatrue} -% \end{macrocode} -% Finally, we need to declare the end of the option declaration section to {\LaTeX}. -% \begin{macrocode} -\ProcessOptions -% \end{macrocode} -% -% We build on the |keyval| package which we first need to load. -% \begin{macrocode} -\RequirePackage{keyval}[1997/11/10] -% -% \end{macrocode} -% -% \subsection{Adding Metadata Keys}\label{sec:impl:keys} -% -% \begin{macro}{\addmetakey} -% The |\addmetakey| macro looks at the next character and invokes helper macros accordingly. -% \begin{macrocode} -%<*package> -\newcommand\addmetakey{\@ifstar\addmetakey@star\addmetakey@nostar} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\addmetakey@star} -% |\addmetakey@star| takes care of the starred form of |\addmetakey|. An invocation of -% |\addmetakey@star{|\meta{default}|}{|\meta{group}|}{|\meta{key}|}| macro first extends the -% |\metakeys@clear@|\meta{group}|@keys| macro then defines the key \meta{key} with the -% |\define@key| macro from the |keyval| package. This stores the key value given in the -% local macro |\|\meta{group}|@|\meta{key}. -% \begin{macrocode} -%<*package> -\newcommand\addmetakey@star[3][]{\metakeys@ext@clear@keys{#2}{#3}{#1}% -\metakeys@initialize@showkeys{#2}% -\define@key{#2}{#3}[#1]{\expandafter\gdef\csname #2@#3\endcsname{##1}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\addmetakey@nostar} -% |\addmetakey@nostar| takes care of the starred form of |\addmetakey| by first extending the -% |\metakeys@|\meta{group}|@showkeys| macro which contains those keys that should be -% shown and then calling |\addmetakey@star|. -% \begin{macrocode} -\newcommand\addmetakey@nostar[3][]{\metakeys@ext@showkeys{#2}{#3}\addmetakey@star[#1]{#2}{#3}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\metasetkeys} -% The |\metasetkeys{|\meta{group}|}| clears/presets the key of \meta{group} via -% |\clear@|\meta{group}|@clearkeys|, (if the |showmeta| option is set) shows them, and -% then sets the keys via |keyval|s |\setkeys| command. -% \begin{macrocode} -%<*package> -\newcommand\metasetkeys[2]{\@nameuse{clear@#1@keys}\setkeys{#1}{#2}% -\ifmetakeys@showmeta% -\edef\@@keys{\@nameuse{#1@showkeys}}% -\metakeys@show@keys{#1}{\@for\@I:=\@@keys\do{\metakeys@show@keyval{#1}{\@I}}}% -\fi} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\metakeys@ext@clear@keys} -% |\metakeys@ext@clear@keys{|\meta{group}|}{|\meta{key}|}{|\meta{default}|}| extends (or -% sets up if this is the first |\addmetakey| for \meta{group}) the -% |\clear@|\meta{group}|@keys| macro to set the default value \meta{default} for -% \meta{key}. The |\clear@|\meta{group}|@keys| macro is used in the generic -% |\metasetkeys| macro below. The variant |\@metakeys@ext@clear@keys| is provided for -% use in the |sref| package. -% \begin{macrocode} -%<*package> -\newcommand\metakeys@ext@clear@keys[3]{\@metakeys@ext@clear@keys{#1}{#1@#2}{#3}} -\newcommand\@metakeys@ext@clear@keys[3]{\@ifundefined{clear@#1@keys}% -{\expandafter\def\csname clear@#1@keys\endcsname% -{\expandafter\gdef\csname #2\endcsname{#3}}}% -{\expandafter\g@addto@macro\csname clear@#1@keys\endcsname% -{\expandafter\gdef\csname #2\endcsname{#3}}}} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Showing Metadata Keys/Values}\label{sec:impl:showmeta} -% -% \begin{macro}{\metakeys@initialize@showkeys} -% |\metakeys@initialize@showkeys{|\meta{group}|}| sets up the |\|\meta{group}|@showkeys| -% macro which is is used to store the keys to be shown of the metadata in in the generic -% |\setmetakeys| macro below. -% \begin{macrocode} -%<*package> -\newcommand\metakeys@initialize@showkeys[1]% -{\@ifundefined{#1@showkeys}{\expandafter\def\csname #1@showkeys\endcsname{}}{}}% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\metakeys@ext@showkeys} -% |\metakeys@ext@showkeys{|\meta{group}|}{|\meta{key}|}| extends (or sets up) the -% |\|\meta{group}|@showkeys| macro which is is used to store the keys to be shown of the -% metadata in in the generic |\setmetakeys| macro below. -% \begin{macrocode} -\newcommand\metakeys@ext@showkeys[2]{\@ifundefined{#1@showkeys}% -{\expandafter\def\csname #1@showkeys\endcsname{#2}}% -{\expandafter\edef\csname #1@showkeys\endcsname{\csname #1@showkeys\endcsname,#2}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\metakeys@show@key} -% |\metakeys@show@key{|\meta{key}|}{|\meta{value}|}| shows the a single key value pair, as a -% default we just write \meta{key}|:|\meta{value}. -% \begin{macrocode} -\newcommand\@metakeys@show@key[2]{\metakeys@show@key{#2}{#1}} -\newcommand\metakeys@show@key[2]{\edef\@test{#2}\ifx\@test\@empty\else #1:#2\quad\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\metakeys@show@keys} -% |\metakeys@show@keys{|\meta{group}|}{|\meta{keys}|}| shows the metadata, by default we -% disregard the \meta{group} and show \meta{keys} in a marginpar. -% \begin{macrocode} -\newcommand\metakeys@show@keys[2]{\marginpar{{\scriptsize #2}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\metakeys@show@keyval} -% |\metakeys@show@keyval{|\meta{group}|}|{|\meta{key}|} shows the key/value pair of a given key \meta{key}. -% \begin{macrocode} -\newcommand\metakeys@show@keyval[2]{\expandafter\@metakeys@show@key\csname #1@#2\endcsname{#2}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\showmetakeys} -% \begin{macrocode} -%\newcommand\showmetakeys{\metakeys@showmetatrue} -%DefConstructor('\showmetakeys',''); -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\hidemetakeys} -% \begin{macrocode} -%\newcommand\hidemetakeys{\metakeys@showmetafalse} -%DefConstructor('\hidemetakeys',''); -% \end{macrocode} -% \end{macro} -% -% \subsection{Using better defaults than empty} -% -% \begin{macro}{\addmetakeynew} -% |\addmetakeynew| is an experimental version of |\addmetakey| which gives -% |\omd@unspecified| as an optional argument, so that it is used as the default value -% here and then test for it in |\omfidus|. But unfortunately, this does not work yet. -% \begin{macrocode} -%<*package> -\newcommand\addmetakeynew[3][]{\metakeys@ext@clear@keys{#2}{#3}{#1}% -\define@key{#2}{#3}{\expandafter\gdef\csname #2@#3\endcsname{##1}}} -% \end{macrocode} -% \end{macro} -% -% -% \begin{macro}{\metakeys@unspecified} -% Ain internal macro for unspecified values. It is used to initialize keys.\ednote{MK: -% we could probably embed an package error or warning in here} -% \begin{macrocode} -\newcommand\metakeys@unspecified{an metakeys-defined key left unspecified} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\metakeysifus} -% This just tests for equality of the first arg with |\metakeys@unspecified| -% \begin{macrocode} -\newcommand\metakeysifus[4]{\message{testing #1@#2=\csname#1@#2\endcsname}% -\expandafter\ifx\csname #1@#2\endcsname\metakeys@unspecified{#3}\else{#4}\fi} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Finale} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput -% \iffalse -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi - - -% LocalWords: iffalse kohlhase Thu metakeys metakeys.dtx scsys sc sc latexml omdoc foo -% LocalWords: omdocv texttt fileversion maketitle setcounter tocdepth newpage -% LocalWords: tableofcontents ednote showmeta -% LocalWords: makeatletter newcommand emph makeatother exfig vspace impl ltxml -% LocalWords: printbibliography keyval clearkeys expandafter gdef csname ifx -% LocalWords: endcsname setkeys ifundefined omfidus metakeysifus addmetakey -% LocalWords: doctex metasetkeys metasetkeys marginpar hidemetakeys textsf omd -% LocalWords: hidemetakeys showmetakeys showmetakeys langle textsf langle -% LocalWords: newif ifmetakeys showmetafalse showmetatrue ifstar showkeys -% LocalWords: nameuse setmetakeys addmetakeynew diff --git a/Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx b/Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx deleted file mode 100644 index e5aad153e3b..00000000000 --- a/Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx +++ /dev/null @@ -1,554 +0,0 @@ -% \iffalse meta-comment -% A LaTeX Class for Jacobs University Slides -% Copyright (c) 2007 Michael Kohlhase, all rights reserved -% this file is released under the -% Gnu Library Public Licences (LGPL) -% -% The development version of this file can be found at -% https://svn.kwarc.info/repos/kwarc/projects/stex/sty/mikoslides.dtx -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesClass{mikoslides}[2010/06/25 v0.9 Jacobs slides] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,float} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{mikoslides.dtx}\end{document} -% -% \fi -% -% \iffalse\CheckSum{317}\fi -% -% \changes{v0.1}{2005/12/06}{Initial Version} -% \changes{v0.2}{2006/01/11}{course notes back on seminar} -% \changes{v0.3}{2007/05/16}{changing to jacobs logo} -% \changes{v0.4}{2007/10/16}{re-basing the whole thing on beamer} -% \changes{v0.4}{2008/09/06}{moving line-end-comment to \texttt{omdoc.dtx}} -% \changes{v0.5}{2009/06/17}{eliminating mytwocolumns, this is better done by \texttt{beamer.cls}} -% \changes{v0.9}{2010/06/18}{this is almost done} -% -% \GetFileInfo{mikoslides.cls} -% \MakeShortVerb{\|} -% -% \def\twin#1#2{\index{#1!#2}\index{#2!#1}} -% \def\twintoo#1#2{{#1 #2}\twin{#1}{#2}} -% \def\atwin#1#2#3{\index{#1!#2!#3}\index{#3!#2 (#1)}} -% \def\atwintoo#1#2#3{{#1 #2 #3}\atwin{#1}{#2}{#3}} -% -%\def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\stex{\hbox{\raisebox{-.5ex}S\kern-.5ex\TeX}} -% \def\sTeX{\stex} -% \def\cnxml{\scshape{CNXml}} -% \def\connexions{\scshape{Connexions}} -% \def\element#1{{\ttfamily{#1}}} -% \def\snippet#1{{\ttfamily{#1}}} -% \def\cnxlatex{CNX\LaTeX} -% \def\mathml{{\scshape{MathML}}} -% \def\latexml{\hbox{{\LaTeX}ML}} -% \def\omdoc{OMDoc} -% \def\activemath{{\scshape{ActiveMath}}} -% -% \title{Slides and Course Notes for Jacobs University\thanks{Version {\fileversion} -% (last revised {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% We present a document class from which we can generate both course slides and course -% notes in a transparent way. Furthermore, we present a set of {\latexml} bindings for -% these, so that we can also generate {\omdoc}-based course materials, e.g. for -% inclusion in the {\activemath} system. -% \end{abstract} -% \tableofcontents\newpage -%\section{Introduction} -% This Document class is derived from |beamer.cls|, specializes it with Jacobs stuff and -% adds a notes version that is more suited to printing than the one supplied by -% |beamer.cls|. -% -%\section{The User Interface}\label{sec:user} -% -% \subsection{Package Options}\label{sec:user:options} -% -% The |mikoslides| class takes a single option: \DescribeMacro{showmeta}|showmeta|. If -% this is set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for details -% and customization options).\ednote{document the functionality} -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography} -% -%\section{The Implementation}\label{sec:impl} -% -% The |mikoslides| package generates two files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and -% $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -%\subsection{Initialization and Class Options}\label{sec:impl:init} -% -% For the {\latexml} bindings, we make sure the right perl packages are loaded. -% -% \begin{macrocode} -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -% -% \end{macrocode} -% -% For {\LaTeX} we define some Package Options and switches for the |mikoslides| class and activate -% them by passing them on to |beamer.cls| the appropriate packages. -% -% \begin{macrocode} -%<*cls> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\ifnotes\notesfalse -\newif\ifproblems\problemstrue -\DeclareOption{notes}{\notestrue} -\DeclareOption{slides}{\notesfalse} -\DeclareOption{noproblems}{\problemsfalse} -\ifnotes\else\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}}\fi -\ProcessOptions -% -%<*ltxml> -RawTeX('\newif\ifnotes\notesfalse'); -RawTeX('\newif\ifproblems\problemsfalse'); -% -% \end{macrocode} -% -% Depending on the options, we either load the |article|-based |omdoc| or the |beamer| class. In the first -% case, we also have to make the |beamer|-specific things available to |article| via the -% |beamerarticle| package. We use options to avoid loading theorem-like environments, -% since we want to use our own from the $\sTeX$ packages. -% \begin{macrocode} -%<*cls> -\ifnotes -\LoadClass{omdoc} -\RequirePackage{a4wide} -\RequirePackage{marginnote} -\RequirePackage[notheorems,noamsthm]{beamerarticle} -\else -\LoadClass[notheorems,noamsthm,10pt]{beamer} -\newcounter{Item} -\newcounter{paragraph} -\newcounter{subparagraph} -\newcounter{Hfootnote} -\usetheme{Jacobs} -\fi -% -%<*ltxml> -LoadClass('omdoc'); -DefConstructor('\usetheme{}',''); -% -% \end{macrocode} -% -% now, we load the remaining packages for both versions. -% -% \begin{macrocode} -%<*cls> -\RequirePackage{stex} -\RequirePackage{latexml} -\RequirePackage{amssymb} -\RequirePackage{tikz} -\usepgflibrary{shapes}\usetikzlibrary{arrows} -\RequirePackage{url} -\RequirePackage{amsmath} -\RequirePackage{comment} -% -%<*ltxml> -RequirePackage('stex'); -RequirePackage('latexml'); -RequirePackage('amssymb'); -RequirePackage('graphicx'); -RequirePackage('tikz'); -RequirePackage('amsmath'); -% -% \end{macrocode} -% \begin{oldpart}{we do not seem to load this any more, what to do -% there?}% The |etex.sty| package is needed in the {\LaTeX}, since it makes the extended the number -% of internal registers of the |etex| program available for processing. These tend to run -% out with {\sTeX} otherwise. -% \end{oldpart} -% -% \subsection{Notes and Slides}\label{sec:impl:noteslides} -% -% We define the sizes of slides in the notes. Somehow, we cannot get by with the same -% here. -% -% \begin{macrocode} -%<*cls> -\newcounter{slide} -\newlength{\slidewidth}\setlength{\slidewidth}{13.5cm} -\newlength{\slideheight}\setlength{\slideheight}{9cm} -% -%<*ltxml> -DefRegister('\slidewidth' => Dimension('13.5cm')); -DefRegister('\slideheight' => Dimension('9cm')); -% -% \end{macrocode} -% -% For course notes, we define the |note| environment to be a no-operation otherwise we declare the |note| environment as -% a comment via the |comment| package. -% -% \begin{environment}{note} -% \begin{macrocode} -%<*cls> -\ifnotes\renewenvironment{note}{}{}\else\excludecomment{note}\fi -% -%<*ltxml> -DefEnvironment('{note}','#body'); -% -% \end{macrocode} -% \end{environment} -% -% -% the next step is to set up the slide boxes in |article| mode. We set up sizes and -% provide a box register for the frames and a counter for the slides. -% -% \begin{macrocode} -%<*cls> -\ifnotes -\newlength{\slideframewidth}\setlength{\slideframewidth}{2pt} -\newsavebox{\myframebox} -% -% \end{macrocode} -% -% \begin{environment}{frame} -% For the |frame| environment we construct a |lrbox| in the |\myframebox| register that -% we can later put into an |\fbox| so that it looks like a slide. Furthermore, we -% redefine the |itenize| environment so that it looks more like the one in |beamer| with -% |Jacobs| theme. -% \begin{macrocode} -%<*cls> -\renewenvironment{frame}[1][]% -{\stepcounter{slide} -\def\itemize@level{outer} -\def\itemize@outer{outer} -\def\itemize@inner{inner} -\renewcommand\metakeys@show@keys[2]{\marginnote{{\scriptsize ##2}}} -\renewenvironment{itemize} -{\ifx\itemize@level\itemize@outer\def\itemize@label{$\rhd$}\fi - \ifx\itemize@level\itemize@inner\def\itemize@label{$\scriptstyle\rhd$}\fi - \begin{list} - {\itemize@label} - {\setlength{\labelsep}{.3em}\setlength{\labelwidth}{.5em}\setlength{\leftmargin}{1.5em}} - \edef\itemize@level{\itemize@inner}} -{\end{list}} - \noindent\hfill\begin{lrbox}{\myframebox} - \begin{minipage}{\slidewidth}\sf}% - {\miko@slidelabel\end{minipage}\end{lrbox}% - \begin{center}\fbox{\usebox\myframebox}\end{center}\hfill} -% -%<*ltxml> -DefEnvironment('{frame}[]', - "" - . "#body\n" - ."\n\n", - afterDigestBegin=>sub { - $_[1]->setProperty(theory=>LookupValue('current_module')); }); -%#$ -% \end{macrocode} -% \end{environment} -% -% the next step is to set up the slide boxes in |article| mode. -% -% \begin{macrocode} -%<*cls> -\renewcommand{\frametitle}[1]{{\Large\bf\sf\color{blue}{#1}}} -\fi -\makeindex -% -%<*ltxml> -DefConstructor('\frametitle{}', - "\n#1"); -% -% \end{macrocode} -% -% We start by giving the {\latexml} binding for the |frame| environment from the |beamer| -% class. The |note| environment is used to blend out text in the |slides| mode. It does -% not have a counterpart in OMDoc. -% -% \begin{macrocode} -%<*cls> -\ifproblems\newenvironment{problems}{}{}\else\excludecomment{problems}\fi -% -%<*ltxml> -DefEnvironment('{problems}','#body'); -% -% \end{macrocode} -%\ednote{subtitle is difficult to model in DC metadata. I guess that we want to collect -%the subtitle into dc:title} -% -% \subsection{Header and Footer Lines}\label{sec:impl:headfootlines} -% -% Now, we set up the infrastructure for the footer line of the slides, we use boxes for -% the logos, so that they are only loaded once, that considerably speeds up processing. -% \begin{macrocode} -%<*cls> -\newlength{\slidelogoheight} -\ifnotes\setlength{\slidelogoheight}{.4cm}\else\setlength{\slidelogoheight}{1cm}\fi -\newsavebox{\slidelogo}\sbox{\slidelogo}{\includegraphics[height=\slidelogoheight]{jacobs-logo}} -% \end{macrocode} -% -% Now, we set up the copyright and licensing, the copyright remains with the author, but -% we use the Creative Commons Attribuition-ShareAlike license to strengthen den public -% domain. Here the problem is that we want a hyperref on the CC logo, if hyperref is -% loaded, and otherwise not. As hyperref is always loaded, we have to find out at the -% beginning of the document whether it is, set up a switch, and later in the footer line -% decide what to do. -% -% \begin{macrocode} -\def\source{Michael Kohlhase}% customize locally -\def\copyrightnotice{\footnotesize\copyright:\hspace{.3ex}{\source}} -\newsavebox{\cclogo}\sbox{\cclogo}{\includegraphics[height=\slidelogoheight]{cc_somerights}} -\newif\ifcchref\cchreffalse -\AtBeginDocument{\@ifpackageloaded{hyperref}{\cchreftrue}{\cchreffalse}} -\def\licensing{\ifcchref\href{http://creativecommons.org/licenses/by-sa/2.5/}{\usebox{\cclogo}}\else{\usebox{\cclogo}}\fi} -% \end{macrocode} -% -% Now, we set up the slide label for the |article| mode\ednote{see that we can use the -% themes for the slides some day. This is all fake.} -% -% \begin{macro}{\slidelabel} -% \begin{macrocode} -\newcommand{\miko@slidelabel}% -{\vbox to \slidelogoheight{\vss\hbox to \slidewidth% -{\licensing\hfill\copyrightnotice\hfill\arabic{slide}\hfill\usebox{\slidelogo}}}} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Colors and Highlighting}\label{sec:impl:highlighting} -% -% Now, we set up an infrastructure for highlighting phrases in slides. Note that we use -% content-oriented macros for highlighting rather than directly using color markup. -% The first thing to to is to adapt the green so that it is dark enough for most beamers -% \begin{macrocode} -%<*cls> -\AtBeginDocument{\definecolor{green}{rgb}{0,.5,0}\definecolor{purple}{cmyk}{.3,1,0,.17}} -% \end{macrocode} -% -% We customize the |\defemph|, |\notemph|, and |\stDMemph| macros with colors for the use -% in the |statements| package. Furthermore we customize the |\@@lec| macro for the -% appearance of line end comments in |\lec|. -% -% \begin{macrocode} -% \def\STpresent#1{\textcolor{blue}{#1}} -\def\defemph#1{{\textcolor{magenta}{#1}}} -\def\notemph#1{{\textcolor{magenta}{#1}}} -\def\stDMemph#1{{\textcolor{blue}{#1}}} -\def\@@lec#1{(\textcolor{green}{#1})} -% -%<*ltxml> -#DefMacro('\defemph{}','{\textcolor{magenta}{#1}}'); -#DefMacro('\notemph{}','{\textcolor{magenta}{#1}}'); -% -% \end{macrocode} -% -% I like to use the dangerous bend symbol for warnings, so we provide it here. -% \begin{macrocode} -%<*cls> -\def\textwarning{\raisebox{-.05cm}{\includegraphics[width=1.2em]{dangerous-bend}}\xspace} -% -%<*ltxml> -DefMacro('\textwarning',""); -% -% \end{macrocode} -% -% \subsection{Front Matter, Titles, etc} -% -% We need to redefine the frontmatter macros inherited from the |beamer| class, since -% there they take an optional argument. -% \begin{macrocode} -%<*ltxml> -DefMacro('\title[]{}', '\@add@frontmatter{ltx:title}{#1}'); -DefMacro('\date[]{}', '\@add@frontmatter{ltx:date}[role=creation]{#1}'); -DefMacro('\author[]{}', sub { andSplit(T_CS('\@author'),$_[1]); });#$ -% \end{macrocode} -% -% -% Now, we specialize the slide environment that we have implemented above or inherited -% from |seminar.cls| for some abbreviations, e.g. separator slides and title slides. -% \begin{macrocode} -%<*cls> -\newcommand\titleframe{\begin{frame}\titlepage\end{frame}} -\newenvironment{titleframewith}{\begin{frame}\titlepage}{\end{frame}} -\newenvironment{ttitle}{\begin{center}\LARGE\begin{tabular}{|c|}\hline}% - {\\\hline\end{tabular}\end{center}\vspace{1ex minus 1ex}} -\newenvironment{ttitlejoint}[1]% -{\newbox\boxwith\setbox\boxwith\hbox{\begin{tabular}{c}{\em joint work with}\\#1\end{tabular}}% -\begin{center}\LARGE\begin{tabular}{c}\color{red}}% -{\\\box\boxwith\end{tabular}\end{center}% -\vspace{1ex minus 1ex}} -% -%<*ltxml> -DefConstructor('\titleframe',"titleframe elided here"); -DefEnvironment('{titleframewith}', - "begin elided titleframe" - . "#body" - ."end elided titleframe"); -DefEnvironment('{titleslide}',""); -DefEnvironment('{titleslide}',"#body"); -DefEnvironment('{ttitle}', "\n#body"); -% -% \end{macrocode} -% -% \begin{macrocode} -% Must be first command on slide to make positioning work. -%<*cls> -\newcommand{\putgraphicsat}[3]{% - \begin{picture}(0,0)\put(#1){\includegraphics[#2]{#3}}\end{picture}} -\newcommand{\putat}[2]{\begin{picture}(0,0)\put(#1){#2}\end{picture}} -% -%<*ltxml> -% -% \end{macrocode} -% -% \subsection{Miscellaneous} -% -% Some shortcuts that use math symbols but are not mathematical at all; in particular, -% they should not be translated by {\latexml}. -% -% \begin{macrocode} -%<*cls> -\newcommand\hateq{\ensuremath{\hat=}} -\newcommand\textleadsto{\ensuremath{\leadsto}} -% -%<*ltxml> -DefConstructor('\hateq',"=\x{03C2}"); -DefConstructor('\textleadsto',"=\x{219D}"); -% -% \end{macrocode} -% -% We need to disregard the columns macros introduced by the |beamer| class -% \begin{macrocode} -%<*ltxml> -DefEnvironment('{columns}','#body'); -DefEnvironment('{column}{}','#body'); -% -% \end{macrocode} -% -% We also need to deal with overlay specifications introduced by the |beamer| -% class.\ednote{this is just to keep latexml quiet, no real functionality here.} -% -% \ednote{Deyan: We reuse the CMP itemizations defined in the omdoc.cls.ltxml binding, -% adjusting the parameters to be overlay-sensitive } -% \begin{macrocode} -%<*ltxml> -DefConstructor('\uncover','#1'); -#Define a Beamer Overlay Parameter type - DefParameterType('BeamerOverlay', sub { - my ($gullet) = @_; - my $tok = $gullet->readXToken; - if (ref $tok && ToString($tok) eq '<') { - $gullet->readUntil(T_OTHER('>')); - } else { - $gullet->unread($tok) if ref $tok; - undef; }}, - reversion=> sub { - (T_OTHER('<'), $_[0]->revert, T_OTHER('>')); - }); - -#Take the "from" field of the overlay range -sub overlayFrom { - return "" unless defined $_[0]; - my $overlay=ToString($_[0]); $overlay =~ /^(\d+)/; $1;} - -#Reuse the CMP itemizations, only adjust the \item constructors. -DefMacro('\beamer@group@item[] OptionalBeamerOverlay IfBeginFollows', sub { - my($gullet,$tag,$overlay,$needwrapper)=@_; - $overlay=$overlay||T_OTHER(""); - ( T_CS('\group@item@maybe@unwrap'), - ($needwrapper ? (Invocation(T_CS('\beamer@group@item@wrap'),$tag,$overlay)->unlist) : ()) ); }); -DefConstructor('\beamer@group@item@wrap {} OptionalBeamerOverlay', - "" - . "?#1(#1)()" - . "", - beforeDigest=>sub { - Let('\group@item@maybe@unwrap','\group@item@unwrap'); - #$_[0]->bgroup; - useCMPItemizations(); - return; }, - properties=>sub{ RefStepItemCounter(); }); - - -DefConstructor('\beamer@itemize@item[] OptionalBeamerOverlay', - "" - . "?#1(#1)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\beamer@enumerate@item[] OptionalBeamerOverlay', - "" - . "?#1(#1)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\beamer@description@item[] OptionalBeamerOverlay', - "" - . "?#1(#1)()", # trust di and dt to autoclose - properties=>sub{ RefStepItemCounter(); }); - -#We ALWAYS use the beamer itemizations for the slides: -Let('\CMP@itemize@item'=>'\beamer@itemize@item'); -Let('\CMP@enumerate@item'=> '\beamer@enumerate@item'); -Let('\CMP@description@item'=> '\beamer@description@item'); -Let('\group@item' =>'\beamer@group@item'); -Let('\itemize@item'=>'\beamer@group@item'); -Let('\enumerate@item'=>'\beamer@group@item'); -Let('\description@item'=>'\beamer@group@item'); -Let('\only'=>'\beamer@group@item'); -%#$ -% \end{macrocode} -% Now, some things that are imported from the |pgf| and |beamer| packages: -% \begin{macrocode} -%<*ltxml> -DefMacro('\putgraphicsat{}{}{}','\mygraphics[#2]{#3}'); -DefMacro('\putat{}{}','#2'); -% -% \end{macrocode} -% -% \subsection{Finale} -% -% Finally, we set the slide body font to the sans serife, and we terminate the {\latexml} -% bindings file with a success mark for perl. -% \begin{macrocode} -%\ifnotes\else\sf\fi -%1; -% \end{macrocode} -% \Finale -\endinput - -% \iffalse -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi - -% LocalWords: mikoslides dtx beamer omdoc notheorems noamsthm beamerarticle -% LocalWords: graphicx slidelabel stex latexml amssymb tikz url CPERL amsmath -% LocalWords: LoadClass RequirePackage DefRegister DefEnvironment omgroup rgb -% LocalWords: afterDigestBegin setProperty LookupValue DefConstructor hyperref -% LocalWords: cmyk lec DefMacro titleslide ttitle RawTeX metadata etoolbox -% LocalWords: noproblems linkcolor bookmarksopen citecolor urlcolor colorlinks -% LocalWords: breaklinks plainpages pdfpagelabels locator srcref diff --git a/Master/texmf-dist/source/latex/stex/modules/modules.dtx b/Master/texmf-dist/source/latex/stex/modules/modules.dtx deleted file mode 100644 index 11f392bfaa7..00000000000 --- a/Master/texmf-dist/source/latex/stex/modules/modules.dtx +++ /dev/null @@ -1,1899 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for Semantic Macros and Module Scoping -% Copyright (C) 2004-2010 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/modules/modules.dtx $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{modules}[2010/06/25 v1.0 Semantic Markup] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{stex-logo,modules} -\usepackage{url,array,float,textcomp} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\usepackage{listings} -\usepackage{amsfonts} -\bibliography{kwarc} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: modules.dtx 1676 2010-11-08 09:53:09Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/modules/modules.dtx $ -\usepackage{../ctansvn} -\usepackage{hyperref} -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{modules.dtx}\end{document} -% -% \fi -% -% \iffalse\CheckSum{787}\fi -% -% \changes{v0.9}{2005/06/14}{First Version with Documentation} -% \changes{v0.9a}{2005/07/01}{Completed Documentation} -% \changes{v0.9b}{2005/08/06}{Complete functionality and Updated Documentation} -% \changes{v0.9c}{2006/01/13}{more packaging} -% \changes{v0.9d}{2007/12/12}{fixing double loading of .tex and .sms} -% \changes{v0.9e}{2008/06/17}{fixing LaTeXML} -% \changes{v0.9f}{2008/06/17}{remove unused options uses and usesqualified} -% \changes{v0.9g}{2009/05/02}{adding resymdef functionality} -% \changes{v0.9g}{2009/08/12}{adding importOMDocmodule} -% \changes{v0.9h}{2010/01/19}{using {\texttt{\textbackslash mod@newcommand}} instead of -% {\texttt{\textbackslash providecommand}} for more intuitive inheritance.} -% \changes{v0.9h}{2010/03/05}{adding {\texttt{\textbackslash metalanguage}}} -% \changes{v1.0}{2010/06/18}{minor fixes} -% -% \GetFileInfo{modules.sty} -% -% \MakeShortVerb{\|} -%\def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\xml{\scsys{Xml}} -% \def\mathml{\scsys{MathML}} -% \def\omdoc{\scsys{OMDoc}} -% \def\openmath{\scsys{OpenMath}} -% \def\latexml{\scsys{LaTeXML}} -% \def\perl{\scsys{Perl}} -% \def\cmathml{Content-{\sc MathML}\index{Content {\sc MathML}}\index{MathML@{\sc MathML}!content}} -% \def\activemath{\scsys{ActiveMath}} -% \def\twin#1#2{\index{#1!#2}\index{#2!#1}} -% \def\twintoo#1#2{{#1 #2}\twin{#1}{#2}} -% \def\atwin#1#2#3{\index{#1!#2!#3}\index{#3!#2 (#1)}} -% \def\atwintoo#1#2#3{{#1 #2 #3}\atwin{#1}{#2}{#3}} -% \def\cT{\mathcal{T}}\def\cD{\mathcal{D}} -% \title{{\texttt{modules.sty}}: Semantic Macros and Module Scoping in {\stex}\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase \& Deyan Ginev \& Rares Ambrus\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |modules| package is a central part of the {\stex} collection, a version of -% {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents semantically without -% leaving the document format, essentially turning {\TeX/\LaTeX} into a document format -% for mathematical knowledge management (MKM). -% -% This package supplies a definition mechanism for semantic macros and a non-standard -% scoping construct for them, which is oriented at the semantic dependency relation -% rather than the document structure. This structure can be used by MKM systems for -% added-value services, either directly from the {\sTeX} sources, or after translation. -% \end{abstract} -% -% \newpage\setcounter{tocdepth}{2}\tableofcontents\newpage -% -% \section{Introduction}\label{sec:intro} -% -% Following general practice in the {\TeX/\LaTeX} community, we use the term ``semantic -% macro'' for a macro whose expansion stands for a mathematical object, and whose name -% (the command sequence) is inspired by the name of the mathematical object. This can -% range from simple definitions like |\def\Reals{\mathbb{R}}| for individual mathematical -% objects to more complex (functional) ones object constructors like -% |\def\SmoothFunctionsOn#1{\mathcal{C}^\infty(#1,#1)}|. Semantic macros are traditionally -% used to make {\TeX/\LaTeX} code more portable. However, the {\TeX/\LaTeX} scoping model -% (macro definitions are scoped either in the local group or until the rest of the -% document), does not mirror mathematical practice, where notations are scoped by -% mathematical environments like statements, theories, or such. For an in-depth discussion -% of semantic macros and scoping we refer the reader~\cite{Kohlhase:ulsmf08}. -% -% The |modules| package provides a {\LaTeX}-based markup infrastructure for defining -% module-scoped semantic macros and {\latexml} bindings~\cite{Miller:latexml:online} to -% create {\omdoc}~\cite{Kohlhase:omdoc1.2} from {\stex} documents. In the {\stex} world -% semantic macros have a special status, since they allow the transformation of -% {\TeX/\LaTeX} formulae into a content-oriented markup format like -% {\openmath}~\cite{BusCapCar:2oms04} and (strict) content -% {\mathml}~\cite{CarlisleEd:MathML3}; see Figure~\ref{fig:omsemmac} for an example, where -% the semantic macros above have been defined by the |\symdef| macros (see -% Section~\ref{sec:symdef}) in the scope of a |\begin{module}[id=calculus]| (see -% Section~\ref{sec:modules}). -% -% \begin{exfig}\lstset{basicstyle=\scriptsize,aboveskip=-.5em,belowskip=-1.5em} -% \begin{tabular}{l|p{9.7cm}} -% \LaTeX & \verb|\SmoothFunctionsOn\Reals| \\\hline -% PDF/DVI & ${\mathcal{C}^\infty(\mathbb{R},\mathbb{R})}$\\\hline -% {\openmath} & \lstset{morekeywords={OMA,OMS}} -% \begin{lstlisting} -% -% -% -% \end{lstlisting}\\\hline -% {\mathml} & \lstset{morekeywords={apply,csymbol}} -% \begin{lstlisting} -% -% SmoothFunctionsOn -% Reals -% \end{lstlisting}\\ -% \end{tabular} -% \caption{{\openmath} and {\mathml} generated from Semantic Macros}\label{fig:omsemmac} -% \end{exfig} -% -% \section{The User Interface} -% -% The main contributions of the |modules| package are the |module| environment, which -% allows for lexical scoping of semantic macros with inheritance and the |\symdef| macro -% for declaration of semantic macros that underly the |module| scoping. -% -% \subsection{Package Options}\label{sec:options} -% -% The |modules| package takes two options: If we set \DescribeMacro{showviews}|showviews|, -% then the views (see Section~\ref{sec:user:views}) are shown. If we set the -% \DescribeMacro{qualifiedimports}|qualifiedimports| option, then qualified imports are -% enabled. Qualified imports give more flexibility in module inheritance, but consume more -% internal memory. As qualified imports are not fully implemented at the moment, they are -% turned off by default see Limitation~\ref{sec:limitations:qualified-imports}. -% -% If the \DescribeMacro{showmeta}|showmeta| is set, then the metadata keys are shown -% (see~\cite{Kohlhase:metakeys:ctan} for details and customization options). -% -% \subsection{Modules and Inheritance}\label{sec:modules} -% -% \DescribeEnv{module} The |module| environment takes an optional |KeyVal| -% argument. Currently, only the |id| key is supported for specifying the identifier of a -% module (also called the {\twintoo{module}{name}}). A module introduced by -% |\begin{module}[id=foo]| restricts the scope the semantic macros (see -% Section~\ref{sec:symdef}) defined by the |\symdef| form to the end of this module -% given by the corresponding |\end{module}|, and to any other |module| environments that -% import them by a |\importmodule{foo}| directive. If the module |foo| contains -% |\importmodule| directives of its own, these are also exported to the importing module. -% -% Thus the \DescribeMacro{\importmodule}|\importmodule| declarations induce the -% {\atwintoo{semantic}{inheritance}{relation}}. Figure~\ref{exf:importmodule} shows a -% module that imports the semantic macros from three others. In the simplest form, -% |\importmodule{|\meta{mod}|}| will activate the semantic macros and concepts declared by -% |\symdef| and |\termdef| in module \meta{mod} in the current module\footnote{Actually, -% in the current {\TeX} group, therefore \texttt{\textbackslash importmodule} should be -% placed directly after the \texttt{\textbackslash begin\{module\}}.}. To understand the -% mechanics of this, we need to understand a bit of the internals. The |module| -% environment sets up an internal macro pool, to which all the macros defined by the -% |\symdef| and |\termdef| declarations are added; |\importmodule| only activates this -% macro pool. Therefore |\importmodule{|\meta{mod}|}| can only work, if the {\TeX} parser -% --- which linearly goes through the {\sTeX} sources --- already came across the module -% \meta{mod}. In many situations, this is not obtainable; e.g. for ``semantic forward -% references'', where symbols or concepts are previewed or motivated to knowledgeable -% readers before they are formally introduced or for modularizations of documents into -% multiple files. To enable situations like these, the |module| package uses auxiliary -% files called {\textbf{\sTeX module signatures}}. For any file, \meta{file}|.tex|, we -% generate a corresponding \sTeX module signature \meta{file}|.sms| with the |sms| utility -% (see also Limitation~\ref{sec:limitations:sms}), which contains (copies of) all -% |\begin|/|\end{module}|, |\importmodule|, |\symdef|, and |\termdef| invocations in -% \meta{file}|.tex|. The value of an \sTeX module signature is that it can be loaded -% instead its corresponding \sTeX document, if we are only interested in the semantic -% macros. So |\importmodule[|\meta{filepath}|]{|\meta{mod}|}| will load the \sTeX module -% signature \meta{filepath}|.sms| (if it exists and has not been loaded before) and -% activate the semantic macros from module \meta{mod} (which was supposedly defined in -% \meta{filepath}|.tex|). Note that since \meta{filepath}|.sms| contains all -% |\importmodule| statements that \meta{filepath}|.tex| does, an |\importmodule| -% recursively loads all necessary files to supply the semantic macros inherited by the -% current module. -% -% The \DescribeMacro{\metalanguage} |metalanguage| macro is a variant of -% \lstinline|importmodule| that imports the meta language, i.e. the language in which the -% meaning of the new symbols is expressed. For mathematics this is often first-order logic -% with some set theory; see~\cite{RabKoh:WSMSML10} for discussion. -% -% \subsection{Semantic Macros and Module Scoping}\label{sec:symdef} -% -% The \DescribeMacro{\symdef} is the main constructor for semantic macros in {\sTeX}. A -% call to the |\symdef| macro has the general form -% \begin{quote} -% |\symdef[|\meta{keys}|]{|\meta{cseq}|}[|\meta{args}|]{|\meta{definiens}|}| -% \end{quote} -% where {\meta{cseq}} is a control sequence (the name of the semantic macro) {\meta{args}} -% is a number between 0 and 9 for the number of arguments {\meta{definiens}} is the token -% sequence used in macro expansion for {\meta{cseq}}. Finally {\meta{keys}} is a keyword -% list that further specifies the semantic status of the defined macro. -% -% The two semantic macros in Figure~\ref{fig:omsemmac} would have been declared by -% invocations of the |\symdef| macro of the form: -% \begin{verbatim} -% \symdef{Reals}{\mathbb{R}} -% \symdef{SmoothFunctionsOn}[1]{\mathcal{C}^\infty(#1,#1)} -% \end{verbatim} -% -% Note that both semantic macros correspond to {\openmath} or {\mathml} ``symbols'', -% i.e. named representations of mathematical concepts (the real numbers and the -% constructor for the space of smooth functions over a set); we call these names the -% {\textbf{symbol name}} of a semantic macro. Normally, the symbol name of a semantic -% macro declared by a |\symdef| directive is just \meta{cseq}. The key-value pair -% \DescribeMacro{name}|name=|\meta{symname} can be used to override this behavior and -% specify a differing name. There are two main use cases for this. -% -% The first one is shown in Example~\ref{fig:resymdef}, where we define semantic macros -% for the ``exclusive or'' operator. Note that we define two semantic macros: |\xorOp| and -% |\xor| for the applied form and the operator. As both relate to the same mathematical -% concept, their symbol names should be the same, so we specify |name=xor| on the -% definition of |\xorOp|. -% -% A key \DescribeMacro{local}|local| can be added to {\meta{keys}} to specify that the -% symbol is local to the module and is invisible outside. Note that even though |\symdef| -% has no advantage over |\def| for defining local semantic macros, it is still considered -% good style to use |\symdef| and |\abbrdef|, if only to make switching between local and -% exported semantic macros easier. -% -% \DescribeMacro{\abbrdef}The |\abbrdef| macro is a variant of |\symdef| that is only -% different in semantics, not in presentation. An abbreviative macro is like a semantic -% macro, and underlies the same scoping and inheritance rules, but it is just an -% abbreviation that is meant to be expanded, it does not stand for an atomic mathematical -% object. -% -% We will use a simple module for natural number arithmetics as a running example. It -% defines exponentiation and summation as new concepts while drawing on the basic -% operations like $+$ and $-$ from {\LaTeX}. In our example, we will define a semantic -% macro for summation |\Sumfromto|, which will allow us to express an expression like -% $\sum{i=1}^nx^i$ as |\Sumfromto{i}1n{2i-1}| (see Example~\ref{fig:semmodule} for an -% example). In this example we have also made use of a local semantic symbol for $n$, -% which is treated as an arbitrary (but fixed) symbol. -% -%\begin{exfig} -% \begin{verbatim} -% \begin{module}[id=arith] -% \symdef{Sumfromto}[4]{\sum_{#1=#2}^{#3}{#4}} -% \symdef[local]{arbitraryn}{n} -% What is the sum of the first $\arbitraryn$ odd numbers, i.e. -% $\Sumfromto{i}1\arbitraryn{2i-1}?$ -% \end{module} -% \end{verbatim} -% \vspace*{-3.5ex}\hrule\vspace*{1ex} -% \begin{module}[id=arith] -% \symdef{Sumfromto}[4]{\sum_{#1=#2}^{#3}{#4}} -% \symdef[local]{arbitraryn}{n} -% What is the sum of the first $\arbitraryn$ odd numbers, i.e. -% $\Sumfromto{i}1\arbitraryn{2i-1}?$ -% \end{module} -% \caption{Semantic Markup in a {\texttt{module}} Context}\label{fig:semmodule} -% \end{exfig} -% -% To locally change the presentation of a semantic macro, we can use the -% \DescribeMacro{\resymdef}|\resymdef| macro\footnote{For some reason, this does not -% interact very well with the {\texttt{beamer}} class, if used in side a {\texttt{frame}} -% environment, the option {\texttt{[fragile]}} should be given of {\texttt{frame}}.}. It -% takes the same arguments as the |\symdef| macro described above, but locally redefines -% the presentation. Consider for instance the situation in Figure~\ref{fig:resymdef} -% -%\begin{exfig} -% \begin{verbatim} -% \begin{module}[id=xbool] -% \symdef[name=xor]{xorOp}{\oplus} -% \symdef{xor}[2]{#1\xorOp #2} -% \termdef[name=xor]{xdisjunction}{exclusive disjunction} -% \captitalize\xdisjunction is commutative: $\xor{p}q=\xor{q}p$\\ -% \resymdef[name=xor]{xorOp}{\underline{\vee}} -% Some authors also write exclusive or with the $\xorOp$ operator, -% then the formula above is $\xor{p}q=\xor{q}p$ -% \end{module} -% \end{verbatim} -% \vspace*{-3.5ex}\hrule\vspace*{1ex} -% \begin{module}[id=xbool] -% \symdef[name=xor]{xorOp}{\oplus} -% \symdef{xor}[2]{#1\oplus#2} -% \termdef[name=xor]{xdisjunction}{exclusive disjunction} -% \capitalize\xdisjunction is communtative: $\xor{p}q=\xor{q}p$\\ -% \resymdef[name=xor]{xorOp}{\underline{\vee}} -% Some authors also write exclusive or with the $\xorOp$ operator, -% then the formula above is $\xor{p}q=\xor{q}p$ -% \end{module} -% \caption{Redefining the Presentation of a Semantic Macro}\label{fig:resymdef} -% \end{exfig} -% -% \subsection{Symbol and Concept Names}\label{sec:user:termdef} -% -% Just as the |\symdef| declarations define semantic macros for mathematical symbols, the -% |modules| package provides an infrastructure for {\emph{mathematical concepts}} that are -% expressed in mathematical vernacular. The key observation here is that concept names -% like ``finite symplectic group'' follow the same scoping rules as mathematical symbols, -% i.e. they are module-scoped. The \DescribeMacro{\termdef}|\termdef| macro is an analogue -% to |\symdef| that supports this: use -% |\termdef[|\meta{keys}|]{|\meta{cseq}|}{|\meta{concept}|}| to declare the macro -% |\|\meta{cseq} that expands to \meta{concept}. See Figure~\ref{fig:resymdef} for an -% example, where we use the \DescribeMacro{\capitalize}|\captitalize| macro to adapt -% \meta{concept} to the sentence beginning.\ednote{continue, describe \meta{keys}, they -% will have to to with plurals,\ldots once implemented}. The main use of the -% |\termdef|-defined concepts lies in automatic cross-referencing facilities via the -% \DescribeMacro{\termref}|\termref| and \DescribeMacro{\symref}|\symref| macros provided -% by the |statements| package~\ctancite{Kohlhase:smms}. Together with the |hyperref| -% package~\cite{RahObe:hmlmh10}, this provide cross-referencing to the definitions of the -% symbols and concepts. As discussed in section~\ref{sec:limitations:crossref}, the -% |\symdef| and |\termdef| declarations must be on top-level in a module, so the -% infrastructure provided in the |modules| package alone cannot be used to locate the -% definitions, so we use the infrastructure for mathematical statements for that. -% -% \subsection{Dealing with multiple Files}\label{sec:user:multiple} -% -% The infrastructure presented above works well if we are dealing with small files or -% small collections of modules. In reality, collections of modules tend to grow, get -% re-used, etc, making it much more difficult to keep everything in one file. This general -% trend towards increasing entropy is aggravated by the fact that modules are very -% self-contained objects that are ideal for re-used. Therefore in the absence of a -% content management system for {\LaTeX} document (fragments), module collections tend to -% develop towards the ``one module one file'' rule, which leads to situations with lots -% and lots of little files. -% -% Moreover, most mathematical documents are not self-contained, i.e. they do not build up -% the theory from scratch, but pre-suppose the knowledge (and notation) from other -% documents. In this case we want to make use of the semantic macros from these -% prerequisite documents without including their text into the current document. One way -% to do this would be to have {\LaTeX} read the prerequisite documents without producing -% output. For efficiency reasons, {\stex} chooses a different route. It comes with a -% utility |sms| (see Section~\ref{sec:utilities}) that exports the modules and macros -% defined inside them from a particular document and stores them inside |.sms| files. This -% way we can avoid overloading LaTeX with useless information, while retaining the -% important information which can then be imported in a more efficient way. -% -% \DescribeMacro{\importmodule} For such situations, the |\importmodule| macro can be -% given an optional first argument that is a path to a file that contains a path to the -% module file, whose module definition (the |.sms| file) is read. Note that the -% |\importmodule| macro can be used to make module files truly self-contained. To arrive -% at a file-based content management system, it is good practice to reuse the module -% identifiers as module names and to prefix module files with corresponding -% |\importmodule| statements that pre-load the corresponding module files. -% -%\begin{exfig} -% \begin{verbatim} -% \begin{module}[id=foo] -% \importmodule[../other/bar]{bar} -% \importmodule[../mycolleaguesmodules]{baz} -% \importmodule[../other/bar]{foobar} -% ... -% \end{module} -% \end{verbatim} -% \vspace{-1.7em} -% \caption{Self-contained Modules via {\texttt{importmodule}}}\label{exf:importmodule} -% \end{exfig} -% -% In Example~\ref{exf:importmodule}, we have shown the typical setup of a module -% file. The |\importmodule| macro takes great care that files are only read once, as -% {\sTeX} allows multiple inheritance and this setup would lead to an exponential (in the -% module inheritance depth) number of file loads. -% -% Sometimes we want to import an existing {\omdoc} theory\footnote{{\omdoc} theories are -% the counterpart of {\stex} modules.} $\widehat\cT$ into (the {\omdoc} document -% $\widehat\cD$ generated from) a {\stex} document $\cD$. Naturally, we have to provide an -% {\stex} stub module $\cT$ that provides |\symdef| declarations for all symbols we use in -% $\cD$. In this situation, we use\DescribeMacro{\importOMDocmodule} -% |\importOMDocmodule[|\meta{spath}|]{|\meta{OURI}|}{|\meta{name}|}|, where \meta{spath} -% is the file system path to $\cT$ (as in |\importmodule|, this argument must not contain -% the file extension), \meta{OURI} is the URI to the {\omdoc} module (this time with -% extension), and \meta{name} is the name of the theory $\widehat\cT$ and the module in -% $\cT$ (they have to be identical for this to work). Note that since the \meta{spath} -% argument is optional, we can make ``local imports'', where the stub $\cT$ is in $\cD$ -% and only contains the |\symdef|s needed there. -% -% Note that the recursive (depth-first) nature of the file loads induced by this setup is -% very natural, but can lead to problems with the depth of the file stack in the {\TeX} -% formatter (it is usually set to something like 15\footnote{If you have sufficient rights -% to change your {\TeX} installation, you can also increase the variable -% {\texttt{max\_in\_open}} in the relevant {\texttt{texmf.cnf}} file.}). Therefore, it -% may be necessary to circumvent the recursive load pattern providing (logically spurious) -% |\importmodule| commands. Consider for instance module |bar| in -%Example~\ref{exf:importmodule}, say that |bar| already has load depth 15, then we cannot -% naively import it in this way. If module |bar| depended say on a module |base| on the -% critical load path, then we could add a statement \DescribeMacro{\requiremodules} -% |\requiremodules{../base}| in the second line. This would load the modules from -% |../base.sms| in advance (uncritical, since it has load depth 10), so that it would not -% have to be re-loaded in the critical path of the module |foo|. Solving the load depth -% problem. -% -% \DescribeMacro{\sinput} In all of the above, we do not want to load an |sms| file, if -% the corresponding file has already been loaded, since the semantic macros are already in -% memory. Therefore the |modules| package supplies a semantic variant of the |\input| -% macro, which records in an internal register that the modules in the file have already -% been loaded. Thus if we consistently use |\sinput| instead of |\input| or |\include| for -% files that contain modules\footnote{files without modules should be treated by the -% regular {\LaTeX} input mechanism, since they do not need to be registered.}, we can -% prevent double loading of files and therefore gain efficiency. The -% \DescribeMacro{\sinputref} |\sinputref| macro behaves just like |\sinput| in the -% {\LaTeX} workflow, but in the {\latexml} conversion process creates a reference to the -% transformed version of the input file instead. -% -% Finally, the separation of documents into multiple modules often profits from a symbolic -% management of file paths. To simplify this, the |modules| package supplies the -% \DescribeMacro{\defpath}|\defpath| macro: |\defpath{|\meta{cname}|}{|\meta{path}|}| -% defines a command, so that |\|\meta{csname}|{|\meta{name}|}| expands to -% \meta{path}|/|\meta{name}. So we could have used -% \begin{lstlisting} -% \defpath{OPaths}{../other} -% \importmodule[\OPhats{bar}]{bar} -% \end{lstlisting} -% instead of the second line in Example~\ref{exf:importmodule}. The variant |\OPaths| has -% the big advantage that we can get around the fact that {\TeX/\LaTeX} does not set the -% current directory in |\input|, so that we can use systematically deployed -% |\defpath|-defined path macros to make modules relocatable by defining the path macros -% locally. -% -% \subsection{Including Externally Defined Semantic Macros } -% -% In some cases, we use an existing {\LaTeX} macro package for typesetting objects that -% have a conventionalized mathematical meaning. In this case, the macros are ``semantic'' -% even though they have not been defined by a |\symdef|. This is no problem, if we are -% only interested in the {\LaTeX} workflow. But if we want to e.g. transform them to -% {\omdoc} via {\latexml}, the {\latexml} bindings will need to contain references to an -% {\omdoc} theory that semantically corresponds to the {\LaTeX} package. In particular, -% this theory will have to be imported in the generated {\omdoc} file to make it -% {\omdoc}-valid. -% -% \DescribeMacro{\requirepackage} To deal with this situation, the |modules| package -% provides the |\requirepackage| macro. It takes two arguments: a package name, and a URI -% of the corresponding {\omdoc} theory. In the {\LaTeX} workflow this macro behaves like a -% |\usepackage| on the first argument, except that it can --- and should --- be used -% outside the {\LaTeX} preamble. In the {\latexml} workflow, this loads the {\latexml} -% bindings of the package specified in the first argument and generates an appropriate -% |imports| element using the URI in the second argument. -% -% \subsection{Views}\label{sec:user:views} -% -% \ednote{Document and make Examples} -% -% \section{Limitations \& Extensions}\label{sec:limitations} -% -% In this section we will discuss limitations and possible extensions of the |modules| -% package. Any contributions and extension ideas are welcome; please discuss ideas, -% requests, fixes, etc on the {\sTeX} TRAC~\cite{sTeX:online}. -% -% \subsection{Perl Utility \texttt{sms}}\label{sec:limitations:sms} -% -% Currently we have to use an external perl utility |sms| to extract \sTeX module -% signatures from \sTeX files. This considerably adds to the complexity of the \sTeX -% installation and workflow. If we can solve security setting problems that allows us to -% write to \sTeX module signatures outside the current directory, writing them from \sTeX -% may be an avenue of future development see~\cite[issue \#1522]{sTeX:online} for a -% discussion. -% -% \subsection{Qualified Imports}\label{sec:limitations:qualified-imports} -% -% In an earlier version of the \texttt{modules} package we used the \texttt{usesqualified} -% for importing macros with a disambiguating prefix (this is used whenever we have -% conflicting names for macros inherited from different modules). This is not accessible -% from the current interface. We need something like a |\importqualified| macro for this; -% see~\cite[issue \#1505]{sTeX:online}. Until this is implemented the infrastructure is -% turned off by default, but we have already introduced the -% \DescribeMacro{qualifiedimports}|qualifiedimports| option for the future. -% -% \subsection{Error Messages}\label{sec:limitations:errormsg} -% -% The error messages generated by the |modules| package are still quite bad. For instance -% if |thyA| does note exists we get the cryptic error message -% \begin{verbatim} -% ! Undefined control sequence. -% \module@defs@thyA ...hy -% \expandafter \mod@newcomma... -% l.490 ...ortmodule{thyA} -% \end{verbatim} -% This should definitely be improved. -% -% \subsection{Crossreferencing}\label{sec:limitations:crossref} -% -% Note that the macros defined by |\symdef| are still subject to the normal {\TeX} scoping -% rules. Thus they have to be at the top level of a module to be visible throughout the -% module as intended. As a consequence, the location of the |\symdef| elements cannot be -% used as targets for crossreferencing, which is currently supplied by the |statement| -% package~\ctancite{Kohlhase:smms}. A way around this limitation would be to import -% the current module from the \sTeX module signature (see Section~\ref{sec:modules}) via -% the |\importmodule| declaration. -% -% \subsection{No Forward Imports}\label{sec:limitations:forward-imports} -% -% {\sTeX} allows imports in the same file via |\importmodule{|\meta{mod}|}|, but due to -% the single-pass linear processing model of {\TeX}, \meta{mod} must be the name of a -% module declared {\emph{before}} the current point. So we cannot have forward imports as -% in -% \begin{verbatim} -% \begin{module}[id=foo] -% \importmodule{mod} -% ... -% \end{module} -% ... -% \begin{module}[id=mod] -% ... -% \end{module} -% \end{verbatim} -% a workaround, we can extract the module \meta{mod} into a file {{{mod.tex}}} and replace -% it with |\sinput{mod}|, as in -% \begin{verbatim} -% \begin{module}[id=foo] -% \importmodule[mod]{mod} -% ... -% \end{module} -% ... -% \sinput{mod} -% \end{verbatim} -% then the |\importmodule| command can read |mod.sms| (created via the |sms| utility) -% without having to wait for the module \meta{mod} to be defined. -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\newpage\printbibliography}\newpage -% -% \section{The Implementation} -% -% The |modules| package generates two files: the {\LaTeX} package (all the code between -% {\textlangle\textsf{*package}\textrangle} and {\textsf{\textlangle/package\textrangle}}) -% and the {\latexml} bindings (between {\textsf{\textlangle*ltxml\textrangle}} and -% {\textsf{\textlangle/ltxml\textrangle}}). We keep the corresponding code fragments -% together, since the documentation applies to both of them and to prevent them from -% getting out of sync. -% -% \subsection{Package Options}\label{sec:impl:options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false). -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\ifmod@show\mod@showfalse -\DeclareOption{show}{\mod@showtrue} -\newif\ifmod@qualified\mod@qualifiedfalse -\DeclareOption{qualifiedimports}{\mod@qualifiedtrue} -% \end{macrocode} -% Finally, we need to declare the end of the option declaration section to {\LaTeX}. -% \begin{macrocode} -\ProcessOptions -% -% \end{macrocode} -% -% {\latexml} does not support module options yet, so we do not have to do anything here -% for the {\latexml} bindings. We only set up the {\perl} packages (and tell {\texttt{emacs}} -% about the appropriate mode for convenience -% -% The next measure is to ensure that the |sref| and |xcomment| packages are loaded (in the -% right version). For {\latexml}, we also initialize the package inclusions. -% \begin{macrocode} -%<*package> -\RequirePackage{sref} -\RequirePackage{xspace} -\RequirePackage{xcomment} -% -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Global; -use LaTeXML::Package; -% -% \end{macrocode} -% -% \subsection{Modules and Inheritance}\label{sec:impl:modules} -% -% We define the keys for the |module| environment and the actions that are undertaken, -% when the keys are encountered. -% -% \begin{macro}{module:cd} -% This |KeyVal| key is only needed for {\latexml} at the moment; use this to specify a -% content dictionary name that is different from the module name. -% \begin{macrocode} -%<*package> -\define@key{module}{cd}{} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{module:id} -% For a module with |[id=|\meta{name}|]|, we have a macro |\module@defs@|\meta{name} -% that acts as a repository for semantic macros of the current module. I will be called -% by |\importmodule| to activate them. We will add the internal forms of the semantic -% macros whenever |\symdef| is invoked. To do this, we will need an unexpended form -% |\this@module| that expands to |\module@defs@|\meta{name}; we define it first and then -% initialize |\module@defs@|\meta{name} as empty. Then we do the same for qualified -% imports as well (if the |qualifiedimports| option was specified). Furthermore, we save -% the module name in |\mod@id| and the module path in |\|\meta{name}|@cd@file@base| -% which we add to |\module@defs@|\meta{name}, so that we can use it in the importing -% module. -% \begin{macrocode} -%<*package> -\define@key{module}{id}{% -\edef\this@module{\expandafter\noexpand\csname module@defs@#1\endcsname}% -\global\@namedef{module@defs@#1}{}% -\ifmod@qualified -\edef\this@qualified@module{\expandafter\noexpand\csname module@defs@qualified@#1\endcsname}% -\global\@namedef{module@defs@qualified@#1}{}% -\fi -\def\mod@id{#1}% -\expandafter\edef\csname #1@cd@file@base\endcsname{\mod@path}% -\expandafter\g@addto@macro\csname module@defs@#1\expandafter\endcsname\expandafter% -{\expandafter\def\csname #1@cd@file@base\expandafter\endcsname\expandafter{\mod@path}}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{module} -% finally, we define the begin module command for the module environment. All the work -% has already been done in the keyval bindings, so this is very simple. -% \begin{macrocode} -%<*package> -\newenvironment{module}[1][]{\setkeys{module}{#1}}{} -% -% \end{macrocode} -% for the {\latexml} bindings, we have to do the work all at once. -% \begin{macrocode} -%<*ltxml> -DefEnvironment('{module} OptionalKeyVals:Module', - "?#excluded()(#body)", -# beforeDigest=>\&useTheoryItemizations, - afterDigestBegin=>sub { - my($stomach, $whatsit)=@_; - $whatsit->setProperty(excluded=>LookupValue('excluding_modules')); - - my $keys = $whatsit->getArg(1); - my($id, $cd)=$keys - && map(ToString($keys->getValue($_)),qw(id cd)); - #make sure we have an id or give a stub one otherwise: - if (not $id) { - #do magic to get a unique id for this theory - $whatsit->setProperties(beginItemize('theory')); - $id = ToString($whatsit->getProperty('id')); - } - $cd = $id unless $cd; - # update the catalog with paths for modules - my $module_paths = LookupValue('module_paths') || {}; - $module_paths->{$id} = LookupValue('last_module_path'); - AssignValue('module_paths', $module_paths, 'global'); - - #Update the current module position - AssignValue(current_module => $id); - AssignValue(module_cd => $cd) if $cd; - - #activate the module in our current scope - $STATE->activateScope("module:".$id); - - #Activate parent scope, if present - my $parentmod = LookupValue('parent_module'); - use_module($parentmod) if $parentmod; - #Update the current parent module - AssignValue("parent_of_$id"=>$parentmod,'global'); - AssignValue("parent_module" => $id); - return; }, - afterDigest => sub { - #Move a step up on the module ancestry - AssignValue("parent_module" => LookupValue("parent_of_".LookupValue("parent_module"))); - return; - }); -% -% \end{macrocode} -% \end{environment} -% -% -% \begin{macro}{usemodule} -% The |use_module| subroutine performs depth-first load of definitions of the used -% modules -% \begin{macrocode} -%<*ltxml> -sub use_module { - my($module,%ancestors)=@_; - $module = ToString($module); - if (defined $ancestors{$module}) { - Fatal(":module \"$module\" leads to import cycle!"); - } - $ancestors{$module}=1; - # Depth-first load definitions from used modules, disregarding cycles - foreach my $used_module (@{ LookupValue("module_${module}_uses") || []}){ - use_module($used_module,%ancestors); - } - # then load definitions for this module - $STATE->activateScope("module:$module"); }#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\activate@defs} -% To activate the |\symdef|s from a given module xxx, we call the macro |\module@defs@xxx|. -% \begin{macrocode} -%<*package> -\def\activate@defs#1{\csname module@defs@#1\endcsname} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\export@defs} -% To export a the |\symdef|s from the current module, we all the macros -% |\module@defs@|\meta{mod} to |\module@defs@|\meta{mod} (if the current module has a -% name and it is \meta{mod}) -% \begin{macrocode} -%<*package> -\def\export@defs#1{\@ifundefined{mod@id}{}% -{\expandafter\expandafter\expandafter\g@addto@macro\expandafter% -\this@module\expandafter{\csname module@defs@#1\endcsname}}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\importmodule} -% The |\importmodule[|\meta{file}|]{|\meta{mod}|}| macro is an interface macro that -% loads \meta{file} and activates and re-exports the |\symdef|s from module -% \meta{mod}. It also remembers the file name in |\mod@path|. -% \begin{macrocode} -%<*package> -\def\coolurion{} -\def\coolurioff{} -\newcommand{\importmodule}[2][]{{\def\mod@path{#1}% -\ifx\mod@path\@empty\else\requiremodules{#1}\fi}% -\activate@defs{#2}\export@defs{#2}} -% -%<*ltxml> -DefMacro('\coolurion',sub {AssignValue('cooluri'=>1);}); -DefMacro('\coolurioff',sub {AssignValue('cooluri'=>0);}); -sub omext { - my ($mod)=@_; my $dest=''; - if (ToString($mod)) { - #We need a constellation of abs_path invocations - # to make sure that all symbolic links get resolved - my ($d,$f,$t) = pathname_split(abs_path(ToString($mod))); - $d = pathname_relative(abs_path($d),abs_path(cwd())); - $dest=$d."/".$f; - } - $dest.=".omdoc" if (ToString($mod) && !LookupValue('cooluri')); - return Tokenize($dest);} -sub importmoduleI { - my($stomach,$whatsit)=@_; - my $file = $whatsit->getArg(1); - my $omdocmod = $file.".omdoc" if $file; - my $module = $whatsit->getArg(2); - $module = ToString($module); - my $containing_module = LookupValue('current_module'); - #set the relation between the current module and the one to be imported - PushValue("module_".$containing_module."_uses"=>$module) if $containing_module; - #check if we've already loaded this module file or no file path given - if((!$file) || (LookupValue('file_'.$module.'_loaded'))) {use_module($module);} #if so activate it! - else { - #if not: - my $gullet = $stomach->getGullet; - #1) mark as loaded - AssignValue('file_'.$module.'_loaded' => 1, 'global'); - #open a group for its definitions so that they are localized - $stomach->bgroup; - #update the last module path - AssignValue('last_module_path', $file); - #queue the closing tag for this module in the gullet where it will be executed - #after all other definitions of the imported module have been taken care of - $gullet->unread(Invocation(T_CS('\end@requiredmodule'), T_OTHER($module))->unlist); - #we only need to load the sms definitions without generating any xml output, so we set the flag to 1 - AssignValue('excluding_modules' => 1); - #queue this module's sms file in the gullet so that its definitions are imported - $gullet->input($file,['sms']); - } - return;} -DefConstructor('\importmodule OptionalSemiverbatim {}', - "", - afterDigest=>sub{ importmoduleI(@_)}); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\importOMDocmodule} -% for the {\LaTeX} side we can just re-use |\importmodule|, for the {\latexml} side we -% have a full URI anyways. So things are easy. -% \begin{macrocode} -%<*package> -\newcommand{\importOMDocmodule}[3][]{\importmodule[#1]{#3}} -% -%<*ltxml> -DefConstructor('\importOMDocmodule OptionalSemiverbatim {}{}',"", -afterDigest=>sub{ - #Same as \importmodule, just switch second and third argument. - my ($stomach,$whatsit) = @_; - my $path = $whatsit->getArg(1); - my $ouri = $whatsit->getArg(2); - my $module = $whatsit->getArg(3); - $whatsit->setArgs(($path, $module,$ouri)); - importmoduleI($stomach,$whatsit); - return; -}); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\metalanguage} -% |\metalanguage| behaves exactly like |\importmodule| for formatting. For {\latexml}, -% we only add the |type| attribute. -% \begin{macrocode} -%<*package> -\let\metalanguage=\importmodule -% -%<*ltxml> -DefConstructor('\metalanguage OptionalSemiverbatim {}', - "", - afterDigest=>sub{ importmoduleI(@_)}); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Semantic Macros}\label{sec:impl:symdef} -% -% \begin{macro}{\mod@newcommand} -% We first hack the {\LaTeX} kernel macros to obtain a version of the |\newcommand| -% macro that does not check for definedness. This is just a copy of the code from -% |latex.ltx| where I have removed the |\@ifdefinable| check.\footnote{Someone must have -% done this before, I would be very happy to hear about a package that provides this.} -% \begin{macrocode} -%<*package> -\def\mod@newcommand{\@star@or@long\mod@new@command} -\def\mod@new@command#1{\@testopt{\@mod@newcommand#1}0} -\def\@mod@newcommand#1[#2]{\kernel@ifnextchar [{\mod@xargdef#1[#2]}{\mod@argdef#1[#2]}} -\long\def\mod@argdef#1[#2]#3{\@yargdef#1\@ne{#2}{#3}} -\long\def\mod@xargdef#1[#2][#3]#4{\expandafter\def\expandafter#1\expandafter{% -\expandafter\@protected@testopt\expandafter #1\csname\string#1\endcsname{#3}}% -\expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}} -% -% \end{macrocode} -% \end{macro} -% -% Now we define the optional KeyVal arguments for the |\symdef| form and the actions that -% are taken when they are encountered. -% -% \begin{macro}{symdef:keys} -% The optional argument local specifies the scope of the function to be defined. If -% local is not present as an optional argument then |\symdef| assumes the scope of the -% function is global and it will include it in the pool of macros of the current -% module. Otherwise, if local is present then the function will be defined only locally -% and it will not be added to the current module (i.e. we cannot inherit a local -% function). Note, the optional key local does not need a value: we write -% |\symdef[local]{somefunction}[0]{some expansion}|. The other keys are not used in the -% {\LaTeX} part. -% \begin{macrocode} -%<*package> -\define@key{symdef}{local}[true]{\@symdeflocaltrue} -\define@key{symdef}{name}{} -\define@key{symdef}{assocarg}{} -\define@key{symdef}{bvars}{} -\define@key{symdef}{bvar}{} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\symdef} -% The the |\symdef|, and |\@symdef| macros just handle optional arguments. -% \begin{macrocode} -%<*package> -\newif\if@symdeflocal -\def\symdef{\@ifnextchar[{\@symdef}{\@symdef[]}} -\def\@symdef[#1]#2{\@ifnextchar[{\@@symdef[#1]{#2}}{\@@symdef[#1]{#2}[0]}} -% \end{macrocode} -% next we locally abbreviate |\mod@newcommand| to make the argument passing simpler. -% \begin{macrocode} -\def\@mod@nc#1{\mod@newcommand{#1}[1]} -% \end{macrocode} -% now comes the real meat: the |\@@symdef| macro does two things, it adds the macro -% definition to the macro definition pool of the current module and also provides it. -% \begin{macrocode} -\def\@@symdef[#1]#2[#3]#4{% -% \end{macrocode} -% We use a switch to keep track of the local optional argument. We initialize the switch -% to false and check for the local keyword. Then we set all the keys that have been -% provided as arguments: |name|, |local|. First, using |\mod@newcommand| we initialize the -% intermediate function, the one that can be changed internally with |\resymdef| and then -% we link the actual function to it, again with |\mod@newcommand|. -% \begin{macrocode} -\@symdeflocalfalse\setkeys{symdef}{#1}% -\expandafter\mod@newcommand\csname modules@#2@pres\endcsname[#3]{#4}% -\expandafter\def\csname#2\endcsname{\csname modules@#2@pres\endcsname}% -\expandafter\@mod@nc\csname mod@symref@#2\expandafter\endcsname\expandafter% -{\expandafter\mod@termref\expandafter{\mod@id}{#2}{##1}}% -% \end{macrocode} -% We check if the switch for the local scope is set: if it is we are done, since this -% function has a local scope. Similarly, if we are not inside a module, which we could -% export from. Otherwise, we add two functions to the module's pool of defined macros -% using |\g@addto@macro|. We add both functions so that we can keep the link between the -% real and the intermediate function whenever we inherit the module. Finally we also add -% |\mod@symref@|\meta{sym} macro to the macro pool. -% \begin{macrocode} -\if@symdeflocal\else% -\@ifundefined{mod@id}{}{% -\expandafter\g@addto@macro\this@module% -{\expandafter\mod@newcommand\csname modules@#2@pres\endcsname[#3]{#4}}% -\expandafter\g@addto@macro\this@module% -{\expandafter\def\csname#2\endcsname{\csname modules@#2@pres\endcsname}}% -\expandafter\g@addto@macro\csname module@defs@\mod@id\expandafter\endcsname\expandafter% -{\expandafter\@mod@nc\csname mod@symref@#2\expandafter\endcsname\expandafter% -{\expandafter\mod@termref\expandafter{\mod@id}{#2}{##1}}}% -% \end{macrocode} -% Finally, using |\g@addto@macro| we add the two functions to the qualified version of the -% module if the |qualifiedimports| option was set. -% \begin{macrocode} -\ifmod@qualified% -\expandafter\g@addto@macro\this@qualified@module% -{\expandafter\mod@newcommand\csname modules@#2@pres@qualified\endcsname[#3]{#4}}% -\expandafter\g@addto@macro\this@qualified@module% -{\expandafter\def\csname#2atqualified\endcsname{\csname modules@#2@pres@qualified\endcsname}}% -\fi% -% \end{macrocode} -% So now we only need to close all brackets and the macro is done. -% \begin{macrocode} -}\fi} -% -% \end{macrocode} -% In the {\latexml} bindings, we have a top-level macro that delegates the work to two -% internal macros: |\@symdef|, which defines the content macro and |\@symdef@pres|, which -% generates the {\omdoc} |symbol| and |presentation| elements (see -% Section~\ref{sec:impl:presentation}). -% \begin{macrocode} -%<*package> -\define@key{DefMathOp}{name}{\def\defmathop@name{#1}} -\newcommand\DefMathOp[2][]{% -\setkeys{DefMathOp}{#1}% -\symdef[#1]{\defmathop@name}{#2}} -% -%<*ltxml> -DefMacro('\DefMathOp OptionalKeyVals:symdef {}', - sub { - my($self,$keyval,$pres)=@_; - my $name = KeyVal($keyval,'name') if $keyval; - #Rewrite this token - my $scopes = $STATE->getActiveScopes; - DefMathRewrite(xpath=>'descendant-or-self::ltx:XMath',match=>ToString($pres), - replace=>sub{ - map {$STATE->activateScope($_);} @$scopes; - $_[0]->absorb(Digest("\\".ToString($name))); - }); - #Invoke symdef - (Invocation(T_CS('\symdef'),$keyval,$name,undef,undef,$pres)->unlist); - }); -DefMacro('\symdef OptionalKeyVals:symdef {}[][]{}', - sub { - my($self,@args)=@_; - ((Invocation(T_CS('\@symdef'),@args)->unlist), - (LookupValue('excluding_modules') ? () - : (Invocation(T_CS('\@symdef@pres'), @args)->unlist))); }); - -#Current list of recognized formatter command sequences: -our @PresFormatters = qw (infix prefix postfix assoc mixfixi mixfixa mixfixii mixfixia mixfixai mixfixaii mixfixiii); -DefPrimitive('\@symdef OptionalKeyVals:symdef {}[][]{}', sub { - my($stomach,$keys,$cs,$nargs,$opt,$presentation)=@_; - my($name,$cd,$role,$bvars,$bvar)=$keys - && map($_ && $_->toString,map($keys->getValue($_), qw(name cd role - bvars bvar))); - $cd = LookupValue('module_cd') unless $cd; - $name = $cs unless $name; - #Store for later lookup - AssignValue("symdef.".ToString($cs).".cd"=>ToString($cd),'global'); - AssignValue("symdef.".ToString($cs).".name"=>ToString($name),'global'); - $nargs = (ref $nargs ? $nargs->toString : $nargs || 0); - my $module = LookupValue('current_module'); - my $scope = (($keys && ($keys->getValue('local') || '' eq 'true')) ? 'module_local' : 'module').":".$module; - - #The DefConstructorI Factory is responsible for creating the \symbol command sequences as dictated by the \symdef - DefConstructorI("\\".$cs->toString,convertLaTeXArgs($nargs,$opt), sub { - my ($document,@args) = @_; - my @props = @args; - my $localpres = $presentation; - @args = splice(@props,0,$nargs); - my %prs = @props; - $prs{isbound} = "BINDER" if ($bvars || $bvar); - my $wrapped; - my $parent=$document->getNode; - if(! defined $parent->lookupNamespacePrefix("http://omdoc.org/ns")){ # namespace not already declared? - $document->getDocument->documentElement->setNamespace("http://omdoc.org/ns","omdoc",0); } - my $symdef_scope=$parent->exists('ancestor::omdoc:rendering'); #Are we in a \symdef rendering? - if (($localpres =~/^LaTeXML::Token/) && $symdef_scope) { - #Note: We should probably ask Bruce whether this maneuver makes sense - # We jump back to digestion, at a processing stage where it has been already completed - # Hence need to reinitialize all scopes and make a new group. This is probably expensive to do. - - my @toks = $localpres->unlist; - while(@toks && $toks[0]->equals(T_SPACE)){ shift(@toks); } # Remove leading space - my $formatters = join("|",@PresFormatters); - $formatters = qr/$formatters/; - $wrapped = (@toks && ($toks[0]->toString =~ /^\\($formatters)$/)); - $localpres = Invocation(T_CS('\@use'),$localpres) unless $wrapped; - # Plug in the provided arguments, doing a nasty reversion: - my @sargs = map (Tokens($_->revert), @args); - $localpres = Tokens(LaTeXML::Expandable::substituteTokens($localpres,@sargs)) if $nargs>0; - #Digest: - my $stomach = $STATE->getStomach; - $stomach->beginMode('inline-math'); - $STATE->activateScope($scope); - use_module($module); - use_module(LookupValue("parent_of_".$module)) if LookupValue("parent_of_".$module); - $localpres=$stomach->digest($localpres); - $stomach->endMode('inline-math'); - } - else { #Some are already digested to Whatsit, usually when dropped from a wrapping constructor - } - if ($nargs == 0) { - if (!$symdef_scope) { #Simple case - discourse flow, only a single XMTok - #Referencing XMTok when not in \symdefs: - $document->insertElement('ltx:XMTok',undef,(name=>$cs->toString, meaning=>$name,omcd=>$cd,role => $role,scriptpos=>$prs{'scriptpos'})); - } - else { - if ($symdef_scope && ($localpres =~/^LaTeXML::Whatsit/) && (!$wrapped)) {#1. Simple case: converts to a single token - $localpres->setProperties((name=>$cs->toString, meaning=>$name,omcd=>$cd,role => $role,scriptpos=>$prs{'scriptpos'})); - } - else { - #Experimental treatment - COMPLEXTOKEN - #$role=$role||'COMPLEXTOKEN'; - #$document->openElement('ltx:XMApp',role=>'COMPLEXTOKEN'); - #$document->insertElement('ltx:XMTok',undef,(name=>$cs->toString, meaning=>$name, omcd=>$cd, role=>$role, scriptpos=>$prs{'scriptpos'})); - #$document->openElement('ltx:XMWrap'); - #$document->absorb($localpres); - #$document->closeElement('ltx:XMWrap'); - #$document->closeElement('ltx:XMApp'); - } - #We need expanded presentation when invoked in \symdef scope: - - #Suppress errors from rendering attributes when absorbing. - #This is bad style, but we have no way around it due to the digestion acrobatics. - my $verbosity = $LaTeXML::Global::STATE->lookupValue('VERBOSITY'); - my $errors = $LaTeXML::Global::STATE->getStatus('error'); - $LaTeXML::Global::STATE->assignValue('VERBOSITY',-5); - - #Absorb presentation: - $document->absorb($localpres); - - #Return to original verbosity and error state: - $LaTeXML::Global::STATE->assignValue('VERBOSITY',$verbosity); - $LaTeXML::Global::STATE->setStatus('error',$errors); - - #Strip all/any wrappers: - #TODO: Ugly LibXML work, possibly do something smarter - my $parent = $document->getNode; - my @renderings=$parent->findnodes(".//omdoc:rendering"); - foreach my $render(@renderings) { - my $content=$render; - while ($content && $content->localname =~/^rendering|[X]?Math/) { - $content = $content->firstChild; - } - my $sibling = $content->parentNode->lastChild; - my $localp = $render->parentNode; - while ((defined $sibling) && (!$sibling->isSameNode($content))) { - my $clone = $sibling->cloneNode(1); - $localp->insertAfter($clone,$render); - $sibling = $sibling->previousSibling; - } - $render->replaceNode($content); - } - } - } - else {#2. Constructors with arguments - if (!$symdef_scope) { #2.1 Simple case, outside of \symdef declarations: - #Referencing XMTok when not in \symdefs: - $document->openElement('ltx:XMApp',scriptpos=>$prs{'scriptpos'},role=>$prs{'isbound'}); - $document->insertElement('ltx:XMTok',undef,(name=>$cs->toString, meaning=>$name, omcd=>$cd, role=>$role, scriptpos=>$prs{'operator_scriptpos'})); - foreach my $carg (@args) { - if ($carg =~/^LaTeXML::Token/) { - my $stomach = $STATE->getStomach; - $stomach->beginMode('inline-math'); - $carg=$stomach->digest($carg); - $stomach->endMode('inline-math'); - } - $document->openElement('ltx:XMArg'); - $document->absorb($carg); - $document->closeElement('ltx:XMArg'); - } - $document->closeElement('ltx:XMApp'); - } - else { #2.2 Complex case, inside a \symdef declaration - #We need expanded presentation when invoked in \symdef scope: - - #Suppress errors from rendering attributes when absorbing. - #This is bad style, but we have no way around it due to the digestion acrobatics. - my $verbosity = $LaTeXML::Global::STATE->lookupValue('VERBOSITY'); - my $errors = $LaTeXML::Global::STATE->getStatus('error'); - $LaTeXML::Global::STATE->assignValue('VERBOSITY',-5); - - #Absorb presentation: - $document->absorb($localpres); - - #Return to original verbosity and error state: - $LaTeXML::Global::STATE->assignValue('VERBOSITY',$verbosity); - $LaTeXML::Global::STATE->setStatus('error',$errors); - - #Strip all/any wrappers: - #TODO: Ugly LibXML work, possibly do something smarter? - my $parent = $document->getNode; - if(! defined $parent->lookupNamespacePrefix("http://omdoc.org/ns")){ # namespace not already declared? - $document->getDocument->documentElement->setNamespace("http://omdoc.org/ns","omdoc",0); } - my @renderings=$parent->findnodes(".//omdoc:rendering"); - foreach my $render(@renderings) { - my $content=$render; - while ($content && $content->localname =~/^rendering|[X]?Math/) { - $content = $content->firstChild; - } - my $sibling = $content->parentNode->lastChild; - my $localp = $render->parentNode; - while ((defined $sibling) && (!$sibling->isSameNode($content))) { - my $clone = $sibling->cloneNode(1); - $localp->insertAfter($clone,$render); - $sibling = $sibling->previousSibling; - } - $render->replaceNode($content); - } - } - }}, - properties => {name=>$cs->toString, meaning=>$name,omcd=>$cd,role => $role}, - scope=>$scope); - return; }); -%%$ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\resymdef} -% We can use this function to redefine our intermediate presentational function inside -% the modules\ednote{We have already prepared the argument parsing for an optional first -% argument, but this is not looked at yet. }\ednote{does not seem to have a {\latexml} -% counterpart yet!} -% \begin{macrocode} -%<*package> -\def\resymdef{\@ifnextchar[{\@resymdef}{\@resymdef[]}} -\def\@resymdef[#1]#2{\@ifnextchar[{\@@resymdef[#1]{#2}}{\@@resymdef[#1]{#2}[0]}} -\def\@@resymdef[#1]#2[#3]#4{\expandafter\renewcommand\csname modules@#2@pres\endcsname[#3]{#4}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\abbrdef} -% The |\abbrdef| macro is a variant of |\symdef| that does the same on the {\LaTeX} -% level. -% \begin{macrocode} -%<*package> -\let\abbrdef\symdef -% -%<*ltxml> -DefPrimitive('\abbrdef OptionalKeyVals:symdef {}[][]{}', sub { - my($stomach,$keys,$cs,$nargs,$opt,$presentation)=@_; - my $module = LookupValue('current_module'); - my $scope = (($keys && ($keys->getValue('local') || '' eq 'true')) ? 'module_local' : 'module').":$module"; - DefMacroI("\\".$cs->toString,convertLaTeXArgs($nargs,$opt),$presentation, - scope=>$scope); - return; }); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Symbol and Concept Names}\label{sec:impl:concepts} -% -% \begin{macro}{\mod@path} -% the |\mod@path| macro is used to remember the local path, so that the |module| -% environment can set it for later cross-referencing of the modules. If |\mod@path| is -% empty, then it signifies the local file. -% \begin{macrocode} -%<*package> -\def\mod@path{} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\termdef} -% \begin{macrocode} -%<*package> -\def\mod@true{true} -\addmetakey[false]{termdef}{local} -\addmetakey{termdef}{name} -\newcommand{\termdef}[3][]{\metasetkeys{termdef}{#1}% -\expandafter\mod@newcommand\csname#2\endcsname[0]{#3\xspace} -\ifx\termdef@local\mod@true\else% -\@ifundefined{mod@id}{}{\expandafter\g@addto@macro\this@module% -{\expandafter\mod@newcommand\csname#2\endcsname[0]{#3\xspace}}} -\fi} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\capitalize} -% \begin{macrocode} -%<*package> -\def\@captitalize#1{\uppercase{#1}} -\newcommand\capitalize[1]{\expandafter\@captitalize #1} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@termref} -% |\mod@termref{|\meta{module}|}{|\meta{name}|}{|\meta{nl}|}| determines whether the -% macro |\|\meta{module}|@cd@file@base| is defined. If it is, we make it the prefix of a -% URI reference in the local macro |\@uri|, which we compose to the hyper-reference, -% otherwise we give a warning. -% \begin{macrocode} -%<*package> -\def\mod@termref#1#2#3{\def\@test{#3} -\@ifundefined{#1@cd@file@base} - {\protect\G@refundefinedtrue - \@latex@warning{\protect\termref with unidentified cd "#1": the cd key must - reference an active module} - \def\@label{sref@#2 @target}} - {\def\@label{sref@#2@#1@target}}% -\expandafter\ifx\csname #1@cd@file@base\endcsname\@empty% local reference -\sref@hlink@ifh{\@label}{\ifx\@test\@empty #2\else #3\fi}\else% -\def\@uri{\csname #1@cd@file@base\endcsname.pdf\#\@label}% -\sref@href@ifh{\@uri}{\ifx\@test\@empty #2\else #3\fi}\fi} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Dealing with Multiple Files}\label{sec:impl:multiple} -% -% Before we can come to the functionality we want to offer, we need some auxiliary -% functions that deal with path names. -% -% \subsubsection{Simplifying Path Names} -% -% The |\mod@simplify| macro is used for simplifying -% path names by removing \meta{xxx}|/..| from a string. eg: -% \meta{aaa}|/|\meta{bbb}|/../|\meta{ddd} goes to \meta{aaa}|/|\meta{ddd} unless -% \meta{bbb} is |..|. This is used to normalize relative path names below. -% -% \begin{macro}{\mod@simplify} -% The macro |\mod@simplify| recursively runs over the path collecting the result in the -% internal |\mod@savedprefix| macro. -% \begin{macrocode} -%<*package> -\def\mod@simplify#1{\expandafter\mod@simpl#1/\relax} -% \end{macrocode} -% It is based on the |\mod@simpl| macro\ednote{what does the mod@blaaa do?} -% \begin{macrocode} -\def\mod@simpl#1/#2\relax{\def\@second{#2}% -\ifx\mod@blaaaa\@empty\edef\mod@savedprefix{}\def\mod@blaaaa{aaa}\else\fi% -\ifx\@second\@empty\edef\mod@savedprefix{\mod@savedprefix#1}% -\else\mod@simplhelp#1/#2\relax\fi} -% \end{macrocode} -% which in turn is based on a helper macro -% \begin{macrocode} -\def\mod@updir{..} -\def\mod@simplhelp#1/#2/#3\relax{\def\@first{#1}\def\@second{#2}\def\@third{#3}% -%\message{mod@simplhelp: first=\@first, second=\@second, third=\@third, result=\mod@savedprefix.} -\ifx\@third\@empty% base case -\ifx\@second\mod@updir\else% -\ifx\mod@second\@empty\edef\mod@savedprefix{\mod@savedprefix#1}% -\else\edef\mod@savedprefix{\mod@savedprefix#1/#2}% -\fi% -\fi% -\else% -\ifx\@first\mod@updir% -\edef\mod@savedprefix{\mod@savedprefix#1/}\mod@simplhelp#2/#3\relax% -\else% -\ifx\@second\mod@updir\mod@simpl#3\relax% -\else\edef\mod@savedprefix{\mod@savedprefix#1/}\mod@simplhelp#2/#3\relax% -\fi% -\fi% -\fi}% -% -% \end{macrocode} -% \end{macro} -% -% We directly test the simplification: \makeatletter -% \def\mod@simpl@test#1{\def\mod@savedprefix{}\mod@simplify{#1}\mod@savedprefix} -% \begin{center} -% \begin{tabular}{|l|l|l|}\hline -% source & result & should be \\\hline\hline -% ../../aaa & \mod@simpl@test{../../aaa} & ../../aaa\\\hline -% aaa/bbb & \mod@simpl@test{aaa/bbb} & aaa/bbb\\\hline -% aaa/.. & \mod@simpl@test{aaa/..} & \\\hline -% ../../aaa/bbb & \mod@simpl@test{../../aaa/bbb} & ../../aaa/bbb\\\hline -% ../aaa/../bbb & \mod@simpl@test{../aaa/../bbb} & ../bbb\\\hline -% ../aaa/bbb & \mod@simpl@test{../aaa/bbb} & ../aaa/bbb\\\hline -% aaa/bbb/../ddd & \mod@simpl@test{aaa/bbb/../ddd} & aaa/ddd\\\hline -% \end{tabular} -% \end{center} -% \makeatother -% -% \begin{macro}{\defpath} -% \begin{macrocode} -%<*package> -\newcommand{\defpath}[2]{\expandafter\newcommand\csname #1\endcsname[1]{#2/##1}} -% -%<*ltxml> -DefMacro('\defpath{}{}', sub { - my ($gullet,$arg1,$arg2)=@_; - $arg1 = ToString($arg1); - $arg2 = ToString($arg2); - my $paths = LookupValue('defpath')||{}; - $$paths{"$arg1"}=$arg2; - AssignValue('defpath'=>$paths,'global'); - DefMacro('\\'.$arg1.' Semiverbatim',$arg2."/#1"); - });#$ -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Loading Module Signatures} -% -% We will need a switch\ednote{explain why?} -% \begin{macrocode} -%<*package> -\newif\ifmodules -% \end{macrocode} -% and a ``registry'' macro whose expansion represents the list of added macros (or files) -% \begin{macro}{\mod@reg} -% We initialize the |\mod@reg| macro with the empty string. -% \begin{macrocode} -\gdef\mod@reg{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@update} -% This macro provides special append functionality. It takes a string and appends it -% to the expansion of the |\mod@reg| macro in the following way: |string@\mod@reg|. -% \begin{macrocode} -\def\mod@update#1{\ifx\mod@reg\@empty\xdef\mod@reg{#1}\else\xdef\mod@reg{#1@\mod@reg}\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@check} -% The |\mod@check| takes as input a file path (arg 3), and searches the registry. If the -% file path is not in the registry it means it means it has not been already added, so -% we make |\ifmodules| true, otherwise make |\ifmodules| false. The macro |\mod@search| -% will look at |\ifmodules| and update the registry for |\modulestrue| or do nothing for -% |\modulesfalse|. -% \begin{macrocode} -\def\mod@check#1@#2///#3\relax{% -\def\mod@one{#1}\def\mod@two{#2}\def\mod@three{#3}% -% \end{macrocode} -% Define a few intermediate macros so that we can split the registry into separate file -% paths and compare to the new one -% \begin{macrocode} -\expandafter% -\ifx\mod@three\mod@one\modulestrue% -\else% -\ifx\mod@two\@empty\modulesfalse\else\mod@check#2///#3\relax\fi% -\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@search} -% Macro for updating the registry after the execution of |\mod@check| -% \begin{macrocode} -\def\mod@search#1{% -% \end{macrocode} -% We put the registry as the first argument for |\mod@check| and the other -% argument is the new file path. -% \begin{macrocode} -\modulesfalse\expandafter\mod@check\mod@reg @///#1\relax% -% \end{macrocode} -% We run |\mod@check| with these arguments and the check |\ifmodules| for -% the result -% \begin{macrocode} -\ifmodules\else\mod@update{#1}\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@reguse} -% The macro operates almost as the |mod@search| function, but it does not update the -% registry. Its purpose is to check whether some file is or not inside the registry but -% without updating it. Will be used before deciding on a new sms file -% \begin{macrocode} -\def\mod@reguse#1{\modulesfalse\expandafter\mod@check\mod@reg @///#1\relax} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@prefix} -% This is a local macro for storing the path prefix, we initialize it as the empty -% string. -% \begin{macrocode} -\def\mod@prefix{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@updatedpre} -% This macro updates the path prefix |\mod@prefix| with the last word in the path given -% in its argument. -% \begin{macrocode} -\def\mod@updatedpre#1{% -\edef\mod@prefix{\mod@prefix\mod@pathprefix@check#1/\relax}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@pathprefix@check} -% |\mod@pathprefix@check| returns the last word in a string composed of words separated -% by slashes -% \begin{macrocode} -\def\mod@pathprefix@check#1/#2\relax{% -\ifx\\#2\\% no slash in string -\else\mod@ReturnAfterFi{#1/\mod@pathprefix@help#2\relax}% -\fi} -% \end{macrocode} -% It needs two helper macros: -% \begin{macrocode} -\def\mod@pathprefix@help#1/#2\relax{% -\ifx\\#2\\% end of recursion -\else\mod@ReturnAfterFi{#1/\mod@pathprefix@help#2\relax}% -\fi} -\long\def\mod@ReturnAfterFi#1\fi{\fi#1} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@pathpostfix@check} -% |\mod@pathpostfix@check| takes a string composed of words separated by slashes and -% returns the part of the string until the last slash -% \begin{macrocode} -\def\mod@pathpostfix@check#1/#2\relax{% slash -\ifx\\#2\\%no slash in string -#1\else\mod@ReturnAfterFi{\mod@pathpostfix@help#2\relax}% -\fi} -% \end{macrocode} -% Helper function for the |\pathpostfix@check| macro defined above -% \begin{macrocode} -\def\mod@pathpostfix@help#1/#2\relax{% -\ifx\\#2\\% -#1\else\mod@ReturnAfterFi{\mod@pathpostfix@help#2\relax}% -\fi} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@updatedpost} -% This macro updates |\mod@savedprefix| with leading path (all but the last word) in the path given -% in its argument. -% \begin{macrocode} -\def\mod@updatedpost#1{% -\edef\mod@savedprefix{\mod@savedprefix\mod@pathpostfix@check#1/\relax}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mod@updatedsms} -% Finally: A macro that will add a |.sms| extension to a path. Will be used when adding a |.sms| file -% \begin{macrocode} -\def\mod@updatesms{\edef\mod@savedprefix{\mod@savedprefix.sms}} -% -% \end{macrocode} -% \end{macro} -% -% \subsubsection{Selective Inclusion} -% -% \begin{macro}{\requiremodules} -% \begin{macrocode} -%<*package> -\newcommand{\requiremodules}[1]{% -{\mod@updatedpre{#1}% add the new file to the already existing path -\let\mod@savedprefix\mod@prefix% add the path to the new file to the prefix -\mod@updatedpost{#1}% -\def\mod@blaaaa{}% macro used in the simplify function (remove .. from the prefix) -\mod@simplify{\mod@savedprefix}% remove |xxx/..| from the path (in case it exists) -\mod@reguse{\mod@savedprefix}% -\ifmodules\else% -\mod@updatesms% update the file to contain the .sms extension -\let\newreg\mod@reg% use to compare, in case the .sms file was loaded before -\mod@search{\mod@savedprefix}% update registry -\ifx\newreg\mod@reg\else\input{\mod@savedprefix}\fi% check if the registry was updated and load if necessary -\fi}} -% -%<*ltxml> -DefPrimitive('\requiremodules{}', sub { - my($stomach,$module)=@_; - my $GULLET = $stomach->getGullet; - $module = Digest($module)->toString; - if(LookupValue('file_'.$module.'_loaded')) {} - else { - AssignValue('file_'.$module.'_loaded' => 1, 'global'); - $stomach->bgroup; - AssignValue('last_module_path', $module); - $GULLET->unread(T_CS('\end@requiredmodule')); - AssignValue('excluding_modules' => 1); - $GULLET->input($module,['sms']); - } - return;}); - -DefPrimitive('\end@requiredmodule{}',sub { - #close the group - $_[0]->egroup; - #print STDERR "END: ".ToString(Digest($_[1])->toString); - #Take care of any imported elements in this current module by activating it and all its dependencies - #print STDERR "Important: ".ToString(Digest($_[1])->toString)."\n"; - use_module(ToString(Digest($_[1])->toString)); - return; });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sinput} -% \begin{macrocode} -%<*package> -\def\sinput#1{ -{\mod@updatedpre{#1}% add the new file to the already existing path -\let\mod@savedprefix\mod@prefix% add the path to the new file to the prefix -\mod@updatedpost{#1}% -\def\mod@blaaaa{}% macro used in the simplify function (remove .. from the prefix) -\mod@simplify{\mod@savedprefix}% remove |xxx/..| from the path (in case it exists) -\mod@reguse{\mod@savedprefix}% -\let\newreg\mod@reg% use to compare, in case the .sms file was loaded before -\mod@search{\mod@savedprefix}% update registry -\ifx\newreg\mod@reg%\message{This file has been previously introduced} -\else\input{\mod@savedprefix}% -\fi}} -% -%<*ltxml> -DefPrimitive('\sinput Semiverbatim', sub { - my($stomach,$module)=@_; - my $GULLET = $stomach->getGullet; - $module = Digest($module)->toString; - AssignValue('file_'.$module.'_loaded' => 1, 'global'); - $stomach->bgroup; - AssignValue('last_module_path', $module); - $GULLET->unread(Invocation(T_CS('\end@requiredmodule'),T_OTHER($module))->unlist); - $GULLET->input($module,['tex']); - return;});#$ -% -% \end{macrocode} -% \end{macro} -% \ednote{the sinput macro is just faked, it should be more like requiremodules, except -% that the tex file is inputted; I wonder if this can be simplified.} -% -% \begin{macrocode} -%<*package> -\let\sinputref=\sinput -\let\inputref=\input -% -%<*ltxml> -DefConstructor('\sinputref{}',""); -DefConstructor('\inputref{}',""); -% -% \end{macrocode} -% -% \subsubsection{Generating {\texorpdfstring\omdoc{OMDoc}} Presentation Elements}\label{sec:impl:presentation} -% -% Additional bundle of code to generate presentation encodings. Redefined to an expandable -% (macro) so that we can add conversions. -% -% \begin{macrocode} -%<*ltxml> -DefMacro('\@symdef@pres OptionalKeyVals:symdef {}[][]{}', sub { - my($self,$keys, $cs,$nargs,$opt,$presentation)=@_; - - my($name,$cd,$role)=$keys - && map($_ && $_->toString,map($keys->getValue($_), qw(name cd role))); - $cd = LookupValue('module_cd') unless $cd; - $name = $cs unless $name; - AssignValue('module_name'=>$name) if $name; - $nargs = 0 unless ($nargs); - my $nargkey = ToString($name).'_args'; - AssignValue($nargkey=>ToString($nargs)) if $nargs; - $name=ToString($name); - - Invocation(T_CS('\@symdef@pres@aux'), - $cs, - ($nargs || Tokens(T_OTHER(0))), - symdef_presentation_pmml($cs,ToString($nargs)||0,$presentation), -# symdef_presentation_TeX($presentation), - (Tokens(T_OTHER($name))), - (Tokens(T_OTHER($cd))), - $keys)->unlist; });#$ -% \end{macrocode} -% Generate the expansion of a symdef's macro using special arguments. -% -% Note that the |symdef_presentation_pmml| subroutine is responsible for preserving the -% rendering structure of the original definition. Hence, we keep a -% collection of all known formatters in the |@PresFormatters| array, -% which should be updated whenever the list of allowed formatters has -% been altered. -% -% \begin{macrocode} -sub symdef_presentation_pmml { - my($cs,$nargs,$presentation)=@_; - my @toks = $presentation->unlist; - while(@toks && $toks[0]->equals(T_SPACE)){ shift(@toks); } # Remove leading space - $presentation = Tokens(@toks); - # Wrap with \@use, unless already has a recognized formatter. - my $formatters = join("|",@PresFormatters); - $formatters = qr/$formatters/; - $presentation = Invocation(T_CS('\@use'),$presentation) - unless (@toks && ($toks[0]->toString =~ /^\\($formatters)$/)); - # Low level substitution. - my @args = map(Invocation(T_CS('\@SYMBOL'),T_OTHER("arg:".($_))),1..$nargs); - $presentation = Tokens(LaTeXML::Expandable::substituteTokens($presentation,@args)); - $presentation; }#$ -% \end{macrocode} -% The |\@use| macro just generates the contents of the notation element -% \begin{macrocode} -sub getSymmdefProperties { - my $cd = LookupValue('module_cd'); - my $name = LookupValue('module_name'); - my $nargkey = ToString($name).'_args'; - my $nargs = LookupValue($nargkey); - $nargs = 0 unless ($nargs); - my %props = ('cd'=>$cd,'name'=>$name,'nargs'=>$nargs); - return %props;} -DefConstructor('\@use{}', sub{ - my ($document,$args,%properties) = @_; - #Notation created at \@symdef@pres@aux - #Create the rendering: - $document->openElement('omdoc:rendering'); - $document->openElement('ltx:Math'); - $document->openElement('ltx:XMath'); - if ($args->isMath) {$document->absorb($args);} - else { $document->insertElement('ltx:XMText',$args);} - $document->closeElement('ltx:XMath'); - $document->closeElement('ltx:Math'); - $document->closeElement('omdoc:rendering'); -}, -properties=>sub { getSymmdefProperties($_[1]);}, - mode=>'inline_math'); -% \end{macrocode} -% The |get_cd| procedure reads of the cd from our list of keys. -% \begin{macrocode} -sub get_cd { - my($name,$cd,$role)=@_; - return $cd;} -% \end{macrocode} -% The |\@symdef@pres@aux| creates the |symbol| element and the outer layer of the of the -% |notation| element. The content of the latter is generated by applying the {\latexml} to -% the definiens of the |\symdef| form. -% \begin{macrocode} -DefConstructor('\@symdef@pres@aux{}{}{}{}{} OptionalKeyVals:symdef', sub { - my ($document,$cs,$nargs,$pmml,$name,$cd,$keys)=@_; - my $assocarg = ToString($keys->getValue('assocarg')) if $keys; - $assocarg = $assocarg||"0"; - my $bvars = ToString($keys->getValue('bvars')) if $keys; - $bvars = $bvars||"0"; - my $bvar = ToString($keys->getValue('bvar')) if $keys; - $bvar = $bvar||"0"; - my $appElement = 'om:OMA'; $appElement = 'om:OMBIND' if ($bvars || $bvar); - - $document->insertElement("omdoc:symbol",undef,(name=>$cs,"xml:id"=>ToString($cs).".sym")); - $document->openElement("omdoc:notation",(name=>$name,cd=>$cd)); - #First, generate prototype: - $nargs = ToString($nargs)||0; - $document->openElement('omdoc:prototype'); - $document->openElement($appElement) if $nargs; - my $cr="fun" if $nargs; - $document->insertElement('om:OMS',undef, - (cd=>$cd, - name=>$name, - "cr"=>$cr)); - if ($bvar || $bvars) { - $document->openElement('om:OMBVAR'); - if ($bvar) { - $document->insertElement('omdoc:expr',undef,(name=>"arg$bvar")); - } else { - $document->openElement('omdoc:exprlist',(name=>"args")); - $document->insertElement('omdoc:expr',undef,(name=>"arg")); - $document->closeElement('omdoc:exprlist'); - } - $document->closeElement('om:OMBVAR'); - } - for my $id(1..$nargs) { - next if ($id==$bvars || $id==$bvar); - if ($id!=$assocarg) { - my $argname="arg$id"; - $document->insertElement('omdoc:expr',undef,(name=>"$argname")); - } - else { - $document->openElement('omdoc:exprlist',(name=>"args")); - $document->insertElement('omdoc:expr',undef,(name=>"arg")); - $document->closeElement('omdoc:exprlist'); - } - } - $document->closeElement($appElement) if $nargs; - $document->closeElement('omdoc:prototype'); - #Next, absorb rendering: - $document->absorb($pmml); - $document->closeElement("omdoc:notation"); - }, afterDigest=>sub { my ($stomach, $whatsit) = @_; - my $keys = $whatsit->getArg(6); - my $module = LookupValue('current_module'); - $whatsit->setProperties(for=>ToString($whatsit->getArg(1))); - $whatsit->setProperty(role=>($keys ? $keys->getValue('role') - : (ToString($whatsit->getArg(2)) ? 'applied' - : undef))); }); -% \end{macrocode} -% Convert a macro body (tokens with parameters |#1|,..) into a Presentation |style=TeX| form. -% walk through the tokens, breaking into chunks of neutralized (|T_OTHER|) tokens and -% parameter specs. -% \begin{macrocode} -sub symdef_presentation_TeX { - my($presentation)=@_; - my @tokens = $presentation->unlist; - my(@frag,@frags) = (); - while(my $tok = shift(@tokens)){ - if($tok->equals(T_PARAM)){ - push(@frags,Invocation(T_CS('\@symdef@pres@text'),Tokens(@frag))) if @frag; - @frag=(); - my $n = shift(@tokens)->getString; - push(@frags,Invocation(T_CS('\@symdef@pres@arg'),T_OTHER($n+1))); } - else { - push(@frag,T_OTHER($tok->getString)); }} # IMPORTANT! Neutralize the tokens! - push(@frags,Invocation(T_CS('\@symdef@pres@text'),Tokens(@frag))) if @frag; - Tokens(map($_->unlist,@frags)); } -DefConstructor('\@symdef@pres@arg{}', "", - afterDigest=>sub { my ($stomach, $whatsit) = @_; - my $select = $whatsit->getArg(1); - $select = ref $select ? $select->toString : ''; - $whatsit->setProperty(select=>"*[".$select."]"); }); -DefConstructor('\@symdef@pres@text{}', "#1"); -%#$ -% \end{macrocode} -% -% -% \subsection{Including Externally Defined Semantic Macros }\label{sec:impl:packages} -% -% \begin{macro}{\requirepackage} -% \begin{macrocode} -%<*package> -\def\requirepackage#1#2{\makeatletter\input{#1.sty}\makeatother} -% -%<*ltxml> -DefConstructor('\requirepackage{} Semiverbatim',"", - afterDigest=>sub { my ($stomach, $whatsit) = @_; - my $select = $whatsit->getArg(1); - RequirePackage($select->toString); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Views}\label{sec:impl:views} -% -% \begin{macrocode} -%<*package> -\srefaddidkey{view} -\addmetakey{view}{from} -\addmetakey{view}{to} -\addmetakey*{view}{title} -\ifmod@show -\newsavebox{\viewbox} -\newcounter{view}[section] -\def\view@heading{{\textbf{View} \thesection.\theview} - \sref@label@id{View \thesection.\theproblem} - \@ifundefined{view@title}{:\quad}{\quad(\view@title)\hfill\\}} -\newenvironment{view}[1][]{\metasetkeys{view}{#1}\sref@target\stepcounter{view} -\begin{lrbox}{\viewbox}\begin{minipage}{.9\textwidth}\importmodule{\view@to}} -{\end{minipage}\end{lrbox} -\setbox0=\hbox{\begin{minipage}{.9\textwidth}% -\noindent\view@heading\rm% -\end{minipage}} -\smallskip\noindent\fbox{\vbox{\box0\vspace*{.2em}\usebox\viewbox}}\smallskip} -\else\newxcomment[]{view}\fi -\def\vassign#1#2{#1\ensuremath{\mapsto #2}} -% -% \end{macrocode} -% -% \subsection{Deprecated Functionality}\label{sec:impl:deprecated} -% -% In this section we centralize old interfaces that are only partially supported any more. -% \begin{macro}{module:uses} -% For each the module name |xxx| specified in the |uses| key, we activate their symdefs -% and we export the local symdefs.\ednote{this issue is deprecated, it will be removed -% before 1.0.} -% \begin{macrocode} -%<*package> -\define@key{module}{uses}{% -\@for\module@tmp:=#1\do{\activate@defs\module@tmp\export@defs\module@tmp}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{module:usesqualified} -% This option operates similarly to the module:uses option defined above. The only -% difference is that here we import modules with a prefix. This is useful when two -% modules provide a macro with the same name. -% \begin{macrocode} -%<*package> -\define@key{module}{usesqualified}{% -\@for\module@tmp:=#1\do{\activate@defs{qualified@\module@tmp}\export@defs\module@tmp}} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Providing IDs for {\omdoc} Elements}\label{sec:impl:ids} -% -% To provide default identifiers, we tag all {\omdoc} elements that allow |xml:id| -% attributes by executing the |numberIt| procedure below. -% -% \begin{macrocode} -%<*ltxml> -Tag('omdoc:recurse',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:imports',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:theory',afterOpen=>\&numberIt,afterClose=>\&locateIt); -% -% \end{macrocode} -% -% \subsection{Experiments} -% In this section we develop experimental functionality. Currently support for complex -% expressions, see -% \url{https://svn.kwarc.info/repos/stex/doc/blue/comlex_semmacros/note.pdf} for details. -% -% \begin{macro}{\csymdef} -% For the {\LaTeX} we use |\symdef| and forget the last argument. The code here is just -% needed for parsing the (non-standard) argument structure. -% \begin{macrocode} -%<*package> -\def\csymdef{\@ifnextchar[{\@csymdef}{\@csymdef[]}} -\def\@csymdef[#1]#2{\@ifnextchar[{\@@csymdef[#1]{#2}}{\@@csymdef[#1]{#2}[0]}} -\def\@@csymdef[#1]#2[#3]#4#5{\@@symdef[#1]{#2}[#3]{#4}} -% -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\notationdef} -% For the {\LaTeX} side, we just make |\notationdef| invisible. -% \begin{macrocode} -%<*package> -\def\notationdef[#1]#2#3{} -% -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Finale} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% -% \Finale -\endinput -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% LocalWords: GPL structuresharing STR dtx env envfalse idfalse displayfalse -% LocalWords: usesfalse usesqualified usesqualifiedfalse envtrue idtrue CPERL -% LocalWords: usestrue displaytrue usesqualifiedtrue RequirePackage keyval tmp -% LocalWords: defs foreach LookupValue activateScope DefEnvironment keyvals cd -% LocalWords: OptionalKeyVals getValue toString AssignValue openElement omdoc -% LocalWords: closeElement beforeDigest useTheoryItemizations afterDigestBegin -% LocalWords: whatsit setProperty getArg qw symdef iffalse importOMDocmodule -% LocalWords: DefKeyVal Semiverbatim symdeflocal atqualified DefMacro STDERR -% LocalWords: args unlist DefPrimitive nargs Stringify eq attr omcd ltx XMTok -% LocalWords: DefConstructorI convertLaTeXArgs scriptpos XMApp OMA XMArg simpl -% LocalWords: DefMacroI blaaaa savedprefix aaa simplhelp tust tist tost reguse -% LocalWords: updatedpre ReturnAfterFi updateall updatedpost updatesms bgroup -% LocalWords: texclude tinclude getGullet requiredmodule tex sms egroup pmml -% LocalWords: toks mixfixi mixfixa mixfixii mixfixia mixfixai mixfixiii arg cr -% LocalWords: DefConstructor afterDigest setProperties undef tok PARAM locator -% LocalWords: getString showfalse showtrue xcomment stex srcref KeyVal omext -% LocalWords: beginItemize getProperty introdcue afterOpen numberIt Tokenize -% LocalWords: OptionalSemiverbatim omdocmod PushValue assocarg getStomach prs -% LocalWords: begingroup beginMode endMode endgroup insertElement resymdef sym -% LocalWords: updir nargkey PresFormatters mixfixaii formatters argname expr -% LocalWords: getSymmdefProperties XMath mcdcr exprlist recurse texttt scsys -% LocalWords: textbackslash newcommand providecommand sc sc mathml openmath nx -% LocalWords: latexml cmathml activemath twintoo atwin atwintoo mathcal Deyan -% LocalWords: mathcal fileversion Ginev maketitle newpage infty ulsmf08 exfig -% LocalWords: omsemmac lstset basicstyle scriptsize aboveskip belowskip hline -% LocalWords: morekeywords lstlisting csymbol showviews showviews foo exf cseq -% LocalWords: qualifiedimports qualifiedimports termdef textbf filepath RabKoh -% LocalWords: symname varSmoothfunctionsOn ednote abbrdef Sumfromto semmodule -% LocalWords: vspace hrule vspace arith arbitraryn xbool oplus xdisjunction tw -% LocalWords: emph captitalize ldots termref termref symref symref ctancite nc -% LocalWords: smms hyperref RahObe hmlmh10 widehat texmf.cnf requiremodules cs -% LocalWords: sinput sinputref sinputref defpath defpath defpath cname csname -% LocalWords: OPhats usepackage importqualified Crossreferencing jobname ltxml -% LocalWords: jobname printbibliography textsf langle textsf langle textlangle -% LocalWords: textrangle textlangle newif ifmod qualifiedfalse qualifiedtrue -% LocalWords: sref xspace expandafter noexpand endcsname namedef setkeys ifx -% LocalWords: newenvironment parentmod usemodule ifundefined coolurion cooluri -% LocalWords: coolurioff cwd ouri ifdefinable testopt ifnextchar xargdef bvars -% LocalWords: argdef yargdef somefunction symdeflocaltrue bvar xpath assoc qr -% LocalWords: symdeflocalfalse localpres isbound symdefs COMPLEXTOKEN localp -% LocalWords: findnodes localname carg renewcommand bbb -% LocalWords: refundefinedtrue subsubsection blaaa makeatletter makeatother rm -% LocalWords: ifmodules gdef xdef xdef modulestrue modulesfalse pathpostfix -% LocalWords: updatedsms newreg xref texorpdfstring srefaddidkey newsavebox -% LocalWords: viewbox newcounter thesection theview theproblem hfill lrbox -% LocalWords: stepcounter textwidth hbox noindent smallskip fbox vbox usebox -% LocalWords: smallskip newxcomment vassign ensuremath mapsto doctex tocdepth -% LocalWords: setcounter tableofcontents mathbb diff --git a/Master/texmf-dist/source/latex/stex/omdoc/omdoc.dtx b/Master/texmf-dist/source/latex/stex/omdoc/omdoc.dtx deleted file mode 100644 index 8a844940e3b..00000000000 --- a/Master/texmf-dist/source/latex/stex/omdoc/omdoc.dtx +++ /dev/null @@ -1,751 +0,0 @@ -% \iffalse meta-comment -% A LaTeX Class and Package for OMDoc Document Structures -% Copyright (c) 2009 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/omdoc/omdoc.dtx $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{omdoc}[2010/06/25 v1.0 OMDoc document Structure] -%\ProvidesClass{omdoc}[2010/06/25 v1.0 OMDoc Documents] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,omdoc,omtext,float} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: omdoc.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/omdoc/omdoc.dtx $ -\usepackage{stex-logo} -\usepackage{../ctansvn} -\usepackage{hyperref} -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{omdoc.dtx}\end{document} -% -% \fi -% -%\iffalse\CheckSum{275}\fi -% -% \changes{v0.1}{2006/1/17}{First Version} -% \changes{v0.2}{2006/7/11}{added OMDoc class} -% \changes{v0.3}{2007/09/09}{moved omtext and friends here from the statements package} -% \changes{v0.4}{2008/09/06}{added quotes} -% \changes{v0.5}{2008/03/28}{more package/class options} -% \changes{v0.7}{2009/11/24}{giving keyval arguments to the document environment} -% \changes{v1.0}{2010/05/25}{separated out \texttt{omtext.dtx}} -% -% -% \GetFileInfo{omdoc.sty} -% -% \MakeShortVerb{\|} -% -% \def\omdoc{OMDoc} -% \def\latexml{{\LaTeX}ML} -% \title{{\texttt{omdoc.sty/cls}}: Semantic Markup for Open Mathematical Documents in {\LaTeX}\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |omdoc| package is part of the {\sTeX} collection, a version of {\TeX/\LaTeX} that -% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document -% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical -% knowledge management (MKM). -% -% This package supplies an infrastructure for writing {\omdoc} documents in {\LaTeX}. -% This includes a simple structure sharing mechanism for {\sTeX} that allows to to move -% from a copy-and-paste document development model to a copy-and-reference model, which -% conserves space and simplifies document management. The augmented structure can be -% used by MKM systems for added-value services, either directly from the {\sTeX} -% sources, or after translation. -% \end{abstract} -% -%\newpage\tableofcontents\newpage -% -%\begin{omgroup}[id=sec:STR]{Introduction} -% -% The |omdoc| package supplies macros and environment that allow to label document -% fragments and to reference them later in the same document or in other documents. In -% essence, this enhances the document-as-trees model to -% documents-as-directed-acyclic-graphs (DAG) model. This structure can be used by MKM -% systems for added-value services, either directly from the {\sTeX} sources, or after -% translation. Currently, trans-document referencing provided by this package can only -% be used in the {\sTeX} collection. -% -% {\sTeX} is a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents -% semantically without leaving the document format, essentially turning {\TeX/\LaTeX} -% into a document format for mathematical knowledge management (MKM). The package -% supports direct translation to the {\omdoc} format~\cite{Kohlhase:omdoc1.2} -% -% DAG models of documents allow to replace the ``Copy and Paste'' in the source document -% with a label-and-reference model where document are shared in the document source and -% the formatter does the copying during document formatting/presentation.\ednote{talk -% about the advantages and give an example.}\ednote{is there a way to load documents at -% URIs in LaTeX?}\ednote{integrate with latexml's XMRef in the Math mode.} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user]{The User Interface}\ -% -% The |omdoc| package generates four files: |omdoc.cls|, |omdoc.sty| and their {\latexml} -% bindings |omdoc.cls.ltxml| and |omdoc.sty.ltxml|. We keep the corresponding code -% fragments together, since the documentation applies to both of them and to prevent them -% from getting out of sync. The {\omdoc} class is a minimally changed variant of the -% standard |article| class that includes the functionality provided by |omdoc.sty|. Most -% importantly, |omdoc.cls| sets up the {\latexml} infrastructure and thus should be used -% if {\omdoc} is to be generated from the {\sTeX} sources. The rest of the documentation -% pertains to the functionality introduced by |omdoc.sty|. -% -% \begin{omgroup}[id=sec:user:options]{Package and Class Options} -% -% |omdoc.sty| has the \DescribeMacro{noindex}|noindex| package option, which allows to -% suppress the creation of index entries. The \DescribeMacro{extrefs} option can be set -% to activate multifile support, see~\ctancite{Kohlhase:sref} for details. -% -% |omdoc.cls| accepts all options of the |omdoc.sty| (see~\sref{sec:user:options}) and -% |article.cls| and just passes them on to these. \ednote{describe them} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:struct]{Document Structure} -% -% The top-level \DescribeEnv{document}|document| environment is augmented with an -% optional key/value argument that can be used to give metadata about the document. For -% the moment only the \DescribeMacro{id}|id| key is used to give an identifier to the -% \texttt{omdoc} element resulting from the {\latexml} transformation. -% -% \DescribeEnv{omgroup} The structure of the document is given by the |omgroup| -% environment just like in {\omdoc}. In the {\LaTeX} route, the |omgroup| environment is -% flexibly mapped to sectioning commands, inducing the proper sectioning level from the -% nesting of |omgroup| environments. Correspondingly, the |omgroup| environment takes an -% optional key/value argument for metadata followed by a regular argument for the -% (section) title of the omgroup. The optional metadata argument has the keys -% \DescribeMacro{id}|id| for an identifier, \DescribeMacro{creators}|creators| and -% \DescribeMacro{contributors}|contributors| for the Dublin Core -% metadata~\cite{DCMI:dmt03}; see~\ctancite{Kohlhase:dcm} for details of the format. The -% \DescribeMacro{short}|short| allows to give a short title for the generated section. -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:ignore]{Ignoring Inputs} -% -% The \DescribeEnv{ignore}|ignore| environment can be used for hiding text parts from the -% document structure. The body of the environment is not PDF or DVI output unless the -% \DescribeMacro{showignores}|showignores| option is given to the |omdoc| class or -% |package|. But in the generated {\omdoc} result, the body is marked up with a |ignore| -% element. This is useful in two situations. For -% \begin{description} -% \item[editing] One may want to hide unfinished or obsolete parts of a document -% \item[narrative/content markup] In {\stex} we mark up narrative-structured documents. In -% the generated {\omdoc} documents we want to be able to cache content objects that are -% not directly visible. For instance in the |statements| -% package~\ctancite{Kohlhase:smms} we use the |\inlinedef| macro to mark up -% phrase-level definitions, which verbalize more formal definitions. The latter can be -% hidden by an ignore and referenced by the |verbalizes| key in |\inlinedef|. -% \end{description} -% -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:sharing]{Structure Sharing} -% -% \DescribeMacro{\STRlabel}\DescribeMacro{\STRcopy} The |\STRlabel| macro takes two -% arguments: a label and the content and stores the the content for later use by -% |\STRcopy{label}|, which expands to the previously stored content. -% -% \DescribeMacro{\STRsemantics} The |\STRlabel| macro has a variant |\STRsemantics|, where -% the label argument is optional, and which takes a third argument, which is ignored in -% {\LaTeX}. This allows to specify the meaning of the content (whatever that may mean) in -% cases, where the source document is not formatted for presentation, but is transformed -% into some content markup format. \ednote{make an example} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:colors]{Colors} -% -% For convenience, the |omdoc| package defines a couple of color macros for the |color| -% package: For instance \DescribeMacro{\blue}|\blue| abbreviates |\textcolor{blue}|, so -% that |\blue{|\meta{something}|}| writes \meta{something} in blue. The macros -% \DescribeMacro{\red}|\red| \DescribeMacro{...}|\green|, |\cyan|, |\magenta|, |\brown|, -% |\yellow|, |\orange|, |\gray|, and finally \DescribeMacro{\black}|\black| are -% analogous. -% \end{omgroup} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:limitations]{Limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% \end{omgroup} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography}\newpage -% -% \begin{omgroup}[id=sec:impl:cls]{Implementation: The OMDoc Class} -% -% The functionality is spread over the |omdoc| class and package. The class provides the -% |document| environment and the |omdoc| element corresponds to it, whereas the -% package provides the concrete functionality. -% -% |omdoc.dtx| generates four files: |omdoc.cls| (all the code between -% {\textsf{$\langle$*cls$\rangle$}} and {\textsf{$\langle$/cls$\rangle$}}), |omdoc.sty| -% (between {\textsf{$\langle$*package$\rangle$}} and -% {\textsf{$\langle$/package$\rangle$}}) and their {\latexml} bindings (between -% {\textsf{$\langle$*ltxml.cls$\rangle$}} and {\textsf{$\langle$/ltxml.cls$\rangle$}} and -% {\textsf{$\langle$*ltxml.sty$\rangle$}} and {\textsf{$\langle$/ltxml.sty$\rangle$ -% respetively}}). We keep the corresponding code fragments together, since the -% documentation applies to both of them and to prevent them from getting out of sync. -% -% \begin{omgroup}[id=sec:impl:cls:options]{Class Options} -% To initialize the |omdoc| class, we declare and process the necessary options. -% -% \begin{macrocode} -%<*cls> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\def\omdoc@class{article} -\DeclareOption{report}{\def\omdoc@class{report}\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{book}{\def\omdoc@class{book}\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{chapter}{\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{part}{\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{showignores}{\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{extrefs}{\PassOptionsToPackage{\CurrentOption}{sref}} -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} -\ProcessOptions -% -%<*ltxml.cls> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use LaTeXML::Util::Pathname; -use Cwd qw(cwd abs_path); -DeclareOption('report',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('book',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('chapter',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('part',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('showignores',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('extrefs',sub {PassOptions('sref','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption(undef,sub {PassOptions('article','cls',ToString(Digest(T_CS('\CurrentOption')))); }); -ProcessOptions(); -% -% \end{macrocode} -% -% We load |article.cls|, and the desired packages. For the {\latexml} bindings, we make -% sure the right packages are loaded. -% -% \begin{macrocode} -%<*cls> -\LoadClass{\omdoc@class} -\RequirePackage{omdoc} -% -%<*ltxml.cls> -LoadClass('article'); -RequirePackage('sref'); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:cls:namespaces]{Setting up Namespaces and Schemata for LaTeXML} -% -% Now, we also need to register the namespace prefixes for {\latexml} to use. -% \begin{macrocode} -%<*ltxml.cls> -RegisterNamespace('omdoc'=>"http://omdoc.org/ns"); -RegisterNamespace('om'=>"http://www.openmath.org/OpenMath"); -RegisterNamespace('m'=>"http://www.w3.org/1998/Math/MathML"); -RegisterNamespace('dc'=>"http://purl.org/dc/elements/1.1/"); -RegisterNamespace('cc'=>"http://creativecommons.org/ns"); -RegisterNamespace('stex'=>"http://kwarc.info/ns/sTeX"); -RegisterNamespace('ltx'=>"http://dlmf.nist.gov/LaTeXML"); -% -% \end{macrocode} -% Since we are dealing with a class, we need to set up the document type in the {\latexml} -% bindings. -% \begin{macrocode} -%<*ltxml.cls> -RelaxNGSchema('omdoc+ltxml', - '#default'=>"http://omdoc.org/ns", - 'om'=>"http://www.openmath.org/OpenMath", - 'm'=>"http://www.w3.org/1998/Math/MathML", - 'dc'=>"http://purl.org/dc/elements/1.1/", - 'cc'=>"http://creativecommons.org/ns", - 'ltx'=>"http://dlmf.nist.gov/LaTeXML", - 'stex'=>"http://kwarc.info/ns/sTeX"); -% -% \end{macrocode} -% Then we load the |omdoc| package, which we define separately in the next section so that -% it can be loaded separately\ednote{reword} -% \begin{macrocode} -%<*ltxml.cls> -RequirePackage('omdoc'); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:cls:document]{Beefing up the \texttt{document} environment} -% -% Now, we will define the environments we need. The top-level one is the |document| -% environment, which we redefined so that we can provide keyval arguments. -% -% \begin{environment}{document} -% For the moment we do not use them on the {\LaTeX} level, but the document identifier -% is picked up by {\latexml}. -% \begin{macrocode} -%<*cls> -\let\orig@document=\document -\srefaddidkey{document} -\renewcommand{\document}[1][]{\metasetkeys{document}{#1}\orig@document} -% -%<*ltxml.cls> -sub xmlBase { - my $baseuri = LookupValue('baseuri'); - my $baselocal = LookupValue('baselocal'); - my $cdir = abs_path(cwd()); - $cdir =~ s/^$baselocal//; - my ($d,$f,$t) = pathname_split(LookupValue('SOURCEFILE')); - $t = '' if LookupValue('cooluri'); - Tokenize($baseuri.$cdir.'/'.$f.$t); } -DefEnvironment('{document} OptionalKeyVals:omdoc', - "" - . "#body" - ."", - beforeDigest=> sub { AssignValue(inPreamble=>0); }, - afterDigest=> sub { $_[0]->getGullet->flush; return; }); -% -% \end{macrocode} -% \end{environment} -% \end{omgroup} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:sty]{Implementation: OMDoc Package} -% -% \begin{omgroup}[id=sec:impl:options]{Package Options} -% -% The initial setup for {\latexml}: -% -% \begin{macrocode} -%<*ltxml.sty> -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use Cwd qw(cwd abs_path); -% -% \end{macrocode} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false).\ednote{need an implementation for {\latexml}} -% -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\if@chapter\@chapterfalse -\newif\if@part\@partfalse -\newcount\section@level\section@level=3 -\newif\ifshow@ignores\show@ignoresfalse -\def\omdoc@class{article} -\DeclareOption{report}{\def\omdoc@class{report}\section@level=2} -\DeclareOption{book}{\def\omdoc@class{book}\section@level=1} -\DeclareOption{chapter}{\section@level=2\@chaptertrue} -\DeclareOption{part}{\section@level=1\@chaptertrue\@parttrue} -\DeclareOption{showignores}{\show@ignorestrue} -\DeclareOption{extrefs}{\PassOptionsToPackage{\CurrentOption}{sref}} -\ProcessOptions -% -%<*ltxml.sty> -DeclareOption('report',''); -DeclareOption('book',''); -DeclareOption('chapter',''); -DeclareOption('part',''); -DeclareOption('showignores',''); -DeclareOption('extrefs',''); -% -% \end{macrocode} -% -% Then we need to set up the packages by requiring the |sref| package to be loaded. -% -% \begin{macrocode} -%<*package> -\RequirePackage{sref} -\RequirePackage{comment} -% -%<*ltxml.sty> -RequirePackage('sref'); -RequirePackage('omtext'); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:struct]{Document Structure} -% -% The structure of the document is given by the |omgroup| environment just like in -% OMDoc. The hierarchy is adjusted automatically\ednote{maybe define the toplevel -% according to a param, need to know how to detect that the chapter macro exists.} -% -% \begin{environment}{omgroup} -% \begin{macrocode} -%<*package> -\srefaddidkey{omgroup} -\addmetakey{omgroup}{creators} -\addmetakey{omgroup}{contributors} -\addmetakey{omgroup}{type} -\addmetakey*{omgroup}{short} -\addmetakey*{omgroup}{display} -\newenvironment{omgroup}[2][]% title -{\bgroup\metasetkeys{omgroup}{#1}\sref@target -\ifx\omgroup@display\st@flow\noindent{\Large\textbf{#2}\\[.3ex]\noindent\ignorespaces} -\else -\if@part\ifnum\section@level=1\part{#2}\sref@label@id{Part \thepart}\fi\fi -\if@chapter\ifnum\section@level=2\chapter{#2}\sref@label@id{Chapter \thechapter}\fi\fi -\ifnum\section@level=3\section{#2}\sref@label@id{Section \thesection}\fi -\ifnum\section@level=4\subsection{#2}\sref@label@id{Subsection \thesubsection}\fi -\ifnum\section@level=5\subsubsection{#2}\sref@label@id{Subsubsection \thesubsubsection}\fi -\ifnum\section@level=6\paragraph{#2}\sref@label@id{this paragraph}\fi -\ifnum\section@level=7\subparagraph{#2}\sref@label@id{this subparagraph}\fi -\advance\section@level by 1 -\fi}{\egroup} -% -%<*ltxml.sty> -DefEnvironment('{omgroup} OptionalKeyVals:omgroup {}', - "\n" - . "#2\n" - . "#body\n" - . ""); -% -% \end{macrocode} -% \end{environment} -% -% the |itemize|, |description|, and |enumerate| environments originally introduced in the -% |omtext| package do double duty in OMDoc, outside a |CMP| they are transformed into a -% ||, where the text after the macros -% |\item| come to be the children. If that is only text, then it is enclosed in an -% ||, otherwise it is left as it is. The optional argument of the |\item| -% is transformed into the || of the generated |\item| element. -% \begin{macrocode} -%<*ltxml.sty> -DefParameterType('IfBeginFollows', sub { - my ($gullet) = @_; - $gullet->skipSpaces; - my $next = $gullet->readToken; - $gullet->unread($next); - $next = ToString($next); - #Hm, falling back to regexp handling, the $gullet->ifNext approach didn't work properly - return 1 unless ($next=~/^\\begin/); - return; - }, - reversion=>'', optional=>1);#$ -Let('\group@item@maybe@unwrap','\relax'); -DefMacro('\group@item[] IfBeginFollows', sub { - my($gullet,$tag,$needswrapper)=@_; - ( T_CS('\group@item@maybe@unwrap'), - ($needswrapper ? (Invocation(T_CS('\group@item@wrap'),$tag)->unlist) : ()) ); }); -DefConstructor('\group@item@wrap {}', - "" - . "?#1(#1)()" - . "", - beforeDigest=>sub { - Let('\group@item@maybe@unwrap','\group@item@unwrap'); - #$_[0]->bgroup; - useCMPItemizations(); - return; }, - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\group@item@unwrap', - "", - beforeDigest=>sub { - # $_[0]->egroup;#$ - Let('\group@item@maybe@unwrap','\relax'); }, - beforeConstruct=>sub { - $_[0]->maybeCloseElement('omdoc:p'); - $_[0]->maybeCloseElement('omdoc:CMP'); - $_[0]->maybeCloseElement('omdoc:omtext'); - }); -Let('group@item@maybe@unwrap','\relax'); -Let('\itemize@item'=>'\group@item'); -Let('\enumerate@item'=>'\group@item'); -Let('\description@item'=>'\group@item'); -DefEnvironment('{itemize}', - "" - . "#body" - ."", - properties=>sub { beginItemize('itemize'); }, - beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); }); -DefEnvironment('{enumerate}', - "#body", - properties=>sub { beginItemize('enumerate'); }, - beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); }); -DefEnvironment('{description}', - "" - . "#body" - ."", - properties=>sub { beginItemize('description'); }, - beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); }); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:docmatter]{Front and Backmatter} -% -% Index markup is provided by the |omtext| package~\cite{Kohlhase:smmtf:ctan}, so in the -% |omdoc| package we only need to supply the correpsonding |\printindex| command, if it -% is not already defined -% \begin{macro}{\printindex} -% \begin{macrocode} -%<*package> -\providecommand\printindex{\IfFileExists{\jobname.ind}{\input{\jobname.ind}}{}} -% -%<*ltxml.sty> -DefConstructor('\printindex',''); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\tableofcontents} -% The table of contents already exists in {\LaTeX}, so we only need to provide a -% {\latexml} binding for it.\ednote{@Deyan, we need to insert the current value of the -% {\texttt{tocdepth}} counter into a @level attribute.} -% \begin{macrocode} -%<*ltxml.sty> -DefConstructor('\tableofcontents',""); -% -% \end{macrocode} -% \end{macro} -% -% The case of the |\bibliography| command is similar -% -% \begin{macro}{\bibliography} -% \begin{macrocode} -%<*ltxml.sty> -DefConstructor('\bibliography{}',""); -% -% \end{macrocode} -% \end{macro} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:ignore]{Ignoring Inputs} -% \begin{environment}{ignore} -% \begin{macrocode} -%<*package> -\ifshow@ignores -\addmetakey{ignore}{type} -\addmetakey{ignore}{comment} -\newenvironment{ignore}[1][] -{\metasetkeys{ignore}{#1}\textless\ignore@type\textgreater\bgroup\itshape} -{\egroup\textless/\ignore@type\textgreater} -\renewenvironment{ignore}{}{}\else\excludecomment{ignore}\fi -% -%<*ltxml.sty> -DefKeyVal('ignore','type','Semiverbatim'); -DefKeyVal('ignore','comment','Semiverbatim'); -DefEnvironment('{ignore} OptionalKeyVals:ignore', - "#body"); -% -% \end{macrocode} -% \end{environment} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:share]{Structure Sharing} -% -% \begin{macro}{\STRlabel} -% The main macro, it it used to attach a label to some text expansion. Later on, using the -% |\STRcopy| macro, the author can use this label to get the expansion originally assigned. -% \begin{macrocode} -%<*package> -\long\def\STRlabel#1#2{\STRlabeldef{#1}{#2}{#2}} -% -%<*ltxml.sty> -DefConstructor('\STRlabel{}{}', sub { - my($document,$label,$object)=@_; - $document->absorb($object); - $document->addAttribute('xml:id'=>ToString($label)) if $label; }); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\STRcopy} -% The |\STRcopy| macro is used to call the expansion of a given label. In case the label is -% not defined it will issue a warning. -% \begin{macrocode} -%<*package> -\def\STRcopy#1{\expandafter\ifx\csname STR@#1\endcsname\relax -\message{STR warning: reference #1 undefined!} -\else\csname STR@#1\endcsname\fi} -% -%<*ltxml.sty> -DefConstructor('\STRcopy{}',""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\STRsemantics} -% if we have a presentation form and a semantic form, then we can use -% \begin{macrocode} -%<*package> -\newcommand{\STRsemantics}[3][]{#2\def\@test{#1}\ifx\@test\@empty\STRlabeldef{#1}{#2}\fi} -% -%<*ltxml.sty> -DefConstructor('\STRsemantics[]{}{}', sub { - my($document,$label,$ignore,$object)=@_; - $document->absorb($object); - $document->addAttribute('xml:id'=>ToString($label)) if $label; }); -%#$ -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\STRlabeldef} -% This is the macro that does the actual labeling. Is it called inside |\STRlabel| -% \begin{macrocode} -%<*package> -\def\STRlabeldef#1{\expandafter\gdef\csname STR@#1\endcsname} -% -%<*ltxml.sty> -DefMacro('\STRlabeldef{}{}', ""); -% -% \end{macrocode} -% \end{macro} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:colors]{Colors} -% -% \begin{environment}{blue, red, green, magenta} -% We will use the following abbreviations for colors from |color.sty| -% \begin{macrocode} -%<*package> -\def\black#1{\textcolor{black}{#1}} -\def\gray#1{\textcolor{gray}{#1}} -\def\blue#1{\textcolor{blue}{#1}} -\def\red#1{\textcolor{red}{#1}} -\def\green#1{\textcolor{green}{#1}} -\def\cyan#1{\textcolor{cyan}{#1}} -\def\magenta#1{\textcolor{magenta}{#1}} -\def\brown#1{\textcolor{brown}{#1}} -\def\yellow#1{\textcolor{yellow}{#1}} -\def\orange#1{\textcolor{orange}{#1}} -% -% \end{macrocode} -% For the {\latexml} bindings, we go a generic route, we replace |\blue{#1}| by -% |{\@omdoc@color{blue}\@omdoc@color@content{#1}}|. -% \begin{macrocode} -%<*ltxml.sty> -sub omdocColorMacro { - my ($color, @args) = @_; - my $tok_color = TokenizeInternal($color); - (T_BEGIN, T_CS('\@omdoc@color'), T_BEGIN, $tok_color->unlist, - T_END, T_CS('\@omdoc@color@content'), T_OTHER('['), $tok_color->unlist, T_OTHER(']'), - T_BEGIN, $args[1]->unlist, T_END, T_END); } -DefMacro('\@omdoc@color{}', sub { MergeFont(color=>$_[1]->toString); return; });#$ -% -% \end{macrocode} -% Ideally, here we will remove the optional argument and have a conversion module -% add the attribute at the end (or maybe add it just for math?) -% or, we can take the attributes for style from the current font ? -% \begin{macrocode} -%<*ltxml.sty> -DefConstructor('\@omdoc@color@content[]{}', - "?#isMath(#2)(#2)"); -foreach my $color(qw(black gray blue red green cyan magenta brown yellow orange)) { - DefMacro("\\".$color.'{}', sub { omdocColorMacro($color, @_); }); }#$ -% -% \end{macrocode} -% \end{environment} -% \end{omgroup} -% -% \begin{omgroup}{{\LaTeX} Commands we interpret differently} -% -% The reinterpretations are quite simple, we either disregard presentational markup or -% we re-interpret it in terms of {\omdoc}. -% \begin{macrocode} -%<*ltxml.sty> -DefConstructor('\newpage',''); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:ids]{Providing IDs for {\omdoc} Elements} -% -% To provide default identifiers, we tag all {\omdoc} elements that allow |xml:id| -% attributes by executing the |numberIt| procedure below. -% -% \begin{macrocode} -%<*ltxml.sty> -Tag('omdoc:ignore',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:ref',afterOpen=>\&numberIt,afterClose=>\&locateIt); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}{Leftovers} -% -% \begin{macrocode} -%<*package> -\newcommand{\baseURI}[2][]{} -% -%<*ltxml.sty> -DefMacro('\baseURI []Semiverbatim', sub { - AssignValue('baselocal'=>abs_path(ToString(Expand($_[1])))); - AssignValue('baseuri'=>ToString(Expand($_[2])));}); -DefConstructor('\url Semiverbatim',"#1"); -DefConstructor('\href Semiverbatim {}',"#2"); -% -% \end{macrocode} -% \ednote{this should be handled differently, omdoc.sty should include url and give a new -% macro for it, which we then use in omdoc} -% and finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \end{omgroup} -% \end{omgroup} -% \Finale -\endinput -% \iffalse -% LocalWords: GPL structuresharing STR omdoc dtx stex CPERL LoadClass url dc -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi -% LocalWords: RequirePackage RegisterNamespace namespace xsl DocType ltxml dtd -% LocalWords: ltx DefEnvironment beforeDigest AssignValue inPreamble getGullet -% LocalWords: afterDigest keyval omgroup DefKeyVal Semiverbatim KeyVal locator -% LocalWords: OptionalKeyVals DefParameterType IfBeginFollows skipSpaces CMP -% LocalWords: ifNext DefMacro needwrapper unlist DefConstructor omtext bgroup -% LocalWords: useCMPItemizations RefStepItemCounter egroup beginItemize li di -% LocalWords: beforeDigestEnd dt autoclose ul ol dl env showignores srcref Cwd -% LocalWords: afterOpen LastSeenCMP autoClose DefCMPEnvironment proto ToString -% LocalWords: addAttribute nlex nlcex omdocColorMacro args tok MergeFont qw -% LocalWords: TokenizeInternal toString isMath foreach maybeCloseElement id'd -% LocalWords: autoOpen minipage footnotesize scriptsize numberIt whatsit href -% LocalWords: getAttribute setAttribute OMDoc RelaxNGSchema noindex xml lec -% LocalWords: Subsubsection useDefaultItemizations refundefinedtrue sblockquote -% LocalWords: DefCMPConstructor sinlinequote idx idt ide idp emph extrefs sref -% LocalWords: flushleft flushright DeclareOption PassOptions undef cls iffalse -% LocalWords: ProcessOptions subparagraph ignoresfalse ignorestrue texttt ttin -% LocalWords: texttt latexml fileversion maketitle newpage tableofcontents cwd -% LocalWords: newpage ednote ctancite dmt03 smms inlinedef STRlabel STRcopy -% LocalWords: STRlabel STRsemantics STRsemantics textcolor printbibliography -% LocalWords: textsf langle textsf langle respetively orig renewcommand cdir -% LocalWords: baseuri baseuri baselocal baselocal SOURCEFILE cooluri newif ifx -% LocalWords: SOURCEBASE chapterfalse partfalse newcount ifshow chaptertrue -% LocalWords: parttrue srefaddidkey newenvironment textbf -% LocalWords: noindent noindent ignorespaces ifnum thepart thechapter regexp -% LocalWords: thesection thesubsection thesubsubsection needswrapper itshape -% LocalWords: textgreater renewenvironment excludecomment STRlabeldef csname -% LocalWords: expandafter endcsname xref newcommand gdef doctex diff --git a/Master/texmf-dist/source/latex/stex/omtext/omtext.dtx b/Master/texmf-dist/source/latex/stex/omtext/omtext.dtx deleted file mode 100644 index d13d7f446d8..00000000000 --- a/Master/texmf-dist/source/latex/stex/omtext/omtext.dtx +++ /dev/null @@ -1,850 +0,0 @@ -% \iffalse meta-comment -% A LaTeX Class and Package for OMDoc Text Fragments -% Copyright (c) 2010 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/omtext/omtext.dtx $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{omtext}[2010/06/25 v1.0 OMDoc Text Fragments] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,omdoc,float} -\usepackage{omtext} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: omtext.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/omtext/omtext.dtx $ -\usepackage{stex-logo} -\usepackage{../ctansvn} -\usepackage{hyperref} -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{omtext.dtx}\end{document} -% -% \fi -% -%\iffalse\CheckSum{333}\fi -% -% \changes{v0.4}{2008/07/22}{added index markup} -% \changes{v0.4}{2008/09/29}{augmenting the index macros with optional values} -% \changes{v0.6}{2009/07/08}{removing {\texttt{ttin}} {\texttt{{emin}}} and friends, -% they were almost never used.} -% \changes{v0.6}{2009/07/08}{renmanig {\texttt{myindex}} to {\texttt{omdoc\@ index}}, -% {\texttt{twin}} to {\texttt{\@ twin}}, and {\texttt{atwin}} to {\texttt{\@ atwin}} to -% make them packge-local} -% \changes{v0.7}{2010/02/11}{changing blockquote to sblockquote and inlinequote similarly} -% \changes{v0.9}{2010/05/25}{separated out from \texttt{omdoc.dtx}} -% \changes{v1.0}{2010/06/18}{fixing typos} -% -% \GetFileInfo{omtext.sty} -% -% \MakeShortVerb{\|} -% -% \def\omdoc{OMDoc} -% \def\latexml{{\LaTeX}ML} -% \title{{\texttt{omtext}}: Semantic Markup for Mathematical Text Fragments in {\LaTeX}\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |omtext| package is part of the {\sTeX} collection, a version of {\TeX/\LaTeX} that -% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document -% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical -% knowledge management (MKM). -% -% This package supplies an infrastructure for writing {\omdoc} text fragments in -% {\LaTeX}. -% \end{abstract} -% -%\newpage\tableofcontents\newpage -% -%\begin{omgroup}[id=sec:STR]{Introduction} -% -% The |omtext| package supplies macros and environment that allow to mark up mathematical -% texts in {\sTeX}, a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} -% documents semantically without leaving the document format, essentially turning -% {\TeX/\LaTeX} into a document format for mathematical knowledge management (MKM). The -% package supports direct translation to the {\omdoc} format~\cite{Kohlhase:omdoc1.2} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user]{The User Interface} -% -% \begin{omgroup}[id=sec:user:options]{Package Options} -% -% The |omtext| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If -% this is set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for -% details and customization options). -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:omtext]{Mathematical Text} -% -% \DescribeEnv{omtext} The |omtext| environment is used for any text fragment that has a -% contribution to a text that needs to be marked up. It can have a title, which can be -% specified via the |title| key. Often it is also helpful to annotate the |type| -% key. The standard relations from rhetorical structure theory |abstract|, -% |introduction|, |conclusion|, |thesis|, |comment|, |antithesis|, |elaboration|, -% |motivation|, |evidence|, |transition|, | note|, |annote| are recommended. Note that -% some of them are unary relations like |introduction|, which calls for a target. In -% this case, a target using the |for| key should be specified. The |transition| relation -% is special in that it is binary (a ``transition between two statements''), so -% additionally, a source should be specified using the |from| key. -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:phrase]{Phrase-Level Markup} -% -% \DescribeEnv{phrase} The |phrase| environment allows to mark up phrases with semantic -% information. It takes an optional |KeyVal| argument with the keys\ednote{continue} -% -% \DescribeMacro{\sinlinequote} The |sinlinequote| macro allows to mark up quotes inline and -% attribute them. The quote itself is given as the argument, possibly preceded by the a -% specification of the source in a an optional argument. For instance, we would quote -% Hamlet with -% \begin{verbatim} -% \sinlinequote[Hamlet, \cite{Shak:1603:Hamlet}]{To be or not to be} -% \end{verbatim} -% which would appear as \sinlinequote[Hamlet, (Shakespeare 1603)]{To be or not to be} in -% the text. The style in which inline quotations appear in the text can be adapted by -% specializing the macros \DescribeMacro{\@sinlinequote}|\@sinlinequote| --- for quotations -% without source and \DescribeMacro{\@@sinlinequote}|\@@sinlinequote| --- for quotations with -% source. -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:block]{Block-Level Markup} -% -% \DescribeEnv{sblockquote} The |sblockquote| environment is the big brother of the -% |\sinlinequote| macro. It also takes an optional argument to specify the source. Here -% the four internal macros \DescribeMacro{\begin@sblockquote}|\begin@sblockquote| to -% \DescribeMacro{\end@@sblockquote}|\end@@sblockquote| are used for styling and can be -% adapted by package integrators. Here a quote of Hamlet would marked up as -% \begin{verbatim} -% \begin{sblockquote}[Hamlet, \cite{Shak:1603:Hamlet}]\obeylines -% To be, or not to be: that is the question: -% Whether 'tis nobler in the mind to suffer -% \end{sblockquote} -% \end{verbatim} -% and would render as -% \begin{sblockquote}[Hamlet, (Shakespeare 1603)]\obeylines -% To be, or not to be: that is the question: -% Whether 'tis nobler in the mind to suffer -% \end{sblockquote} -% -% \DescribeMacro{\lec}The |\lec| macro takes one argument and sets it as a comment at the -% end of the line, making sure that if the content is too long it is pushed into a new -% line. We use it internally for placing the of source of the |sblockquote| environment -% above. The actual appearance of the line end comment is determined by the -% \DescribeMacro{\@@lec}|\@@lec| macro, which can be customized in the document class. -% \end{omgroup} -% -% \begin{omgroup}[id=sec:user:index]{Index Markup} -% -% The |omtext| package provides some extensions for the well-known indexing macros of -% {\LaTeX}. The main reason for introducing these macros is that index markup in -% {\omdoc} wraps the indexed terms rather than just marking the spot for -% cross-referencing. Furthermore the index commands only indexes words unless -% the\DescribeMacro{noindex} |noindex| option is set in the |\usepackage|. The |omtext| -% package and class make the usual |\index| macro undefined\ednote{implement this and -% issue the respective error message}. -% -% The \DescribeMacro{\indextoo}|\indextoo| macro renders a word and marks it for the -% index. Sometimes, we want to index a slightly different form of the word, e.g. for -% non-standard plurals: while |\indextoo{word}s| works fine, we cannot use this for the -% word ``datum'', which has the plural ``data''. For this we have the macro -% \DescribeMacro{\indexalt}|\indexalt|, which takes another argument for the displayed -% text, allowing us to use |\indexalt{data}{datum}|, which prints ``data'' but puts -% ``datum'' into the index. -% -% The second set of macros adds an infrastructure for two-word compounds. Take for -% instance the compound ``OMDoc document'', which we usually want to add into the index -% under ``OMDoc'' and ``document''. \DescribeMacro{\twintoo}|\twintoo{OMDoc}{document}| -% is a variant of |\indextoo| that will do just this. Again, we have a version that -% prints a variant: This is useful for situations like this the one in -% Figure~\ref{fig:index-markup}: -% \begin{exfig} -% \begin{verbatim} -% We call group \twinalt{Abelian}{Abelian}{group}, iff \ldots -% \end{verbatim} -% \vspace*{-1em}will result in the following -% \begin{quote} -% We call group \twinalt{Abelian}{Abelian}{group}, iff \ldots -% \end{quote} -% and put ``Abelian Group'' into the index. -% \caption{Index markup}\label{fig:index-markup} -% \end{exfig} -% -% The third set of macros does the same for two-word compounds with adjectives, -% e.g. ``wonderful OMDoc -% document''. \DescribeMacro{\atwintoo}|\atwin{wonderful}{OMdoc}{document}| will make the -% necessary index entries under ``wonderful'' and ``document''. Again, we have a variant -% \DescribeMacro{\atwinalt}|\atwinalt| whose first argument is the alternative text. -% -% All index macros take an optional first argument that is used for ordering the -% respective entries in the index. -% \end{omgroup} -% \end{omgroup} -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography}\newpage -% -% \begin{omgroup}[id=sec:impl]{Implementation} -% -% The |omtext| package generates two files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and -% $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% \begin{omgroup}[id=sec:impl:options]{Package Options} -% -% The initial setup for {\latexml}: -% -% \begin{macrocode} -%<*ltxml> -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use Cwd qw(cwd abs_path); -% -% \end{macrocode} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false).\ednote{need an implementation for {\latexml}} -% -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\ifindex\indextrue -\DeclareOption{noindex}{\indexfalse} -\ProcessOptions -\ifindex\makeindex\fi -% -%<*ltxml> -DeclareOption('noindex',''); -% -% \end{macrocode} -% -% Then we need to set up the packages by requiring the |sref| package to be loaded. -% -% \begin{macrocode} -%<*package> -\RequirePackage{sref} -\RequirePackage{comment} -% -%<*ltxml> -RequirePackage('sref'); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:metadata]{Metadata} -% -% All the {\omdoc} elements allow to specify metadata in them, which is modeled by the -% |omdoc:metadata| element. Since the content of this element is precisely controlled -% by the Schema, we can afford to auto-open and auto-close it. Thus metadata elements -% from various sources will just be included into one |omdoc:metadata| element, even if -% they are supplied by different {\sTeX} bindings. Also we add numbering and location -% facilities. -% -% \begin{macrocode} -%<*ltxml> -Tag('omdoc:metadata',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1,autoOpen=>1); -% -% \end{macrocode} -% -% the |itemize|, |description|, and |enumerate| environments generate |omdoc:li|, -% |omdoc:di| with |autoclose| inside a CMP. This behavior will be overwritten later, so we -% remember that we are in a |CMP| by assigning |_LastSeenCMP|. -% -% \begin{macrocode} -%<*ltxml> -DefConstructor('\CMP@itemize@item[]', - "?#1(#1)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\CMP@enumerate@item[]', - "?#1(#1)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\CMP@description@item[]', - "" - . "?#1(#1)()", # trust di and dt to autoclose - properties=>sub{ RefStepItemCounter(); }); -DefEnvironment('{CMP@itemize}', - "#body", - properties=>sub { beginItemize('CMP@itemize'); }, - beforeDigest=>sub { Let(T_CS('\end{itemize}') =>T_CS('\end{CMP@itemize}')); }); -DefEnvironment('{CMP@enumerate}', - "#body", - properties=>sub { beginItemize('CMP@enumerate'); }, - beforeDigest=>sub { Let(T_CS('\end{enumerate}') =>T_CS('\end{CMP@enumerate}')); }); -DefEnvironment('{CMP@description}', - "#body", - properties=>sub { beginItemize('CMP@description'); }, - beforeDigest=>sub { Let(T_CS('\end{description}') =>T_CS('\end{CMP@description}'));}); -sub useCMPItemizations { - Let(T_CS('\begin{itemize}') =>T_CS('\begin{CMP@itemize}')); - Let(T_CS('\begin{enumerate}') =>T_CS('\begin{CMP@enumerate}')); - Let(T_CS('\begin{description}')=>T_CS('\begin{CMP@description}')); - return; } -sub declareFunctions{ - my ($stomach,$whatsit) = @_; - my $keyval = $whatsit->getArg(1); - my $funval = KeyVal($keyval,'functions') if KeyVal($keyval,'functions'); - my @funsymbs = ParseKeyValList($funval); - #Unread the function declarations at the Gullet - foreach (@funsymbs) { - $stomach->getGullet->unread(Tokenize('\lxDeclare[role=FUNCTION]{$'.$_.'$}')->unlist); - } - return; -} -Tag('omdoc:CMP', afterOpen => sub {AssignValue('_LastSeenCMP', $_[1], 'global');return;});#$ -Tag('omdoc:li', autoClose=>1); -Tag('omdoc:dd', autoClose=>1); -Tag('omdoc:di', autoClose=>1); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:mtxt]{Mathematical Text} -% -% We define the actions that are undertaken, when the keys are encountered. Here this is -% very simple, we just define an internal macro with the value, so that we can use it -% later. Note that we allow math in the |title| field, so we do not declare it to be -% |Semiverbatim| (indeed not at all, which allows it by default). -% -% \begin{macrocode} -%<*package> -\srefaddidkey{omtext} -\addmetakey[]{omtext}{functions} -\addmetakey*{omtext}{display} -\addmetakey{omtext}{for} -\addmetakey{omtext}{from} -\addmetakey{omtext}{type} -\addmetakey*{omtext}{title} -\addmetakey*{omtext}{start} -\addmetakey{omtext}{theory} -\addmetakey{omtext}{continues} -\addmetakey{omtext}{verbalizes} -% -%<*ltxml> -DefKeyVal('omtext','functions','Semiverbatim'); -DefKeyVal('omtext','display','Semiverbatim'); -DefKeyVal('omtext','for','Semiverbatim'); -DefKeyVal('omtext','from','Semiverbatim'); -DefKeyVal('omtext','type','Semiverbatim'); -DefKeyVal('omtext','title','Plain'); #Math mode in titles. -DefKeyVal('omtext','start','Plain'); #Math mode in start phrases -DefKeyVal('omtext','theory','Semiverbatim'); -DefKeyVal('omtext','continues','Semiverbatim'); -DefKeyVal('omtext','verbalizes','Semiverbatim'); -% -% \end{macrocode} -% -% \begin{macro}{\st@flow} -% We define this macro, so that we can test whether the |display| key has the value |flow| -% \begin{macrocode} -%<*package> -\def\st@flow{flow} -% -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{omtext} -% The |omtext| environment is different, it does not have a keyword that marks -% it. Instead, it can have a title, which is used in a similar way. We redefine the -% |\lec| macro so the trailing |\par| does not get into the way. -% \begin{macrocode} -%<*package> -\def\omtext@pre@skip{\smallskip} -\def\omtext@post@skip{} -\providecommand{\stDMemph}[1]{\textbf{#1}} -\newenvironment{omtext}[1][]{\bgroup\metasetkeys{omtext}{#1}\sref@label@id{this paragraph}% -\def\lec##1{\@lec{##1}} -\ifx\omtext@display\st@flow\else\omtext@pre@skip\par\noindent% -\ifx\omtext@title\@empty\else\stDMemph{\omtext@title}: \fi\fi\ignorespaces} -{\egroup\omtext@post@skip} -% -%<*ltxml> -DefCMPEnvironment('{omtext} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "" - . "" - . "?&KeyVal(#1,'start')(&KeyVal(#1,'start'))()" - . "#body"); -% -% \end{macrocode} -% \end{environment} -% -% We also make our life easier If defining an environment that is -% turned into something that contains ||\meta{body}||, use this method instead -% \begin{macrocode} -%<*ltxml> -sub DefCMPEnvironment { - my ($proto, $replacement, %options) = @_; - my @before = $options{beforeDigest} ? ($options{beforeDigest}) : (); - push(@before, \&useCMPItemizations); - $options{beforeDigest} = \@before; - my @after = $options{afterDigestBegin} ? ($options{afterDigestBegin}) : (); - push(@after, \&declareFunctions); - $options{afterDigestBegin} = \@after; - DefEnvironment($proto, $replacement, %options); -} -sub DefCMPConstructor { - my ($proto, $replacement, %options) = @_; - my @before = $options{beforeDigest} ? ($options{beforeDigest}) : (); - push(@before, \&useCMPItemizations); - $options{beforeDigest} = \@before; - DefConstructor($proto, $replacement, %options); -}#$ -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:phrase]{Phrase-level Markup} -% -% \begin{environment}{phrase} -% For the moment, we do disregard the most of the keys -% \begin{macrocode} -%<*package> -\srefaddidkey{phrase} -\addmetakey{phrase}{style} -\addmetakey{phrase}{class} -\addmetakey{phrase}{index} -\addmetakey{phrase}{verbalizes} -\addmetakey{phrase}{type} -\newenvironment{phrase}[1][]{\metasetkeys{phrase}{#1}}{} -% -%<*ltxml> -DefKeyVal('phrase','id','Semiverbatim'); -DefKeyVal('phrase','style','Semiverbatim'); -DefKeyVal('phrase','class','Semiverbatim'); -DefKeyVal('phrase','index','Semiverbatim'); -DefKeyVal('phrase','verbalizes','Semiverbatim'); -DefKeyVal('phrase','type','Semiverbatim'); -DefConstructor('\phrase OptionalKeyVals:phrase {}', - "#2"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{nlex} -% For the moment, we do disregard the most of the keys -% \begin{macrocode} -%<*package> -\def\nlex#1{\green{\sl{#1}}} -\def\nlcex#1{*\green{\sl{#1}}} -% -%<*ltxml> -DefConstructor('\nlex{}', - "#1"); -DefConstructor('\nlcex{}', - "#1"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{sinlinequote} -% \begin{macrocode} -%<*package> -\def\@sinlinequote#1{``{\sl{#1}}''} -\def\@@sinlinequote#1#2{\@sinlinequote{#2}~#1} -\newcommand{\sinlinequote}[2][] -{\def\@opt{#1}\ifx\@opt\@empty\@sinlinequote{#2}\else\@@sinlinequote\@opt{#2}\fi} -% -%<*ltxml> -DefConstructor('\sinlinequote [] {}', - "" - . "?#1(#1\n)()" - . "#2" - . ""); -% -% \end{macrocode} -% \end{macro} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:block]{Block-Level Markup} -% -% \begin{environment}{sblockquote} -% \ednote{describe above} -% \begin{macrocode} -%<*package> -\def\begin@sblockquote{\begin{quote}\sl} -\def\end@sblockquote{\end{quote}} -\def\begin@@sblockquote#1{\begin@sblockquote} -\def\end@@sblockquote#1{\def\@@lec##1{{\rm ##1}}\@lec{#1}\end@sblockquote} -\newenvironment{sblockquote}[1][] - {\def\@opt{#1}\ifx\@opt\@empty\begin@sblockquote\else\begin@@sblockquote\@opt\fi} - {\ifx\@opt\@empty\end@sblockquote\else\end@@sblockquote\@opt\fi} -% -%<*ltxml> -DefEnvironment('{sblockquote} []', - "?#1(" - . "#1" - . "#body" - . " )" - . "(#body)"); -% -% \end{macrocode} -% \end{environment} -% -% The line end comment macro makes sure that it will not be forced on the next line unless -% necessary. -% \begin{macro}{\lec} -% The actual appearance of the line end comment is determined by the |\@@lec| macro, -% which can be customized in the document class. The basic one here is provided so that -% it is not missing. -% \begin{macrocode} -%<*package> -\providecommand{\@@lec}[1]{(#1)} -\def\@lec#1{\strut\hfil\strut\null\nobreak\hfill\hbox{\@@lec{#1}}} -\def\lec#1{\@lec{#1}\par} -% -%<*ltxml> -DefConstructor('\lec{}', - "\n#1"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\my*graphics} -% We set up a special treatment for including graphics to respect the intended {\omdoc} -% document structure. The main work is done in the transformation stylesheet though. -% -% \begin{macrocode} -%RawTeX(' -%<*ltxml|package> -\newcommand\mygraphics[2][]{\includegraphics[#1]{#2}} -\newcommand\mycgraphics[2][]{\begin{center}\includegraphics[#1]{#2}\end{center}} -\newcommand\mybgraphics[2][]{\fbox{\includegraphics[#1]{#2}\end{center}}} -% -%'); -% \end{macrocode} -% \end{macro} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:index]{Index Markup} -% -% \begin{macrocode} -%<*package> -\newcommand{\omdoc@index}[2][]{\def\@test{#1}% -\ifindex\ifx\@test\@empty\index{#2}\else\index{#1@#2}\fi\fi} -\newcommand{\indexalt}[3][]{{#2}\omdoc@index[#1]{#3}} % word in text and index -\newcommand{\indextoo}[2][]{{#2}\omdoc@index[#1]{#2}} % word in text and index -% -% \end{macrocode} -% -% this puts two-compound words into the index in various permutations -% -% \begin{macrocode} -%<*package> -\newcommand{\@twin}[3][]{\def\@test{#1}% -\ifindex\ifx\@test\@empty\index{#2!#3}\else\index{#1@#2!#3}\fi\index{#3!#2}\fi} -\newcommand{\twinalt}[4][]{#2\@twin[#1]{#3}{#4}} -\newcommand{\twintoo}[3][]{{#2 #3}\@twin[#1]{#2}{#3}} % and use the word compound too -% -% \end{macrocode} -% -% this puts adjectivized two-compound words into the index in various -% permutations\ednote{what to do with the optional argument here and below?} -% -% \begin{macrocode} -%<*package> -\newcommand{\@atwin}[4][]{\def\@test{#1}% -\ifindex\ifx\@test\@empty\index{#2!#3!#4}\else\index{#1@#2!#3!#4}\fi\index{#3!#2 (#1)}\fi} -\newcommand{\atwinalt}[5][]{#2\@atwin[#1]{#3}{#4}{#4}} -\newcommand{\atwintoo}[4][]{{#2 #3 #4}\@atwin[#1]{#2}{#3}{#4}} % and use it too -% -%<*ltxml> -DefConstructor('\indextoo[]{}', - "" - . "#2" - . "" - . "#2" - . "" - .""); -DefConstructor('\indexalt[]{}{}', - "" - . "#2" - . "" - . "#3" - . "" - .""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*ltxml> -DefConstructor('\twintoo[]{}{}', - "" - . "#2 #3" - . "" - . "#2" - . "#3" - . "" - .""); -DefConstructor('\twinalt[]{}{}{}', - "" - . "#2" - . "" - . "#2" - . "#3" - . "" - .""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*ltxml> -DefConstructor('\atwintoo[]{}{}{}', - "" - . "#2 #3" - . "" - . "#2" - . "#3" - . "#4" - . "" - .""); - -DefConstructor('\atwinalt[]{}{}{}{}', - "" - . "#2" - . "" - . "#2" - . "#3" - . "#4" - . "" - .""); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}{{\LaTeX} Commands we interpret differently} -% -% The first think we have to take care of are the paragraphs, we want to generate {\omdoc} -% that uses the |omdoc:p| element for paragraphs inside |CMP|s. For that we have modified -% the DTD only to allowed |omdoc:p| elements in |omdoc:CMP| (in particular no text). Then -% we instruct the |\par| macro to close a |omdoc:p| element if possible. The next -% |omdoc:p| element is then opened automatically, since we make |omdoc:p| and |omdoc:CMP| -% autoclose and autoopen. -% -% \begin{macrocode} -%<*ltxml> -DefConstructor('\par',sub { $_[0]->maybeCloseElement('omdoc:p'); },alias=>"\\par\n"); -Tag('omdoc:p', autoClose=>1, autoOpen=>1); -Tag('omdoc:CMP', autoClose=>1, autoOpen=>1); -Tag('omdoc:omtext', autoClose=>1, autoOpen=>1); -%#$ -% \end{macrocode} -% the rest of the reinterpretations is quite simple, we either disregard presentational -% markup or we re-interpret it in terms of {\omdoc}. -% \begin{macrocode} -%\def\omspace#1{\hspace*{#1}} -%<*ltxml> -DefConstructor('\omspace{}',''); -DefConstructor('\emph{}',"#1"); -DefConstructor('\em',""); -DefConstructor('\texttt{}',"#1"); -DefConstructor('\tt',""); -DefConstructor('\textbf{}',"#1"); -DefConstructor('\bf',""); -DefConstructor('\textsf{}',"#1"); -DefConstructor('\sf',""); -DefConstructor('\textsl{}',"#1"); -DefConstructor('\sl',""); -DefConstructor('\textit{}',"#1"); -DefConstructor('\it',""); -Tag('omdoc:phrase', autoClose=>1); -DefEnvironment('{center}','#body'); -DefEnvironment('{flushleft}','#body'); -DefEnvironment('{flushright}','#body'); -DefEnvironment('{minipage}[]{}','#body'); -DefEnvironment('{quote}', - "" - . "#body" - .""); -DefEnvironment('{quotation}', - " - . "#body" - .""); -DefEnvironment('{LARGE}','#body'); -DefEnvironment('{Large}','#body'); -DefEnvironment('{large}','#body'); -DefEnvironment('{small}','#body'); -DefEnvironment('{footnotesize}','#body'); -DefEnvironment('{tiny}','#body'); -DefEnvironment('{scriptsize}','#body'); -DefConstructor('\LARGE',''); -DefConstructor('\Large',''); -DefConstructor('\large',''); -DefConstructor('\small',''); -DefConstructor('\footnotesize',''); -DefConstructor('\scriptsize',''); -DefConstructor('\tiny',''); -DefConstructor('\fbox{}','#1'); -DefConstructor('\footnote[]{}', - "#2"); -DefConstructor('\footnotemark[]',""); -DefConstructor('\footnotetext[]{}', - "#2"); -DefConstructor('\sf', ''); -DefConstructor('\sc', ''); -% -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}[id=sec:impl:ids]{Providing IDs for {\omdoc} Elements} -% -% To provide default identifiers, we tag all {\omdoc} elements that allow |xml:id| -% attributes by executing the |numberIt| procedure below. -% -% \begin{macrocode} -%<*ltxml> -Tag('omdoc:p',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:omtext',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:omgroup',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:CMP',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:link',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:meta',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:resource',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:ul',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:li',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:di',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:dt',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:dd',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:ol',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:dl',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:idx',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:phrase',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:note',afterOpen=>\&numberIt,afterClose=>\&locateIt); -% -% \end{macrocode} -% We also have to number some {\latexml} tags, so that we do not get into trouble with the -% \omdoc tags inside them. -% \begin{macrocode} -%<*ltxml> -Tag('ltx:tabular',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:thead',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:td',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:tr',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:caption',afterOpen=>\&numberIt,afterClose=>\&locateIt); -% -% \end{macrocode} -% The |numberIt| procedure gets the prefix from first parent with an |xml:id| attribute and then -% extends it with a label that reflects the number of preceding siblings, provided that -% there is not already an identifier. Additionally, it estimates an XPointer position in the original document -% of the command sequence which produced the tag. -% The |locateIt| subroutine is a sibling of |numberIt| as it is required as an |afterClose| handle for tags -% produced by {\LaTeX} environments, as opposed to commands. |locateIt| estimates an XPointer end position of -% the LaTeX environment, allowing to meaningfully locate the entire environment at the source. -% \begin{macrocode} -%<*ltxml> -sub numberIt { - my($document,$node,$whatsit)=@_; - my(@parents)=$document->findnodes('ancestor::*[@xml:id]',$node); - my $prefix= (@parents ? $parents[$#parents]->getAttribute('xml:id')."." : ''); - my(@siblings)=$document->findnodes('preceding-sibling::*[@xml:id]',$node); - my $n = scalar(@siblings)+1; - my $id = ($node -> getAttribute('xml:id')); - $node->setAttribute('xml:id'=>$prefix."p$n") unless $id; - my $about = $node -> getAttribute('about'); - $node->setAttribute('about'=>'#'.$node->getAttribute('xml:id')) unless $about; - #Also, provide locators: - my $locator = $whatsit->getProperty('locator'); - #Need to inherit locators if missing: - $locator = (@parents ? $parents[$#parents]->getAttribute('stex:srcref') : '') unless $locator; - $node->setAttribute('stex:srcref'=>$locator) if $locator; } -sub locateIt { - my($document,$node,$whatsit)=@_; - #Estimate trailer locator: - my $trailer = $whatsit->getProperty('trailer'); - return unless $trailer; #Nothing we can do if the trailer isn't defined - $trailer = $trailer->getLocator; - return unless ($trailer && $trailer!~/^\s*$/); #Useless if broken - my $locator = $node->getAttribute('stex:srcref'); - if ($locator) { - $locator =~ /^(.+from=\d+;\d+)/; - my $from = $1; - $trailer =~ /(,to=\d+;\d+.+)$/; - my $to = $1; - $locator = $from.$to; - } else { - $locator = $trailer; #This should never happen - } - $node->setAttribute('stex:srcref' => $locator); -} -%#$ -% \end{macrocode} -% \end{omgroup} -% -% \begin{omgroup}{Finale} -% -% We need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \end{omgroup} -%\end{omgroup} -% \Finale -\endinput -% \iffalse -% LocalWords: GPL structuresharing STR omdoc dtx stex CPERL LoadClass url dc -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi -% LocalWords: RequirePackage RegisterNamespace namespace xsl DocType ltxml dtd -% LocalWords: ltx DefEnvironment beforeDigest AssignValue inPreamble getGullet -% LocalWords: afterDigest keyval omgroup DefKeyVal Semiverbatim KeyVal locator -% LocalWords: OptionalKeyVals DefParameterType IfBeginFollows skipSpaces CMP -% LocalWords: ifNext DefMacro needwrapper unlist DefConstructor omtext bgroup -% LocalWords: useCMPItemizations RefStepItemCounter egroup beginItemize li di -% LocalWords: beforeDigestEnd dt autoclose ul ol dl env showignores srcref def -% LocalWords: afterOpen LastSeenCMP autoClose DefCMPEnvironment proto ToString -% LocalWords: addAttribute nlex nlcex omdocColorMacro args tok MergeFont qw rm -% LocalWords: TokenizeInternal toString isMath foreach maybeCloseElement id'd -% LocalWords: autoOpen minipage footnotesize scriptsize numberIt whatsit href -% LocalWords: getAttribute setAttribute OMDoc RelaxNGSchema noindex xml lec sc -% LocalWords: Subsubsection useDefaultItemizations refundefinedtrue sblockquote -% LocalWords: DefCMPConstructor sinlinequote idx idt ide idp emph extrefs sref -% LocalWords: flushleft flushright DeclareOption PassOptions undef cls iffalse -% LocalWords: ProcessOptions subparagraph ignoresfalse ignorestrue raisebox tr -% LocalWords: texorpdfstring latexml texttt fileversion maketitle newpage iff -% LocalWords: tableofcontents newpage ednote obeylines usepackage indextoo Cwd -% LocalWords: indextoo twintoo twintoo exfig vspace twinalt ldots ttin emin -% LocalWords: renmanig myindex atwin atwin packge-local blockquote inlinequote -% LocalWords: atwintoo atwinalt atwinalt printbibliography impl cwd newif ifx -% LocalWords: ifindex indextrue indexfalse srefaddidkey smallskip showmeta -% LocalWords: providecommand stDMemph textbf newenvironment hfil showmeta -% LocalWords: noindent ignorespaces newcommand nobreak hfill hbox mygraphics -% LocalWords: includegraphics mycgraphics mybgraphics fbox adjectivized hspace -% LocalWords: printindex jobname.ind jobname.ind omspace footnotemark thead -% LocalWords: footnotetext findnodes doctex textsf langle textsf langle funval -% LocalWords: metakeys funsymbs addmetakey metasetkeys startemph textsl textit diff --git a/Master/texmf-dist/source/latex/stex/presentation/presentation.dtx b/Master/texmf-dist/source/latex/stex/presentation/presentation.dtx deleted file mode 100644 index dd6a4fe8191..00000000000 --- a/Master/texmf-dist/source/latex/stex/presentation/presentation.dtx +++ /dev/null @@ -1,1487 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for Presenting Semantic Macros in sTeX -% Copyright (C) 2004-2007 Michael Kohlhase, all rights reserved -% This file is released under the LaTeX Project Public License (LPPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/presentation/presentation.dtx $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{presentation}[2010/06/25 v1.0 presentation for semantic macros] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,float,amstext,alltt} -\usepackage{modules,presentation,stex-logo} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage{../ctansvn} -\usepackage{hyperref} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: presentation.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/presentation/presentation.dtx $ -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{presentation.dtx}\end{document} -% -% \fi -% -% \iffalse\CheckSum{557}\fi -% -% \changes{v0.9}{2005/06/14}{First Version with Documentation} -% \changes{v0.9a}{2005/07/01}{Completed Documentation} -% \changes{v0.9b}{2005/08/06}{Complete functionality and Updated Documentation} -% \changes{v0.9c}{2006/01/13}{more packaging} -% \changes{v0.9d}{2006/10/13}{adding mixfix declarations} -% \changes{v0.9d}{2006/10/13}{dealing with precedences in keyword arguments} -% \changes{v0.9e}{2007/09/03}{fixing argument precedences, adding LaTeXML bindings} -% \changes{v0.9f}{2007/12/09}{adding general elision} -% \changes{v0.9g}{2008/06/17}{getting the LaTeXML right} -% \changes{v0.9h}{2009/02/27}{turning the precedence order around to make this compatible -% with the latest OMDoc, change all precedences $n$ to $1000-n$} -% \changes{v0.9h}{2009/07/30}{adding brackets to the generated notation elements} -% \changes{v0.9h}{2010/06/18}{considering done now} -% \GetFileInfo{presentation.sty} -% -% \MakeShortVerb{\|} -%\def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\xml{\scsys{Xml}} -% \def\mathml{\scsys{MathML}} -% \def\omdoc{\scsys{OMDoc}} -% \def\openmath{\scsys{OpenMath}} -% \def\latexml{\scsys{LaTeXML}} -% \def\perl{\scsys{Perl}} -% \def\cmathml{Content-{\sc MathML}\index{Content {\sc MathML}}\index{MathML@{\sc MathML}!content}} -% \def\activemath{\scsys{ActiveMath}} -% \def\twin#1#2{\index{#1!#2}\index{#2!#1}} -% \def\twintoo#1#2{{#1 #2}\twin{#1}{#2}} -% \def\atwin#1#2#3{\index{#1!#2!#3}\index{#3!#2 (#1)}} -% \def\atwintoo#1#2#3{{#1 #2 #3}\atwin{#1}{#2}{#3}} -% \title{{\texttt{presentation.sty}}: An Infrastructure for Presenting Semantic -% Macros in {\stex}\thanks{Version {\fileversion} (last revised {\filedate})}} -% \author{Michael Kohlhase \& Deyan Ginev\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \date{\today} -% \maketitle -% -% \begin{abstract} -% The |presentation| package is a central part of the {\stex} collection, a version of -% {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents semantically without -% leaving the document format, essentially turning {\TeX/\LaTeX} into a document format -% for mathematical knowledge management (MKM). -% -% This package supplies an infrastructure that allows to specify the presentation of -% semantic macros, including preference-based bracket elision. This allows to markup the -% functional structure of mathematical formulae without having to lose high-quality -% human-oriented presentation in {\LaTeX}. Moreover, the notation definitions can be -% used by MKM systems for added-value services, either directly from the {\sTeX} -% sources, or after translation. -% \end{abstract} -% -% \newpage\setcounter{tocdepth}{2}\tableofcontents\newpage -% -%\section{Introduction}\label{sec:presentation} -% -% The |presentation| package supplies an infrastructure that allows to specify the -% presentation of semantic macros, including preference-based bracket elision. This allows -% to markup the functional structure of mathematical formulae without having to lose -% high-quality human-oriented presentation in {\LaTeX}. Moreover, the notation definitions -% can be used by MKM systems for added-value services, either directly from the {\sTeX} -% sources, or after translation. -% -% {\stex} is a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents -% semantically without leaving the document format, essentially turning {\TeX/\LaTeX} into -% a document format for mathematical knowledge management (MKM). -% -% The setup for semantic macros described in the {\stex} |modules| package works well for -% simple mathematical functions: we make use of the macro application syntax in {\TeX} to -% express function application. For a simple function called ``foo'', we would just -% declare |\symdef{foo}[1]{foo(#1)}| and have the concise and intuitive syntax |\foo{x}| -% for $foo(x)$. But mathematical notation is much more varied and interesting than just -% this. -% -% \section{The User Interface}\label{sec:user} -% -% In this package we will follow the {\sTeX} approach and assume that there are four basic -% types of mathematical expressions: symbols, variables, applications and -% binders. Presentation of the variables is relatively straightforward, so we will not -% concern ourselves with that. The application of functions in mathematics is mostly -% presented in the form $f(a_1,\ldots,a_n)$, where $f$ is the function and the $a_i$ are -% the arguments. However, many commonly-used functions from this presentational scheme: -% for instance binomial coefficients: $\bigl({n\atop k}\bigr)$, pairs: $\langle -% a,b\rangle$, sets: $\{x\in S\,\vert\, x^2\ne0\}$, or even simple addition: $3+5+7$. Note -% that in all these cases, the presentation is determined by the (functional) head of the -% expression, so we will bind the presentational infrastructure to the operator. -% -% \subsection{Prefix \& Postfix Notations}\label{sec:prepostfix} -% -% The default notation for an object that is obtained by applying a function $f$ to -% arguments $a_1$ to $a_n$ is $f(a_1,\ldots,a_n)$. The \DescribeMacro{\prefix}|\prefix| -% macro allows to specify a prefix presentation for a function (the usual presentation in -% mathematics). Note that it is better to specify |\symdef{uminus}[1]{\prefix{-}{#1}}| -% than just |\symdef{uminus}[1]{-#1}|, since we can specify the bracketing behavior in the -% former (see Section~\ref{sec:elision}). -% -% The \DescribeMacro{\postfix}|\postfix| macro is similar, only that the function is -% presented after the argument as for e.g. the factorial function: $5!$ stands for the -% result of applying the factorial function to the number 5. Note that the function is -% still the first argument to the |\postfix| macro: we would specify the presentation for -% the factorial function with |\symdef{factorial}[1]{\postfix{!}{#1}}|. -% -% |\prefix| and |\postfix| have $n$-ary variants \DescribeMacro{\prefixa}|\prefixa| and -% \DescribeMacro{\postfixa}|\postfixa| that take an arbitrary number of arguments -% (mathematically; syntactically grouped into one {\TeX} argument). These take an extra -% separator argument.\ednote{think of a good example!} -% -% \subsection{Mixfix Notations}\label{sec:mixfix} -% -% For the presentation of more complex operators, we will follow the approach used by the -% Isabelle theorem prover. There, the presentation of an $n$-ary function (i.e. one that -% takes $n$ arguments) is specified as -% \meta{pre}\meta{arg$_0$}\meta{mid$_1$}$\cdots$\meta{mid$_n$}\meta{arg$_n$}\meta{post}, -% where the \meta{arg$_i$} are the arguments and \meta{pre}, \meta{post}, and the -% \meta{mid$_i$} are presentational material. For instance, in infix operators like the -% binary subset operator, \meta{pre} and $\meta{post}$ are empty, and \meta{mid$_1$} is -% $\subseteq$. For the ternary conditional operator in a programming language, we might -% have the presentation pattern -% |if|\meta{arg$_1$}|then|\meta{arg$_2$}|else|\meta{arg$_3$}|fi| that utilizes all -% presentation positions. -% -% \DescribeMacro{\mixfix*}The |presentation| package provides mixfix declaration macros -% |\mixfixi|, |\mixfixii|, and |\mixfixiii| for unary, binary, and ternary functions. This -% covers most of the cases, larger arities would need a different argument -% pattern.\footnote{If you really need larger arities, contact the author!} The call -% pattern of these macros is just the presentation pattern above. In general, the mixfix -% declaration of arity $i$ has $2n+1$ arguments, where the even-numbered ones are for the -% arguments of the functions and the odd-numbered ones are for presentation material. For -% instance, to define a semantic macro for the subset relation and the conditional, we -% would use the markup in Figure~\ref{fig:mixfix}. -% \begin{exfig} -% \begin{verbatim} -% \symdef{sseteq}[2]{\mixfixii{}{#1}{\subseteq}{#2}{}} -% \symdef{sseteq}[2]{\infix\subseteq{#1}{#2}} -% \symdef{ite}[2]{\mixfixiii{{\tt{if}}\;}{#1} -% {\;{\tt{then}}\;}{#2} -% {\;{\tt{else}}\;}{#3}{\;{\tt{fi}}}} -% \end{verbatim} -% \vspace*{-1.5em} -% \begin{center} -% \begin{tabular}{|l|l|}\hline -% source & presentation \\\hline -% |\sseteq{S}T| & $(S\subseteq T)$\\\hline -% |\ite{x<0}{-x}x| & ${\tt{if}}\,x<0\,{\tt{then}}\,-x\,{\tt{else}}\,x\,{\tt{fi}}$\\\hline -% \end{tabular} -% \end{center} -% \caption{Declaration of mixfix operators}\label{fig:mixfix} -% \end{exfig} -% -% For certain common cases, the |presentation| package provides shortcuts for the mixfix -% declarations. For instance, we provide the \DescribeMacro{\infix}|\infix| macro for -% binary operators that are written between their arguments (see Figure~\ref{fig:mixfix}).\ednote{really?} -% -% \subsection{\texorpdfstring{$n$}{n}-ary Associative Operators}\label{sec:assoc} -% -% Take for instance the operator for set union: formally, it is a binary function on -% sets that is associative (i.e. $(S_1\cup S_2)\cup S_3=S_1\cup (S_2\cup S_3)$), therefore -% the brackets are often elided, and we write $S_1\cup S_2\cup S_3$ instead (once we have -% proven associativity). Some authors even go so far to introduce set union as a $n$-ary -% operator, i.e. a function that takes an arbitrary (positive) number of arguments. We will -% call such operators {\bf{$n$-ary -% associative}\atwin{n-ary}{associative}{operator}}. -% -% Specifying the presentation\ednote{introduce the notion of presentation above} of -% $n$-ary associative operators in |\symdef| forms is not straightforward, so we provide -% some infrastructure for that. As we cannot predict the number of arguments for $n$-ary -% operators, we have to give them all at once, if we want to maintain our use of {\TeX} -% macro application to specify function application. So a semantic macro for an $n$-ary -% operator will be applied as |\nunion{|\meta{$a_1$}|,|\ldots|,|\meta{$a_n$}|}|, where the -% sequence of $n$ logical arguments \meta{$a_i$} are supplied as one {\TeX} argument which -% contains a comma-separated list. We provide variants of the mixfix declarations -% presented in section~\ref{sec:mixfix} which deal with associative arguments. For -% instance, the variant \DescribeMacro{\mixfixa}|\mixfixa| allows to specify $n$-ary -% associative operators. -% |\mixfixa{|\meta{pre}|}{|\meta{arg}|}{|\meta{post}|}{|\meta{op}|}| specifies a -% presentation, where \meta{arg} is the associative argument and \meta{op} is the -% corresponding operator that is mapped over the argument list; as above, {\meta{pre}}, -% \meta{post}, are prefix and postfix presentational material. For instance, the finite -% set constructor could be constructed as -% \begin{verbatim} -% \newcommand{\fset}[1]{\mixfixa[p=1000]{\{}{#1}{\}}{,}} -% \end{verbatim} -% -% The \DescribeMacro{\assoc}|\assoc| macro is a convenient abbreviation of a |\mixfixa| -% that can be used in cases, where \meta{pre} and \meta{post} are empty (i.e. in the -% majority of cases). It takes two arguments: the presentation of a binary operator, and a -% comma-separated list of arguments, it replaces the commas in the second argument with -% the operator in the first one. For instance |\assoc\cup{S_1,S_2,S_3}| will be formatted -% to $S_1\cup S_2\cup S_3$. Thus we can use |\def\nunion#1{\assoc\cup{#1}}| or even -% |\def\nunion{\assoc\cup}|, to define the $n$-ary operator for set union in {\TeX}. For -% the definition of a semantic macro in {\stex}, we use the second form, since we are more -% conscious of the right number of arguments and would declare -% |\symdef{nunion}[1]{\assoc\cup{#1}}|.\ednote{think about big operators for ACI -% functions} -% -% The |\mixfixii| macro has variants \DescribeMacro{\mixfixia}|\mixfixia| and -% \DescribeMacro{\mixfixai}|\mixfixai| which allow to make one or two arguments in a -% binary function associative. A use case for the second macro is an nary function type -% operator |\fntype|, which can be defined via -% \begin{verbatim} -% \def\fntype#1#2{\mixfixai{}{#1}\rightarrow{#2}{}\times} -% \end{verbatim} -% \def\fntype#1#2{\mixfixai{}{#1}\rightarrow{#2}{}\times} -% and which will format |\fntype{\alpha,\beta,\gamma}\delta| as -% $\fntype{\alpha,\beta,\gamma}\delta$ -% -% Finally, the |\mixfixiii| macro has the variants |\mixfixaii|, |\mixfixiai|, and -% |\mixfixiia| as above\footnote{If you really need larger arities with associative -% arguments, contact the package author!}. For instance we can use the first variant for -% a typing judgment using -% \begin{verbatim} -% \def\typej#1#2#3{\mixfixaii{}{#1}{\vdash_{\Sigma}}{#2}\colon{#3}{}{,}} -% \end{verbatim} -% \def\typej#1#2#3{\mixfixaii{}{#1}{\vdash_{\Sigma}}{#2}\colon{#3}{}{,}} -% which formats |\typej{\Gamma,[x:\alpha],[y:\beta]}{f(x,y)}{\beta}| as -% \[\typej{\Gamma,[x:\alpha],[y:\beta]}{f(x,y)}{\beta}.\] -% -% \subsection{Precedence-Based Bracket Elision}\label{sec:elision} -% -% In the infrastructure discussed above, we have completely ignored the fact that we use -% brackets to disambiguate the formula structure. The general baseline rule here is that -% we enclose any presented subformula with (round) brackets to mark it as a logical unit. -% If we applied this to the following formula that combines set union and set intersection -% \begin{equation}\label{cupcap} -% |\nunion{\ninters{a,b},\ninters{c,d}}| -% \end{equation} -% this would yield $((a\cap b)\cup (c\cap d))$, and not $a\cap b\cup c\cap d$ as we are -% used to. In mathematics, brackets are elided, whenever the author anticipates that the -% reader can understand the formula without them, and would be overwhelmed with them. To -% achieve this, there are set of common conventions that govern bracket elision --- -% ``$\cap$ binds stronger than $\cup$'' in (\ref{cupcap}). The most common is to assign -% precedences to all operators, and elide brackets, if the {\index*{precedence}} of the -% operator is larger than that of the context it is presented in (or equivalently: we only -% write brackets, if the operator precedence is smaller or equal to the context -% precedence). Note that this is more selective that simply dropping outer brackets which -% would yield $a\cap b\cup c\cap d$ for (\ref{capcup}), where we would have liked $(a\cup -% b)\cap(c\cup d)$ -% \begin{equation}\label{capcup} -% |\ninters{\nunion{a,b},\nunion{c,d}}| -% \end{equation} -% In our example above, we would assign $\cap$ a larger precedence than $\cup$ (and both a -% larger precedence than the initial precedence to avoid outer brackets). To compute the -% presentation of (\ref{capcup}) we start out with the |\ninters|, elide its brackets -% (since the precedence $n$ of $\cup$ is larger than the initial precedence $i$), and set -% the context precedence for the arguments to $n$. When we present the arguments, we -% present the brackets, since the precedence of |nunion| is larger than the context -% precedence $n$. -% -% This algorithm --- which we call {\textbf{precedence-based bracket elision}} --- goes a -% long way towards approximating mathematical practice. Note that full bracket elision in -% mathematical practice is a reader-oriented process, it cannot be fully mechanical, -% e.g. in $(a\cap b\cap c\cap d\cap e\cap f\cap g)\cup h$ we better put the brackets -% around the septary intersection to help the reader even though they could have been -% elided by our algorithm. Therefore, the author has to retain full control\ednote{think -% about how to implement that. We need a way to override precedences locally} over -% bracketing in a bracket elision architecture. Otherwise it would become impossible to -% explain the concept of associativity in $(a\circ b)\circ c =a\circ(b\circ c)$, where we -% need the brackets for this one time on an otherwise associative operation $\circ$. -% -% \begin{figure}[htb] -% \begin{center} -% \begin{tabular}{|l|l|l|}\hline -% Precedence & Operators & Comment\\\hline\hline -% 800 & +,- & unary \\\hline -% 800 & $\hat{}$ & exponentiation \\\hline -% 600 & $*,\land,\cap$ & multiplicative \\\hline -% 500 & $+,-,\lor,\cup$ & additive\\\hline -% 400 & / & fraction \\\hline -% 300 & $=, \ne, \leq, <, >, \geq$ & relation\\\hline -% \end{tabular} -% \end{center}\vspace*{-1em} -% \caption{Common Operator Precedences}\label{fig:precedence} -% \end{figure} -% -% Furthermore, we supply an optional keyval arguments to the mixfix declarations and their -% abbreviations that allow to specify precedences: The key \DescribeMacro{p}|p| key is -% used to specify the {\bf{operator precedence}}, and the keys -% \DescribeMacro{pi}\DescribeMacro{pii}\DescribeMacro{piii}|p|\meta{i} can be used to -% specify the {\bf{argument precedence}s}. The latter will set the precedence level while -% processing the arguments, while the operator precedence invokes brackets, if it is -% smaller than the current precedence level --- which is set by the appropriate argument -% precedence by the dominating operators or the outer precedence. The values of the -% precedence keys can be integers or \DescribeMacro{\iprec}|\iprec| for the infinitely -% large precedence or \DescribeMacro{\niprec}|\niprec| for the infinitely small -% precedence. -% -% If none of the precedences is specified, then the defaults are assumed. The operator -% precedence is set to the default operator precedence, which defaults to 0. The argument -% precedences default to the operator precedence. -% -% Figure~\ref{fig:precedence} gives an overview over commonly used precedences. Note that -% most operators have precedences higher than the default precedence of 0, otherwise the -% brackets would not be elided. For our examples above, we would define -% \begin{verbatim} -% \newcommand{\nunion}[1]{\assoc[p=500]{\cup}{#1}} -% \newcommand{\ninters}[1]{\assoc[p=600]{\cap}{#1}} -% \end{verbatim} -% to get the desired behavior. -% -% Note that the presentation macros uses round brackets for grouping by default. We can -% specify other brackets via two more keywords: \DescribeMacro{lbrack}|lbrack| and -% \DescribeMacro{rbrack}|rbrack|. -% -% Note that formula parts that look like brackets usually are not. For instance, we should -% not define the finite set constructor via -% \begin{equation}\label{wrongset} -% |\newcommand{\fset}[1]{\assoc[lbrack=\{,rbrack=\}]{,}{#1}}| -% \end{equation} -% where the curly braces are used as brackets, but as presented in section~\ref{sec:assoc} -% even though both would format |\fset{a,b,c}| as $\{a,b,c\}$. In the encoding here, an -% operator with suitably high operator precedence (it is the best practice u)would be able -% to make the brackets disappear. Thus the correct version of (\ref{wrongset}) is -% \begin{equation}\label{goodset} -% |\newcommand{\fset}[1]{\mixfixa[p=\iprec,pi=0]{\{}{#1}{\}}{,}}| -% \end{equation} -% Note that |\prefix| and |\postfix| and their variants declared in -% section~\ref{sec:prepostfix} have brackets that do not participate (actively) in the -% precedence-based elision: function application brackets are not subject to elision. But -% the operator precedence |p| is still taken into account for outer brackets. The argument -% precedence |pi| has negative infinity as a default to avoid spurious brackets for -% arguments. -% -% \subsection{Flexible Elision}\label{sec:flexible-elision} -% -% There are several situations in which it is desirable to display only some parts of the -% presentation: -% \begin{itemize} -% \item We have already seen the case of redundant brackets above -% \item Arguments that are strictly necessary are omitted to simplify the notation, and the -% reader is trusted to fill them in from the context. -% \item Arguments are omitted because they have default values. For example $\log_{10}x$ -% is often written as $\log x$. -% \item Arguments whose values can be inferred from the other arguments are usually -% omitted. For example, matrix multiplication formally takes five arguments, namely the -% dimensions of the multiplied matrices and the matrices themselves, but only the latter -% two are displayed. -% \end{itemize} -% -% Typically, these elisions are confusing for readers who are getting acquainted with a -% topic, but become more and more helpful as the reader advances. For experienced readers -% more is elided to focus on relevant material, for beginners representations are more -% explicit. In the process of writing a mathematical document for traditional (print) -% media, an author has to decide on the intended audience and design the level of elision -% (which need not be constant over the document though). With electronic media we have new -% possibilities: we can make elisions flexible. The author still chooses the elision level -% for the initial presentation, but the reader can adapt it to her level of competence and -% comfort, making details more or less explicit. -% -% To provide this functionality, the |presentation| package provides the -% \DescribeMacro{\elide}|\elide| macro allows to associate a text with an integer -% {\textbf{visibility level}} and group them into {\textbf{elision groups}}. High levels -% mean high elidability. -% -% Elision can take various forms in print and digital media. In static media like -% traditional print on paper or the PostScript format, we have to fix the elision level, -% and can decide at presentation time which elidable tokens will be printed and which will -% not. In this case, the presentation algorithm will take visibility thresholds $T_g$ for -% every elidability group $g$ as a user parameter and then elide (i.e. not print) all -% tokens in visibility group $g$ with level $l>T_g$. We specify this threshold for via the -% \DescribeMacro{\setegroup}|\setegroup| macro. For instance in the example below, we have -% a two type annotations |par| for type parameters and |typ| for type annotations -% themselves. -% -% \begin{exfig}[ht] -% \begin{verbatim} -% $\mathbf{I}\elide{par}{500}{^\alpha}\elide{typ}{100}{_{\alpha\to\alpha}} -% :=\lambda{X\elide{typ}{500}{_\alpha}}.X$ -% \end{verbatim}\vspace*{-2em} -% \caption{Elision with Elision Groups}\label{ex:elision} -% \end{exfig} -% -% The visibility levels in the example encode how redundant the author thinks the elided -% parts of the formula are: low values show high redundancy. In our example the intuition -% is that the type parameter on the $\mathbf{I}$ combinator and the type annotation on the -% bound variable $X$ in the $\lambda$ expression are of the same obviousness to the -% reader. So in a document that contains |\setegroup{typ}{0}| and |\setegroup{par}{0}| -% Figure~\ref{ex:elision} will show $\mathbf{I}:=\lambda{X}.X$ eliding all redundant -% information. If we have both values at 600, then we will see -% $\mathbf{I}^\alpha:=\lambda{X_\alpha}.X$ and only if the threshold for |typ| rises above -% 900, then we see the full information: -% $\mathbf{I}^\alpha_{\alpha\to\alpha}:=\lambda{X_\alpha}.X$. -% -% In an output format that is capable of interactively changing its appearance, e.g. -% dynamic XHTML+MathML (i.e. XHTML with embedded Presentation {\mathml} formulas, which -% can be manipulated via JavaScript in browsers), an application can export the -% information about elision groups and levels to the target format, and can then -% dynamically change the visibility thresholds by user interaction. Here the visibility -% threshold would also be used, but here it only determines the default rendering; a user -% can then fine-tune the document dynamically to reveal elided material to support -% understanding or to elide more to increase conciseness. -% -% The price the author has to pay for this enhanced user experience is that she has to -% specify elided parts of a formula that would have been left out in conventional -% {\LaTeX}. Some of this can be alleviated by good coding practices. Let us consider the -% log base case. This is elided in mathematics, since the reader is expected to pick it up -% from context. Using semantic macros, we can mimic this behavior: defining two semantic -% macros: |\logC| which picks up the log base from the context via the |\logbase| macro -% and |\logB| which takes it as a (first) argument. -% -% \begin{verbatim} -% \provideEdefault{logbase}{10} -% \symdef{logB}[2]{\prefix{\mathrm{log}\elide{base}{100}{_{#1}}}{#2}} -% \abbrdef{logC}[1]{\logB{\fromEcontext{logbase}}{#1}} -% \end{verbatim} -% -% \DescribeMacro{\provideEdefault} Here we use the |\provideEdefault| macro to initialize -% a {\LaTeX} token register for the |logbase| default, which we can pick up from the -% elision context using \DescribeMacro{\fromEcontext}|\fromEcontext| in the definition of -% |\logC|. Thus |\logC{x}| would render as $\mathrm{log}_{10}(x)$ with a threshold of 50 -% for |base| and as $\mathrm{log}_2$, if the local {\TeX} group e.g. given by the -% |assertion| environment contains a -% \DescribeMacro{setEdefault}|\setEdefault{logbase}{2}|. -% -% \subsection{Variable Names}\label{sec:inter:vname} -% -% In mathematics we often use complex variable names like $x'$, $g_n$, $f^1$, -% $\widetilde\phi_i^j$ or even $foo$; for presentation-oriented {\LaTeX}, this is not a -% problem, but if we want to generate content markup, we must show that are complex -% identifiers (otherwise the variable name $foo$ might be mistaken for the product $f\cdot -% o\cdot o$). In careful mathematical typesetting, |$sin$| is distinguished from |$\sin$|, -% but we cannot rely on this effect for variable names. -% -% \DescribeMacro{\vname} |\vname| identifies a token sequence as a name, and allows the -% user to provide an ASCII ({\xml}-compatible) identifier for it. The optional argument is -% the identifier, and the second one the LaTeX representation. The identifier can also be -% used with \DescribeMacro{\vname} |\vnref| for referencing. So, if we have used -% |\vnname[xi]{x_i}|, then we can later use |\vnref{xi}| as a short name for -% |\vname{x_i}|. Note that in output formats that are capable of generating structure -% sharing, |\vnref{xi}| would be represented as a cross-reference. -% -% Since indexed variable names make a significant special case of complex identifiers, we -% provides the macros \DescribeMacro{\livar}|\livar| that allows to mark up variables with -% lower indices. If |\livar| is given an optional first argument, this is taken as a -% name. Thus |\livar[foo]{x}1| is ``short'' for |\vname[foo]{x_1}|. The macros -% \DescribeMacro{\livar}|\livar|, serve the analogous purpose for variables with upper -% indices, and \DescribeMacro{\ulivar}|\ulivar| for upper and lower indices. Finally, -% \DescribeMacro{\primvar}|\primvar| and \DescribeMacro{\pprimvar}|\pprimvar| do the same -% for variables with primes and double primes (triple primes are bad style). -% -% \subsection{Other Layout Primitives}\label{sec:inter:primitives} -% -% Not all mathematical layouts are producible with mixfix notations. A prime example are -% grid layouts which are marked up using the |array| element in {\TeX/\LaTeX}, e.g. for -% definition by cases as the (somewhat contrived) definition of the absolute value -% function in the upper part of Figure~\ref{fig:piece}. We will now motivate the need of -% special layout primitives with this example. -% \begin{exfig} -% \begin{module}[id=foo] -% \symdef{piece}[2]{\arrayline{\arraycell{#1}}{\text{if}\;#2}} -% \symdef{otherwise}[1]{\arrayline{\arraycell{#1}}{\text{else}}} -% \symdef{piecewise}[1]{\left\{\begin{array}{rl}#1\end{array}\right.} -% \qquad\begin{minipage}[c]{5cm} -% $\vert x\vert\colon=\piecewise{\piece{x}{x>0}\piece{-x}{x<0}\otherwise{0}}$ -% \end{minipage} -% \qquad -% \begin{minipage}[c]{7cm} -% \begin{verbatim} -% |x|\colon=\left\{ -% \begin{array}{rl} -% x & x>0\\ -% -x & x<0\\ -% 0 & \text{else} -% \end{array} -% \right. -% \end{verbatim} -% \end{minipage} -% \end{module} -% \hrule -% \begin{verbatim} -% \symdef{piece}[2]{\arrayline{\arraycell{#1}}{\text{if}\;#2}} -% \symdef{otherwise}[1]{\arrayline{\arraycell{#1}}{\text{else}}} -% \symdef{piecewise}[1]{\left\{\begin{array}{rl}#1\end{array}\right.} -% $|x|\colon=\piecewise{\piece{x}{x>0}\piece{-x}{x<0}\otherwise{0}}$ -% \end{verbatim} -% \vspace*{-1.5em} -% \caption{A piecewise definition of the absolute value function}\label{fig:piece} -% \end{exfig} -% But this does not work for content markup via semantic macros~\cite{KohAmb:smmssl:ctan}, -% which wants to group formula parts by function. For definition by cases, we may want to -% follow the OpenMath |piece1| content dictionary~\cite{CD:piece1:on}, which groups -% ``piecewise'' definition into a constructor |piecewise|, whose children are a list of -% |piece| constructor optionally followed by an |otherwise|. If we want to mimic this by -% semantic macros in \stex (these are defined via |\symdef|; see~\cite{KohAmb:smmssl:ctan} -% for details), we would naturally define |\piecewise| by wrapping an |array| environment -% (see the last line in Figure~\ref{fig:piece}). Then we would naturally be tempted to -% define |\piece| via |\symdef{piece}[2]{#1&\text{if}\;{#2}\\}| and |\otherwise| via -% |\symdef{otherwise}[1]{#1&\text{else}}|. But this does not support the generation of -% separate notation definitions for |\piece| and |\otherwise|: here \latexml has to -% generate presentational information outside of the |array| context that provides the |&| -% and |\\| command sequences\footnote{Note that this is not a problem when we only run -% |latex| if we assume that \texttt{\textbackslash piece} and \texttt{\textbackslash -% otherwise} are only used in arguments of \texttt{\textbackslash piecewise}.}. Therefore -% the |presentation| package provides the macros |\arrayline| and |\arraycell| that -% refactor this functionality. -% -% \DescribeMacro{\arrayline}|\arrayline{|\meta{cells}|}{|\meta{cell}|}| is -% {\LaTeX}-equivalent to \meta{cells}|&|\meta{cell}|\\| and can thus be used to create -% array lines with one or more array cells: \meta{cell} is the last array cell, and the -% previous ones are each marked up as -% \DescribeMacro{\arraycell}|\arraycell{|\meta{cell}|}|, where \meta{cell} is the cell -% content. In last lines of fFigure~\ref{fig:piece} we have used them to create the array -% lines for |\piece| and |\otherwise|. Note that the array cell specifications in -% |\arrayline| must coincide with the array specification in the main constructor (here -% |rl| in |\piecewise|). -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography} -% -% \section{The Implementation}\label{sec:implementation} -% -% The |presentation| package generates to files: the {\LaTeX} package (all the code -% between {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$}} and -% {\textsf{$\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% For {\latexml}, we initialize the package inclusions. -% \begin{macrocode} -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -% -% \end{macrocode} -% -% \subsection{Package Options}\label{sec:impl:options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false).\ednote{we have no options at the moment} -% -% \begin{macrocode} -%<*package> -\ProcessOptions -% -% \end{macrocode} -% -% We first make sure that the KeyVal package is loaded (in the right -% version). For {\latexml}, we also initialize the package inclusions. -% \begin{macrocode} -%\RequirePackage{keyval}[1997/11/10] -% \end{macrocode} -% We will first specify the default precedences and brackets, together with the macros -% that allow to set them. -% \begin{macrocode} -%<*package> -\def\pres@default@precedence{0} -\def\pres@infty{1000000} -\def\iprec{\pres@infty} -\def\niprec{-\pres@infty} -\def\pres@initial@precedence{0} -\def\pres@current@precedence{\pres@initial@precedence} -\def\pres@default@lbrack{(}\def\pres@lbrack{\pres@default@lbrack} -\def\pres@default@rbrack{)}\def\pres@rbrack{\pres@default@rbrack} -% -%<*ltxml> -DefMacro('\iprec','1000000'); -DefMacro('\niprec','-1000000'); -% -% \end{macrocode} -% -% \subsection{The System Commands}\label{sec:impl:syscommands} -% -% \begin{macro}{\PrecSet} -% |\PrecSet| will set the default precedence.\ednote{need to implement this in {\latexml}?} -% \begin{macrocode} -%<*package> -\def\PrecSet#1{\def\pres@default@precedence{#1}} -% -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\PrecWrite} -% |\PrecWrite| will write a bracket, if the precedence mandates it, i.e. if |\pres@p| is -% greater than the current precedence specified by |\pres@current@precedence| -% \begin{macrocode} -%<*package> -\def\PrecWrite#1{\ifnum\pres@p>\pres@current@precedence\else{#1}\fi} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Prefix \& Postfix Notations}\label{sec:impl:prepostfix} -% -% We first define the keys for the keyval arguments for |\prefix| and |\postfix|. -% -% \begin{macrocode} -%<*package> -\def\prepost@clearkeys{\def\pres@p@key{\pres@default@precedence}\def\pres@pi@key{\niprec} -\def\pres@lbrack{\pres@default@lbrack}\def\pres@rbrack{\pres@default@rbrack}} -\define@key{prepost}{lbrack}{\def\pres@lbrack{#1}} -\define@key{prepost}{rbrack}{\def\pres@lbrack{#1}} -\define@key{prepost}{p}{\def\pres@p@key{#1}} -\define@key{prepost}{pi}{\def\pres@pi@key{#1}} -% -% \end{macrocode} -% -% \begin{macro}{\prefix} -% In prefix we always write the brackets. -% \begin{macrocode} -%<*package> -\newcommand{\prefix}[3][]%key, fn, arg -{\prepost@clearkeys\setkeys{prepost}{#1} -{#2}\pres@lbrack{\edef\pres@current@precedence{\pres@pi@key}#3}\pres@rbrack} -% -%<*ltxml> -DefMacro('\prefix[]{}{}','\@prefix[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'); -DefConstructor('\@prefix OptionalKeyVals:mi {}{}', - "" - . "" - . "#2" - . "" - . "(" - . "#3" - . ")" - . "" - . "" - ."", - afterDigest=>sub { - #Default argument precedence is -\infty - my $keyval = $_[1]->getArg(1); - $keyval->setValue('pi',-1000000) unless ($keyval && defined($keyval->getValue('pi'))); - applyPrecedencePreferences(@_); - }, - properties=>sub { getSymmdefProperties($_[1]); }); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\postfix} -% \begin{macrocode} -%<*package> -\newcommand{\postfix}[3][]%key, fn, arg -{\prepost@clearkeys\setkeys{prepost}{#1} -\pres@lbrack{\edef\pres@current@precedence{\pres@pi@key}#3}\pres@rbrack{#2}} -% -%<*ltxml> -DefMacro('\postfix []{}{}','\@postfix[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'); -DefConstructor('\@postfix OptionalKeyVals:mi {}{}', - "" - . "" - . "" - . "(" - . "#3" - . ")" - . "" - . "#2" - . "" - ."", - afterDigest=>sub { - #Default argument precedence is -\infty - my $keyval = $_[1]->getArg(1); - $keyval->setValue('pi',-1000000) unless ($keyval && defined($keyval->getValue('pi'))); - applyPrecedencePreferences(@_); - }, - properties=>sub { getSymmdefProperties($_[1]); }); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Mixfix Operators}\label{sec:impl:mixfix} -% -% We need to enable notation definitions of the operators that have -% argument- and precedence-aware renderings. To this end, we -% circumvent {\latexml}'s limitations induced by its internal -% processing stages, by pulling most of the argument rendering -% functionality to the XSLT which produces the final {\omdoc} result. -% -% In the {\latexml} bindings, the internal structure of the mixfix -% operators is generically preserved, via the |symdef_presentation_pmml| subroutine -% in the Modules package. Nevertheless, in the current module we add the promised syntactic -% enhancements to each element of the mixfix family. Also, we use the -% |argument_precedence| subroutine to store the precedences given by -% the 'pi', 'pii', etc. keys as a temporary |argprec| -% attribute of the rendering, to be abolished during the final {\omdoc} generation. -% This setup is finally utilized by the XSLT stylesheet which combines -% the operator structure with the preserved precedences to produce the -% proper form of the argument render elements. -% -% \begin{macrocode} -%<*package> -\def\clearkeys{\let\pres@p@key=\relax -\let\pres@pi@key=\relax% -\let\pres@pi@key=\relax% -\let\pres@pii@key=\relax% -\let\pres@piii@key=\relax} -\define@key{mi}{nobrackets}[yes]{\def\pres@p@key{\pres@infty}% -\def\pres@pi@key{-\pres@infty}} -\define@key{mi}{lbrack}{\def\pres@lbrack@key{#1}} -\define@key{mi}{rbrack}{\def\pres@lbrack@key{#1}} -\define@key{mi}{p}{\def\pres@p@key{#1}} -\define@key{mi}{pi}{\def\pres@pi@key{#1}} -\def\prep@keys@mi% -{\edef\pres@lbrack{\@ifundefined{pres@lbrack@key}\pres@default@lbrack\pres@lbrack@key} -\edef\pres@rbrack{\@ifundefined{pres@rbrack@key}\pres@default@rbrack\pres@rbrack@key} -\edef\pres@p{\@ifundefined{pres@p@key}\pres@default@precedence\pres@p@key} -\edef\pres@pi{\@ifundefined{pres@pi@key}\pres@p\pres@pi@key}} -% -%<*ltxml> -our $max_arguments = 10; #Currently max 10 arguments to \symdef. -DefKeyVal('mi','lbrack','Semiverbatim'); -DefKeyVal('mi','rbrack','Semiverbatim'); -DefKeyVal('mi','p','Semiverbatim'); -DefKeyVal('mi','pi','Semiverbatim'); -DefKeyVal('mi','pii','Semiverbatim'); #Why are we using this at mixfixai ? -DefKeyVal('mi','cd','Semiverbatim'); -DefKeyVal('mi','name','Semiverbatim'); -DefKeyVal('mi','nobrackets','Semiverbatim'); -sub argument_precedence { - my ($keyval) = @_; - my $attr = 'pi'; - my @precs = (); - foreach (1..$max_arguments) { - if (defined KeyVal($keyval,$attr)) { - push @precs, ToString(KeyVal($keyval,$attr)) - } else { - push @precs, ""; - } - $attr = $attr.'i'; - } - return join(" ",@precs)." "; -} -sub applyPrecedencePreferences { - my ($stomach,$whatsit) = @_; - my @args = $whatsit->getArgs; - my $keyvals = shift @args; - return unless (defined $keyvals); - my %kvhash = %{$keyvals->getKeyVals}; - #Default p (operator precedence) if not set: - my $default_precedence = LookupValue('default_precedence'); - $keyvals->setValue('p',$default_precedence) unless defined($keyvals->getValue('p')); - return unless (exists $kvhash{'nobrackets'}); - $keyvals->setValue('p',1000000); - $keyvals->setValue('pi',-1000000); - $keyvals->setValue('pii',-1000000); - $keyvals->setValue('piii',-1000000); - return; -}#$ -% -% \end{macrocode} -% -% \begin{macro}{\mixfixi} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixi}[4][]%key, pre, arg, post -{\clearkeys\setkeys{mi}{#1}\prep@keys@mi% -\PrecWrite\pres@lbrack% -#2{\edef\pres@current@precedence{\pres@pi}#3}#4% -\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixi[]{}{}{}', - '\@mixfixi[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}'); -DefConstructor('\@mixfixi OptionalKeyVals:mi {}{}{}', - "" - . "" - . "(" - . "#2 #3 #4" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@assoc} -% We are using functionality from the {\LaTeX} core packages here to iterate over the -% arguments. -% \begin{macrocode} -%<*package> -\def\@assoc#1#2#3{% precedence, function, argv -\let\@tmpop=\relax% do not print the function the first time round -\@for\@I:=#3\do{\@tmpop% print the function -% write the i-th argument with locally updated precedence -{\edef\pres@current@precedence{#1}\@I}% -\let\@tmpop=#2}}%update the function -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mixfixa} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixa}[5][]%key, pre, arg, post, assocop -{\clearkeys\setkeys{mi}{#1}\prep@keys@mi% -\PrecWrite\pres@lbrack{#2}{\@assoc\pres@pi{#5}{#3}}{#4}\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixa[]{}{}{}{}', - '\@mixfixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}' - . '{$\crossrefOp[fun]{#5}$}'); -DefConstructor('\@mixfixa OptionalKeyVals:mi {}{}{}{}', - "" - . "" - . "(" - . "#2" - . "" - . "#5" - . "" - . "" - . "#4" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%<*package> -\define@key{mii}{nobrackets}[yes]{\def\pres@p@key{\pres@infty}% -\def\pres@pi@key{-\pres@infty}\def\pres@pii@key{-\pres@infty}} -\define@key{mii}{lbrack}{\def\pres@lbrack@key{#1}} -\define@key{mii}{rbrack}{\def\pres@lbrack@key{#1}} -\define@key{mii}{p}{\def\pres@p@key{#1}} -\define@key{mii}{pi}{\def\pres@pi@key{#1}} -\define@key{mii}{pii}{\def\pres@pii@key{#1}} -\def\prep@keys@mii{\prep@keys@mi% -\edef\pres@pii{\@ifundefined{pres@pii@key}\pres@p\pres@pii@key}} -% -%<*ltxml> -DefKeyVal('mii','lbrack','Semiverbatim'); -DefKeyVal('mii','rbrack','Semiverbatim'); -DefKeyVal('mii','p','Semiverbatim'); -DefKeyVal('mii','pi','Semiverbatim'); -DefKeyVal('mii','pii','Semiverbatim'); -DefKeyVal('mii','cd','Semiverbatim'); -DefKeyVal('mii','name','Semiverbatim'); -DefKeyVal('mii','nobrackets','Semiverbatim'); -% -% \end{macrocode} -% -% \begin{macro}{\mixfixii} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixii}[6][]%key, pre, arg1, mid, arg2, post -{\clearkeys\setkeys{mii}{#1}\prep@keys@mii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\edef\pres@current@precedence{\pres@pii}#5}#6% -\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixii[]{}{}{}{}{}', - '\@mixfixii[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}'); -DefConstructor('\@mixfixii OptionalKeyVals:mi {}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4 #5 #6" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mixfixia} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixia}[7][]%key, pre, arg1, mid, arg2, post, assocop -{\clearkeys\setkeys{mii}{#1}\prep@keys@mii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\@assoc\pres@pii{#7}{#5}}#6% -\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixia[]{}{}{}{}{}{}', - '\@mixfixia[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}' - . '{$\crossrefOp[fun]{#7}$}'); -DefConstructor('\@mixfixia OptionalKeyVals:mi {}{}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4" - . "" - . "#7" - . "" - . "" - . "#6" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mixfixai} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixai}[7][]%key, pre, arg1, mid, arg2, post, assocop -{\clearkeys\setkeys{mii}{#1}\prep@keys@mii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\@assoc\pres@pi{#7}{#3}}% -#4{\edef\pres@current@precedence{\pres@pii}#5}#6% -\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixai[]{}{}{}{}{}{}', - '\@mixfixai[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - .'{$\crossrefOp[fun]{#4}$}{$#5 $}' - .'{$\crossrefOp[fun]{#6}$}' - .'{$\crossrefOp[fun]{#7}$}'); -DefConstructor('\@mixfixai OptionalKeyVals:mi {}{}{}{}{}{}', - "" - . "" - . "(" - . "#2" - . "" - . "#7" - . "" - . "" - . "#4 #5 #6" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%<*package> -\define@key{miii}{nobrackets}[yes]{\def\pres@p@key{\pres@infty}% -\def\pres@pi@key{-\pres@infty} -\def\pres@pii@key{-\pres@infty} -\def\pres@pii@key{-\pres@infty}} -\define@key{miii}{lbrack}{\def\pres@lbrack@key{#1}} -\define@key{miii}{rbrack}{\def\pres@lbrack@key{#1}} -\define@key{miii}{p}{\def\pres@p@key{#1}} -\define@key{miii}{pi}{\def\pres@pi@key{#1}} -\define@key{miii}{pii}{\def\pres@pii@key{#1}} -\define@key{miii}{piii}{\def\pres@piii@key{#1}} -\def\prep@keys@miii{\prep@keys@mii% -\edef\pres@piii{\@ifundefined{pres@piii@key}{\pres@p}{\pres@piii@key}}} -% -%<*ltxml> -DefKeyVal('miii','lbrack','Semiverbatim'); -DefKeyVal('miii','rbrack','Semiverbatim'); -DefKeyVal('miii','p','Semiverbatim'); -DefKeyVal('miii','pi','Semiverbatim'); -DefKeyVal('miii','pii','Semiverbatim'); -DefKeyVal('miii','piii','Semiverbatim'); -DefKeyVal('miii','cd','Semiverbatim'); -DefKeyVal('miii','name','Semiverbatim'); -DefKeyVal('miii','nobrackets','Semiverbatim'); -% -% \end{macrocode} -% -% \begin{macro}{\mixfixiii} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixiii}[8][]%key, pre, arg1, mid1, arg2, mid2, arg3, post -{\clearkeys\setkeys{miii}{#1}\prep@keys@miii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\edef\pres@current@precedence{\pres@pii}#5}% -#6{\edef\pres@current@precedence{\pres@pii}#7}#8% -\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixiii[]{}{}{}{}{}{}{}', - '\@mixfixiii[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}{$#7 $}' - . '{$\crossrefOp[fun]{#8}$}'); -DefConstructor('\@mixfixiii OptionalKeyVals:mi {}{}{}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4 #5 #6 #7 #8" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mixfixaii} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixaii}[9][]%key, pre, arg1, mid1, arg2, mid2, arg3, post, sep -{\clearkeys\setkeys{miii}{#1}\prep@keys@miii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\@assoc\pres@pi{#9}{#3}}% -#4{\edef\pres@current@precedence{\pres@pii}#5}% -#6{\edef\pres@current@precedence{\pres@pii}#7}#8% -\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixaii[]{}{}{}{}{}{}{}{}', - '\@mixfixaii[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}{$#7 $}' - . '{$\crossrefOp[fun]{#8}$}' - . '{$\crossrefOp[fun]{#9}$}'); -DefConstructor('\@mixfixaii OptionalKeyVals:mi {}{}{}{}{}{}{}{}', - "" - . "" - . "(" - . "#2" - . "" - . "#9" - . "" - . "" - . "#4 #5 #6 #7 #8" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mixfixiai} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixiai}[9][]%key, pre, arg1, mid1, arg2, mid2, arg3, post, assocop -{\clearkeys\setkeys{miii}{#1}\prep@keys@miii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\@assoc\pres@pi{#9}{#5}}% -#6{\edef\pres@current@precedence{\pres@pii}#7}#8% -\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixiai[]{}{}{}{}{}{}{}{}', - '\@mixfixiai[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}{$#7 $}' - . '{$\crossrefOp[fun]{#8}$}' - . '{$\crossrefOp[fun]{#9}$}'); -DefConstructor('\@mixfixiai OptionalKeyVals:mi {}{}{}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4" - . "" - . "#9" - . "" - . "" - . "#6 #7 #8" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\mixfixiia} -% \begin{macrocode} -%<*package> -\newcommand{\mixfixiia}[9][]%key, pre, arg1, mid1, arg2, mid2, arg3, post,assocop -{\clearkeys\setkeys{miii}{#1}\prep@keys@miii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\edef\pres@current@precedence{\pres@pii}#5}% -#6{\@assoc\pres@pi{#9}{#7}}#8% -\PrecWrite\pres@rbrack} -% -%<*ltxml> -DefMacro('\mixfixiia[]{}{}{}{}{}{}{}{}', - '\@mixfixiia[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}{$#7 $}' - . '{$\crossrefOp[fun]{#8}$}' - . '{$\crossrefOp[fun]{#9}$}'); -DefConstructor('\@mixfixiia OptionalKeyVals:mi {}{}{}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4 #5 #6" - . "" - . "#9" - . "" - . "" - . "#8" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\prefixa} -% In prefix we always write the brackets. -% \begin{macrocode} -%<*package> -\newcommand{\prefixa}[4][]%keys, fn, arg, sep -{\prepost@clearkeys\setkeys{prepost}{#1} -{#2}\pres@lbrack{\@assoc\pres@pi@key{#3}{#4}}\pres@rbrack} -% -%<*ltxml> -DefMacro('\prefixa[]{}{}{}','\@prefixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}{$#4 $}'); -DefConstructor('\@prefixa OptionalKeyVals:mi {}{}{}', - "" - . "" - . "#2" - . "" - . "(" - . "" - . "#4" - . "" - . "" - . ")" - . "" - . "" - ."", - afterDigest=>sub { - #Default argument precedence is -\infty - my $keyval = $_[1]->getArg(1); - $keyval->setValue('pi',-1000000) unless ($keyval && defined($keyval->getValue('pi'))); - applyPrecedencePreferences(@_); - }, - properties=>sub { getSymmdefProperties($_[1]); }); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\postfixa} -% \begin{macrocode} -%<*package> -\newcommand{\postfixa}[4][]%keys, fn, arg, sep -{\prepost@clearkeys\setkeys{prepost}{#1} -\pres@lbrack{\@assoc\pres@pi@key{#3}{#4}}\pres@rbrack{#2}} -% -%<*ltxml> -DefMacro('\postfixa []{}{}{}','\@postfixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}{$#4 $}'); -DefConstructor('\@postfixa OptionalKeyVals:mi {}{}{}', - "" - . "" - . "" - . "(" - . "" - . "#4" - . "" - . "" - . ")" - . "" - . "#2" - . "" - ."", - afterDigest=>sub { - #Default argument precedence is -\infty - my $keyval = $_[1]->getArg(1); - $keyval->setValue('pi',-1000000) unless ($keyval && defined($keyval->getValue('pi'))); - applyPrecedencePreferences(@_); - }, - properties=>sub { getSymmdefProperties($_[1]); }); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\infix} -% |\infix|\ednote{need infixl as well, use counters for precedences here.} is a simple -% special case of |\mixfixii|. -% \begin{macrocode} -%RawTeX(' -%<*package|ltxml> -\newcommand{\infix}[4][]{\mixfixii[#1]{}{#3}{#2}{#4}{}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\assoc} -% \begin{macrocode} -\newcommand{\assoc}[3][]{\mixfixa[#1]{}{#3}{}{#2}} -% -%'); -% \end{macrocode} -% \end{macro} -% -% \subsection{General Elision}\label{sec:impl:elision} -% -% \ednote{all of these still need to be tested and implemented in LaTeXML.} -% \begin{macro}{\setegroup} -% The elision macros are quite simple, a group |foo| is internally represented by a -% macro |foo@egroup|, which we set by a |\gdef|. -% \begin{macrocode} -%<*package> -\def\setegroup#1#2{\expandafter\def\csname #1@egroup\endcsname{#2}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\elide} -% Then the elision command is picks up on this (flags an error) if the internal macro -% does not exist and prints the third argument, if the elision value threshold is above -% the elision group threshold in the paper.\ednote{do we need to turn this around as -% well?} We test the implementation with Figure~\ref{ex:elision-test}. -% \begin{macrocode} -%<*package> -\def\elide#1#2#3{\@ifundefined{#1@egroup}% -{\def\@elevel{0} -\PackageError{presentation}{undefined egroup #1, assuming value 0}% -{When calling \protect\elide{#1}... the elision group #1 has be have\MessageBreak -been set by \protect\setegroup before, e.g. by \protect\setegroup{an}{0}.}}% -{\edef\@elevel{\csname #1@egroup\endcsname}}% -\ifnum\@elevel>#2\else{#3}\fi} -% -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \begin{figure}[ht]\centering -% \begin{tabular}{|l|l|l|l|}\hline -% {\texttt{par}} & {\texttt{typ}} & result & expected \\\hline\hline -% 0 & 0 & \setegroup{par}{0}\setegroup{typ}{0} -% $\mathbf{I}\elide{par}{500}{^\alpha}\elide{typ}{100}{_{\alpha\to\alpha}} -% :=\lambda{X\elide{typ}{500}{_\alpha}}.X$ -% & $\mathbf{I}:=\lambda{X}.X$\\\hline -% 600 & 600 & \setegroup{par}{600}\setegroup{typ}{600} -% $\mathbf{I}\elide{par}{500}{^\alpha}\elide{typ}{100}{_{\alpha\to\alpha}} -% :=\lambda{X\elide{typ}{500}{_\alpha}}.X$ -% & $\mathbf{I}^\alpha:=\lambda{X_\alpha}.X$\\\hline -% 600 & 1000 & \setegroup{par}{600}\setegroup{typ}{1000} -% $\mathbf{I}\elide{par}{500}{^\alpha}\elide{typ}{100}{_{\alpha\to\alpha}} -% :=\lambda{X\elide{typ}{500}{_\alpha}}.X$ -% & $\mathbf{I}^\alpha_{\alpha\to\alpha}:=\lambda{X_\alpha}.X$\\\hline -% \end{tabular} -% \caption{Testing Elision with the example in Figure~\protect\ref{ex:elision}}\label{ex:elision-test} -% \end{figure} -% -% \begin{macro}{\provideEdefault} -% The |\provideEdefault| macro sets up the context for an elision default by locally -% defining the internal macro \meta{default}|@edefault| and (if necessary) exporting it -% from the module. -% \begin{macrocode} -%<*package> -\def\provideEdefault#1#2{\expandafter\def\csname#1@edefault\endcsname{#2} -\@ifundefined{this@module}{}% -{\expandafter\g@addto@macro\this@module{\expandafter\def\csname#1@edefault\endcsname{#2}}}} -% -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setEdefault} -% The |\setEdefault| macro just redefines the internal \meta{default}|@edefault| in the -% local group -% \begin{macrocode} -%<*package> -\def\setEdefault#1#2{\expandafter\def\csname #1@edfault\endcsname{#2}} -% -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fromEcontext} -% The |\fromEcontext| macro just calls internal \meta{default}|@edefault| macro. -% \begin{macrocode} -%<*package> -\def\fromEcontext#1{\csname #1@edefault\endcsname} -% -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Variable Names}\label{sec:impl:vname} -% -% \begin{macro}{\vname} -% a name macro; the first optional argument is an identifier \meta{id}, this is standard -% for {\LaTeX}, but for {\latexml}, we want to generate attributes -% |xml:id="cvar.|\meta{id}|"| and |name="|\meta{id}|"|. However, if no id was given in -% we default them to |xml:id="cvar.|\meta{count}|"| and -% |name="name.cvar.|\meta{count}|"|. -% \begin{macrocode} -%<*package> -\newcommand{\vname}[2][]{#2\def\@opt{#1}\ifx\@opt\@empty\else\expandafter\gdef\csname MOD@name@#1\endcsname{#2}\fi} -% -%<*ltxml> -sub cvar_id { - my ($id)=@_; - $id=ToString($id); - if (!$id) { - $id=LookupValue('cvar_id'); - $id=0 unless $id; - $id++; - AssignValue('cvar_id',$id,'global'); - } - $id="cvar.$id"; $id;} -DefConstructor('\vname[]{}', - "#2", - requireMath=>1); -DefConstructor('\crossrefOp[]{}', - "?#2(" - . "" - . "#2" - .")()", - requireMath=>1); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\vnref} -% \begin{macrocode} -%<*package> -\def\vnref#1{\csname MOD@name@#1\endcsname} -% -%<*ltxml> -DefMacro('\vnref{}','\@XMRef{cvar.#1}'); -% -% \end{macrocode} -% \end{macro} -% \ednote{the following macros are just ideas, they need to be implemented and documented} -% \begin{macro}{\uivar} -% constructors for variables\ednote{these are document them above} -% \begin{macrocode} -%RawTeX(' -%<*package|ltxml> -\newcommand{\primvar}[2][]{\vname[#1]{#2^\prime}} -\newcommand{\pprimvar}[2][]{\vname[#1]{#2^{\prime\prime}}} -\newcommand{\uivar}[3][]{\vname[#1]{{#2}^{#3}}} -\newcommand{\livar}[3][]{\vname[#1]{{#2}_{#3}}} -\newcommand{\ulivar}[4][]{\vname[#1]{{#2}^{#3}_{#4}}} -% -%'); -% \end{macrocode} -% \end{macro} -% -% \subsection{Other Layout Primitives}\label{sec:impl:primitives} -% -% The |\arrayline| and |\arraycell| macros are simple refactorings of the |array| -% functionality on the {\LaTeX} side\ednote{@Deyan, implement and describe them on the -% latexml side} -% -% \begin{macro}{\arrayline} -% \begin{macrocode} -%\newcommand{\arrayline}[2]{#1#2\\} -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\arraycell} -% \begin{macrocode} -%\newcommand{\arraycell}[1]{#1&} -%<*ltxml> -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Finale} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput -% -% LocalWords: dtx CPERL RequirePackage keyval lbrack rbrack DefKeyVal omdoc cd -% LocalWords: Semiverbatim DefConstructor OptionalKeyVals pmml ltx XMath mii -% LocalWords: pii miii piii KeyVal egroup namedef attr precs foreach ToString -% LocalWords: DefMacro locator stex srcref argprec mrow getSymmdefProperties -% LocalWords: args arg LaTeX cvar iffalse scsys sc sc mathml openmath latexml -% LocalWords: cmathml activemath twintoo atwin atwintoo texttt fileversion foo -% LocalWords: Deyan Ginev maketitle setcounter tocdepth tableofcontents symdef -% LocalWords: newpage ldots bigl bigr langle ary cdots subseteq mixfixi exfig -% LocalWords: mixfixii mixfixiii vspace hline sseteq ite tt tt tt tt uminus rb -% LocalWords: texorpdfstring assoc ednote nunion mixfixa mixfixa postfixa leq -% LocalWords: postfixa mixfixia mixfixia mixfixai mixfixai fntype rightarrow -% LocalWords: mixfixaii mixfixiai mixfixiia typej vdash cupcap ninters ninters -% LocalWords: capcup geq prec fset textbf textbf setegroup setegroup mathbf fn -% LocalWords: provideEdefault provideEdefault fromEcontext fromEcontext mathrm -% LocalWords: setEdefault setEdefault widetilde cdot vname vname vnref vnname -% LocalWords: ulivar ulivar primvar primvar pprimvar pprimvar textsf textsf rl -% LocalWords: printbibliography ltxml infty ifnum clearkeys nobrackets whatsit -% LocalWords: ifundefined keyvals kvhash newcommand setkeys crossrefOp argv -% LocalWords: tmpop i-th assocop textbackslash infixl gdef expandafter csname -% LocalWords: endcsname edefault edfault ifx prepostfix circ circ circ circ -% LocalWords: iprec iprec niprec niprec wrongset goodset prepost prepkeys -% LocalWords: arrayline arraycell qquad hrule diff --git a/Master/texmf-dist/source/latex/stex/problem/problem.dtx b/Master/texmf-dist/source/latex/stex/problem/problem.dtx deleted file mode 100644 index 7661efe7906..00000000000 --- a/Master/texmf-dist/source/latex/stex/problem/problem.dtx +++ /dev/null @@ -1,578 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for Problems -% $URL: https://svn.kwarc.info/repos/stex/trunk/sty/problem/problem.dtx $ -% $Rev: 1671 $; last modified by $Author: kohlhase $ -% $Date: 2010-11-06 08:05:15 +0100 (Sat, 06 Nov 2010) $ -% Copyright (c) 2006-2008 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{problem}[2010/06/25 v0.9c Semantic Markup for Problems] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,float,latexml} -\usepackage[solutions,hints,notes]{problem} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: problem.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/problem/problem.dtx $ -\usepackage{stex-logo} -\usepackage{../ctansvn} -\usepackage{hyperref} -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{problem.dtx}\end{document} -% -% \fi -% -% \iffalse\CheckSum{365}\fi -% -% \changes{v0.9}{2006/09/18}{First Version with Documentation} -% \changes{v0.9a}{2007/01/02}{Renamed to \texttt{problem.sty}} -% \changes{v0.9b}{2008/10/01}{added extraction} -% \changes{v0.9c}{2010/01/03}{based on \texttt{omd.sty} now} -% -% \GetFileInfo{problem.sty} -% -% \MakeShortVerb{\|} -% -% \title{\texttt{problem.sty}: An Infrastructure for formatting Problems\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |problem| package supplies an infrastructure that allows specify problems and to -% reuse them efficiently in multiple environments. -% \end{abstract} -% \setcounter{tocdepth}{2}\tableofcontents\newpage -% -%\section{Introduction}\label{sec:intro} -% -% The |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 momenet 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. -% -% Finally, the |problem| package facilitates the management of problems in small files, -% so that problems can be re-used in multiple environment. -% -% \section{The User Interface}\label{sec:ui} -% -% \subsection{Package Options} -% The |problem| package takes the options \DescribeMacro{solutions}|solutions| (should -% solutions be output?), \DescribeMacro{notes}|notes| (should the problem notes be -% presented?), \DescribeMacro{hints}|hints| (do we give the hints?), -% \DescribeMacro{pts}|pts| (do we display the points awarded for solving the problem?), -% \DescribeMacro{min}|min| (do we display the estimated minutes for problem soling). If -% theses are specified, then the corresponding auxiliary parts of the problems are output, -% otherwise, they remain invisible. -% -% The \DescribeMacro{boxed}|boxed| option specifies that problems should be formatted in -% framed boxes so that they are more visible in the text. Finally, the -% \DescribeMacro{test}|test| option signifies that we are in a test sitution, so this -% option does not show the solutions (of course), but leaves space for the students to -% solve them. -% -% The \DescribeMacro{extract}|extract| option can be set if we want to extract a problems -% file, e.g. to display the solutions, see Section~\ref{sec:user:includeproblem} for a -% discussion. -% -% Finally, if the \DescribeMacro{showmeta}|showmeta| is set, then the metadata keys are -% shown (see~\cite{Kohlhase:metakeys:ctan} for details and customization options). -% -% \subsection{Problems and Solutions}\label{sec:user:probsols} -% -% \DescribeEnv{problem} The main enviornment provided by the |problem| package is -% (surprise surprise) the |problem| environment. It is used to mark up problems and -% excercises. The environment takes an optional KeyVal argument with the keys -% \DescribeMacro{id}|id| as an identifier that can be reference later, -% \DescribeMacro{pts}|pts| for the points to be gained from this exercise in homework or -% quiz situations, \DescribeMacro{min}|min| for the estimated minutes needed to solve the -% problem, and finally \DescribeMacro{title}|title| for an informative title of the -% problem. For an example of a marked up problem see Figure~\ref{fig:problem} and the -% resulting markup see Figure~\ref{fig:result}. -% -%\begin{exfig} -% \begin{verbatim} -% \usepackage[solutions,hints,pts,min]{problem} -% \begin{document} -% \begin{problem}[id=elefants,pts=10,min=2,title=Fitting Elefants] -% How many Elefants can you fit into a Volkswagen beetle? -% \begin{hint} Think positively, this is simple!\end{hint} -% \begin{exnote}Justify your answer\end{exnote} -% \begin{solution}[for=elefants,height=3cm] -% Four, two in the front seats, and two in the back. -% \end{solution} -% \end{problem} -% \end{document} -% \end{verbatim} -% \caption{A marked up Problem}\label{fig:problem} -% \end{exfig} -% -% \DescribeEnv{solution} The |solution| environment can be to specify a solution to a -% problem. If the \DescribeMacro{solutions}|solutions| option is set or |\solutionstrue| -% is set in the text, then the solution will be presented in the output. The |solution| -% environment takes an optional KeyVal argument with the keys \DescribeMacro{id}|id| for -% an identifier that can be reference \DescribeMacro{for}|for| to specify which problem -% this is a solution for, and \DescribeMacro{height}|height| that allows to specify the -% amount of space to be left in test situations (i.e. if the \DescribeMacro{test}|test| -% option is set in the |\usepackage| statement). -% -%\begin{exfig} -% \begin{minipage}{.9\linewidth} -% \begin{problem}[id=elefants.prob,title=Fitting Elefants] -% How many Elefants can you fit into a Volkswagen beetle? -% \begin{hint} Think positively, this is simple!\end{hint} -% \begin{exnote}Justify your answer\end{exnote} -% \begin{solution}%[for=elefants.prob,height=3cm] -% Four, two in the front seats, and two in the back. -% \end{solution} -% \end{problem} -% \end{minipage} -% \caption{The Formmatted Problem from Figure~\ref{fig:problem}}\label{fig:result} -% \end{exfig} -% -% \DescribeEnv{hint}\DescribeEnv{note}, the |hint| and |exnote| environments can be used -% in a |problem| enviroment to give hints and to make notes that elaborate certain aspects -% of the problem. -% -% \subsection{Including Problems}\label{sec:user:includeproblem} -% -% The \DescribeMacro{\includeproblem}|\includeproblem| macro can be used to include a -% problem from another file. It takes an optional KeyVal argument and a second argument -% which is a path to the file containing the problem (the macro assumes that there is only -% one problem in the include file). The keys \DescribeMacro{title}|title|, -% \DescribeMacro{min}|min|, and \DescribeMacro{pts}|pts| specify the problem title, the -% estimated minutes for solving the problem and the points to be gained, and their values -% (if given) overwrite the ones specified in the |problem| environment in the included -% file. -% -% Sometimes we want to collect all the included problems into a separate file that can be -% typeset independently. The main application is to have course notes into which the -% problems are included (usually in boxed form to distinguish them from the rest of the -% text and without solutions) and to have the problems with solutions in a separate file -% (to encourage students to try and solve the problems before looking up solutions). In -% this situation set the \DescribeMacro{extract}|extract| option on the notes file -% \meta{notes}|.tex|, which causes a file \meta{notes}|-solutions.tex| to be generated -% that has the |\includeproblem| statements with the respective numbers from the main -% document. This can then be imported into a document with the respective front and -% backmatter. In particular the frontmatter of the importing will ususlly specify the -% \DescribeMacro{solutions}|solutions| option to generate solutions. -% -% \subsection{Reporting Metadata}\label{sec:user:reporting} -% -% The sum of the points and estimated minutes (that we specified in the |pts| and |min| -% keys to the |problem| environment or the |\includeproblem| macro) to the log file and -% the screen after each run. This is useful in preparing exams, where we want to make sure -% that the students can indeed solve the problems in an alotted time period. -% -% The |\min| and |\pts| macros allow to specify (i.e. to print to the margin) the -% distribution of time and reward to parts of a problem, if the |pts| and |pts| package -% options are set. This allows to give students hints about the estimated time and the -% points to be awarded. -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintChanges} -% \newpage -% -% \section{The Implementation}\label{sec:implementation} -% -% The |problem| package generates two files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\LaTeXML} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and -% $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% \subsection{Package Options}\label{sec:impl:options} -% -% The first step is to declare (a few) package options that handle whether certain -% information is printed or not. They all come with their own conditionals that are set by -% the options. -% -% \begin{macrocode} -%<*package> -\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 -% -% \end{macrocode} -% -% On the {\LaTeXML} side we only make sure that the switches are defined -% \begin{macrocode} -%<*ltxml> -RawTeX(' -\newif\ifexnotes\exnotesfalse -\newif\ifhints\hintsfalse -\newif\ifsolutions\solutionsfalse -\newif\ifpts\ptsfalse -\newif\ifmin\minfalse -\newif\ifboxed\boxedfalse -\newif\ifextract\extractfalse -'); -% -% \end{macrocode} -% Then we make sure that the necessary packages are loaded (in the right versions). -% \begin{macrocode} -%<*package> -\RequirePackage{keyval}[1997/11/10] -\RequirePackage{xcomment} -\RequirePackage{sref} -% -% \end{macrocode} -% -% Here comes the equivalent header information for {\LaTeXML}, we also initialize the -% package inclusions. Since {\LaTeXML} currently does not process package options, we have -% nothing to do. -% \begin{macrocode} -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('sref'); -% -% \end{macrocode} -% -% Then we register the namespace of the requirements ontology -% \begin{macrocode} -%<*ltxml> -RegisterNamespace('prob'=>"http://omdoc.org/ontology/problems#"); -RegisterDocumentNamespace('prob'=>"http://omdoc.org/ontology/problems#"); -% -% \end{macrocode} -% -% \subsection{Problems and Solutions}\label{sec:impl:probsols} -% -% We now prepare the KeyVal support for problems. The key macros just set appropriate -% internal macros. -% -% \begin{macrocode} -%<*package> -\srefaddidkey[prefix=prob.]{problem} -\addmetakey{problem}{pts} -\addmetakey{problem}{min} -\addmetakey*{problem}{title} -\addmetakey{problem}{refnum} -% \end{macrocode} -% -% Then we set up a box and a counter for problems -% -% \begin{macrocode} -\newsavebox{\probbox} -\newcounter{problem}[section] -% \end{macrocode} -% -% \begin{macro}{\prob@number} -% We consolidate the problem number into a reusable internal macro -% \begin{macrocode} -\def\prob@number{\ifx\inclprob@refnum\@empty -\ifx\problem@refnum\@empty\thesection.\theproblem\else\problem@refnum\fi -\inclprob@refnum\fi} -% \end{macrocode} -% \end{macro} -% -% We consolidate the problem header line into a separate internal macro that can be reused -% in various settings. -% -% \begin{macro}{\prob@heading} -% We consolidate the problem header line into a separate internal macro that can be -% reused in various settings. -% \begin{macrocode} -\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 -% \end{macrocode} -% \end{macro} -% -% With this in place, we can now define the |problem| environment. It comes in two shapes, -% depending on whether we are in boxed mode or not. In both cases we increment the problem -% number and output the points and minutes (depending) on whehter the respective options -% are set. -% \begin{environment}{problem} -% \begin{macrocode} -\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 -% -% \end{macrocode} -% \end{environment} -% -% Note that we allow hints and solutions in the body of a |problem| environment so we have -% to allow the |omdoc:CMP| and |omdoc:p| elements to autoclose. -% -% \begin{macrocode} -%<*ltxml> -DefCMPEnvironment('{problem} OptionalKeyVals:problem', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "?&KeyVal(#1,'min')(&KeyVal(#1,'min'))()" - . "?&KeyVal(#1,'pts')(&KeyVal(#1,'pts'))()" - . "#body" - ."\n"); -% -% \end{macrocode} -% -% \begin{macro}{\record@problem} -% This macro records information about the problems in the |*.aux| file. -% \begin{macrocode} -%<*package> -\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}}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@problem} -% This macro acts on a problem's record in the |*.aux| file. It does not have any -% functionality here, but can be redefined elsewhere (e.g. in the |assignment| -% package). -% \begin{macrocode} -%<*package> -\def\@problem#1#2#3{} -% -% \end{macrocode} -% \end{macro} -% -% The |solution| environment is similar to the |problem| environment, only that it is -% independent of the boxed mode. It also has it's own keys that we need to define first. -% -% \begin{macrocode} -%<*package> -\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 -% \newsavebox{\solution@box} -% \newlength{\solution@width} -% \setlength{\solution@width}{14cm} -% \newenvironment{solution}[1][]% -% {\begin{lrbox}{\solution@box}\begin{minipage}{\solution@width} -% \hrule\smallskip{\bf Solution: }\small} -% {\smallskip\hrule\end{minipage}\end{lrbox} -% \ifsolutions\begin{center}\usebox{\solution@box}\end{center}\fi} -% -%<*ltxml> -DefKeyVal('soln','id','Semiverbatim'); -DefKeyVal('soln','height','Semiverbatim'); -DefKeyVal('soln','for','Semiverbatim'); -DefCMPEnvironment('{solution} OptionalKeyVals:soln', - "" - . "#body" - . ""); -% -% \end{macrocode} -% -% \begin{macrocode} -%<*package> -\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 -% -%<*ltxml> -DefCMPEnvironment('{exnote}', - "" - . "" - . "#body" - .""); -DefCMPEnvironment('{hint}', - "" - . "" - . "#body" - .""); -DefConstructor('\pts{}',""); -DefConstructor('\min{}',""); -% -% \end{macrocode} -% -% \subsection{Including Problems}\label{sec:impl:includeproblem} -% -% The first action is to make a \meta{jobname}|-problems.tex| file, if the |extract| -% option is set. -% -% \begin{macrocode} -%<*package> -\ifextract -\newwrite\problem@file -\immediate\openout\problem@file=\jobname-problems.tex -\AtEndDocument{\closeout\problem@file} -\fi -% -% \end{macrocode} -% -% \begin{macro}{\includeproblem} -% The |\includeproblem| command is essentially a glorified |\input| statement, it sets -% some internal macros first that overwrite the local points. After that (so that the -% included problem had time to step the problem number) it writes the |\includeproblem| -% statement to the problems file, if the |extract| option is set. Here we add a key -% |refnum=\prob@num| to the inlcudeproblem, so that we can remember the number from the -% main document.\ednote{do something about the overwriting of problem metadata in the -% {\LaTeXML} binding.} -% -% \begin{macrocode} -%<*package> -\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} -% -%<*ltxml> -DefKeyVal('prob','pts','Semiverbatim'); -DefKeyVal('prob','min','Semiverbatim'); -DefKeyVal('prob','title','Semiverbatim'); -DefConstructor('\includeproblem OptionalKeyVals:prob Semiverbatim', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "?&KeyVal(#1,'min')(&KeyVal(#1,'min'))()" - . "?&KeyVal(#1,'pts')(&KeyVal(#1,'pts'))()" - .""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%<*ltxml> -Tag('omdoc:exercise',afterOpen=>\&numberIt); -Tag('omdoc:solution',afterOpen=>\&numberIt); -Tag('omdoc:hint',afterOpen=>\&numberIt); -% -% \end{macrocode} -% -% \subsection{Reporting Metadata} -% -% \begin{macrocode} -%<*package> -\def\pts#1{\ifpts\marginpar{#1 pt}\fi} -\def\min#1{\ifmin\marginpar{#1 min}\fi} -% -%<*ltxml> -% -% \end{macrocode} -% -% \begin{macrocode} -%<*package> -\AtEndDocument{\ifpts\message{Total: \arabic{pts} points}\fi -\ifmin\message{Total: \arabic{min} minutes}\fi} -% -%<*ltxml> -% -% \end{macrocode} -% -% \begin{macro}{\show@pts} -% The |\show@pts| shows the points: if no points are given from the outside and also no -% points are given locally do nothing, else show and add. If there are outside points -% then we show them in the margin. -% \begin{macrocode} -%<*package> -\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} -% \end{macrocode} -% \end{macro} -% and now the same for the minutes -% \begin{macro}{\show@min} -% \begin{macrocode} -\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} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Finale} -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput - -% \iffalse -% LocalWords: GPL structuresharing STR dtx pts keyval xcomment CPERL DefKeyVal -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi -% LocalWords: RequirePackage Semiverbatim DefEnvironment OptionalKeyVals soln -% LocalWords: exnote DefConstructor inclprob diff --git a/Master/texmf-dist/source/latex/stex/reqdoc/reqdoc.dtx b/Master/texmf-dist/source/latex/stex/reqdoc/reqdoc.dtx deleted file mode 100644 index 422fa674dcc..00000000000 --- a/Master/texmf-dist/source/latex/stex/reqdoc/reqdoc.dtx +++ /dev/null @@ -1,387 +0,0 @@ -% \iffalse meta-comment -% Semantic Markup for Requirement Specification Documents -% Copyright (c) 2008 Michael Kohlhase, all rights reserved -% -% This file is distributed under the terms of the LaTeX Project Public -% License from CTAN archives in directory macros/latex/base/lppl.txt. -% Either version 1.0 or, at your option, any later version. -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/reqdoc/reqdoc.dtx $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{reqdoc}[2010/06/25 v0.3 Semantic Requirement Documents] -% -%<*driver> -\documentclass[twoside]{ltxdoc} -\EnableCrossrefs -%\CodelineIndex -%\OnlyDescription -\RecordChanges -\usepackage{reqdoc} -\usepackage{textcomp,url,a4wide} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage[eso-foot,today,draft]{svninfo} -\svnInfo $Id: reqdoc.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/reqdoc/reqdoc.dtx $ -\usepackage{stex-logo} -\usepackage{../ctansvn} -\usepackage{hyperref} -\makeindex -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{reqdoc.dtx}\end{document} -% -% \fi -% -%\iffalse\CheckSum{195}\fi -% -% \changes{v0.3}{2008/06/26}{Integrated LaTeXML bindings} -% \changes{v0.2}{2008/02/04}{First Version with Documentation} -% \changes{v0.1}{2008/01/18}{First Version} -% -% \GetFileInfo{reqdoc.sty} -% -% \MakeShortVerb{\|} -% \def\latexml{{\LaTeX}ML} -% -% \title{{\texttt{reqdoc.sty}}: Semantic Markup for Requirements Specification Documents\thanks{Version -% {\fileversion} (last revised {\filedate})}} -% \author{Michael Kohlhase\\ -% Computer Science, Jacobs University\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% This package provides an infrastructure for semantically enhanced requirements -% specifications used in software engineering. This allows to embed structural -% information into documents that can be used by semantic document management systems -% e.g. for management of change and requirements tracing. -% \end{abstract} -% -% \newpage\tableofcontents\newpage -% -% \section{Introduction}\label{sec:intro} -% -% In software engineering, the development process is accompanied with a trail of -% structured documents, user specifications, architecture specifications, test reports, -% etc. All of these documents\ednote{continue} -% -% For an example of a requirement document see the file |requirements.tex| provided in -% this package. \ednote{need to bring this in line with the \texttt{sref} package} -% -% \section{The User Interface}\label{sec:interface} -% -% \subsection{Package Options} -% -% The |reqdoc| package takes the package option \DescribeMacro{recorddeps}|recorddeps|. If -% this is given, then the package generates an external file with dependencies that can be -% used by external systems like the {\texttt{locutor}} system\ednote{add citation here}, -% see Section~\ref{sec:moc-deps}. If the \DescribeMacro{showmeta}|showmeta| is set, then -% the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for details and customization -% options). -% -% \subsection{Requirements} -% The |reqdoc| package supplies two forms of writing down requirements that mainly differ -% in their presentation. We can have requirement lists and requirement tables. -% -% \DescribeEnv{requirements} The |requirements| environment marks up a list of -% requirements. It takes an optional key/value list as an argument: if |numbering| is set -% to |yes| (the default), then the requirements are numbered for referencing it visually; -% the label is created using the prefix specified in the key |prefix|. -% -% \DescribeEnv{requirement} The individual requirements are specified by the |requirement| -% environment, which takes an optional key/value list as an argument: the |id| key allows -% to specify a symbolic label for cross-referencing, the |prio| key allows to specify a -% priority of the requirement, the |reqs| key allows to specify a comma-separated list of -% labels of requibments this one depends on or refines. Finally, the visual label of the -% requirement can be fixed by the |num| key\ednote{this is not implemented yet}. -% -% \DescribeEnv{reqtable} The |reqtable| environment is a varian of the |\requirements| -% environment that shows the requirements in a tabular form that gives a better overview; -% its optional key/value argument works the same. \DescribeMacro{\reqline}The respective -% requirements are marked up with the |\reqline| macro, which takes three arguments. The -% first one is an optional key/value specification and corresponds to be one on the -% |requirement| environment. The second one contains the actual text of the requirements -% and the third one a comment. -% -% \DescribeMacro{\importreqs}Note that if we want to refer to requirements from a document -% \meta{doc}, then we will need to know about their representations and can import the -% necessary information via |\importreqs{|\meta{doc}|}|. -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography} -% \newpage -% -% \section{The Implementation}\label{sec.impl} -% -% The |reqdoc| package generates to files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$}} and -% {\textsf{$\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% \subsection{Package Options}\label{sec.impl.options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false).\ednote{need an implementation for {\latexml}} -% -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\if@deps\@depsfalse -\DeclareOption{recorddeps}{\@depstrue} -\ProcessOptions -% \end{macrocode} -% Then we load a couple of packages -% \begin{macrocode} -\RequirePackage{sref} -\RequirePackage{longtable} -% -%<*ltxml> -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -% -% \end{macrocode} -% -% Then we register the namespace of the requirements ontology -% \begin{macrocode} -%<*ltxml> -RegisterNamespace('r'=>"http://omdoc.org/ontology/requirements#"); -RegisterDocumentNamespace('r'=>"http://omdoc.org/ontology/requirements#"); -% -% \end{macrocode} -% -% \subsection{Requirements}\label{sec.impl.requirements} -% -% \begin{environment}{requirements} -% and now the |requirements| environment, it is empty at the moment\ednote{think about -% this again!} -% \begin{macrocode} -%<*package> -\newif\ifreqsnum\reqsnumfalse -\addmetakey{reqs}{numbering} -\addmetakey[R]{reqs}{prefix} -\def\reqs@no{no} -\newenvironment{requirements}[1][]% -{\metasetkeys{reqs}{#1}\ifx\reqs@numbering\reqs@no\reqsnumfalse\else\reqsnumtrue\fi}{} -% -%<*ltxml> -DefEnvironment('{requirements} OptionalKeyVals:reqs', - "#body"); -% -% \end{macrocode} -% \end{environment} -% -% We define a group of keywords using the |\addmetakey| command from the |metakeys| -% package~\ctancite{Kohlhase:metakeys}. The group below, named as |req|, consists of three -% keywords |id|, |prio| and |refs|. -% \begin{macrocode} -%<*package> -\addmetakey{req}{id} -\addmetakey{req}{prio} -\addmetakey{req}{refs} -\addmetakey{req}{num} -\newcounter{reqnum}[section] -% \end{macrocode} -% This function cycles over a comma-separated list and does the references -% \begin{macrocode} -\def\req@do@refs#1#2{\let\@tmpop=\relax\@for\@I:=#1\do{\@tmpop\req@do@ref{\@I}\let\@tmpop=#2}} -% \end{macrocode} -% The |\req@do@ref| command creates a hyperlink from \ednote{What is req at ref? It has -% appeared for the first time.} -% \begin{macrocode} -\def\req@do@ref#1{\sref@hlink@ifh{#1}{\req@ref{#1}{number}}} -% \end{macrocode} -% this function defines a requirement aspect -% the first arg is the label, the second one the aspect to be defined and the third one the value -% expand |csname| before |xdef| -% -% The command |\req@def@aux| creates the name of a command, -% which is determined by the text given between |\csname| and |\endcsname|, -% and defines this command globally to function as |#3|. -% We use the command |\expandafter| in the definition of |\req@def@aux| -% to execute the command |\xdef| after |\csname| is executed. -% \begin{macrocode} -\def\req@def@aux#1#2#3{\expandafter\xdef\csname req@#1@#2\endcsname{#3}} -% \end{macrocode} -% this function takes the same arguments and writes the command to the aux file -% \begin{macrocode} -\def\req@write@aux#1#2#3{\protected@write\@auxout{}{\string\req@def@aux{#1}{#2}{\thesection.#3}}} -% \end{macrocode} -% and finally this function does both -% \begin{macrocode} -\def\req@def#1#2#3{\req@def@aux{#1}{#2}{#3}\req@write@aux{#1}{#2}{#3}} -% \end{macrocode} -% this function references an aspect of a requirement. -% \begin{macrocode} -\def\req@ref#1#2{\csname req@#1@#2\endcsname} -% \end{macrocode} -% these functions print the priority, label, and references (if specified) -% \begin{macrocode} -\def\print@req@prio{\ifx\req@prio\@empty\else(Priority: \req@prio)\fi} -\def\print@req@label{\sref@target@ifh\req@id{\reqs@prefix\arabic{reqnum}: }} -\def\print@req@refs{\ifx\req@refs\@empty\else\hfill [from~\req@do@refs{\req@refs}{,}]\fi} -% \end{macrocode} -% \ednote{What are |number| and |\thereqnum|?} -% First argument is a list of key-value pairs which are assigned to req. -% Increase the counter reqnum, i.e., increase the requirement number. -% Remember the number for reference. -% Print the requirement label (with the requirement number) -% Print the priority? -% Print the requirement (given as arg 2) -% Print the references -% We define a new command |\reqnote| to annotate the notes given for a requirement. -% The command |\reqnote| simply prints the note, which is given by the user as a text, -% in the form |Note: |. -% \begin{environment}{requirement} -% \begin{macrocode} -\newenvironment{requirement}[1][]% -{\metasetkeys{req}{#1}\stepcounter{reqnum} -\ifreqsnum\ifx\req@id\@empty\else\req@def\req@id{number}\thereqnum\fi -\noindent\textbf{\print@req@label}\fi -\newcommand{\reqnote}[1]{\par\noindent Note: ##1} -\print@req@prio} -{\medskip\print@req@refs} -% -%<*ltxml> -DefCMPEnvironment('{requirement} OptionalKeyVals:req', - "" - . "" - . "?&KeyVal(#1,'refs')()()" - . "#body" - .""); -DefConstructor('\reqnote{}', - "#1"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{reqtable} -% \begin{macrocode} -%<*package> -\newenvironment{reqtable}[1][]{\metasetkeys{reqs}{#1} -\begin{center}\begin{longtable}{|l|l|p{6cm}|p{5cm}|l|}\hline -\# & Prio & Requirement & Notes & Refs\\\hline\hline} -{\end{longtable}\end{center}} -% -%<*ltxml> -DefEnvironment('{reqtable} OptionalKeyVals:reqs', - "#body"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\reqline} -% \begin{macrocode} -%<*package> -\newcommand{\reqline}[3][]% -{\metasetkeys{req}{#1}\stepcounter{reqnum} -\req@def\req@id{number}\thereqnum% remember the number for reference -\textbf{\sref@target@ifh\req@id{\reqs@prefix\arabic{reqnum}}}& -\req@prio &\req@do@refs\req@refs{,}\tabularnewline\hline} -% -%<*ltxml> -DefCMPConstructor('\reqline OptionalKeyVals:req{}{}', - "#2" - ."#3"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\importreqs} -% The |\importreqs| macro reports a dependency to the dependencies file. and then reads -% the |aux| file specified in the argument. -% \begin{macrocode} -%<*package> -\newcommand{\importreqs}[1]{\req@dep@write{"#1.tex"}{IMPORTREQS}\makeatletter\input{#1.aux}\makeatother} -% -%<*ltxml> -DefConstructor('\importreqs {}',""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\rinput} -% The |\rinput| macro\ednote{this should go somewhere up; probably merge with sinput; -% which should also go into the stex package.} inputs the file and protocols this in -% the dependencies file. Note that this only takes place on the top level; i.e. the -% |\@ifdeps| switch is set to false. -% \begin{macrocode} -%<*package> -\newcommand{\rinput}[1]{\req@dep@write{"#1.tex"}{[dt="input"]}\bgroup\@depsfalse\input{#1}\egroup} -% -%<*ltxml> -DefMacro('\rinput','\input'); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Recording the dependencies for Change Management}\label{sec:moc-deps} -% -% The macros in this section record dependencies in a special file to be used in change -% management by the {\texttt{locutor}} system. This is still not optimal, since we do not -% know the actual path. -% -% \begin{macrocode} -%<*package> -\if@deps\newwrite\req@depfile -\immediate\openout\req@depfile=\jobname.deps -\AtEndDocument{\closeout\req@depfile} -% -% \end{macrocode} -% we redefine the |\importmodule| command, so that it does the reporting. -% \begin{macrocode} -%<*package> -\renewcommand{\importmodule}[2][]{\req@dep@write{"#1.tex"}{[dt="importmodule"]}\def\@test{#1}% -\ifx\@test\@empty\else\requiremodules{#1}\fi -\expandafter\gdef\csname#2@cd@file@base\endcsname{#1} -\activate@defs{#2}\export@defs{#2}} -\fi -% -% \end{macrocode} -% -% \begin{macrocode} -%<*package> -\def\req@dep@write#1#2{\if@deps\protected@write\req@depfile{}{#1 #2}\fi} -% -% \end{macrocode} -% \subsection{Finale} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput - - - -% LocalWords: iffalse reqdoc reqdoc.dtx kohlhase latexml texttt fileversion -% LocalWords: maketitle newpage tableofcontents newpage ednote sref recorddeps -% LocalWords: recorddeps moc-deps DescribeEnv prio reqs reqtable reqtable deps -% LocalWords: reqline importreqs printbibliography sec.impl textsf langle ifx -% LocalWords: textsf langle ltxml newif depsfalse depstrue longtable ifreqsnum -% LocalWords: reqsnumfalse newenvironment reqsnumtrue omd -% LocalWords: OptionalKeyVals omdoc omgroup ctancite req newcounter reqnum -% LocalWords: tmpop tmpop csname xdef endcsname expandafter auxout thesection -% LocalWords: hfill thereqnum reqnote stepcounter noindent textbf newcommand -% LocalWords: medskip omtext texttype hline tabularnewline makeatletter rinput -% LocalWords: makeatother sinput stex ifdeps bgroup egroup newwrite depfile -% LocalWords: openout jobname.deps renewcommand requiremodules gdef defs defs -% LocalWords: showmeta showmeta metakeys addmetakey metasetkeys diff --git a/Master/texmf-dist/source/latex/stex/sproof/sproof.dtx b/Master/texmf-dist/source/latex/stex/sproof/sproof.dtx deleted file mode 100644 index bb4f6b04a0e..00000000000 --- a/Master/texmf-dist/source/latex/stex/sproof/sproof.dtx +++ /dev/null @@ -1,783 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for Structural Markup for Proofs -% Copyright (C) 2004-2006 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% -% The development version of this file can be found at -% $URL: https://svn.kwarc.info/repos/stex/trunk/sty/sproof/sproof.dtx $ -% $Rev: 1671 $; last modified by $Author: kohlhase $ -% $Date: 2010-11-06 08:05:15 +0100 (Sat, 06 Nov 2010) $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{sproof}[2010/06/25 v0.9f Semantic Markup for Proofs] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,stex,float,moreverb} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage{../ctansvn} -\usepackage{hyperref} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: sproof.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/sproof/sproof.dtx $ -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{sproof.dtx}\end{document} -% -% \fi -% -% \iffalse\CheckSum{279}\fi -% -% \changes{v0.9}{2005/06/14}{First Version with Documentation} -% \changes{v0.9a}{2005/07/01}{Completed Documentation} -% \changes{v0.9b}{2005/08/06}{Complete functionality and Updated Documentation} -% \changes{v0.9c}{2006/01/13}{more packaging} -% \changes{v0.9d}{2006/10/31}{made sproof.dtx independent of statements.dtx} -% \changes{v0.9d}{2006/10/31}{revamped the proof end mark management} -% \changes{v0.9e}{2008/10/11}{taking type seriously} -% \changes{v0.9f}{2009/12/14}{changing to omd metadata framework} -% \changes{v0.9f}{2008/12/14}{first steps to sref} -% -% \GetFileInfo{sproof.sty} -% -% \MakeShortVerb{\|} -%\def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\xml{\scsys{Xml}} -% \def\mathml{\scsys{MathML}} -% \def\omdoc{\scsys{OMDoc}} -% \def\openmath{\scsys{OpenMath}} -% \def\latexml{\scsys{LaTeXML}} -% \def\perl{\scsys{Perl}} -% \def\cmathml{Content-{\sc MathML}\index{Content {\sc MathML}}\index{MathML@{\sc MathML}!content}} -% \def\activemath{\scsys{ActiveMath}} -% \def\twin#1#2{\index{#1!#2}\index{#2!#1}} -% \def\twintoo#1#2{{#1 #2}\twin{#1}{#2}} -% \def\atwin#1#2#3{\index{#1!#2!#3}\index{#3!#2 (#1)}} -% \def\atwintoo#1#2#3{{#1 #2 #3}\atwin{#1}{#2}{#3}} -% \title{{\texttt{sproof.sty}}: Structural Markup for Proofs\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |sproof| package is part of the {\stex} collection, a version of {\TeX/\LaTeX} that -% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document -% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical -% knowledge management (MKM). -% -% This package supplies macros and environment that allow to annotate the structure of -% mathematical proofs in {\stex} files. This structure can be used by MKM systems for -% added-value services, either directly from the {\sTeX} sources, or after translation. -% \end{abstract} -% -% \newpage\tableofcontents\newpage -% -%\section{Introduction}\label{sec:sproof} -% -% The |sproof| ({\twintoo{semantic}{proofs}}) package supplies macros and environment that -% allow to annotate the structure of mathematical proofs in {\stex} files. This structure -% can be used by MKM systems for added-value services, either directly from the {\sTeX} -% sources, or after translation. Even though it is part of the {\stex} collection, it can -% be used independently, like it's sister package |statements|. -% -% {\stex} is a version of {\TeX/\LaTeX} that allows to markup {\TeX/\LaTeX} documents -% semantically without leaving the document format, essentially turning {\TeX/\LaTeX} into -% a document format for mathematical knowledge management (MKM). -% -% \begin{exfig}\scriptsize -% \begin{verbatim} -% \begin{sproof}[id=simple-proof,for=sum-over-odds] -% {We prove that $\sum_{i=1}^n{2i-1}=n^{2}$ by induction over $n$} -% \begin{spfcases}{For the induction we have to consider the following cases:} -% \begin{spfcase}{$n=1$} -% \begin{spfstep}[display=flow] then we compute $1=1^2$\end{spfstep} -% \end{spfcase} -% \begin{spfcase}{$n=2$} -% \begin{sproofcomment}[display=flow] -% This case is not really necessary, but we do it for the -% fun of it (and to get more intuition). -% \end{sproofcomment} -% \begin{spfstep}[display=flow] We compute $1+3=2^{2}=4$.\end{spfstep} -% \end{spfcase} -% \begin{spfcase}{$n>1$} -% \begin{spfstep}[type=assumption,id=ind-hyp] -% Now, we assume that the assertion is true for a certain $k\geq 1$, -% i.e. $\sum_{i=1}^k{(2i-1)}=k^{2}$. -% \end{spfstep} -% \begin{sproofcomment} -% We have to show that we can derive the assertion for $n=k+1$ from -% this assumption, i.e. $\sum_{i=1}^{k+1}{(2i-1)}=(k+1)^{2}$. -% \end{sproofcomment} -% \begin{spfstep} -% We obtain $\sum_{i=1}^{k+1}{2i-1}=\sum_{i=1}^k{2i-1}+2(k+1)-1$ -% \begin{justification}[method=arith:split-sum] -% by splitting the sum. -% \end{justification} -% \end{spfstep} -% \begin{spfstep} -% Thus we have $\sum_{i=1}^{k+1}{(2i-1)}=k^2+2k+1$ -% \begin{justification}[method=fertilize] by inductive hypothesis.\end{justification} -% \end{spfstep} -% \begin{spfstep}[type=conclusion] -% We can \begin{justification}[method=simplify]simplify\end{justification} -% the right-hand side to ${k+1}^2$, which proves the assertion. -% \end{spfstep} -% \end{spfcase} -% \begin{spfstep}[type=conclusion] -% We have considered all the cases, so we have proven the assertion. -% \end{spfstep} -% \end{spfcases} -% \end{sproof} -% \end{verbatim} -% \vspace*{-.5cm} -% \caption{A very explicit proof, marked up semantically}\label{fig:proof:src} -% \end{exfig} -% -% We will go over the general intuition by way of our running example (see -% Figure~\ref{fig:proof:src} for the source and Figure~\ref{fig:proof:result} for the -% formatted result).\ednote{talk a bit more about proofs and their structure,... maybe -% copy from OMDoc spec. } -% -% \section{The User Interface} -% -% \subsection{Package Options}\label{sec:user:options} -% -% The |sproofs| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If -% this is set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for details -% and customization options). -% -% \subsection{Proofs and Proof steps} -% -% \DescribeEnv{sproof} The |proof| environment is the main container for proofs. It takes -% an optional |KeyVal| argument that allows to specify the |id| (identifier) and |for| -% (for which assertion is this a proof) keys. The regular argument of the |proof| -% environment contains an introductory comment, that may be used to announce the proof -% style. The |proof| environment contains a sequence of |\step|, |proofcomment|, and -% |pfcases| environments that are used to markup the proof steps. The |proof| environment -% has a variant |Proof|, which does not use the proof end marker. This is convenient, if a -% proof ends in a case distinction, which brings it's own proof end marker with it. -% \DescribeEnv{sProof} The |Proof| environment is a variant of |proof| that does not mark -% the end of a proof with a little box; presumably, since one of the subproofs already has -% one and then a box supplied by the outer proof would generate an otherwise empty line. -% \DescribeMacro{\spfidea} The |\spfidea| macro allows to give a one-paragraph -% description of the proof idea. -% -% For one-line proof sketches, we use the \DescribeMacro{spfsketch}|\spfsketch| macro, -% which takes the |KeyVal| argument as |sproof| and another one: a natural language text -% that sketches the proof. -% -% \DescribeEnv{spfstep} Regular proof steps are marked up with the |step| environment, which -% takes an optional |KeyVal| argument for annotations. A proof step usually contains a -% local assertion (the text of the step) together with some kind of evidence that this can -% be derived from already established assertions. -% -% Note that both |\premise| and |\justarg| can be used with an empty second argument to -% mark up premises and arguments that are not explicitly mentioned in the text. -% -% \begin{exfig} -% \begin{sproof}[id=simple-proof,for=sum-over-odds] -% {We prove that $\sum_{i=1}^n{2i-1}=n^{2}$ by induction over $n$} -% \begin{spfcases}{For the induction we have to consider the following cases:} -% \begin{spfcase}{$n=1$} -% \begin{spfstep}[display=flow] then we compute $1=1^2$\end{spfstep} -% \end{spfcase} -% \begin{spfcase}{$n=2$} -% \begin{sproofcomment}[display=flow] -% This case is not really necessary, but we do it for the fun -% of it (and to get more intuition). -% \end{sproofcomment} -% \begin{spfstep}[display=flow] -% We compute $1+3=2^{2}=4$ -% \end{spfstep} -% \end{spfcase} -% \begin{spfcase}{$n>1$} -% \begin{spfstep}[type=hypothesis,id=ind-hyp] -% Now, we assume that the assertion is true for a certain $k\geq 1$, i.e. -% $\sum_{i=1}^k{(2i-1)}=k^{2}$. -% \end{spfstep} -% \begin{sproofcomment} -% We have to show that we can derive the assertion for $n=k+1$ from this -% assumption, i.e. $\sum_{i=1}^{k+1}{(2i-1)}=(k+1)^{2}$. -% \end{sproofcomment} -% \begin{spfstep}[id=splitit] -% We obtain $\sum_{i=1}^{k+1}{(2i-1)}=\sum_{i=1}^k{(2i-1)}+2(k+1)-1$ -% \begin{justification}[method=arith:split-sum] -% by splitting the sum -% \end{justification} -% \end{spfstep} -% \begin{spfstep}[id=byindhyp] -% Thus we have $\sum_{i=1}^{k+1}{(2i-1)}=k^2+2k+1$ -% \begin{justification}[method=fertilize] -% by \premise[ind-hyp]{inductive hypothesis}. -% \end{justification} -% \end{spfstep} -% \begin{spfstep}[type=conclusion] -% We can \begin{justification}[method=simplify-eq] -% simplify the {\justarg[rhs]{right-hand side}} -% \end{justification} to $(k+1)^2$, which proves the assertion. -% \end{spfstep} -% \end{spfcase} -% \begin{spfstep}[type=conclusion] -% We have considered all the cases, so we have proven the assertion. -% \end{spfstep} -% \end{spfcases} -% \end{sproof} -% \caption{The formatted result of the proof in Figure~\ref{fig:proof:src}}\label{fig:proof:result} -% \end{exfig} -% -% \subsection{Justifications} -% -% \DescribeEnv{justification} This evidence is marked up with the |justification| -% environment in the |sproof| package. This environment totally invisible to the formatted -% result; it wraps the text in the proof step that corresponds to the evidence. The -% environment takes an optional |KeyVal| argument, which can have the |method| key, whose -% value is the name of a proof method (this will only need to mean something to the -% application that consumes the semantic annotations). Furthermore, the justification can -% contain ``premises'' (specifications to assertions that were used justify the step) and -% ``arguments'' (other information taken into account by the proof method). -% -% \DescribeMacro{\premise} The |\premise| macro allows to mark up part of the text as -% reference to an assertion that is used in the argumentation. In the example in -% Figure~\ref{fig:proof:src} we have used the |\premise| macro to identify the inductive -% hypothesis. -% -% \DescribeMacro{\justarg} The |\justarg| macro is very similar to |\premise| with the -% difference that it is used to mark up arguments to the proof method. Therefore the -% content of the first argument is interpreted as a mathematical object rather than as an -% identifier as in the case of |\premise|. In our example, we specified that the -% simplification should take place on the right hand side of the equation. Other examples -% include proof methods that instantiate. Here we would indicate the substituted object in -% a |\justarg| macro. -% -% \subsection{Proof Structure} -% -% \DescribeEnv{spfcases} The |pfcases| environment is used to mark up a proof by -% cases. This environment takes an optional |KeyVal| argument for semantic annotations and -% a second argument that allows to specify an introductory comment (just like in the -% |proof| environment). -% -% \DescribeEnv{spfcase} The content of a |pfcases| environment are a sequence of case -% proofs marked up in the |pfcase| environment, which takes an optional |KeyVal| argument -% for semantic annotations. The second argument is used to specify the the description of -% the case under consideration. The content of a |pfcase| environment is the same as that -% of a |proof|, i.e. |step|s, |proofcomment|s, and |pfcases| environments. -% -% \DescribeEnv{sproofcomment} The |proofcomment| environment is much like a |step|, only -% that it does not have an object-level assertion of its own. Rather than asserting some -% fact that is relevant for the proof, it is used to explain where the proof is going, -% what we are attempting to to, or what we have achieved so far. As such, it cannot be the -% target of a |\premise|. -% -% \subsection{Proof End Markers} -% -% Traditionally, the end of a mathematical proof is marked with a little box at the end of -% the last line of the proof (if there is space and on the end of the next line if there -% isn't), like so:\sproofend -% -% The |sproof| package provides the \DescribeMacro{\sproofend}|\sproofend| macro for -% this. If a different symbol for the proof end is to be used (e.g. {\sl{q.e.d}}), then -% this can be obtained by specifying it using the -% \DescribeMacro{\sProofEndSymbol}|\sProofEndSymbol| configuration macro (e.g. by specifying -% |\sProofEndSymbol{q.e.d}|). -% -% Some of the proof structuring macros above will insert proof end symbols for sub-proofs, -% in most cases, this is desirable to make the proof structure explicit, but sometimes -% this wastes space (especially, if a proof ends in a case analysis which will supply its -% own proof end marker). To suppress it locally, just set |proofend={}| in them or use use -% |\sProofEndSymbol{}|. -% -% \subsection{Configuration of the Presentation}\label{sec:user:conf} -% -% Finally, we provide configuration hooks in Figure~\ref{fig:hooks} for the keywords in -% proofs. These are mainly intended for package authors building on |statements|, e.g. for -% multi-language support.\ednote{we might want to develop an extension -% \texttt{sproof-babel} in the future.}. -%\begin{figure}[ht]\centering -% \begin{tabular}{|lll|}\hline -% Environment & configuration macro & value\\\hline\hline -% \texttt{proof} & \texttt{\textbackslash spf@proof@kw} & \makeatletter\spf@proof@kw\\\hline -% \texttt{sketchproof} & \texttt{\textbackslash spf@sketchproof@kw} & \makeatletter\spf@proofsketch@kw\\\hline -% \end{tabular} -% \caption{Configuration Hooks for Semantic Proof Markup}\label{fig:hooks} -% \end{figure} -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the TRAC. -% \begin{compactenum} -% \item The numbering scheme of proofs cannot be changed. It is more geared for teaching -% proof structures (the author's main use case) and not for writing papers.\lec{reported -% by Tobias Pfeiffer; see \tracissue{1658}} -% \end{compactenum} -% -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography} -% \newpage -% -% \section{The Implementation} -% -% The |sproof| package generates to files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$}} and -% {\textsf{$\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% We first set up the Perl Packages for {\latexml} -% -% \begin{macrocode} -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('sref'); -% -% \end{macrocode} -% -% \subsection{Package Options}\label{sec:impl:options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false).\ednote{need an implementation for {\latexml}} -% -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\ProcessOptions -% -%<*ltxml> -DeclareOption('showmeta',''); -% -% \end{macrocode} -% -% Then we make sure that the |sref| package is loaded~\ctancite{Kohlhase:sref}. -% \begin{macrocode} -%<*package> -\RequirePackage{sref} -% -% \end{macrocode} -% -% \subsection{Proofs}\label{sec:impl:proofs} -% -% We first define some keys for the |proof| environment. -% \begin{macrocode} -%<*package> -\srefaddidkey{spf} -\addmetakey*{spf}{display} -\addmetakey{spf}{for} -\addmetakey{spf}{from} -\addmetakey*[\sproof@box]{spf}{proofend} -\addmetakey{spf}{type} -\addmetakey*{spf}{title} -\addmetakey{spf}{continues} -% -% \end{macrocode} -% -% \begin{macro}{\spf@flow} -% We define this macro, so that we can test whether the |display| key has the value |flow| -% \begin{macrocode} -%\def\spf@flow{flow} -% \end{macrocode} -% \end{macro} -% -% For proofs, we will have to have deeply nested structures of enumerated list-like -% environments. However, {\LaTeX} only allows |enumerate| environments up to nesting depth -% 4 and general list environments up to listing depth 6. This is not enough for us. -% Therefore we have decided to go along the route proposed by Leslie Lamport to use a -% single top-level list with dotted sequences of numbers to identify the position in the -% proof tree. Unfortunately, we could not use his |pf.sty| package directly, since it does -% not do automatic numbering, and we have to add keyword arguments all over the place, to -% accomodate semantic information. -% -% \begin{environment}{pst@with@label} -% This environment manages\footnote{This gets the labeling right but only works 8 levels -% deep} the path labeling of the proof steps in the description environment of the -% outermost |proof| environment. The argument is the label prefix up to now; which we -% cache in |\pst@label| (we need evaluate it first, since are in the right place -% now!). Then we increment the proof depth which is stored in |\count10| (lower counters -% are used by {\TeX} for page numbering) and initialize the next level counter -% |\count\count10| with 1. In the end call for this environment, we just decrease the -% proof depth counter by 1 again. -% \begin{macrocode} -%<*package> -\newenvironment{pst@with@label}[1]{\edef\pst@label{#1}\advance\count10 by 1\count\count10=1} -{\advance\count10 by -1} -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\the@pst@label} -% |\the@pst@label| evaluates to the current step label. -% \begin{macrocode} -\def\the@pst@label{\pst@label.\number\count\count10} -% \end{macrocode} -%\end{macro} -% -% \begin{macro}{\next@pst@label} -% |\next@pst@label| increments the step label at the current level. -% \begin{macrocode} -\def\next@pst@label{\global\advance\count\count10 by 1} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\sproofend} -% This macro places a little box at the end of the line if there is space, or at the -% end of the next line if there isn't -% \begin{macrocode} -\def\sproof@box{\hbox{\vrule\vbox{\hrule width 6 pt\vskip 6pt\hrule}\vrule}} -\def\spf@proofend{\sproof@box} -\def\sproofend{\ifx\spf@proofend\@empty\else\hfil\null\nobreak\hfill\spf@proofend\par\smallskip\fi} -\def\sProofEndSymbol#1{\def\sproof@box{#1}} -% -%DefConstructor('\sproofend',""); -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{spfsketch} -% \begin{macrocode} -%<*package> -\def\spf@proofsketch@kw{Proof Sketch} -\newcommand{\spfsketch}[2][]{\metasetkeys{spf}{#1}\sref@target -\ifx\spf@display\spf@flow\else{\stDMemph{\ifx\spf@type\@empty\spf@proofsketch@kw\else\spf@type\fi}:}\fi{ #2}% -\sref@label@id{this \ifx\spf@type\@empty\spf@proofsketch@kw\else\spf@type\fi}} -% -%<*ltxml> -DefConstructor('\spfsketch OptionalKeyVals:pf{}', - "\n" - . "?#2(#2\n)()" - . "\n"); -DefConstructor('\sProofEndSymbol {}',''); -% -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{sproof} -% In this environment, we initialize the proof depth counter |\count10| to 10, and set -% up the description environment that will take the proof steps. At the end of the -% proof, we position the proof end into the last line. -% \begin{macrocode} -%<*package> -\def\spf@proof@kw{Proof} -\newenvironment{@proof}[2][]{\metasetkeys{spf}{#1}\sref@target -\count10=10 -\ifx\spf@display\spf@flow\else{\stDMemph{\ifx\spf@type\@empty\spf@proof@kw\else\spf@type\fi}:}\fi{ #2}% -\sref@label@id{this \ifx\spf@type\@empty\spf@proof@kw\else\spf@type\fi} -\def\pst@label{}\newcount\pst@count% initialize the labeling mechanism -\begin{description}\begin{pst@with@label}{P}} -{\end{pst@with@label}\end{description}} -\newenvironment{sproof}[2][]{\begin{@proof}[#1]{#2}}{\sproofend\end{@proof}} -\newenvironment{sProof}[2][]{\begin{@proof}[#1]{#2}}{\end{@proof}} -% -%<*ltxml> -DefCMPEnvironment('{sproof} OptionalKeyVals:pf{}', - "\n" - . "?#2(" - . "#2" - . "\n)()" - . "#body" - . "\n"); -DefMacro('\sProof','\sproof'); -DefMacro('\endsProof','\endsproof'); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{spfidea} -% \begin{macrocode} -%<*package> -\newcommand{\spfidea}[2][]{\metasetkeys{spf}{#1}% -\stDMemph{\ifx\spf@type\@empty{Proof Idea}\else\spf@type\fi:} #2\sproofend} -% -%<*ltxml> -DefCMPConstructor('\spfidea OptionalKeyVals:pf {}', - "\n" - . "#2\n" - . "\n"); -% -% \end{macrocode} -% \end{environment} -% -% The next two environments (proof steps) and comments, are mostly semantical, they take -% |KeyVal| arguments that specify their semantic role. In draft mode, they read these -% values and show them. If the surrounding proof had |display=flow|, then no new |\item| is -% generated, otherwise it is. In any case, the proof step number (at the current level) is -% incremented. -% \begin{environment}{spfstep} -% \begin{macrocode} -%<*package> -\newenvironment{spfstep}[1][]{\metasetkeys{spf}{#1} -\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi -\ifx\spf@title\@empty\else{(\stDMemph{\spf@title})}\fi} -{\next@pst@label} -% -%<*ltxml> -DefCMPEnvironment('{spfstep} OptionalKeyVals:pf', - "" - . "#body\n", - beforeConstruct=>sub { - $_[0]->maybeCloseElement('omdoc:p'); - $_[0]->maybeCloseElement('omdoc:CMP'); - }); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{sproofcomment} -% \begin{macrocode} -%<*package> -\newenvironment{sproofcomment}[1][]{\metasetkeys{spf}{#1} -\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi} -{\next@pst@label} -% -%<*ltxml> -DefCMPEnvironment('{sproofcomment} OptionalKeyVals:pf', - "" - . "#body" - . ""); -% -% \end{macrocode} -% \end{environment} -% -% The next two environments also take a |KeyVal| argument, but also a regular one, which -% contains a start text. Both environments start a new numbered proof level. -% -% \begin{environment}{spfcases} -% In the |pfcases| environment, the start text is displayed as the first comment of the -% proof. -% \begin{macrocode} -%<*package> -\newenvironment{spfcases}[2][]{\metasetkeys{spf}{#1} -\def\@test{#2}\ifx\@test\empty\else -\ifx\spf@display\spf@flow {#2}\else\item[\the@pst@label]{#2} \fi\fi -\begin{pst@with@label}{\pst@label.\number\count\count10}} -{\end{pst@with@label}\next@pst@label} -% -%<*ltxml> -DefEnvironment('{spfcases} OptionalKeyVals:pf {}', - "\n" - . "#2\n" - . "#body" - . "\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{spfcase} -% In the |pfcase| environment, the start text is displayed specification of the case -% after the |\item| -% \begin{macrocode} -%<*package> -\newenvironment{spfcase}[2][]{\metasetkeys{spf}{#1} -\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi -\def\@test{#2}\ifx\@test\@empty\else{\stDMemph{#2}:}\fi -\begin{pst@with@label}{\pst@label.\number\count\count10}} -{\ifx\spf@display\spf@flow\else\sproofend\fi\end{pst@with@label}\next@pst@label} -% -%<*ltxml> -DefEnvironment('{spfcase} OptionalKeyVals:pf{}', - "\n" - . "?#2(" - . "#2" - . "\n)()" - . "#body" - . "\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{subproof} -% In the |subproof| environment, a new (lower-level) proof environment is -% started.\ednote{document this above} -% \begin{macrocode} -%<*package> -\newenvironment{subproof}[1][]% -{\begin{pst@with@label}{\pst@label.\number\count\count10}} -{\ifx\spf@display\spf@flow\else\sproofend\fi\end{pst@with@label}} -% -%<*ltxml> -DefEnvironment('{subproof}[]', - "" - . "?#1(#1)()" - . "" - . "\n #body\n" - . "" - .""); -% -% \end{macrocode} -% \end{environment} -% -% \subsection{Justifications} -% -% We define the actions that are undertaken, when the keys for justifications are -% encountered. Here this is very simple, we just define an internal macro with the value, -% so that we can use it later. -% \begin{macrocode} -%<*package> -\srefaddidkey{just} -\addmetakey{just}{method} -\addmetakey{just}{premises} -\addmetakey{just}{args} -% -%<*ltxml> -DefKeyVal('just','id','Semiverbatim'); -DefKeyVal('just','method','Semiverbatim'); -DefKeyVal('just','premises','Semiverbatim'); -DefKeyVal('just','args','Semiverbatim'); -% -% \end{macrocode} -% -% The next three environments and macros are purely semantic, so we ignore the keyval -% arguments for now and only display the content.\ednote{need to do something about the -% premise in draft mode.} -% -% \begin{environment}{justification} -% \begin{macrocode} -%<*package> -\newenvironment{justification}[1][]{}{} -% -%<*ltxml> -sub extractBodyText { - my ($box, $remove) = @_; - my $str = ''; - my @boxes = $box->unlist; - foreach my $b(@boxes) { - my $s = ''; - if ($b =~ /LaTeXML::Whatsit/) { - my $body = $b->getBody; - $s = $body ? extractBodyText($body, $remove) : ''; - } elsif ($b =~ /LaTeXML::Box/) { - $s = $b->toString || ''; - @{$b}[0] = '' if $remove; } - $str .= $s; } - $str =~ s/\s+/ /g; - $str; } - -DefEnvironment('{justification} OptionalKeyVals:just', sub { - my ($doc, $keys, %props) = @_; - my $text = extractBodyText($props{body}, 1); - my $node = LookupValue('_LastSeenCMP'); - #$node->appendText($text) if $node; - my $method = $keys ? $keys->getValue('method') : undef; - $doc->openElement("omdoc:method", $method ? (xref => $method) : ()); - $doc->absorb($props{body}) if $props{body}; - $doc->closeElement("omdoc:method"); - return; }); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\premise} -% \begin{macrocode} -%<*package> -\newcommand{\premise}[2][]{#2} -% -%<*ltxml> -DefMacro('\premise[]{}', sub { - my ($xref, $text) = ($_[1], $_[2]); - my @res = (T_CS('\premise@content')); - push(@res, T_OTHER('['), $xref->unlist, T_OTHER(']')) if $xref; - push(@res, T_SPACE, $text->unlist) if $text; - @res; }); -DefConstructor('\premise@content[]', - ""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\justarg} -% the |\justarg| macro is purely semantic, so we ignore the keyval arguments for now and -% only display the content. -% \begin{macrocode} -%<*package> -\newcommand{\justarg}[2][]{#2} -% -%<*ltxml> -DefMacro('\justarg[]{}', sub { (($_[1] ? $_[1]->unlist : ()), - T_SPACE, $_[2]->unlist, T_SPACE); }); -Tag('omdoc:derive', afterClose=>sub { - my ($doc, $node) = @_; - my @children = grep($_->nodeType == XML_ELEMENT_NODE, $node->childNodes); - my $firstCMP = undef; - foreach my $child(@children) { - next unless ($child->localname || '') eq 'CMP'; - if ($child->hasChildNodes()) { - next unless $#{$child->childNodes} == 0; - next unless $child->firstChild->nodeType == XML_TEXT_NODE; } - - if ($firstCMP) { - $firstCMP->appendText($child->textContent); - $node->removeChild($child); - } else { $firstCMP = $child; } - } - });#$ -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Providing IDs for {\omdoc} Elements}\label{sec:impl:ids} -% -% To provide default identifiers, we tag all {\omdoc} -% elements that allow |xml:id| attributes by executing the |numberIt| procedure from |omdoc.sty.ltxml|. -% -% \begin{macrocode} -%<*ltxml> -Tag('omdoc:proof',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:derive',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:method',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:premise',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:derive',afterOpen=>\&numberIt,afterClose=>\&locateIt); -% -% \end{macrocode} -% -% \section{Finale} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput -% LocalWords: GPL structuresharing STR sproof dtx CPERL keyval methodfalse env -% LocalWords: methodtrue envtrue medhodtrue DefKeyVal Semiverbatim omdoc args -% LocalWords: DefEnvironment OptionalKeyVals KeyVal omtext DefConstructor str -% LocalWords: proofidea KeyVal pfstep DefCMPEnvironment KeyVal proofcomment eq -% LocalWords: KeyVal pfcases KeyVal pfcase KeyVal extractBodyText unlist elsif -% LocalWords: foreach getBody toString str str str LookupValue LastSeenCMP Thu -% LocalWords: appendText getValue undef openElement closeElement DefMacro omd -% LocalWords: afterClose nodeType childNodes firstCMP localname hasChildNodes -% LocalWords: firstChild textContent removeChild iffalse kohlhase sref scsys - -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% LocalWords: sproofs.sty sc sc mathml openmath latexml cmathml activemath geq -% LocalWords: twintoo atwin atwintoo texttt fileversion maketitle stex newpage -% LocalWords: tableofcontents newpage exfig scriptsize vspace ednote spfidea -% LocalWords: spfidea spfsketch spfsketch spfstep justarg spfcases spfcase rhs -% LocalWords: sproofcomment ind-hyp splitit arith byindhyp sproofend proofend -% LocalWords: printbibliography textsf langle textsf langle ltxml ctancite spf -% LocalWords: srefaddidkey pf.sty newenvironment hbox vrule vbox ifx -% LocalWords: hrule vskip hrule vrule hfil nobreak hfill smallskip newcommand -% LocalWords: stDMemph newcount endsproof xref doctex diff --git a/Master/texmf-dist/source/latex/stex/sref/sref.dtx b/Master/texmf-dist/source/latex/stex/sref/sref.dtx deleted file mode 100644 index 352b1d0d008..00000000000 --- a/Master/texmf-dist/source/latex/stex/sref/sref.dtx +++ /dev/null @@ -1,725 +0,0 @@ -% \iffalse meta-comment -% A LaTeX Class and Package for Semantic Cross-Referencing -% Copyright (c) 2009 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/sref/sref.dtx $ -% \fi -% -% \iffalse -%<*package> -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{sref}[2010/06/25 v0.9 Semantic Cross-References] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,float} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage{stex-logo,sref} -\usepackage{../ctansvn} -\usepackage{hyperref} -\usepackage[eso-foot,today]{svninfo} -\svnInfo $Id: sref.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/sref/sref.dtx $ -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{sref.dtx}\end{document} -% -% \fi -% -%\iffalse\CheckSum{265}\fi -% -% \changes{v0.5}{2008/03/28}{split off from omdoc.sty} -% \changes{v0.6}{2009/12/07}{introducing sequation} -% \changes{v0.9}{2009/14/07}{using omd for metadata} -% -% \GetFileInfo{sref.sty} -% -% \MakeShortVerb{\|} -% -% \def\omdoc{OMDoc} -% \def\latexml{{\LaTeX}ML} -% \title{{\texttt{sref.sty}}: Semantic Cross-Referencing in {\LaTeX}\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |sref| package is part of the {\sTeX} collection, a version of {\TeX/\LaTeX} that -% allows to markup {\TeX/\LaTeX} documents semantically without leaving the document -% format, essentially turning {\TeX/\LaTeX} into a document format for mathematical -% knowledge management (MKM). -% -% The |sref| package supplies an for semantic cross-referencing over multiple documents. -% \end{abstract} -% -%\tableofcontents\newpage -% -%\section{Introduction}\label{sec:intro} -% -% The automatic computation of cross-references is one of the traditional strong points of -% {\LaTeX}. However, cross-referencing is limited to labels in the current document -% only. Cross-referencing between multiple documents in a jointly developed document -% collection is not easy to achieve in the {\LaTeX} processing model, which reads files -% sequentially and lacks a path concept. -% -% The |sref| package is mainly aimed at package developers. It supplies the internal -% macros that can be used to make document structuring elements cross-referencable. The -% general strategy here is to equip the document structuring macros with an -% \DescribeMacro{id}|id| key, so that the author can specify meaningful ones, but to let -% the transformation give default ones if the author did not. The value of the |id| key -% can also be used for cross-referencing like the |\label|/|\ref| mechanism in -% {\LaTeX}. We implement an independent referencing mechanism, since the referencing model -% is geared more towards referencing text fragments than text fragment labels like section -% numbers. Therefore we let the referenced fragments define the reference text much like -% the |\autoref| macro from |\hpyerref|. -% -% \section{The User Interface}\label{sec:user} -% -% This package is currently mainly meaningful in the context of the {\sTeX} collection, -% since all cross-referencable macros and environments must be extended to know about their -% referencing mechanism. We explain the user interface in \sref{sec:user:crossref}. To -% port the functionality to other {\LaTeX} classes and packages, they have to be upgraded -% via the API in \sref{sec:user:package-authors}. -% -% \subsection{Package Options}\label{sec:user:options} -% -% The |sref| package has the \DescribeMacro{extrefs}|extrefs| package option, which can be -% set to activate multifile support (see subsection~\sref{sec:user:interdoc}). If the -% \DescribeMacro{showmeta}|showmeta| is set, then the metadata keys are shown -% (see~\cite{Kohlhase:metakeys:ctan} for details and customization options). -% -% \subsection{Cross-Referencing}\label{sec:user:crossref} -% -% The \DescribeMacro{\sref}|\sref{|\meta{id}|}| macro is the main cross-referencing macro, -% see Figure~\ref{fig:mysection} for an example. Depending on the whether macro or -% environment marking up the respective document fragment carries the key/value pair -% |id=|\meta{id} the cross-reference will expand to ``Section 2.1'' or ``this remark'', -% both carrying hyper-references. The |\sref| macro takes an optional argument that allows -% to specify a link text that overrides the auto-generated one. -% -% \begin{exfig} -% \begin{verbatim} -% \mysection[id=foo]{#2} -% ... \sref{foo} ... -% \end{verbatim} -% \vspace*{-1.5em} -% \caption{Semantic Crossreferencing}\label{fig:mysection} -% \end{exfig} -% -% The -% \DescribeMacro{\srefs}|\srefl{|\meta{id\textsuperscript{1}}|}{|\meta{id\textsuperscript{2}}|}| -% is a variant it |\sref|, only that it allows to reference two semantic objects and -% expands to ``\meta{reference\textsuperscript{1}} and -% \meta{reference\textsuperscript{2}}''. \DescribeMacro{\srefl}|\srefl{|\meta{id\textsuperscript{1}}|}{|\meta{id\textsuperscript{n}}|}| -% is similar, but for ranges; it expands to ``\meta{reference\textsuperscript{1}} to -% \meta{reference\textsuperscript{n}}''. Its use should be restricted to cases, where the -% types of objects references are homogenous. -% -% Finally, there is a variant \DescribeMacro{\spageref}|\spageref| that only outputs the -% page number of the referenced object. It can be used in cases where no hyper-referencing -% is present. It uses the macro \DescribeMacro{\sref@page@label}|\sref@page@label| for -% styling the page reference. Redefining this will allows to customize this. The default -% setting is -% \begin{verbatim} -% \newcommand{\sref@page@label}[1]{p.~{#1}} -% \end{verbatim} -% -% \subsection{An API for Package Authors}\label{sec:user:package-authors} -% -% To make use of the |sref| package, the package must define the document structuring -% infrastructure using the |sref| internal macros. The {\sTeX} packages already does this, -% so we make an example here for a slightly upgraded sectioning command in -% Figure~\ref{fig:mysection:setup}. The first three lines define the keys for the keyval -% attribute of the |\mysection| command using the infrastructure supplied by the |omd| -% package~\ctancite{Kohlhase:metakeys} (remember the |\RequirePackage{metakeys}|). The first two just -% initialize the keys to save the key values in internal macros, and the |\metasetkeys| -% activates the keys when reading the keyval argument. The -% \DescribeMacro{\srefaddidkey}|\srefaddidkey| macro is a variant of |\addmetakey| macro -% supplied by the |sref| package that sets up the keys to set the -% \DescribeMacro{\sref@id}|\sref@id| register for later use by the |sref| -% infrastructure. Note that the |\srefaddidkey| macro uses the |prefix| key to -% systematically construct prefixed identifiers. This can be useful in particular for -% sectioning commands. -% -% \begin{exfig} -% \begin{verbatim} -% \addmetakey{sec}{short} -% \addmetakey[black]{sec}{color} -% \srefaddidkey[prefix=sec.]{sec} -% \newcommand{\mysection}[2][]{\metasetkeys{#1}\sref@target\color{\sec@color} -% \section[\sec@short]{#2}\sref@label@id{Section \thesection}} -% \end{verbatim} -% \vspace*{-1.5em} -% \caption{A slightly upgraded sectioning command}\label{fig:mysection:setup} -% \end{exfig} -% -% In this situation, the |\mysection| macro processes the optional argument with -% |\metasetkeys| and then sets the color of the section. The -% \DescribeMacro{\sref@target}|\sref@target| sets up the hypertarget for the |hyperref| -% package to use, then we use the regular |\section| command, and we use the -% \DescribeMacro{\sref@label@id}|\sref@label@id| macro to define the label that the -% |\sref| macro will use for cross-referencing. -% -% Note that the use of the straight use of the label ``Section'', which will be written -% into the auxiliary files is bad practice since it is not configurable. It would be much -% better to make it configurable via a presentation macro like |\my@section@label| in -% Figure~\ref{fig:mysection:configurable}. Then translators or even the user could redefine -% the |\my@section@label| to adapt them to their needs. -% -% \begin{exfig} -% \begin{verbatim} -% \newcommand{\my@section@label}[1]{Section~{#1}} -% \newcommand{\mysection}[2][]{\metasetkeys{#1}\sref@target\color{\sec@color} -% \section[\sec@short]{#2}\sref@label@id{\my@section@label\thesection}} -% \end{verbatim} -% \vspace*{-1.5em} -% \caption{A Sectioning Command with Configurable Label}\label{fig:mysection:configurable} -% \end{exfig} -% -% \subsection{Inter-Document Cross-Referencing}\label{sec:user:interdoc} -% -% |sref.sty| provides inter-document cross-referencing. The use case is simple: we want to -% have a document collection (e.g. a book with conference proceedings), but also want to -% be able format the individual documents separately, and still have meaningful -% cross-references. To show off the possibilities, let us assume that we have a book with -% two separate papers, which we put into separate directories |idc| and |scr| to minimize -% interference between the authors Jane Doe and John Bull. To achieve this, we would set -% up paper driver files |main.tex| like the one in Figure~\ref{fig:paper-driver} in the -% two directories. These use the \DescribeMacro{\makeextrefs}|\makeextrefs| macro, which -% causes the |sref| package to generate a {\emph{external references file}} -% |main.refs|. Note that the |\makeextrefs| macros reads the previous |main.refs| file so -% that forward-referencing is possible (in the pass after a reference was labeled). -% -% \begin{exfig} -% \begin{verbatim} -% \documentclass{article} -% \usepackage[extrefs]{sref} -% \makeextrefs{idc} -% \inputrefs{scr}{../scr/main} -% \extrefstyle{scr}{\cite[\protect{\theextref}]{Doe09}} -% \title{Inter-Document Crossreferencing} -% \author{John Bull\\...} -% \begin{document}\maketitle\input{paper}\end{document} -% \end{verbatim} -% \vspace*{-2em} -% \caption{A document driver {\texttt{idc/main.tex}} for a paper}\label{fig:paper-driver} -% \end{exfig} -% -% The external references file can be read by other documents; in -% Figure~\ref{fig:paper-driver}, we read the references file of Jane Doe's paper via the -% \DescribeMacro{\inputrefs}|\inputrefs| macro. This allows John Bull to use\footnote{Note -% that the external references file is updated every time {\LaTeX} is run, so that -% references may be off by one version.} references like -% \DescribeMacro{\extref}|\extref{scr}{foo}| to reference document fragments in Jane Doe's -% paper she has labeled with the {\emph{reference prefix}} |\slabel{foo}| (assuming that -% she has added |\makeextrefs{scr}| in the preamble of her paper). Note that just as the -% |\sref| macro |\extref| takes an optional first argument that allows to specify the link -% text. Here, John Bull uses the \DescribeMacro{\extrefstyle}|\extrefstyle| macro to -% specify how the externa references are to be formatted, in this case he decided to use a -% {\LaTeX} citation. Generally, first argument of the |\extrefstyle| macro is the -% reference prefix which should be configured, and the second is the format, where the -% \DescribeMacro{\theextref}|\theextref| macro expands to the cross-reference. In this -% case, John chose to use a bib{\TeX} citation (he has an entry |Doe09| in his database) -% for the reference to the external paper. -% -% As the content of the respective paper is input from a file |paper.tex| in the -% individual papers, we can re-use these in the book. To do this we set up a book driver -% file like the one in Figure~\ref{fig:book-driver}. This one does not use the |extrefs| -% option, so the references are written to the |.aux| file. Furthermore |\extref| is -% redefined to act like |\sref| disregarding the first required argument. Thus all -% references work like they should. -% \begin{exfig} -% \begin{verbatim} -% \documentclass{book} -% \usepackage{sref} -% \title{Cross-Referencing in {\LaTeX}} -% \author{Elder Reseacher} -% \begin{document} -% \maketitle -% \chapter{Semantic Crossreferencing (Jane Doe, ...)} -% \input{scr/paper}\newpage -% ... -% \chapter{Inter-Document Crossreferencing (John Bull, ...)} -% \input{idc/paper}\newpage -% \end{document} -% \end{verbatim} -% \vspace*{-2em} -% \caption{A document driver for the book assembling the papers}\label{fig:book-driver} -% \end{exfig} -% -% This example has been carried through (without the separation of chapters in to -% subdirectories) in the files accompanying the source distribution of the |sref| -% package. They are used for testing the package. -% -% \subsection{Semantic Versions of Commonly used Referencing Commands}\label{sec:user:common} -% -% The |sref| package defines semantically referencable versions of commonly used {\LaTeX} -% environments and command sequences.\footnote{This section will be extended by need, so -% if you miss some semantic environment, please contact the package author, or (better) -% file an issue at~\cite{sTeX:online})} -% -% The \DescribeEnv{sequation}|sequation| environment takes an optional key/value argument -% that allows to specify an identifier and unifies the behavior of the |equation| (if an -% |id| key is given) and |displaymath| (else) environments. So the markup -% \begin{exfig} -% \begin{verbatim} -% A semantic equation with id -% \begin{sequation}[id=foo] -% e^{mc}=-1 -% \end{sequation} -% and another one without id -% \begin{sequation} -% e^{mc}=-1 -% \end{sequation} -% now, we reference the first equation: {\sref{foo}} -% \end{verbatim} -% \vspace*{-1.5em}\hrule -% yields the result:\hrule -% A semantic equation with id -% \begin{sequation}[id=foo] -% e^{mc}=-1 -% \end{sequation} -% and another one without id -% \begin{sequation} -% e^{mc}=-1 -% \end{sequation} -% now, we reference the first equation: {\sref{foo}} -% \caption{Semantic Equation}\label{fig:sequation} -% \end{exfig} -% -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography} -% \newpage -% -% \section{Implementation}\label{sec:impl} -% -% The |sref| package generates two files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and -% $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% We first set up header information for the {\latexml} binding file. -% \begin{macrocode} -%<*ltxml> -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -% -% \end{macrocode} -% -% \subsection{Package Options}\label{sec:impl:options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false).\ednote{need an implementation for {\latexml}} -% -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\ifextrefs\extrefsfalse -\DeclareOption{extrefs}{\extrefstrue} -\ProcessOptions -% -%<*ltxml> -DeclareOption('extrefs',''); -% -% \end{macrocode} -% -% Then we need to set up the packages by requiring the |metakeys| package~\ctancite{Kohlhase:metakeys} -% to be loaded (in the right version). -% -% \begin{macrocode} -%<*package> -\RequirePackage{metakeys} -% -%RequirePackage('metakeys'); -% \end{macrocode} -% -% \subsection{Crossreferencing}\label{sec:impl:crossref} -% -% The following user-level macros just use the |\sref@hlink| macros in various ways for -% internal referencing.\ednote{they need implementation in LaTeXML, the ones here only are -% stubs to make the error messages shut up.} -% -% \begin{macro}{\sref} -% \begin{macrocode} -%<*package> -\newcommand{\sref}[2][]{% -\@ifundefined{sref@part}{\sref@hlink[#1]{#2}}{\sref@hlink[#1]{\sref@part @#2}}} -% -%<*ltxml> -DefConstructor('\sref[]{}', - "Section "); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\srefs} -% \begin{macrocode} -%<*package> -\newcommand{\srefs}[3][]{% -\def\@test{#1}\ifx\@test\@empty\sref{#2} and \sref{#3}\else #1\fi} -% -%<*ltxml> -DefConstructor('\srefs[]{}', - "Section "); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\srefl} -% \begin{macrocode} -%<*package> -\newcommand{\srefl}[3][]{% -\def\@test{#1}\ifx\@test\@empty\sref{#2} to \sref{#3}\else #1\fi} -% -%<*ltxml> -DefConstructor('\srefl[]{}', - "Section "); -% -% \end{macrocode} -% \end{macro} -% \ednote{it is not clear what we want in the implementation of spageref} -% \begin{macro}{\spageref} -% \begin{macrocode} -%<*package> -\newcommand{\spageref}[2][]{% -\@ifundefined{sref@part}{\sref@hlink[#1]{#2}}{\sref@hlink[#1]{\sref@part @#2}}} -% -%<*ltxml> -DefConstructor('\spageref[]{}', - "Section "); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{An API for Package Authors}\label{sec:impl:package-authors} -% -% We find out whether the |hyperref| package is loaded, since we may want to use it for -% cross-references, for which we set up some internal macros that gracefully degrade if -% |hyperref| is not loaded. -% -% \begin{macro}{\sref@*@ifh} -% \begin{macrocode} -%<*package> -\newif\ifhref\hreffalse -\AtBeginDocument{\@ifpackageloaded{hyperref}{\hreftrue}{\hreffalse}} -\def\sref@href@ifh#1#2{\ifhref\href{#1}{#2}\else#2\fi} -\def\sref@hlink@ifh#1#2{\ifhref\hyperlink{#1}{#2}\else#2\fi} -\def\sref@target@ifh#1#2{\ifhref\hypertarget{#1}{#2}\else#2\fi} -% \end{macrocode} -% \end{macro} -% -% Then we provide some macros for {\sTeX}-specific crossreferencing -% -% \begin{macro}{\sref@target} -% The next macro uses this and makes an target from the current |sref@id| declared by -% a |id| key. -% \begin{macrocode} -\def\sref@target% -{\ifx\sref@id\@empty\else% -\expandafter\sref@target@ifh% -{sref@\@ifundefined{sref@part}{}{\sref@part @}\sref@id @target}{}\fi} -% \end{macrocode} -% \end{macro} -% -% The next two macros are used for setting labels, it is mainly used for enabling forward -% references, to do this, it is written into \meta{jobname}|.aux| or \meta{jobname}|.refs|. -% -% \begin{macro}{\@sref@def} -% This macro stores the value of its last argument in a custom macro for reference. -% \begin{macrocode} -\def\@sref@def#1#2#3{\expandafter\gdef\csname sref@#1@#2\endcsname{#3}} -% \end{macrocode} -% \end{macro} -% -% The next step is to set up a file to which the references are written, this is normally -% the |.aux| file, but if the |extref| option is set, we have to use an |.ref| file. -% \begin{macrocode} -\ifextrefs\newwrite\refs@file\else\def\refs@file{\@auxout}\fi -% \end{macrocode} -% -% \begin{macro}{\sref@def} -% This macro writes an |\@sref@def| command to the current aux file and also executes it. -% \begin{macrocode} -\def\sref@def#1#2#3{%\@sref@def{#1}{#2}{#3}% -\protected@write\refs@file{}{\string\@sref@def{#1}{#2}{#3}}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\srefaddidkey} -% |\srefaddidkey[|\meta{keyval}|]{|\meta{group}|}| extends the metadata keys of the -% group \meta{group} with an |id| key. In the optional key/value pairs in \meta{keyval} -% the |prefix| key can be used to specify a prefix. Note that the |id| key defined by -% |\srefaddidkey[|\meta{keyval}|]{|\meta{group}|}| not only defines |\sref@id|, which is -% used for referencing by the |sref| package, but also |\|\meta{group}|@id|, which is -% used for showing metadata via the |showmeta| option of the |metakeys| package. -% \begin{macrocode} -\addmetakey{srefaddidkey}{prefix} -\newcommand\srefaddidkey[2][]{\metasetkeys{srefaddidkey}{#1}% -\@metakeys@ext@clear@keys{#2}{sref@id}{}% id cannot have a default -\metakeys@ext@clear@keys{#2}{id}{}% -\metakeys@ext@showkeys{#2}{id}% -\define@key{#2}{id}{\edef\sref@id{\srefaddidkey@prefix ##1}% -\expandafter\edef\csname #2@id\endcsname{\srefaddidkey@prefix ##1}}} -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Inter-Document Crossreferencing}\label{sec:impl:interdoc} -% -% \begin{macro}{\makeextrefs} -% \begin{macrocode} -%<*package> -\def\makeextrefs#1{\gdef\sref@part{#1}% -\makeatletter -\IfFileExists{\jobname.refs}{\input{\jobname.refs}}{}% -\immediate\openout\refs@file=\jobname.refs -\makeatother} -% -%DefConstructor('\makeextrefs{}',''); -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sref@label} -% The |\sref@label| macro writes a label definition to the auxfile. -% \begin{macrocode} -%<*package> -\def\sref@label#1#2{% -\sref@def{\@ifundefined{sref@part}{}{\sref@part @}#2}{page}{\thepage}% -\sref@def{\@ifundefined{sref@part}{}{\sref@part @}#2}{label}{#1}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sref@label@id} -% The |\sref@label@id| writes a label definition for the current |\sref@id| if it is -% defined. -% \begin{macrocode} -%<*package> -\def\sref@label@id#1{\ifx\sref@id\@empty\else\sref@label{#1}{\sref@id}\fi} -% -% \end{macrocode} -% \end{macro} -% -% Finally we come to the user visible macro |\sref| which is used for -% referencing.\ednote{The {\latexml} does not take into account the optional argument -% yet.} -% -% \begin{macro}{\sref@hlink} -% The next macro creates an error message if the target is not defined, and otherwise -% generates a hyperlinked reference. -% \begin{macrocode} -%<*package> -\newcommand{\sref@hlink}[2][]{\def\@test{#1}% -\@ifundefined{sref@#2@label}% -{\protect\G@refundefinedtrue\@latex@warning{reference #2 undefined}??}% -{\sref@hlink@ifh{sref@#2@target}{\ifx\@test\@empty\@nameuse{sref@#2@label}\else #1\fi}}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sref@page@label} -% This macro styles a page reference. -% \begin{macrocode} -%<*package> -\newcommand{\sref@page@label}[1]{p.~{#1}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sref@pageref} -% The next macro creates an error message if the target is not defined, and otherwise -% generates a page reference. -% \begin{macrocode} -%<*package> -\newcommand{\sref@pageref}[1]{\@ifundefined{sref@#1@page}% -{\protect\G@refundefinedtrue\@latex@warning{reference #1 undefined}\sref@page@label{??}}% -{\sref@hlink@ifh{sref@#1@target}{\sref@page@label{\@nameuse{sref@#1@page}}}}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\sref@href} -% The next macro creates an error message if the target is not defined, and otherwise -% generates a hyperlinked reference. -% \begin{macrocode} -%<*package> -\newcommand{\sref@href}[3][]{\def\@test{#1}% -\@ifundefined{sref@#2@label}% -{\protect\G@refundefinedtrue\@latex@warning{reference #2 undefined}??}% -{\@ifundefined{sref@#3@URI}% -{\protect\G@refundefinedtrue\@latex@warning{external refs of type #3 undefined}??}% -{\edef\@uri{\@nameuse{sref@#3@URI}.pdf\#sref@#2@target} -\edef\@label{\ifx\@test\@empty\@nameuse{sref@#2@label}\else #1\fi} -\sref@href@ifh\@uri\@label}}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extref} -% The next macros use |\sref@hlink| with the respective prefix for external referencing -% if external references are used as indicated by the |extrefs| option; otherwise it -% disregards the first required macro and uses internal referencing.\ednote{This needs -% to be implemented on the LaTeXML side.} -% \begin{macrocode} -%<*package> -\ifextrefs -\newcommand{\extref}[3][]{\def\theextref{\sref@href[#1]{#2@#3}{#2}}% -\csname doextref@#2\endcsname} -\else -\newcommand{\extref}[3][]{\sref[#1]{#3}} -\fi -% -%<*ltxml> -DefConstructor('\extref[]{}{}', - ""); -DefConstructor('\theextref',''); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extrefstyle} -% This user macro defines an internal macro that is used for internal styling; for -% instance |\extrefstyle{foo}{\theextref in bar}| defines the macro |\doextref@foo| -% which evaluates to \meta{the reference} |in bar|. This is used in the |\extref| macro. -% \begin{macrocode} -%<*package> -\def\extrefstyle#1#2{\expandafter\gdef\csname doextref@#1\endcsname{#2}} -% -%<*ltxml> -DefConstructor('\extrefstyle{}{}',""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\inputrefs} -% If the external references file exists, it is read (under the protection of -% |\makeatother|) otherwise an error message is displayed. -% \begin{macrocode} -%<*package> -\newcommand{\inputrefs}[2]{% -\@namedef{sref@#1@URI}{#2} -\makeatletter% -\IfFileExists{#2.refs}{\input{#2.refs}} - {\PackageError{sref}{Reference file #1.refs does not exist} - {Maybe you have to run LaTeX on #2.tex first}} -\makeatother} -% -%<*ltxml> -DefConstructor('\inputrefs{}{}',''); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Semantic Versions of Commonly used Referencing Commands}\label{sec:impl:common} -% -% \begin{environment}{sequation} -% \begin{macrocode} -%<*package> -\srefaddidkey{sequation} -\def\sref@sequation@heading{equation} -\newenvironment{sequation}[1][]{\metasetkeys{sequation}{#1}% -\ifx\sref@id\@empty\begin{displaymath}\else% no id, using equation* -\begin{equation}\sref@target\sref@label@id{\sref@sequation@heading~(\theequation)}\fi} -{\ifx\sref@id\@empty\end{displaymath}\else\end{equation}\fi} -% -%<*ltxml> -DefEnvironment('{sequation} OptionalKeyVals', - "" - . "" - . "#body" - . "" - . "", - mode=>'display_math', - properties=> sub { RefStepCounter('equation') }, - locked=>1); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{seqnarray} -% \begin{macrocode} -%<*package> -\newenvironment{seqnarray}[1][]% -{\metasetkeys{sequation}{#1}\begin{eqnarray*}\sref@target% -\sref@label@id{\sref@sequation@heading~(\theequation)}} -{\end{eqnarray*}} -% -%<*ltxml> -DefMacro('\seqnarray OptionalKeyVals','\begin{eqnarray*}'); -DefMacro('\endseqnarray','\end{eqnarray*}'); -% -% \end{macrocode} -% \end{environment} -% -% -% \subsection{Finale}\label{sec:common} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% \Finale -\endinput - -% \iffalse -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi - -% LocalWords: GPL structuresharing STR omdoc dtx stex CPERL LoadClass url dc -% LocalWords: RequirePackage RegisterNamespace namespace xsl DocType ltxml dtd -% LocalWords: ltx DefEnvironment beforeDigest AssignValue inPreamble getGullet -% LocalWords: afterDigest keyval omgroup DefKeyVal Semiverbatim KeyVal iffalse -% LocalWords: OptionalKeyVals DefParameterType IfBeginFollows skipSpaces CMP -% LocalWords: ifNext DefMacro needwrapper unlist DefConstructor omtext bgroup -% LocalWords: useCMPItemizations RefStepItemCounter egroup beginItemize li di -% LocalWords: beforeDigestEnd useTheoryItemizations dt autoclose ul ol dl env -% LocalWords: afterOpen LastSeenCMP autoClose proto ToString textsuperscript -% LocalWords: addAttribute nlex nlcex omdocColorMacro args tok MergeFont qw -% LocalWords: TokenizeInternal toString isMath foreach maybeCloseElement id'd -% LocalWords: autoOpen minipage footnotesize scriptsize numberIt whatsit href -% LocalWords: getAttribute setAttribute OMDoc RelaxNGSchema noindex xml lec -% LocalWords: Subsubsection useDefaultItemizations refundefinedtrue blockquote -% LocalWords: DefCMPConstructor inlinequote idx idt ide idp emph sref extrefs -% LocalWords: flushleft flushright DeclareOption hyperref LaTeX tex pdf hlink -% LocalWords: sequation omd def texorpdfstring raisebox latexml texttt newpage -% LocalWords: fileversion maketitle tableofcontents autoref hpyerref mysection -% LocalWords: exfig vspacesrefaddidkey srefaddidkey scr -% LocalWords: makeextrefs inputrefs extref foo -% LocalWords: extrefstyle theextref theextref displaymath hrule impl ednote -% LocalWords: printbibliography newif ifextrefs extrefsfalse extrefstrue srefs -% LocalWords: Crossreferencing newcommand ifundefined ifx srefl xref ifh gdef -% LocalWords: ifhref hreffalse ifpackageloaded hreftrue expandafter jobname -% LocalWords: jobname csname endcsname newwrite auxout makeatletter openout -% LocalWords: makeatother auxfile nameuse doextref namedef newenvironment -% LocalWords: theequation refnum refnum seqnarray eqnarray endseqnarray doctex -% LocalWords: textsuperscript spageref spageref thepage pageref ctancite -% LocalWords: cross-referencable showmeta showmeta metakeys metasetkeys textsf -% LocalWords: addmetakey referencable langle textsf langle diff --git a/Master/texmf-dist/source/latex/stex/statements/statements.dtx b/Master/texmf-dist/source/latex/stex/statements/statements.dtx deleted file mode 100644 index 062ee52c0a9..00000000000 --- a/Master/texmf-dist/source/latex/stex/statements/statements.dtx +++ /dev/null @@ -1,1376 +0,0 @@ -% \iffalse meta-comment -% An Infrastructure for Mathematical Statements in sTeX -% Copyright (C) 2004-2008 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/statements/statements.dtx $ -% \fi -% -% \iffalse -%\NeedsTeXFormat{LaTeX2e}[1999/12/01] -%\ProvidesPackage{statements}[2010/06/25 v1.0 Semantic Markup for Statements] -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{url,array,float,amsfonts} -\usepackage{statements,modules,presentation} -\usepackage{paralist} -\usepackage[show]{ed} -\usepackage[hyperref=auto,style=alphabetic]{biblatex} -\bibliography{kwarc} -\usepackage[eso-foot,today]{svninfo} -\usepackage{stex-logo} -\usepackage{../ctansvn} -\usepackage{hyperref} -\svnInfo $Id: statements.dtx 1671 2010-11-06 07:05:15Z kohlhase $ -\svnKeyword $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/statements/statements.dtx $ -\makeindex -\floatstyle{boxed} -\newfloat{exfig}{thp}{lop} -\floatname{exfig}{Example} -\def\tracissue#1{\cite{sTeX:online}, \hyperlink{http://trac.kwarc.info/sTeX/ticket/#1}{issue #1}} -\begin{document}\DocInput{statements.dtx}\end{document} -% -% \fi -% -% \iffalse\CheckSum{433}\fi -% -% \changes{v0.9}{2005/06/14}{First Version with Documentation} -% \changes{v0.9a}{2005/07/01}{Completed Documentation} -% \changes{v0.9b}{2005/08/06}{Complete functionality and Updated Documentation} -% \changes{v0.9c}{2006/01/13}{more packaging} -% \changes{v0.9d}{2007/09/09}{moved omtext and friends to the omdoc package} -% \changes{v0.9d}{2007/09/09}{made dependence on the omdoc package explicit} -% \changes{v0.9d}{2007/09/09}{adding ids to many elements} -% \changes{v0.9e}{2008/05/27}{adding cross-references} -% \changes{v0.9e}{2008/09/29}{augmenting the index macros with optional values} -% \changes{v0.9f}{2008/12/04}{changed 'consymb' to 'symboldec' and documented it.} -% \changes{v0.9g}{2010/01/14}{the package is now based on {\texttt{ntheorem for presentation}}} -% \changes{v0.9g}{2010/01/19}{Added support for localization} -% \changes{v0.9g}{2010/02/23}{added {\texttt{\textbackslash symref}}} -% \changes{v1.0}{2010/06/18}{now based on {\texttt{omtext}} package instead of {\texttt{omdoc}}} -% \changes{v1.0}{2010/07/13}{adding {\texttt{\textbackslash inlineex}}} -% -% \GetFileInfo{statements.sty} -% -% \MakeShortVerb{\|} -% \def\scsys#1{{{\sc #1}}\index{#1@{\sc #1}}} -% \def\xml{\scsys{Xml}} -% \def\mathml{\scsys{MathML}} -% \def\omdoc{\scsys{OMDoc}} -% \def\openmath{\scsys{OpenMath}} -% \def\latexml{\scsys{LaTeXML}} -% \def\perl{\scsys{Perl}} -% \def\activemath{\scsys{ActiveMath}} -% \title{Semantic Markup for Mathematical Statements\thanks{Version {\fileversion} (last revised -% {\filedate})}} -% \author{Michael Kohlhase\\ -% Jacobs University, Bremen\\ -% \url{http://kwarc.info/kohlhase}} -% \maketitle -% -% \begin{abstract} -% The |statements| package is part of the {\stex} collection, a version of {\TeX/\LaTeX} -% that allows to markup {\TeX/\LaTeX} documents semantically without leaving the -% document format, essentially turning {\TeX/\LaTeX} into a document format for -% mathematical knowledge management (MKM). -% -% This package provides semantic markup facilities for mathematical statements like -% Theorems, Lemmata, Axioms, Definitions, etc. in {\stex} files. This structure can be -% used by MKM systems for added-value services, either directly from the {\sTeX} -% sources, or after translation. -% \end{abstract} -% -% \setcounter{tocdepth}{2}\tableofcontents\newpage -% -% \section{Introduction}\label{sec:statements} -% -% The motivation for the |statements| package is very similar to that for semantic macros -% in the |modules| package: We want to annotate the structural semantic properties of -% statements in the source, but present them as usual in the formatted documents. In -% contrast to the case for mathematical objects, the repertoire of mathematical statements -% and their structure is more or less fixed. -% -% This structure can be used by MKM systems for added-value services, either directly from -% the {\sTeX} sources, or after translation. Even though it is part of the {\stex} -% collection, it can be used independently, like it's sister package |sproofs|. -% -% {\stex}~\cite{Kohlhase:ulsmf08,sTeX:online} is a version of {\TeX/\LaTeX} that allows -% to markup {\TeX/\LaTeX} documents semantically without leaving the document format, -% essentially turning {\TeX/\LaTeX} into a document format for mathematical knowledge -% management (MKM). Currently the {\omdoc} format~\cite{Kohlhase:omdoc1.2} is directly -% supported. -% -% \section{The User Interface}\label{sec:user-interface} -% -% The |statements| package supplies a semantically oriented infrastructure for marking up -% mathematical statements: fragments of natural language that state properties of -% mathematical objects, e.g. axioms, definitions, or theorems. The |statement| package -% provides an infrastructure for marking up the semantic relations between statements for -% the {\omdoc} transformation and uses the |ntheorem| package~\cite{MaySch:eltte09} for -% formatting (i.e. transformation to PDF). -% -% \subsection{Package Options}\label{sec:user:options} -% -% The |statements| package takes a single option: \DescribeMacro{showmeta}|showmeta|. If -% this is set, then the metadata keys are shown (see~\cite{Kohlhase:metakeys:ctan} for details -% and customization options). -% -% \subsection{Statements}\label{sec:statements} -% -% All the statements are marked up as environments, that take a |KeyVal| argument that -% allows to annotate semantic information. Generally, we distinguish two forms of -% statements: -% \begin{description} -% \item[{\twintoo{block}{statement}s}] have explicit discourse markers that delimit their -% content in the surrounding text, e.g. the boldface word ``{\bf{Theorem}:}'' as a start -% marker and a little line-end box as an end marker of a proof. -% \item[{\twintoo{flow}{statement}s}] do not have explicit markers, they are interspersed -% with the surrounding text. -% \end{description} -% Since they have the same semantic status, they must both be marked up, but styled -% differently. We distinguis between these two presentational forms with the -% \DescribeMacro{display=}|display| key, which is allowed on all statement -% environments. If it has the value |block| (the default), then the statement will be -% presented in a paragraph of its own, have explicit discourse markers for its begin and -% end, possibly numbering, etc. If it has the value |flow|, then no extra presentation -% will be added the semantic information is invisible to the reader. Another key that is -% present on all statement environments in the \DescribeMacro{id=}|id| key it allows to -% identify the statement with a name and to reference it with the semantic referencing -% infrastructure provided by the |sref| package~\ctancite{Kohlhase:sref}. -% -% \subsubsection{Axioms and Assertions}\label{sec:user:axiomassertion} -% -% The \DescribeEnv{assertion}|assertion| environment is used for marking up statements -% that can be justified from previously existing knowledge (usually marked with the -% monikers ``Theorem'', ``Lemma'', ``Proposition'', etc. in mathematical vernacular). The -% environment |assertion| is used for all of them, and the particular subtype of -% assertion is given in the \DescribeMacro{type=}|type| key. So instead of -% |\begin{Lemma}|\iffalse\end{Lemma}\fi we have to write -% |\begin{assertion}[type=lemma]|\iffalse\end{assertion}\fi (see -% Example~\ref{fig:assertion} for an example). -% \begin{exfig} -% \begin{verbatim} -% \begin{assertion}[id=sum-over-odds,type=lemma] -% $\sum_{i=1}^n{2i-1}=n^2$ -% \end{assertion} -% \end{verbatim} -% \vspace{-1em}will lead to the result\vspace{-2em}\par\noindent -% \begin{assertion}[id=sum-over-odds,type=lemma] -% $\sum_{i=1}^n{2i-1}=n^2$ -% \end{assertion} -% \caption{Semantic Markup for a Lemma in a {\texttt{module}} context}\label{fig:assertion} -% \end{exfig} -% -% Whether we will see the keyword ``Lemma'' will depend on the value of the optional -% |display| key. In all of the |assertion| environments, the presentation expectation is -% that the text will be presented in italic font. The presentation (keywords, spacing, and -% numbering) of the |assertion| environment is delegated to a theorem styles from the -% |ntheorem| environment. For an assertion of type \meta{type} the |assertion| environment -% calls the |ST|\meta{type}|AssEnv| environment provided by the |statements| package; see -% Figure~\ref{fig:assertion-types} for a list of provided assertion types. Their -% formatting can be customized by redefining the |ST|\meta{type}|AssEnv| environment via -% the |\renewtheorem| command from the |ntheorem| package; see~\cite{MaySch:eltte09} for -% details. -% -% \begin{exfig} -% \begin{tabular}{|l|l|}\hline -% Value & Explanation \\\hline\hline -% \textbf{theorem}, \textbf{proposition} -% & an important assertion with a proof\\\hline -% \multicolumn{2}{|p{12cm}|}{\footnotesize Note that the meaning of \textbf{theorem} -% (in this case the existence of a proof) is not -% enforced by {\omdoc} applications. It can be appropriate to give an assertion -% the \textbf{theorem}, if the -% author knows of a proof (e.g. in the literature), but has not formalized it in -% {\omdoc} yet.}\\\hline\hline -% \textbf{lemma} & a less important assertion with a proof\\\hline -% \multicolumn{2}{|p{12cm}|}{\footnotesize The difference of importance specified -% here is even softer than the other ones, since e.g. reusing -% a mathematical paper as a chapter in a larger monograph, may make it necessary to -% downgrade a theorem (e.g. the main theorem of the paper) and give it the status of -% a lemma in the overall work.}\\\hline\hline -% \textbf{corollary} & a simple consequence\\\hline -% \multicolumn{2}{|p{12cm}|}{\footnotesize An assertion is -% sometimes marked as a corollary to some other statement, if the proof is -% considered simple. This is often the case for important theorems that are simple -% to get from technical lemmata.}\\\hline\hline -% \textbf{postulate}, \textbf{conjecture} -% & an assertion without proof or counter-exam\-ple\\\hline -% \multicolumn{2}{|p{12cm}|}{\footnotesize Conjectures are assertions, whose -% semantic value is not yet decided, but which the author considers likely to be -% true. In particular, there is no proof or counter-example.}\\\hline\hline -% \textbf{false-conjecture} -% & an assertion with a counter-example\\\hline -% \multicolumn{2}{|p{12cm}|}{\footnotesize A conjecture that has proven to be false, -% i.e. it has a counter-example. Such assertions are often kept for illustration and -% historical purposes.}\\\hline\hline -% \textbf{obligation}, \textbf{assumption} -% & an assertion on which a proof of another depends\\\hline -% \multicolumn{2}{|p{12cm}|}{\footnotesize These kinds of assertions -% are convenient during the exploration of a mathematical theory. They can be used -% and proven later (or assumed as an axiom).}\\\hline\hline -% \textbf{observation} & if everything else fails\\\hline -% \multicolumn{2}{|p{12cm}|}{\footnotesize This type is the catch-all if none of the others -% applies.}\\\hline -% \end{tabular} -% \caption{Types of Mathematical Assertions}\label{fig:assertion-types} -% \end{exfig} -% -% \DescribeEnv{axiom} The |axiom| environment is similar to |assertion|, but the content -% has a different ontological status: axioms are assumed without (formal) justification, -% whereas assertions are expected to be justified from other assertions, axioms or -% definitions. This environment relegates the formatting to the |STaxiomEnv| environment, -% which can be redefined for configuration. -% -% \subsubsection{Symbols}\label{sec:user:symbol} -% -% \DescribeEnv{symboldec} The |symboldec| environment can be used for declaring concepts -% and symbols. Note the the |symdef| forms from the |modules| package will not do this -% automatically (but the |definition| environment and the |\inlinedef| macro will for all -% the definienda; see below). The |symboldec| environment takes an optional keywords -% argument with the keys |id|, |role|, |title| and |name|. The first is for general -% identification, the |role| specifies the {\openmath}/{\omdoc} role, which is one of -% |object|, |type|, |sort|, |binder|, |attribution|, |application|, |constant|, -% |semantic-attribution|, and |error| (see the {\omdoc} specification for details). The -% |name| key specifies the {\openmath} name of the symbol, it should coincide with the -% control sequence introduced by the corresponding |\symdef| (if one is present). The -% |title| key is for presenting the title of this symbol as in other statements. Usually, -% |axiom| and |symboldec| environments are used together as in Figure~\ref{fig:axioms}. -% -%\begin{exfig} -% \begin{verbatim} -% \symdef{zero}{0} -% \begin{symboldec}[name=zero,title=The number zero,type=constant] -% The number zero, it is used as the base case of the inductive definition -% of natural numbers via the Peano Axioms. -% \end{symboldec} -% -% \symdef{succ}[1]{\prefix{s}{#1}} -% \begin{symboldec}[name=succ,title=The Successor Function,type=application] -% The successor function, it is used for the step case of the inductive -% definition of natural numbers via the Peano Axioms. -% \end{symboldec} -% -% \symdef{NaturalNumbers}{\mathbb{N}} -% \begin{symboldec}[name=succ,title=The Natural Numbers,type=constant] -% The natural numbers inductively defined via the Peano Axioms. -% \end{symboldec} -% -% \begin{axiom}[id=peano.P1,title=P1] -% $\zero$ is a natural number. -% \end{axiom} -% ... -% \begin{axiom}[id=peano.P5,title=P5] -% Any property $P$ such $P(\zero)$ and $P(\succ{k})$ whenever $P(k)$ -% holds for all $n$ in $\NaturalNumbers$ -% \end{axiom} -% \end{verbatim} -% \vspace{-1em}will lead to the result\medskip\par\noindent -% \begin{module}[id=peano] -% \symdef{zero}{0} -% \begin{symboldec}[name=zero,title=The number zero,role=constant] -% The number zero, it is used as the base case of the inductive definition -% of natural numbers via the Peano Axioms. -% \end{symboldec} -% -% \symdef{succ}[1]{\prefix{s}{#1}} -% \begin{symboldec}[name=succ,title=The Successor Function,role=application] -% The successor function, it is used for the step case of the inductive -% definition of natural numbers via the Peano Axioms. -% \end{symboldec} -% -% \symdef{NaturalNumbers}{\mathbb{N}} -% \begin{symboldec}[name=succ,title=The Natural Numbers,role=constant] -% The natural numbers inductively defined via the Peano Axioms. -% \end{symboldec} -% -% \begin{axiom}[id=peano.P1,title=P1] -% $\zero$ is a natural number. -% \end{axiom} -% \ldots \stepcounter{STtheoremAssEnv}\stepcounter{STtheoremAssEnv}\stepcounter{STtheoremAssEnv} -% \begin{axiom}[id=peano.P5,title=P5] -% Any property $P$ such $P(\zero)$ and $P(\succ{k})$ whenever $P(k)$ -% holds for all $n$ in $\NaturalNumbers$ -% \end{axiom} -% \end{module} -% \caption{Semantic Markup for the Peano Axioms}\label{fig:axioms} -% \end{exfig} -% -% \subsubsection{Definitions}\label{sec:definition} -% -% \DescribeEnv{definition} The |definition| environment is used for marking up -% mathematical definitions. Its peculiarity is that it defines (i.e. gives a meaning to) -% new mathematical concepts or objects. These\DescribeMacro{\definiendum} are identified -% by the |\definiendum| macro, which is used as -% |\definiendum[|\meta{sysname}|]{|\meta{text}|}|. Here, \meta{text} is the text that is -% to be emphasized in the presentation and the optional \meta{sysname} is a system name of -% the symbol defined (for reference via |\term|, see Section~\ref{sec:user:crossref}). If -% \meta{sysname} is not given, then \meta{text} is used as a system name instead, which is -% usually sufficient for most situations. -% -%\begin{exfig} -% \begin{verbatim} -% \symdef{one}{1} -% \begin{definition}[id=one.def,for=one] -% $\notatiendum[one]{\one}$ is the successor of $\zero$ -% (formally: $\one\colon=\succ\zero$) -% \end{definition} -% \end{verbatim} -% \vspace{-1em}will lead to the result\medskip\par\noindent -% \begin{module} -% \importmodule{peano} -% \symdef{one}{1} -% \begin{definition}[id=one.def,for=one] -% $\notatiendum[one]{\one}$ is the successor of $\zero$ -% (formally: $\one\colon=\succ\zero$) -% \end{definition} -% \end{module} -% \caption{A Definition based on Figure {\ref{fig:axioms}}}\label{fig:definition} -% \end{exfig} -% The \DescribeMacro{defin}|\defin{|\meta{word}|}| macro combines the functionality of the -% |\definiendum| macro with index markup from the |omdoc| -% package~\ctancite{Kohlhase:smomdl}: use |\defin[|\meta{name}|]{|\meta{word}|}| to -% markup a definiendum \meta{word} with system name \meta{name} that appear in the index -% --- in other words in almost all definitions of single-word concepts. We also have the -% variants \DescribeMacro{\twindef}|\twindef| and \DescribeMacro{\atwindef}|\atwindef| for -% (adjectivized) two-word compounds. Finally, the varaiants -% \DescribeMacro{\twindefalt}|\twindefalt| and \DescribeMacro{\atwindefalt}|\atwindefalt| -% have an additional first argument that allows to specify an alternative text; see -% Figure~\ref{fig:defin} -% -% \begin{exfig} -% \begin{tabular}{l|l|l} -% \multicolumn{3}{l}{source}\\ -% system name & result & index \\\hline -% \multicolumn{3}{l}{\texttt{\textbackslash defin\{concept\}}}\\ -% |concept| & concept& concept\\\hline -% \multicolumn{3}{l}{\texttt{\textbackslash defin[csymbol]\{concept\}}}\\ -% |csymbol| & concept & concept\\\hline -% \multicolumn{3}{l}{\texttt{\textbackslash definalt[csymbol]\{concepts\}\{concept\}}}\\ -% |csymbol| & concepts & concept\\\hline -% \multicolumn{3}{l}{\texttt{\textbackslash twindef\{concept\}\{group\}}}\\ -% |concept-group| & concept group & concept group, \\ -% && group - , concept\\\hline -% \multicolumn{3}{l}{\texttt{\textbackslash atwindef\{small\}\{concept\}\{group\}}}\\ -% |small-concept-group| & small concept group & small concept group, \\ -% && concept group - , small\\ -% \end{tabular} -% \caption{Some definienda with Index}\label{fig:defin} -% \end{exfig} -% -% Note that the |\definiendum|, |\defin|, |\twindef|, and |\atwindef| macros can only be -% used inside the definitional situation, i.e. in a |definition| or |symboldec| -% environment or a |\inlinedef| macro. If you find yourself in a situation where you want -% to use it outside, you will most likely want to wrap the appropriate text fragment in a -% |\begin{definition}[display=flow]| ... and |\end{definition}|. For instance, we could -% continue the example in Figure~\ref{fig:axioms} with the |definition| environment in -% Figure~\ref{fig:definition}. -% -% \DescribeMacro{\inlinedef} Sometimes we define mathematical concepts in passing, e.g. in -% a phrase like ``\ldots $s(o)$ which we call {\textbf{one}}.''. For this we cannot use -% the |definition| environment, which presupposes that its content gives all that is -% needed to understand the definition. But we do want to make use of the infrastructure -% introduced for the |definition| environment. In this situation, we just wrap the phrase -% in an |\inlinedef| macro that makes them available. The |\inlinedef| macro accepts the -% same |id| and |for| keys in its optional argument, and additionally the |verbalizes| key -% which can be used to point to a full definition of the concept somewhere else. -% -% Note that definienda can only be referenced via a |\term| element, if they are only -% allowed inside a named module, i.e. a |module| environment with a name given by the -% |id=| key or the |theory=| key on is specified on the definitional environment. -% -% \subsubsection{Examples}\label{sec:user:example} -% -% \DescribeEnv{example} The |example| environment is a generic statement environment, -% except that the |for| key should be given to specify the identifier what this is an -% example for. The |example| environment also expects a |type| key to be specified, so -% that we know whether this is an example or a counterexample. -% -% \DescribeMacro{\inlineex} The |\inlineex| is analogous to |\inlinedef|, only that it is -% used for inline examples, e.g. ``\ldots mammals, e.g. goats''. Note that we have used an -% inline example for an inline example. -% -% \subsection{Cross-Referencing Symbols and Concepts}\label{sec:user:crossref} -% -% If we have defined a concept with the |\definiendum| macro, then we can mark up other -% occurrences of the term as referring to this concept. Note that this process cannot be -% fully automatized yet, since that would need advanced language technology to get around -% problems of disambiguation, inflection, and non-contiguous phrases\footnote{We do have a -% program that helps annotate larger text collections spotting the easy cases; see -% {\url{http://kwarc.info/projects/stex}} and look for the program -% |termin|.}. Therefore, the \DescribeMacro{\termref}|\termref| can be used to make this -% information explicit. It takes the keys -% \begin{compactdesc} -% \item[\texttt{cdbase}] to specify a URI (a path actually, since {\LaTeX} cannot load -% from URIs) where the module can be found. -% \item[\texttt{cd}] to specify the module in which the term is defined. If the |cd| key -% is not given, then the current module is assumed. If no |cdbase| is specified (this is -% the usual case), then the CD has to be imported via a |\importmodule| from the -% |modules| package~\ctancite{KohAmb:smmssl}. -% \item[\texttt{name}] to specify the name of the definiendum (which is given in the body -% of the |\definiendum| or the optional argument). If the |name| key is not specified, -% then argument of the |\termref| macro is used. -% \item[\texttt{role}] is currently unused. -% \end{compactdesc} -% |\termref[cd=|\meta{cd}|,name=|\meta{name}|]{|\meta{text}|}| will just typeset -% \meta{text} with (if the |hyperref| package is loaded) a hyperlink to the definition in -% module \meta{cd} that defines the concept \meta{name}, i.e. that contains -% |\definiendum[|\meta{name}|]{|\meta{something}|}|. -% -% Just as the |\definiendum| macro has the variants |\twindef| and |\atwindef| for -% composita, the |\termref| has variants |\twinref| and |\atwinref| that take two and -% three arguments for the parts of the compositum. Generally, concepts that are marked up -% by |\definiendum{|\meta{name}|}| or |\defin|{|\meta{name}|} in the definition are -% referenced by |\termref|{|\meta{name}|}, concepts defined via -% |\twindef{|\meta{first}|}{|\meta{second}|}| with -% |\twinref{|\meta{first}|}{|\meta{second}|}| and analogously for |\atwindef| and -% |\atwinref|. -% -% Note that the |\termref| treatment above is natural for ``concepts'' declared by the -% |\termdef| macro from the |modules| package~\ctancite{KohAmb:smmssl}. Concepts are -% natural language names for mathematical objects. For ``symbols'', i.e. symbolic -% identifiers for mathematical objects used in mathematical formulae, we use the |\symdef| -% macro from the |modules| package. Sometimes, symbols also have an associated natural -% language concept, and we want to use the symbol name to reference it (instead of -% specifying |cd| and |name| which is more inconvenient). For this the |statements| -% package supplies the \DescribeMacro{\symref}|\symref| macro. Like |\termref|, and -% invocation of |\symref{|\meta{cseq}|}{|\meta{text}|}| will just typeset \meta{text} with -% a hyperlink to the relevant definition (i.e. the one that has the declaration -% |for=|\meta{cseq} in the metadata argument.) -% -% \section{Configuration of the Presentation}\label{sec:conf} -% -% \DescribeMacro{\defemph} The |\defemph| macro is a configuration hook that allows to -% specify the style of presentation of the {\index*{definiendum}}. By default, it is set to -% |\bf| as a fallback, since we can be sure that this is always available. It can be -% customized by redefinition: For instance |\renewcommand{\defemph}[1]{\emph{#1}}|, -% changes the default behavior to italics. -% -% \DescribeMacro{\termemph} The |\termenph| macro does the same for the style for -% |\termin|, it is empty by default. Note the term might carry an implicit hyper-reference -% to the defining occurrence and that the presentation engine might mark this up, changing -% this behavior. -% -% \DescribeMacro{\stDMemph} The |\stDMemph| macro does the same for the style for the -% markup of the discourse markers like ``Theorem''. If it is not defined, it is set to -% |\bf|; that allows to preset this in the class file. \ednote{function declarations} -% -% Some authors like to lowercase the semantic references, i.e. use ``axiom 2.6'' instead -% of the default ``\sref{peano.P5}'' to refer to the last axiom in -% Figure~\ref{fig:axioms}. This can be achieved by redefining the -% \DescribeMacro{\STpresent}|\STpresent| macro, which is applied to the keyword of the -% |ST*Env| theorem environments.\ednote{this does not quite work as yet, since -% \textbf{STpresent} is applied when the label is written. But we would really like to -% have it applied when the reference is constructed. But for that we need to split the -% label into keyword and number in package |sref|.} -% -% Finally, we provide configuration hooks in Figure~\ref{fig:hooks} for the statement -% types provided by the |statement| package. These are mainly intended for package authors -% building on |statements|, e.g. for multi-language support.\ednote{we might want to -% develop an extension \texttt{statements-babel} in the future.}. -%\begin{exfig} -% \begin{tabular}{lll} -% Environment & configuration macro & value\\\hline\hline -% \texttt{STtheoremAssEnv} & \texttt{\textbackslash st@theorem@kw} & \makeatletter\st@theorem@kw\\\hline -% \texttt{STlemmaAssEnv} & \texttt{\textbackslash st@lemma@kw} & \makeatletter\st@lemma@kw \\\hline -% \texttt{STpropositionAssEnv} & \texttt{\textbackslash st@proposition@kw} & \makeatletter\st@proposition@kw \\\hline -% \texttt{STcorollaryAssEnv} & \texttt{\textbackslash st@corollary@kw} & \makeatletter\st@corollary@kw\\\hline -% \texttt{STconjectureAssEnv} & \texttt{\textbackslash st@conjecture@kw} & \makeatletter\st@conjecture@kw\\\hline -% \texttt{STfalseconjectureAssEnv} & \texttt{\textbackslash st@falseconjecture@kw} & \makeatletter\st@falseconjecture@kw\\\hline -% \texttt{STpostulateAssEnv} & \texttt{\textbackslash st@postulate@kw} & \makeatletter\st@postulate@kw\\\hline -% \texttt{STobligationAssEnv} & \texttt{\textbackslash st@obligation@kw} & \makeatletter\st@obligation@kw\\\hline -% \texttt{STassumptionAssEnv} & \texttt{\textbackslash st@assumption@kw} & \makeatletter\st@assumption@kw\\\hline -% \texttt{STobservationAssEnv} & \texttt{\textbackslash st@observation@kw} & \makeatletter\st@observation@kw\\\hline -% \texttt{STexampleEnv} & \texttt{\textbackslash st@example@kw} & \makeatletter\st@example@kw\\\hline -% \texttt{STaxiomEnv} & \texttt{\textbackslash st@axiom@kw} & \makeatletter\st@axiom@kw\\\hline -% \texttt{STdefinitionEnv} & \texttt{\textbackslash st@definition@kw} & \makeatletter\st@definition@kw\\\hline -% \texttt{STnotationEnv} & \texttt{\textbackslash st@notation@kw} & \makeatletter\st@notation@kw -% \end{tabular} -% \caption{Configuration Hooks for statement types}\label{fig:hooks} -% \end{exfig} -% -% \section{Limitations}\label{sec:limitations} -% -% In this section we document known limitations. If you want to help alleviate them, -% please feel free to contact the package author. Some of them are currently discussed in -% the \sTeX TRAC~\cite{sTeX:online}. -% \begin{compactenum} -% \item none reported yet -% \end{compactenum} -% -% \StopEventually{\newpage\PrintIndex\newpage\PrintChanges\printbibliography} -% -% \section{The Implementation}\label{sec:impl} -% -% The |statements| package generates two files: the {\LaTeX} package (all the code between -% {\textsf{$\langle$*package$\rangle$}} and {\textsf{$\langle$/package$\rangle$}}) and the -% {\latexml} bindings (between {\textsf{$\langle$*ltxml$\rangle$ and -% $\langle$/ltxml$\rangle$}}). We keep the corresponding code fragments together, -% since the documentation applies to both of them and to prevent them from getting out of -% sync. -% -% \subsection{Package Options}\label{sec:impl:options} -% -% We declare some switches which will modify the behavior according to the package -% options. Generally, an option |xxx| will just set the appropriate switches to true -% (otherwise they stay false). First we have the general options -% \begin{macrocode} -%<*package> -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{omdoc}} -% \end{macrocode} -% Finally, we need to declare the end of the option declaration section to {\LaTeX}. -% \begin{macrocode} -\ProcessOptions -% -% \end{macrocode} -% -% The next measure is to ensure that some {\sTeX} packages are loaded: |omdoc| for the -% statement keys, |modules| since we need module identifiers for referencing. Furthermore, -% we need the |ntheorem| package for presenting statements. For {\latexml}, we also -% initialize the package inclusions, there we do not need |ntheorem|, since the XML does -% not do the presentation. -% \begin{macrocode} -%<*package> -\RequirePackage{omtext} -\RequirePackage{modules} -\RequirePackage[hyperref]{ntheorem} -\theoremstyle{plain} -% -%<*ltxml> -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('omtext'); -RequirePackage('modules'); -% -% \end{macrocode} -% Now, we define an auxiliary function that lowercases strings -% \begin{macrocode} -%<*ltxml> -sub lowcase {my ($string) = @_; $string ? return lc(ToString($string)) : return('')}#$ -sub dashed { join('-',map($_->toString,@_));}#$ -% -% \end{macrocode} -% Sometimes it is necessary to fallback to symbol names in order to generate xml:id attributes. For this purpose, -% we define an auxiliary function which ensures the name receives a unique NCName equivalent.\ednote{Hard to be unique here, -% e.g. the names "foo\_bar" and "foo bar" would receive the same xml:id attributes... of course we can devise a more complex scheme -% for the symbol replacement.} -% \begin{macrocode} -%<*ltxml> -sub makeNCName { - my ($name) = @_; - my $ncname=$name; - $ncname=~s/\s/_/g; #Spaces to underscores - $ncname="_$ncname" if $ncname!~/^(\w|_)/; #Ensure start with letter or underscore - ##More to come... - $ncname; -} -% -% \end{macrocode} -% The following functions are strictly utility functions that makes our life easier later on -% \begin{macrocode} -%<*ltxml> -sub simple_wrapper { - #Deref if array reference - my @input; - foreach (@_) { - if (ref $_ && $_ =~ /ARRAY/ && $_ !~ /LaTeXML/) { - @input=(@input,@$_); - } else - { push (@input,$_); } - } - return '' if (!@input); - @input = map(split(/\s*,\s*/,ToString($_)),@input); - my $output=join(" ",@input); - $output=~s/(^ )|[{}]//g; #remove leading space and list separator brackets - $output||''; -} -sub hash_wrapper{ - #Deref if array reference - my @input; - foreach (@_) { - if (ref $_ && $_ =~ /ARRAY/ && $_ !~ /LaTeXML/) { - @input=(@input,@$_); - } else - { push (@input,$_); } - } - return '' if (!@input); - @input = map(split(/\s*,\s*/,ToString($_)),@input); - my $output=join(".sym #",@input); - $output=~s/(^\.sym )|[{}]//g; #remove leading space and list separator brackets - "#$output"||''; -} -% -% \end{macrocode} -% -% \subsection{Statements}\label{sec:impl:statements} -% -% \begin{macro}{\STpresent} -% \begin{macrocode} -%<*package> -\providecommand\STpresent[1]{#1} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\define@statement@env} -% We define a meta-macro that allows us to define several variants of statements. Upon -% beginning this environment, we first set the |KeyVal| attributes, then we decide -% whether to print the discourse marker based on the value of the |display| key, then -% (given the right Options were set), we show the semantic annotations, and finally -% initialize the environment using the appropriate macro. Upon ending the environment, -% we just run the respective termination macro. -% \begin{macrocode} -%<*package> -\def\define@statement@env#1{% -\newenvironment{#1}[1][]{\metasetkeys{omtext}{##1}\sref@target% -\ifx\omtext@display\st@flow\else% -\ifx\omtext@title\@empty\begin{ST#1Env}\else\begin{ST#1Env}[\omtext@title]\fi% -\ifx\sref@id\@empty\else\label{#1.\sref@id}\fi -\csname st@#1@initialize\endcsname\fi -\ifx\sref@id\@empty\sref@label@id{here}\else% -\sref@label@id{\STpresent{\csname ST#1EnvKeyword\endcsname}~\@currentlabel}\fi} -{\csname st@#1@terminate\endcsname\ifx\omtext@display\st@flow\else\end{ST#1Env}\fi}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{assertion} -% \begin{macrocode} -%<*package> -\newenvironment{assertion}[1][]{\metasetkeys{omtext}{#1}\sref@target% -\ifx\omtext@display\st@flow\else% -\ifx\omtext@title\@empty\begin{ST\omtext@type AssEnv}% -\else\begin{ST\omtext@type AssEnv}[\omtext@title]\fi\fi% -\ifx\omtext@type\@empty\sref@label@id{here}\else% -\sref@label@id{\STpresent{\csname ST\omtext@type AssEnvKeyword\endcsname}~\@currentlabel}\fi} -{\ifx\omtext@display\st@flow\else\end{ST\omtext@type AssEnv}\fi} -% -%<*ltxml> -DefCMPEnvironment('{assertion} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "#body" - ."\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\st@*@kw} -% We configure the default keywords for the various theorem environments. -% \begin{macrocode} -%<*package> -\def\st@theorem@kw{Theorem} -\def\st@lemma@kw{Lemma} -\def\st@proposition@kw{Proposition} -\def\st@corollary@kw{Corollary} -\def\st@conjecture@kw{Conjecture} -\def\st@falseconjecture@kw{Conjecture (false)} -\def\st@postulate@kw{Postulate} -\def\st@obligation@kw{Obligation} -\def\st@assumption@kw{Assumption} -\def\st@observation@kw{Observation} -% \end{macrocode} -% \end{macro} -% Then we configure the presentation of the theorem environments -% \begin{macrocode} -\theorembodyfont{\itshape} -\theoremheaderfont{\normalfont\bfseries} -% \end{macrocode} -% and then we finally define the theorem environments in terms of the statement keywords -% defined above. They are all numbered together with the section counter. -% \begin{environment}{ST*AssEnv} -% \begin{macrocode} -\newtheorem{STtheoremAssEnv}{\st@theorem@kw} -\newtheorem{STlemmaAssEnv}[STtheoremAssEnv]{\st@lemma@kw} -\newtheorem{STpropositionAssEnv}[STtheoremAssEnv]{\st@proposition@kw} -\newtheorem{STcorollaryAssEnv}[STtheoremAssEnv]{\st@corollary@kw} -\newtheorem{STconjectureAssEnv}[STtheoremAssEnv]{\st@conjecture@kw} -\newtheorem{STfalseconjectureAssEnv}[STtheoremAssEnv]{\st@falseconjecture@kw} -\newtheorem{STpostulateAssEnv}[STtheoremAssEnv]{\st@postulate@kw} -\newtheorem{STobligationAssEnv}[STtheoremAssEnv]{\st@obligation@kw} -\newtheorem{STassumptionAssEnv}[STtheoremAssEnv]{\st@assumption@kw} -\newtheorem{STobservationAssEnv}[STtheoremAssEnv]{\st@observation@kw} -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{example} -% \begin{macrocode} -%<*package> -\def\st@example@initialize{}\def\st@example@terminate{} -\define@statement@env{example} -\def\st@example@kw{Example} -\theorembodyfont{\upshape} -\newtheorem{STexampleEnv}[STtheoremAssEnv]{\st@example@kw} -% -%<*ltxml> -DefCMPEnvironment('{example} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "#body" - . "\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{axiom} -% \begin{macrocode} -%<*package> -\def\st@axiom@initialize{}\def\st@axiom@terminate{} -\define@statement@env{axiom} -\def\st@axiom@kw{Axiom} -\theorembodyfont{\upshape} -\newtheorem{STaxiomEnv}[STtheoremAssEnv]{\st@axiom@kw} -% -%<*ltxml> -DefCMPEnvironment('{axiom} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "#body" - . "\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{symboldec} -% \begin{macrocode} -%<*package> -\srefaddidkey{symboldec} -\addmetakey{symboldec}{functions} -\addmetakey{symboldec}{role} -\addmetakey*{symboldec}{title} -\addmetakey{symboldec}{name} -\addmetakey*{symboldec}{display} -\def\symboldec@type{Symbol} -\newenvironment{symboldec}[1][]{\metasetkeys{symboldec}{#1}\sref@target\st@indeftrue% -\ifx\symboldec@display\st@flow\else{\stDMemph{\symboldec@type} \symboldec@name:}\fi% -\ifx\symboldec@title\@empty~\else~(\stDMemph{\symboldec@title})\par\fi}{} -% -%<*ltxml> -DefEnvironment('{symboldec} OptionalKeyVals:symboldec', - "" - . "#body" - ."\n"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\symtype} -% \begin{macrocode} -%<*package> -\newcommand{\symtype}[2]{Type (#1): #2} -% -%<*ltxml> -DefConstructor('\symtype{}{}', - "#2"); -% -% \end{macrocode} -% \end{macro} -% -% \begin{environment}{definition} -% The |definition| environment itself is quite similar to the other's but we need to set -% the |\st@indef| switch to suppress warnings from |\st@def@target|. -% \begin{macrocode} -%<*package> -\newif\ifst@indef\st@indeffalse -\newenvironment{definition}[1][]{\metasetkeys{omtext}{#1}\sref@target\st@indeftrue% -\ifx\omtext@display\st@flow\else% -\ifx\omtext@title\@empty\begin{STdefinitionEnv}\else\begin{STdefinitionEnv}[\omtext@title]\fi\fi% -\ifx\sref@id\@empty\sref@label@id{here}\else% -\sref@label@id{\STpresent{\csname STdefinitionEnvKeyword\endcsname}~\@currentlabel}\fi} -{\ifx\omtext@display\st@flow\else\end{STdefinitionEnv}\fi} -\def\st@definition@kw{Definition} -\theorembodyfont{\upshape} -\newtheorem{STdefinitionEnv}[STtheoremAssEnv]{\st@definition@kw} -% -%<*ltxml> -sub definitionBody { - my ($doc, $keyvals, %props) = @_; - my $for = $keyvals->getValue('for') if $keyvals; - my $type = $keyvals->getValue('type') if $keyvals; - my %for_attr=(); - if (ToString($for)) { - $for = ToString($for); - $for =~ s/^{(.+)}$/$1/eg; - foreach (split(/,\s*/,$for)) { - $for_attr{$_}=1; - }} - my @symbols = @{$props{defs} || []}; - foreach my $symb(@symbols) { - next if $for_attr{$symb}; - $for_attr{$symb}=1; - $doc->insertElement('omdoc:symbol', undef, (name=>$symb, "xml:id"=>makeNCName("$symb.def.sym"))); - } - my %attrs = (); - $for = join(" ",(keys %for_attr)); - $attrs{'for'} = $for if $for; - my $id = $keyvals->getValue('id') if $keyvals; - $attrs{'xml:id'} = $id if $id; - $attrs{'type'} = $type if $type; - $doc->openElement('omdoc:definition', %attrs); - my $title = $keyvals->getValue('title') if $keyvals; - if ($title) { - $doc->openElement('omdoc:metadata'); - $doc->openElement('dc:title'); - $doc->absorb($title); - $doc->closeElement('dc:title');} - $doc->openElement('omdoc:CMP'); - $doc->openElement('omdoc:p'); - $doc->absorb($props{body}) if $props{body}; - $doc->maybeCloseElement('omdoc:p'); - $doc->maybeCloseElement('omdoc:CMP'); - $doc->closeElement('omdoc:definition'); - return; } -DefCMPEnvironment('{definition} OptionalKeyVals:omtext', sub{definitionBody(@_)}, - afterDigestBegin=>sub { - my ($stomach, $whatsit) = @_; - my @symbols = (); - $whatsit->setProperty(defs=>\@symbols); - AssignValue('defs', \@symbols); return; }, - afterDigest => sub { AssignValue('defs', undef); return; }); -% -% \end{macrocode} -% \end{environment} -% -% \begin{environment}{notation} -% We initialize the |\def\st@notation@initialize{}| here, and extend it with -% functionality below. -% \begin{macrocode} -%<*package> -\def\notemph#1{{\bf{#1}}} -\def\st@notation@terminate{} -\def\st@notation@initialize{} -\define@statement@env{notation} -\def\st@notation@kw{Notation} -\theorembodyfont{\upshape} -\newtheorem{STnotationEnv}[STtheoremAssEnv]{\st@notation@kw} -% -%<*ltxml> -DefCMPEnvironment('{notation} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "#body" - . "\n"); -DefConstructor('\notatiendum OptionalKeyVals:notation {}', - "#2"); -% -% \end{macrocode} -% \end{environment} -% -% \begin{macro}{\st@def@target} -% the next macro is a variant of the |\sref@target| macro provided by the |sref| package -% specialized for the use in the |\definiendum|, |\defin|, |\twindef|, and |\atwindef| -% macros. |\st@def@target{|\meta{opt}|}{|\meta{name}|}| makes a target with label -% |sref@|\meta{opt}|@|\meta{modulename}|@target|, if \meta{opt} is non-empty, else with -% the label |sref@|\meta{name}|@|\meta{modulename}|@target|. Also it generates the -% necessary warnings for a definiendum-like macro. -% \begin{macrocode} -%<*package> -\def\st@def@target#1#2{\def\@test{#1}% -\ifst@indef% if we are in a definition or such -\ifx\omtext@theory\@empty% if there is no theory attribute -\@ifundefined{mod@id}% if we are not in a module -{\PackageWarning{statements}{definiendum in unidentified module\MessageBreak -\protect\definiendum, \protect\defin, -\protect\twindef, \protect\atwindef\MessageBreak -can only be referenced when called in a module with id key}}% -{\ifx\@test\@empty% -\expandafter\sref@target@ifh{sref@#2@\mod@id @target}{}\else% -\expandafter\sref@target@ifh{sref@#1@\mod@id @target}{}\fi}% -\else\expandafter\sref@target@ifh{sref@#1@\omtext@theory @target}{}\fi% -\else\PackageError{statements}% -{definiendum outside definition context\MessageBreak -\protect\definiendum, \protect\defin, -\protect\twindef, \protect\atwindef\MessageBreak -do not make sense semantically outside a definition.\MessageBreak -Consider wrapping the defining phrase in a \protect\inlinedef}% -\fi} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\definiendum} -% The |\definiendum| and |\notatiendum| macros are very simple, but instead of defining -% them directly, we guard in the |\st@definition@initialize| macro so that they are -% local to the |definition| environment. -% \begin{macrocode} -%<*package> -\newcommand{\definiendum}[2][]{\st@def@target{#1}{#2}\defemph{#2}} -% -%<*ltxml> -DefConstructor('\definiendum [] {}', - "#2", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $whatsit->getArg(2) unless $name; - $whatsit->setProperty(name=>$name->toString); - push(@$addr, $name->toString) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; });#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\notatiendum} -% the |notatiendum| macro also needs to be visible in the |notation| and |definition| -% environments -% \begin{macrocode} -%<*package> -\newcommand{\notatiendum}[2][]{\notemph{#2}} -% -% \end{macrocode} -% \end{macro} -% -% We expand the {\latexml} bindings for |\defin|, |\twindef| and |\atwindef| into two -% instances one will be used for the definition and the other for indexing. -% -% \begin{macro}{\defin} -% \begin{macrocode} -%<*package> -\newcommand{\defin}[2][]{\definiendum[#1]{#2}\omdoc@index[#1]{#2}} -% -%<*ltxml> -DefConstructor('\defin[]{}', - "" - . "" - . "#2" - . "" - . "#2" - ."", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $whatsit->getArg(2) unless $name; - push(@$addr, $name->toString) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module'));#$ - return; }, - alias=>'\defin'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\definalt} -% \begin{macrocode} -%<*package> -\newcommand{\definalt}[3][]{\definiendum[#1]{#2}\omdoc@index[#1]{#3}} -% -%<*ltxml> -DefConstructor('\definalt[]{}{}', - "" - . "" - . "#2" - . "" - . "#3" - ."", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $whatsit->getArg(3) unless $name; - push(@$addr, $name->toString) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module'));#$ - return; }, - alias=>'\definalt'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\twindef} -% \begin{macrocode} -%<*package> -\newcommand{\twindef}[3][]{\st@def@target{#1}{#2-#3}\defemph{#2 #3}\@twin[#1]{#2}{#3}} -% -%<*ltxml> -DefConstructor('\twindef[]{}{}', - "" - . "" - . "" - . "#2 #3" - . "" - . "" - . "" - . "#2" - . "#3" - . "" - ."", - afterDigest => sub { - my ($stomach, $whatsit) = @_; -my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $name->toString if $name; - $name = $whatsit->getArg(2)->toString.'-'.$whatsit->getArg(3)->toString unless $name; - push(@$addr, $name) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; }, - alias=>'\twindef');#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\twindefalt} -% \begin{macrocode} -%<*package> -\newcommand{\twindefalt}[4][]{\definiendum[#1]{#2}\@twin[#1]{#3}{#4}} -% -%<*ltxml> -DefConstructor('\twindefalt[]{}{}{}', - "" - . "" - . "" - . "#2" - . "" - . "" - . "" - . "#3" - . "#4" - . "" - ."", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $name->toString if $name; - $name = $whatsit->getArg(3)->toString.'-'.$whatsit->getArg(4)->toString unless $name; - push(@$addr, $name) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; }, - alias=>'\twindef');#$ -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atwindef} -% \begin{macrocode} -%<*package> -\newcommand{\atwindef}[4][]{\st@def@target{#1}{#2-#3-#4}\defemph{#2 #3 #4}\@atwin[#1]{#2}{#3}{#4}} -% -%<*ltxml> -DefConstructor('\atwindef[]{}{}{}', - "" - . "" - . "#2 #3 #4" - . "" - . "" - . "#2" - . "#3" - . "#4" - . "" - . "", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $name->toString if $name; - $name = $whatsit->getArg(2)->toString.'-'.$whatsit->getArg(3)->toString.'-'.$whatsit->getArg(4)->toString unless $name; - push(@$addr, $name) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; }, - alias=>'\atwindef'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atwindefalt} -% \begin{macrocode} -%<*package> -\newcommand{\atwindefalt}[5][]{\definiendum[#1]{#2}\@atwin[#1]{#3}{#4}{#5}} -% -%<*ltxml> -DefConstructor('\atwindefalt[]{}{}{}{}', - "" - . "" - . "#2" - . "" - . "" - . "#3" - . "#4" - . "#5" - . "" - . "", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $name->toString if $name; - $name = $whatsit->getArg(3)->toString.'-'.$whatsit->getArg(4)->toString.'-'.$whatsit->getArg(5)->toString unless $name; - push(@$addr, $name) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; }, - alias=>'\atwindef'); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\inlineex} -% \begin{macrocode} -%<*package> -\newcommand{\inlineex}[2][]{\metasetkeys{omtext}{#1}\sref@target\sref@label@id{here}#2} -% -%<*ltxml> -DefConstructor('\inlineex OptionalKeyVals:omtext {}', - "#2"); -% -% \end{macrocode} -% \end{macro} -% \begin{macro}{\inlinedef} -% \begin{macrocode} -%<*package> -\newcommand{\inlinedef}[2][]{\metasetkeys{omtext}{#1}\sref@target\sref@label@id{here}\st@indeftrue #2} -% -%<*ltxml> -DefConstructor('\inlinedef OptionalKeyVals:omtext {}', sub { - my ($document, $keyvals, $body, %props) = @_; - my $for = $keyvals->getValue('for') if $keyvals; - my %for_attr=(); - if (ToString($for)) { - $for = ToString($for); - $for =~ s/^{(.+)}$/$1/eg; - foreach (split(/,\s*/,$for)) { - $for_attr{$_}=1; - }} - my @symbols = @{$props{defs} || []}; - #Prepare for symbol insertion -insert before the parent of the closest ancestor CMP element - my $original_node = $document->getNode; - my $xc = XML::LibXML::XPathContext->new( $original_node ); - $xc->registerNs('omdoc', 'http://omdoc.org/ns'); - my ($statement_ancestor) = $xc->findnodes('./ancestor::omdoc:CMP/..'); - foreach my $symb(@symbols) { - next if $for_attr{$symb}; - $for_attr{$symb}=1; - my $symbolnode = XML::LibXML::Element->new('symbol'); - $symbolnode->setAttribute(name=>$symb); - $symbolnode->setAttribute("xml:id"=>makeNCName("$symb.def.sym")); - $statement_ancestor->parentNode->insertBefore($symbolnode,$statement_ancestor); - } - #Restore the insertion point - $document->setNode($original_node); - my %attrs = (); - $for = join(" ",(keys %for_attr)); - $attrs{'for'} = $for if $for; - my $id = $keyvals->getValue('id') if $keyvals; - $attrs{'xml:id'} = $id if $id; - $attrs{'type'} = 'inlinedef'; - $document->openElement('omdoc:phrase',%attrs); - $document->absorb($body); - $document->closeElement('omdoc:phrase'); }, - #Prepare 'defs' hooks for \defin and \definiendum symbol names - beforeDigest=>sub { - my @symbols = (); - AssignValue('defs', \@symbols); return; }, - #Adopt collected names as 'defs' property, remove hooks - afterDigest=>sub { - my ($stomach, $whatsit) = @_; - my $defsref = LookupValue('defs'); - my @defs = @$defsref; - $whatsit->setProperty('defs',\@defs); - AssignValue('defs',undef); - return; }); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Cross-Referencing Symbols and Concepts}\label{sec:impl:crossref} -% -% \begin{macro}{\termref@set} -% The |term| macro uses the |cd| and |name| keys for hyperlinking to create hyper-refs, -% if the |hyperref| package is loaded: We first see if the |cd| key was given, if not we -% define it as the local module identifier. -% \begin{macrocode} -%<*package> -\addmetakey[\mod@id]{termref}{cd} -\addmetakey{termref}{cdbase} -\addmetakey{termref}{name} -\addmetakey{termref}{role} -\def\termref@set#1#2{\def\termref@name{#2}\metasetkeys{termref}{#1}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\termref} -% \begin{macrocode} -\newcommand{\termref}[2][]{\metasetkeys{termref}{#1}\st@termref{#2}} -% -%<*ltxml> -DefConstructor('\termref OptionalKeyVals:termref {}', - "" - . "#2" - .""); -% -% \end{macrocode} -% \end{macro} -% The next macro is where the actual work is done. -% \begin{macro}{\st@termref} -% We determine whether the macro \meta{module}|@cd@file@base| is defined. If it is, we -% make the prefix of a URI reference in the local macro |\@uri|, which we compose to the -% hyper-reference. -% \begin{macrocode} -%<*package> -\def\st@termref#1{\ifx\termref@name\@empty\def\termref@name{#1}\fi% -\mod@termref\termref@cd\termref@name{#1}} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\twinref} -% \begin{macrocode} -\newcommand{\twinref}[3][]{\termref@set{#1}{#2-#3}\st@termref{#2 #3}} -% -%<*ltxml> -DefConstructor('\twinref OptionalKeyVals:termref {}{}', - "" - . "#2" - .""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\atwinref} -% \begin{macrocode} -%<*package> -\newcommand{\atwinref}[4][]{\termref@set{#1}{#2-#3-#4}\st@termref{#2 #3 #4}} -% -%<*ltxml> -DefConstructor('\atwinref OptionalKeyVals:termref {}{}{}', - "" - . "#2" - .""); -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\termin} -% The |termin| macro is very simple, it just adds an index. -% \begin{macrocode} -%<*package> -\newcommand{\termin}[2][]{\termref[#1]{#2}\index{#2}} -% -%<*ltxml> -DefConstructor('\termin OptionalKeyVals:term {}', - "" - . "" - . "#2" - . "" - . "#2" - . ""); -% -% \end{macrocode} -% \end{macro} -% -% Now we care about the configuration switches, they are set to sensible values, if they -% are not defined already. These are just configuration parameters, which should not -% appear in documents, therefore we do not provide {\latexml} bindings for them. -% \begin{macro}{\*emph} -% \begin{macrocode} -%<*package> -\providecommand{\termemph}[1]{#1} -\providecommand{\defemph}[1]{{\textbf{#1}}} -\providecommand{\stDMemph}[1]{{\textbf{#1}}} -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\symref} -% The |\symref| macros is quite simple, since we have done all the heavy lifting in the -% |modules| package: we simply apply |\mod@symref@|\meta{arg1} to -% \meta{arg2}. -% \begin{macrocode} -%<*package> -\newcommand{\symref}[2]{\@nameuse{mod@symref@#1}{#2}} -% -%<*ltxml> -DefConstructor('\symref{}{}', - "" - . "#2" - .""); -% -% \end{macrocode} -% \end{macro} -% -% \subsection{Providing IDs for {\omdoc} Elements}\label{sec:impl:ids} -% -% To provide default identifiers, we tag all {\omdoc} -% elements that allow |xml:id| attributes by executing the |numberIt| procedure from |omdoc.sty.ltxml|. -% -% \begin{macrocode} -%<*ltxml> -Tag('omdoc:assertion',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:definition',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:example',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:requation',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:axiom',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:symbol',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:type',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:term',afterOpen=>\&numberIt,afterClose=>\&locateIt); -% -% \end{macrocode} -% -% \subsection{Finale} -% -% Finally, we need to terminate the file with a success mark for perl. -% \begin{macrocode} -%1; -% \end{macrocode} -% -% \Finale -% -\endinput -% \iffalse -% LocalWords: GPL structuresharing STR dtx keyval env envfalse idfalse idtrue -% LocalWords: displayfalse envtrue displaytrue forfalse typefalse titlefalse -% LocalWords: continuesfalse fortrue fromtrue typetrue titletrue CPERL omdoc -% LocalWords: continuestrue symboldec omtext RequirePackage lowcase lc ToString -% LocalWords: foreach hyperref href hlink DefCMPEnvironment OptionalKeyVals ne -% LocalWords: KeyVal xml CMP simpleDef PatternDef DefEnvironment PatternRule -% LocalWords: requation PatternCMP RecDef DefConstructor keyvals defs psymbols -% LocalWords: openElement symb closeElement ffor getValue attrs metadata undef -% LocalWords: afterDigestBegin setProperty AssignValue afterDigest definiendum -% LocalWords: cd addr LookupValue getArg toString idx idt definiendum ide idp -% LocalWords: DefMacro args unlist inlinedef uri pdf afterOpen numberIt texttt -% LocalWords: iffalse consymb ntheorem textbackslash symref def scsys sc sc kw -% LocalWords: mathml openmath latexml activemath fileversion maketitle stex -% LocalWords: setcounter tocdepth tableofcontents newpage sproofs ulsmf08 sref -% LocalWords: MaySch eltte09 twintoo sref subsubsection exfig vspace vspace -% LocalWords: noindent renewtheorem hline textbf textbf footnotesize ple peano -% LocalWords: STaxiomEnv symdef medskip succ mathbb ldots stepcounter ednote -% LocalWords: STtheoremAssEnv stepcounter STtheoremAssEnv stepcounter defin -% LocalWords: STtheoremAssEnv notatiendum defin smomdl biblatex twindef cdbase -% LocalWords: twindef atwindef atwindef adjectivized varaiants twindefalt cseq -% LocalWords: twindefalt atwindefalt atwindefalt csymbol definalt termref emph -% LocalWords: termref compactdesc KohAmb smmssl twinref atwinref newpart impl -% LocalWords: termdef defemph defemph renewcommand termemph termenph stDMemph -% LocalWords: stDMemph STpresent STpresent makeatletter STlemmaAssEnv textsf -% LocalWords: STpropositionAssEnv STcorollaryAssEnv STconjectureAssEnv langle -% LocalWords: STfalseconjectureAssEnv STpostulateAssEnv STobligationAssEnv foo -% LocalWords: STassumptionAssEnv STobservationAssEnv STexampleEnv textsf ltxml -% LocalWords: STdefinitionEnv STnotationEnv printbibliography langle ncname -% LocalWords: theoremstyle sym newenvironment ifx csname endcsname -% LocalWords: currentlabel theorembodyfont itshape theoremheaderfont bfseries -% LocalWords: normalfont newtheorem upshape srefaddidkey -% LocalWords: newcommand indef newif ifst indeffalse indeftrue attr whatsit -% LocalWords: STdefinitionEnvKeyword notemph modulename ifundefined atwin -% LocalWords: expandafter providecommand nameuse doctex ctancite funval - -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: -% \fi -% LocalWords: funsymbs findnodes symbolnode defsref diff --git a/Master/texmf-dist/source/latex/stex/xsl/ltxml2cnx.xsl b/Master/texmf-dist/source/latex/stex/xsl/ltxml2cnx.xsl deleted file mode 100644 index 9f854abee37..00000000000 --- a/Master/texmf-dist/source/latex/stex/xsl/ltxml2cnx.xsl +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
diff --git a/Master/texmf-dist/source/latex/stex/xsl/omdocpost.xsl b/Master/texmf-dist/source/latex/stex/xsl/omdocpost.xsl deleted file mode 100644 index f3198fc1532..00000000000 --- a/Master/texmf-dist/source/latex/stex/xsl/omdocpost.xsl +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - - - - - - - - This OMDoc document is generated from an sTeX-encoded one via LaTeXML, you may want to reconsider editing it. - - - - - - - - The data elements - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - - - - - - lstemph - color: - - - - - - - - - - - cannot deal with element yet! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/Master/texmf-dist/source/latex/stex/xsl/owl2post.xsl b/Master/texmf-dist/source/latex/stex/xsl/owl2post.xsl deleted file mode 100644 index 530d9265c03..00000000000 --- a/Master/texmf-dist/source/latex/stex/xsl/owl2post.xsl +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - This OWL2 ontology is generated from an sTeX-encoded one via LaTeXML, you may want to reconsider editing it. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Master/texmf-dist/tex/latex/stex/cmathml/cmathml.sty b/Master/texmf-dist/tex/latex/stex/cmathml/cmathml.sty deleted file mode 100644 index 90b215dd2ab..00000000000 --- a/Master/texmf-dist/tex/latex/stex/cmathml/cmathml.sty +++ /dev/null @@ -1,450 +0,0 @@ -%% -%% This is file `cmathml.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% cmathml.dtx (with options: `sty') -%% -\RequirePackage{presentation} -\newcommand{\Capply}[3][]{#2(#3)} -\def\CMathML@cn#1{#1} -\newcommand{\Ccn}[2][]{\CMathML@cn{#2}} -\def\CMathML@ci#1{#1} -\newcommand{\Cci}[2][]{\CMathML@ci{#2}} -\def\CMathML@csymbol#1{#1} -\newcommand{\Ccsymbol}[2][]{\CMathML@csymbol{#2}} -\def\CMathML@ccinterval#1#2{[#1,#2]} -\newcommand{\Cccinterval}[3][]{\CMathML@ccinterval{#2}{#3}} -\def\CMathML@cointerval#1#2{[#1,#2)} -\newcommand{\Ccointerval}[3][]{\CMathML@cointerval{#2}{#3}} -\def\CMathML@ocinterval#1#2{(#1,#2]} -\newcommand{\Cocinterval}[3][]{\CMathML@ocinterval{#2}{#3}} -\def\CMathML@oointerval#1#2{(#1,#2)} -\newcommand{\Coointerval}[3][]{\CMathML@oointerval{#2}{#3}} -\newcommand{\Cinverse}[2][]{#2^{-1}} -\def\CMathML@lambda#1#2{\lambda({#1},{#2})} -\newcommand{\Clambda}[3][]{\CMathML@lambda{#2}{#3}} -\def\CMathML@lambdaDA#1#2#3{\lambda({#1}\colon{#2},#3)} -\newcommand{\ClambdaDA}[4][]{\CMathML@lambdaDA{#2}{#3}{#4}} -\def\CMathML@restrict#1#2{\left.#1\right|_{#2}} -\newcommand{\Crestrict}[3][]{\CMathML@restrict{#2}{#3}} -\def\CMathML@composeOp{\circ} -\newcommand{\CcomposeOp}{\CMathML@composeOp} -\def\CMathML@compose#1{\assoc[p=500,pi=500]{\CMathML@composeOp}{#1}} -\newcommand{\Ccompose}[2][]{\CMathML@compose{#2}} -\def\CMathML@ident#1{\mathrm{id}} -\newcommand{\Cident}[1][]{\CMathML@ident{#1}} -\def\CMathML@domain#1{\mbox{dom}(#1)} -\newcommand{\Cdomain}[2][]{\CMathML@domain{#2}} -\def\CMathML@codomain#1{\mbox{codom}(#1)} -\newcommand{\Ccodomain}[2][]{\CMathML@codomain{#2}} -\def\CMathML@image#1{{\mathbf{Im}}(#1)} -\newcommand{\Cimage}[2][]{\CMathML@image{#2}} -\def\CMathML@piecewise#1{\left\{\begin{array}{ll}#1\end{array}\right.} -\newcommand{\Cpiecewise}[2][]{\CMathML@piecewise{#2}} -\def\CMathML@piece#1#2{#1&{\mathrm{if}}\;{#2}\\} -\newcommand{\Cpiece}[3][]{\CMathML@piece{#2}{#3}} -\def\CMathML@otherwise#1{#1&else\\} -\newcommand{\Cotherwise}[2][]{\CMathML@otherwise{#2}} -\def\CMathML@quotient#1#2{\frac{#1}{#2}} -\newcommand{\Cquotient}[3][]{\CMathML@quotient{#2}{#3}} -\def\CMathML@factorialOp{!} -\newcommand{\CfactorialOp}{\CMathML@factorialOp} -\def\CMathML@factorial#1{#1{\CMathML@factorialOp}} -\newcommand{\Cfactorial}[2][]{\CMathML@factorial{#2}} -\def\CMathML@divideOp{\div} -\newcommand{\CdivideOp}{\CMathML@divideOp} -\def\CMathML@divide#1#2{\infix[p=400]{\CMathML@divideOp}{#1}{#2}} -\newcommand{\Cdivide}[3][]{\CMathML@divide{#2}{#3}} -\def\CMathML@maxOp{\mathrm{max}} -\newcommand{\CmaxOp}{\CMathML@maxOp} -\def\CMathML@max#1{{\CMathML@maxOp}(#1)} -\newcommand{\Cmax}[2][]{\CMathML@max{#2}} -\def\CMathML@minOp{\mathrm{min}} -\newcommand{\CminOp}{\CMathML@minOp} -\def\CMathML@min#1{{\CMathML@minOp}(#1)} -\newcommand{\Cmin}[2][]{\CMathML@min{#2}} -\def\CMathML@minusOp{-} -\newcommand{\CminusOp}{\CMathML@minusOp} -\def\CMathML@minus#1#2{\infix[p=500]{\CMathML@minusOp}{#1}{#2}} -\newcommand{\Cminus}[3][]{\CMathML@minus{#2}{#3}} -\def\CMathML@uminus#1{\prefix[p=200]{\CMathML@minusOp}{#1}} -\newcommand{\Cuminus}[2][]{\CMathML@uminus{#2}} -\def\CMathML@plusOp{+} -\newcommand{\CplusOp}{\CMathML@plusOp} -\def\CMathML@plus#1{\assoc[p=500]{\CMathML@plusOp}{#1}} -\newcommand{\Cplus}[2][]{\CMathML@plus{#2}} -\def\CMathML@power#1#2{\infix[p=200]{^}{#1}{#2}} -\newcommand{\Cpower}[3][]{\CMathML@power{#2}{#3}} -\def\CMathML@remOp{\bmod} -\newcommand{\CremOp}{\CMathML@remOp} -\def\CMathML@rem#1#2{#1 \CMathML@remOp #2} -\newcommand{\Crem}[3][]{\CMathML@rem{#2}{#3}} -\def\CMathML@timesOp{\cdot} -\newcommand{\CtimesOp}{\CMathML@timesOp} -\def\CMathML@times#1{\assoc[p=400]{\CMathML@timesOp}{#1}} -\newcommand{\Ctimes}[2][]{\CMathML@times{#2}} -\def\CMathML@rootOp{\sqrt} -\newcommand{\CrootOp}{\CMathML@rootOp{}} -\def\CMathML@root#1#2{\CMathML@rootOp[#1]{#2}} -\newcommand{\Croot}[3][]{\CMathML@root{#2}{#3}} -\def\CMathML@gcd#1{\gcd(#1)} -\newcommand{\Cgcd}[2][]{\CMathML@gcd{#2}} -\def\CMathML@andOp{\wedge} -\newcommand{\CandOp}{\CMathML@andOp} -\def\CMathML@and#1{\assoc[p=400]{\CMathML@andOp}{#1}} -\newcommand{\Cand}[2][]{\CMathML@and{#2}} -\def\CMathML@orOp{\vee} -\newcommand{\CorOp}{\CMathML@orOp} -\def\CMathML@or#1{\assoc[p=500]{\CMathML@orOp}{#1}} -\newcommand{\Cor}[2][]{\CMathML@or{#2}} -\def\CMathML@xorOp{\oplus} -\newcommand{\CxorOp}{\CMathML@xorOp} -\def\CMathML@xor#1{\assoc[p=400]{\CMathML@xorOp}{#1}} -\newcommand{\Cxor}[2][]{\CMathML@xor{#2}} -\def\CMathML@notOp{\neg} -\newcommand{\CnotOp}{\CMathML@notOp} -\def\CMathML@not#1{\CMathML@notOp{#1}} -\newcommand{\Cnot}[2][]{\CMathML@not{#2}} -\def\CMathML@impliesOp{\Longrightarrow} -\newcommand{\CimpliesOp}{\CMathML@impliesOp} -\def\CMathML@implies#1#2{#1\CMathML@impliesOp{#2}} -\newcommand{\Cimplies}[3][]{\CMathML@implies{#2}{#3}} -\def\CMathML@AndDA#1#2{\bigwedge_{#1}{#2}} % set, scope -\newcommand{\CAndDA}[3][]{\CMathML@AndDA{#2}{#3}} -\def\CMathML@AndCond#1#2#3{\bigwedge_{#2}{#3}} % bvars,condition, scope -\newcommand{\CAndCond}[4][]{\CMathML@AndCond{#2}{#2}{#3}} -\def\CMathML@OrDA#1#2{\bigvee_{#1}{#2}} % set, scope -\newcommand{\COrDa}[3][]{\CMathML@OrDA{#2}{#3}} -\def\CMathML@OrCond#1#2#3{\bigvee_{#2}{#3}}% bvars,condition, scope -\newcommand{\COrCond}[4][]{\CMathML@OrCond{#2}{#3}{#4}} -\def\CMathML@XorDA#1#2{\bigoplus_{#1}{#2}} % set, scope -\newcommand{\CXorDA}[3][]{\CMathML@XorDA{#2}{#3}} -\def\CMathML@XorCond#1#2#3{\bigoplus_{#2}{#3}}% bvars,condition, scope -\newcommand{\CXorCond}[4][]{\CMathML@XorCond{#2}{#3}{#4}} -\def\CMathML@forall#1#2{\forall{#1}\colon{#2}} -\newcommand{\Cforall}[3][]{\CMathML@forall{#2}{#3}} -\def\CMathML@forallCond#1#2#3{\forall{#1},{#2}\colon{#3}} % list), condition, scope -\newcommand{\CforallCond}[4][]{\CMathML@forallCond{#2}{#3}{#4}} -\def\CMathML@exists#1#2{\exists{#1}\colon{#2}} -\newcommand{\Cexists}[3][]{\CMathML@exists{#2}{#3}} -\def\CMathML@esistsCont#1#2#3{\exists{#1},{#2}\colon{#3}} -\newcommand{\CexistsCond}[4][]{\CMathML@esistsCont{#2}{#3}{#4}} -\def\CMathML@abs#1{\left|#1\right|} -\newcommand{\Cabs}[2][]{\CMathML@abs{#2}} -\def\CMathML@conjugate#1{\overline{#1}} -\newcommand{\Cconjugate}[2][]{\CMathML@conjugate{#2}} -\def\CMathML@arg#1{\angle #1} -\newcommand{\Carg}[2][]{\CMathML@arg{#2}} -\def\CMathML@real#1{\Re #1} -\newcommand{\Creal}[2][]{\CMathML@real{#2}} -\def\CMathML@imaginary#1{\Im #1} -\newcommand{\Cimaginary}[2][]{\CMathML@imaginary{#2}} -\def\CMathML@lcm#1{\mbox{lcm}(#1)} -\newcommand{\Clcm}[2][]{\CMathML@lcm{#2}} -\def\CMathML@floor#1{\left\lfloor{#1}\right\rfloor} -\newcommand{\Cfloor}[2][]{\CMathML@floor{#2}} -\def\CMathML@ceiling#1{\left\lceil{#1}\right\rceil} -\newcommand{\Cceiling}[2][]{\CMathML@ceiling{#2}} -\def\CMathML@eqOp{=} -\newcommand{\CeqOp}{\CMathML@eqOp} -\def\CMathML@eq#1{\assoc[p=700]{\CMathML@eqOp}{#1}} -\newcommand{\Ceq}[2][]{\CMathML@eq{#2}} -\def\CMathML@neqOp{\neq} -\newcommand{\CneqOp}{\CMathML@neqOp} -\def\CMathML@neq#1#2{\infix[p=700]{\CMathML@neqOp}{#1}{#2}} -\newcommand{\Cneq}[3][]{\CMathML@neq{#2}{#3}} -\def\CMathML@gtOp{>} -\newcommand{\CgtOp}{\CMathML@gtOp} -\def\CMathML@gt#1{\assoc[p=700]{\CMathML@gtOp}{#1}} -\newcommand{\Cgt}[2][]{\CMathML@gt{#2}} -\def\CMathML@ltOp{<} -\newcommand{\CltOp}{\CMathML@ltOp} -\def\CMathML@lt#1{\assoc[p=700]{\CMathML@ltOp}{#1}} -\newcommand{\Clt}[2][]{\CMathML@lt{#2}} -\def\CMathML@geqOp{\geq} -\newcommand{\CgeqOp}{\CMathML@geqOp} -\def\CMathML@geq#1{\assoc[p=700]{\CMathML@geqOp}{#1}} -\newcommand{\Cgeq}[2][]{\CMathML@geq{#2}} -\def\CMathML@leqOp{\leq} -\newcommand{\CleqOp}{\CMathML@leqOp} -\def\CMathML@leq#1{\assoc[p=700]{\CMathML@leqOp}{#1}} -\newcommand{\Cleq}[2][]{\CMathML@leq{#2}} -\def\CMathML@equivalentOp{\equiv} -\newcommand{\CequivalentOp}{\CMathML@equivalentOp} -\def\CMathML@equivalent#1{\assoc[p=700]{\CMathML@equivalentOp}{#1}} -\newcommand{\Cequivalent}[2][]{\CMathML@equivalent{#2}} -\def\CMathML@approxOp{\approx} -\newcommand{\CapproxOp}{\CMathML@approxOp} -\def\CMathML@approx#1#2{#1\CMathML@approxOp{#2}} -\newcommand{\Capprox}[3][]{\CMathML@approx{#2}{#3}} -\def\CMathML@factorofOp{\mid} -\newcommand{\CfactorofOp}{\CMathML@factorofOp} -\def\CMathML@factorof#1#2{#1\CMathML@factorofOp{#2}} -\newcommand{\Cfactorof}[3][]{\CMathML@factorof{#2}{#3}} - -\def\CMathML@intOp{\int} -\newcommand{\CintOp}{\CMathML@intOp} -\def\CMathML@int#1{\CMathML@intOp{#1}} -\newcommand{\Cint}[2][]{\CMathML@int{#2}} -\def\CMathML@intLimits#1#2#3#4{\CMathML@intOp_{#2}^{#3}{#4}d{#1}} %bvars,llimit, ulimit,body -\newcommand{\CintLimits}[5][]{\CMathML@intLimits{#2}{#3}{#4}{#5}} -\def\CMathML@intSet#1#2{\CMathML@intOp_{#1}{#2}}% set,function -\newcommand{\CintDA}[3][]{\CMathML@intSet{#2}{#3}} -\def\CMathML@intCond#1#2#3{\CMathML@intOp_{#2}{#3}d{#1}} %bvars, condition, body -\newcommand{\CintCond}[4][]{\CMathML@intCond{#2}{#3}{#4}} - -\def\CMathML@diff#1{#1'} -\newcommand{\Cdiff}[2][]{\CMathML@diff{#2}} -\def\CMathML@ddiff#1#2{{d{#2}(#1)\over{d{#1}}}} -\newcommand{\Cddiff}[3][]{\CMathML@ddiff{#2}{#3}} -\def\CMathML@partialdiff#1#2#3{{\partial^{#1}\over\partial{#2}}{#3}}% degree, bvars, body -\newcommand{\Cpartialdiff}[4][]{\CMathML@partialdiff{#2}{#3}{#4}} -\newcommand{\Cdegree}[2]{#1^{#2}} -\def\CMathML@limit#1#2#3{\lim_{#1\rightarrow{#2}}{#3}} -\newcommand{\Climit}[4][]{\CMathML@limit{#2}{#3}{#4}} % bvar, lowlimit, scope -\def\CMathML@limitCond#1#2#3{\lim_{#2}{#3}} -\newcommand{\ClimitCond}[4][]{\CMathML@limitCond{#2}{#3}{#4}} % bvars, condition, scope -\def\CMathML@tendstoOp{\rightarrow} -\newcommand{\CtendstoOp}{\CMathML@tendstoOp} -\def\CMathML@tendsto#1#2{#1\CMathML@tendstoOp{#2}} -\newcommand{\Ctendsto}[3][]{\CMathML@tendsto{#2}{#3}} -\def\CMathML@tendstoAboveOp{\searrow} -\newcommand{\CtendstoAboveOp}{\CMathML@tendstoAboveOp} -\def\CMathML@tendstoAbove#1#2{#1\searrow{#2}} -\newcommand{\CtendstoAbove}[3][]{\CMathML@tendstoAbove{#2}{#3}} -\def\CMathML@tendstoBelowOp{\nearrow} -\newcommand{\CtendstoBelowOp}{\CMathML@tendstoBelowOp} -\def\CMathML@tendstoBelow#1#2{#1\CMathML@tendstoBelowOp{#2}} -\newcommand{\CtendstoBelow}[3][]{\CMathML@tendstoBelow{#2}{#3}} -\def\CMathML@divergence#1{\nabla\cdot{#1}} -\newcommand{\Cdivergence}[2][]{\CMathML@divergence{#2}} -\def\CMathML@grad#1{\nabla{#1}} -\newcommand{\Cgrad}[2][]{\CMathML@grad{#2}} -\def\CMathML@curl#1{\nabla\times{#1}} -\newcommand{\Ccurl}[2][]{\CMathML@curl{#2}} -\def\CMathML@laplacian#1{\nabla^2#1} -\newcommand{\Claplacian}[2][]{\CMathML@laplacian{#2}} -\def\CMathML@set#1{\left\{#1\right\}} -\newcommand{\Cset}[2][]{\CMathML@set{#2}} -\def\CMathML@setRes#1#2{\{#1|#2\}} -\newcommand{\CsetRes}[3][]{\CMathML@setRes{#2}{#3}} -\def\CMathML@setCond#1#2#3{\{#2|#3\}} -\newcommand{\CsetCond}[4][]{\CMathML@setCond{#2}{#3}{#4}} -\def\CMathML@setDA#1#2#3{\{#1\in{#2}|#3\}} -\newcommand{\CsetDA}[4][]{\CMathML@setDA{#2}{#3}{#4}} -\def\CMathML@listOp{\mbox{list}} -\newcommand{\ClistOp}{\CMathML@listOp} -\def\CMathML@list#1{\CMathML@listOp({#1})} -\newcommand{\Clist}[2][]{\CMathML@list{#2}} -\def\CMathML@unionOp{\cup} -\newcommand{\CunionOp}{\CMathML@unionOp} -\def\CMathML@union#1{\assoc[p=500]{\CMathML@unionOp}{#1}} -\newcommand{\Cunion}[2][]{\CMathML@union{#2}} -\def\CMathML@intersectOp{\cap} -\newcommand{\CintersectOp}{\CMathML@intersectOp} -\def\CMathML@intersect#1{\assoc[p=400]{\CMathML@intersectOp}{#1}} -\newcommand{\Cintersect}[2][]{\CMathML@intersect{#2}} -\def\CMathML@inOp{\in} -\newcommand{\CinOp}{\CMathML@inOp} -\def\CMathML@in#1#2{#1\CMathML@inOp{#2}} -\newcommand{\Cin}[3][]{\CMathML@in{#2}{#3}} -\def\CMathML@notinOp{\notin} -\newcommand{\CnotinOp}{\CMathML@notinOp} -\def\CMathML@notin#1#2{#1\CMathML@notinOp{#2}} -\newcommand{\Cnotin}[3][]{\CMathML@notin{#2}{#3}} -\def\CMathML@setdiffOp{\setminus} -\newcommand{\CsetdiffOp}{\CMathML@setdiffOp} -\def\CMathML@setdiff#1#2{#1\CMathML@setdiffOp{#2}} -\newcommand{\Csetdiff}[3][]{\CMathML@setdiff{#2}{#3}} -\def\CMathML@cardOp{\#} -\newcommand{\CcardOp}{\CMathML@cardOp} -\def\CMathML@card#1{\CMathML@cardOp #1} -\newcommand{\Ccard}[2][]{\CMathML@card{#2}} -\def\CMathML@cartesianproductOp{\times} -\newcommand{\CcartesianproductOp}{\CMathML@cartesianproductOp} -\def\CMathML@cartesianproduct#1{\assoc[p=400]{\CMathML@cartesianproductOp}{#1}} -\newcommand{\Ccartesianproduct}[2][]{\CMathML@cartesianproduct{#2}} -\def\CMathML@subsetOp{\subseteq} -\newcommand{\CsubsetOp}{\CMathML@subsetOp} -\def\CMathML@subset#1{\assoc[p=700]{\CMathML@subsetOp}{#1}} -\newcommand{\Csubset}[2][]{\CMathML@subset{#2}} -\def\CMathML@prsubsetOp{\subset} -\newcommand{\CprsubsetOp}{\CMathML@prsubsetOp} -\def\CMathML@prsubset#1{\assoc[p=700]{\CMathML@prsubsetOp}{#1}} -\newcommand{\Cprsubset}[2][]{\CMathML@prsubset{#2}} -\def\CMathML@notsubsetOp{\not\subseteq} -\newcommand{\CnotsubsetOp}{\CMathML@notsubsetOp} -\def\CMathML@notsubset#1#2{#1\CMathML@notsubsetOp{#2}} -\newcommand{\Cnotsubset}[3][]{\CMathML@notsubset{#2}{#3}} -\def\CMathML@notprsubsetOp{\not\subset} -\newcommand{\CnotprsubsetOp}{\CMathML@notprsubsetOp} -\def\CMathML@notprsubset#1#2{#1\CMathML@notprsubsetOp{#2}} -\newcommand{\Cnotprsubset}[3][]{\CMathML@notprsubset{#2}{#3}} -\def\CMathML@supsetOp{\supseteq} -\newcommand{\CsupsetOp}{\CMathML@supsetOp} -\def\CMathML@supset#1{\assoc[p=700]{\CMathML@supsetOp}{#1}} -\newcommand{\Csupset}[2][]{\CMathML@supset{#2}} -\def\CMathML@prsupsetOp{\supset} -\newcommand{\CprsupsetOp}{\CMathML@prsupsetOp} -\def\CMathML@prsupset#1{\assoc[p=700]{\CMathML@prsupsetOp}{#1}} -\newcommand{\Cprsupset}[2][]{\CMathML@prsupset{#2}} -\def\CMathML@notsupsetOp{\not\supseteq} -\newcommand{\CnotsupsetOp}{\CMathML@notsupsetOp} -\def\CMathML@notsupset#1#2{#1\CMathML@notsupsetOp{#2}} -\newcommand{\Cnotsupset}[3][]{\CMathML@notsupset{#2}{#3}} -\def\CMathML@notprsupsetOp{\not\supset} -\newcommand{\CnotprsupsetOp}{\CMathML@notprsupsetOp} -\def\CMathML@notprsupset#1#2{#1\CMathML@notprsupsetOp{#2}} -\newcommand{\Cnotprsupset}[3][]{\CMathML@notprsupset{#2}{#3}} -\def\CMathML@UnionDAOp{\bigwedge} -\newcommand{\CUnionDAOp}{\CMathML@UnionDAOp} -\def\CMathML@UnionDA#1#2{\CMathML@UnionDAOp_{#1}{#2}} % set, scope -\newcommand{\CUnionDA}[3][]{\CMathML@UnionDA{#2}{#3}} -\def\CMathML@UnionCond#1#2#3{\CMathML@UnionDAOp_{#2}{#3}} % bvars,condition, scope -\newcommand{\CUnionCond}[4][]{\CMathML@UnionCond{#2}{#2}{#3}} -\def\CMathML@IntersectDAOp{\bigvee} -\newcommand{\CIntersectDAOp}{\CMathML@IntersectDAOp} -\def\CMathML@IntersectDA#1#2{\CMathML@IntersectDAOp_{#1}{#2}} % set, scope -\newcommand{\CIntersectDa}[3][]{\CMathML@IntersectDA{#2}{#3}} -\def\CMathML@IntersectCond#1#2#3{\CMathML@IntersectDAOp_{#2}{#3}}% bvars,condition, scope -\newcommand{\CIntersectCond}[4][]{\CMathML@IntersectCond{#2}{#3}{#4}} -\def\CMathML@CartesianproductDAOp{\bigoplus} -\newcommand{\CCartesianproductDAOp}{\CMathML@CartesianproductDAOp} -\def\CMathML@CartesianproductDA#1#2{\CMathML@CartesianproductDAOp_{#1}{#2}} % set, scope -\newcommand{\CCartesianproductDA}[3][]{\CMathML@CartesianproductDA{#2}{#3}} -\def\CMathML@CartesianproductCond#1#2#3{\CMathML@CartesianproductDAOp_{#2}{#3}}% bvars,condition, scope -\newcommand{\CCartesianproductCond}[4][]{\CMathML@CartesianproductCond{#2}{#3}{#4}} -\def\CMathML@sumOp{\sum} -\newcommand{\CsumOp}{\CMathML@sumOp} -\def\CMathML@sumLimits#1#2#3#4{\CMathML@sumOp_{#1=#2}^{#3}#4}% bvar, llimit, ulimit, body -\newcommand{\CsumLimits}[5][]{\CMathML@sumLimits{#2}{#3}{#4}{#5}} -\def\CMathML@sumCond#1#2#3{\CMathML@sumOp_{#1\in{#2}}#3} % bvar, condition, body -\newcommand{\CsumCond}[4][]{\CMathML@sumCond{#2}{#3}{#4}} -\def\CMathML@sumDA#1#2{\CMathML@sumOp_{#1}#2} % set, body -\newcommand{\CsumDA}[3][]{\CMathML@sumDA{#2}{#3}} -\def\CMathML@prodOp{\prod} -\newcommand{\CprodOp}{\CMathML@prodOp} -\def\CMathML@prodLimits#1#2#3#4{\CMathML@prodOp_{#1=#32^{#3}#4}}% bvar, llimit, ulimit, body -\newcommand{\CprodLimits}[5][]{\CMathML@prodLimits{#2}{#3}{#4}{#5}} -\def\CMathML@prodCond#1#2#3{\CMathML@prodOp_{#1\in{#2}}#3} % bvar, condition, body -\newcommand{\CprodCond}[4][]{\CMathML@prodCond{#2}{#3}{#4}} -\def\CMathML@prodDA#1#2{\CMathML@prodOp_{#1}#2} % set, body -\newcommand{\CprodDA}[3]{\CMathML@prodDA{#2}{#3}} -\def\CMathML@sin#1{\sin(#1)} -\newcommand{\Csin}[2][]{\CMathML@sin{#2}} -\def\CMathML@cos#1{\cos(#1)} -\newcommand{\Ccos}[2][]{\CMathML@cos{#2}} -\def\CMathML@tan#1{\tan(#1)} -\newcommand{\Ctan}[2][]{\CMathML@tan{#2}} -\def\CMathML@sec#1{\sec(#1)} -\newcommand{\Csec}[2][]{\CMathML@sec{#2}} -\def\CMathML@csc#1{\csc(#1)} -\newcommand{\Ccsc}[2][]{\CMathML@csc{#2}} -\def\CMathML@cot#1{\cot(#1)} -\newcommand{\Ccot}[2][]{\CMathML@cot{#2}} -\def\CMathML@sinh#1{\sinh(#1)} -\newcommand{\Csinh}[2][]{\CMathML@sinh{#2}} -\def\CMathML@cosh#1{\cosh(#1)} -\newcommand{\Ccosh}[2][]{\CMathML@cosh{#2}} -\def\CMathML@tanh#1{\tanh(#1)} -\newcommand{\Ctanh}[2][]{\CMathML@tanh{#2}} -\def\CMathML@sech#1{\mbox{sech}(#1)} -\newcommand{\Csech}[2][]{\CMathML@sech{#2}} -\def\CMathML@csch#1{\mbox{csch}(#1)} -\newcommand{\Ccsch}[2][]{\CMathML@csch{#2}} -\def\CMathML@coth#1{\mbox{coth}(#1)} -\newcommand{\Ccoth}[2][]{\CMathML@coth{#2}} -\def\CMathML@arcsin#1{\arcsin(#1)} -\newcommand{\Carcsin}[2][]{\CMathML@arcsin{#2}} -\def\CMathML@arccos#1{\arccos(#1)} -\newcommand{\Carccos}[2][]{\CMathML@arccos{#2}} -\def\CMathML@arctan#1{\arctan(#1)} -\newcommand{\Carctan}[2][]{\CMathML@arctan{#2}} -\def\CMathML@arccosh#1{\mbox{arccosh}(#1)} -\newcommand{\Carccosh}[2][]{\CMathML@arccosh{#2}} -\def\CMathML@arccot#1{\mbox{arccot}(#1)} -\newcommand{\Carccot}[2][]{\CMathML@arccot{#2}} -\def\CMathML@arccoth#1{\mbox{arccoth}(#1)} -\newcommand{\Carccoth}[2][]{\CMathML@arccoth{#2}} -\def\CMathML@arccsc#1{\mbox{arccsc}(#1)} -\newcommand{\Carccsc}[2][]{\CMathML@arccsc{#2}} -\def\CMathML@arcsinh#1{\mbox{arcsinh}(#1)} -\newcommand{\Carcsinh}[2][]{\CMathML@arcsinh{#2}} -\def\CMathML@arctanh#1{\mbox{arctanh}(#1)} -\newcommand{\Carctanh}[2][]{\CMathML@arctanh{#2}} - -\def\CMathML@exp#1{\exp(#1)} -\newcommand{\Cexp}[2][]{\CMathML@exp{#2}} -\def\CMathML@ln#1{\ln(#1)} -\newcommand{\Cln}[2][]{\CMathML@ln{#2}} -\def\CMathML@log#1#2{\log_{#1}(#2)} -\newcommand{\Clog}[3][]{\CMathML@log{#2}{#3}} -\def\CMathML@mean#1{\mbox{mean}(#1)} -\newcommand{\Cmean}[2][]{\CMathML@mean{#2}} -\def\CMathML@sdev#1{\mbox{std}(#1)} -\newcommand{\Csdev}[2][]{\CMathML@sdev{#2}} -\def\CMathML@var#1{\mbox{var}(#1)} -\newcommand{\Cvar}[2][]{\CMathML@var{#2}} -\def\CMathML@median#1{\mbox{median}(#1)} -\newcommand{\Cmedian}[2][]{\CMathML@median{#2}} -\def\CMathML@mode#1{\mbox{mode}(#1)} -\newcommand{\Cmode}[2][]{\CMathML@mode{#2}} -\def\CMathML@moment#1#2{\langle{#2}^{#1}\rangle}% degree, momentabout, scope -\newcommand{\Cmoment}[3][]{\CMathML@moment{#2}{#3}} -\def\CMathML@momentA#1#2{\langle{#2}^{#1}\rangle}% degree, momentabout, scope -\newcommand{\CmomentA}[4][]{\CMathML@momentA{#2}{#3}{#4}} -\def\CMathML@vector#1{(#1)} -\newcommand{\Cvector}[2][]{\CMathML@vector{#2}} -\def\CMathML@matrix#1#2{\left(\begin{array}{#1}#2\end{array}\right)}% row pattern, body -\newcommand{\Cmatrix}[3][]{\CMathML@matrix{#2}{#3}} -\def\CMathML@determinant#1{\left|#1\right|} -\newcommand{\Cdeterminant}[2][]{\CMathML@determinant{#2}} -\def\CMathML@transpose#1{#1^\top} -\newcommand{\Ctranspose}[2][]{\CMathML@transpose{#2}} -\def\CMathML@selector#1#2{#1_{#2}} -\newcommand{\Cselector}[3][]{\CMathML@selector{#2}{#3}} -\def\CMathML@vectproductOp{\cdot} -\newcommand{\CvectproductOp}{\CMathML@vectproductOp} -\def\CMathML@vectproduct#1#2{#1\CMathML@vectproductOp{#2}} -\newcommand{\Cvectproduct}[3][]{\CMathML@vectproduct{#2}{#3}} -\def\CMathML@scalarproduct#1#2{{#1}#2} -\newcommand{\Cscalarproduct}[3][]{\CMathML@scalarproduct{#2}{#3}} -\def\CMathML@outerproductOp{\times} -\newcommand{\CouterproductOp}{\CMathML@outerproductOp} -\def\CMathML@outerproduct#1#2{#1\CMathML@outerproductOp{#2}} -\newcommand{\Couterproduct}[3][]{\CMathML@outerproduct{#2}{#3}} -\def\CMathML@integers{{\mathbb{Z}}} -\newcommand{\Cintegers}[1][]{\CMathML@integers} -\def\CMathML@reals{{\mathbb{R}}} -\newcommand{\Creals}[1][]{\CMathML@reals} -\def\CMathML@rationals{{\mathbb{Q}}} -\newcommand{\Crationals}[1][]{\CMathML@rationals} -\def\CMathML@naturalnumbers{{\mathbb{N}}} -\newcommand{\Cnaturalnumbers}[1][]{\CMathML@naturalnumbers} -\def\CMathML@complexes{{\mathbb{C}}} -\newcommand{\Ccomplexes}[1][]{\CMathML@complexes} -\def\CMathML@primes{{\mathbb{P}}} -\newcommand{\Cprimes}[1][]{\CMathML@primes} -\def\CMathML@exponemtiale{e} -\newcommand{\Cexponemtiale}[1][]{\CMathML@exponemtiale} -\def\CMathML@imaginaryi{i} -\newcommand{\Cimaginaryi}[1][]{\CMathML@imaginaryi} -\def\CMathML@notanumber{{\mathrm{NaN}}} -\newcommand{\Cnotanumber}[1][]{\CMathML@notanumber} -\def\CMathML@true{{\mathrm{true}}} -\newcommand{\Ctrue}[1][]{\CMathML@true} -\def\CMathML@false{{\mathrm{false}}} -\newcommand{\Cfalse}[1][]{\CMathML@false} -\def\CMathML@emptyset{\emptyset} -\newcommand{\Cemptyset}[1][]{\CMathML@emptyset} -\def\CMathML@pi{\pi} -\newcommand{\Cpi}[1][]{\CMathML@pi} -\def\CMathML@eulergamma{\gamma} -\newcommand{\Ceulergamma}[1][]{\CMathML@eulergamma} -\def\CMathML@infinit{\infty} -\newcommand{\Cinfinit}[1][]{\CMathML@infinit} -\endinput -%% -%% End of file `cmathml.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/cmathml/cmathml.sty.ltxml b/Master/texmf-dist/tex/latex/stex/cmathml/cmathml.sty.ltxml deleted file mode 100644 index fdc0b2eae33..00000000000 --- a/Master/texmf-dist/tex/latex/stex/cmathml/cmathml.sty.ltxml +++ /dev/null @@ -1,974 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use LaTeXML::Document; -RequirePackage('LaTeX'); -sub remove_tokens_from_list { - my ($list, $pattern, $math) = @_; - if (ref $list) { - my @toks = $list->unlist; - @toks = grep($_->toString !~ /$pattern/, @toks); - ($math ? (LaTeXML::MathList->new(@toks)) : (LaTeXML::List)->new(@toks)); } - else { undef; } } - -sub remove_math_commas { - my ($whatsit, $argno) = @_; - my @args = $whatsit ? $whatsit->getArgs() : undef; - $argno--; - if ($args[$argno]) { - $args[$argno] = remove_tokens_from_list($args[$argno], ',', 1); - $whatsit->setArgs(@args); - } - return; -} -DefConstructor('\Capply [] {} {}', - "#2 #3"); -DefConstructor('\Ccn [] {}',"#2"); -DefConstructor('\Cci [] {}',"#2"); -DefConstructor('\Ccsymbol [] {}', - ""); -DefConstructor('\Cccinterval [] {}{}', - "" - . "" - . "#2" - . "#3"); -DefConstructor('\Ccointerval [] {}{}', - "" - . "" - . "#2" - . "#3"); -DefConstructor('\Cocinterval [] {}{}', - "" - . "" - . "#2" - . "#3"); -DefConstructor('\Coointerval [] {}{}', - "" - . "" - . "#2" - . "#3"); -DefConstructor('\Cinverse [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Clambda [] {}{}', - "" - . "" - . "#2" - . "#2" - . ""); -DefConstructor('\ClambdaDA [] {}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\Crestrict [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CcomposeOp []', - ""); -DefConstructor('\Ccompose [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\Cident []', - ""); -DefConstructor('\Cdomain [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccodomain [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cimage [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cpiecewise [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cpiece [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cotherwise [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cquotient [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CfactorialOp []', - ""); -DefConstructor('\Cfactorial [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CdivideOp []', - ""); -DefConstructor('\Cdivide [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CmaxOp []', - ""); -DefConstructor('\Cmax [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CminOp []', - ""); -DefConstructor('\Cmin [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CminusOp []', - ""); -DefConstructor('\Cminus [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cuminus [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CplusOp []', - ""); -DefConstructor('\Cplus [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\Cpower [] {} {}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CremOp []', - ""); -DefConstructor('\Crem [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CtimesOp []', - ""); -DefConstructor('\Ctimes [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CrootOp []', - ""); -DefConstructor('\Croot [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cgcd [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CandOp []', - ""); -DefConstructor('\Cand [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CorOp []', - ""); -DefConstructor('\Cor [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CxorOp []', - ""); -DefConstructor('\Cxor [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CnotOp []', - ""); -DefConstructor('\Cnot [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CimpliesOp []', - ""); -DefConstructor('\Cimplies [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CAndDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CAndCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\COrDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\COrCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CXorDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CXorCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\Cforall [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CforallCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\Cexists [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CexistsCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\Cabs [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cconjugate [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carg [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Creal [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cimaginary [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Clcm [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cfloor [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cceiling [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CeqOp []', - ""); -DefConstructor('\Ceq [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CneqOp []', - ""); -DefConstructor('\Cneq [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CgtOp []', - ""); -DefConstructor('\Cgt [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CltOp []', - ""); -DefConstructor('\Clt [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CgeqOp []', - ""); -DefConstructor('\Cgeq [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CleqOp []', - ""); -DefConstructor('\Cleq [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CequivalentOp []', - ""); -DefConstructor('\Cequivalent [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CapproxOp []', - ""); -DefConstructor('\Capprox [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CfactorofOp []', - ""); -DefConstructor('\Cfactorof [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CintOp []', - ""); -DefConstructor('\Cint [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CintLimits [] {}{}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . "#5" - . ""); -DefConstructor('\CintDA [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CintCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\Cdiff [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cddiff [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cpartialdiff [] {}{}{}', - "" - . "" - . "#3" - . "?#2(#2)()" - . "#4" - . ""); -DefConstructor('\Cdegree {}{}', - "" - . "" - . "#2" - . "#1" - . ""); -DefConstructor('\Climit [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\ClimitCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CtendstoOp []', - ""); -DefConstructor('\Ctendsto [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CtendstoAboveOp []', - ""); -DefConstructor('\CtendstoAbove [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CtendstoBelowOp []', - ""); -DefConstructor('\CtendstoBelow [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cdivergence [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cgrad [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Curl [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Claplacian [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cset [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CsetRes [] {}{}', - "" - . "" - . "#2" - . "#3" - . "#2" - . ""); -DefConstructor('\CsetCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CsetDA [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\ClistOp []', - ""); -DefConstructor('\Clist [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CunionOp []', - ""); -DefConstructor('\Cunion [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CintersectOp []', - ""); -DefConstructor('\Cintersect [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CinOp []', - ""); -DefConstructor('\Cin [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CnotinOp []', - ""); -DefConstructor('\Cnotin [] {}{}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CsubsetOp []', - ""); -DefConstructor('\Csubset [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CprsubsetOp []', - ""); -DefConstructor('\Cprsubset [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CnotsubsetOp []', - ""); -DefConstructor('\Cnotsubset [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CnotprsubsetOp []', - ""); -DefConstructor('\Cnotprsubset [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CsetdiffOp []', - ""); -DefConstructor('\Csetdiff [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CcardOp []', - ""); -DefConstructor('\Ccard [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\CcartesianproductOp []', - ""); -DefConstructor('\Ccartesianproduct [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\CsupsetOp []', - ""); -DefConstructor('\CprsupsetOp []', - ""); -DefConstructor('\CnotsupsetOp []', - ""); -DefConstructor('\CnotprsupsetOp []', - ""); -DefMacro('\Csupset[]{}','\Csubset[#1]{#2}'); -DefMacro('\Cprsupset[]{}','\Cprsubset[#1]{#2}'); -DefMacro('\Cnotsupset[]{}{}','\Cnotsubset[#1]{#3}{#2}'); -DefMacro('\Cnotprsupset[]{}{}','\Cnotprsubset[#1]{#3}{#2}'); -DefConstructor('\CUnionDAOp []', - ""); -DefConstructor('\CUnionDA [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CUnionCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CIntersectDaOp []', - ""); -DefConstructor('\CIntersectDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CIntersectCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CCartesianproductDaOp []', - ""); -DefConstructor('\CCartesianproductDa [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CCartesianproductCond [] {}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . ""); -DefConstructor('\CsumOp []', - ""); -DefConstructor('\CsumLimits [] {}{}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . "#5"); -DefConstructor('\CprodOp []', - ""); -DefConstructor('\CprodLimits [] {}{}{}{}', - "" - . "" - . "#2" - . "#3" - . "#4" - . "#5"); -DefConstructor('\Csin [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccos [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ctan [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Csec [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccsc [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccot [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Csinh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccosh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ctanh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Csech [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccsch [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ccoth [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carcsin [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccos [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carctan [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carcsec [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccsc [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccot [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carcsinh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccosh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carctanh [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carcsech [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccsch [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Carccoth [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cexp [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cln [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Clog [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cmean [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Csdev [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cvar [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cmedian [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cmode [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cmoment [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cvector [] {}', - "" - . "" - . "#2" - . "", - afterDigest=>sub { remove_math_commas($_[1], 2); }); -DefConstructor('\Cmatrix [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cdeterminant [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Ctranspose [] {}', - "" - . "" - . "#2" - . ""); -DefConstructor('\Cselector [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CvectorproductOp []', - ""); -DefConstructor('\Cvectorproduct [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\Cscalarproduct [] {}{}', - "" - . "" - . "#2" - . "#3" - . ""); -DefConstructor('\CouterproductOp []', - ""); -DefConstructor('\Couterproduct [] {}{}', - "" - . "" - . "#2" - . "#3" - . "");#$ -DefConstructor('\Cintegers []', - ""); -DefConstructor('\Creals []', - ""); -DefConstructor('\Crationals []', - ""); -DefConstructor('\Cnaturalnumbers []', - ""); -DefConstructor('\Ccomplexes []', - ""); -DefConstructor('\Cprimes []', - ""); -DefConstructor('\Cexponentiale []', - ""); -DefConstructor('\Cimaginaryi []', - ""); -DefConstructor('\Cnotanumber []', - ""); -DefConstructor('\Ctrue []', - ""); -DefConstructor('\Cfalse []', - ""); -DefConstructor('\Cemptyset []', - ""); -DefConstructor('\Cpi []', - ""); -DefConstructor('\Ceulergamma []', - ""); -DefConstructor('\Cinfinit []', - ""); -1; diff --git a/Master/texmf-dist/tex/latex/stex/cnx/cnx.cls b/Master/texmf-dist/tex/latex/stex/cnx/cnx.cls deleted file mode 100644 index 3908c72b577..00000000000 --- a/Master/texmf-dist/tex/latex/stex/cnx/cnx.cls +++ /dev/null @@ -1,142 +0,0 @@ -%% -%% This is file `cnx.cls', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% cnx.dtx (with options: `cls') -%% -\RequirePackage{sref} -\RequirePackage{graphicx} -\DeclareOption{letterpaper} - {\setlength\paperheight {11in}% - \setlength\paperwidth {8.5in}} -\DeclareOption{a4paper} - {\setlength\paperheight {297mm}% - \setlength\paperwidth {210mm}} -\ExecuteOptions{letterpaper} -\ProcessOptions -\input{size10.clo} -\pagenumbering{roman} -\addmetakey{cnxmodule}{name} -\srefaddidkey{cnxmodule}{id} -\newenvironment{cnxmodule}[1][]{\metasetkeys{cnxmodule}{#1}}{} -\newenvironment{ccontent}{}{} -\newcounter{section} -\srefaddidkey{sectioning}{id} -\newenvironment{csection}[2][]% -{\stepcounter{section}\strut\\[1.5ex]\noindent% -{\Large\bfseries\arabic{section}.~{#2}}\\[1.5ex] -\metasetkeys{sectioning}{#1}} -{} -\newcounter{subsection}[section] -\newenvironment{csubsection}[2][] -{\refstepcounter{subsection}\strut\\[1ex]\noindent% -{\large\bfseries{\arabic{section}.\arabic{subsection}.~#2\\[1ex]}}% -\metasetkeys{sectioning}{#1}}% -{} -\newcounter{subsubsection}[subsection] -\newenvironment{csubsubsection}[2][] -{\refstepcounter{subsubsection}\strut\\[.5ex]\noindent -{\bfseries\arabic{section}.\arabic{subsection}.\arabic{subsubsecction}~#2\\[.5ex]}% -\metasetkeys{sectioning}{#1}}{} -\srefaddidkey{para}{id} -\newenvironment{cpara}[1][]{\metasetkeys{para}{#1}}{\par} -\srefaddidkey{note} -\addmetakey{note}{type} -\newenvironment{cnote}[1][]% -{\metasetkeys{note}{#1}\par\noindent\strut\hfill\begin{minipage}{10cm}{\bfseries\note@type}:~}% -{\end{minipage}\hfill\strut\par} -\srefaddidkey{equation}{id} -\newenvironment{cequation}[1][]% -{\metasetkeys{equation}{#1}\begin{displaymath}} -{\end{displaymath}} -\srefaddidkey{cquote} -\addmetakey{cquote}{type} -\addmetakey{cquote}{src} -\newenvironment{cquote}[1][]{% -\metasetkeys{cquote}{#1}\begin{center}\begin{minipage}{.8\textwidth}}{\end{minipage}\end{center}} -\newcommand{\litem}[2][]{\item[#1]\label{#2}} -\srefaddidkey{example} -\addmetakey{example}{name} -\newenvironment{cexample}[1][]{\metasetkeys{example}{#1} -{\ifx\example@name\@empty\else\noindent\bfseries{\example@name}\fi}} -{} -\newcounter{cexercise} -\srefaddidkey{cexercise} -\addmetakey{cexercise}{name} -\newenvironment{cexercise}[1][]{\metasetkeys{cexercise}{#1} -{\ifx\cexercise@name\@empty\else\stepcounter{cexercise}\noindent\bfseries{\cexercise@name~\arabic{cexercise}}\fi}} -{} -\srefaddidkey{cproblem} -\newenvironment{cproblem}[1][]{\metasetkeys{cproblem}{#1}}{}{} -\srefaddidkey{csolution} -\newenvironment{csolution}[1][]{\metasetkeys{csolution}{#1}}{\par\noindent\bfseries{Solution}}{} -\srefaddidkey{rule} -\addmetakey{rule}{name} -\addmetakey{rule}{type} -\newenvironment{crule}[1][]{\metasetkeys{rule}{#1}% -{\noindent\bfseries{\rule@type:}\ifx\rule@name\@empty\else~(\rule@name)\fi}}% -{} -\srefaddidkey{statement} -\newenvironment{statement}[1][]{\metasetkeys{statement}{#1}}{} -\srefaddidkey{proof} -\newenvironment{proof}[1][]{\metasetkeys{proof}{#1}}{} -\srefaddidkey{definition} -\addmetakey{definition}{term} -\addmetakey{definition}{seealso} -\newenvironment{definition}[1][]{\metasetkeys{definition}{#1}{\noindent\bfseries{Definition:}}}{} -\srefaddidkey{meaning} -\newenvironment{cmeaning}[1][]{\metasetkeys{meaning}{#1}}{} -\addmetakey{cnxn}{document} -\addmetakey{cnxn}{target} -\addmetakey{cnxn}{strength} -\newcommand{\cnxn}[2][]% keys, link text -{\metasetkeys{cnxn}{#1}{\underline{#2}}\footnote{{\ttfamily\@ifx\cnxn@document\@empty\cnxn@document\fi\#\cnxn@target}}} -\newcommand\@makefntext[1]{\parindent 1em\noindent\hb@xt@1.8em{\hss\@makefnmark}#1} -\addmetakey{link}{src} -\newcommand{\link}[2][]{\metasetkeys{link}{#1}\underline{#2}} -\srefaddidkey{cfigure} -\addmetakey{cfigure}{type} -\addmetakey{cfigure}{caption} -\newcounter{figure} -\newcommand{\cfigure}[3][]{% cnx_keys, graphicx_keys, path -\begin{center}% -\includegraphics[#2]{#3}% -\metasetkeys{cfigure}{#1}\sref@target% -\ifx\cfigure@caption\@empty\else -\par\noindent Figure\refstepcounter{figure} {\arabic{figure}}: \cfigure@caption% -\protected@edef\@currentlabel{\arabic{figure}}% -\sref@label@id{Figure \thefigure}\fi -\end{center}} -\addmetakey{ccite}{src} -\newcommand{\ccite}[2][]{\metasetkeys{ccite}{#1}\emph{#2}} -\newcommand{\term}[1]{{\bfseries\underline{#1}}} -\addmetakey{metadata}{version} -\addmetakey{metadata}{created} -\addmetakey{metadata}{revised} -\newsavebox{\metadatabox} -\newenvironment{metadata}[1][]% -{\noindent\hfill\begin{lrbox}{\metadatabox} -\begin{minipage}{.8\textwidth}% -{\Large\bfseries CNX Module: \cnx@name\hfill\strut}\\[2ex]}% -{\end{minipage}\end{lrbox}\fbox{\usebox\metadatabox}\hfill} -\newenvironment{authorlist}{{\bfseries{Authors}:~}}{\\[1ex]} -\newenvironment{maintainerlist}{{\bfseries{Maintainers}:~}}{\\[1ex]} -\srefaddidkey{auth} -\addmetakey{auth}{honorific} -\addmetakey{auth}{firstname} -\addmetakey{auth}{other} -\addmetakey{auth}{surname} -\addmetakey{auth}{lineage} -\addmetakey{auth}{email} -\newcommand{\cnxauthor}[1][]{\metasetkeys{auth}{#1}\auth@first~\auth@sur,} -\newcommand{\maintainer}[1][]{\metasetkeys{auth}{#1}\auth@first~\auth@sur,} -\newenvironment{keywordlist}{\bfseries{Keywords}:~}{\\[1ex]} -\newcommand{\keyword}[1]{#1,} -\newenvironment{cnxabstract}% -{\par\noindent\strut\hfill\begin{minipage}{10cm}{\bfseries{Abstract}:~}}% -{\end{minipage}\hfill} -\endinput -%% -%% End of file `cnx.cls'. diff --git a/Master/texmf-dist/tex/latex/stex/cnx/cnx.cls.ltxml b/Master/texmf-dist/tex/latex/stex/cnx/cnx.cls.ltxml deleted file mode 100644 index 9dc46bd071f..00000000000 --- a/Master/texmf-dist/tex/latex/stex/cnx/cnx.cls.ltxml +++ /dev/null @@ -1,280 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('metakeys'); -RegisterNamespace('cnx'=>"http://cnx.rice.edu/cnxml"); -RegisterNamespace('md'=>"http://cnx.rice.edu/mdml/0.4"); -RegisterNamespace('bib'=>"http://bibtexml.sf.net/"); -RegisterNamespace('m'=>"http://www.w3.org/1998/Math/MathML"); -DocType("cnx:document", -"-//CNX//DTD CNXML 0.5 plus LaTeXML//EN", -"../dtd/cnxml+ltxml.dtd", -'#default'=>"http://cnx.rice.edu/cnxml", - 'md'=>"http://cnx.rice.edu/mdml/0.4", - 'bib'=>"http://bibtexml.sf.net/", - 'm'=>"http://www.w3.org/1998/Math/MathML", - 'ltx'=>"http://dlmf.nist.gov/LaTeXML"); -NewCounter('@itemizei', 'document', idprefix=>'I'); -NewCounter('@itemizeii', '@itemizei', idprefix=>'I'); -NewCounter('@itemizeiii', '@itemizeii', idprefix=>'I'); -NewCounter('@itemizeiv', '@itemizeiii',idprefix=>'I'); -NewCounter('@itemizev', '@itemizeiv', idprefix=>'I'); -NewCounter('@itemizevi', '@itemizev', idprefix=>'I'); - -NewCounter('enumi', '@itemizei', idprefix=>'i'); -NewCounter('enumii', '@itemizeii', idprefix=>'i'); -NewCounter('enumiii','@itemizeiii', idprefix=>'i'); -NewCounter('enumiv', '@itemizeiv', idprefix=>'i'); -# A couple of more levels, since we use these for ID's! -NewCounter('enumv', '@itemizev', idprefix=>'i'); -NewCounter('enumvi', '@itemizevi', idprefix=>'i'); - -DefMacro('\theenumi', '\arabic{enumi}'); -DefMacro('\theenumii', '\alph{enumii}'); -DefMacro('\theenumiii', '\roman{enumiii}'); -DefMacro('\theenumiv', '\Alph{enumiv}'); - -NewCounter('equation', 'document', idprefix=>'E'); -DefMacro('\theequation', '\arabic{equation}'); -DefMacro('\textwidth','16cm'); -Let('\thedocument@ID','\@empty'); -DefKeyVal('cnxmodule','name','Semiverbatim'); -DefKeyVal('cnxmodule','id','Semiverbatim'); -DefEnvironment('{document}','#body', - beforeDigest=> sub { AssignValue(inPreamble=>0); }, - afterDigest=> sub { $_[0]->getGullet->flush; return; }); -DefEnvironment('{cnxmodule} OptionalKeyVals:cnxmodule', - "&KeyVal('#1','name')\n#body\n", - afterDigestBegin => sub { - AssignValue('cnxmodule_id', - KeyVal($_[1]->getArg(1), 'id')->toString, - 'global'); - });#$ -Tag('cnx:document', afterClose => sub { - $_[1]->setAttribute('id', LookupValue('cnxmodule_id')); - }); -DefEnvironment('{ccontent}',"#body"); -DefKeyVal('sectioning','id','Semiverbatim'); -DefEnvironment('{csection}OptionalKeyVals:sectioning{}', - "\n" - . "?#2(#2\n)()" - . "#body\n\n"); -DefEnvironment('{csubsection}OptionalKeyVals:sectioning{}', - "\n" - . "?#2(#2\n)()" - . "#body\n\n"); -DefEnvironment('{csubsubsection}OptionalKeyVals:sectioning{}', - "\n" - . "?#2(#2\n)()" - . "#body\n\n"); -DefKeyVal('para','id','Semiverbatim'); -DefEnvironment('{cpara} OptionalKeyVals:para','#body'); -sub number_para { - my($document,$node,$whatsit)=@_; - # Get prefix from first parent with an id. - my(@parents)=$document->findnodes('ancestor::*[@id]',$node); # find 1st id'd parent. - my $prefix= (@parents ? $parents[$#parents]->getAttribute('id')."." : ''); - # Get the previous number within parent; Worried about intervening elements around para's, but... - my(@siblings)=$document->findnodes("preceding-sibling::cnx:para",$node); - my $n=1; - $n = $1+1 if(@siblings && $siblings[$#siblings]->getAttribute('id')=~/(\d+)$/); - $node->setAttribute(id=>$prefix."p$n"); } -Tag('cnx:para',afterOpen=>\&number_para); -DefConstructor('\par',sub { $_[0]->maybeCloseElement('cnx:para'); },alias=>"\\par\n"); -Tag('cnx:para', autoClose=>1, autoOpen=>1); -DefKeyVal('note','id','Semiverbatim'); -DefKeyVal('note','type','Semiverbatim'); -DefEnvironment('{cnote}OptionalKeyVals:note','#body'); -DefKeyVal('equation','id','Semiverbatim'); -DefEnvironment('{cequation} OptionalKeyVals:equation', - "" - . "" - . "#body" - . "", - mode=>'display_math'); -DefKeyVal('cquote','id','Semiverbatim'); -DefKeyVal('cquote','type','Semiverbatim'); -DefKeyVal('cquote','src','Semiverbatim'); -DefEnvironment('{cquote} OptionalKeyVals:cquote', - "#body"); -DefConstructor('\footnote[]{}',"#2"); -DefConstructor('\emph{}',"#1"); -DefConstructor('\[', - "" - . "" - . "" - . "#body" - . "" - . "" - ."", - beforeDigest=> sub{ $_[0]->beginMode('display_math'); }, - captureBody=>1, - properties=> sub { RefStepID('equation') }); -DefConstructor('\]' ,"",beforeDigest=> sub{ $_[0]->endMode('display_math'); }); -DefConstructor('\[', - "" - . "" - . "" - . "#body" - . "" - . "" - ."", - beforeDigest=> sub{ $_[0]->beginMode('display_math'); }, - captureBody=>1, - properties=> sub { RefStepID('equation') }); -DefConstructor('\]' ,"",beforeDigest=> sub{ $_[0]->endMode('display_math'); }); - -DefMacro('\eqnarray', '\@@eqnarray\@start@alignment'); -DefMacro('\endeqnarray', '\@finish@alignment\end@eqnarray'); -DefMacro('\csname eqnarray*\endcsname', '\@@eqnarray*\@start@alignment'); -DefMacro('\csname endeqnarray*\endcsname', '\@finish@alignment\end@eqnarray'); -DefConstructor('\@@eqnarray OptionalMatch:* AlignmentBody:\end@eqnarray', - sub { - my($document,$star,$body,%props)=@_; - $document->openElement('cnx:equation',refnum=>$props{refnum},id=>$props{id}); - $document->openElement('ltx:Math',mode=>'display'); - $document->openElement('ltx:XMath'); - constructAlignment($document,$body,attributes=>{name=>'eqnarray'}); - $document->closeElement('ltx:XMath'); - $document->closeElement('ltx:Math'); - $document->closeElement('cnx:equation'); }, - mode=>'display_math', - beforeDigest=>sub { alignmentBindings('rcl'); }, - properties=> sub { ($_[1] ? RefStepID('equation') : RefStepCounter('equation')); }, - afterDigest=>sub { - $_[1]->setProperty(body=>$_[1]->getArg(2));}, # So we get TeX - reversion=>'\begin{eqnarray#1}#2\end{eqnarray#1}'); -Tag('cnx:item', autoClose=>1); -DefConstructor('\item[]',"?#1(#1)"); -DefConstructor('\litem[]{}',"?#1(#1)"); -DefConstructor('\itemize@item[]', - "?#1(#1)", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\enumerate@item[]', - "?#1(#1)", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\description@item[]', - "?#1(#1)", - properties=>sub{ RefStepItemCounter(); }); -AssignValue(itemlevel=>0); -DefEnvironment('{itemize}', - "#body", - properties=>sub { beginItemize('itemize'); }); -DefEnvironment('{enumerate}', - "#body", - properties=>sub { beginItemize('enumerate'); }); -DefEnvironment('{description}', - "#body", - properties=>sub { beginItemize('description'); }); -DefEnvironment('{center}','#body'); -DefEnvironment('{minipage}{}','#body'); -DefEnvironment('{small}','#body'); -DefEnvironment('{footnotesize}','#body'); -DefEnvironment('{tiny}','#body'); -DefEnvironment('{scriptsize}','#body'); -DefConstructor('\ref Semiverbatim', "&LookupValue('LABEL@#1')"); -DefKeyVal('example','id','Semiverbatim'); -DefEnvironment('{cexample}OptionalKeyVals:example', - "#body"); -DefKeyVal('cexercise','id','Semiverbatim'); -DefKeyVal('cexercise','name','Semiverbatim'); -DefEnvironment('{cexercise}OptionalKeyVals:exercise', - "" - . "#body" - . ""); -DefKeyVal('cproblem','id','Semiverbatim'); -DefKeyVal('cproblem','name','Semiverbatim'); -DefEnvironment('{cproblem}OptionalKeyVals:cproblem', - "" - . "?&defined(&KeyVal(#1,'name'))(&KeyVal(#1,'name')\n)()" - . "#body" - . ""); -DefKeyVal('csolution','id','Semiverbatim'); -DefKeyVal('csolution','name','Semiverbatim'); -DefEnvironment('{csolution}OptionalKeyVals:cproblem', - "" - . "?&defined(&KeyVal(#1,'name'))(&KeyVal(#1,'name')\n)()" - . "#body" - . ""); -DefKeyVal('rule','id','Semiverbatim'); -DefKeyVal('rule','name','Semiverbatim'); -DefKeyVal('rule','type','Semiverbatim'); -DefEnvironment('{crule}OptionalKeyVals:rule', - "\n" - . "?&defined(&KeyVal(#1,'name'))(&KeyVal(#1,'name')\n)()" - . "\n#body\n" - . "\n"); -DefKeyVal('statement','id','Semiverbatim'); -DefEnvironment('{statement} OptionalKeyVals:statement','#body'); -DefKeyVal('proof','id','Semiverbatim'); -DefEnvironment('{proof}OptionalKeyVals:proof','#body'); -DefKeyVal('definition','id','Semiverbatim'); -DefKeyVal('definition','term','Semiverbatim'); -DefKeyVal('definition','seealso','Semiverbatim'); -DefEnvironment('{definition}OptionalKeyVals:definition', - "\n" - . "?&defined(&KeyVal(#1,'term'))(&KeyVal(#1,'term')\n)()" - . "\n#body\n" - . "?&defined(&KeyVal(#1,'seealso'))(&KeyVal(#1,'term')\n)()" - . "\n"); -DefKeyVal('meaning','id','Semiverbatim'); -DefEnvironment('{cmeaning}OptionalKeyVals:meaning','#body'); -DefKeyVal('cnxn','document','Semiverbatim'); -DefKeyVal('cnxn','target','Semiverbatim'); -DefKeyVal('cnxn','strength','Semiverbatim'); -DefConstructor('\cnxn OptionalKeyVals:cnxn {}','#1'); -DefKeyVal('link','src','Semiverbatim'); -DefConstructor('\link OptionalKeyVals:link {}','#2'); -DefKeyVal('cfigure','id','Semiverbatim'); -DefKeyVal('cfigure','name','Semiverbatim'); -DefKeyVal('cfigure','type','Semiverbatim'); -DefKeyVal('cfigure','caption','Semiverbatim'); -DefConstructor('\cfigure OptionalKeyVals:cfigure Semiverbatim Semiverbatim', - "" - . "?&defined(&KeyVal(#1,'name'))(&KeyVal(#1,'name')\n)()" - . "" - . "?&defined(&KeyVal(#1,'caption'))(&KeyVal(#1,'caption')\n)()" - . ""); -DefKeyVal('ccite','src','Semiverbatim'); -DefConstructor('\ccite OptionalKeyVals:ccite {}','#2'); -DefConstructor('\term[]{}',"#2"); -DefKeyVal('metadata','version','Semiverbatim'); -DefKeyVal('metadata','created','Semiverbatim'); -DefKeyVal('metadata','revised','Semiverbatim'); -DefEnvironment('{metadata}OptionalKeyVals:metadata', - "\n" - . "&KeyVal('#1','version')\n" - . "&KeyVal('#1','created')\n" - . "&KeyVal('#1','revised')\n" - . "#body\n" - . ""); -DefEnvironment('{authorlist}',"#body"); -DefEnvironment('{maintainerlist}',"#body"); -DefKeyVal('auth','id','Semiverbatim'); -DefKeyVal('auth','firstname','Semiverbatim'); -DefKeyVal('auth','surname','Semiverbatim'); -DefKeyVal('auth','email','Semiverbatim'); -DefConstructor('\cnxauthor OptionalKeyVals:auth', - "\n" - . "?&defined(&KeyVal(#1,'honorific'))(&KeyVal('#1','honorific')\n)()" - . "?&defined(&KeyVal(#1,'firstname'))(&KeyVal('#1','firstname')\n)()" - . "?&defined(&KeyVal(#1,'other'))(&KeyVal('#1','other')\n)()" - . "?&defined(&KeyVal(#1,'surname'))(&KeyVal('#1','surname')\n)()" - . "?&defined(&KeyVal(#1,'lineage'))(&KeyVal('#1','lineage')\n)()" - . "?&defined(&KeyVal(#1,'email'))(&KeyVal('#1','email')\n)()" - . "\n"); -DefConstructor('\maintainer OptionalKeyVals:auth', - "\n" - . "?&defined(&KeyVal(#1,'honorific'))(&KeyVal('#1','honorific')\n)()" - . "?&defined(&KeyVal(#1,'firstname'))(&KeyVal('#1','firstname')\n)()" - . "?&defined(&KeyVal(#1,'other'))(&KeyVal('#1','other')\n)()" - . "?&defined(&KeyVal(#1,'surname'))(&KeyVal('#1','surname')\n)()" - . "?&defined(&KeyVal(#1,'lineage'))(&KeyVal('#1','lineage')\n)()" - . "?&defined(&KeyVal(#1,'email'))(&KeyVal('#1','email')\n)()" - . "\n"); -DefEnvironment('{keywordlist}',"\n#body\n"); -DefConstructor('\keyword {}',"#1"); -DefEnvironment('{cnxabstract} OptionalKeyVals:cnxabstract', - "\n#body\n\n"); -1; diff --git a/Master/texmf-dist/tex/latex/stex/dcm/dcm.sty b/Master/texmf-dist/tex/latex/stex/dcm/dcm.sty deleted file mode 100644 index 0f92fe09309..00000000000 --- a/Master/texmf-dist/tex/latex/stex/dcm/dcm.sty +++ /dev/null @@ -1,178 +0,0 @@ -%% -%% This is file `dcm.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% dcm.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{dcm}[2010/06/25 v0.3 Dublin Core Metadata] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\ProcessOptions -\RequirePackage{sref} -\addmetakey{dcm@person}{id} -\addmetakey{dcm@person}{birthdate} -\addmetakey{dcm@person}{email} -\addmetakey{dcm@person}{url} -\addmetakey{dcm@person}{affiliation} -\addmetakey{dcm@person}{personaltitle} -\addmetakey{dcm@person}{academictitle} -\addmetakey{dcm@person}{department} -\addmetakey{dcm@person}{workaddress} -\addmetakey{dcm@person}{privaddress} -\addmetakey{dcm@person}{worktel} -\addmetakey{dcm@person}{privtel} -\addmetakey{dcm@person}{workfax} -\addmetakey{dcm@person}{privfax} -\addmetakey{dcm@person}{worktelfax} -\addmetakey{dcm@person}{privtelfax} -\def\dcm@pers@def#1#2{\expandafter\xdef\csname dcm@person@\dcm@person@id @#1\endcsname{#2}} -\def\dcm@pers@ref#1#2{\csname dcm@person@#1@#2\endcsname} -\let\dcm@persons=\relax -\newcommand{\DCMperson}[2][]{\metasetkeys{dcm@person}{#1} -\ifx\dcm@person@id\@empty\@latex@warning{key 'id' undefined in DCMperson}\else -\dcm@pers@def{name}{#2} -\dcm@pers@def{email}{\dcm@person@email} -\dcm@pers@def{birthdate}{\dcm@person@birthdate} -\dcm@pers@def{url}{\dcm@person@url} -\dcm@pers@def{affiliation}{\dcm@person@affiliation} -\dcm@pers@def{workaddress}{\dcm@person@workaddress} -\dcm@pers@def{privaddress}{\dcm@person@privaddress} -\dcm@pers@def{personaltitle}{\dcm@person@personaltitle} -\dcm@pers@def{academictitle}{\dcm@person@academictitle} -\dcm@pers@def{department}{\dcm@person@department} -\dcm@pers@def{workaddress}{\dcm@person@workaddress} -\dcm@pers@def{privaddress}{\dcm@person@privaddress} -\dcm@pers@def{worktel}{\dcm@person@worktel} -\dcm@pers@def{privtel}{\dcm@person@privtel} -\dcm@pers@def{workfax}{\dcm@person@workfax} -\dcm@pers@def{privfax}{\dcm@person@privfax} -\dcm@pers@def{worktelfax}{\dcm@person@worktelfax} -\dcm@pers@def{privtelfax}{\dcm@person@privtelfax} -\@ifundefined{dcm@persons}{\xdef\dcm@persons{\dcm@person@id}}{\xdef\dcm@persons{\dcm@persons,\dcm@person@id}} -\fi} -\newenvironment{DCmetadata}[1][]% -{\def\@style{#1}} % to set the way things are presented. -{\@ifundefined{dcm@\@style @block}{\message{style {\@style} not defined}}{\csname dcm@\@style @block\endcsname}} -\def\dcm@tabline#1#2{\xdef\tab@line{}% -\@for\@p:={#1}\do{\xdef\tab@line{\tab@line&\dcm@pers@ref\@p{#2}}} -\tab@line} -\def\dcm@atabline#1#2#3{\xdef\tab@line{}% -\@for\@p:={#1}\do{\xdef\tab@line{\tab@line: \dcm@pers@ref\@p{#3}}} -\tab@line} -\def\dcm@bitabline#1#2#3#4{\xdef\tab@line{}% -\@for\@p:={#1}\do{\xdef\tab@line{\tab@line&\dcm@pers@ref\@p{#2} #3 \dcm@pers@ref\@p{#4}}} -\tab@line} -\def\DCMcreators#1{\@for\@I:=#1\do{% -\ifx\csname dcm@person@\@I @id\endcsname\@empty% undefined \dcm@person@id -\PackageError{dcm}{reference to undefined DCMperson \@I}% -{you must define a person with id=\@I\MessageBreak% -via the macro \protect\DCMperson, before you can use it in \protect\DCMcreators}\fi}% -\def\dcm@creators{#1}} -\def\DCMcontributors#1{\@for\@I:=#1\do{% -\ifx\csname dcm@person@\@I @id\endcsname\@empty% undefined \dcm@person@id -\PackageError{dcm}{reference to undefined DCMperson \@I}% -{you must define a person with id=\@I\MessageBreak% -via the macro \protect\DCMperson, before you can use it in \protect\DCMcontributors}}% -\else% all \dcm@person@id in the list are defined -\def\dcm@contributors{#1}\fi} -\def\DCMtitle#1{\def\dcm@title{#1}\providecommand{\dcm@shorttitle}{#1}} -\def\dcm@subtitle{} -\def\DCMsubtitle#1{\def\dcm@subtitle{#1}} -\def\dcm@shorttitle{} -\def\DCMshorttitle#1{\def\dcm@shorttitle{#1}} -\def\DCMsubject#1{\def\dcm@subject{#1}} -\long\def\DCMdescription#1{\long\def\dcm@description{#1}} -\def\DCMpublisher#1{\def\dcm@publisher{#1}} -\def\dcm@date{\today} -\def\DCMdate#1{\def\dcm@date{#1}} -\def\DCMtype#1{\def\dcm@type{#1}} -\def\DCMidentifier#1#2{\def\dcm@scheme{#1}\def\dcm@identifier{#2}} -\def\DCMsource#1{\def\dcm@source{#1}} -\def\DCMlanguage#1{\def\dcm@language{#1}} -\def\DCMrelation#1{\def\dcm@relation{#1}} -\def\DCMrights#1{\long\def\dcm@rights{#1}} -\def\DCMlicense#1{\def\dcm@license{#1}} -\def\dcm@license{All rights reserved} -\def\DCMlicensenotice#1{\long\def\dcm@license{\\[1ex]License: #1}} -\def\DCMcopyrightnotice#1#2{\DCMrights{Copyright {\copyright} #1: #2}} -\def\cclicense#1{\def\attribution{\def\dcm@by{yes}} - \def\noncommercial{\def\dcm@nc{yes}} - \def\sharealike{\defdcm@sharealike{yes}} - \def\noderivativeworks{\def\dcm@derivatives{no}}} -\long\def\DCMabstract#1{\long\def\dcm@abstract{#1}} -\def\dcm@authorblock{\newcounter{authors}\stepcounter{authors} -{\let\tabularnewline\relax - \@for\@I:=\dcm@creators\do{\stepcounter{authors}} - \def\@authors{}\def\@affs{}\def\@urls{} - \@for\@I:=\dcm@creators\do - {\xdef\@authors{\@authors&\csname dcm@person@\@I @name\endcsname} - \xdef\@affs{\@affs&\csname dcm@person@\@I @affiliation\endcsname} - \xdef\@urls{\@urls&\csname dcm@person@\@I @url\endcsname}} - \message{authors: \@authors}} - \begin{tabular}[t]{l*{\theauthors}{c}}\@authors\\\@affs\\\@urls\end{tabular}} -\def\dcm@titlepage@block{\begin{titlepage} - \null\vfil\vskip 60\p@ - \begin{center} - \ifx\dcm@title\@empty - \PackageWarning{dcm}{No title specified}{\LARGE Add title here\par} - \else\LARGE \dcm@title \par\fi - \ifx\dcm@subtitle\@empty - \vskip 3em\Large \dcm@subtitle \par\vskip 3em - \else\large\lineskip .75em\dcm@authorblock\vskip 1.5em\fi - \ifx\dcm@date\@empty - \PackageWarning{dcm}{No date specified}{\large\today\par} - \else{\large\dcm@date\par}\vskip 2em\fi - \end{center}\vskip2em - \ifx\dcm@abstract\@empty - \PackageWarning{dcm}{No Abstract specified}\else - \begin{quote}\textbf\dcm@abstract@heading:\dcm@abstract\end{quote}\fi - \vskip 2em\par\vfil\noindent - {\small\noindent\dcm@rights\dcm@license} - \end{titlepage}} -\def\dcm@maketitle@block{\def\@title{\dcm@title\ifx\dcm@subtitle\empty\else\newline\dcm@subtitle\fi} -\def\@author{\dcm@authorblock}\def\@date{\dcm@date}\maketitle} -\srefaddidkey{dcm@sect} -\addmetakey{dcm@sect}{short} -\addmetakey{dcm@sect}{creators} -\addmetakey{dcm@sect}{contributors} -\def\dcm@section#1#2#3{\def\dcm@sect@type{#1}\metasetkeys{dcm@sect}{#3}\sref@target% -\ifx\dcm@sect@short\@empty\csname #1\endcsname{#2}% -\else\csname #1\endcsname[\dcm@sect@short]{#2}\fi~% -\@ifundefined{sect@style} % -{\dcm@section@default@style{#1}}% -{\csname dcm@section@\sect@style @style\endcsname{#1}}} -\def\dcm@section@default@style#1{% -\ifx\dcm@sect@creators\@empty\else% -\textbf{\dcm@creators@heading}:% -\@for\@I:=\dcm@sect@creators\do{~\csname dcm@person@\@I @name\endcsname}\fi% -\ifx\dcm@sect@contributors\@empty\else% there are contributors -\dcm@contributors@connector% -\@for\@I:=\dcm@sect@contributors\do{~\csname dcm@person@\@I @name\endcsname}\\\fi} -\newcommand{\DCMchapter}[2][]% -{\dcm@section{chapter}{#2}{#1}\sref@label@id{\dcm@chapter@heading\ \thechapter}} -\newcommand{\DCMsection}[2][]% -{\dcm@section{section}{#2}{#1}\sref@label@id{\dcm@section@heading\ \thesection}} -\newcommand{\DCMsubsection}[2][]% -{\dcm@section{subsection}{#2}{#1}\sref@label@id{\dcm@subsection@heading\ \thesubsection}} -\newcommand{\DCMsubsubsection}[2][]% -{\dcm@section{subsubsection}{#2}{#1}\sref@label@id{\dcm@subsubsection@heading\ \thesubsubsection}} -\newcommand{\DCMparagraph}[2][]% -{\dcm@section{paragraph}{#2}{#1}\sref@label@id{this \dcm@paragraph@heading}} -\def\ISOtimestamp{\count1=\time\divide\count1 by 60 % hours -\count2=\count1\multiply\count2 by 60% minutes in \count1 hours -\count3=\time\advance\count3 by -\count2 % minutes -\the\year -\ifnum\month>9\else0\fi\the\month-\ifnum\day>9\else0\fi\the\day -T\ifnum\count1>9\else0\fi\the\count1:\ifnum\count3>9\else0\fi\the\count3:00Z} -\def\dcm@abstract@heading{Abstract} -\def\dcm@creators@heading{Author(s)} -\def\dcm@contributors@connector{with contributions from} -\def\dcm@chapter@heading{Chapter} -\def\dcm@section@heading{Section} -\def\dcm@subsection@heading{Subsection} -\def\dcm@subsubsection@heading{Subsubsection} -\def\dcm@paragraph@heading{Paragraph} -\endinput -%% -%% End of file `dcm.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/dcm/dcm.sty.ltxml b/Master/texmf-dist/tex/latex/stex/dcm/dcm.sty.ltxml deleted file mode 100644 index cdcc2bb2903..00000000000 --- a/Master/texmf-dist/tex/latex/stex/dcm/dcm.sty.ltxml +++ /dev/null @@ -1,159 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Global; -use LaTeXML::Package; -RequirePackage('sref'); - sub getKeyValue_noDelim { - my ($keyval,$key)=@_; - my $valuelist = ToString($keyval->getValue($key)); - $valuelist =~ s/^{(.*)}$/$1/g if $valuelist; - return $valuelist; -} -sub ExportMetadata { - my $keys = shift; - my($id, $email,$affill,$address,$url,$name)=$keys - && map(getKeyValue_noDelim($keys,$_),qw(id email affiliation address url name)); - if ($id) { - AssignValue('DCM_'.$id.'_email',$email,'global') if $email; - AssignValue('DCM_'.$id.'_affiliation',$affill,'global') if $affill; - AssignValue('DCM_'.$id.'_address',$email,'global') if $email; - AssignValue('DCM_'.$id.'_url',$url,'global') if $url; - AssignValue('DCM_'.$id.'_name',$name,'global') if $name; - } else {print STDERR "Warning: key 'id' undefined in \\DCMperson\n"}; - return;} -DefKeyVal('dcm@person','id','Semiverbatim'); -DefKeyVal('dcm@person','birthdate','Semiverbatim'); -DefKeyVal('dcm@person','email','Semiverbatim'); -DefKeyVal('dcm@person','url','Semiverbatim'); -DefKeyVal('dcm@person','affiliation','Semiverbatim'); -DefKeyVal('dcm@person','personaltitle','Semiverbatim'); -DefKeyVal('dcm@person','academictitle','Semiverbatim'); -DefKeyVal('dcm@person','department','Semiverbatim'); -DefKeyVal('dcm@person','workaddress','Semiverbatim'); -DefKeyVal('dcm@person','privaddress','Semiverbatim'); -DefKeyVal('dcm@person','worktel','Semiverbatim'); -DefKeyVal('dcm@person','privtel','Semiverbatim'); -DefKeyVal('dcm@person','workfax','Semiverbatim'); -DefKeyVal('dcm@person','privfax','Semiverbatim'); -DefKeyVal('dcm@person','worktelfax','Semiverbatim'); -DefKeyVal('dcm@person','privtelfax','Semiverbatim'); - -DefConstructor('\DCMperson OptionalKeyVals:dcm@person {}','', -afterDigest=>sub { - my ($stomach,$whatsit)=@_; - my $keys=$whatsit->getArg(1); - my $name=ToString($whatsit->getArg(2)); - $keys->setValue('name',$name); - ExportMetadata($keys); - return; -});#$ -sub FishOutMetadata { - my ($document,$keyvals)=@_; - foreach my $role(qw(creators contributors)) { - my $idlist_string=getKeyValue_noDelim($keyvals,$role); - my @ids = split(/,\s*/, $idlist_string); - foreach my $id(@ids) { - my $name = LookupValue('DCM_'.$id.'_name'); - if ($name) { - my $prop_role = $role; -chop $prop_role if $prop_role; - $document->insertElement("dc:$prop_role",$name) if $role; - } else {print STDERR "Warning: no $role with 'id' $id !\n";} - } - } - return;}#$ -DefEnvironment('{DCmetadata}[]', "#body"); -DefConstructor('\DCMcreators{}',sub{ - my ($document,$args,%properties) = @_; - my $keyval = LaTeXML::KeyVals->new('dcm@person',T_BEGIN,T_END,('creators'=>$args)); - FishOutMetadata($document,$keyval); - return;}); -DefConstructor('\DCMcontributors{}',sub{ - my ($document,$args,%properties) = @_; - my $keyval = LaTeXML::KeyVals->new('dcm@person',T_BEGIN,T_END,('contributors'=>$args)); - FishOutMetadata($document,$keyval); - return;}); -DefConstructor('\DCMtitle{}',"#1"); -DefConstructor('\DCMsubject{}',"#1"); -DefConstructor('\DCMdescription{}',"#1"); -DefConstructor('\DCMpublisher{}',"#1"); -DefConstructor('\DCMdate{}',"#1"); -DefConstructor('\DCMtype{}',"#1"); -DefConstructor('\DCMidentifier{}{}',"#2"); -DefConstructor('\DCMsource{}',"#1"); -DefConstructor('\DCMlanguage{}',"#1"); -DefConstructor('\DCMrelation{}',"#1"); -DefConstructor('\DCMrights{}',"#1"); -DefMacro('\DCMlicensenotice{}','\DCMrights{#1}'); -DefMacro('\DCMcopyrightnotice{}{}','\DCMrights{Copyright {\copyright} #1: #2}'); -DefConstructor('\cclicense{}',"#1"); -DefConstructor('\attribution',""); -DefConstructor('\noncommercial',""); -DefConstructor('\sharealike',""); -DefConstructor('\noderivativeworks',""); -DefConstructor('\DCMabstract{}',"#1"); -Tag('omdoc:omgroup', autoClose=>1); -DefConstructor('\DCMchapter OptionalKeyVals:omgroup {}',sub { - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:chapter',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -DefConstructor('\DCMsection OptionalKeyVals:omgroup {}',sub{ - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:section',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -DefConstructor('\DCMsubsection OptionalKeyVals:omgroup {}',sub{ - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:subsection',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -DefConstructor('\DCMsubsubsection OptionalKeyVals:omgroup {}',sub{ - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:subsubsection',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -DefConstructor('\DCMparagraph OptionalKeyVals:omgroup {}',sub{ - my ($document,$keyvals,$title,%properties) = @_; - my $id=$keyvals->getValue('id')||""; - $document->openElement('omdoc:paragraph',('xml:id'=>$id)); - $document->openElement('omdoc:metadata'); - $document->insertElement('dc:title',$title); - FishOutMetadata($document,$keyvals); - return;}); -Tag('omdoc:chapter',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:section',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:subsection',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:subsubsection',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:paragraph',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('omdoc:subparagraph',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:description',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:date',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:creator',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:contributor',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:title',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:subject',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:publisher',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:type',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:identifier',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:language',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -Tag('dc:rights',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1); -RawTeX('\def\ISOtimestamp{\count1=\time\divide\count1 by 60 % hours -\count2=\count1\multiply\count2 by 60% minutes in \count1 hours -\count3=\time\advance\count3 by -\count2 % minutes -\the\year -\the\month-\the\day T\the\count1:\the\count3:00Z}'); -Tag('dc:title',afterOpen=>\&numberIt,afterClose=>\&locateIt); -1; diff --git a/Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty b/Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty deleted file mode 100644 index 98415d16b8e..00000000000 --- a/Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty +++ /dev/null @@ -1,125 +0,0 @@ -%% -%% This is file `hwexam.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% hwexam.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{hwexam}[2010/06/25 v0.9b homework assignments and exams] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\iftest\testfalse -\newif\ifsolutions\solutionsfalse -\DeclareOption{test}{\testtrue\solutionsfalse} -\newif\ifmultiple\multiplefalse -\DeclareOption{multiple}{\multipletrue} -\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{problem}} -\ProcessOptions -\RequirePackage{keyval}[1997/11/10] -\RequirePackage{problem} -\addmetakey{assig}{number} -\addmetakey*{assig}{title} -\addmetakey{assig}{type} -\addmetakey{assig}{given} -\addmetakey{assig}{due} -\def\given@due#1#2{% -\ifx\assig@given\@empty\else\ifx\assig@due\@empty\else{#1}\fi\fi% -\ifx\assig@given\@empty\else{Given {\assig@given}}\fi% -\ifx\assig@given\@empty\else\ifx\assig@due\@empty\else{, }\fi\fi% -\ifx\assig@due\@empty\else{Due {\assig@due}}\fi% -\ifx\assig@given\@empty\else{\ifx\assig@due\@empty\else{#2}\fi}\fi} -\ifmultiple -\def\assignment@titleblock{% -\@ifundefined{assig@number}{\stepcounter{section}}{\setcounter{section}{\assig@number}}% -\section*{\document@hwexamtype~\arabic{section}:~\assig@title\given@due{\\(})}% -\addcontentsline{toc}{section}{\document@hwexamtype~{\arabic{section}}:~\assig@title}% -\setcounter{problem}{0}} -\else -\def\assignment@titleblock{% -\setcounter{section}{\assig@number} -\begin{center}\bf -\Large\@title\\ -\document@hwexamtype~\assig@number:~\assig@title\strut\\ -\large{\given@due()} -\end{center}} -\fi -\def\assignment@process@keys#1{\metasetkeys{assig}{#1} -\ifx\inclassig@title\@empty\else\def\assig@title{\inclassig@title}\fi -\ifx\inclassig@type\@empty\else\def\assig@type{\inclassig@type}\fi -\ifx\inclassig@number\@empty\else\def\assig@number{\inclassig@number}\fi -\ifx\inclassig@due\@empty\else\def\assig@due{\inclassig@due}\fi -\ifx\inclassig@given\@empty\else\def\assig@given{\inclassig@given}\fi} -\def\inclassig@title{} -\def\inclassig@type{} -\def\inclassig@number{} -\def\inclassig@due{} -\def\inclassig@given{} -\newenvironment{assignment}[1][]{\assignment@process@keys{#1}% -\assignment@titleblock}{} -\addmetakey[\assig@default@type]{document}{hwexamtype} -\addmetakey{inclassig}{number} -\addmetakey{inclassig}{title} -\addmetakey{inclassig}{type} -\addmetakey{inclassig}{given} -\addmetakey{inclassig}{due} -\newcommand{\includeassignment}[2][]{\metasetkeys{inclassig}{#1}\include{#2}} -\newcommand{\inputassignment}[2][]{\metasetkeys{inclassig}{#1}\input{#2}} -\addmetakey{quizheading}{tas} -\newcommand\quizheading[1]{\def\@tas{#1}% -\large\noindent NAME: \hspace{8cm} MAILBOX:\\[2ex]% -\ifx\@tas\@empty\else% -\noindent YOUR TA: \@for\@I:=\@tas\do{$\Box$ \@I\hspace*{1em}}\\[2ex]\fi} -\addmetakey{testheading}{min} -\addmetakey{testheading}{duration} -\addmetakey{testheading}{reqpts} -\newenvironment{testheading}[1][]{\metasetkeys{testheading}{#1} -{\noindent\large{}Name: \hfill Matriculation Number:\hspace*{2cm}\strut\\[1ex] -\begin{center}\Large\textbf{\@title}\\[1ex]\large\@date\\[3ex]\end{center} -{\textbf{You have -\ifx\test@heading@duration\@empty\testheading@min minutes\else\testheading@duration\fi -(sharp) for the test}};\\ Write the solutions to the sheet.}\par\noindent - -\newcount\check@time\check@time=\testheading@min -\advance\check@time by -\theassignment@totalmin -The estimated time for solving this exam is {\theassignment@totalmin} minutes, -leaving you {\the\check@time} minutes for revising your exam. - -\newcount\bonus@pts\bonus@pts=\theassignment@totalpts -\advance\bonus@pts by -\testheading@reqpts -You can reach {\theassignment@totalpts} points if you solve all problems. You will only need -{\testheading@reqpts} points for a perfect score, i.e.\ {\the\bonus@pts} points are -bonus points. \vfill -\begin{center} - {\Large\em - Different problems test different skills and knowledge, so do not get stuck on - one problem.}\vfill\par\correction@table \\[3ex] -\end{center}} -{\newpage} -\def\testspace#1{\iftest\vspace*{#1}\fi} -\def\testnewpage{\iftest\newpage\fi} -\def\testemptypage{\iftest\begin{center}This page was intentionally left - blank for extra space\end{center}\vfill\eject\else\fi} -\def\@problem#1#2#3{\stepcounter{assignment@probs} -\def\@test{#2}\ifx\@test\@empty\else\addtocounter{assignment@totalpts}{#2}\fi -\def\@test{#3}\ifx\@test\@empty\else\addtocounter{assignment@totalmin}{#3}\fi -\xdef\correction@probs{\correction@probs & #1}% -\xdef\correction@pts{\correction@pts & #2} -\xdef\correction@reached{\correction@reached &}} -\newcounter{assignment@probs} -\newcounter{assignment@totalpts} -\newcounter{assignment@totalmin} -\def\correction@probs{prob.}% -\def\correction@pts{total}% -\def\correction@reached{reached}% -\stepcounter{assignment@probs} -\def\correction@table{\begin{tabular}{|l|*{\theassignment@probs}{c|}|p{3cm}|}\hline% -&\multicolumn{\theassignment@probs}{c||}% -{\footnotesize To be used for grading, do not write here} &\\\hline -\correction@probs & Sum & grade\\\hline -\correction@pts &\theassignment@totalpts & \strut\hspace{3cm}\strut\\\hline -\correction@reached & & \\[.7cm]\hline -\end{tabular}} -\endinput -%% -%% End of file `hwexam.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty.ltxml b/Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty.ltxml deleted file mode 100644 index e0857729fe8..00000000000 --- a/Master/texmf-dist/tex/latex/stex/hwexam/hwexam.sty.ltxml +++ /dev/null @@ -1,29 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('problem'); -RegisterNamespace('assig'=>"http://omdoc.org/ontology/assignments#"); -RegisterDocumentNamespace('assig'=>"http://omdoc.org/ontology/assignments#"); -DefEnvironment('{assignment} OptionalKeyVals:assig', - "" - . "" - . "" - . "Assignment ?&KeyVal(#1,'num')(&KeyVal(#1,'num').)()" - . "?&KeyVal(#1,'title')((&KeyVal(#1,'title')))" - . "" - . "?&KeyVal(#1,'given')(&KeyVal(#1,'given'))()" - . "?&KeyVal(#1,'due')(&KeyVal(#1,'due'))()" - . "?&KeyVal(#1,'pts')(&KeyVal(#1,'pts'))()" - . "" - . "#body" - ."\n"); -DefMacro('\includeassignment [] {}','\input{#2}'); -DefMacro('\inputassignment [] {}','\input{#2}'); -DefEnvironment('{testheading}OptionalKeyVals:omdoc',''); -DefConstructor('\testspace{}',''); -DefConstructor('\testnewpage',''); -DefConstructor('\testemptypage',''); -1; diff --git a/Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty b/Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty deleted file mode 100644 index f10b5379d67..00000000000 --- a/Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty +++ /dev/null @@ -1,49 +0,0 @@ -%% -%% This is file `metakeys.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% metakeys.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{metakeys}[2010/09/02 v0.9 Framework for Metadata Keys] -\newif\ifmetakeys@showmeta\metakeys@showmetafalse -\DeclareOption{showmeta}{\metakeys@showmetatrue} -\ProcessOptions -\RequirePackage{keyval}[1997/11/10] -\newcommand\addmetakey{\@ifstar\addmetakey@star\addmetakey@nostar} -\newcommand\addmetakey@star[3][]{\metakeys@ext@clear@keys{#2}{#3}{#1}% -\metakeys@initialize@showkeys{#2}% -\define@key{#2}{#3}[#1]{\expandafter\gdef\csname #2@#3\endcsname{##1}}} -\newcommand\addmetakey@nostar[3][]{\metakeys@ext@showkeys{#2}{#3}\addmetakey@star[#1]{#2}{#3}} -\newcommand\metasetkeys[2]{\@nameuse{clear@#1@keys}\setkeys{#1}{#2}% -\ifmetakeys@showmeta% -\edef\@@keys{\@nameuse{#1@showkeys}}% -\metakeys@show@keys{#1}{\@for\@I:=\@@keys\do{\metakeys@show@keyval{#1}{\@I}}}% -\fi} -\newcommand\metakeys@ext@clear@keys[3]{\@metakeys@ext@clear@keys{#1}{#1@#2}{#3}} -\newcommand\@metakeys@ext@clear@keys[3]{\@ifundefined{clear@#1@keys}% -{\expandafter\def\csname clear@#1@keys\endcsname% -{\expandafter\gdef\csname #2\endcsname{#3}}}% -{\expandafter\g@addto@macro\csname clear@#1@keys\endcsname% -{\expandafter\gdef\csname #2\endcsname{#3}}}} -\newcommand\metakeys@initialize@showkeys[1]% -{\@ifundefined{#1@showkeys}{\expandafter\def\csname #1@showkeys\endcsname{}}{}}% -\newcommand\metakeys@ext@showkeys[2]{\@ifundefined{#1@showkeys}% -{\expandafter\def\csname #1@showkeys\endcsname{#2}}% -{\expandafter\edef\csname #1@showkeys\endcsname{\csname #1@showkeys\endcsname,#2}}} -\newcommand\@metakeys@show@key[2]{\metakeys@show@key{#2}{#1}} -\newcommand\metakeys@show@key[2]{\edef\@test{#2}\ifx\@test\@empty\else #1:#2\quad\fi} -\newcommand\metakeys@show@keys[2]{\marginpar{{\scriptsize #2}}} -\newcommand\metakeys@show@keyval[2]{\expandafter\@metakeys@show@key\csname #1@#2\endcsname{#2}} -\newcommand\showmetakeys{\metakeys@showmetatrue} -\newcommand\hidemetakeys{\metakeys@showmetafalse} -\newcommand\addmetakeynew[3][]{\metakeys@ext@clear@keys{#2}{#3}{#1}% -\define@key{#2}{#3}{\expandafter\gdef\csname #2@#3\endcsname{##1}}} -\newcommand\metakeys@unspecified{an metakeys-defined key left unspecified} -\newcommand\metakeysifus[4]{\message{testing #1@#2=\csname#1@#2\endcsname}% -\expandafter\ifx\csname #1@#2\endcsname\metakeys@unspecified{#3}\else{#4}\fi} -\endinput -%% -%% End of file `metakeys.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty.ltxml b/Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty.ltxml deleted file mode 100644 index b07f809f8e9..00000000000 --- a/Master/texmf-dist/tex/latex/stex/metakeys/metakeys.sty.ltxml +++ /dev/null @@ -1,3 +0,0 @@ -DefConstructor('\showmetakeys',''); -DefConstructor('\hidemetakeys',''); -1; diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/beamerthemeJacobs.sty b/Master/texmf-dist/tex/latex/stex/mikoslides/beamerthemeJacobs.sty deleted file mode 100644 index 7a64c6cc0b8..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/beamerthemeJacobs.sty +++ /dev/null @@ -1,62 +0,0 @@ -% Beamer Jacobs slide theme; some hints from CXL's DFKI theme included -% -% (C) 2009 Michael Kohlhase - -%% Shadings and logo images -\pgfdeclareimage[height=.5ex,width=113mm]{shade-l2r}{shading-l2r} -\pgfdeclareimage[height=2ex]{jacobslogo}{jacobs-logo} -\pgfdeclareimage[height=2ex]{cclogo}{cc_somerights} - -%% Headers flushed to the left. -\setbeamertemplate{frametitle}[default][left] - - -%% Add the line below the header -\addtobeamertemplate{frametitle}{}{\hspace*{-1cm} % - \begin{pgfpicture}{0cm}{0cm}{128mm}{2mm} - \pgfputat{\pgforigin}{\pgfbox[left,bottom]{\pgfuseimage{shade-l2r}}} - \end{pgfpicture} - } - -\setbeamertemplate{footline}[text line]{% - \usebeamercolor[fg]{titlelike} - \strut\hspace*{2cm}\insertshortauthor: \insertshorttitle\hfill{}% - \insertframenumber\hfill\insertshortdate\hspace*{3cm}% - } - \addtobeamertemplate{footline}{ % - \begin{pgfpicture}{0cm}{0cm}{128mm}{0mm} % - \pgfputat{\pgfpoint{126mm}{1mm}}{\pgfbox[right,top]{\pgfuseimage{jacobslogo}}} % - \pgfputat{\pgfpoint{10mm}{1mm}}{\pgfbox[right,top]{\pgfuseimage{cclogo}}} % - \end{pgfpicture}}{} - -%% Turn off the navigation symbols -\setbeamertemplate{navigation symbols}{} - -%% Inner theme -\useinnertheme{default} - -%% Big logo for the title page. -%\pgfdeclareimage[height=1cm]{biglogo}{beamer/img/DFKI-SKS} -%\titlegraphic{\pgfuseimage{biglogo}} - - -\mode - - -%% Redefine various margin sizes -\setbeamersize{text margin left=3mm} -\setbeamersize{text margin right=3mm} -\setlength\leftmargini{1em} -\setlength\leftmarginii{1em} -\setlength\leftmarginiii{1em} -\newcommand{\vstretch}[1]{\vspace*{\stretch{#1}}} -\beamer@descriptionwidth=1cm - - diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/cc-by-sa.eps b/Master/texmf-dist/tex/latex/stex/mikoslides/cc-by-sa.eps deleted file mode 100644 index fb5a0a662ec..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/cc-by-sa.eps +++ /dev/null @@ -1,506 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (cc-by-sa.eps) -%%CreationDate: (Thu Dec 20 06:29:52 2007) -%%BoundingBox: 0 0 88 31 -%%HiResBoundingBox: 0 0 87.989 31 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 1 -%%EndComments - -%%BeginDefaults -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 eq - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 eq - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 eq - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 eq - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-none or 1-RunlengthEncoded. - % hex color packets. - % - gsave - /buffer 512 string def - /byte 1 string def - /color_packet 3 string def - /pixels 768 string def - - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Times-Roman findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 88 31 -userdict begin -DisplayImage -0 0 -87.989 30.9961 -12.000000 -88 31 -0 -0 -FFFFFF000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffff000000000000B5BAB4B7BCB6B9BEB8BCC1BBBEC3BEC1C5C0 -C3C8C3C6CAC5C8CCC7C9CDC9CBCECACCCFCBCCD0CCCCD0CCCCCFCBCBCFCACACDC9C8CCC7 -C6CAC5C4C8C3C1C5C0BFC3BEBCC1BBB9BEB9B7BCB6B5BAB4B3B8B2B1B7B0B0B5AFAEB4AD -ADB3ACADB3ACACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000000000B5BAB4B7BCB6BABFB9 -BDC2BCC0C4BFC3C7C2C6CAC5C9CDC8CBCFCACED1CDD0D3CFD1D4D0D2D5D2D3D6D2D3D6D2 -D2D5D2D1D4D1D0D3CFCED1CDCBCFCBC9CDC8C6CAC5C3C7C2C0C5BFBDC2BCBABFB9B7BCB6 -B5BAB4B3B8B2B1B7B0AFB5AEAEB4ADADB3ACACB2ABACB2ABABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000B7BCB6BABFB9BDC2BCC0C5C0C4C8C3C7CBC7CBCECACED1CDD1D4D0848584434443 -0D0E0D0000000000000000000000000D0E0D434443848684D1D4D0CED2CECBCFCAC8CCC7 -C4C9C4C1C5C0BDC2BDBABFB9B7BCB6B5BAB4B2B8B1B0B6AFAFB5AEAEB3ADADB3ACACB2AB -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA797C79292929000000000000000000000000 -292929797C79ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA797C79292929000000000000000000000000 -292929797C79ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000B9BEB8BDC2BCC0C5C0C4C8C3C8CCC7CCD0CBD0D3CF -9193911B1B1B000000000000000000000000000000000000000000000000000000000000 -1B1B1B919491D0D3CFCCD0CCC9CDC8C5C9C4C1C5C0BDC2BCB9BEB9B7BCB6B4B9B3B2B7B1 -B0B6AFAEB4ADADB3ACACB2ABACB2ABABB1AAABB1AAABB1AA939893282928000000000000 -404040707070707070404040000000000000282928939893ABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA939893282928000000000000 -404040707070707070404040000000000000282928939893ABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000BCC1BBC0C4BFC4C8C3 -C8CCC7CCD0CCD1D4D0505150000000000000000000101010606060808080BFBFBFBFBFBF -808080606060101010000000000000000000505150C4C7C3CDD1CCC9CDC8C4C9C4C0C5BF -BCC1BBB9BEB8B6BBB5B3B8B2B1B7B0AFB5AEAEB3ADADB3ACACB2ABABB1AAABB1AA9FA39E -0E0E0E000000505050DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5050500000000E0E0E -939893ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA9FA39E -0E0E0E000000505050DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5050500000000E0E0E -939893ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000BEC3BEC3C7C2C7CBC7CCD0CBD1D4D0505150000000000000101010808080EFEFEF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F9F9F101010000000000000282928 -C4C7C3CCD0CCC8CCC7C3C7C2BFC3BEBBC0BAB8BDB7B5BAB4B2B7B1B0B6AFAEB4ADADB3AC -ACB2ABABB1AAABB1AA282928000000606060FFFFFFFFFFFFFFFFFF000000000000FFFFFF -FFFFFFFFFFFF9F9F9F000000282928ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA282928000000606060FFFFFFFFFFFFE3E3E3C8C7C7C8C7C7E3E3E3 -FFFFFFFFFFFF9F9F9F000000282928ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000C1C5C0C6CAC5CBCECAD0D3CF505150000000000000 -303030DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -EFEFEF303030000000000000505150D0D3CFCBCFCAC6CAC5C1C5C0BDC2BCB9BEB8B6BBB5 -B3B8B2B1B6B0AFB4AEADB3ACACB2ABACB2AB797C79000000505050D6D5D5FFFFFFFFFFFF -FFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFF505050000000797C79ABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA797C79000000505050D6D5D5FFFFFFA3A1A1 -231F20231F20231F20231F20BAB9B9FFFFFFFFFFFF505050000000797C79ABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000C3C8C3C8CCC8CED1CD -919391000000000000303030EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF303030000000000000919491CED2CEC9CDC8 -C4C8C3BFC4BEBBC0BAB7BCB6B4BAB3B2B7B1AFB5AEAEB3ADACB2ABACB2AB292929000000 -DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFDFDF -000000292929ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA292929000000 -DFDFDFFFFFFFC8C7C7231F203F3739635F61767374231F20231F20918F8FFFFFFFDFDFDF -000000292929ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000C6CAC5CBCFCAD1D4D01B1B1B000000101010CFCFCFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF101010 -0000001B1B1BD1D4D0CBCFCBC6CAC5C1C5C0BCC1BCB9BEB8B5BAB4B2B8B1B0B6AFAEB4AD -ADB3ACACB2AB000000404040FFFFFFFFFFFFFFFFFFFFFFFF606060000000000000606060 -FFFFFFFFFFFFFFFFFFFFFFFF404040000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AA000000404040FFFFFFF1F1F19F969A231F208E878BFFFFFFFFFFFF9E9D9D -231F20312D2EFFFFFFFFFFFF404040000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000C8CCC7CDD1CD848584000000000000808080FFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFF9F9F9F000000000000848684CED1CDC8CCC7C3C7C2BEC2BDBABFB9 -B6BBB5B3B8B2B1B6B0AEB4ADADB3ACACB2AB000000707070FFFFFFFFFFFFFFFFFFFFFFFF -000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF707070000000ABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000707070FFFFFFF1F1F1242424231F20 -282828FFFFFFFFFFFFE3E3E3231F20231F20E8E7E7FFFFFF707070000000ABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000C9CDC9CFD3CF434443 -000000101010EFEFEFFFFFFFFFFFFFBFBFBF505050404040404040808080FFFFFFFFFFFF -BFBFBF5050504040404040408F8F8FFFFFFFFFFFFFFFFFFF101010000000434443D0D3CF -CACDC9C4C8C3BFC4BEBBC0BAB7BCB6B4B9B3B1B7B0AFB4AEADB3ACACB2AB000000707070 -FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF -707070000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000707070 -FFFFFFFFFFFFB5B5B52D2D2DBFBFBFFFFFFFFFFFFFE3E3E3231F20231F20E0DFE0FFFFFF -707070000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000CBCECAD1D4D00D0E0D000000606060FFFFFFFFFFFFBFBFBF000000000000000000 -000000000000404040AFAFAF000000000000000000000000000000606060FFFFFFFFFFFF -6060600000000D0E0DD1D4D1CBCFCAC5C9C4C0C5BFBBC0BBB8BDB7B4BAB3B1B7B0AFB5AE -ADB3ACACB2AB000000404040FFFFFFFFFFFFFFFFFFFFFFFF606060000000000000606060 -FFFFFFFFFFFFFFFFFFFFFFFF404040000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AA000000404040FFFFFFFFFFFFBAB9B9A3A1A1C9C8C8FFFFFFFFFFFFACABAB -231F20231F20FFFFFFFFFFFF404040000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000CCCFCBD2D5D10000000000008F8F8FFFFFFFFFFFFF -303030000000202020DFDFDFBFBFBF2020209F9F9F303030000000303030DFDFDFAFAFAF -2020209F9F9FFFFFFFFFFFFF9F9F9F000000000000D2D5D2CCCFCBC6CAC5C1C5C0BCC1BB -B8BDB7B5BAB4B2B7B1AFB5AEADB3ACACB2AB292929000000DFDFDFFFFFFFFFFFFFFFFFFF -FFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFFDFDFDF000000292929ABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA292929000000DFDFDFFFFFFF9E9D9D231F20 -231F208481828481822A2727231F20989697FFFFFFDFDFDF000000292929ABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000CCD0CBD3D6D2000000 -000000BFBFBFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFFFFFFFFFF000000 -000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFBFBF000000000000D3D6D2 -CCD0CCC6CAC6C1C5C0BCC1BBB8BDB7B5BAB4B2B7B1AFB5AEADB3ACACB2AB797C79000000 -505050FFFFFFFFFFFFFFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFF505050 -000000797C79ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA797C79000000 -505050FFFFFFFFFFFF848182231F20231F20231F20231F206E6C6CF1F1F1FFFFFF505050 -000000797C79ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000CCD0CBD3D6D2000000000000BFBFBFFFFFFFFFFFFF000000000000808080FFFFFF -FFFFFFFFFFFFFFFFFF000000000000808080FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -BFBFBF000000000000D3D6D2CCD0CCC6CAC6C1C5C0BCC1BBB8BDB7B5BAB4B2B7B1AFB5AE -ADB3ACACB2ABABB1AA282928000000606060FFFFFFFFFFFFFFFFFF000000000000FFFFFF -FFFFFFFFFFFF707070000000282928ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA282928000000606060FFFFFFFFFFFFCBCACBACABABACABABD6D5D5 -FFFFFFFFFFFF707070000000282928ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000CCCFCBD2D5D10000000000008F8F8FFFFFFFFFFFFF -303030000000202020EFEFEFCFCFCF202020808080303030000000303030EFEFEFCFCFCF -202020808080FFFFFFFFFFFF9F9F9F000000000000D2D5D2CCCFCBC6CAC5C1C5C0BCC1BB -B8BDB7B5BAB4B2B7B1AFB5AEADB3ACACB2ABABB1AA9FA39E0E0E0E000000505050DFDFDF -FFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5050500000000E0E0E939893ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA9FA39E0E0E0E000000505050DFDFDF -FFFFFFFFFFFFFFFFFFFFFFFFDFDFDF5050500000000E0E0E939893ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000CBCECAD1D4D00D0E0D -000000606060FFFFFFFFFFFFAFAFAF000000000000000000000000000000606060AFAFAF -000000000000000000000000000000606060FFFFFFFFFFFF7070700000000D0E0DD1D4D0 -CBCECAC5C9C4C0C5BFBBC0BBB8BDB7B4BAB3B1B7B0AFB5AEADB3ACACB2ABABB1AAABB1AA -9FA39E282928000000000000303030606060707070303030000000000000282928939893 -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -9FA39E282928000000000000303030606060707070303030000000000000282928939893 -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000C9CDC9CFD3CF505150000000101010FFFFFFFFFFFFFFFFFFBFBFBF505050404040 -404040808080FFFFFFFFFFFFAFAFAF404040404040404040808080FFFFFFFFFFFFFFFFFF -202020000000434443D0D3CFC9CDC9C4C8C3BFC4BEBABFBAB7BCB6B4B9B3B1B7B0AFB4AE -ADB3ACACB2ABABB1AAABB1AAABB1AAABB1AA797C79292929000000000000000000000000 -292929797C79ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA797C79292929000000000000000000000000 -292929797C79ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000C8CCC7CDD1CD9193910000000000008F8F8FFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFF9F9F9F000000000000848684CED1CDC8CCC7C2C7C2BEC2BDB9BEB9 -B6BBB5B3B8B2B0B6AFAEB4ADADB3ACACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000C5C9C5CBCFCAD1D4D0 -1B1B1B000000101010DFDFDFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF1010100000001B1B1BD1D4D0CBCFCB -C6CAC5C1C5C0BCC1BCB9BEB8B5BAB4B2B8B1B0B6AFAEB4ADADB3ACACB2ABABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000C3C8C3C8CCC8CED1CD9EA09D000000000000303030EFEFEFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF303030000000 -000000919391CED1CDC9CDC8C3C8C3BFC3BEBBC0BAB7BCB6B4B9B3B2B7B1AFB5AEAEB3AD -ACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA0000000000000000007C7F7CCBCECAD0D3CF5D5E5D000000000000 -303030CFCFCFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -DFDFDF303030000000000000505150D0D3CFCBCECA828582000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000070726F -CCCFCBD0D4D0505150000000000000101010808080EFEFEFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFEFEFEF808080101010000000000000353635D1D4D0CCD0CB7C7F7C000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000007D7F7CCCD0CCD0D4D05D5E5D000000000000000000101010 -606060808080BFBFBFBFBFBF808080606060101010000000000000000000505150D1D4D0 -CDD0CC969996000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000FFFFFFFFFFFFFFFFFF000000000000FFFFFF000000 -000000000000FFFFFF000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000FFFFFFFFFFFFFFFFFF000000000000FFFFFF -FFFFFF000000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000007D7F7CCCCFCBD0D3CF -9EA09D1B1B1B000000000000000000000000000000000000000000000000000000000000 -1B1B1B919391D0D3CFCCD0CB969996000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000FFFFFF000000000000 -FFFFFF000000000000FFFFFF000000FFFFFF000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000FFFFFF000000000000 -000000000000FFFFFF000000000000FFFFFF000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -00000000000070726FCBCECACED1CDD1D4D09193914344430D0E0D000000000000000000 -0000000D0E0D434443919491D1D4D0CED1CDCBCECA7C7F7C000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000FFFFFFFFFFFFFFFFFF000000000000000000000000FFFFFF000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000FFFFFFFFFFFF000000000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000323331AFB2AFCBCFCACDD1CDCFD3CF -D1D4D0D2D5D1D3D6D2D3D6D2D2D5D1D1D4D0D0D3CFCED1CDCBCFCBB0B3AF3E3F3E000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000FFFFFF000000000000FFFFFF000000000000000000 -FFFFFF000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000FFFFFF000000FFFFFF000000 -000000FFFFFF000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -0000003E3F3E898C89BCC0BCCBCECACCCFCBCCD0CBCCD0CBCCCFCBCBCECABCC0BC898C89 -3E3F3E000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFF -000000000000000000000000FFFFFF000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000FFFFFFFFFFFFFFFFFF -000000000000FFFFFF000000000000FFFFFF000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -FFFFFF000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffff -end -%%PageTrailer -%%Trailer -%%EOF diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/cc-by-sa.png b/Master/texmf-dist/tex/latex/stex/mikoslides/cc-by-sa.png deleted file mode 100644 index f0a944e0b89..00000000000 Binary files a/Master/texmf-dist/tex/latex/stex/mikoslides/cc-by-sa.png and /dev/null differ diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.eps b/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.eps deleted file mode 100644 index e9dc0ed4094..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.eps +++ /dev/null @@ -1,506 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (cc_somerights.eps) -%%CreationDate: (Mon Nov 14 10:32:11 2005) -%%BoundingBox: 0 0 88 31 -%%HiResBoundingBox: 0 0 88 31 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 1 -%%EndComments - -%%BeginDefaults -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 eq - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 eq - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 eq - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 eq - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-none or 1-RunlengthEncoded. - % hex color packets. - % - gsave - /buffer 512 string def - /byte 1 string def - /color_packet 3 string def - /pixels 768 string def - - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Times-Roman findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 88 31 -userdict begin -DisplayImage -0 0 -88 31 -12.000000 -88 31 -0 -0 -ffffff000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000ffffff000000000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABACB2ABADB2ACADB2AC -AEB4ADAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B8BDB8B8BDB8BCC0BCBCC0BC -C0C4BFC0C4BFC0C4BFC5C9C4C5C9C4C5C9C4C9CDC8C9CDC8C9CDC8CDD0CCCDD0CCCDD0CC -CDD0CCCDD0CCCDD0CCCDD0CCCDD0CCC9CDC8C9CDC8C9CDC8C9CDC8C5C9C4C5C9C4C0C4BF -C0C4BFC0C4BFBCC0BCBCC0BCB8BDB8B8BDB8B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFB0B6AF -AEB4ADAEB4ADADB2ACADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000000000ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2AB -ACB2ABADB2ACADB2ACAEB4ADAEB4ADAEB4ADB0B6AFB0B6AFB2B7B1B5BAB4B5BAB4B8BDB8 -B8BDB8B8BDB8BCC0BCC0C4BFC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8C9CDC8CDD0CC -CDD0CCCDD0CCCDD0CCCDD0CCCDD0CCCDD0CCCDD0CCCDD0CCCDD0CCCDD0CCCDD0CCC9CDC8 -C9CDC8C9CDC8C5C9C4C5C9C4C0C4BFC0C4BFC0C4BFBCC0BCB8BDB8B8BDB8B8BDB8B5BAB4 -B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4ADAEB4ADADB2ACADB2ACACB2ABACB2ABACB2AB -ACB2ABABB1AAACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2AB -ACB2ABACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACAEB4ADAEB4ADAEB4ADB0B6AFB2B7B1 -B2B7B1B5BAB4B5BAB4B8BDB8B8BDB8BCC0BCBCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8 -C9CDC8CDD0CCCDD0CCCDD0CCB5BAB4565756000000000000000000000000202020565756 -B5BAB4CDD0CCCDD0CCCDD0CCCDD0CCC9CDC8C9CDC8C5C9C4C5C9C4C0C4BFC0C4BFBCC0BC -BCC0BCB8BDB8B8BDB8B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4ADAEB4ADADB2AC -ADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACADB2ACAEB4AD -AEB4ADB0B6AFB0B6AFB2B7B1B2B7B1B5BAB4B8BDB8B8BDB8B8BDB8BCC0BCC0C4BFC0C4BF -C5C9C4C5C9C4C5C9C4C9CDC8CDD0CCCDD0CCCDD0CC565756000000000000202020404040 -7C7C7C4040400000000000000000007C7C7CC9CDC8CDD0CCCDD0CCCDD0CCC9CDC8C5C9C4 -C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCB8BDB8B8BDB8B8BDB8B5BAB4B2B7B1B2B7B1B0B6AF -B0B6AFAEB4ADAEB4ADAEB4ADADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABACB2AB -ADB2ACADB2ACAEB4ADAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B5BAB4B8BDB8 -BCC0BCBCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8CDD0CCCDD0CC565756000000 -202020969796FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFABB1AA000000000000565756CDD0CC -CDD0CCCDD0CCCDD0CCC9CDC8C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCBCC0BCB8BDB8B8BDB8 -B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4ADAEB4ADADB2ACACB2ABACB2ABACB2AB -ACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2AB -ACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACAEB4ADAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1 -B5BAB4B5BAB4B8BDB8BCC0BCBCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8CDD0CC -CDD0CC7C7C7C000000404040EFEFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -D5D7D52020200000007C7C7CCDD0CCCDD0CCCDD0CCC9CDC8C9CDC8C5C9C4C5C9C4C0C4BF -C0C4BFBCC0BCB8BDB8B8BDB8B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4ADAEB4AD -ADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACAEB4ADAEB4AD -AEB4ADB0B6AFB2B7B1B2B7B1B5BAB4B8BDB8B8BDB8B8BDB8BCC0BCC0C4BFC0C4BFC5C9C4 -C5C9C4C9CDC8C9CDC8CDD0CCC5C9C4000000000000C5C9C4FFFFFFFFFFFFFFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD5D7D5000000000000C5C9C4CDD0CCCDD0CCC9CDC8 -C9CDC8C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCBCC0BCB8BDB8B5BAB4B5BAB4B2B7B1B2B7B1 -B0B6AFAEB4ADAEB4ADAEB4ADADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2AB -ADB2ACADB2ACAEB4ADAEB4ADB0B6AFB0B6AFB2B7B1B2B7B1B5BAB4B8BDB8B8BDB8BCC0BC -BCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8CDD0CCCDD0CC7C7C7C0000007C7C7CFFFFFF -EFEFEF9697967C7C7CBCC0BCFFFFFFD5D7D57C7C7C7C7C7CD5D7D5FFFFFF565756000000 -7C7C7CD5D7D5CDD0CCCDD0CCC9CDC8C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCBCC0BCB8BDB8 -B8BDB8B5BAB4B2B7B1B2B7B1B0B6AFB0B6AFAEB4ADAEB4ADADB2ACADB2ACACB2ABACB2AB -ACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2AB -ACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1B5BAB4 -B5BAB4B5BAB4B8BDB8BCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8CDD0CCD5D7D5 -404040000000CDD0CCFFFFFF2020200000000000000000007C7C7C202020000000202020 -202020D5D7D5C5C9C4000000565756D5D7D5CDD0CCCDD0CCC9CDC8C9CDC8C5C9C4C5C9C4 -C0C4BFBCC0BCBCC0BCB8BDB8B8BDB8B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4AD -ADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACADB2ACAEB4ADAEB4AD -B0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B8BDB8B8BDB8BCC0BCBCC0BCC0C4BFC5C9C4C5C9C4 -C9CDC8C9CDC8CDD0CCCDD0CC404040000000FFFFFFC0C4BF0000007C7C7CFFFFFF969796 -7C7C7C000000ABB1AAC9CDC8BCC0BCFFFFFFFFFFFF000000404040CDD0CCCDD0CCCDD0CC -C9CDC8C9CDC8C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCB8BDB8B5BAB4B5BAB4B5BAB4B2B7B1 -B2B7B1B0B6AFAEB4ADAEB4ADAEB4ADADB2ACADB2ACACB2ABACB2ABACB2ABABB1AAACB2AB -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABABB1AAACB2ABACB2ABACB2ABACB2AB -AEB4ADADB2ACAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B5BAB4B8BDB8BCC0BC -C0C4BFC0C4BFC0C4BFC5C9C4C9CDC8C9CDC8CDD0CCC9CDC8404040000000FFFFFFC0C4BF -0000007C7C7CFFFFFFD5D7D57C7C7C000000BCC0BCFFFFFFD5D7D5FFFFFFFFFFFF000000 -404040D5D7D5CDD0CCCDD0CCC9CDC8C9CDC8C5C9C4C5C9C4C0C4BFBCC0BCBCC0BCB8BDB8 -B8BDB8B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4ADADB2ACADB2ACACB2ABACB2AB -ACB2ABACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2AB -ACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1B5BAB4 -B5BAB4B8BDB8B8BDB8BCC0BCBCC0BCC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8CDD0CCCDD0CC -404040000000D5D7D5EFEFEF2020200000007C7C7C000000404040000000404040404040 -000000EFEFEFD5D7D5000000404040CDD0CCCDD0CCCDD0CCCDD0CCC9CDC8C5C9C4C5C9C4 -C0C4BFC0C4BFBCC0BCB8BDB8B5BAB4B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4AD -ADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABACB2ABADB2ACAEB4ADAEB4ADAEB4AD -B0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B5BAB4B8BDB8BCC0BCC0C4BFC0C4BFC5C9C4C5C9C4 -C9CDC8C9CDC8CDD0CCC9CDC87C7C7C000000969796FFFFFFB8BDB85657564040407C7C7C -FFFFFF7C7C7C404040404040ADB2ACFFFFFF9697960000007C7C7CD5D7D5CDD0CCCDD0CC -C9CDC8C9CDC8C5C9C4C5C9C4C0C4BFBCC0BCBCC0BCB8BDB8B8BDB8B5BAB4B5BAB4B2B7B1 -B2B7B1B0B6AFAEB4ADAEB4ADAEB4ADADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABACB2AB -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABADB2AC -ADB2ACADB2ACAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B8BDB8B8BDB8BCC0BC -BCC0BCC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8CDD0CCCDD0CCB5BAB4000000202020EFEFEF -FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFEFEF202020000000 -B5BAB4CDD0CCCDD0CCCDD0CCC9CDC8C9CDC8C5C9C4C0C4BFC0C4BFBCC0BCBCC0BCB8BDB8 -B5BAB4B5BAB4B5BAB4B2B7B1B0B6AFB0B6AFAEB4ADAEB4ADADB2ACADB2ACACB2ABACB2AB -ACB2ABACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2AB -ACB2ABACB2ABACB2ABACB2ABAEB4ADADB2ACAEB4ADAEB4ADB0B6AFB0B6AFB2B7B1B2B7B1 -B5BAB4B5BAB4B8BDB8BCC0BCBCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8CDD0CCCDD0CC -D5D7D5565756000000565756FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF -FFFFFF565756000000565756CDD0CCD5D7D5CDD0CCCDD0CCC9CDC8C5C9C4C5C9C4C5C9C4 -C0C4BFBCC0BCBCC0BCB8BDB8B8BDB8B5BAB4B2B7B1B2B7B1B0B6AFB0B6AFAEB4ADAEB4AD -ADB2ACADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACAEB4ADAEB4AD -AEB4ADB0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B8BDB8BCC0BCBCC0BCC0C4BFC0C4BFC5C9C4 -C5C9C4C9CDC8C9CDC8CDD0CCCDD0CCC5C9C4202020000000404040D5D7D5FFFFFFFFFFFF -FFFFFFFFFFFFFFFFFFD5D7D5404040000000202020C9CDC8D5D7D5CDD0CCCDD0CCCDD0CC -C9CDC8C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCBCC0BCB8BDB8B5BAB4B5BAB4B2B7B1B2B7B1 -B0B6AFAEB4ADAEB4ADAEB4ADADB2ACAEB4ADACB2ABACB2ABACB2ABACB2ABACB2ABABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABACB2AB -ADB2ACADB2ACAEB4ADAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B8BDB8B8BDB8 -BCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8CDD0CCCDD0CCD5D7D5C9CDC8202020 -000000000000565756969796BCC0BC7C7C7C565756000000000000404040C5C9C4D5D7D5 -CDD0CCCDD0CCCDD0CCC9CDC8C5C9C4C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCB8BDB8B8BDB8 -B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4ADAEB4ADADB2ACADB2ACACB2ABACB2AB -ACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2AB -ACB2ABACB2ABACB2ABACB2ABACB2ABADB2ACAEB4ADAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1 -B5BAB4B5BAB4B8BDB8B8BDB8BCC0BCBCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8 -CDD0CCCDD0CCCDD0CCD5D7D57C7C7C202020000000000000000000000000000000202020 -7C7C7CD5D7D5CDD0CCCDD0CCCDD0CCCDD0CCC9CDC8C9CDC8C5C9C4C5C9C4C0C4BFC0C4BF -BCC0BCBCC0BCB8BDB8B8BDB8B5BAB4B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4ADAEB4AD -ADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA -ABB1AAABB1AAACB2ABABB1AAACB2ABACB2ABACB2ABACB2ABADB2ACADB2ACADB2ACAEB4AD -AEB4ADB0B6AFB0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B8BDB8B8BDB8BCC0BCC0C4BFC0C4BF -C5C9C4C5C9C4C9CDC8C9CDC8CDD0CCCDD0CCCDD0CCCDD0CCCDD0CCCDD0CCABB1AA969796 -565756969796ABB1AAD5D7D5CDD0CCD5D7D5CDD0CCCDD0CCCDD0CCCDD0CCC9CDC8C9CDC8 -C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCB8BDB8B8BDB8B8BDB8B5BAB4B2B7B1B2B7B1B0B6AF -B0B6AFAEB4ADAEB4ADADB2ACADB2ACADB2ACACB2ABACB2ABACB2ABACB2ABACB2ABABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000000000ABB1AAABB1AAABB1AA -ABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAACB2ABACB2ABACB2ABACB2ABACB2AB -ACB2ABADB2ACADB2ACAEB4ADAEB4ADAEB4ADB0B6AFB2B7B1B2B7B1B5BAB4B5BAB4B8BDB8 -B8BDB8BCC0BCBCC0BCC0C4BFC0C4BFC5C9C4C5C9C4C9CDC8C9CDC8CDD0CCCDD0CCCDD0CC -CDD0CCCDD0CCCDD0CCCDD0CCD5D7D5D5D7D5CDD0CCCDD0CCCDD0CCCDD0CCCDD0CCCDD0CC -CDD0CCC9CDC8C9CDC8C5C9C4C5C9C4C0C4BFC0C4BFBCC0BCBCC0BCB8BDB8B8BDB8B5BAB4 -B5BAB4B2B7B1B2B7B1B0B6AFAEB4ADAEB4ADAEB4ADADB2ACAEB4ADACB2ABACB2ABACB2AB -ACB2ABACB2ABABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AAABB1AA000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000969796FFFFFFFFFFFF7C7C7C202020CDD0CC -FFFFFFD5D7D5202020FFFFFFFFFFFF404040404040FFFFFFFFFFFF000000FFFFFFFFFFFF -FFFFFF7C7C7C000000000000FFFFFFFFFFFFFFFFFFADB2AC000000FFFFFF404040565756 -FFFFFFFFFFFFBCC0BC202020FFFFFF7C7C7C404040FFFFFF7C7C7CFFFFFFFFFFFFFFFFFF -969796FFFFFFFFFFFF7C7C7C000000000000404040FFFFFFFFFFFFFFFFFF7C7C7C404040 -FFFFFFFFFFFFFFFFFF404040969796FFFFFFFFFFFF7C7C7C7C7C7CFFFFFFFFFFFFFFFFFF -404040FFFFFFFFFFFFFFFFFF7C7C7CD5D7D57C7C7C404040FFFFFF565756FFFFFFFFFFFF -FFFFFF404040FFFFFFFFFFFFFFFFFF7C7C7C000000000000000000404040FFFFFF969796 -565756FFFFFF7C7C7CFFFFFF000000FFFFFF7C7C7CFFFFFFFFFFFF565756565756FFFFFF -FFFFFF000000FFFFFF404040000000000000000000000000FFFFFF404040565756FFFFFF -000000FFFFFF404040FFFFFF969796000000FFFFFF404040FFFFFF7C7C7C404040FFFFFF -000000404040FFFFFF000000FFFFFF969796565756FFFFFF000000000000404040FFFFFF -000000969796FFFFFF404040FFFFFF000000000000000000FFFFFF969796565756FFFFFF -7C7C7CFFFFFF000000000000404040FFFFFF000000969796FFFFFFB2B7B1EFEFEF565756 -EFEFEF404040FFFFFF000000000000000000FFFFFF404040565756FFFFFF000000000000 -000000202020969796FFFFFF2020204040407C7C7CFFFFFF000000FFFFFF7C7C7CFFFFFF -BCC0BC7C7C7C7C7C7CBCC0BCFFFFFF000000FFFFFF404040000000000000000000000000 -FFFFFF404040404040FFFFFF000000FFFFFF404040FFFFFF7C7C7C0000007C7C7C202020 -FFFFFF7C7C7C404040FFFFFF000000404040FFFFFF000000969796FFFFFF202020404040 -000000000000404040FFFFFF0000007C7C7CFFFFFF404040FFFFFF000000000000000000 -969796FFFFFF2020204040407C7C7CFFFFFF000000000000404040FFFFFF0000007C7C7C -FFFFFF7C7C7CEFEFEF7C7C7CEFEFEF404040FFFFFF000000000000000000FFFFFF404040 -404040FFFFFF000000000000000000000000202020FFFFFFFFFFFF4040407C7C7CFFFFFF -000000FFFFFF7C7C7CFFFFFF969796FFFFFFFFFFFF969796FFFFFF000000FFFFFFFFFFFF -FFFFFF404040000000000000FFFFFFFFFFFFFFFFFFADB2AC000000FFFFFF404040FFFFFF -7C7C7C7C7C7C7C7C7C202020FFFFFFFFFFFFFFFFFFFFFFFF000000404040FFFFFF000000 -404040FFFFFFFFFFFF202020000000000000404040FFFFFFFFFFFFEFEFEF7C7C7C404040 -FFFFFFFFFFFFFFFFFF000000202020FFFFFFFFFFFF4040407C7C7CFFFFFFFFFFFFFFFFFF -404040FFFFFFFFFFFFFFFFFF7C7C7C404040FFFFFFABB1AAEFEFEF404040FFFFFFFFFFFF -FFFFFF000000FFFFFF404040404040FFFFFF000000000000000000202020404040202020 -969796D5D7D57C7C7CFFFFFF000000FFFFFF7C7C7CFFFFFF7C7C7CD5D7D5D5D7D57C7C7C -FFFFFF000000FFFFFF404040000000000000000000000000FFFFFF7C7C7C7C7C7CD5D7D5 -000000FFFFFF404040FFFFFF7C7C7CFFFFFFFFFFFF404040FFFFFF7C7C7C404040FFFFFF -000000404040FFFFFF000000202020404040969796EFEFEF000000000000404040FFFFFF -404040FFFFFF969796404040FFFFFF000000000000000000404040202020969796D5D7D5 -7C7C7CFFFFFF000000000000404040FFFFFF404040FFFFFF969796000000FFFFFFD5D7D5 -565756404040FFFFFF000000000000000000FFFFFF404040404040FFFFFF000000000000 -000000404040FFFFFF7C7C7C404040FFFFFF7C7C7CFFFFFF000000FFFFFF7C7C7CFFFFFF -404040FFFFFFFFFFFF404040FFFFFF000000FFFFFF404040000000000000000000000000 -FFFFFF404040404040FFFFFF000000FFFFFF404040FFFFFF7C7C7C000000FFFFFF404040 -FFFFFF7C7C7C404040FFFFFF000000404040FFFFFF000000FFFFFF7C7C7C404040FFFFFF -000000000000404040FFFFFF0000007C7C7CFFFFFF404040FFFFFF000000000000000000 -FFFFFF7C7C7C404040FFFFFF7C7C7CFFFFFF000000000000404040FFFFFF0000007C7C7C -FFFFFF000000EFEFEFFFFFFF404040404040FFFFFF000000000000000000FFFFFF404040 -404040FFFFFF000000000000000000202020969796FFFFFFFFFFFFD5D7D5565756EFEFEF -FFFFFFEFEFEF565756FFFFFF404040BCC0BCCDD0CC404040FFFFFF000000FFFFFFFFFFFF -FFFFFF404040000000000000FFFFFF404040404040FFFFFF000000FFFFFF404040969796 -FFFFFFFFFFFFFFFFFF404040FFFFFF7C7C7C404040FFFFFF000000404040FFFFFF000000 -969796FFFFFFFFFFFFD5D7D5000000000000404040FFFFFF0000007C7C7CFFFFFF404040 -FFFFFFFFFFFFFFFFFF202020969796FFFFFFFFFFFFD5D7D57C7C7CFFFFFFFFFFFFFFFFFF -404040FFFFFF0000007C7C7CFFFFFF000000C0C4BFFFFFFF000000404040FFFFFFFFFFFF -FFFFFF202020FFFFFFFFFFFFFFFFFF7C7C7C0000000000000000000000000000007C7C7C -7C7C7C2020200000005657567C7C7C5657560000007C7C7C202020565756565756202020 -7C7C7C0000007C7C7C7C7C7C7C7C7C4040400000000000007C7C7C2020200000007C7C7C -2020207C7C7C2020202020207C7C7C5657565657562020205657564040402020207C7C7C -0000002020207C7C7C0000000000007C7C7C7C7C7C2020200000000000002020207C7C7C -0000002020207C7C7C2020207C7C7C7C7C7C7C7C7C2020200000007C7C7C7C7C7C202020 -4040407C7C7C7C7C7C7C7C7C2020207C7C7C0000002020207C7C7C0000004040407C7C7C -0000002020207C7C7C7C7C7C7C7C7C2020207C7C7C7C7C7C7C7C7C202020000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000 -000000000000000000000000 -end -%%PageTrailer -%%Trailer -%%EOF diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.jpg b/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.jpg deleted file mode 100644 index f945b897622..00000000000 Binary files a/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.jpg and /dev/null differ diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.pdf b/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.pdf deleted file mode 100644 index 2bb2c99eb89..00000000000 Binary files a/Master/texmf-dist/tex/latex/stex/mikoslides/cc_somerights.pdf and /dev/null differ diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.eps b/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.eps deleted file mode 100644 index 4e99b35062e..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.eps +++ /dev/null @@ -1,2722 +0,0 @@ -%!PS-Adobe-2.0 EPSF-1.2 -%%Title: JU_LOGO_4C -%%Creator: FreeHand MX 11.0.2 -%%CreationDate: 14.05.2007 8:46 Uhr -%%BoundingBox: 0 0 233 84 -%%FHPathName:server: Projekte:119_JACOBS_UNIVERSITY_BREMEN: CD-Elemente:LOGO:JU_LOGOKOFFER:4C:JU_LOGO_4C -%ALDOriginalFile:server: Projekte:119_JACOBS_UNIVERSITY_BREMEN: CD-Elemente:LOGO:JU_LOGOKOFFER:4C:JU_LOGO_4C -%ALDBoundingBox: -182 -379 414 463 -%%FHPageNum:1 -%%DocumentSuppliedResources: procset Altsys_header 4 0 -%%ColorUsage: Color -%%DocumentProcessColors: Cyan Magenta Yellow Black -%%CMYKProcessColor: 0.3 0.15 0 0.1 (30c 15m 0y 10k) -%%+ 1 0.65 0 0.3 (100c 65m 0y 30k) -%%+ 0.05 0 0 0.75 (5c 0m 0y 75k) -%%EndComments -%%BeginAGDEmbeddedDoc: version 1.0 -%:s8W,W5t==$^::es!!8+RGQH=-GC1)`f/A"gG1Pu%0A+psP*no, -%:s8Tk7^^abbo\QY5&:0,YHga,i)@-W\#_X*gkTrLX$%Yo>-jer]#nVCh]c$REmi9T2]K6Mqo7#TcrVh&]ls>$\7a`UI833Nn$m:0(*M>%oKY(UmM=CZn%-7_(#SR*3?i!7n)mk1Q0EB*[:Da8!:i4$5mEjj%>#58&m!>T2a.MQ%m,rgG\\ZV&'WF!Ek?2&`?UC -%:oFaFJIbO83Q/E+&(pC<<6:J?t.,D^aVF%@W%dBG.8;!:GdF2e*)gHoU`Zk\a?1P1P@?eNF>fGDuC4Bj6ou$]ej!9.>`qJS9;`mE5aW#U]4UK$i"4.<<`*MElNPDDDE^E<;%l&/1C+3"p3?e%<85!`&58QIs^%;gXS",j8$A:momTPK\S-9I\OtV93p`KLN,67$l#_F3&66R.u5rdrf>Vn%A.fAOb(1=ZnXkNkdcZbQ/N$;rHEI/7a -%:Y0'$k>q3F<^]Uut(t6cR76K7nLEZ8Hi5sA,r.g6.nc'h*NV@Oc^C+N5nfY&JAjdB"RYp0WRL6h0DcMU*3BTT)+kZCke\&C$0NJllX^+"Ene_l9%G5O)_a(`=+2V?@9;!Ufq?Nj@bgt,On%!o'6*(N'e3O[Mdk'AT8E3QOHL':L47$9S(:M1X;HTI2Reo>r?n,K+CcM:ci -%:-;nHOZaI'Y'<..oA[GRBq#3C_:sYSpETD<13.J?61Dt7(*kP]>Xldj+)tA#GUhDj^8i@nYRocW#QV]4ge`lNg%qZ#E*7es$d>gbRJijSRGp+9j`t"b-?(?du_D%M*<%8oWO\rA=:9cG#+W2,GBI[kR1&BoU3"3gb0:E4Ul<5dBKHVETECiM&,3@DfisgQGGX`+fc"KAjFiMo*oW+lZd4EpI>Mt`?*%=Yk`+g#0G^=A$4D0O1()U0# -%:SRTtH:O.qO9O>.O!/i;U.%?4f1F,["=A)[l;[&g*'F#p!V.eR+O2WpXReE9(G?"N)"38n35%OF:e=[c..+]g3T,0r](q;/SQe2\`BY#XQY!kpR[al'a1"7!ec@NV6EDdF -%:gUNTe?s+.X6#Aa94hWnN'Qpr-3V.m7S7i_;n&DO3Q7&WiW1G4<%.)e^betZQ"V1c,RHC$[:pcH1S;WMZ6`fIja<$EBiZaMuda?Pra(C]KBYEB<`t%JuCeWZiUW3cbg4!GenY5%=?\';][I8/lJqmLo#N2bFP%(]s89(tN"Y6(KJD -%:+c+M*e\Q^:662.>.`R.GLK\rTEuj.XPf(oT_t@%9pI,,3$.$Su&<:UZXser>!bj]d2sJJ?s2a2'fsdIjhgGp,[&<&Yf^63bW^W5>NSXD@JZA,Z8ZIE\euD#%eRQ?%gSmYY$oVWom2gRYocF+'^l@)re^0JW8G2X?ldVYq42e;9e4.\A^OGP7.J;17I1LpGO59=(5h5]'lI^7.HZ@h'CFgWlEA(!];4(\Y/PH^^+])UQ>mfUf)-f;RbE9L0C$`T-QDpQ$=(6YB']I,Lp)VOA'm\;ko'Q;+ZSV#1dZSCcrj4'.Od6bR+hea; -%:Z&VN6`+/a"3RNuBU0?p"_-9kfi\ndPmTC.PbHAkQ?W::(10+3iNHni-]i9o2>jUuKN'6c]m%4FoeDR`589M%CS6EaE8F4Tg2/7[LNt%Mt.X2_/_dZEP,H8C!YmaWb"WiKQVcJCY7/jt=Md!5]"ccU4U)[so\O!LofAEX[.o7\gq]35t\682.RHN[9&QKQT:Uq^L?:KuE:nFRC^[kB6^FX;#Mr".OG$iq[e0`f1^]=k`%h8oKI/DlM<=dIMk@\bJ_g,eeEIK1qVp/8;hE)7,&c/cP4Rc]28&sq,RG_-*M-)D%aQSUlg;s&Ga2f*SS0ZPBGVU-Sct.&->S]#.V%$,WCa*7:*!TMqQ]'p/i*jH[6*NF&-"BoX67:#kX4lU` -%:W3#U.\Vec!eO-_SGX7![JWF0BqiUXLAQd2Q="5qbnOU0b6Y&dGG"=/QoNQ-su./8LX<5]g06Q6O7L:9UL8.$i>nAs4J$pB[\Klf4#t[HKd,S[LjJ*17\63G'8eD90;G2^P%>:oc"Bh:@V/j0Y)D600h3MFB!M)\\rO\_H^t[*A>JkR878S]NH?)J3ss`S"?q.(:+e%Yo:0-6s?@6j*tk/+qJt:qs$BG]=#26?S]*iD2t`UT`H,rR\\e'irhHp/.%f'69m[7TZQ]g]\%*7BWZI:^b]+W7h7eI.NOO]]`2;0XS\O8&gO<%%1)*(G=_t'C%&IHJ"W\&LatM\8$L*eAU_Y(QjIhCC]cu/E*(4]6o:eRhVo8/JFE^k7#.hWg;cd?,9ghL+VmOK3R[)]U``b"WWai3oIhRP0d2RN(Gd&a6XQ$,TNa*_(`^snPoDY>A<5S$k6&D+Y"N]#a*U/bI*-dT#DV)%if<4.-HX7$Sib.iMWll*7IT!;:OAo(1$?MI=%2IDCWno2usRgpX3W1Kg-Slb8[sbhM3d.DX*UN,IP.C&ggc-,'u/@ -%:Mq]-R;2V!rs-6uU]\V_X/c>%nVHJ);tCirX@4M"?h7Tl9..j%hEm5@!u's1qeU!a=\F7Q.3IAL*pg7>fKZ03PQ_OQ\" -%:PR0o]m.kV'181D9g)uXgP,^q>6Ie-lT,_+*9==Jh=l*:jhKi0^]A?\"j(-\DCoXg0e#u`oNK$':Ir,\hCqR+LQA2CjrST6(aeUD,.)V2@pgZ+#eZLl%>'u^DLc^bLp1R;.CXXO66[hn/Qoh+$\bAQnG+sZm##FaO^m4p:f/6raospZFO:=EFKpaX0%&k/0=cd_\QC8P6d)P;gTa2G -%:i`VY1=ATP@1pGc&-:T@92pKK,3?`Nc?)Ca!PP6\2e2oZ;`;:`*`&kL^lZmIXV','a3g-N>OZ4Cm6EWpdlc?$:dTPBH\Z3OO9r2@->?)]C#Hj8c<4ThX4Su/):NEPd"G[8"BW)b&fTEa]]U)Ka@rc$XP1@n,J-fC6RGg@d^-L,KXsd@KYcT8 -%:H7bpk>Z":Y#@YIfG-@u6(`u*oHhN`.PHlRcAVrq(2(*Atpm#L&'bG;/nmjJ]%Yj-ogL=oO1&tmAP[Q(><:KcCYj;J*i@C8OYakFlZS20_\3=*\EGbo\JdlsQKZiOfC_%aoot34EZ6sH'=MMs-P"F23blL>sjqH#EEK_Er+buQs:,R$%#1@(qZXMs5NjKCF/p3Lk -%:SIMmY3n!nTl"p.Z/OsPd>uEOd14U.JV'3t]=KVpV.E*-IZK2:q$S5peEf1rPK5YkE`FL98ssQ&?/-KJ^X21<%,&]KE?q%l'F_Y6@UUpMF3eoAXm`5r?OD8?-tLn*h\& -%:S+@a9)Chaf;A%L51[3P\9lRQ.q6?sd+(rZjC=dS_=..E3;5YNO@G@p:O.u-@/i*@,Om4g4VR&us>UMpU;0*0iWL@FDX7F'F*3COTE.j,(nSK-ca#eY>j1dZX^iQD+o-1ZTn&R,#b1TD-Za\(l -%:ehn'\=m$PsJo.QZFegBQEQl)$NFQ/98ku.E(LNA?PA;+-UnP!:31C@@i5g/lgt=7X:YnZbRIY*=,)`Kqk[?>Q5@?A'>c_O!\!eGl_6!pnoS(ibCSEGqS,"2dMY]2-f@R'JX`hhX$h"V;9EaT-9f+1B\-5h7En4M_G79mo+$M[3i-RA."jFCkq^5pT=fVX;'3t8+[4sp6@:?5AN_\1?r7JpANGt]8b4&<)CcZC84A>'B9+^, -%:2o[VS+ARQN`\LinBTl^DBTq7)D6c\#akuVH_0-B,&k";IrB5p;\-Y_a+LF+0))u;IL/EYW.n?W1p6X&j.E>HMh,U@*;lmeo_R[gBL5K/t<%^_AmO.c"+;5YCb)94O8?*^oGOZf,)nh(P%#Sfnn0l8#@8S?C+h9W5":`M6%uhYt4.`:IU+o0'60iAIkm;_7c:m;>6g%4q-!=..E3;7i$LYi"KC7f-\*nE^I\rH6eg"umjt -%:rV(`5rV*q2s7a2)UN&/^es15bQ"YYr`A,*L@SY:'7$*"VR"8b"Xr.A__EgqY0QhUmV_1n!qO)W6]c1Q@/]^p$-9AGL:RmYGes_TDE?3FQ`gI9k[0_bt$--TB<(NBg'=ZV4s:a7ic<25K6ar-@$TqS2a+I*=tC1rNdG`W4@'dZC#_I8)k(b6]GMr3GcF2JKYjYTGKlDD^@nY-b4XEj!MHBmAJEk)@WrVJQE?-@>#:$*6:UL&q!A0/DP,g9-oF$uG:_BWKM"s*mLCa$[+'j3EEIGk($1P6B6(gm>U)>UBHe^V=ce"k.(k$!"PmTPm=/4YHO3O9nV]'uoPp%*H]Uor#5qY\7VGI4s`?6rT.S>dt+jB4Ze'gG#^qb;^8G?Yi4$!7h,=FAeqel`9ju98QA]977/$ -%:=[VlNda4)dlFT%+DtDkkBfZkI^V.,p#&1I/U&$^MMYCCsWI?L$a(AChVZo,=PDUh>`9tT!nDA-m);EC65/kVS[)pWHD0"pTXa*AqpLcY7bltktDqKNT0'sI4[%%/B-`_glQ"C`1c#kiXU>OuLC>_[j8%`ihA=FM0UmfbNB6cB(8hi[[Q0il![@\=.jn7$i>\-6".1mZ&\_HQgBGop0LAeLC0J22\&" -%:;?N,37TD"O^J>;,Al?/IC>coDL+H,o&1K;YA0Ko`^T;7-3A`$Qe%6Sgdl-naV)L15J+nGh4I*ZTGgDttT>FDO4d)5X-'de%Z_h>\]!]M:84;&;YhA!bWXNIGq%;TNE;CTNC\B7'P7;gp' -%:A?))FDAK4a`a)L6$n^VKrcLYh>kZ1!\SCOAY4?U'*"$b)m%8ogE1.;/ki*U1=9m,\h<_26TdlJW]7VWHg_uVWg3*hdeV5c#(`3YHo39(CVK5hM^Y/61+9V9*!8fV4+$^$Uc!8$8l\V5\QqgiHL*pA:!8FiRPm*0]<>=DQq6]PnT/0A#>*C3Zkgc61'P6QJ0VIWpUgHA]+ls,&U#hP94mWT9$-.o%k](&=_W)L8ci1NIpn27hpp6fp50H:^QUm"-91H1_7kq56kYrq5+knX?]FlQ558_[X,26R".cM,m]V0Eq3aie>LHr"I-'U#gN-:uuMWTS>Dii,gl[U.0=0E73n5 -%:bV?I+mdo%>;8pr9KG9n*%]^_%?l"fg5O,J1B0-DS[RW>r$F[E+f_WF$c8OI3/N6)C((IOQFYbsE[J)W8&2E'idfS#]=7\KEn,/?X9&?^neYjdJLi)dX,Yj1M@bWmqLW4C*Q!spq]Z!HTLKM:LYlfc>16NeY*e]b*)'[VTUYg?ufHX*i4PO#g%k'?8MXJoM:Pa:8)=sYmTif6pc:2D@MN.>if$jYM47G2tTBJaQ9AT9>\,.8O4cTob -%:Ns@;Fq!bujnZSn]`uaCJ_%V'Kp(?7]j*5QPGF!Z'T$JJ_=9$0a`\k8X%65T!8mH/DC';G:j>TPuP, -%:PQsq/PYg;kOZ[':NP*@"i2>Y/8(0X8%J8GNJ\9qFDkKXf#3$#VV7Vdb_^B;@RZR(lF!&FV<#Jg;PM.9\buqI-Dgp9-7t?8-r08_7_aI$jq>ka;tM1,ms5>4U$,K$\F_G@O)Qia`Aqa-Yd&]G!8Zf%12&iFm7jX\.t642GK21o-c7__a8*;fQLm26lL%O,A\0AnUJY]F'"mo/=2T^@i8!!aJEPR -%:$:63lO:,N![,?_"V=51*_HV9'4(E/'2Vt4%#p8AiM(ZbBighe?,kI8k\.kF9]iNt`)"mE:9utCWYE<)BVC,Z2;e>QkI'$YFlQ"Lo_GUmTgt2[[IRtb\JD[8i_Fh,5BJHqGVgT88)P6%dqYZ6],Wgmr?YV(l*"l"UE:,[_ie$:d?tKX.q;IZ$Gf''Ep)H..1F%p_4u"b-p=gh&9j`W!sa<&@hSb^W'(S6BcM(G5Ya4o*YWWU>WDP(4L[ROQ.3jP67C[(W%Ee[GZi(1iMlWErZ<\"i;]0J),(J[Dh,rHH"t/n#Z!%M?-bc=W$k6#>mcZ[Oir73dE=dQ -%:O)G%\mGmAj+;cEsgj^esk"@Z_o:>]%Y05,g1AE+i*dkO$GNMQ^f',9fbrbICNM+1!#C^sIc?o/Cq`]>=_)d$aVnIanj84&S9/p"$Gc*]#=7!;\U9K^JeJfr2$CC>Qk:Q8akj%k(LQja<]&^+o5()'3`:W,C"*aRiP9diOV=ifn`:Oj[kD)NiKAG,$K\s;V6dHk$7lqu4@C-7>>VaD]I.8*"MYK\;d8n(J#G+7Xj-I\s+,.I%<ZU -%:UB,.+kEa#Eq4eCiP[_HRq*Prr+b5#f"tNd7,F5m6!WGqWFn&7#X"75c5>$j*nL_f1.uWYX2q!$mZmObY!N[K,$Bl&'?s<3LKJ.3kVR4M)+/NalUJrYT$CE$BdrM)dVdNE9:63duUU6Op3p!T`@%+$X@]7qD^/P5C<[7SoQHnU,@\d+VKtm,'%4/0$]8&1>p_2 -%:*tQL';^tArGZ\kHTp2rP.Y[-Q=3"tY`MM!L6X@*m<7];fY\\VJ1jZ-O<5D:5&P\7VmN-ukZI+:he,hH\OtekW.\X[X`nqE[&:OQ$62PMmhI')7+(dq@n;Dd$UXAjk/"+Cc4T,_>OoG5$eSo#)dl:R3Kt10LC)]#UeNk^Di)W.06%7DVmr-@c9?:XCiaP+,Q?C0I5W.S:`F>RGtSWHZPWO&'02^iErK[Z7:7dB99mH.81A<04YFN=7B_:tOWSFNMB,A2,?l$LEp_##5>`d4tZ]M(;6;;]he2"FM7\D*.sO$.=cq^FeOm&rW\=e)Cd<5>cJ -%::El5:O`a:0WI0(=kt>[Y?bN;M!7NYB5?aBSW?7-Lr4oP^oE15:/Kj`,PO]K'LK-^U#,%;-6$*l+)i)2]766DM1bR4Dkg#\f6haI/Y^^1i,&u`%X%!^TBa=_3G2<"M@Z$-->gQF>`eO@MS#RFBQ2!S;UepU,eUB-5sn_peK\UdIf< -%:9+O/eC/O839.4N2_j622>p:j(R#^/#1&BTZQe(8nW:Z?Z>qa7Iq&ulU8;j:Ih6].+kh9%8rBa]TVHngsk2&iJnSFtkem^_C_]%&%3qd-r6j_n&Ol:3r2*ns'&fbG\F@dJ*H?Y+q\KYEdU"\^cCJ4M=Hm%8ncebu1Z]Useg;rDqG57d4-<>2="ZC:_Fk[Y5N\8C?Af5-r?K>%u^LKhMn[DG';@ -%:\L"m--acYn5_B^__CI`t\5,1JYShJ9OKHr+r@F%R@@[#=DRX63j3^Q]ru0/S*B)AQp:ZT??r'f!55%"V.bMd+]K"Mm#\T4_kg`62iioJ+0FFR^ZbPXfb?\C*9KM*/\Hb?(\VKr"8Ch;KBblrnX_Y\mK!\mrn'glUs'C=mEJd7CO.EAN?U*d'n\i>YJrdHBn6tPdm3Jdg+7Z[E3pp%b5C$3^?%CsMSr7_kM@iL;1!9:)I+Qp0X0&K`=+hj!4bo(@g2G$2]&$TrXO'E5$r^r(QRa?d*(0H=6bd*!TGjUt6G6;T2O^S`t&[.?!.J#ePs4H%WHGT)]:e$Ju6(RN1A*liQ2/qtsHU7VKb.`KU\#>-)tWF,C8 -%:9IkX<9R#TgiKe4*5=,1@B=30Dejdl%KV5c7_^T^NJ)c7;]-(YFn=C@BQZk_d3*Q?#Go$T@c21S@A5rN"Y#*4s;]/(Det!>3\b,$I^?CN7_I)$O=7g.AV(?:'AO@D>JQB&kC<9ct[(1haMROpWm=,]7ih//U]3=(B^Y*9pj/Vc%\_`HgW1Lb?P=)RbE<>.n%'m@EE9S7KP,%L"5)P0&>t6qE#5.k3+7uLF)41oUbueL?\DXd%E#;\1 -%:MLYQs*ri:0eF3E8PNpC=qs)Gfn(M%(IKja^0i=h?&PU#u4F$OhH:=pP"$IhrZ4h\7b3%cGTS9Jfi/s7bXghA\#2m;e;Q`g[M['?9*@Cs6G4auDGa"JCg)i$aHb;Q/p6+QkME19M?b8THe*F8Wq"Ec.S35lDW^dOfX,d,mX]90(^#RhnRbDpo>&Bu@KDo0FT]5E4U;Bi2L3/ht@R,=Q^[:m\Kg6/cAAq?M/&\''6c -%:67,^g_>Q[JeZ/p/E?`2l6PT!ih$8S8r*cD3C`2r@K)g,`OR?G1pji-JL@4>,OX=Dcaf:Ja>S*Rj;T_]d">KF.rtPY*HY*2W!'h=60ab;lN0.7DnM_J7a-$gOaV^FW)U[YK$k"6pLG%C'GWir(GMQ\e7JoE>;<4GcPGaFgQDYUG?^trTYpe_dl6X6k3LCH*="\+[8=-sX,ne>.#P5jG5q_TV4Mj=FEA^`K,.jtKb"fM>H^_,H(QTC. -%:2BRG!LKk%QYH3Z"!""ebY!qe;$C%(jY\tV6_]bAE_I*ighDaQ!)8R8ghNgK(2;DA(8qUE`9M#p9GR,"f)oNfI:SM^eC15Fmo@ -%:%Xq^.2!#%oig+29u3]!OZ]h.J$S2#5L=T?[o'S]'e@oHVrb8Hcc0`8]Bu8XdoI`DU@$=oq6iU_)V>PO]jrWJrYa&JX/!+\28!`q8'\N-\_c.cHt0Oc<(9MYrHo8p"_S%n:)r#+.rmbhp/>F;>M_g1G[C%a/5:-b -%:fRd2f[f%%_d?]-)U@"m+UP\PA:+X/g8E_g;s0"2Q(B9`FL^]&4#N*;89aBRlj_d,".rI=2$,Zeup-s1Ap/=310&e8HeB]bEpthW'5*M?XE>!.9\!CgPmEm9NqAq$C2Sa83^FTBq"_Zm/0BBod3fmMH'A>q2Tg]9S#^8!j;*A?OHgrj*^g.GR<7+^4@%9ZeGP035+:cb@@!S"8H^Z=8DNktj5hh`cq9FDZ0JoF@]U'eA[%*a,%J0CUL-62[.[_d2orI9g$&%d6c+%6)@%i8e(Te$S&1GBESK(+p4U#MC;%aZ*_s#d -%:e5#Q;/ICe[KoFk"*V(JbWqo*k`UM"E))"d*dnUY3BrE%":T&;)j%r,cr=G!A&O8g;Z^ZC\G?Cg;EgE>HsNCtN+WBPGV1h+5gIZB@F@P-a6FDV>7\Mgi6";dQEGoYNb%>5r%VZ9Wj5jGjh45q%q^ROa<"PuE)+9Dg?,Qb):3DP_Nt?_MY*]\H5n6>4,'m2,=ce;D3a[)s9WkOPYI=CaF#C^grp -%:OfQkRf:[&Wm0mr@\(#0=IHB5.1>dfs.+EGEYL@XJTLX-^+*7\JDho>mP:0iAF12eVW<,)\oJ)lXonG8Z@@^97ot8T2%4mVCZpSlGSLK&(KZfi>LJ@=T[u/ig[+d:42Y)%@MJE]IUV,VMPu:pfb"f%&?$ZiY]SW;pNgg*K!>SlBnontsmM4^EPfe@6rEuUSEa*h#0h1nerUGS_I;pc8:V9pSK(o0`r8$_nCK)_bRn6DT\biDji4I#( -%:^h\^Q`#p5P>-L1(@!goB+HA8u41kgj*7AcLn6t#VBO#Q:@n6*0_rm/%\cP;a+eM*nem"*Q*SR:5P,IpD#[(2f?nTX#hN03+2-)h(mH,lb]S>[KTcNK'/<4g1aqS'@`O?uJfn:'/bG#\1hjp!mqU;PMXEa*(5N@g*=@O0`X>':Xl%1Q"l],^t1tLk%g_$dHh+.b?"6ic.$s]cg?*3A,MKojMrM2iF$$NnN5ZJ9i#,77<9.7@ -%:98u6F\IHjU0`7(eGj$adh/=@GbF$2&Q>O"p%"(N2r^1JQ),!V0iB71)iB9`)Hr\?WrmS"*s3aUXjM/*%jD1%]1qU%;5/#Scm-IL>)OD!1eY*Pa9\beZ8dm_J@IiEdk4 -%:@Qc,b(8QHim(p&4?l:cWO?FH;((BZq%.A4kjin2U[4;C:McVWa)fTH;T2R/A`rW.NdV$00M;c5@qB>ZqgsE51qC&:o6f9iIS,M*A1jIojD9*b,mgFj\FG:;d_[:"1:G,uSruRdg"/":f6boZDb3Sl*T-6%,XVluSdliU338cGK$s[hF@QeS>*;h"\ZD[:6i;^c86hXnYS,"q*IB55P_AQB21OT1'@0d1!@0XF_*Xe[L]2;n<63dkb -%:[-DflKm]?q@o_229G"L+bO(8nNhX-=-kJ[TUhia0fi;hq,M!T'Y,7\Vg/<',&4'F1O\GlN;%gGQ/jAI([08GZPp0*l#\+/F2=)fn1Gb;qDl#eeu3\$ur8`]r*u\e/^*(cSGZq5#su6N*ZP9@9R",HI0rr`:3R]3:$$U#^gq#;jiOW(\Y%jO2)A1m,+[Y5m]Ydr+XjT -%:a;tcM"iGOF_Z\6rQVcHT5*(Q]1^ncr>7eGWU+*:Tp&>'MA2#5_Hkfp&m/LcQnG16Fi-c7$.BGnOl!QYUS37>&!aG:+6hXoT,T%lo$r],Q]GNCY/92a._ah&r3kd!Y#Q`NPPh0\TEsRc;@n(?kV]S4_<@<-mj,5p=+OG^X!VVbYh8/R.:A4$c&qp;67A7.^Nr=$-bVE5J;-pONe1c<.DOj/[ECC@c7`85]C@\gNs[Yrc(+8fQI?d*("r,g#rgX'.#FI_qT0UJ,HAE!cOX1$.=BN'^PIDi[f.<$G3'L@E`o:O?FGDe#tLucO/`q -%:dM^au_jY1l&&(eNCud9^i1lYmnNVOA:O0YOjVCsY`L2i*5"W[.?!U.^@gW1mMDHV.f"FKL0,8(f@tLrcZ'>dOK:uR)o[+QQEe^ta(tt:\bWSnW"!&K_]TZn96-g+uK:f=ISH$]i`:31PREpaeCrMUB&0!UrbppS%XYI&[D5k?LU)-SO-AkTn+3iLXaA^IlR*qo;L-d(aLNlDFGA25@9k\,k7r3H2kP;,#/4>`K>"k:$Bgo/ -%:)(+J@N]is/-Slo#N"=R_?8V$lnFb?#fW4l46JL0Lmi*g,FX-V>b:NALY8BY#@$ja>@=Fc@K/:H[l95clRo"pSR^.njR#j@o]q#!:jd#@SA+o7W*A\>Gj@eUfo@/s*P=FVE08i&f=Rglj_-[0J)RV!h"Y;Rc7,dpA(o@I]>,?qEDn>;qqgHd/3cYBD:u\%N9X!iuK! -%:[kk1l\,BJKZ3S:IJmgO-@'!Rpt2A4%pP5_![HE`tER/1h7,O2$Lm$3lB[A@8eu")[2_;K^E3l^mjpCZ1q"AU%ilkEq[.N%q\.;Gj!^:p;YESi6pAd#pO8F6E!4.k;^N5@cs_*9jT:`)ie8P&0PhlsYbB@H&SKbObja2%"^"C6:1iG?^9(LPS`,gbM[mp4g53:N,_cg;%:EoCgBbIhb=\(hc6rIXQ@E$-aa_t1;bpLfY%gXs>ob._QmL1Df:lGX/4D*9/7g@I/6+5Y/9.!PQH#4umMMY6TOWYg"qPpuW2V1J1L;iCA(3j/>B7DdBk@)Ss0?$N -%:*M\oQ-0L<9MmRm`U\oOP@+s\b/?KOG/p=H>['R^'&-H'9q.hPSg>>jYcgqo^RG0o:8LaWi]g[EdWR"o%,$9la+@_9SRGUFY`4J_8?KA-V!5i$b#=e9`/Akee.1=sZe;tFFZ^3Q.f8D6KO\&6Q;*'9i_l1R_4TVijFP36%_g,L[V#s#Ci%o2_]CkVSt'4n1IG@k+-mK<3uI1pkuX0)NAD!aZ^\oE3ffa4h%:P$9RFh:`T%UD3ndeSA-n/T&4W\jhHG7$'CpgiX/>'Q>.OPs(l7p]Ya$R;R5Jilo!m,nkVaafqXhOPGFKF3l?N=@='fJ[&h7u6cLiPa,IbcZOC1ZmQpObatc/KkD=AJ[IA?L:.Pn=k^rZ*f+rPkoRspVR-sA+Kf4, -%:7q@q:pa%Xgn+A8*/"XS_66^eP47f:GmrU;_V/t;6IZsYj_B/l25`9Sp4L5`O0_bu+&)i,#Jm:*%QW0PgIbQEn.Bi@[F4iWUg5Ijt-iW9d9-/%Ji4G$dZ';k9.Ft!7QEcCI(G(%'0YD7ef8r-4INfV(eeq6A$pQX+I._&+9=mBL)>Ih)Y:Of$H?_Dhf[d9[;DpVER(AJn3kB!4/=AEc8a9U@mZ:(n&6lO7EFL0`"3h`Vt#11nHZ!u&.L?l;2A-&1*ndobbi+.88;HC[g9bWk^)<#q0Tj6*Pt -%:f<`])pa(7am,fktAlG#BV\71/*5lsPKAeAtE44&2%VOGEbjb#(BU3qaQPoR9oLkJb2N&DaS12Xe$PYBA0hglHR:T\%O2,re:8>X2i2pg&bqcC=/A;7IKsgZ]2k'*q(q$fZ[rf'#Zh1QqZOF,JZ])2KZV7Yu[EQ#%[5@',&Pa5-(sRDg@l.PWC]Q2W\Ha`$qTl]YZ$]t?MiLYYQ]dPB"O`SMQ5+mPT`;q#/@4&<;FR,t_,B^o03IIY -%:',V]jT4L.&OkS)_b!a7lbQa^liXC1%)FIon(_2"4\l_7Ri-Z*(iInBDW)$$RMcO@3)huI'#Etb<%]$IV+P0AIb9hJ]KPCn(oU:r-&3`%A1Ek5FP-J!krTl1_Kq^AQ5>QJQ#5#9q(@JZ12q]gH10pno[<"M)8Y]^d4=^JG8(^OF2N06J#8RGe1_n=\(r&8*uLbg:Z\&^+GN#Rn'L/AO$fqo-2L9@[Oop[Y9ej,pA";L#1IFe\1Ao*%$rei'_c'=QbATt#QJu]O5\+R"6\ahU"Y*SCZ&Is>'MGSfKk2bRn:i_SN1VV21W(;'*THCH3Q%IK6QGgUmEkQC1s7L1$OjDgb%01RZRN)>c#J\bI,KRsd-p*T`]D0BI4cLN9]aa%f?UoXle@W]h(=RsrDO%3g!&r]@/.(Rn.]Lp`6?U)h)`Qe0*DAo`uolH -%:Z_oOdW#dZ%9Ge!gY.Fo_6_>Q\n\&84.4N3R3UQ^&`/Z0]`mJQLHN/Gj`r0P$MSBpM2RV3Vj^eWt,)Rk.bq4"]>m^:,)jr*VNn3GnSN4%AH"ULSE.4c[oCU1EG3ail%q0D$'j?Ema7E"rB17?Q%WgbB/O/QhT$!I0Aq_oQ)-,IRt?X\e5+&!jWsN50,7)G'X1/YgI,ic_Og$\e(*[I>W.RR/p]peB-1?#P8:SAoLa)SAMV@b,`G -%:6LY#G1=a4VnC9_t+Nk8;/+8::/B^*!"0hkN2U?!gkKaMEs5k50GB6]a>cjlT>dk#m`J9#oI\W"L$uqt>T@En91VCjJN\E8JWnNiF]`l3e4K&0ifiOJ9?>:>_b>^*@+>V0MWZ''LY[1_o'%L.YF=Y=fS;:6TVb0=JL]k`sRP/2-6a9q@U2:_r:p?=.PRi1'!G,XjTZTR:Wa-[`6:;KGOK#5T2 -%:p\k=#k)fk"HoNe@jiFh?/3`G`&/dqJkmA3@quWW?)=P$.FJA:bWd$?'W5<8]F+&/#h$A%%n).eWFkq2PB-fsb>WDOj93GZqu^:[e#j]Z>Oc-Peq8ZmB)#'LiH)[c^YfN?!-`?m(!\VdF"BN&WaUHJT/'FhbnZ5?iuOG.XagX#_a:-PZ0\rd"W#2p3)<^k)AL12Nu7Gg[KH,CM[2`&[)pMYH#n2;,NIi0lkcJD*;`Q\=6Ys!e(OQs&/%LO`[$-^-skDh:O.9?(3SM3 -%:!/^"jYM9XHYft.Q4:iBb4S3&uaDlbs[rE1TktA8_(?%1;a#,$=jD'e)PJnF$5Ugq&jRf5Ij'fkSN>H=c$5NfZLN-ik"E##c[P%R^oq( -%:=Ott5ZE%JWa`>AkVrbMOQK=_"Ol`S(V<+g*d?87d<5A&TGDq7h:IXhrN"gRTQ!^=;$6K@D-!0<00MQKGH:@@)bKg`C -%:s8Tk7C8#-jdtq`WEfAY?&odn+jTHo;BEqiGEUO(6^'6NJ+>lo%C1[h*'%".-MrL!)gg0T?,o(.u8o_LPYK>oQ4,$uIWmU=dL+:0'e!TDeK,c,%0^1f0N@?J6;8O9[a^cSHq8sZ_W&heSHsq3V[pX\dLaD>RY[\9t\L!#KN9q072iaMfV"c -%:#m"AiYuD`BIOP8G?7U<3^3Kji_76.;Z5hLY%VEhOm(lM7(K7^.@U;YZc>^@_@G8QCi-0Pl1GCtb+o#Ebb7qU_oCb0Is16+,`%_-J3r`E!jkro#n\[[AOHs\,aBL[p)?`a)_GUiuoHX-*`FT%VNI1oFHcJR@\dP.8>OfLj4W''IA;\*b9Q>$+ZcihVMq/&CGCO44>-B,XXk8g-b1_k;7(-ZqOgjnL>@=S*`R8m&X8X\!o6D?'`H;1B`b(P7fbCY#>/k[;K;$phVW^+`PX:o!Cbs!$4d5E(iJYpqbgtObp:;V,"Gg*pB0KW;R1NR_X4nl'!heKk -%:(EXkUA)7akYX:12/#C]unG9tZV1nXFgX<87fn6!N8Z(]5aV6+83605s@sV/EX140-QoXeOn@S3,ji(EqLS,%=hRFf\@FkC:&5Zc,^s(\CJH%R8cG\.dPQnlh?!0YsDntfPLEV!u'KaDNI4(F\S26[NAsi;)$.t$m4XD+))W2i^J`nC)_j6e.J+@b='#VrBpmT0]6Nq)O-k/AFkYe)p:)j?/Og-J)fi7HthI4JH%)kss7Gg\6^(H*` -%:Pi`Bo).#uVI)M$u*"(r9tpRF^C)t'!,JT\BBss(lFkpMS>9J.F/l\C1d6Qn0!f[3\c3Us+'3.;9J31X+oQa@\4NpiS2Z._<^QU!oL)>"m+3TMY1R/qF>[HZF%t")9t/s9Xlt]nE!0a^a)EuOR!^W]J<]bpJVrr]\JVdVA?]OEnjB?NK4;T -%:an(RGFEn6If9^nNY0rU^]Z(Bl$\R+o:%hsCG*4XRpI"- -%:03m_i;)qJpCsUF*nZlY*1\UE?ODE_WjnD212Z%+r"cZ!_gX2D;ptUQ-FYiZ]Ne;K8]GumJouNU]80smt#(E2*ogFbh3>UuWnHFP+6L#Mo[5lACCjHPTE!bEW\J_JUbm-h,bmZfL%%HMjRrO2Hs1+O'aHm*^pX/+)/cPO(HGOMJ0.#aZ#e8a,"4;>$*!cPZ8R6@U9aU<7>EWGu,%cJ0l`X^\g'53.j%GDTg!!9/(K7^.@U;YWTN(`Q -%:c>\o6Tb?5bHrjd0k\/6($\%+s:gRJS@j#`#'+[KcehU8-8+ZI(TrImKZs][GYmgAE[#/T,>kn2biLL/WA$3[U2h8j(5a)(tMg(j?%/>9!l$3?uH' -%:"7Pm`hgb-9ROXeh;93@(@OISiA@9qYM:jRg\YO_G(rW@@9Pt(QK:FL#K,-a&Yf:Dt02DZ%/aV9.NR51!_>]+#lfX.\e\JUcf-a/-066BYB%or,t3L:!1Pf[h$*j#aJ3B4h^f%p!Q(@HWt"nHW&TRqUma9BkU -%:bF>^Ug&4KT7I29uoUTO88Bu1.R:18sNZd5\aoj?:.tIIUCgp`J[t;pJ29\UTHM080cSXOAK+/WIEdS_Cb$I4^(N*T_/u%kH6BZ%1;>VIk._[F)1\;hA2fAL$U4_d;1)o(>#2@r6cVKZc)iO?Ot$6&11_YB\C-#'D\=\RR"PVSSQ]$Sd]H:=7$TYl:5Yg/[*aYiJdST2^m]1(&/b[Y>ft1#U0g:tMA8*/)XJ1X6K#;Yi%no)ONe3QFtlG?0'9!X_&9C31CUF-)#OlH!.k(uiU3bl]I>B.6BM3X&8FOB)#VDd#l$0A)uBSc9Cf%XngaD@/,E\@^RKDc[+IAZ#hFnN-`L^\>>Xp@>R8dc&UG9-f=GN@k+KL8#r_J#Z.6GT)I&?-G2(],^o(YJspZoW(eOUjQ)2atqMS>9J=iD7r0Ja.2I=RAGZibkNIILZiSlZam1gqJ`n!H$W1(4W'[##;4 -%:!8];'#Rl/^!Goe%@Ml?4%bNtac#[*:_8^X(g!"DpkUH@'11_J=M"c,KlS.B6?EPC["%1OqJ56_NILs5s%/=GTGp'NcG$OEZek0=`*V@LdS`b-O)^r@;hh9q(NPW>:'/!d1ZC0Zt_,0#\VJP<%2gI)>X+K6gHk<#^kjVI-DmrVN@C:+,`1Dl.8.8"Y!rmJ>"bqK\$iK2J63Z)_1L."%F;[ErD?dl=kCm_a.!Cb&qG&eW$YT7:5Y((/ -%:R:5TEIc0g-3#EKQCHhOE4NA?-Y0;kWb_4KgR0US&LNNYcrmMj7Rsr]LE3B@kE:G1Je.D,/R0GsgCh>)=Ot$6&11^]'\Co*QGC:@u;JUp#.h$5'\/kE_V;45Cb%sCTk^2GEfY`L,i4*O3';+%in-`n7et?[6(RGS;%9j1mbY[XO;tQVkar\h>QV?3%d&-suJMqEV!^FZ)i6enq%DLZPK's"1%n).9PDb!9?$tCoJL,8mp`1.c)2A$M -%::j$qE-oI1(-`m\Wa5Hu)UW[8(@OISb;1?r0fB=Kao`=FN3V45GB''5S+aeq6:I1DDpm'R_?sEelO,k.u#qCf'EUeYeE.gKK-um4?C1oHN-@kjZq$O^ZVD-_M`.(DrMe)E/>goa*D?MXLuln.5:IOE!kRHQg!^7^J>)b%Jj@AZ;t%=fm(HCf7\k4-f9!Dg6JeU788'ihC4%@9/)">Fi*@&38ddLWCUcV$n'O6riG.+Y!^=-^^$1D>Fk@;qqkP4Nb.kG:h?V7/a3ZX#P?LAqAqoIP6Z'H&QZA3E`/A@(JY:rH)rN[+#7N._2A,ih)GjbF:FAEC75#0>L,!PJK7DSZJV=a,D+O@!i8m#u'DNX5!/4UK"M`4iTqF$-)2atqMS>9J\]brZ0f+dUO1"MV)Aq\>cjKoDi.u!#@SIq2;#[X\&/c6ts##u./^SdK4Ts9J\B4m> -%:8$NE98-T%A5="Sge)8!LW0#74`D/0Whas\MjUAm[1K<,4"lJR//X`\r^S:@/25'cr"e+^=DH1"i7"PE'W?_hR-?V9aC^09-^g^t,ZCjcL:GUihTCiphh)AVq\WG._aL^ljQhE&%An^Dj@(aI0mm(?Cb#u%/Gb;jdkUsJ> -%:3',&)b)L?Q7Z[rT>Y#9q'AH'Q3)W49XurEJ4W[9?G/n<^Pu<_ig%$1'S3 -%:`*CG8An$&T>&qpkOeH:X>k%T7MSOTeAFRGC_cTca:P!B/<64ZK2qU=//S$Y)Z'.l/GEOB]SDdm4_l-QU_(-W0%#h@&'`X;k6'jkl>FFF$RNckITj -%:ZW$YPP&[pn.UQ/\:g8fme(e8P=TL#D2"`Nt=!_.onDC6Vns9W(smpfe^ZT*HQk= -%:\QADNS/[)Z::a*`<`a$.C;--Ir0Oh2Km)fI'Am,Rjs%RZIm-(cj#fp\T))r;`HIZebPkG;g33Hbno+;BU97etTet(%+^4Mbb0o.+@lNX/\`;0^l[Shl4^qbQGqsAfk5ApeBhW4mhT[+1s'_MVs6$_09UYp!g]*`u-CjK'9pu"8^?qdKXSBj4ir1.q[r[$8a$??oFD"NQG1*p8QN>nHp2ANqHT+tc>bjoii^F6A.T2M'7.DpjPeD(H -%:s4'!'UIM-QeART&R[LILZC>kO>NA[S;bg8$I]!_EA4b[Mpo`W`%*h$n2n6.c8E!FHBmPJ\.Nq4hGYLP_N)>F_s/<)D<2@JZrRZCf<`AFB*qeeE\'P!b.r8Wlh;d9$Q&pSU'p#nTfnT&CiQeiulR@+qjbIk22qI]a:$,Wu>b1$#&uBP>'Q\+t'67F27$r;qE?Su1gn#*4G:RdE+ih`E=k?U@rC\#VNlK$,j6-'dlf`WZ0'(3KSaA/+ -%:'N`W0Op4QraHHLa-sBc-+"Si$MiW6bJX1"?.==AOU3D($SSc@s216Y?ejOZreBsSam,*'',OL-J,fO(+Q#rooAN[r0%:QWiDla!s"sn!:[nBE!ui^6CcFqE/*CoYYCrf%JbF=bSeV7"YfBiZY`4V\):b.rf"E$o.atoDI:G%Bk(IN%+9Xs_?_L!4Y85'm9=F29Q4pAF)(8u -%:h7rT(bbtEkc!aM/k@QdTZT-P\6.o0hT'S0_.2unkq)D"sLaBd8-"/0nd?&'))(gkuP=JRO"ob_O;7Ep^^\;p.cU8"`I'g,>/TFK^(U;&ddq%`jD5K=0XqnS-/T%N/s0^.APnUMnNdJ)KtSajdL\RF?H\U`h6KAg7ULsCf'LYKD8Ol.G!d@6!%$:F$ -%:WH&RmBrY^DBkkEfV%JpXT<+s9\c.`+nK5],CR!7F;_D!9PFEecc5.aD,J6IEK:A7oi2/sg\_*O%*n`=fNTB*^q-:__6lD2URS/#`[J740?oQlj;I6a^EYD?7[.Sp^?2iGMd^UW;d3@?i?l'GqLSkN&UX=Ho"@&O;)R:+88k*m/%6$f3R[^(;9^R)`>'ib]I'/oV/UQJP79l%`c^bMdc_`(<'pH;AcU)%]NQVW5PK;hjO$ID,lL=N=u^<48s]7NY5'oSj&I&(A65oM:!OSi6^CDPh.]R_[l/n=E":.gGh@a%3G.fUM()cbOVT_&hUi1?=gb0XD3tH\T76:],@qHiIH"&Npe(0;@'J/Mm:.o)IF'n,#\%con!=tO86IA.Q>Qd1<5FX\]^nDo4`57>o]/.F%VqJLC98P*ujV2Tdg/.to"-QU;d7jKdP;dqfYJBN%`f'IO3N]laPMp+iAd/tUBo>J)uI@$iJn,pg`RcH?r,@t$>5mQ!XVlZp(df/*I+D$O+7#+8#V5sq#l+kATPc\j4m5l\V)RK0V8NT.LT^940db_*Y.HdfjjHUl"?TH0=?$'WNFQ%dVQ%d9(Hp`LAFn.m/b)q#p*Imt'PqEEb -%:*6)Q#b95\+ld[b4qG%(6>4+DA4inq`*%Q^RSb\[F0'DT:2+!p\?Qeog;2Z6es6QTLftL\XS]h03\fJRh4bZu'%6WP\Q+TopoeWV3)R4Gbr(^+%888$;b<:EF2H&U7!C2>.=jZK+HoUjH82uW1p*@'a,[E*XRX`@`[dfdd<2_8uU#+/Y:hG=!51HdU4iK'E& -%:q3@]&V53t2*@Z:B[kF8MAbD,V2q)PWgq51,5PT(*ZdepH15`&Nc\cN+ZdqHp?+i1Se:)*QTb1n99DO=\Rm`^u1]JO'o.<1?@SMghSYeRYed/0cHQhHPlbBU"d+:X!Oi%6XEV65PpKg\[YAe$:21L*R=OdGZcMatd:"pjYQ<)>e8tcnfd[GPHKe"Z[&orTIr&cDjZluR@mRH)8G;=psoq"Y1HZ_2eBs2mupPGX" -%:55YGqfA^G\l0##9Zt,dlrFfBd*+ioIcZ)P'i50frkf48VT5^P#,:?C-L'"_i;0e"8KNXbqnH/Z2YAE?kp*hF7)t+Eu6o0>MTO2&3BMO*s_AP:U$X&pi+t#hUAu6H2l3aGlne\Sg-0nNf*ip#]![m_Y,NR1>luYZ/R(OV)729#pP;:slW)ngqKbL'-UYdT:e&8*#.!j0,F-rf/hf_n>8s>ZQk+.akL-KHQ[:^+foY!]1&Mr/Ilqr1j -%:3S)R/n)Ru6YO=)fPS%MA:`4KRe*`,'=mB@DW4Z=\978kWOgGSkY*G0!Q\`EfeT5D1q5dn,)[^r9/gY&-H^03rX%0n+_DWW7$#L$J;0Qga.,r+h>X2"MiM>eeDb*NT7lk=1:UVaGVP&_66C+X"S1HU)[FF/%Pd\Y_r)n0/[$1].(NlFM.l5FY8B!5S!X@t5q]P]q'5T@Re)msGI]:s^dE(deKK3)>f$u1+-c.gakss-$m*&n(RT>k#fttsWFcC4clq_*$pCS?i]ku0k6N4'9DKMPMqT5_SZ:VnSIS]Je -%:gt5,aV7uXrV.f,T*[2Soc.OL[7e'1-OOc4$kd?6]T)'mqWB$;se%-^R\2n3c>LnupVGL%H\3O?@=#f@ABDV>l+H7s8JHEIETa@U&oVM;!`0rI'PMU5$Ul",0d&3JkV$q_6Po:9-]Jkc?du6Sd$KEdMK^d<5*Z<4Fs4&k^b'?.PE(lW?,0CuPQ3:aY(Hoo8*5hb3sJ)q1n<7EBt'E%,?: -%:I9aeAEg>m7MQnugmg:5@(h&GYK(nNR"Z5=5/UD`hR3jMt8M@7?J2C]Y;0inIM^J,DkZ.WJ1ne4u]j=cDU^UBS?uf27:j`J\H;^$J/oWP@dHt#^LF^dCK=sF>Oc1tA3(gY)]OYtLlNQoh]Z`DXRc?5Q]l99lh^h0fU-$ba=7bWs#`jCSREX+"g_')iUd<Ybbjh=h%?\rg$Eaa%Jcj)<.iG(QKgRb+I?N@G3A$&XK=lAoFLIZTiVO=@7W2@aU_qoKuCIn`GjR2be@CW!<`)_ORST$IZVqV.q[>A -%:rDNK0/GUTFEUU55p/uV9r5bMQYP9@YQKn#OI@f=7Q[tn%@pgFE(u[cQY&uIS=Xqjs0d1D!2HAV8c*gWD`1(M^/^GbhR#PJ]NZ.OSgSo%mtIbL4Dqh/b,gSCKcO**&)l;*MQ[Rd.'D)dP2=`]#R@h,ipWE1atS\/g\;WiRoRRbZj2IreJ?!3:hZIF6UG0P+.&i9FR8M";9\Da<1KoSi^OOZoa"K6(=W5_$M3]LM!ZT.u8i("d]Ghj"Ycm1-?4l(1[d.`]BsN+C[HVkZec!'>bS%C,29`_NoF6*]f[HgbN+ICRZgNAR[3573eV1g#;:Ta11*'ojgOV7g:aDM@\Om>Wl\=?-]9Lk4MgZK5e6`9:P) -%:`.kU]0RfSRJPM:2Xk9DZjF9NaY3+53%ZR,I4l9p%+,5VO`a.FaW:qR>iluF9hU:[nHcrU&[MRd -%:Su5Y[]os)Jl?IRfL:%\4,C2d@QRL$/8sGTA,t`1+.Oe54>EgO)iICF1fqh!.OsT;^($XGIH8]A9V'9t18RGCBUeh!<$WbAIM5!T+n)S+>A?"XmNm`_aa\pf?(GlKn[NS<*Y)J^p$^E8CCb];'Hb%.N/60tO<5oqXZ;g3tA^*&UN"&pi*R[MPA3\Cp/Cj-:85%*\9rhg(ajGF'G5h2$ -%:A!o55A>uD<'e'VmZIC>_S&A4H;O?_DV"dm1;YRfB1l"PQD9,VI7;(`An;ZBG"Uqg$Q;NJ@/Zt.-2fT;qQ@C%hXd)S%TWW!DMc"4^!)mTSS;`TN`OJQD,F)";3'XJrUV4Tr:==RH'fB\>o%OtU2s/MUOm^q5./60:O8kU*ddY9=3N_9>cP7:YEgGkgk5'(W]Z;c)<'_s;F//=r!m(gTq -%:RToSD2In7dnp+-rWamRIWj;3/<3h`5r=&KZ<'knY5YL-%c%[c\)0SolZ:^G2[p1.ZW03u68Rj82Pq9Ig>:qkC8sYV\miee6Pq4q@S"p.fP,76BdF)r0a`ZHo&NAULIU^f2kBR]^I3+/GZNbPYnV:,M(?:B_V5Bt"-&=$P-7VtcC,:;S&6JVrri'meXYHrsgj(-!BcYe**m!;Dc]8T_rl"d;nFT(G*Q&qRXHUpp^#-*p6MPs#G(H1IfXU47OO"BpsC*T"*G+VN&YERb*r -%:We<4-M8k;+n?C1,W&5q+'J*?7'_C?^OH5B!4ra\t7WS=jYFR`+^8k:!"YGFl\^8Nkt>s#\o@Ta7?n&,=hHRXWteZBYD=?g(;V#Er(e&0-r<'okM^BXN.9reoTM#$N(q8%t=+i2`+s.FS<];pTAB@fl".1.4M9pLu-+3CYudd#OKo!@eC8k>Fa^7]H%"'?_B?!BA:cPH+O69=?hP("rgTb>dR?==FDiiu*H!?JYrgS.&8641GNNc':0V%Q[Nn\]H[X,fkDTc]J]:NT[';CboDmYok9Obo^no"V^2c\.'!r,35JTD(O,Xj+:YeRgoC)\Co9^=[bIf?bA>lW[FniDg'gbpohB!l(b\\lBucmURX9['mHaU?90]8B8k;$VD\PbdUa+`[[7ig-WJ#B7q1t>Z93RUBcIeuBZD>aK'%4bI^U+u?U/XIjeE!Qoq*Yg[OR=BoTk3Rl?R;N6RiBJg.tm!`E]s].<'kohHWNjgjL.ZO0BScjImbTYa!i"uN'ns;HnXo#WJ#A.mPW6'1gD?&4e;m8VbZna6K/>W/jgeXrD-'r5YNK"]n+?]'VlAiiRPYGMV!>W69/#Om&F8)pkusBm\Q(s'C=c8)Si&KtE2In8k_uMB%l;/G*PUk?l/Uui-)mY^g:`D!%jbu)cJhMo#5cIAAZ8CpJAQi!bL+HmG]e+l'.TsX_9%SNr%9^QO_7A*N/:#MZ.0HCr+gEJ@?E'*a'T'G:Nb_kO&m],8k;/b%+_`W8>-[EcQ37t]QMMuK_2>0I4a()!0rWiZF&$e-Q])s;KU1t>+t=ne`B9TgKVWPN-d@!l/pd\i+*@Ici:7HdEiR,1^rC1q@IZcWZ^!T6?7!+^]Ujrj4e\nm3WV=7ht@13fS@/OB"Z -%:pbd;&JG^<$`4SA#Y_'S)CT$LK+4KD^p8![]7c1'`74dfd'AbmY8k?J6S?l3m.?]*nSmlkL&$mSiR3kr2SZ`Z?'FH6rqXl)5;FOb%gjZJA8Nak:@p9bH7p:(bK2J:(k*Eq[.8X\)O/5L#o#.OnH&D5,Ck9GTXEZMFm&$+ITKKM.:pRo.mT`XTVNr\T^%gA".ooV9HCV,p7=VA5&e]qCG`n"X8EUcO_d!8.OSi:-%S`mB -%:?nR"&8@Q=Tlp$biKPiL#@R3QZ8mK/*(mU1:Gfs%D<'oRV=tT:)N[bKp-^0?s5tDjb_K_G78/Qloi2/h3r)cFCPS?I$(_qeh'ghbajIV<-.>7?hf5OCk;$i($*D7r;Ol;:D./r(,'n;gPG>e?YKn>2:s4NU;3ltA#KCjMXR^S?fK')R[`*M$uq%G8^1A0`4@0[$7k)'m&.WP`hb\un4G>o,bT%6[QfGJ%_ZF4X'9@["IP\k@hH+03J7adpA?]cI;_NN#WGU`Cs+/[k`@Rf-AeXa%a;-=EtU\ZWPmN!g2*%TpqhD3>.c_=P\uo(Wf:$G(NCt##f%d8_@Te4%R$1Kfis7 -%:!(ncAd'\Jfkqel&1jc6J,j42/q)9;Z0:gKW^$j)`m+`h(BTA,?+_=;0*lS7%ORJHGI6LC&b`AWdWE12&L.\D8)I>E8YAKA^(7FZuOpSlo-@B9b$"Z[qk#n0bRBaS[rOc[G)GK8k,kP=(.=\lP12XDJb/#"(hi1h@Rn)[;=/g:4>04Wml5u[dYe"kA4LCGKLc']bqHG^-bd#=cm#iZ2#-h#/(5:bVRr^sr/87%0=Np.R70ej-*"d?b -%:KZ,`LRTFU['3WG79erq*O/3Im#+;oYbqYs(bqk,X.X8W^7_L9Lf['I -%:[:V;7b2h!,50aJ2b\ajgZi)VTDa&ceL7LW]9m>,nQ@=D$ohnFBUA5sh2=S<7>T$`#VI.Hr;l7&YpKX`-CYl8M4/;OIUBXS:?3OE1'RDC^Eu1=-M`X[sf*N?R?HpL1[M/^4dZ/0$#tphRgrp)9G9%nY%)K`rq'Gr"VDo31>$6BII[NnZ54kb'g,T*_ -%:`m)b:QBJuH7Se(V2:H:>@X@TT3FY#8R8"3<4r-?Q.;TL#P\>/Z]%`)Q2E#fo!o:D'O7-WeksT`Q3la"m:3cA?/kG],)p=Zb&3D+f=-aA^/,\?n^+X(ri_)/M0/oM%FJpZpfdBuj,`BqtYs?(HJHXg\],q@=ipZALJ@?sb;C6UDoRo>D^ -%:"n1s#:Q\QAP-Pu7b7c@6ll*]>9o/"%10>92le,"1[c!Ug""o;;Cb88,5$"F)l6TdXKeUmLBfY7,Vk.>7bh1RGo@Br4:V-u;*p9'La\skX@fF)UmGK0E;mds$2*&IK_fIa6FiOoUkF&+;*rBgh;km^AatmT[Qilq.FOMZacajF?IH2Yacbu#GP((b3ubKdd3)]F%([/u -%:5cJ;9dj_sE?7K)MGOVZgTILPSa!&!+m3T1ej'o\N<((2"OsRRla^iYb8s\u$]cXuAL+K0)P(UL1IUkf:QUA8b%CREQaTg=QIQMAN#mF#N3e_8=Y%GUoD+&>kJ2DbYa'CrF2kKA^aj=`^`48'0ESV&cDQ/<5+l>b`!@FcXo -%:EDLbc<42LDNoQ5B1+t_.X+pX#d+3q=iqUdA%M&O$AHt`+]Nj=08b+Wt!1R13r$[OpRBC,!)atjI6rAt1r*-A/FaD0fUSZi0%Qpr,:/X%+jGF%hol&)+\VacQD-/'[NS;hX8PVngsLj-3F32kW$tqfaHGe%D2Lp>a+c/8VIK%] -%:;]LZcabO^^A-p"qjJl-:7"Sp0;J7jMX@".(r!80H_E;Xj=F;!YpC=Q=gh4=FF&kKJOt=R8i3?k[=Q9&a&MfYc6/6:kf/lo%J]oSe@GLG>o%7qT$d('TG7f6OZW`EqVSm4TN8?GO*E0'hT,#&%!a5`l^T@g!LS!c/j)lgpnPCfk/53)W&r((pGHF[J.==]=pn\U$=Qc0`2cN*Nh7f/'Sb#_c.-=0UWl,3Mk>+uiEQ&sl!XO9e5;lc,c1DS9D]J]A+eqA^E]SY50A9DZSH8W"77Z!S7KZ)1s-mkUf8o@SmD]K&1T-`OBHrI3q7Fte(=J&n?Vl9>/P8P&cpRssFGY7f8BDH1b?U(S*1KnYMp0VshV`pjgd\oP[.5XCRQ&nK'fHPO(6:g.,bo0Kdo8Y;2KLj3^1jS[ddk/%'Qe8h8k<'VM;(KCUsn(1;V:\(.NrdYP-:qudW=#(o]Cp#,p_!.rh3Or6GiRm5DM*G\ZiQshq\>3[tIsN]>nsnm:K3\HWV$0?4NQ)5kEX,\OXXI3I*C"U(#]<7O=k.)a)5dbWM/P:t5?soMQ!PB?8Hq8QSnYie:4];d:Uos/b$E;CKu3-p"Us4kE;ptMZ;;jCRs_O/hVUh')UaWQd3;^)de.@Qjg,X>Z&U[j.BtE0kuQbfpjk%<>G2ZBQ>Q1>81N`-c4?Sk'rU;?X9n.RrTeReb$^Krn/G\K^.'Cor!L(k^Ih$Ug5hs94&2c.FOd4n8.$O9*SHA,pJjQNm5'u%IF_Cb\oaSt*=XI$dZAEdi%5^tjHI,*6ZD>Q -%:H)Ku/;P`i,B]"U<\rS]lSI7WBNVQR@3n*=9*@rsKV'-kM?WeW^MI`&KmL?KFhH2bd*TaZEn4r:11<*U6WpMFrSaG\&V#]TcYI,[QR-ND_C& -%:`srne$#+=?IWR&pUIn(i@[`=ER]1tYbLaj_I!:j;GfdVR]a>p"51kbd%/!P58GFaK`Ia2[75'fS:.g*nFJ'LK[WU]+-sBku#MFRI@9Q&p6/!Ke'_g2Q;\HnU28eu&=8-bHme1aJ;DG`)_KXW3Wr9MoIoqfa]Y[oa3id[Tp+85TY,=e7Qogo[5A88.UgW)O$/=2mb0W._P?>Z:I[j5Y*Q -%:'hYRJ.HkqQ:OT?&+g(UpQgU[X,?odm@!#RONq?GAiR,T+j'`)T--p;*/'XR)o!'(.%%i)qA%j]+7dZDa!/ -%:Wu?+[6<^V.!51ML:*l^h6!NSb]1sh!ER.c??6Q*nQ%rdpCR(".J)_p9.Rf4C:QO:klP$?+#oupp=LgbPOB0VQN4D,%+`2T]==0ssKS3qJT3\*&&oSIOOd&?^,i"0&Sq'F(7oR"ZJ\F`IBT)Gt$S!>.j\+#l,iS+o\-:-8k9diihHZV6@-1b$pApJ:F.8KZFO?(UIn(L$`'NO:K+9HKZseMX\]90>8U]H;c+hdm"pOE=Wo&,!0&CJs%^=p.&8ObY"BX<)]W]KlI_:hMe!N9;q'$l3>ff6Y>+ -%:RB4EX1-9$40sq">0fArPGs[R?=n%+$MC`2(H(jWcCrfN>Zd!$1#aHt2bQFq-[382GUW1F0CR$HIB\NQWJ(]o0?4\bO4fDlt$c]G[^.O]9DM0P\=32(nV(FblW8re[GR<-O)g(Gs)V]SsLZ0a$Z:I>/99/hK;tNV-)mX"sQq>T-:rs?R7&Rfg*ncW$XDl.]bpll5>#jotXV.9!['iYd<=*C+;>D7_O^R**ffN;I>_9W9Qm?K>Yu/G5 -%:8/X5*0<^Nb8*sZQVueOhJ-WSc!?G;Y!'(j??N\(Q13lP$"#+.5W3-A1nJ)_"#f%-5#?H[T*2H=HK=BKWK>9TK\8&J^j6E4$IPEp4B9ll\u)T,1hk%2@n -%:jq9.HWqgeGQG,p$)m[sQGnQ5J2XD0[V&RE3QkS$)l`-de23o0Q>V8*R2[KGWV4$WTWQCV`=VK>!FXet;Q$LmS=u":^^6Hoj"HI"K,`%(8N%i:e\FQF80k.B7A1u2MEHOi,Vk<=ahDiP@/bOm'3,2(&*37K'iNh4L_1kP8C8n,fP:LH'8b-^#B04AG:i35Eq[AdH6E2hf%CR"I\f!PD/l11tXmLlQWFhjLR`F$f<%C[ac##ofk+1u^ -%:1;Y$3qT7f]TY[XXk0$u]PfbT,aS2Z;V44^;RLgW8I"mZOO2<8i#qKPe+lnIph7ehgB]s6mWuaEKNuah4gn4Zp(n9&= -%:s8Tk7>n$;md@m[fe*itmah2tEU=QH?*C"qmF1dDCn(9@hK*R5D01Xd8+YU-m9YSSD<+D?df?&.*=$FQc^[aGT6%]#8,?G]VG="b5J"#H`Jl]Fn&5l9-\[kY4crc-Fru\7BZ@&D3s7,3!S'[FSX(s(5W5==(>rFE7(MHl2=9OY^\3h=Ve9@YpXQ(u`+ZG[Ve(3LJ48\;S] -%:iP]_o3qtn)706J-?(rED)GnDR?0*j:$Hk@l/fW;m304ckH7YAd(_3SVE7#i8Vocc"3.$WL$d7:DaAh\Tg!Rd$n2HoIVe>8><]Pn/aK)bb0:A:r_D4:Bg'GHRX$t&O=fTG=?Dlg-iLoIsD17kiE>$PF_cspHk9nX2,Wh,rQC)UuGh7IdeB(4ac*TMmpsk%%16dXYP+f6Oa\^QgAB=.7:.g7"(*u6QHg/IRg>G2f0%NU4%^WP9A-TVIGb^\-s/[I&I?SXg/(SY]Sem0a"SVWJ -%:hWQ4i*a)gjZ'N.N6s$PbU_Qh[#`UN299sLh)k@AiO:(&#?NmoAg4gmr%HgEICT%Rs7h<548c[uu6]M_om)7sYl]n9*NH4-JOsFP#`=a*p%go$M-]%%MV?I-:PK4gte^\NCshK@)J]m_oJB>F1;?nhGs?DJ>ka6?U?$b1GOh>"R2KebIs -%:@;7OoS?V8S1d[Mr0%6N`n9/Y<+O#JGT1qj#;a'rL`'a.[?@?i%d6;"egoM[SB&D>lo=b6&[FK!tdnQNbm]RAf7RIN8T17B;$L'$B#5gE`g4cNS5uMh8F<Bl[Y$a9"\o?n#-%>7PMRQdBX$@A"8):CNt]O!jLG!]cV)Gc)YL($Du4Ih9o/?^8(<.c?Jt,[7uUP4bY*3TlQaHLC!+osb#K4/[bNVR&'G6s=_\REoaV;:psbO7Pis44f,o^mlk2\&RAj;ZgLak@Cb8!p1V]eW]=:?DHh9?`N2DWYT@//f=)o!:_CQkBA*p>5Y&F0`Xc)M,+.u[kE7,D%tUliaa!A&pU$i@^b]#+Ed\ul)3^@)-1r$$=K9t\&pE.VmL[j*oV(D$96ET'n[-f#@7/#% -%:/9/^tSj+'.Ao7EKE^R'a4pGmDoGRd3hj(f5m^B+k+h,+b\m'SkPuLb:lrV.T`TYjtC6E)BEm#7kQmJ8bN@QOn3^d**,Hm1nX3gK&GSi$GKpTVmWUPYtEi[p$?(4(Y%n.n-VO3:g)FPsA&oH`>Zm[lLV$Q2!@Fhtcjkt*5>$uq66L2R2&R*q`#d%lBKP#D+-Um5\M]st[DF3AW`Z,B@aW]5)QmHPdK&[bLZ@qUHY\r?+Yq:[o($,4@ -%:ac\MPYjh*;E`X&?;3@Gh>HdhQg!XYF$)\?0"'%+\\$55U[Ig[6f7GRD+mT(&DH#6VIEDM//LeF&%s\Zl"Y\0J7^7A+W1uAs&oLth8-WjW.8%'RX?]W]^IL^qjc@tMca=pdc$Z9O3Cq58r.mt$_?8bt=._`ERt9as#d:CY0"b(8!YS7f^=$j8202>`=!@lGlbZ*4GOJdA@Jd=DQn:[B*]BaN[;nk6<78=5eSW<"3h!5VFbq)0%.2mp -%:-V&7Jp@0IM8g\Df5+V,gSl@YJ=,dm#J(.(>n\!097=mK.qbX>%;Aeh/lt-a6KI5B$50M[(F\Chu/9T7H=?[*eZGT&`R_p\!])7\EbEL>/7Da.Y7:eJpSiR>[h,u<3j<$.@\N_\H,l04=We`r(MjSfPWSLRk'PgD-1%#;;u^^U&dGtnrd&HoNm/G8j+)VLoZa1D+UC4+[Q$Wbd);d7&j9s!ak6fm1fZsb3WdZCK+lWF=Qt)_!B*k2ma"*(D_Om)HlVQ7<-ZA7k_?-n[#WYqJ2S>"Z-WoS'1!J0)LKQs]%jU3@Z#L\r-VGc7aL"q2_;T_Y@7VUJ&Pj0$ZV63:R#Hu+'p?5G6t\"(0JQl2^4FG1p`sAV9iGlel`CWX -%:;nbp]9PUD]X&m_A'%\5(OArO(O5m$j1KZ$P-9=:J$GS^Wfk9`&QB=85I`&&rAuWV)Ki/9.9AEY%E)LbPb2c'&;R,f!2IWBI*gkK:"OR92>c#+Bl@DY[c&aVd"pQoE>cULlU3O!=Wqtj39Bamqg'J_(KYGUFT;0VHNSHVL"VdJ^HLOGOWfM3STgrp>/>'#2^6j*App>Z2-Z,6IWg6ad=O007@?!FS\*P@mJ-W1o>(El50A]-<(DH!=c3\f^I3Y&CQ5qD1prK^Mr>u09@m_\g$S\iOn(DKW>Gj%E(TU -%:7tMS1>FU$bos$#?X37Y"LKVJ/i\r\MbspEkU*UH=^9JSnrU)">GuLIfdO*a0XtM&Z_f'@c-OMm,qH%s66(ILW[1:tMB7H[Jn4Wmtg`FQGO!4PuXV"4IY"B4.n%,:1Q3epEVB:NRa&V8"ob86!U/$>IQ8b%TF2`h>Oq1A+-pPp_"ZM7HY)ePP\h7/?BcA^0Me;5tRUk[]rFB6cA.cEHLOc]q0`&:K&]VqSfh?(Jce90Tqar36ST!hii1dr,@cj8h.RQ=7ruDn+i4sp#[C4j_D96`c0%3J?p^V@[:384[AffgfMgHHmSD'*S&qbY9*@:K*MeTR;I^W:VB2):QipBL3Ug'uo9n4HJ?75G3&DK6Md -%:Ls%/@g5S+gJiSX8b`c@W+1>go4YPV+X+'j>u6<+[I>H4A":J4B*A!-.m+hW-C4CUkPeC'iW//WF&Y(>t_o/EuF,'6'n&sk\Pp=AD$F/kgYmcP_sa@TDj?g:@<_p\tpUAE'?dk9>).QE@29*QJ>7`P??bbJi+g$qJU_JlF)1(SXkq,g`%8s"HBX#.d(@AQVa/7'B7]pnJ7us<(ri.VLDHVC0Nqt!0GDVrKrGF8R:EF+5?L.Ij+8'pNLW4"`Y#fcR4mG3D_ULX@,SoSYE_sUXc:LOWUI&[ZjhX@NSEfO0JbIsC70[&L*@Orm -%:?_k@sA0t(:L/hp=#^ZXI9^r__kZqIf*BKXtT5$`2:76eWo,@sDlFa\@$f(:CNJ)M&r=W$V^88M3p6'(N5Y9(>ufV.OTRQm5j_3LQ6q\K7kqcUMeW#Cmk21CIXVRLBf:>ZZY#A8ZM%+K!FK6C[*J,L:rX,XIL$Y\GXPJED=f25bJC)R";K=pn9\CtI@$ -%:/#I1q;aXP`h-LMd2)i1iT^.[rZtA%p0fA8h=ugCBV.Qm%gd&B^V[ONUf=F>m:4+>=QQq2*?+(&JC?J;($XE\*^P#\UjjjMM^WfF!R_gAmj(C5@cj4\gp@Ga`o?Zq^9;Tbl?J8*RJGI>0Kl@mm]-8u[jU""4'Qq_4BQidO#LK=DpX_]$LcIDc8U;BSCf%C -%:HUu5dCEIfZC[Q#t/[(,M]>*dLG$<^Sme_)RXn-_q"O1@Q9\ku,:$%uk?M!`*$WHdLVL")uh\B'=;7Vj3rGtajmDaONl_gOS9$ctSQ/A50/FU2mX]n/dn'\2Vk(t]M@0Dk^oJ8ghoZ(IZ:6`82@>P.o:-V%]=*ka:W=DKUd.JTLal,O48^IaDVX@7,VB1\/;\)utH:Td@>>4.hQI\&r?[.kh(Mf`ar-O2XRPX>#G5P:K(&?@,P4dj_ -%:+M;fh[.%4ir-SbKO1-&fDo$A9,l2m:.$&"adniFB(+_UKtUD`Y/A995YU9h6rjbbeR)%UVcRVI#3o;gg2j]qh%\/#Ge7VZ,5UN=O9Wf+!1i\Nkp3@3(US2QSPP\9h<@S[Q.Lhb8G`mcLFg=31nCoX+]eOsMk -%:WRhh_YD]ABq:<,P%D"KS2W]=d)[u)t:)il`YihLr10SnbQuKs$@DXlm%S@Y&;f/X>f0LYXXAUeYp`34GY(o!K)R_721gC>G_sR@m9f*RCV>Z7ts3@d75RQ,e?T9I7_3:Sh?,cscN.nk#%+m3.\LE&ua^\a]O9PJU7,+cm[.*l&Hl8t<5Gd((&r^Dpi7ab5E^$TpT7X+\gpacq#4U)3(2aYBT" -%:U;Gt29nWY/Y\NJ%"Dt/g4Ic2__UO?uWK4ts?H-euWr:9M69E2[G'Gs:4thh$dDX!L$Lh"J0"@<>=653Yp:kLlOm>NYY4MjjWPtgg0_\ceI@"'oYq.m\I'Wc>cDb?SreaI;lmH'X,\Vj2;kG=K;kM%8WD>*>IBJt66;6K'@V)RBhp4m7QI[oL-Il$UepT&1-OjPR*B/XA;\TrfX;L8IbMRDL:l$1!@R!Dn'gVKI/gMre/E&n0R0E)8 -%:cGCg/WF2a72$G"K_2iF01a#Q?**,cC8C46JNb;9t=d]%T1%hZ9ar:alS,2;]IQDGS1*7;IbNL#K4@:19EV-1F=(q%Q+6!4Q\V7Xci]M,WDcrf?]0GMo7irM`>Rj-:)gc*iL=^=4N@`=g'm;;oWY`kaObX6cnBY^iC/%OWrHlhRs^72'*K-E -%:e&/Z_'Lo18![:[@mq@O]?Mn#4_H/M_a<.m?BA8R+^#"'Gc$G$Gj2*^OErUpp-.K2,I]+9j_h?nu9FXln%2MnBWhr7^ng;+6MfjZ74JmTSV@`+iq/S;t)H]d[q*]b[-c\eL;%):0Ks%cT8A6[lki\@"8:MU#81`,#k>M]a?K\^qgkEGhNin=6U&U^lQ&oBYfZ$m>/s1ZYjcS2?2)WUpe8WCV+(AuDC?i!J!H`[$"l3S)gHTe,%$$R. -%:/7tC:5?i'$l[cg([n=pX?JUKACO/sCjQ-'HKHAemT.mifI1R$g!$`8(/]S:Yc!&mf@oI/'("4L`8_e0!MQde9[3FG&HqhU(tVQ!dD?edJj]iHsOlR\PS+=uCp(*ISFo -%:j5*PbG[R`sr_Iascf"%1UkmAI&e!LU=%^>67lQ1%5@=G`D8E@HLoI9X$-%[99Qa(VVRjgSW>6lQ-+6"*cS;]&R*#TH[Ai&MQ(a2H8*C/pE^\?83\o:6\kjW0LTGZBXf0K&2r,?d5^TDlNV#9gpnY`5WM'==`Aj4Vp5(8b\B9[,2e3iJn[eX/a2rR0m6^V.]_?<+bWT!.`ed&o<)_S+(YKKG3KMVeXTdIodTotXaBKYd!tLEVBH]ouRV:-Kg4gllXj9FX0aQM10_eO/%T+=%d?[P9XPJi5K14I_e__UL]*$:[<* -%:WHlJ4`&=LT-qW9fVX$Nfr-%oOH(U;b%:B"aUB;P9dD82Vq[<-5Og3f:75`2&PeA-*1IN(m]*Tm_mT_?K6C@Y_^?XXm*B]k8VQL@On#F*l^Lp2kEFBebo-\3MH&c0Xp/;V@YVpb5G\khsTm,l)OFleGVF(aIoYB(:KHXX=5tI\Tb"=53qpJgX+$IdXk;a3b=@1'_TsX'X -%:4OukDnduLn$eq%P1dRU74J#8!AmoE\`RL&[.Sg2S2Ds!n2k>3n9K*fOFp>-`*"@7H()[,$=`n!EIJslkZ,0;^O]^Q#J$M`Bf^on4p%nk.3`2oZ*aZ!$+i1ZBRqafN.<4STD(7ccMV"A%`kp5GMQ,^V<:1VSVH-kqq]9HtBH2Yk+/XI5A2[jmP'42[h,tcjlJ>XQo0+Kikb2X;BkQub4XB])B:Nn- -%:iHHY2:eWHi9O`]3G;ZS)K6p+YK;i9V'kq%CankaAdj;i?Y`5Us'==a(j4RDg^"#7?:dm+HWgK5C2)R@@'(*?E:,a"hB*7O+,9'm84("Jc-#''*4.:X3DYCUHk<]@pU.m@8oH52s!(5(cJrm3(#%E-fWkB'`n'N&NL@35X4$D'V@=;4TLc'u@HFI-]78C.XCVXj3is%B!qaV-UmB2b:%R+b4g[CM[I_l?a[Wr2"7mF%J\DaSOq -%:.:h<7,N,*jZ-J_b,!7\*OjIlN)+]V9XMp\EJsi9AA8NJ_Qm.>gi4bAnKa4NK9-\Kh^$CY(VgUja">M89@F`kn$//@]C#ZOoeB5YX2N"JN`Dg1C?tH@>MV,HpbY5+7g"?U7WQX"`Xa>g1GGO@]%(s#\F0u]9'b^s6%::Q"BpaR]1a#Fn9>e#fRr:=p[sK0OWE;g"iscM?o3*&-cl?)P>pO<[TM=ejc_bli0X[*RC1f8d+!FaU0G^). -%:)P+;tD:qXp_-^MlZt8N2Ql=ZS/SuKY>.D+]W,V^F99>l\>bcH@TCaPX=i0'#GCkqUD#["7Ja3EO,eRj/AN!Qg]n/139RTk>;`]Gj?sM?]U!tqcS(]Hc:&W,LeF&3n4iC(sqn>&HIh1\s0K.or#P_3)r\m*@2S'kb,MmT^ndq.O*%[%r\4UA*jh_>Gke8b"pl<"Ema"+#^&6!ij6#0E(%g+qMUE9$VP;Z*NNBDu1phMKU&['IY=h(JSHLX(,)-T%UQOe9G!XY>'VEUUH -%:#\,q_*(r=XX58(,Yu`BDMWGW>,TY3G*$scE3orq#S+Du?`4^$qSYu>k3E?cb8eMNe11dYB\)1m);k8^,-gj/qP4F#-#o[7&e/8SHe62g^oi+W8J%q#hXelh3Z3jZm4s=/hB0N+Us+e:sJ;tghg;b^)1Hc`h_'-8^U.N^;.@#a&rUaQm&q%n\!_[og%4@h@6pbNR"2Mo'/YK.q:(g-:$QO"P<)?(l5Vl`k6e3\[K9\)X6c;`qtCg0$hAi*rnf)DFlZ8-,UmVL(I$,qG_R!f>N6Se_;\fd7\M7g";PZWl+hq!lCD10\epBTHSH?*N=sNe26lpqIGD;A"0'A"hjc1VK_]l&a%r?JjUWGK9>Y:;4F0% -%:l,&#Wf#pO,5"kIoeG4f]3q]r7_5(tsOLiDke?)&PH@&Qgk!+DC@?\NZ5.>1@OsU$"3-^c0$4@o$$SJU==)d$"lWN;@ILjZY:_8"YF;>9%geNr!JU?fV/B2tF;Sn>Y)_n;m?2fF%JSu[8TH6'Y9A#h8)CTc<;Kk0hZ=%'= -%:e/]H*GM/+i>=d"H:TA?s"^"^0"Ba#tnd&?]Fp9b#^@)I\RNE)GFXEmAda,RP'R[*cKVd?DJAu:;Z0ZlK[#!/#7LAl.1;U]P\'!).VFD,G<-(KWY?ei[ZA'E,p5].=L3;tpiZ-@$ln:R8?l&4)_801f>bg%G[km%8Q:QDp4:K&l4?,[ -%:PorMp*P_tb_Y0cHG%sp93geDA)H)XLOa:8'%CRY7YK6dsdpt"3ct@5kfTVMSk.rS%+*RRV'AR`<]APR`H%EN`h,)a-,WGLq8JDR]*[=4\Qmn'7\8C57_4A&Ki=8js;MErMSj>X:'&WmE@Jbf-8Z*p.["Cq5V'5Mj*N=MoWL<*D`IoI]i;@LX=><"4-Ceum7AODZKTGWc?Ts'Mr[S0P(bq7DM6q(]okoHRuS)Z/t=,Z(S.#Eb75llP(qI:G,/FZ;R>#>l8!0.bhLn\/-nO=0Q6l)WK-/5_!DAO0p-EmJ(i\EE9d@6QO -%:>TI*VhLQQlXT:nV&9LVT1Ek#k`9$,`K!Pjp"m9]ac*:Mt*ZSc!bAcg?eR7]AqD:dep=:c0npIWV>dNI3>=tZR7Wq&96&FAB,0. -%:!A4)Wc>PC"^C8A:N9pUD1,_G-b^IT9$RUmYMOtD/K$dS>0sW4)g/EjI3,.5q#u@[KS4S\m4qFM24c@^3>"O>.E&(<53Amd3*),X-%B3.j8:;h\B"'/\_pR!gF](`:?tB600XYC/VC+L"&km%\6uYcS7Y8Cab/L*9H#g`SIC8ri=;p]$!%TAa<&`)rc`*s.UfgEUm]07N=_4sM)\=A!WGii-^$!P4>%Ae8D9kq1j8U[cc28YC'80Kjg4fQ"?4^cR@7:8F-+W"OHl'60."V/DnTfQSOh'KDcoVqbM3TrhS_R)7#_"38@TV:165nYWK>pU9Ho_9"2T!c3>PA4btTDRGo -%:,K*n5_%:`g'"!>Z8c@l&UjdJ@WLl#C7bNq#77b[7:T@Kg19f]G_dGdjNX/b6,_2:]r,9EAH0#0S'UQ_Do)HrY*g`8IV@BKCBPAlg:SVEO,k@L,6=M[pg369.oA"h*;L+(UkB;6YS3@PLV01IK%.+4Y"%rJp&lR<<+mJ#hgsTI"F3qFu'D;Y?9"LUMXdM,_0H/ZF%t+Z5Cbm_4]nV"A+hujmNh?EVbd:&tYAl)j;0sX";J$fb[O%o)MP4'!;F=TpcNQbHlh6GL-8[6TdkaNq]('3QlJpk;(A+Sm+=$GolH;k'=s&bk$_T/^OZXs-=]\O':\TLERBDOPPHMO#YATG>KPml/P&?"lSo0C&Q#;4lRr4;TOR@eiXR:].RdP+M6euh>>MTNiZn=Z5k1N)i7mpLFg,o[ -%:_s7ML=nPCgIfh@55DA*6g'O']+"0[b8nBOUYAR[%P!]GjX.rCk@1mP]0@R\@@S+o)n<..(COjj*15gruo-m>"6tO"&LDMtc=L$BB@dnb?!b[-!I/GFKi3P@P"LdgtF"J=T`bWUkf/2@Y>Y -%:c"VBE"(Z:5*j0Xs-$W)9/9lJj';Z)m:MZ\8L@(8*gBDW9",=QJ51-?!n@+> -%:rm1c$e'":fkQCG]f^ekI0"]@W"FG!O]hh"eRGsWa3Sco`SjkuI#H`'R*a^?2,Lhu?FJiKnNOWXqpDQT;`,rLd*Z@B^kY>dd\"s9fqNi+*^&@TQZLk"O5^[fhKiFpf:^/]&^G=a4Q:Xlc`"^^2j!2M^1Rd%dXskV<6"7LKgsOseSG+.,bK!n7XFcbb:6lS -%:O.^r6q&"1?C'Yi_5r8//KASSuH>79pgQujEo2%')Jd%'f'J3Xm84Z9s_UTp@kmeC/&_#5[]58>"KYX$0mR+kC9+]fs2[0O;BBC5>#%*n;Ylf*n>/^2HGMs/D*o$9NQ]3OUPN4Sg+oBes5<#IgTdZKTm=QJf)i$f5[`%7)B1j4VBh0R=kf.cINp1Z/G_@,mVE*:FIVVTD7AHU+MSsQg -%:@$TL@XZ.[Z%CTF>Sjg8XpVb$c&?["f*/AZNB*jcJ#1LUn'gqTsksp?S.S4'h.nL>TOqc=m8J+i5c'C_m,c\SG.*4BJP0aES9L3.`(1>2tCdECC:'U42'[1/JB]D/eAHq%unU_Xi*#9esk$I6@CZ@a?i"FrtiVT$gNt[%''b:us%:39-iRNXMn`>tP38T@DE"'7CPb]Y^lgIDZEHI5sQ8"6**t-%==jpPo9@Qe^rT#PGh/UlK?:h,& -%:0r.#=Dna2^3>:oSn[CKiaY8`tmIWd$5RF%^TbT0en[4%bWBV^$>[#FR5G]C(5K-/@X[]1P7XrRBrfjfH1?CoR[TiFFe"f3dMET!%gt^;/lYiuC/uLoiEI4^`_WBNqim)p+32)]imVcA4%h.78U9NAKnBMOZnW0WGGiJ-"][ZF%7]negU*l`1KCAT_pik"Li&r:jhnBR#s,f'\ntjGO0Via.pD`,-/#,[5a;mG5ji=BG`,@7UBMjqj,7EFdek9X6`[amQ61lf0X>T3B+kg8^(slp+<%)![<;lU'L][BWq/P-IL0]'N%:M@Y,HEhrdJ6N9[+5K7*P8"U>b3>`*$e"AD*Ae);HbK337-oJ\HrY+X1o^qJj*t-/P;5bE5-*2"532g7H.t?4mZX^28Y=Uk-!dB'0I9i"4;o[VIGG,3GQ,XV=,XtHUlR-,mP7]@',EW5%JD0uA -%:N[a9AQp@Pubf+@4$$!#$JomHCA"-tJ9Ve]m.CQ%JD'4PtX6:L!<-$O=5cXFh#*Q]p^950k23@)r$n;XKgEj3ifKG^0[#I=thO4]$LAHZ$$Mm5>\o23pe&4@GrX.h?Fej!V,@5BG;94A%E7#WnDP.6gU/$[Q&)3XmLe'X/]T4:!CjN*nM`RrJr/q6^jZ(gKk@n<X'hmrB@RW.> -%:'lk`YQr*=V+jaap3QQ.t%of+\%?:56L6`p\JS]l1@::k"=FOpCVA]##O_>3Y;e7^9c>"!%TWi#@,ZdiJeY7fcKS0,q,&OQ\fH[I[=g:SK;$H"*h6UO^Z3\V34_(: -%:ALUT<)CbIAh>#_@g:84^n'(jGW5CWuG"ZW'SpOCscWRgImWe/XLM43dVW#5oESo73%XJHU]/AAB*Mpl%ih"tW('B"tl\uu%Ckk[l0+"LZH;(PN.^o-ipY0ki^:1bF.NR3b'"3U"4e`b0dNsS)g3>Z#3&Q[Q7R-;roP7E4YcI2ci/k[CTNj@_78NJ1^+fKQ6Yi&WSn`ZjV=Us$Rc0A_WBr+10QYq-Ybs("#hl6)[2rk.A?,9, -%:g'^X[D;ta,c`7&tH51u..kACWh0lA5HY)J07H_=s%VkMpg5m#t)NqfQAa3(6oW),_#)G&%Yu;ugUVY7beBGCp/h@'EdCY^#O+8+7TL=/NnBKJjnr9L96Z\V_WQ&4qU/h%l0uF#6W48EgP73Q=;*AUBi$>*?EXD"Nc"miQ."AL=;#aQB.i-fF*a1LgHWBZ!#5pVqL9eGW6-&M`TirBWkaas[aoKuX,'5on(924i"hcZsKuT7qDL#p? -%:TO5tlX@t4hA;$r"q`s0V4^iHtO3hsn10?\U--$pHhZkd@I3Q1r?ls/dTh^oQm6+*L5[Rc'?Jf#F:B-6d[sju6URp`hCuHSd%q6QC!>?9uoe^hNK[2[GE!c4+*NOF=99q+sj^I[e6T'`[S.omp\Zmke8p.=,nQ^nnI.!F(n$VuEMQbW;`&hICfSp;Ej/I9M_a8b>>7PSl]Wm-RnM/asq&&^1k2SB0+(L.gEFqDS$Qo94q=pE`bRm#Kf^f\Dp?HJ'Q>"+uI!+td><)5*V0h.BSDG+[g`'$!BP@c#j+BhBk]#*R0FaQN=8g0e%3Gt7O%!YE((22hmJ1udF>9rUYQQQQia"TMq[bY, -%:GDMbJq2_tREG^:!puYL]6$#"'+4Sb^@Qp+XQhd:;#HWPW.u97OAj06%+,B4Y\4kr%ZcHHUnF&MYEE[Z5oC;Zl*h6CV/O"PNGi=`1S;`Ld:%@Z,+Z)7cEC34Wj!gIOm(4&M:M4c='tjEZ4PSIGe^BR*u;Lpm/`b*U6eEanXNTe9oX$Pb[W2%3Je2Hu(#k[[[*F+ab97k@5r8ec#L,*a3OYJbqDmM.]$'C17LK -%:,j*!!+7A+1k?^-N5WVQ*qAklIJm%rdqGI(qqJ#f:qBc!gqG$gWqQtQ`;Zh#-]bMG-U8uO%'jG"M`*Xjr`PWF6m]RE2>6GHU:O/<0U;bLHI9Z6EG9aBlNs#SO!MZ'=ZeUQ&A-dAueYb>JRZg8Ojau!O*%#TIC_BoBmfhU0&Ch_K\:J7+[3FPOT,E9?uAtCiWGfm+a8Ll8cld(C2=oBhPOE%@n(,&ch3t;"@7Sj%04oNQAQ0CK$ -%:)Y0Et'pTkD0C,D9O"fQFs+O9+i3F)-?4MS8$Y6<#Hr!O)bs/mT3QXjkm1B]eC7^%r&N.*h?FaK/#[XbQb.hqOO<0UZlM8a;=B7=\XPJ1\\EFD)UXu3]N#6tF(/XSRf0eQZeAno?"Y\_)8(iFj&$P#j@X4[0R,,9K9lk)PTs[.OM86tbmJ$")^nNY7fTmld1[ga"YO!sjX7IZ4iebIfL%Q8+H?Cs1?^3\mQP=k';*B,]qrL2e=>B84K$/D_T9UYh\o8Y&uYJ?37[?`$`=q#SEbf[Q5-'s7juBE0rc_J_,',LSlV:Em@Q#<5OKQ9aJ/:\6D1jB*:GG^+F#[=F@K#EY?u(dU*tV\ -%:)&A9'7QuD*Msj4sr=@^D(5n,'63W"EM$Q=HM.b3Xq3L&pPXFuf)Si7t6LdsVm:Pk=.,Sc1_frRkkf5G,Md_/#i2(/15^#*74_@r`tHA$Y+*-=st=k-JHujX)6MOb(jJ>]a;g"*L(@50YpP@hm*S>;!\JbX`[qLIsO1j"1eK -%:7WBj5nUXNMn5.2iD[]Uu:OA+^RLM,0Z"ei&ek]+PiapJlT45_l5IsFRo]L9t?c^Zi^0opT'a+X&&J*;3&n0Q:PK6iSdLrFCO#qdbR&(>Bhpam;^X+(S^S1.#rr)\[oM+(PH_is$Io#7+(IZ^'hef\?eA'DGV)I'i>#8UW3maMMK6EPL98QJ8dC6o*Ci -%:\E%#CY<,g0_,0[*;5Vm:]HVI6!^3ZCiBn\]+5>n41&A'tEn5D@EW@fLLeYPZ$BtAVqVCkHPmFdd@pgQlPZs`[A(AP7oXS_loedF/.9L?`\oCE5/T-6RZ01rt!NAD+(]0jJTs)2<_RH6T7]Z.4lrV:kHHN#P:'_5^dJGrIM8X,po0Kcj&:2k9og4JLBE.["lpD(D^*=8^XF5l#>_:J*71k?],,kk)iiF#qt -%:PA5]#o\Zo*pgPD#Mc"be28S4>U^76LO/rNr>>6erMC'n%BEBb@1I-jWM]m/k;CcpW@Xj>T8R*>8*]?%99X[%TA`-%'=b\:,OG3_U(g/^h(Fd^/s]%GsQ:n&bm%fA-q!bTc'f>i5A$I3Hm=-"Z9<:@*fI%,be9XU>68b68T-U>.\OtUcuGf"V`D-+"b"a@LEJ8R6k`LjQNnB0/?3Te)L"Y0),V> -%:(d!qj:r*T$\)=/8AT?,-pO\ku%V'%9[dEApN*:6)[uBgnc^%1fGQ;6/+N&'M(;kc!H0Kl*e`0A=p/r+uY4_e[edD"StEQjB&/_A4!:,rGpa_t6^K@7CKAR.LAS(D%&r -%:8>2bW+r3p0BK-GJ:,CSQ/\N=6E4SBR.6!:&[Eq8ZRT^!:<,!Ir]BT+Tis>E70UBuBM%^DnjkP];Ih`<.*8?[>7C-o+K4n?\XE?p/"E)OJ9"3:;VS@:$9]de -%:+h&VU;_t&l6-O+ZIhBpZK-@Ef'Cq>6'X4S8mY2;#KN/pb&;uSGgMhc^bm:IR7R=HFZIm:S;:f+B1]0qB2 -%:s8Tk7cmV1p&9f&[#Na9J'l:DEW*n3(q,t,JDLDq>QQFN7CdIRj];7C_/PZZkGYm7B4#pi"*TE?dS/*b]15*ff;S.j#3%[Ui(:W7%23\YIa]Fqc^?2?\*q!s!GDK0*5$ue>T3pMO%`[$OLi;f-LK>N:4r91IA*&_`>Q#;/IFcL6`DC^kEA=*c<*/'($Zb6LI8J?Del9Jro40 -%:pjTCT*:)m]MKjJ=#!AGnL>^>K3uHW]gtg@C:>N)C=O8%bG!OKo*u]5*DaOk!>!j&m/jhol8c<9(2:>nFQ\;%HIC$B[@$[Lnre$mGSQdMj1>a*?$9+2,Pk/'k-r0q)SktK>`p,l$+8:lU,F^'b%$`503=M/ZCh6Vk+tuu;#rc3k,:QFlN@k?RIEfu*K+sdPJd:qc9`hjO'ouXXTV5Vf+-nXRargJb6sMi2#-I]!k<]$9)LC<'(.nC!5n(\^a"?S:Y(]&mL(&\WWN\NU]VB:f0I6!UMk,.=?)pgjkTe/H("L8;mLtHWa3ITBeJ'`42g<(eP=9"*K%%:HPoWJ)38uYOalrQF(I']P7DeNUMk!?hqHfJB5hOk -%:S)2LeoSlJn3qt,ZX&S776$\Mq@#q*DI&`RmX;-`*HmDCM71C^h?es-u0]Jo\heD2dg%r1rm0gps7B10uK";K24f1*["9;fit]q)SKtPW=I;FqhE=PNb=;Vq-DoNn8j!g;ZZRN=L%W*U$t1"2BX%/Cein?q5:B5JR'MOt[lVY9hR7E'_N$9;ao?pNRU)"C6M&&u]BIBlsn -%:=(u.J5O=Y.nFR81ISV^2T80VcCG)S;VLjaKDpZDB/42S<%u(jSp4f`)l@tmPAi=;S5dUD\mY@t1DQ%%._q0gRa7n<1L5L_WL0iA1mOan:L!l-oIe9g.[%hPefX?Y$))'HIkatO,^a^9oI36pKCGjgJLo4LA:UV%84UlYAeMQZ.Snu)DqSfg+mdanh@BaIOQ)j!Ao7eFN]+.R3S^dW[->/mWm5;c..UTPNLt9f\f;SU<;Ya0J9G$E( -%:.^'a[)bAdnRT8Hp"!OsehK>Q4:fa>+dk:*B",j!ejXkFd+81,-#Vu.W/m.j]Zlk5%[!ISP*i+MPI[tFermEJLk=aT+c]sW+?Fc:;REd4*@=L)L\=&9!,4M%GLeiS;?lm-^3=`Bc2Ond:,sm$W&*iK%MbKpURU37\Z0>cX9n[!l8rsW],nj*`8g`^gYaiu3K)a:Wr]b0KaRZoh^hklX\$9>9n8Zoo3sObR;MS&!Q$0LS(Ufsaa+nT389r]HXYY% -%:^o7@.6fRWbfbeBW/h\UIUehKt;DMR_c+V5N4W[4sgFq_WT,Qt`*kcs.BE!-4LQf+k-9AQO:3M`9>'hp0GXX\^4%Z3_;b2J;g6blI__b6K)&`\PFq1jIC4(/kE\T-[cC4pU[9Nh`?`erP.qPPNi2,rtiU=.h32t:L_%BVa:6U$T5,E#sj,e8M"FnO[L[2&A%m"Csl)nE,QT2ecJTk7]F4GN6=T,@0rTkj^e623N]J]b14K:!B(hSkN -%:&"-l0[pO9>.A7X"K"1@/PHm+1kgf;SZZX7>6.+U^>C',*GgU%BkgkIHL]$`Hc/E3E9t\j3XA&n6coH9J\nH*:X2AD:B52O82X.[4h9!K*:,O\`6]H[mNdGDc$a&g;7bO7a9Ab3]V;q=E=X'-N!q/;"F&.O0s6_X5@Q]OGNH&gFn^Go2?I9s/IL2MUNCSn2M -%:MmDT">+nZaBs$NLFV<^?L`M*)#U!TY44K*`.0TPcCAOpN,gTAk.])lpM,HjDI6'^ecofrjq`u&T,2hRYRf@XMmnEu.k2"C)1FM<2p=&d1=/9G9]`Q<:u=+/iCaXX"bp@nZrdO0Lm3Y4s7n)\6XR_T_d[B=09O*?7aRVCQ$*M( -%:pMFG@V1%BQ3Me-Z@>-Pr\aduF[&YL`g!3fb'd>Ili,)LfL3F-b2ue[ji6@Hbgjib9^d-?fHl1G%CS^VP(W0DY4eY/sZdq]O1[`mV=equI#iJ9\g8)ut?;i41;OuTRof&mZZXGMPga$Z`1f#.*]lP6L\no7pZnT"$6Ujsc]H$urR@+dh9]1r1eYQR0!!>Fer5[Q@`0MA.U.-/qMPGh/=#)Qh[Y>!m3i2XD&nU%XVn3#@$+hA-@_%CI='Uhu%gf91!JNDbSK2+2>tY+mtUdhE'=]b(dhQ.N.J.2D>@d;?[DH0chH84g^,'W]m%@/07mQ=Ad7 -%:4i&+6Bc)fG/b3ag;:/:&TO$P6.-?!u>4'B3q$1MbEMPI&)a-_K1#uRpUp4:mnAc<^DSo)a!W&A:7O>[VkI[$uR:3:MT)UV5V_ZXe6aD%*Bd/YjPFH_5[N4'],l0oY%#=).XmDudApWm+LG\cDXe^ppPLbkOaKUDAUW2=Qd^2Rnci"_VR"dFkBc0[7nPh9%GhR++ABnp%cT57=M\dt`)Za)F.@TH!%.r>I_="iu_`>V]\pCGI)*h^N -%:cTPCH!_scV@ndlr?s)#8XHk;jN5Pr1Ad_osdpDP:T35=X'"/cESh:(NPsQ>Xh8.YT-6m\L6SMj'G$XV5M*SnJNMmW@!:g'K\7Slj_,Kmleh@r(ds^(l_5Z\5jES6Do(i[ap,e"e)H1gIke87%,O5e?Kk;6qYVBceI)n"S4_p>uMh]!eHOEn0Q\A3U_.Q@U_2%Dl0e.mlVJXAJ>&D?l-2bc=po^oU1[SkoU6)SI+kO!5:j1"o\LQlR -%:_:1u0$'NB;i"9q36tm=3*C2?f.Q]kJe5"rWe7cX7dX]*79d&:u<,]8kRP8'C$!cHZagb3XouoiT523=Es#M:+Uk)ZMn@asQd"GJ!dKoZM.f^*H'&@f5)I5+S+'+L9H7ZlDQafMmVlIJ`8*QZcX4l2pUX_2+KkP+W8O)7iKc1Np>ctfT&IC^e,@Y`FNaXc@N6H@ -%:(An(r6h_h"qlpUd^4n"%pB1r]4Ml\/bEW1)\"=CRe?96/qbW(*J4JAULYs4(nBX/k+VeV+j7g#LjonhRdkaG*+^;PnGTpt'i460u)*-9uEPj*RKc.cOoBT(pmF5!&NlCb81%gE3f)@`6F%9<=`%"T=VJtba]L>iV/R]D`cFO:OO<(V4qiE4Q)_4BP\1!amdE]'5$1OMR;XJXqR,j2`:N$iOMm&pe/YCG]@R.k(Q:B?]g)X[aB'En4#84GE%=rM$!1)MM!J:ITBElCkB=c7CBk:b6*$T9].\2.jN%u3s6^oM.>eb^4g#P:OlZig(;\Y'Y'aj"Q^Om^%h57'3+@I!oq"J62:bR0^A9U%^RM#a7(oq -%:9Pk!a[^k=_SO471D9jClF#HX.H45OsV4g5ih@OYf/lX8TMXQgRqBfm#\f_-hM1_6!Y?8[f$6HecR\lK]`=0aK:obgR*mun1.QL1,Yo-ND2?U7Nm0^fc]%Do#=N#>(/bLAY#lpsKF:5A.9V[I^5'L22OUL8Td8L?"!o;G!=8Tl.b0qPIP&ptfu.n<)#p-IVDPFt*t?+q0U`WVAaG'AH5M^:2DWZW%2+`c//@ -%:@u-jD[[i=iX"8uTPKe"*L00QuCI]N(iRK?P#e(0m/]0PB2+jNVP\AdL`deD'74u9!]r><-'Vs/=+2"hdj^LZ(*-1\Hp(;6>B_fdR\Urd^<.>s)7Rd6N*[.O?5E-.X,0,%GS5Qe5(<=["?6$_j&,-$CB8HW-Q6YTdMr;e^R5j]S&^WWF;oedPh,8kt4'=TIsF;hYYOlY`nG8*AjT*INIR00dAmArCPMCq/?r[:A<\X=E%4]n1RNG[R2i:?cO,.55toQHF7;2O/5?6QAXdseq0*IB(g3-U9Tn! -%:eE&1@]h>fh!51EUJ_DEI_Cnt@6-4o=f'kUfUD4liQg:[#<`]8#!mOtQc#%O@0?N9)!CV"%:!:L]8Ki0d\'hD=4VS=3_,39K]o33=jejHMntr^KUq4(*1$a*-[A*-+Is\FM[q7Odt@dLGqbRlJnT(2t6=jm?[6#2'J_-9Y]>-X)R5$JgP0^Ki'56\s88rj3gNi2WlA^rP./B5AugN&ZMgR%TLS`_U3D@"?4Gf!R5l+Xap.X?eq9[g1` -%:GfJV_&!j5.$(EHYoeCk@LJnkWlb>\ApG+<0X.1*&EtcrHbUtoZ&3S+,i2,Ltf9&_76fqn;M^Q"s_:si?[dV.73Qn[@jdM_QCY@Mk\AgZ6Xs%(Qq)aS;dI*(fFoJ\C\E["Y--#=05Jp`CZP7a>BWX1Yq5pEh#\`I'u#Tg)k=Sb6DW9(\)gD%"^k$uTW\[^^qQT_Wflbf4%W`TWZDXZ-gQVQGT,#2fh4cW"q -%:iNfuRk9d\e-_Vt_I;A/L#S^*WMRO4oA5KQ^q33(XY6t:2>2>+8YZ9-D_j+\c01oq>2b9aOI/?"K)EoSrP`fA=PZ"ea<(!,&CCe6bb`gTQ1!OY's0$A:oZcDV(+;uW^.jU1s'Yb&fQf\ -%:Fd0I07nTVm-;5p10HOeC\;_n;2H)1Uk#=s,1 -%:dsC&78pQ-hBO?mFqOTWHas`gG0'&"ATuB(\[+(s#`T$N+4`GU+,DX^"^fK%0/-;Y,H/MUm3?aSX3NsS)mUbAmBouj@>4C"#ib;^GY#%E5j(758jCR>9pgrFl)'!:7RCGR@o@rY*Kj%=Qg?VX@b^+[8+$FR-;Utd-I>cQ\?S$9\)%E? -%:dH5HkPHNcNK;g]4kLPgj;hj=jqYhoKS?B'mM%GGgnKA3#O;HS=5aX%]3g;R?m(U>%S$lj=4t[EVH)U?[@Y9$c:Z8puV-N*c?khIfnWG3/m[4,f]J5^lM?n^bGL&dh8ucKtoMpIei"KpnstEC6]R" -%:^.mQs[*3Q*>37f3QJ#kRk%\Rt-a_7]W!t`:I'oRiYgrtON%eGQRL+FSKJH;jXNXZ+.t*Z$6k;.0W%#''^1j&l$^I:jXWZfh!(duT[jfd#=fa0JVT_q`?@j8TD?Cn&Ql7jU9pQN97LiuUJSfJJr4E,C@h$,o49`F=TeKbL;UG%i1r$lCp>t_>G<3gJ,q0!B -%:e"o"IIU=G*oI8D^gDinjG;!3'=`;%7#&7b<%X+Nu9=L>8Dkc-+IC;JqW),c`&'#,cm/1HO9&$9"mR5cNS$K<>FtO;qlR+6HoJLGE_nbhN-;I,0c/CD"$ijspjN=5\5r4jIAPDKQWrMI$3=u"&jI2JG;F+Zp<&Ea*cF)*C,f"I(OMV$k7/S -%:-g23<'&P:d@(t=9F^0M-O]NLQoDacfhDG+`6=`i7@3:"Qd8:"--qL%KVVk3C14C%A"6RK'MV+SstMA86q4J)r!@j;M&5%a'a;k#N3#h%OUHJK%H,$(mgs\a7@qA!+SbD#-VO-n`ttQi;G\@^Kr#",+lQ^0m;?;A4R#Q[uJ7\lp\bf:h0ErgC.Br]AoC$qmeQUmQ6L2 -%:_`$Kfc`Ef)0)2g1:XLR@L7N_[neD"Xh&rG]=RC4S/0qX::&XP=mBVq.#_J-FgUT`N,Gj%n`8"5>q:kTP'DElI_#"XZ/I'hG/&l9@Q?p:U(3qr -%:65EurCAaU"2<*mf(mTu)6]J-VPY-?f;T2N6ULr@I&lEa1W"lrF%Z0Qls.n,6\T'@/.D(!6S@XhqA.l'p76rhZ\o0%)b[J0^sps3F(&b&Se%3DU^fJt9pjV>.K*nM6Yt6b2d4ZG*2@(U:;mP+)sP,aM3_%?8*XZLK3tZGM)AGA-E*s4($8raSWGjdu%38stXOSX-/L!<,]kI^GOKr^Y,80@o[A -%:#6Fj7mmTl6(P%#WH.[a75_c0&5p5*gQs&u&&GYEYp)joKD[Cb%#])aN9&`,ZTH,c#.foeO-LQ(rJUj!(^<-9Tje4R#O8^m&WKbGdp\(&g>J(3\Y10fP^or_tp)Y&n7]I&G%t)u3]E`lkTEdYS@K'Ej4YZg-:A,b(^?'D/*r'W)3(EH[paX`Jp)a"+hG*\bph]U0.?$?@nF<-7fm@Cp7H?W$l%pJT.#!e#$=3TlHOh'kE['t'b6Ij@ -%:YD4jQRo`!I+)$l#uDVn85nulojjoXq[BKGn1=uoeUq*I".qSHOorb.Z;ApcqgOP0C@-I4YXIh'D]/_,j?5b0XpTLdnFSo]h?,n3d"4IO*oK=GAW[e66'M$ChnR(]H[p<6A+gt*,!ugGpOMmCn$2V;[+SflRUUPo -%:pOM1$j![4e*g!)U3qaVV&Wa3kJB[9^ZhK!7!ueH=J95_pZ1e75I6JX/]ER2a]a#BEToB@Y -%:(H_M(U_BWCkX&t3Ai7/&AaV/Ubhm!cU4PC5oM!E$CO`,)E]rBrS#g?u3U9F`YqO)C9NE%QQ[aLjb"-AtB:5hV;B^O:YhnU:mmgN>hGc-Cnddltm&U<^?2DpWrkrT!MjH8Y0X[(/Fc>!Wk8AM)M.Y61>kgead@7#Zlk2\kF%'H0S2LUC'dBpPMM$C(4Kq9MQ[ekfRaf1Bc`/(7ns(pN#k2QAlg]7 -%:4pLbbL[j[rg6RbRU$#1gcbF)/38/?q[a,ih`0WT4bbBDU0`a0u`.r,$cc;nY(Ino,'>l&&np:n^A^GG_J9"f^#$BF/\F-U,6co`XuLlD/!eTR(*j[qK,;ca4@Lf*j=XS[UYRb6HP]TRRScZW=5bL'Fl^`U0):SX#/7D'9?.^59r#hE]J2T]2Ss$\WaeU3P*f6bo#ZmRP(6e+%C"t"qI>4FY-?o -%:/a3qtJ53W&\KIBqPu96a9Fp-4g!p/Pp2PO*WNmWgZpobVobZkI^T@2YXcE-[HOO3!LKfEqO(Y^&k6%]QM!%dNIGK(/"BU(1HA,ng#LX=#+P9A1U-hc0<;0rNTiKM!KPfKdrhZF].kCm@j??Vc2?./N8KdQVC.Wh*'KZg>YI+Hc8Z!lgfsu1T)9p+,/_YCq!#t/?sF\0+3SO,p\cZu-="Op^8*iK*'cXT -%:TAJDB\@8+".m5`_R@fA^]8IUQClBf/N(e4Vn7b"R'?'d!An+M*\*'u+`tSo/HB^_,=th_q3?opH-%.(9"1$kJP2!h=Gt*`#4:A`hG<,8Lqh7?/W<7%oX+4i`mU1t`"Ksc%beHd`n9NYnOFEfN5s)d'Be@M5G%I(Gb-J:#=_?r6.SIdK\fH;4F?@!3`#X/XP8haG*Z0<`9G/V5EjmtU&N$f+T&)+^^+-WuU,hd-QhgAEq-O7N8^8`7 -%:EB2%aSd$7jZf%a$X[!o,dN1:)5%&@2QVZM-u2_G[[(=EP5F[c9eETWhb9(.Ua[(<&11?$W0Xt'iDDWPaZkJa+tZtTQ-_3Ctr],@DP>SIq:QBcA&7fEeUi#W/;)FalFKnR!G]BG,)KW76\WU7]Y6JkAIA5X@)+EUQn9>NhRR^jE_aBj>ofp\uHYn->X)(RnM9dDOhid=4\%3^$.!kMdDi^&b=HbVV($5i(gQ@C-da%R#KQ6estXV5=G)*R8C#aDs>KN.3OJERSH0r1fKrZ[Z,t[['9cV:1`MF,-$caiZLtQZ7q%>1lqWgI7%nV6aXBcJ@-mfU4S(Kp;\&Q%`0p:b\Zi -%:`6&FmSYWLCb!H*Y!k,*p#*l`(CX!cMBTl6C=$H?G3Y/[&TNpJNteFgG+_J&:Jm-_:,fY_T'QlD-q"2DP6+Tr8+ -%:N#]i$4Npg7H\65MkNCns6I:`IC5+#*O':"2D%a+/e:+">-XrhFnO`V`[pp#1WBq\ht&,]_\9%Q*)@cYHU@]o9jf_atk<&B,]$$@BWT0[10]X2AUD2N5B_d/d(&rn0IY=HLCRA5/uX'7t?]6d?)T=ETR4Bh8cYd@(R*3&?S-fn+pTO%#KW?"bBZ8pN7U]M3j@ -%:2k]7@R"f6JRrOq+jUQhc1.5p#9Nt,BFSE\2Yj?5E,Qe]SV1&>*B>cdOS:Sd?\i[lOCZAC:o'aS4,df6S2,5i#\&\mUZRLnps5Og6/16nGR/N)RAhH[Sj[)l*4M0$!eY!dZK4`Q=`dDH->[Wuj2(g^ -%:T#&!rEhV@t:!?j8'R5U[IY!Y:&-6^"Z"R@[e+A`q@?r,1d`HB2Z.>%T51U?4fY1ZRkCLbsoCT)egi;C-#P3Fr4:"pJSjc7(m7gq0*8>$KEc!DGmZ$2X4:1aKnmMrGmqt(hoG)P^uNnj9qiG7?SYD-;V)&@GlE:17+lUGgsb"*AJVA8rciO_oZ<%):+F7L"U-=@3NrtUFs\LqI@0+';Mor*b\lrGpl#ig,0KZD]?5?6pt5@pPjbT2nsMtND3aRD&5%G20BmP;eYiP'q")f:le4DJ%!,pGqB9c/0V[t5 -%:(E;7om#CPKNS_<+L5Xhiod8,'H4s`E*6XeLRM4VE*Yb>)K%rr%Wh*tuUa5hP\jHDq7pQ>LnBES=1qTT1nge2fc7TN[S;i!h[^W^n,(WMN8AjbUN_.F0YLd+^r']^#\eQIFX8KY8j4S!=u2Lq$%_Q\,:F%,UW-g1X#DU#8QgU4M1VuMRk]N8UD95"FS.W_8En1".2K%Sj*R',NutRS4n<'XlPR3G'o[H2:MOk!OF)Q!o2B\UfW;+j8VAfco2;Z*po-VM^)@YsQ)*'-[BWu3#%R"8>/;3RORDAVYp)EoTEO6lkE[$F&(ae$Nm5?fK+PYWaY&ncA!-2QUY1>kMoB;=)CjeT5OkDTo%lO4]F%Q9g89VU.XXEr-'R/"`!/b&)qHf/p.-R0skc]g,?'!haN@b*6Od8:b\a'4Ke9=d'.'?Br1,!3aP'MJe9a[iThHH7:f"YOk"nC7NXLN73MrD_'i0CUMuS+"27YOhe( -%:pCnmdG+#\&@o81L9NQ]^a0@'/>qq-'`@1K=0\qp]'T7$'1$G0HUM6['p_h6=)sKf]\0^HEdeID%^o9cS/>JQ]K]nN2R'B"a0uI-fK;Yeh*BU9(8[Hjo5OPm_S&K,#)sti:eCp8<_:k5CUOB\s<].@"+0CGU>?+a>&G#iO[.LIJq(N1?3f&nuT@*31e#B]2=O!bDd&>.5MAU>f*b-ElJLhZ.-dhPW1If;/P9`h[%WLoAN!q4GbB`Wu -%:_Oc=1+6J^QU0+UJ`=J#D"L#pq6'j7>$'NB;lR7]_r'<"lN(0Ki*58$25/m)Ka)JNYoUItUm)6"g-FUK3@CfOW\:PP8ZVrPeAS8i?d2D"hNLkruNk62OYZ88d7@2qG/e?tO6cdK(MIOE-+XLDELT/NN@]YBsK>\74U'Qk>t5/$BJRLK>UZT/0%qXia3,M4dhe<[5P,t/P<93A8,l\_eZU1Q,_/8E%#CU(W(SKt+MgJNmP+^GdTgTH?%R>QhV"ffO1R7_4Yae*@L0C:F[hCVM9VYpM_"/c`hi9N<'gh.$!?[@3kq]IieM;J[.BA>pT@LTce/1)Bq"SW_9^j"-pC7VW$;5-/7 -%:d;+cVJGY&.i-Tnl\:8c(IT=[GHQRON]^N*jE''3dr2?gc(?5S4e]NGI4k[`hVeuStFV]@*j8cY8oQ\?S96BV.:=*Y)C@J_K#sN&UJk*iji*1[n4c+NK7=NRoK#_eJ_!e2Qi0iFDr--T&Q]:1cj`d:G6o]=9I\-g^$c[d:Ao`"P5FFqW+*!37@:K"<^'*Jsb3u&-1%o6Xg7;S)Y.P]$N*f?h1hQo#C%!(R4aq6:3DFQ,@gDL%!Kf6h -%:,s[m=\E>5"dhin4OFIDQdu/CZ1l_`KI&9[:;_`ad#pO[e)'GSR_52u^]\8K3o^bGI.2).X$@LU7?J'Z)kZ('OYQn^LFV25%=?sF^*-3N:+;jC,4%c]Uk:F7PGY"pQ/omolW0r5Kee[DWB%aa19mD[K`Xt->*Fet&-Y*>3_;Tc/F@)QD6WBcq"iF7_J+U[!5usj(WUM3(?4LU1^ul:3S'@T4>fV(F!iB7f69hkFXQ&5?;(qr3rWBrf]Q$koTdgF"QpQNJd_hc"<8:f?r-uph$8,o)_#0k"Uc0,J5P*no/AruK)g)#5Eb.HbQ,f\DaVob`V(;iN$PSr_j2oVBpKn9n$BGI][k]\t$aW'\k;m=!_tI$Jr8\.aFMOh&[[W^`KQ'L5&'?UE:WQoRI4I#g92WcZ-=@B,"98AWA"FfENtinIC3V49`k6<0A`IZeuVkf5[3<5Dr45E+q' -%:O.ZiPSOF-%+-:b=_`sF1_KGkBFK(%Ok_WO<$VS![aI#dYLK#V\6@CJDFh0Z&U=ieQA:d9i0p>2'k.$L>pZTY.JG\Rj-AQE,r+)Obb[+mB79:!>c]iI;l@mJ:Sk9OlPF(g8`_-K_%D/13<>nt]ijr+.6$;FAG[O@MXJo]0W>qsAB%PSuC3M*k9A:*lB]jmV\:hl1m8k[7^8BR"6%b6qb^%;M>ViU8DS\LXH79G&IZ1(Z:b0(=q$XRMK2'(!-pSmE>d/*=.L6nNLGhJ,POK&I+%hYCN=pRo1`eahbW3eF:o>Q5B6@(1-c_ia8$Q5\$uf-GRD]7=5L?Q&K$bFFit9eLn^374U%+I"rMlg0N.ALKS@$[@Z)?D5"C>];cUBF\_l87(!sgV0Nl7lD(4W1TPfNJnbV"SD)eT.^(S(d/gheLKnU91S?RO)WT@sFH.^'A*ErW -%:8DJ8!Aoc;We8Ms%d#;%]8)TReR$?qo9D-T,6s9ZaHRKre7&!]XXclk+mO$q7Ip2Rc$)*#f'2(o?^E*V](PO=SmPf7UikJ*]gI"3fFEYU1s%nBIZs$SA\,=^]=Uu_;hM-[T1Y#Wm5N8Y2N>Ch>g4/lof"7e+s-?:FbWBFs7I'\%=`o2=@giV>:`R; -%:7>fQQYPD$iFTg6eOYeXPb2oH\g>s'7;Bp=97oo;,:t:CPY61XF;A7Nt0$X7A(61ZqnFM;&acHaeYQ'V;WL"o$g1m`g-iDJhPs'.@md&)4(tX#I4gO9]K:J;gm;I>^;9[E[i)Vn>4gHL4ogpiL)IeaY_E9tIpS,8_OpF240*$.7b%+$ecgLVFI8eC$80Y7>\&"nBc=BHi?,aJoJ,3/#[#PPm/YAgK<2WYDLN"]CPJ:2Bec+hJj\mmt -%:FXkp^)DWN9)F8;qpk7rnHN`)PiCl9WLH:@ZDmcjJEdXN70%7A.`)G*Xc7s`KkLsjcV9W$&Mp,>i%F%`I6_!Fl=)Z;UACUk@W%3eU`@C+6'X6.$g9E*M4,drH$VBdjK):EA8S.kfDr4fNXY*I`X",V#NT?:4/H)_\bYXY*b=OEh&D9,0qQuq$!:g_F+lpOA3EF<`qP12b-WK1Z@^7jb&C/uqEnbo6"Kk!F_?Xe>NtFlk0OSuG6"(njFk+8,l_oT^UiGe.s^2120BS3iFXjo4/ocs$f':gl6fg5SU+,b,&K.uWd*ItWBTK:(0,]qo,PVL;SCKe@10a49?u2$Ta\g^-&,UL4TO?)I'"2H=Uf4UBg;.UQ,7@sacNm`ml6!lD4q1`W6H$6_qgf#2X]f74ls7b4SaM[r -%:\(C=eNeR!t9_MD;j:g3"nhEenUE3b/uM7dICEdl8e"^5B5X"._54bCUD?/)jL_UqQROdPe11[1XbCP&&ZF;505XU*;HfrM4+2G@'sr+fVUK`^rS&M>r-'^sm7rJe0l5XAH\]?2)YWOSL3gn>l)p>4hLf>j#ZpJXl9i+S[^g_Q5AED6+SGS;qr'ZZX#R3ZE;q#Fq%63tD>W:s9pu%QVESS: -%:e;%ai[s3/>5*s/oBE`8-)Og<5q),-3CTg>`WRkUJXa7sqU=coSp;SS3CQdGd1/NBPpN'A]Bnl1#)A\D5=7fZs;1tF)GM=VWa'^DTtV2l%aHYc\gR9>3;nT:Xdu,ebWBhdDoIL.6t_r -%:5!b&i32u*rDoRB,oFi=4ps4g=SQY9lBJA#"7IN[7Dm6G7EjZUpQ^\\;VPKpkcY$=ikb5oZ^]1('p[W:gU8KW76]9gM>kE>Xd2SnFa]2P]4Y@T=.U!omambo;^!Wg;T%)8`7B`/UA\<"cM??pTUcu!W5bcm?LD-WQ`jJP=$$#F="k5LSo6Ic2$ChXD^0JM\PupLFq!Z[.lX(?=g.VbP]Da,a95dPF]KBNoO]cCT-VQb9VMAb0*gQ(<4J.W&A9LPFC76a1iLSWS]]mJ8PDe87,b?FaXm`K`f,Vl9bm:0B-V.t&L8V^]iF(QA^VTl@.sFG@dP31a3cUjTfJpS*KEs5Ju! -%:lbT-+)%?3g!;3uk/ED?GOn=!7-*"OH<0&:[Qm?\f+rRToMuXM"R%0A];]os"73*o$3r8g@F]@WZ.]u`Q>!!I.%B]X'RS($*ohlq^/\+?@ZFdT6bF0rL9:4u.3!LH!;s"&%T?KaK?^\Z`5CJ0q#s?$3`H1JHGd?-=4uF=o1e^*V9Bf7&OLk@X/]ec7%,\o$c./"lY(lOoi4l_eir5Ujm/n&7h!CqdSrPY`mR>@-4D05a>l-bO,gCJJr/1q6k3l2]f4]psiM5:>Ea2CSCp'u&1,gmG_KAu3jH-ll.#mfUqsuZYs'(-,[Fk11F#U:(,oll8$>mfr)U%k7tH*g-&TceS41Z`ptcVu8MGS"t[[ -%:a:[`Al`CdA(N)i9e3ca-g\Fn&'?]aL^W9Enrk&:jZ/i:,En'DhqEuXINg]UZ0.&-F%sWL-D`Be8nbT-d]=i/AqaYdgU9nc,PhhJRLB0+bO*#gONk?'D`)=6*N7kts+P7P$tFGpuq+YqhBa6ZI/*NgW:H1J4V@G.B(qQD[)_.Oe6*NP(LW7_P$QY'MN#*3jP_G#rFPkh^``'oH#8;2g*]%[B;G%[GJ&=N+,jdWdcp%9\3j(Ni,s -%:<<,J].;RR/WU-pWo!K]CV9&AY\i!"-+_t#X?q7m[)8;foF8:PggC^LOfpVR/C5\AGQh7]#h,]kO2/q'GQD7d25M)s8,?Eir$$bi^[F-6=*B*gK]>LZ27cq_S%\'+qdr6j2?Z^ei*LqS=bs'78#L1MUWr/8h!0VE*d%PdGT42^*)@YkiIsT(urqlW5s6!HXNPF\m*nMA2>u,[j>Bg8[>3<95V'<:p -%:X/I:i85r2%#fb;j+nReE@hNWH_Diu3NFA:OV0>FO>K^>6EZY5_oHm']X>gt@=ki%G%D(YnD-cinXn0:n:Fo2fb[1l%_SmY!4'LW^pBR?qbRbD$:&S:?$,K:C.nfB"h9F;ip -%:e34nX-]A@/9U`s".d''0?8'1I.d9HHYeO:kP76Hjg0^r$gQ":Z%+d;W]J;mI\%eO6%8L!t[_L/<`0o5tJSc-/CV9W+TT+hTqfhqXr`=qc)6:ll=GA=!UpYGhPGtTGr^EJ9Y@eG1'iW"4p1N-H-lI*UYs6td&,O@fU63YMbDAXab7:;4/B8RZ5?;Xia@l'gZq0`ECfe9\g(a7#W8c@$So!un^$T`N]hjq[%IG77'ZOVS*f9*L^OkL# -%:h\;\RZ0^pPF]#et%(&5@>"J0uLZ_)dm8'0XVnD@l>2])DWpLsrPBhb+nEA^rl>rqP.k3_\M[un\tDq:PD(''VeB=lA<0um4uPe%3Woa4 -%:^RBfQi+tACj`TKhRFeK\5nrCESR%>fO7P$;EJciN1WI.S`>jc\aL1'Vgt1=W3k)#1'Ecd^UN#R@2"u4[&-f^i#j+FY436LJ%WDWmk,\2g+0]+X=V:PS2&C8!-U0)3;1Y=B3.C!RaZBHqY&Na52%MDP:WAE6ZG"`6MHdXE@)'tQTqR5CUnHXEhdSi,UI5X81Hs=^s8l?`8hc;L5s2"]Ka^ZXWN(EiDEhNDoe>EPL'_@h=GY>Z@i]#V(U>h4, -%:s)d\!@`hZ:Q:I)r[8_D-an?6X-7N^.lV9I*SS*5TSUX=C43r)Vo,NOV_k`j0VQdCiDQHHRrf!<[*HoHCVq[E+'in`efi_0nJs(:Xe38_"B13i8PFWGr/ab6fSX":i'?SN,q`UP;XE\"U-1.dY'uNVcF,DAPq>-2D'sFVaLRf0fgI/?RP0VL-m-KlM$kFeBjLODuWN>JYF8)=,;euEZk3gM)HG8-q]YM452D::Qa,7N>L9BIP!bIcm -%:1053o%o_k8c&*oaZ6B$.de%!)G5gLahLBj7VO+-aVO+l.H?h8?YE53ur`R]B#"-j3el8)5O*buh4uID"o3h/#k*bA(b_s[qc#(\*Tkup)_B"+crc6bqB)]d)d_$&urfUR[?`jVj1Tr^?_0Wn#ltsp9qqL>tIFS-imjRmlV`/0FrG$Z@A+:GtZbkm,T9nfW:>[Gtb4MU\a//e]q?s>0(OO+mEDIkF6hE'\Q%%Fl`*C:2f\Fuh#7M-3 -%:cFhOqc1o'J?LLGR,KOSO%*//?q6&TQ3\9tTnmA[f7i672!q&hPbu!all@t.6^$OrG8W6H%)K&R^#/Jc67B/]FhH1rg&PgS$&F!&-g.3E;XbsAn^'$T,qTXrY5r7ZFSOjC14;S!#GL3%aJu:HsU_G5$*7M8WPo!7h+7cTn=oKJ^8*an>+sXb:E)^@!_L%Ic\H5\#XQHlbk@9_N[0tj;R?,Gi`>k/e^4/.ZV3q:K.!=Oh<8Kn->nnee]e1pAUV?PMJp.+R)D-$D$/3@]CXe[u-;ZELTGXq2YnH(n*0QphQ&Haj/i,O)8D#0+$G!`17cO\5!@8T./!KE2?(lYPP.e%2(kh`aY\$lqVm8fPb:3%>()51"VN*)?:?&83>"ZJ-[[o(^p?MDa>ZlRC>D/B\Ud_`L\UI4m9#3(.n\=(5MO?tp%fLDXT;-6)G$Y:B$&h51KRgtU/3=2 -%:b-VB*Ej7&)Er,HeW>HA4i([HN#^].M'p7cULS+nUI?@a.G1/]+`eanSPmPbGO-T;%ob:%\Q[cNb3rZ+LDDGJq#eW?7\F]P8LPb/<,&F%U7*:0(^'js[>.0CAsCemP@`:o1R2%0R\$UX?C8ILe?E49ol)WH$cu@c8!:IK[TPdVU^1DGK2#hh+31Coh+IlcqJ9%U$7 -%:TZ:3gYjdArH(eKm8#cSPWIO@K=/;\+`M^=ol!q0m%QNrJ=GWQjB[lKfC,9mM8ag:S_YAR"[u*SJ&^l&3&a#c_A)s7Au*^8-XffBd0n33kJ+PGhbR#*>fj$h@V#:[Tm1X^-3K0X?hh&YDAn+pMLM+ -%:m)VZ]Vaa%]OcbX11B'Wi<[lOrk1!M8&[Xj&));Q&*m^[]8c+jQQbQD)^ai(-^J69DlT3P>eL2.*;=.JBO3p+S*!'n!_7\oDFXi"&gIp$ITHGIFD.l2-)V$m>f&LS>]!,6sD-03!H7DEGMDYfD?%j^601SU`'MToVC3Hsb'NAiQHJaf>($"_]B_66:BqtfuW%.T6lI8pmIjGqVf-k'!`-Mon11Ch216>u,C(RN(NJa"re:B@OADmWBR]4]2Y%fsaR]3cr=X_rZ -%:>h/BSBVo*SJ!K;!LqQZh?X'<@R.j:6elHL=rdL\M^%$iU,*DliKaX>Mq!U9/jc2EmZBI?<[m1/.+]3O3-W,s=F3]MVkV2=aI-QtKFgZ%to;S'se^ZG4bGS\HJ-U$I,mo.:G-&X:n9pI,Y*[ijE@P-d6rih'@D]#K;QO&pXs"S>UPB'-*m.T1Oha.4<\*K$T@m+3$.X\D%Fj-u[d#s4?N]#^$0)r&G9Z6e3;"j9,#],kKG'IWho8#Z -%:57EnnW+E!-Bj/&4c1dp/'heim8u#j[0Lon]OB4/]04BL8&rGn*m&rgr8keGWTZsE:Kp*R=2Y.I_-.s`V=\tjR&MNnFOQ6N#s>7JenQ:Otemp>;-9!>X=K6jLi(;89S]S*r]2,Us`W4KXn36cC>;0CRBEGDT4;0C,`3q,hVG04K*KG_a#f!6X4I(mhS=:O)Q7Tb,M6qX]Og)!qL?'Vf9'jbR)9e0u]0>>eRG,\0bd?+K@ -%:p]bD"[::Msa_'Ik,1>/ek,>#7h]K%Erj@VED-FSQ!]Y'p4N4$q3=^<;QmJbVAkSp4*^kU(CWB'&M]RCZUCjI1:CgEsT:N%^n`)n-_19(2e@'p3:]t,!:,*PRYD.>'MXXPb/fJ7a/a&jjDKF4RaNHsRa1(9;W+gYUNeBNFjf2-V-MbFAhu+.h!_lgh8L02iop_m8iR*&X53kKd`KXM.VX_gdRu2qRe!-ojRkje,`]8I'.AHeA -%:j_ol7OUt5)$,$e99)'A44c,&]p^'ZUjP*3:Z,i.G:^id`"&8"hR4.>saa4?AE$aA-4e'P5YH*_Vf/7+Lda\RQl^H&s])&3I/a8_PpM?`kWTe12'E-H/50W*:r1"[0$o`r*-<&Z*C4-&9R!/M/``;;AnsPKL!,5%ca*rTP"S*b\(+PH(nHFMRO?MR?Ka+.)k:6BYMM8nL[J1[RWQL8s)09W2S$c`tf">eA=FU$DT8GWeg+^lQhMj[e -%:r0]sqlV"f-#nk6*(hiQTVK<*t!@k^4gW4>`W!M2786;6E^NoaHpPHR,A*!T6eMq?9isdL@V'qF>59CC]c3MQ:Osgj:MJ$W2V?pb)%sR`_5p'B.EO-2(aql]eHgKW?uT7`?#_OB$9eD`gQsL9@Q^(/!-``&YP^]6%hb$%A9T%QdjKnF0qrkVeM:Zk%K=XVJ0t0c-^9:_P;r%?0,3j=*[PaQ/@u/O^7&\\$#9P*)*!f -%:b,Z6A;]k9V?oF*YQ]R(#l-UNr-YAQ#(0ESEP;_m53uT3FM5Z-=!nI%37VN8&5Y^K,8m=,!:jqqY'K*QM7jcA?qBaM2'D-)Nfh">/F@ZVH+]7k!XA^RhM6hZ4WtgSU\$n3_7457GI:f-Ub37&(d/T[.N1.-BRX4eq1Kol`9oV2Q7X\S>)G6qLKC3F09DB>+4lLC?lD8qXSm.c!UU>Ds;f;8p?WsM&hW7dN2/Z.]ibNG31V0[<<_^\I -%:]Q`74B22X2ALMe%Sc"@?!0snP.4@Y$F0nOV*%I'X5:iH4B$84L>OJ1;W-_bgDX2l,no9OE*8/bVR?2%(KHH31VWtZE[DK[JCE3q7WT@h7XaTU6V,h+]S]iUD;@Ii8q#a@r/.!$k.BiYPm97n0o*2lU,U:)S+26CN?:3bAlqje:u,1[S0=fMM6Y[<@pdLT2^3[A1BJqL&Y&qmJGfoH+^&WeppmqFqg7hEX[E'MZ?ia_@"PMm/it':#m)-85]LN,<:eboTcr"h0OnYC5];jW=Fi%feP\ -%:]fN6QcaS_<((dXKl%W]][j]RU=*0_+XI?^9`;;"E4<3I(-X6""P;8#qMY*S1s7.pBf3c8!AN9p#bNg4iZ1[sKm=niW-U=BC2YeX?CX-So>Z+^B1'59dTb7Z$/HdP6ML:4Cd18-@Y"[jn!WB]ec.W/>T^rVhreO8=)D*(T$8;JV@K[?:.6mRT*kMlSH`er"t;tC"62l`9HOQ;,Jnn1Xl1F!F!8/!n3'MqN= -%:NrY%%N+1.%Rdb/P")S@-WfVG)]&L2*=pr*ElA"<3[%\S=W_:h8U0)\[oeIdl"N;LZM):./uLe>4,UX)TeIW2hl:";W*P3j,?l;8T9T'",r<%SNL+5tHfX)8ZqPVS'o+0W)cRc)Z#hP]mP&H'MOF=ge7O[E_@5eJUOj;rZ'epl0BSY+--Rm#.aZ5^=^cUgb<1Jp1'#_S)TJ*KGR3e3!@!M$N=>;X`*?ocC'?'VPMa -%:h!``OD',EWC1M]\9kdlu4ZoC3qVJ-#H6f;\k*8nrW'Bm6d.jHClI"uDZuj@2Wdc*/U#gMqQL[Xofi5;BfqmOEe5WL<@[Es6DQ;4mhF3;WJ"3=bl#o\Jrg9M3qX]r;]tktr?D1;"##9r'oUBJW@6S0bDuS45),%_&)FM^b&FOj8J1E7@Yp9_nbLBoQ@73.I=$(mIr'C@AT2u[m1VHu\3`"UkgK!9H`m)9o&+ar1-I78iGN6HaP2J2e -%::BTCe$X<]C'9[3UI'E4^K1]QmiVeKceesP'bVpQ!e'%]sl7IMJ>@'NSr_1$4nhs,&35>N`+Fc1;Rq'Zd**4WP]-uPXo=\\2^Q7\Z53VbSUTh"eq>hXZ4ENc_17h/^NQ7uei[C3dVB2i&7PU=Vi9DQoGGBoH,f"%%F!G!#E@u;-SiUeq@9NK#37]?7bs)&')G),uS46WrHjs_B&1FN*u%jnQ^l!N:5s"9^_RTOP5 -%:s-k5?b]qgpr!%LmhIA4b#L(OY.[ePR12fYZq9s28Q4Y]M['M/#b;H"sOF\R09N2P'_Oj4E''&p"K^>LPS2GngGgRk;#fJc5;Zu'UGQW./e4Kj\[jluKIt3)SN!+>LBTPXpKVQBnlk:]ZggF&?SsG:j!!@_-O@[>mUaWl/W+?&>SC:"Q;-cIf#)-J`@Rn@g9N4Zc_Q0GKQU0^5JZ*h?BHkFj9;^EGn[?2b$t2NeAY\bQp>e1H_UltE/&(73[hW6sgWD7[[ZUXuf"ZfGUTO1Y"TuLGO\"!2#eCSC8A#jQ+Clkmk?0%NM$L,FRUoLoHAeL2*^FPYHklS9 -%:73Rg4N9A=!Y5Qk(P&7KjBJ^l%m0U(G>iIQZu!t8uZ7^9nT")E2FmFOb]F^Y5bicSJ`R;:<2&s`+%HXo)*G2@)mq>MnB9[j1+9>5;n_9WtTSo8=_74)\:o0H]&W%-afIu.-LDH$=B"FUW@W;GQe"/%24 -%:aJg)2MBL5^&>h:%&=T@[pp`2;oWgbN\MXXQGV"JqM^XIM5JY("&JE2:lTsV=U(?Q>4FaklOI_UX3a&2IBSr/+_s8*3iTaom=]dZ\qltB0g;9$G?Hk#.qkPX7nGi[Gfd%3\$e-,r,!%V;Y[>&]<,G&oaZR&7pni%80g"*HT3GOiQYkif'Q$8\A5d^W7F?Hd$lfj%&\=lmT"0aHT.k]+JWLld955`)>kfL2;Ac"X%J78cn[O8A9Rrr4i6T0c2%uQK;u2$Q -%:JqQW&.LL[NZ7.inc\d9PCbcbQ,A]Jo,0q1;''MQt:'YUQ5g";nX06m>Jq5W&d(*^PG]Jg:uZ92SfH+@TaT'Z2(UWBOsS+=@YYQ[&`W_.aZR-QM-]+&NHc7k\Z>D"4DQHC5'eg!@u#4(Y/W>(,%gNsAr-i&-p.DfCK1I-"&geu;euJ5750,:6/=<]Z,o)d].o;::%;",/?A@:7b"M*uaol5$>%5S7$_EI^I-R,j%AJ7\nd -%:mr$*^FuZ>M/_Gs:s8E_g1u4RgF'Kd^q0FO\Hi.CET5R2^EFY4!"1Gq3AY>qr`Nl@\CVgb(L(qn2>I)M5%[\&0qu.B:Ka#j%*EAG@sdX-Gtkd=M:UK,FFP:&B^%#C(c"r_ZVBU-I!^=^[OrIh -%:$!$c!PI%5*c)_6oL[5>fU,[giNFGkX<.`G5qES0*0Ap8I8YY0N;1*im7?h2n;JUQra2XiSo;?ulDg+X&1,clF;C@m!AKp$5G_nm;rV2]$;aaPO:??A#GdP*E8n3(gl#=,eDXNf\]%_3`GJerdl$^,>I+c=2HBeqHo>RL%3b>%#&(rN`-eA-YNA$F^->s*;[M^n$L$1ke-6^T"m\[H2?&DE+Z9iL&0pkbL;-gB+I*JeWs$5+QZ*2En/,)A]M4FN4Zop'"k.g+GEe1C[#n$94,`*nYLM-E6ltD6mi9c6@kD2TK5C[G'QDFG-VY,#Ph05PaQ7/_@>.,4*8.jYfc48fd`\T#Dq[^@9(U6oFjfFAiIcTpca$29.q&rtDGZ=>iYLsaP/ZD3[gM4$5Kfs/tFPi/pa:j2Tn9JNO96[%jdVdefUMX:&54d7'-_)8j^ -%:)S:h=c8ob!:Il%;.ShTh@33$!;Da@r&RRVc6Z=cH-i3]UQ_&HMbnKVQ"O($g.I?EE:APeH-CO'Z*&>a4>@2T>PRGNCA#CPb#fan@'R&8dkop[18j#EUnBpE[b09R\c(Tmr,dIM9(%b(+ChGS`Z$m`J4*#6a7m4!r&H(q*m7Tiq)*NG5$=,()VI/:R#[p*7(lr -%:7F;F.+CW,oCpFmP-N;5tD1/THX&kg.D7`)P>5gGr0s*.[X)51qCfdY[^%Dm@fsWCsH3`AZlp6k;a&PR]WPk'J#KpS"FT3Mt>P(O24K07L'\aQGQG03HQ%B;lA&bfq#B,oFC.p(>Wl)hR/l=`V^]L<9W`Wm,Fq`H?ZP^lp>)CVbGT95AXo_J)HN= -%:m$CTo;=d,,fsT17IBEaeX]pGmc>KL;+)5'4/!^GR<1HHt#":3fP9!o+([K"QoI+f8^ARS+^%X2&lO(>=,7QCS!i;807ra=6&S*<^gA*1N8UJ,#QMpZrp8iK,>5N11[+krABqdbF_Y(Z[XT3ZnnI@A'nO>`uFb&55O>$pXphX$@Q+L]kj.JS3Cr[$T<9W,Z,dT4Vm16[ek%Oqe3D$E03Ojm]BFk<>n_?UR`ktb=k-f8QLLG'V\-RVZ$Oi-KFALDV69mIU%&aeP=FBJ.qV[YqAiY'+8_^#l&46d.,'Q?G+]DR>!&&092C/!9_Lb6#MZc,OT&^f9eXYAiJ)me.*91/_&.f?pPCn5TLX?3t\b+tL^ -%:X`%I^.2+T$a;O]02J[#E19:Y\1udS?1B[N0CLO[>i6sVldmcUbboF-9>TPB=s-ifUjX^krf02bJO78;(`=uhW'@E(8f$Bf(e)TF6Y(e\&Hq"<$.#B"KL^u1*5eDTCfpE5rp7GB7PT@u.;V+U*JWkkb*=NY9Q61!.p!#1iPa$X>"\%Q^%8HlB>;uDmc_Oa%GFTWf.pjhJ52U+DD-NHS+K13LM!48DgJ,M[Fk91$2R`VILlTY -%:C9c_$'D-lFC,'M1"H&IOq2tXF='rX+qEo's/ur;85UYX$SlZmO=Xgs7YfZ8HctZM64U?(;p+@DD26f\@HAn/\H&N8hqce9LDXP2'S(YlT`W-+_K,'Yh+ -%:4I>)J6XDkVE6(espY9'm7(@Zk*:>[54\@6!0"'_aBjLZ9[N4O,'?,gAmC7cBh*Kl*.dR7@CCH_`n.$oPU]g.'WPLcY\L[)VT(&H09(Ct3(jjm".)h'BckL<9@toXRa$Y_$;OVt]EH\F6'oItr$t#V;+hM%&#bHt>_G^7-7[5scY\:Ym&([[fI5\[>WiQ2Ph[e$ -%:iMZ_YNAV"Se7(T-?Qf'MRME!Cj.RLY.CPV*n8NKC%ub@*o`Gl$%.p/NOuq_;7;A/j]p+?qK1PMf*`[YSY?W;h@/p:coBU2Sd*/cj&Q14rN_Xam,jQ1:(m.l&ur\N#b,bm*13@kXA.qk1do2^u[XN7dYC/UVKl%NXYI0HUoeoj)YH]Jgf3/VgAWp(L>dYCT&h]5"E:-lYd7DtP"NbObGaD4NFZ?Q?Vp>:R0IUIB_b$_Q8)OgiK^7aFpSKX[Il=Ehh#MuIO@@uLe:@j/"m/_YcRkHQKV"d^'X^5M(/!AZr8RE;AXBs20qd'7hWr[)U:SZT^k\`/+SrNPcA*F@iKT2!q.Edc07DN<8o9^Z+ -%:MUg$"Md]HshVY1964E5o#Pq)n(4o"!LiA^`-Nkl_?n#Xh?X>Z^"BMo",qk"2;XgjNL?;-5'YXWM#9jplOB!K)\H;b8Xsg#,/g7;3-BY7llTat-2\UnAa@EtT6_^NUIH5`=-)P]FHtUoJhgquNVjJ?6p8o\_mt.%hAOb[*<>=OU]X`'=J\d]k67*%`7Jrb`A'+S!^O_K;eBtTlO;$SF6o@2AjTjLpktMXlq#oSsfjI/b9sNBqa6 -%:7#aRiG+`i76,J<8XV-JZ"DSa10bG,Y$oBRZ;6ph@hL[=3^l8h/'I'O(#b$Mk_WB_\c3ed76N83=;=g^<%3%m]C/ObMTVf[I3"/fA9R6^JGYc(F9o!f&,FM]d]#,0".#n"n=H"/f7@82Z2X^s'R$!28U@FGRf%5&gj/IO3Eni,J/!u"+$`Wj)"Sj`+GH36>n:/4k3oK?jG -%:,GAHYbS,NM_@9`j0Cqe$&2Z"G2)eZcmo+L50&ME3].U[?f,)pP67S&UYJtJmopbrtA,>:%SMP`2?Zn(leaK1[r$c5nKX&VU+ZlZmR(uR\';H#]$u#3h?S%ILoY'jR?`K8r%*nm1?YD\F^'M1rr"KcIN&hUN@[0L63h*u^,7*t,\/".[9GIDm*s"h*Vp3$56'>E.X1*^*r7-?;$u.`(*b<)&p6.D% -%:7GsOM"8c84X:7)?%Tc.[n3anXUM4Z\:L2i$"Tc6KmNaQ]>O*"rb:2G/-.R;@o/f@kGL^tP\K)m?[H`.dWuXSC<4Ze( -%:ZD*tu-kZbT(c]O^@:#G?-Wh+G+3#GIK1gc[=5MYSDRE[0:<abo#pR-"obJGM3af4##21R21TEj[=^@'LcOB0ebh6#aqW#TFQK%#`>j>,*Ags$lAa.bF4:'*>eO&P0HD&i/@MD?Q=0H^"2E[)gg%^bPP?2rPmIK>LU'ADggM4^-Qcsr"OFgDe$umPuVIGCapqp9b\b>#E4EpHLXEfA9O54\Kb[m[,#-N<)E@&H[tf1t-Ijhu%(/NiI(Pt]s8eol0n"9.&Xk(Z+EK3JP,.=StI+jgCuRHW"*d3Er`^Gb1--.j4E?F:t#Mh.Ed,SCgn.L$q`8:;<5D2XS""kk0AF'%t\iMUfWE*c-M`tX4OFpM-h1o+dEFW6;!j8!aX7,"Ze_MTW?6>r-c1K(V&Je!miXPGou51a+&I[[_dj@1EI1`GE:\&?IM!#abKCsQN(`To8jf!3(Mr^:?p$;\ZeAA/:*@Y51N!,ZRNNo3(j%Ii>q'5DQi[E4MIQmm-,TfA,0+O+tWQ@>"?`?$?UX -%:hO!m!riPt<\h3ShB^4?REpT9U5IY+gS#.#^_^^dX:#FN^D]:c,T2%Zh9P7,"`Ac\OG>XR]a+kUXjGQ?8JtnIT4Nmb#p[KEtI\$mR(`VE#u7)%K"'T_;kJ*nBAW"8#H(8F@-`!Mi615S0gt!$m1WaCCbEpp+VhKlb:95CL;:,D4MC=n"$!Kl^aQf45#`;m>:%Tde%-`Pf"0T\3/1"4'$Z:[$rGkZ!RQjAFtsMA@EGD'-.6eU)MX1^t[YW,H>("^cQYJ,FZ<$*-d5eoIdcoVHSX)_[UEsOg/(4W!O)QBeuu5N'rQrD9ubKU=3sV:Kbo2]soZ:T3][q%(qQ(+Ylcj^cRgN0Ch9mbhH`i'q$e]mURkOB0q3;l3kI(2?UQ8YEVZuM^(,Z -%:it:@_e%,j"liL4C$VYY`JP"8nDBs9(kl.R=.K9;#?W&(Nlt(ho.4;iHK]*#:`lM&ja^lN@UUZoYj^m3k'\?"?LYT\t"TV2DK-;]U=N,huLW`er'SV%=@#K6=JL,+FWD>)@Fu'(IcUb`[BJBJO=g4K7QGtM[b)ggD$1$dL6!)pnj>@=8G06dh?o!"Xa3O%LVQgM&EO`e@2]%i6?/T*rQf4]=\#.h.mZ$qF,0";,5S2__:$-FbPK)P6EnH`X3-j11rE`@AgK%jkj@0U'@9ecfZ`Ym\cr\A4/C/hff,^b%J]0N%E\eS#cN5Q7bqn%"LK67hs]X28ueF9u^.+eIOs8frbQ.BmpUOGOl]V?%L*lH/3r!_n)b;H9;PH6m\FA!$c"E>dNBir@bMnM;T0 -%:?&@!LjA,%E,W$"7%4#E[/)f4ao_O)%#!46i=HS]i5WgnKR4(/tATl!9r+I3KB1(WV/:7DM+OB_@H"lUcEuj*lhrPlHI=IR>&``!o)5o\_$,4XsmI.ug2ksNmo1MiHW2GnBYQXjCPUNLO%9VVfHK$BtP%[]\C_D[U]d)2OV,q@$EJhX$+C"I>(nb+e;EkN`s)sIO_FDNd-.H_%Bd)dYK4edB,?URR/"JHGCVBu,QE5t2LRlci"]=LU -%:Sct&JEt8mUb%hORIsR.alAq4H%IYOpYh8nRY>[?5X[ZoEdO:lq#nI)e&oKMg/pg@51&\?$Q?l$2/$R*T\[:J$GD)0CV9_!^8XE5s4GGRD#![+]X.s8==^=GI]\m)oNpjK37,J&A%=.fcVt?FmZ]54#lCB:]GkG$4Zb0jVq%,!GIVRjZ?ia/R5# -%:ZGRR6ZF`mck_ILH@@+E9qI+J%pRk1gMimf+Y(@\8duA]/%aO+Mc?5uFn2-YXZ27D -%:af\?Jf3[KVm<*h.BHrqkfks5Pd,-1?=BHF/lR:1G[-jD`O!/giOPDO!tSY1;X0.S[;hUT[d98/giC.1%MPp*.kh?mQ\%i66*oO5(<'GB;-:^jXDMHcb@']uYV^)^p(k6Qj6GIlIQ6l64* -%:QaH@42`o2%j?iGcZ&/G9l@ko.#rY4*=n<5p?p@<%7p/8h'/?cqfaKD:h*WNhgZ_^S=GQApH?PPE04PChRb -%:h`W7&J+b5D3JO4?5>Q]RrbEGLc[LZLr9!Plh=lHlT*K95,H-1mqs!pkp@LJX]D^^9mWL"*gV3:lW@55kenSaK^`"QkOM8pX.Ggb]1rk>;+-U)_F`.-Z?rZAkH`(]`9n(X7KNH!/g'B#^o%WtS;4X1tJ_)"FPG7`&FZl>W5@lOD-iPl[=D%!4R -%:DTmJ]8iM4Yk/Q77PH8Ltpbgk*/6i>A<.q\=nFar)>Fal9.FaqB(qeL)\^Fj[/1o9V5LOR:=k3`hXT_gtDkbf+9C`ghKF^I7Q06[!>'dXE51ugl!!gan#8@.L%B'7YMqi:< -%::id!"@u1d^:XqVZ,gpe,fKG#X+1US7U"'%IPe*L]X9gO>GH:LQmQmEdId`@ipTs#en3$%FY[ViTq0]On%hrC;q"]fh?ts2iX$TCQ.ZIU5qHkT='cOdr)a%VX%0p3J'WjB0VN?Bl1"0L:]6J/G:- -%:mQ]q7TgdpEclG9dfY+CP-h.HqF)Pj'18XF;d&hSrhturNe\*&Gk[&D\]d@l_0f?N0o7Zi!URl$1fe<3l@ASa:*96Y\U#gK^mX8/\ih8>"0&s4AI.6m(,"'u]I)u.JWH@UhdCL-.XS_W"hKS$KR!)KqF,qJc%:!Z0qQ2]$KT;KJ;,^ -%:qb0o^Y>a_8rnJ&kE*b/5]JFM!adP?X^gj2;*ar\`6KUfnU1Z;q#7ilW<4^-$@h7.=[PZQ`HB>OL@>VJ&Lq5b(ZG^b-W3t-pZfX6+d'^Jkln\CBD;$sjS&]%I>gVBo+*Iomc7KEkLWM84*V8\jX=!EUNKopNHJUXU&3he\h>4LT9qt>iqq^3fVVl:7%KrNYk3TW3Ph#BobFmgNF8ehJuCQ*%h"H9L;=QK1iB,ZV=]*6 -%:o@+A`F;jI/d%U=Z2r0g_]#VKkEka8kIjJ;]285g8nssU*%o2nZ?c9es[+=iP?-VM:X!*hu?K7pj$VtW050Oq8Qj6Wc$CeHYXoa -%:-EZmrbrR\2&hX"Zb$Xg%.-`oIcQB98k`goRdDj=GPQ,SFXju++:pZ32ME_V]$nk(`2)#XO(B$kN=i-6\\0FUf>f%$OH:Ls&^P&4P\tc(.=>2B%>`7-'@uE>Wh"@`4ZC&c&>A5hYMKAH%\@9N+\U>"Yl_-i@Jj\SnanTfHTRk)X`GG09[9i@#*;o7/0D/d9Eptl3?g>1SF)]m1QUGgeI^/ZVhuF!c?i_?T4np&T]VBpJ,g(JN8Mo;X -%:?:d.3bK`+qcP7uGVJ(Fdad+"&r9C/a1$^ffhfg\_1;A.`Qrqp\),iH.9Z)n^W(pKKhe\8oCEFZSdPF%31mc9;C`ksNU92LM_+B)h@h+p\=@U7hYE:M2;5ATh$4C6m1%/FtaRk6AA)6H)?31e&D0VjXq,A,FJ?(ib@L^f=@ZFAMr>N4LXKf.b-T?s/PCfF7]#f/VH7,;caNPkMe.QbHB(52]Mhl[].#;g(GJrN[#OnkC;<$Q[4#dVs -%:aaEE7PGrZ]e>%0D4H4L@bgBTt\EU`(e30+[PIHi?J%t!!C:*lg?H":R>3XI_DO[d#qX>T:GS.``]k0ds$,1SrEQ4H)E`7k[(HA/I/nqi)<5nWnJ!D-'\Og:dKRr -%:l;8o@9;!;(U82UcKi?2=dc8].T)TekU/Z(]A+oG+@tpkc1&F"jg!=5'k10i;ppU#4d0!BmmVf<.8()$U/R"A"$Ki^K@mZC%WioR(mnl1Wp(WH:A[UNJdVNHIJ&U&.])Nc1:5 -%:\fWMHO,hD[H[3*L]#6S:B?W$'D8,pa;l3?b2%Ja#h2[M3&T-Ih4"Q9-SJXU_Nei4[ET5Tt]PM@[5104[5MNcp9/QXPJo,EUWOff6fp[UT7Dko;D#M_ciqq!Nf[e8H;d!q<7p?D>BUTDmiuAi@\lij$[$[S`$HKdf[fn(\0oYA&ufRiM`S2*qfEA^Tg%)cC[3hQ%] -%:JJGFfoP]p)jLGqXa_>Rr*ul&cib#HpdUJZ7`Fs)890BDnIXYHt03fe:Rlb_W?8Sqsqe=bDU@N`[Pg.^YlNR.r?pAg-Y8;"4PPpa?'eQo7N?!@rj;$iu.oltAdINpeF>7"sa_g;-CbdK] -%:La!Vt;=">p[,_R1&Y"?jM6b:9W"SmSL'3Fp'#IQ*NqM-@`r*rRNB&YONTiEjb4"rD<$jhT16o=E$=i@dH<9(QUUKGVbP11t[bZ)KeC9;c[dLg:96TCoe.;/MhpcHLhh_80KGg^l,uQ;V[>/]"IZMdZN>\@reN(ppg\cUtE7.HFJ'BpU>cqk+^ZM#93LYHBIp9HGf9aHpA(piF"s]m:\\XlU$`/=]7M+qAq0rfA`R>9hJtjFN+$#C@g2M`l<*?53)D5n/:%X*^8V$Fu(I+:EP^4;0X`rN7Mim'#J*[rZbpe6VpjR+qZnm,^-Fb.^8]-*plAIW0ql]T@ejC_8&m*-MB0b#[ -%:)u'E45c218SDMLpH0l1S0eg&+HUp79Z_+]\53V[4<^#;=Bdb#Fqe!q@I]"[.78pa'q)%sihCeh=nZ_0thR`Po&Qa&bmkA`:jn83=ZFof&]-?YFYlA#!qA\@d]0mrmZ%I6LkU#(*hn_C@pC`=PG4;Xl]d/:o\g*7=?oN2lKKZ;f.:uQ6.El:MC.B3>PiJDU5IZ8_r8^.&hS*kk`Q?CuqAnLJT)L@>NSM=U+/pS&7kEX'pU2F)&.#RX -%:pTc77PuSFp+q3gp)bJ*bX/kn8p'0"+mNj(1)bc=)iR52C&??&=HAbn]/I(no$F)!F"MFg>!ue5oTHL-fjrOYNXtf[IYqbu6HMdYY^&>.?\+`O(9RT1&+RVICMB6f;4\lm"bULG=qS5tY\_jf7q>d#%r@o,VC\rjaYOENDd4I&q%0V(uAmdK`#;X9p7`iPc*_Fe\ClW$be()jHmMa#]NJjT72eUc2sW]T)mAPD<,URo -%:inC(28^T:(:eDe`1B0mTA,bmMk!>=gRGT0%9Gf)OA?2];/,QjVVJ,V]/Gn(nQY6^^IC)>-3/,R_MLGCT=>UT"oXd+&I5.[qI&P0+giW_VIcpG5l)1^$,FOm-Y_=]q4[S$]DImUDNhFb[U,bElpcR:hBYP -%:YaauKO\'RT0K$cG9b+I5>H=YW$grX0fIVNMZ!%'HR,tj$/1/+FdOZ9lb_!5`X8q5Odp8?`ZpDI8dtWQo6RJfj)U_A;Uc)mW440/Di9TemP,co;Ki\r?G)IP!!eV91Rr,A0)H*.c/:;c*W)k@0XbtjUlKi30f&ZNKW``#DXIOWo-CIK3/Lu"&k,3O1/Y@J=Wn$h.Chp"[U1GW8[`(F-[&s![g\0G,b,_r#=GeK]IMUgG"n&`Ae!#Wq -%:Y7uEL.0Op6b<2!./o]P'!b^=oi1+n?9PuIJZQ-[F(Ur)'nU[>&_g]&T!o4(Fje;!o2LHtlLrBom-8k\aq(MZfAn9]!(DpJ>bnrOr.2.tB)^?dZ(0L&@Rr_sa,tN;5_GU)>'dOb!1uqWU4AVAiCc?\qNK&5"@E_@s@ktgBd[6HYN9O%G.EnM?/)'M5YK(J'R42Uj\82TJ[RA@@22!@pEs*Y&!2T;]Vr_+%2rE`2hVJ>!DkZr3#!-<0 -%:"lSQf/_PIIFW'DB2lRWadWAJBg0pPA0'eo&DFs/)EO1\W?9":Aad7P&b$$TS<Pd%g"+30!>'aC46Z/itl(Vp`lDh!?T(<:lUVMFA,pn@7fTUcMseZRYl.*eU-]NbW'[R9Uk'L\]/hFoOR`FW]enICu';?V'!c:T=65;"-p;IO]Gh!P4m1h-VjX56KC=k^GR7Nr`>AL&XF4Y<6"_Dphb^Y8t3(l_aO^WV[YaFh[n`rWg#A"Po]&mMA1`k7$0""a(nHlkKs/4Q3$cg -%:QgRRs+/SD?E7;Lj-tFF__iL?K.'e$^J[8Q!MbMI[o#!Zs;4f*,Pi9A,:PI]!ao%2gH\=pkL]:s;5)VkQp`G+m$%[6`hsm4.4O;+K=Eg6H"'M_FCE%psXbr@CHse!:2eqU'SW`+U/F]6Hsa1R!UXX1&\f,=T*$lVe@U>#@mId?7Dj9D0V\^!sKIAH#LXp1M!6XCBX/kj(!cbAp\sQT)GERn@i6"8Uioo*^,YA -%:?A-5S;hTBlREEeV6(Vk)EuNe9GM(U#c-CddcFHm-3T4FChC%,;OU+VQ_XUXPe4bkq&9"G9(U4F$H)m9V15OT-NCNeQ7g%T\T7D7g9=9GD*O:W(I5c(QIjlGSc7MD9`T+&7nQ+UEWS`/[4M&DDKO+L]cS/;N3J0iV)/E,ag7C)]m$ua?BBGgTg,Y4`S^W_h>!nB=TY58Gau.>*u-$bY]0/5Zeuf+oKUi)^M'Nqr;8i5>UZY0dTLlZXe9IjU7DX9`@&K=n9.lKgYT\WKklD@R=9^&Dc]>X#oQsD_1h0/loRB/Rqe*3SZn6QF@`6ecI`+i&`"iG_l`Ro[5]tXVAa+=\=63XAZPh#dFY.>7<&mP>iZV.NjPO]OKfc<[='LR-5dao2K3d`G')24:Yj*\/@)p1hJu[@u;T.lgqtVUVr3h47fPuD!]J& -%:#!-=1A'7BUQ]r0H#2J:mpW=MT]s(i=_MUkMi:8[Jdu9+Fu*_BC!:sB`l,7-7j%:c+89\2:*4;g_f@T4ITY@q1"NcaYRoB?oibAuWt(4^Z+aCpF0#RKormOq@aW.rl/-TfZC=5C!Z&bdJQUG:")B#;A88KZ\'8H-HA:`C:XJ0h@U_TT;8:qigt/7-XlRKLg>!DIEG-`\iGX'_>uS.$;M%:u("2-/Dh!P]VKSDD!'p^s**[A05gHH8A[k'1P9C9J)J-r(q?_$QHJaAdR=LLoO\D2L@K6WMm3a%st"jLq7.=ZWOsk7+L6tg%2VfU<_c;m!6]OU/"O6p2UUj6<]2m`3amo[0H<,N -%:rV0pse;bTu8)J+,bFT]!X7(YcT0i96p\P!3V:'dr8*dlY)XH7"e<%H";+(?RW$1WHDRu`S7kYHNN'2FUV-[ul;0K-?F/M]2W?DWqPldN+rIVH<-%n^Z@@*,S7Yi+iq.k."h(ZP#TZJa2d2kHdWj"!3Qj4RkE[7pR=(;e`P?m!#ase!hYF6KdQ+Z_h,S^2.=>,I`#iBr8f@qhF65dN)9YcBi%B% -%:j9rQ)4Te`A2NoMnSI`A%]0!d5?'C>tCnQE49gD`JiXRMpOLua,/10Z=0)PZFGNJ?P*Uil5L86U^Mk[=W@c&E=U>\QV[Dooo]-K^Z;-S&R`(oYf8;KEpTRLR4'@djMe_8OdqpqE`[H.(pF&$VUjSS-=kMFO?-St58S9*TNSTj5?b^C"+3Hr&J<s0_p9ql7fYtC5i1I[/fdo6prYF>u4X66A.[5sPba#9NY-j$I,A*`k_mbP;V -%:'HR4ea#4s08>9u.aXh`9(S]*(==gk*dOnU@5C4hf7(_lTqtRa)'sGih;ok$dVJU'W6lq(W;GYaHGFS@T,o`OeoaPY\=mpac[4S)Q)_s5F\DG-/leq'TAS/o/'s^C-tFU'K+S9)c\.)K%MoL-;,)aa_(I46J&5o#*to=iSkOE3)=YU -%:,>pOH`k3$.='[ZHk[^9ekXlm+d?QgnFJ[c;(pf:1N-]*k\+*/4Al]mH1.AX.(%VinkrLsCM?VB&6pjliKg%uj#nTt9q@P8F.kg&D/ahM(flleZAo*F:AiCO&`p)X]-X*CFoQUJGZH\B?,0P*HlgA<'XQW7t%agP(bihY6ZSSogAKH5RWNJpu65/:]t#`!RNl?2ahQF8gX9WCd0*]48S]C_aahs.r*u;#1FhfpZV%Q;(=L%@1=NplO_j7%*!iq2[7(<7q5&+#mSf)T7&l8)JD%I7m[4WNXuo -%:i3Ml8aJF0:SNCtNG-Jr,L]btsMW`+l4EKeAotRHEs3A,'Wup*8:R#'-l_at1X=*NhrPA*_=Rc4)d.lM0-L8DUi9,O<@CEhA@kFtni%Q*Y*YYN=QFN)*^GmFF7mVP$?6OU]2giMXp$7umW3m\C=dk3C93=^BZB6$edUWi/17:K]1;iKi16:CObUO*5WhFK>e16"G?r<&CCYDJ@a)g(5Ng+5+pb?mA<&Abs0^ED;$?Oh$LdaEc:Db4X9j5AU#):6:KJVO/c"0#`-:@(&b:tsrdF0!+gG1YbM6qM9j7,VZ$.XkrV>lP,D?-THO\>S"%5@o^*hs0&7GTe06WgLbWh-V)q9I-7J'=PQiB,q$@7Bqe9`PudlDXo8P+,% -%:ld@nVG;@M)/=n6AH"J*2(!kDMGg6BpbHLO"ji62sA\5R\ptj/+1XdV,H)'u%*Nn'MqVPA%q`0\..3i79gYji]$kp[P:mckNb_>S,eQGYSPA/Dr>%6j*G^)n[[.l]/i^%bf,iouZj'<8en;#orQ7;XJdu+N[a4Q+lH4b:`Du]&`n[sY"&s(ds^phl65nEaoro3&%h0d9^'m8H*B#Yl<$jkDd@=MQ?q"jTn]Q]"S`LCpkH-i)-`UaO]H1s=kdiI;JjNcLTROZ`)IEB+6lmltK(:HV%6t]1S=D(C_)s3P%UfFOI2S=IX>BT)("2)E6CKC&0G\n&\nA!uA4K.$_ib:_=mrA4(>OUWdr;SZ.r.u;NoQfZ,>5A_[WkSeAM1IX3]Ig%U>T_+SL9qoX^.62=r*jBm$_/%WETRA*a="-n\HX.f&aguj;Q -%:BFd"TjW32Mf0hQeM4I56S(Bu-9C)/NXP3d/1>WZ8Ya8/:o=u0mWloX`W)^.GWs64WNs&UnjBZ*VO'%dbHRHn7A*p_9Y"k/Ai->XVm'?5^V,$1+MI,G-'tqi9_i.n+5kV+B -%:cKld6HCTilhNsRgg*c$<[cW:YCG/_]o9M+4N=qtcn1sc=q+Al/armqA[kNAB=RJQ&S6;L$p[l0Pk0#9jf2Y6"^^`_qgR>EqK?9p0R/C+Vtk1PW;k)gDMbg"%aGucF7cZ8*-71iJ[RLG[qKY+?.-:`W"**/u/))8iNs6s9h*,RJBhkbn* -%:@1Cs-^tl/mDB@cr:JR.is,SkISH1Yl&9b#OC=/#oRZ2P9jlsc:r<6Jl0c^Xar-8mS5#L>soc1>*do5$ifo>lfR`]VI9Bset+VT2`BBkf^^HL;HY.a7%#MOkFWCAN#.@h4E67,;HnITe)t]VY-\5COfZj!a&Z]P7QA.VQU"K",E[GR8#9ONp/87[Ktufu^U'1!_tf@\.jiQncqP37.4>l+UZ(JaDcWnsn_X -%:V5!AK:qW[oU$+nUJ(9WK?(rgT2fQ*obq.91;?2'H:2,S$T]Nnj.Ju-[`4KucE0tKH*bFLq0G-;*./TJgdB;\1G5;Cf;27&@f^\*4U4#?Gp=K%IU/ON![_I))M0br5'MOi!^O'MN!Tlc&U\jRDSBjeSY,3i:XO]ak\ig#p$A@ -%:GF<17/7\24;p5dZs*\G;1EH*uHX9)THsCe'D7>]HZf8$2AAqXAn1`n'eTG8YS<9mNmP_[7^4iZL4dW#DS6odQ!B3_i,&8I-A1Pta+V?7sSH0m=%\=!ia/K9D%aN,W%fK6#29X&&chUCBWK"&"SA']_$']!CR]^85UF=^%?7rH2.AW*>e:*cY4]hclU&G^PfF[IJ[ZeZ9uDM:Re'o/?N0B!<#l\YS+STZAF[eX42(O3^8&b5_.#rO@-JXR,PEm:a%-QM#RIINF+2&I6aQIa67)K;DAHGr$-Pqn0eqQe;kcrj&?[at(_SETj[EXK-&aTQS<+!o)Z7;m)lX!sGrofG;'.G)E>ZqiR1!SI%?6@`&2b7.1`Ec01G$BsCGkM'7V=7bF"ulH@*k>9THP7QW"30L!D6-UBu10rp6.3k9HY&Z\ZQ7sOl*/8j&Yq9O0%hnDBGefY&t6_\:j -%:^qi;`p&f0qR3BW!=nc1MAFR2q=jW7"1'D6XHMWXH;/juK=W_LN%$&'FHK,h]2&p.o[JV\ahAItW0R+'oIh)G;2!]4d$sb@tV$>j]K`*GAKM'`:]>R&+^_Q.@T*<:%Qb`mo&/%[pYMZ;2TR<,mM[F4QC]#]Zrd"E6Bc+tNpC>@d;44TP-[p-BOW:bEe:4q\W#,(cVA@[rE%hoClIJ8/HgiC[9gm1uX*E@FigFKnotf\X@t^EVY1d\n -%:`VbRIeOM0;r.B2EU$oFY=-?oCoL?4V;j-#@2To*`T8e(_U@MERg5FB:K1to/;b.@`>\W\[mVP@k_cQ[52W'>-'-d7g\0=nq'=Ig82ab7H[r>sdjc_lCY&FC!HP@=Rr)D`I#?%R;!:^R$"*!V!!3lopm24V/ -%:/8N1ZS_Ph)rRZj\e^uL3?"h/H4P."@^=_p:r`Obf`n!Re -%:@)Kf*dO!`m2a3g?khK?"!'M-?bjOm(o2?^6^mM2OqX^?>T#p7^o]Nt:5*Mi.pZDctcUbu??4ojH82O0oTo]]G?,<:`bHO$*_i"*+*kKRDcBE1ZHA?7seMY&V[;r#X@0$mm3I!_^\)t!FWj>I_q2E;a3n>u=*6i9FE$^#KuE,7!gNub+E4^[aNI?[M9Dml:1Xu8h(*PSn+Qj]?\du&9JL4 -%:EEs5c9Ap(L+n<2oC'jq=f/d@cQCX(rD(*u+gWbe\9V>Ri;!TO@pt?i(=-QNP[6fdGi@!rO'I3L9iI>a3+s_YHIVNS6WYLK$cPi7h1Und.c]]M_)bcOU\u^$ZEjBgiYnB4*@O4VW1KG]#XmBB0S[s-rnRm.4``BCETjAlfgP(UIH`GntSf)5ucbWiW$,9_qR/[( -%:;?NjTeM(tM>!\U['r>Vl.muG(#Uc>PO@63d1uWei2jM(,]7r80/X)Xm]t'SpW$uKK1Xm$r*P556"(nZI&/iP54J80g&>JNGF-Z<$eo7cRfl4%&N#l,A)5W*+QdPMuiLjhtd$6JE`tlBG<1<[TRgBQ!ekH7bJ(JhWm9+samQQ\M/("icM0+tWZ=sY)SM2etK]3k+n3LGS@>]nI0dT,At$*ML=(bSsbd -%:BWs'."!OraFq%?DG:5>a0[KK86P2rN]FWP=iRr8o\Z]5nLR^bBj[unqqgd[Uq)U;V9)ibZsd3C0gURR#VkV9lhE+n)O3mI6TD/Y/bDS6SMDQ>3G9RP!Eobu&-Fn,O;,VPju#Q1FTZoapgY#LRQ!&;cWrDfgC-KV"uat*%+(9<-aLI@Lp2_iVng03 -%:XWF1PCcnU?bB8)Zk[^9eTTU@!5pb>Lbb1,YhW#L!g"4Sq?1d;p\qr:!YsTF?d^#E)Kg8`J?(K=q#\li2B(L:.D1Sd+lcI?5r?sHr[Aos#H(,[2VOV7-H.7G%N\fUc_Wni^ei$K[<@2)8TAtL9lA5DOcAi"4We&oT,Wj=s>f=Z_+31!6R:e%#V+4Pd9/dA;JE<-dnVln&!/6`dF,;k)\594+OVekL9:Mgj<_*,39-$,?Nrdlrh;L0sL=Fp8gf6C2blXC=%At&@Oe0_`b*-$ebCJ/!oDo[?GmEJn96f"O$EkK4Qsd`j:UP(X5/amj!U=B=D@O1'5+RMr:!=_F&om's,1GFVs=F\_f%m)(ITgkfd^SZ?60ohk$;C,_,.O#:J:cPb5qX7g2P>gDHadu'pbkn$A6du:'tPlo?MeAjJtcG`6%k@,[-(I,_,iqBhf3-(ZYo)3m7/C/Id&Gr)cjm71Yr-#"if4GoMrN:ab2s>F!k]VX1B`r2?#2\/,(-ee.J`ZVbB^dABVl]jg4&KYClU,[O2Kl@^^d6bC4I3\Y4'4A=i>q-n-E`sp4_c\q -%:nHsM2RRGo1%HDa1/=L2l?SPscQKNP!k#Ke2"IGLXcI*M-B6^rJmW]k9MV>DEr\dk`L.Vt;eJF(1#"`ieLftYJ0#VV6^_Rtd`/3XO&aWD:H2)0>>-;XmE#FNEXpJ(Z_Go!5n6uiELXP)5Pc.7P#aSYnY3;0!K)GuAn0ET+]jI+D^'.-b7tZK)kKIui3@n%cc';\]>opL5OPP4\6`+>entnH^.1MNUL!ls!9m?ZP&P*B!7KYS+:%!^kn2iF#U*r`GNt)!q$2>Xg`2>;Oln/]1*?S@*@GXa;*%Mf(B3$Q]l"S-]`No5j?m)*!?QguQbat7<%0MdIK+dSAZ=H/E1c2NPM2S38A-*a>>2HN)GcL&WSAM@LQCK2P*-#QL"*HgrVZ_iE&/__QS9SiE)L1n=5P#mGP3]CoI)A)-X?j$SC%)i^[$#%*ucRA&4f_%"2rrc,:/\+c1s3c_1o(U'T^S9d,@J,:hDC0fN76B&[2#jPYPTF^N]_lU>*a -%:qFEANo.3=E:%Kq'G]pp0N667mYm7GeR0QtZbF4o?T&o@/E?:\de7Mqn#9tZ_ICJsgMu6FCV!*oL,ek'8/@m`hcL6%sJN2%neg>jsX+CVAS+u*Z'h!\(2Xt9=.ZgU!Y44Xn%Og9"L9Pos64t"kbkFm.fM)4a9[gD^h`^#WMlFSj7*([E -%:O/IC*j.VlT&s]*Y4.fUdn$o[-@ZU,.9RAfu-U,*6R"pCG&]J6%oC0537,cj\H,tk(W^6?=%p31+'L%u.#F)/35(2o6&-#]/EeNk"]O;jo(^>1Ql)59Ioo><$@/P/^EB:)8OYDrM!4(jH(s)1LLQ"VUXtQ@+293oO#B$pP;&;3Y6ENdlOM4eS*2K6s;b1-m8<']pTP -%:`7>[O3UF3fjgja5WJZo,\$BS[+-/X;JaY]!\L;Uj]YejXImmWZ^HfNeeSu&M-*r>ian2p\XD'&GH.Gl([W3KH2pp%l1n7"4D2D1/Vlo?[-)//HM?beR7M$TLBqdVnbmq(q -%:r[b(-js]e55DZTS"Rlfo\EZ=Uf?(W(gsUU6]C+K;lRUf#G0iCs(<#-POo4Q]+#+%EIhjPA_0ENhR1:]16"o$'r+)'p&KD88&h?EqIGtn.oSuS"<(Ah@'c=&*&!dO -%:o*eGBd)Nm)nrO0b?Zlj84`AAaRof.o^O8JD*kRJLuE^0@ciVA4U"Is>$g`*P%5^OL8WL[O[@ke^U,P?+SVO.0@bDsdAfU[5=01B.hDYQ<1ml)0=11L9&"WOAOe%L.K+X\&P7i7ks`.V"?*nZAPg1=MYc/S1NP/A`6o,MR%++,b_n,jUnXekDT966TX8Z&XISYR\N5(@Ir5AK.^3;P)(W=#rFr3]^EpTcJ.n -%:dD]uDbd4@UNqNt66%bHp?',Ac+e*(PZ"na5_G<^%B0nbqX^X4lIHXa[a+jT!k0=Qd>BBtAKkg!MdA/F/f`bQ\F:MKc]/2*&SP2ZeMj@ZZ[.ID+FE!mA%9@Ug3-]/d6lg95V^s;KlAR4=;juSI/],i\pa/?A[@U.OS!-3-XlN'$90k-/Aa9tW>[$n#S?.&fBWGcHcrTCF#&T([YjWfa5RMu1gBG;Kns9'[:g9O(/4$q%VqQ`0mlO^G -%:?9n/?Mk,6*i]#js=9)YUh+51P)94\(Tcp&&.rp,_/mk,8,,cYrfeC?A&Vq-a.%BYB.*lI[\7&.`]bSlD1Fo&tS#7.M'n`L!5J*%tQddk+)*P9MTS]M=E26'))5<*%d3Os\MM[up<&`0RD47Dh'Z;ri5p!eTjrkM&WOjR0;JQ_P@1KraT.Z"2%_Nk3A(3!*S$`N!>,@Dr;(J,YN'rut>/t;(>DEqTeh\h"7!q"U -%:/Ft].a*)I,Nni!pliZ&k)k-+hW1+%s8JGVVbGNBI8#Pk;$m.KCf/OJTS4!$\WOU.FbjeHZ]bSlDdik<`V]!ggX+TiFWf6>JkjS;Dj#c@aU`dB#D^oUmnRSR21X)P]Z?M#d2%%t$OF\1:`n,aG;#C`1m>M-&1d6f#IAVb/0O=?>8[ohc&T0F%.pHqK6C-pmL?Bh[5"o.R?9PV]]eWA>e8$uJ`i-A&&r+iJnB%0B=!<*Q%pg!^fmoZ* -%:l='gOb1\\dgkO^6,%;P/PDR^IB=P5]Atdn"5K0IA5Lmle[fVS9Ad'/cSn>c84?M6:1$,BdoDHDU<#dLe^HBP[S_^1,EdZ>Wuc^>`Kn=gR@AVG$6([ZbiPL%Fr\$KoMnc#B7;ZKo49lol!k`Og6t*^@/io\R;=nYr7C*kIItf(H>Rlb3,DY]R\?t[j3a)2X-q_ge:mB2Q$q8jm62*3&MuO?5@5.g:]HRhB9t\?Ln7)!"m42K&M^StC(k/)rJH83Ob<.0n"^3aA%^?9\WaW8j`DD*\lmp>\"[m'i7dV1SX[&39/7;2I;pK3ieNAmK%rk3FF!!bR7S8FK],1X/#aqS.M6NV)ma[D+$OYI%R]%6ras0RP&[gT9,($7j+.m>9DSb`IM$(VN6n$bpOFJ4(XP.1`k/6)RMq[8co+?DaWOLC)c!#cKXjX/=K!AB%AIN1Frrm&XZ4E&P^H53T_eTujs7^NID]UV-(uS`Z,c?TRF\ -%:;l@C(CP,\uDa0pUl+Slo?QXAHI:V?(5miIR7Q-5b!/Z]h0&ceHs-/M'&*EjYX(BlY6IR3F->Z^L@1L;[B_6;pPNGr;bZL=QfJPa#DP#Gp@j)>@jb8:dJ0T)@h$rJY"J1F7'8),?Ch_?l$obG:rd'US -%:R[PYs9[S+#8&'p(*N1,TP*mYPfcs9o--F0!Ors;!I\Tu^X/J_:;7\]$2+]O-jWj8L[ojGncJ-@@'"s3&k3Y\+'A`S0n9-$1kKLB5FH^B]=e9OnRHIcicZe_<1XE[jk>2DTe]]8A!H2Z#UjJ(5]PV`ml/$G=Du8rFFh[u9`6gpG'3#*_N3KDo2.tD:I:TmkmaI`.qgU0Q5B,!J6`'Z'fl^Y?l7Ll(f:UL+\/0'D]pS^!CI##+0jO%5 -%:"pEc:<`S8+^A1kh`&^OTGPB(mr`>5-Z!EU&M[V5=(hm(.E4I'%KTe3Wgc[R`V2Qj2sC:b6$l%/iF(eNm51A.dCucn>h`6s7%h3A3VsYcRZi1p=-!HtJg8IW"$m;)Y3SCKh5\qNWae`mkPu%Jo5cRb(io,2F8> -%:;>P.`_s8m8-``R@iq98IA`NS<9"V6UbA]5_mnB=dZn.f^E[dT83UiOL["sC>g>"'W[91N-nffHq((3e-i?./]J\R!/43\g"kU?*$Vg5Eu4,P3GVce>/HM7slNZ"@m^bUV\^*OIkK0>Q.@S]Ia_CL5,Yk/<0R;&*WoJ/6-G9V@u-3e/kWE.CA0_XSB+%6`MX?==>DpXacm,9Z6[Wi?f+H\ -%:MchBgf>.U\.2)u20S-md1F%W+k;),&*4fo9kE#2TYYX$E4?EH9>Pd(c)?jEZR:0Q1>p7au.6=\+KC6n9NQ\W6Fk^K)8Q=lh4!h2mPpbq8B>^^b#+?DAY!0ohMh\u9K0U(Bp79?th+O)?;l6jU(XhCFI4BSb%p&CQ=8-`ZBqC$BH2bV==k\.5?MP>^_]=!!Br%+X-\[I?a2PphYB`=X).ITR!Bf71bYA_5A6LC.F_.24g\Mc1X\/&' -%:q"td[pQ#OFh%;3OACLL40!0Ir-gTX,d_2!"m_+nR7qC6M*1Or40JkM*5!gg;^Wj\G$9*#fCDoUO+e&E..d,I0RQeD%k;g#X]KU@Mh%t7?mL*1/04NPHS(G\QpEL]#YD0Or[gI,a-fJN_;@n&i3UR>n52gW;8i.t'[V>)kY)1OT-4V^D;QX:%+a3PES"fAs7P(Zf;pi(E-bEPE?Icp&F]m23TFrT3%Tf$MZ'$`a==GURk$p,Hg4?LaMQtR^)-[Fd?D1";lp'(,9KB?r33&Dc40@4r2d!hpaRraS_g=sLV>[]sHN8(,(M&:5=rIS%ul*U+G&;HN?^fMPR<[G"@a@h7b9'S081Z_t@WAYr&Kp[)J!e)O@gp2A<@D:u[dH=k4)mO[VJ@F76B4'Q(QV1EIS -%:Y\:(]BJE6$qRu.O]jDTK0)b^,nf(SasZ/3+BV2n_l;YDL/Z@=L/ZVX*+->:0X'caE5jjSNcNFcCnMaT5#)@s:oGo#T?te07DbrN6MPI='^[L_2:1#6/WVm`0V.$^"N1X-SqeX(a:hgOZUjMQq(>(s<$;j3\9/p"1f_hMl#@N.,l# -%:ds,Jn7"]hm=/&@s.JP9;_Fg"?pnpT;Rp/^DI/'-nW7jTCqbC`6b$E4W93mm]V7r.-WFsWLKq/u<07QF6=9i$ZK7)abU$PA369-bLLcp4;:ejbk_Z"7-)ZEG`D=s(JlSVkcKtV$s!10Q-h*?g?K?P9Z']8.`iqJm.@Vjr4;=*H?ZLWe'-1#s#0tG'X@Q/,+&P.frFm,#O/3HY:d9C'7U&/`Sr=.u))g$SYe9tun4q5*l$Jf'Am^kg[fD^Qn>I_'.><,j\/M5ef[d.7G[8FN-i1PFc@ERle$aZn[@V*N7na,h#mEuM/-d@0"Z+D\u"hU:`k_62YYU]ts?L=A4WK6T^ -%:lr#3)2=OB)N)4]sE.Y/fr%5Od5<1MoUAC!6=hHk6a"OI;@uJOX>>/SXZqr[HcC_E)M,4sHpeP$)3+L[7<3$Gn_^9.`IIZf]KX4==\AG,/2a8rYOkOVrlWnP%aFWhu^m4^lG"iRh+NaI<=ko;g0VMhtL5ma`t:?K*F`H*t"cciH%i]5GF&LH4V0,#4>3UFhA^=f0h`R:n$abYo_2>rHsk%5?!pI1<_*DT/C5qK\)o+V\XU%;&ZMeXC3<0C?QSRP)7%#3;u_]L'Y?PIhQ.UZ -%:.bg6<8$3rgJF0q85WisAn4"Ff-9#<6ZkG[6h1.4lB?nCc?Gg#OpVWQ'qf#4&,91ei;X$Bb62-=mr,Cm!3s18[O"e"j>6?USp1q,8d6S]A8&3EZg,+L45pgIVKVI9k(hd')=sFZp?lP_$'I+M;@[ig5;Q\oh=c3if<>r8doTmlWc.Ej\1DXCRp5K/a@hiL;Z86[b"2T/`=$rg\f>K/?Gn;c'XU'I.#0RJ!.8X'MsA!%7[74H5'4"utiSCf18Ood"s%0*cD<$.M:s0f=jno%_@NPWZWc1#YnGei&Bs-B2)-\q-K1L4,WY[OHp5/u%LA-^pd;7`B_?2&;GC]bBa%D#o%Z"4kr^Wmg'[R9ei5t_Q,^BS1@$?X&FIuGsX?!@!OSZM^&QL8BFk^KDW4ZlM0.b:jF -%:L=0'C9oU_Jd/@^<&qf5>fIFO@D_U%S[q^Zo1#O0K@k/]H9[la@6$;!PBTra[DgkarDXeZM;;ekg8SlJ6J#ab`%b/a,K^l!8LtXk8bA>=B=\gp,ac+KL(lNHCCn>)EQ>L8.H)fC.Iq:-+m$.m,SRUc,b_nn,ItkIG.N#aSV":2f(&*=.X$I&&68\qZSUSqaF92rBa0OM]HoS7-T/(G24g`r$VC8ji;D@HSMrGM;=aL -%::RXr8Q57qGi%>i?gWSa<8TW#FX)&rN1mcG_SLsUY:RXp^>5-42XSZRpmc,=0^I%0+54LeJ(Fs>@>69SCq!h7j=<8-4!sc-N,AWB&JcfNSD3u>pNeN;g[L/eJ_Z)>_?oZ3IJ-FJ#@N59lZcjk#-bZ?_Ltb9e;@@WR.QbGM,VYrOD?@-'![hFM8-SjpeOAbk#\1/^$IlNLr#O4CA?0!5$D:=fA)9D9AFFMC];Y()<91CHBZ5((Z"s5A$^?!?u,S?2V4QL;4Ck^K#LrN,@sO+Zku62,GoqcN'2/p+8u-b7E'd![`m59%2+%,K6amO.rDh/@LOh=#HkmWVdEs3!1XuJ##g6R_#h+T@;Z\4dq;*_kM[8>1dX-K4K@.%q-XC%Pk:l:@\ENj)+JI[%a>:LTFuA9p3M+]1/Rs$V,b4)t,Mags]Il2DJ(h>aKs%uYmDpL?Z%1gRO/ -%:AC8R>b&IS<0tjZXr8plWdjI$th,!80NfDA+6]V1d#+IUJTH'#e'>DFnQVI3E>[$m:3Ec)H/`$HpT_i4kp[b]VIO58;*J=(p$m:ZL]OtXAN\i+Y;_`NX`S`lgKD,KWhU=0'O8g;SpE)#iq`gXQq\,:`s)QKb8Yu=[fl]L[Nas,!kR"i?`k_=Be.e)%:UK)'d`@mHmNfPmj%QuD^?P\@btgSS_>\drF@MbTI(CRes'T9PO,5CMm$ -%:_"TPPS4D&R#8V4Kl!#_Ub2ICDs'SXtkB3'Ol?\o69dQ!YmrQFY:\P'>^1l\D1/`7(3Ta<@VW]<)bZgdRR?2"jdEKEm<2)tAq5JQ]"O*W,="oJGL8lL?r.t6>?pbEu'Y/56$Wkn\U3eIVA=;Z^GOeu;FO`^gO_TN^lRu6#- -%:)+rBd=kA$Yr-/ZpqT)(#W>9($5@J/8@_.:i2Oh9NGqSDLmQ9+!mTDI@O56\g][E'>/U"?I2f]*3J+D^a1]ELGl?pLqrAd"s9qm0:8:I_0[iPF"(\'^"d6Rd/9ftWImm;99B&YHkLb\_%U%))VPQ'MfI[R'p)Ji=;!'_<#j>U1(q;EV9V2Tu"ai,4r>nUhbCPBcPT,Kg4T3.]%WA"@L7B!DuuR -%:*=p7O>h1t8Fg?-PZE3)kh)[[2Sg`o,iaC4M(+egSoJ^@;RGcVJXM6Odud6J.L=7cEW9!uA'&?PY:?Fu;38 -%:qQoiW?s=d/kimEm'5K/X2[Q5R3p>@R,<-\=:72Cbh\0FNI7iHm'`GaeF.18ZtVPXGOfOS+_3V53R?;;9`#]1[`b-5$R_G;F3Cptg.f2Pf.1Fd0Kf5?8cbMpX::I$:G\u'M,SPNTLDV2BT&S+Be\qV34NCn8Mk9[;nc6R,:UY,V3fOn,8apN4SqW\\e>X -%:YHIIt`YNgEf<0TRa1luH'+;RO=sGDtj,;[CP)(j;j#tOtVF`Tjb2?QThI=OI)68#&O6OTDS:K@-K0.R?'/;MBpbl8- -%:s8Tk71l4O.KF*?G]S40f.SZZ:GIR(%_hQ=MFgpimD2-1C_-;052FH_4I_Q?TATQssNLs#/Ptr-\IQ!1PL%V+)T;M-6BTTGL^,f\:)e9Kt)D=N^kWYi\!i-pPH>+*!6MbH?H(!KRA9H$]$r"G,7:"=&!Q)4WWd2gT-*7a*AMFX+!Eg:Iq!/HUgigGHPU`A$gVO?sRk5a2ZhiT>(m2kD-q`#E!qnk?\f1\(,EKePIUEqX=`F\k2da]HDNaMQtun:jm,B*P1]L^?Wp9LuhT[JOE"iXMg8f+`M9bIep'#inEWLdD"P^3Y8aT56ENO7HQ,VVI_Y;f7mqIGeL36J9k/#Fc@EfL%@C:;\T,^C.U` -%:9:5KF\^uZ7>?C=0&ZM14'&AC.`7qYJ@`SB6=*S,6!]eIVL^'%V -%:5JE3ERbNTm2R`aR\Tp0%S#8$NGR&;2-X'Q%L=2_@;)^4$;b4JqMUK#\Dlq"DoDi2)JW:BBX2mNeXf,8E8ps+8J=l*RH@Z'Pef#GC&1(_u6+@t)JCNM3X)#8)(o]hVM,t/*7M6T=ej^YlZHs.+Z4sn)lj^h$W.kRZU1#0MCF'ng7P-q;$O`[p>Us7Q>@)&hBsBGINIUZV8'5gFrqZI`]j#nT6eXb\)5-Q3?V>*6o3g%..LA0_X;5JmSXPpTAXit:YRTRJ^2B$X=9.^CaTl8t#DA%\\D`u6<'\r!31'U!,DZ7r13dFZ<\Bs<_9L@[.*>hqPJ\0lUa82cL7+Qlc>XV`jbWnX1uQjdu>3] -%:h=L^@+6GNoh7%+bV+hWtOS(@l+>Z`dH]=o,=,:gdM0Ec?f^m`-j9;\mNF;eQ*A25V7^.YlLPng[,M9[:_l;5OaE]>=eHBl,mP&gr=]B"%7(4BWYViQ"mL!HsN-(.lHp`(5MSVb;=kLc/$or.?b)I0%QiXiPL#VQB2<8,,.TsLcV.hgcm#Y:\Z&?WAa$OD6\E*]1NS^J(cbg6LO=Y(m3@ZadClHt[kHh4n[r2(RJ>O/r3rC&sEFS,AK*MPMGijp/)Um!l.$*-GgfK4bUG:D&c&f`rc)9C^^fIL5@4`h?a6ha-8mX$2E"dgK]M'@W!8^5nGph(n"T&*!@fhb)S?A+`l'Kqj#Xg/Y8&7n?r -%:a:knr?A9=;.7c8"#>G#OfjM:'jk.a,?]"2tLU-)IkKnPZd,XW;k4m(qT$,FGb;l!RZ51dJm5u3WY+U#7FPtg[ABG!NkUd3(qk/;Q<"m*84:'>WRjJZ+D8:$s3T!FZ;7U@`6bJNdkO3'8YqU:H9U!Og?`lebpf$K;m-OLR,heb#_iEi*,e#&SBBR%^Q^K2J!JGW,'9r2#qT4Zmf][[hN'dCMd:a\XCMoN$Y`QuWQ[DoJC=3enW"3.Tp^!DcG;b&_^V;p#ug^2G!RRH%#1eg?!UD+C9R7O(NBR@0^;`G-q:6])U8C^=%XeUUt$2:3'_Gd>qa0](;;J8Srh2,A&<,tL>0DlUBbLJ=;?`?HNeReVMd$9dD -%:'dra@b#VlKC@Ic+30f`^Uh^_#lVNYIMD\5B%jp6I7D$[0UEt9T6B1!I$9%9-fu`&iF5@ -%:jeS9)q:&q+6B3O0s8qj2J'`H\lP>]_mP5r&.VM[*!V73q6jk@qE,@2!o(#K=.b;97r?qLe0cMVM`Y.#d[a!t(hff2=tNOhZ6b]\McL:BZ_^<,A>VrJ_Q>Fp>5h9?bS2Y@3CSc1>EoP)b?m-N@>T,GCT_H0Fe*?*T3IU`cbU7[.n`QVYXD[!Pnh+H%<*%5XCSXJE!'=hA`$aa-/8*_b9g8\-%j*s&5>eq -%:Xu_JUKq\,Ee05lLZd&j@?iU3H9jXeQC%s,Zuo/Lhg$Jdr_]I,G$?H*>)a<>(p(DAMKS;(ei-,1o@$KRA:t&RtGEh>Wr@Y-]Ee9E3c1b@A7:1AYhuJJ(S0UZD4SmLB\WQ3r&:HhIV5*V(fT9'(lE,Bf6^(Q=!9>Oj5,D_8.!Nptp3)Lk11nnk4BIMa;St&L'tIK*,!:4;o2M1U1k[64sH!K,PdTJ=#g$7sNR]Bj*D.p^10,CB@5$C][Yq5jteiJ^W9]*4XS9"Pg!FI[Q>7:E*)@,HR`5_/ak>bDZ.fNBa0ZDhG3BZY9bB=Ejt:&:J8+r$P4&DiglZ -%:%8W>soi%:tr5to,6Wu+qGlE0k'=O(+1l7[VO6$U0$YCQJmLQ>J#5JudTBb9;2F0^0L6e7)CB`W7,g&O@ck2*QT_)+;4IU@+94F,LiLt-6?sQoaG2+)%TCO!e=fJoIK\JPg6^5i7=s2"2%B#JT%EF?Pka`I]Y_]b+ol-ISiI"&lH*[P-)k,C\&s$LMBFFNDNabupSTYrc3".H*GQdu6d"%E*_WhlnN`q,51_[?p-kZIAUELi2(nbL- -%:/I]+^)A`7_<91moIh^#$B(=dm7E"JQ148THe(!;*S&P]tRTQ\]R#'He;m#.bCEC'2]82N/iZX,4[i?/D`*E%oO7h['ra$l0EV%6anW19On66)S\-NP&^n!'sC-LVC&dh4+msE!"/Jof]q*3ke8duGDniu+S((?sRp&6Imf?aDZ(m8MHs0CWudG(P,TVtmE?#<]#hM-kM+f]23@J@m1p_VShm"%7!O6L*a'N%4;%Q;T*i=-!_];SrJ -%:UU:p+%rI9>;MK\O;oN(93uir9S!s-/Ypd37>*L'0dIKdSDR:i]ntBn)Vc,7?7#cMB#dGgPd,_hP'NUKXo4(E?k80O>Cpg7i.cdF_<]D]&0NOm`gAXn;2B^i*1^f,[Xk2 -%:FG3\03aU:KFhEd*:0DPA1XK^BQug-4.(pLp#t[Op2Fo\bVT.3uQCA]5W2$?)@G]S35+7MLm%*?n4c7VYA:i"luGoXC@"/s'.p7!Atp^DAG-]mu8"&9g[td8X'nrp5RJ6dn`qLH^>I?)sh3T/DYY -%:)iP?Y9/.$>W0F/pq3?m#V-]LQeIAo,.K+3;S=!1uq$/Qo.n#r/.V$Blf#s]Ub,n-1K:s\fCIrs42n\qn;aH;l-V"(7>cl>3-^6%[SYc^ah@91TIn#VnIdbB`6\\XtpWU8kE[.hkBA=c^#A"mfJS7]u$K(LlW")pOVNA(_0sd>Q@8`ZE$gO=1d7#F[#7hutU=43I^Y`Kk;-*BV\lD2K;Q![3J30_;`r%EiT;[--0Lc1l -%:(!Sl);C0`/8qo@lJFBH7g5"91(F(HJa3ua\'%I)ZBWr-"K#]%9LB\("0U/NAq55L6,(oth,TbpjQE[2U5pecL'[g'3!)X,n-6D)K/MN0hdRnU?SN$RfXa"5^3ip&LH!lOEe["B?nP?,,hBFjX.1GG\Q3_9Fa&OJn".X1adhi@#BG#+Eu"`F4"SFr=r,UWU%$BP]o,-p^.U!P=;`'QB'E/,O;i?]S[(9@'urn4K9.)M$*3bNMB_'n]^L(ii__m/43H=t3+l,UuT69L3`!A@87:)^EPuaW<.dTTFS,2sG$i%Y2Chc.8Q:Q4u%el/>mUUCF6J-TsKs3/gD2,:NlsO^b6&W5hE0\,\peT[jL0#6V4Hl0[dJ^Yin1M,.fhmT^?UGM$6-i2nif^U8 -%:-N;C,P4(r^T.f+a#Y@GZDk_8&(YVPk\$+X'(EZC\GNR]rkGf]]k:SW:G2bK)[I%>\bbZQNHK*5o1l:Y7\]iVW3+BpXL.&;3PHU/5n$gj#i[kU-g7-F@P3DJr,'JDNX60M'ael>^\GSbtW*9N@_&`N7X@:4AKKCEkTIV;8C&GNcckJ*dLskg*XY]+3Jrkj$-3gISO5\DbRO4&kRJ;].V?WCFcS1i#@^q7^9Pl=91c>Kg=<(l2oTJ/, -%:652kW^=NEhO:Al@VG78J@8+/Y,[+m!TcqohODZ'W_>sYj=s-\F?#80`?"+t_kg7\2f*>Hs5ADS3(p9-W48_Zsn":1bGU" -%:1)8m,J1BM1&)tq$)@hnn-6CSL;QZS6`N\YF+ijeh_it'&"1jN,Jm*q+qAQXFYNmO,LTa4MXVkd)mtYMtPc4NHF@U\H6jG+5A9!+LYiDE,#M>!RZR#D889#EIXcn*D`j&Iq%_&1Zl>@&Jqg_/#iUhVRVp$a229?rd8_)61Y@XIgG@;(g7j#;IfJjM4)PMmcd$b6,Y*V,%un2=LR@;d%Uk'IpL5Xl\rH7:c8ujVZeA\sZ[.oRPIrNS\c1^0SD9IabY.%h'F,7\%;T#e[8jekEp.R=?H(\f`NtqkL;>gi'Q^iZjWP(% -%:Ah,Si3.\L[hDU('5D2nm2(1JX#JnC'30UM80.0X1h(O#2[t*+-r7HF9%Z*iru6J:m!c`GN`& -%:Au"7_/c610)NJ!S,6I6;!3"IVA.=5S#t@:8!tBtF3sNKtL96M6=i3c5RgOpF5r;.$b(eNe2(/hGlCa!qf]Z&p7=8+^5SQiBJ.!U'%,1h]Xn%5hZUcZF<_3.X7Gc`HbMd;,;'-c#;&NV3mh2V6Eg39>Z=m?q]?I$a@fnrB\l$_;qK,t -%:NuPteAZ!RTOm'Rem,qrSD?b'11Y?H[I\)*r--Ch+JV,3NVddi#%":H3()A&(?r"5b5Ci47VKT7GU@_3:#lbDE'CO4IXb<0&q=Z0D`JTieGY/&kOar^SPb^Lmi6$*Sq,[:*"C,FUY.4UL%bn4IN&uur#*;90&Q7S3BFggPIf&s@Kf'M51&LdLI>pY3Nr=>9@aRNLY%SOLThKu-RLmI4%LdWS'Snt!^D(csL)9NTi'PQgm2:Zfj!*XR4.CoWGI9eA6cC%,;R)(m"bb9K[=11b@1`h46-dS(X!VWeT2U=Kr^Mib*@dPc6MnRD`0l2@(B -%:luQ9h/"=Zt`[AiId)MeXAD2'?r=SIkh+6A7QRX69iF&I!d(S(_BLp#glk.uarQ`:b%MV!ui,BWW$.8I44>cmrZ#a^`4s[+gJ\;/L:=' -%:]gs)2;:Amu-kHj4>SYgQKd;lN,VPRU3k;=in%^>a=kN8"XFCQu^t@.sB*lEIe8ajq&B=iX.HF\(s(AK;mX,=C]FO/DUQ(P6\OI`-'L6Fb*58@ng:U7jIrXMB#g`NMc<_d\l;/=[Bu6^J2nMu2ad#`bQ[Br\Qh.YA6d`ap;1$WGnV/3qruF:HL5q*>AH"[k&M^5biS?GH240q_JWPnkN%U3OKQa#OQ@Pu<@;)GZHZ%;3([3,9KBB<

q[11_BqZRFn[:?@0S=^"5#_XB;_Xp4g7i@mgJ^fW`cifR%P3@P<8FpYPRLHf<_+B/0rchuCF2\(8Ur?l$tj>g_h#,^%0bOGj5_hr.RG).1'Uj3CX2M;lmMh$f,(WVX*h"p$?dni_Jio1&WZM;iiGpc_c^V0S..BodCF0@_qAX736k@9ddrp1r0r5cnoO]th^^lo\mDErJ%onH:"E:QT7.t3645n)"eHjPlXl0l%09df!"j."$4qXAGW^o!1E\ro!Vs88q7?RN`8:n,*Q/+_hr)9d4N_Vaoc`Sb3%mZ.n1"ZO>LY;S@t5slZp9/`ArA?rA2)j) -%:J0Vb]0/Q15q>uF(9U84.'s9fC)%4Y3*j?3MYMHujJd%`aL&2>BBC:t-pSl:_W%1ts'$p+T23,k,^fLTE=1`X1naRRfL6W/T'Dr^R#k;_\'i2kK1:B;^bFe(o7G\.h0f[k!Wk8LQ,bN<8&`_RRMmLH4dYbb65b'M]i(p:#[':e9 -%:g^$ZQ+V)Fh-5GQ(+i%WCZP/kWYMh`TVlAYAZ5V"0S)H?;mj5m)@:qPp=D=C/J':EPJ!6IZNo7e_(842Hb%,;_TOq-?(BKfq"`U[W<9VL.lddDjiEK],pcp/@>dXQ35U&o#$.Z#iKFQg*:2Tb;TCaKK)i0:-$`4/^Y`#"_V@OO%,OdPq!dnZYn,#:6":_5,kH>F7p*Y/X;dSWcY1JmcfA(`5gY0'6kR4?1bNT)0j"rI;J"s7`_JuUV">ks(>O/9@Z)Z2qZIF8ueKl@rI9;`pU[&Gi.'p!3.T,n/C;$#SL4pTe4b6)eV6Y^G'U7gW46S4>*BM;^G:W(FT1dp4+Hq-PoIR,ebMZ>+h%c1"b!@'qhLmX-Tj2^Y<0n#j:'0(QH7HY'M"4&Mn@3(-nnoSXf5Y[]U*Cm3^EQl]hNg"VPM,LJ4 -%:8n&gnZYY*0:\fH6NqK?d#<2)q+,2+jno\=aUO5&+59F-ZXF,9:6%77]Bpq^FB^LH1iU+Ou<"QG1Z-XQrWNCS"O;Q2]nmPo7nUN89p+0$ol0]!(gkS0P>qu]^c/cU2GRhIUI^,9NErc:b\bL-q>m(Q,/bI=DpbPo0[nh'Q`Pl2b5+)!`$2,s,+I@S@#_bX"eIE#r/V(@,Tq\-N06R2SXnTpX_WYsjKnlHJX-:_%[K!s_iZm@NE`iapQm9[N-NX*a*b]'1"*(RX/cs5:_ea*3s'$5AuaT4F,dW5/bhXj-np!J0/EaPUABH`_Xf`=q4g2L7b^L+KG@9H@2XngmImQ`6T8^:m4c<_gCuR\@a_9%`t(>Ba7YeN77PNOfd\VH%#K;Yl)i^Ou(WV=`.^2ph>gV`$lH:ValrN'jNWJbfP[ITufc_";M&AFo2i#B2N!-3OT0Q:;lk5mnrb`Z#"g -%:JI8ZMM%EZ=QTaKkY$R<]c[!_Vs7;]7VYOa$_Q%B#.dD/GiS@%5G^B+RA9e"<%$082h$r@l#Ouqq\Mg0hgUiHWo`+fni*%+abr2Jn9="IP8DiMbb%,LOc0=X7dCBd]E$-;Lds"Xs,?NGGK]b0:RH'Oe"ZgqK2Q8T's>/7:4ss2Dkt#XY$PdrX2,*^SVe991,Hs@J^[5LHl#?B -%:M@4e<;&+EH$U6)@[le<](I"XT[ljKQ(Og0@Di?3>oQn7O=ALq:;e^\_Q+QT8T*,#<$lr3qs3N`S4I8JXEHr9`_)G&O;,t*BH@>qYD*tMh,PVS)DIQjN+;khQG\.k5]Lg'k-=XV?32(I<_@6^dBH<@-l,hf[OU\OU!`XqsJ?"QJiT]kC'9aZ@b'S0)ZCrqq7NjlbL<0KC%<5CYX^]3"KIKUY[`sKnUgcZ7ab9BBR?/KLPpV4?6\)X* -%:i]dp0PU?A1YNdTW5a,&&A]RD?BfN63-2sO#h,"j[1-bg*gMgk=^-DE@-h:q+Wj_9n`kQh,-on#:pIf-sBaD,%ImrHJm4kZb>_oR7*6Bj]1&KBW\E]ZB,CF1DRoIncW@qEL"6Y_9VZJ78#D^jYA;gmrqj3WEJ^C40?3Ui-KSAH[*2HLE0]I).'+e0KE,#EO_f,qAc;6i,D)qHW?fc8pg4&98^HVLKZq5Yf0Cui-ENQ3G)tm/%mC]^Y -%:Ou@F)a@A:&Pu_Lr`@pS!(0/b)g[WIt9@EB0X8*KiX(sJj7NIBH(R_W05SMWg1P_tB)4L/T=3m("k4RgP$OcfK`$%Yc'*=T[8i8cJ1[@H(5a9RlR!G-I&&ARlU&_Uq-/20BPo' -%:oDe$@Tk[/(7r+XXh^+l%iN])Gq00=3:,D-"kj$TuC&'9AS1j+mi<$;,,X5;3b1T.X5_f=IclGc1nCU5;1=p9h(E*QF_IRK=_S>_n1Z?@HeM+h(o9*@(Q%" -%:&Ws2kSp>b[n=TlPXJqr^9I2()^2'))9+NCZ$3rn,d=`'>D_0jj*@8FZ);\R$.`AA/.c+4te]n5SW0"3kTL/:a9o&iD1srq?Us:#2%YY,P#5CeS\9_sITdQh,cr2]n"%c/l)TI@tiS+j;m`YF3[V%+'[$6J.D.@A9i#Q.7W-]pshY!jQ\9'-WH1t;3*#-PiLHJ"*=VJgk6do>h=%0.u,pTmFHA=)!29prY_)@XJ0`,m+1WPeJ$tr.R -%:6]VM$&E.(+WL@fHRh#ND7bh$aAj#,dDYjQYAOEnmOaGWmabD*BOF+gpJ0F49$;(LEiKnnZStiWr]gZ;L,r91BqnBe+MZI]Fq?"!1Zi"mQ-8@cg<+uM?("#R9;:XW=+BtBRC;Wf[5I&aKDIJ'Dbk0-__DN*hE*7[UEJT'-3->:-$tBL[:^a9#iO"@Hp)F,,[:4>.:'beU3'j/e%l^IIig+h( -%:fRj`8]g:0V<;jW>&ZR6'WbRo8f7@2IMC'"YW%-g6\!Z.>Ra;fp>%LYJLf^-(bTBG4WcE`q`c-'lr[M)_<9_48W\egMA:TUg`mJkUKMCGd_A3nb+lcu-`&q!b_HsEC-%,jF*"K\h!>oQL1!BbDAs>KsNQX##+SRYp4NGltAidCQ_Uuf5$ju]h)X<=kqntFWIco/d'*t%mGhiGYC?$p.dQT<:On$ -%:T=Z:m]:7KIk#G:/El1SZo6X63EV:brql!Uk7[="GGM)oB3Kk\f7UOD+.Lk@kNGK]e+DD7K#g<>UpI!&q]K;PhD)e&'2KKMj%M'<+H9hJg*Hr_lZ5Mi>8>3AAfIXoF:"E:;GmffL@OSTh+g;^`/;-8R+V5HW.,f7]+fZl?.MUm2$nB3CTE7O3LjFWr^YiL6jN0YFlLA7rGagrVplE6.f>(lOlbSRGL)u:^I@T^srEF/J4\q,,[m"a! -%:CiBS[afeDA)g\p4X2)%a^?<(7^Bb-cD]Z*:(^TJAo#8(/`+N.ULuK(;(M3'n`qF67r!G-B:O3e_$01HC>-pb@TWhK&`X^E!^!=:dS,]>Od]T^\L_^(&5dL\,Rl,'#1]Rh`mtl]ROaPpF_0Yl.t6\iPjLg*khamh\jKf6W32-;R)XD&68,5km/Q2EO:U()-,-K8[?:S -%:<@85CqNHl<).nmL13%uP&2;634K-W"9kITP5f>g)LBMVA"tI!YIn$a6%Gja?T,t>3OXA1"@sR'JTJ$6T1iY&X4@*3a(64B.32.N<`!*UV;)K"d'-JoPG:MPS*?hHZ_UZms298/(hOjofdY='E%?ejaPJQQMWi>8++^Y?b-4(rk\OG/UYDT.P]?L,;'E`O`Rd4NB%6TT'HS'd*MZslJhdhajT*KE_W`1KAY.&C%.V"hBgmA#'i@%-%+@JhE`U.p@sOHD#_T>;Tt*4CmQt[>$'f!gKkMM'/mGJ4ifOuLN&PSX3.l;g98VeC24&EE^F#/E>@4_TcGrn8SHL5VIs*)d9N8a -%:I+m#Cc_/^\B6LWf6jkhi[^d_JJi=RIdipSaV#su^TjkM:PUj#aCRUFN@O9LR7OG<_,;P>5OU:DQ7VO)pG/s(M5\^00?e-06]5N;,n(rkH[l%cb_Eb;ZfX8JO4\\bsai[qN7A"J@hO);oDm5P@@TW8+W9fT"Ps':PEmNk7=l[Ql2W:Hf._h+L8>TblS2j`[c-`Jim/!:7R5J#_:hU@i;.YD-Vk>>?\u$cD)Ujl*9$;-r[,`K9:>!qqSK5B4U7rb04Ro]KpiI,I\SL[3 -%:foSpsN2l&.^@TZ4[?I1b?oKDhI8=$pi?&JWN2l3/\%nS)8*R2+R=AW?>Ik#_HLIfUe(;h9@(h5<#:^G0rILPN(!.\+1R9DJ)9Zl./?^((^Ct*)P;!2H5"qb[9-S3N!5*'c":LG@]Ruls,lSKZ8D[[d1`ppQJ\2k63CVEU,b#0;=k(]M$+FUWYol-,M7r5,sm2RLEunl'1N6rd4-1VV0TMmOX77Gbf#>A9Wq@=E=eW"cVSj=;8";ETqQ.;#EQKH2Y97*FiUZon6G1;=rOJb5al00asQ&BQD3fg#4TiYSuF6quP?B_n;03loY%eHT"a"/k[1eet;SZ+'NhNBTsqRT]Ei.*+l`g/9D+do%NPBdmnqV5t[hjbT3Y8SE\KD7N6oTsVlsac7YqH[/'>B0L!9Q.<+=t3Wgq9+eaMF:+-*A*:2dtDiH5)=jYKn'i0QQUsU"P%s?$3V*)6:oI7N<`H2:G_KKdG+Z-%-B?ut3*9??GlbZtN=2bP,mFDGS.p$)"2F*u8khe*oTMZ;e]tXe,H@VP>!OPVNd\dJou>^CpZM=2(63>9%'`Xc*_Ik$+WC/$2nYrK04Ob05?^ZXW]TfB9"`(B-Pl0ghto<#)OLI9J$n8lC!*";r1/aM0u-U!I(0hf3&P$])%[q3.9L8"A&8$@Hb217YA[#aS@;u/X/*,.@6sn?pYJg?Wm1J?K_a_6 -%:YH9,+FT&-Km];^T5s,ZP*8r-`#g*Z#>#<1W.LV&V5_XFtPE\qu$Win+A"hbk:"W7=CN2D>3'dH%213J+2JM;;]dQ]),e.[IQRs;it;^f(kjn)-(IY7$C6\eQnX8)d?Xb!1-'[S"XA%TO\V#=pWMWLaU6H@V_ddrd^ZIb,Cc?0S39G&-JF0!Nn=H;$3OG`&2/LnoQ[)5b`IVD1G8UhY*DDlp#nY>Zq/o -%:IlQ=BBuHOBHu+WIP#]N3nFYpp75gZ6lZ`>I*7u3H/W(IehgaN]$I$B^CG&;E;)P>ZN`6ol\TikDrPf^RLrOBA;s(,))?\&0N1mf,(jo5\OtF`l0%_$D<_9i6km&be^hgPZb[52c83]g<)t5S`YOAp>CNWq!cM&%lYq>.1DQ?`^WBU/3H2I_\7]C(B3[s;2HQ,c)bqDeV8brl -%:%26d.6AspT?cD:A+NPC-dF6d:Db()Cb`rpE$YuZ^W%*rZRT)0bqh0)i44%GK=:R4)QgOl_j?V@q&I"PU5KZH%Xt=9L\<$ICh(KSE'$NgjO=GaJ?oEMY#<@#-FY%(g#eeQI/$QkX@P>P?WL65FRHGLAME-2hT(F1.DnqIt^Gstu:UY_d^3Ppl, -%:S0C7T8.]6$4QWimR-&5OR:*S%T,/GrVQASR^&(G(<5e19([7GX8??Lb'6p!.5qsM!,5O'8-UjU1Rf'K7Es6_Bk"d4=Mmo\gn`)oU25Oel+K>i="l?*UV(*(tlNU$!C!h4R^ -%:iZej;;>tN\H0X['SGBp&4Z/9t.4m5^%1ic;#WUP16O32n$-olf0I.>k^3Xf+=X;C+D';.$a^C?d*lQ$C3T%5pd@6_CW#"l;jP)<:DUQU!#>6:SCeOF=)='^ZYD8%=OWEO2'4]g7?'+9_V;eh!n\5'E@tL[2:Vc[D<-B&n(_@(r!85I[;Qbm -%:)5Y0?>hCI(OQ9b]2%08oMC,*5i;E&>d]ib(_^keb0p'9/(3Ps6?OmluRFU+7i2au^JS^]@AZ8DIp2%\BZVhIhiAF$:qN*:=qi-W[r:&1\.W3Wj]XfVXM5K=_18MT$HWsabD.g&T$$B"][EllJU3!Ti1PG3]=$PW)TshN\,pfpd/6Y+RDfB-[CEG=?i5cGR1Z7Bs' -%:?f+E39]&b*$9`i*s)WM@nPKfJkTP^o&*OVq4f08ao`FJj(#i(Pm?LKLYpi/$rms1NSsOfqcaQ_3/-8i5#<31iZmpBOU#'Eo..fY(gok:$GUU_$b9Kk@t&^HBXuU#(k-V&CD^G\Litr%&[&[HiW_7XSIA0eIJpn&SK03M4%g*I42ZD-p3rjI-Zl]1o1Y5SoSj-!'JY=?%CDD`TG6Ledgr>H]Ok6:R5),L]4CJ^F3,\A"#8:pd'+2eanjsacuhF%,ToVb^U'9A0sn8DYO+CMlEUoJ_Yn!?F+5f52j^ml7L7S -%:dY`BEq$Y@Q8ZP#hk"g2ohA+6M?]6-OT$aN^&kiLWXaW$`h](!1>*YJE5BJ)?=p9s=m)qY4N*-0_mtXpW3[2H&-:7>^hd\4PAYPM*nYdMD,P+H?JS>\1^HAlY0QT,O`ER);Q_nEo`:*[d6(2!5QTnRW(R(Y/*60/0^oQ;l&&R0*`1q'&-?K1a\YEf6.1R$d\5G=5X,I'ShOhm,e3no?EUi4#qoR?DWr0D"1aS]1;4j&?#.(m^G2^mn -%:E!\Y96I3h#Dd,]`ML&e_76QNcqM&9Qb8B^J/kGo$(F5.^r"p@\!NE;2-5Ku4_q)]"_97i!'B[q.:6jjC*\O*Dnqkc(N+5O%A.VAP>R"nfLSOqU;*U`UXWfgN"Xh)U"A3_LrO6tKuJ(@GiRGP+dD(tE:lWk"jnQ@RajnaOrJeAXf0::;Uja+W,L?(2&a+c^&R!S4rM7fCV$.fi.Ghs"K0,R6t5,`*=Fj&OZHaj_cHYaPhNk-a'qeFPrcGAA^OR0TkZj.6P`sUV:>CGP&*^j=&Qf5Mco+9r*VP0.H$ct@JFUQ(I11",:/HI -%:=9"%Wf[S,jUjh23Z5N>58c=tMZDg,L"df/&N2AtSfp>XBa)+08eNS!o$_5^Ml4dl=j*,%"g;c:[WLGZ9Wkm>8D!L/L;Uaq*fq]j&V+06F(:#%p")Mf9fM");BEnrs(*7I]Kp'h;:Hc/Mj!Mn&_23l4R3o`h(0U8;C;ua13#2tFB[!I>ULK*(c"(%(:._9EVc%fsYq&Ud5a"ou2&TE&l**'/rr71GCq#%&5"Ue?q*G7\L6a"CmG.!qKIH$nMkObGJE9Lp[R0h+`a7MD+R[qGSTikFFSR]:b.I4lbY'JXEF>KY>[dgHB(6=TSQHp&IW%QsRhtkT"FN2V)lM`5a7:!MOFcK:#oZcJqGBe[ZjH>O*#J39mMh'N7(hllfT`mCUKC?R:br3"mHG[j$iFTSu[o$YfS8hM&3]Gj2VDrCW]&"s^VRK_OFj'if"Pr=*3^@i+V3$,6l=12*+GYAInR-Eck.H]d2+p=QcgO$a+ZBJ=0K)nGg<>TF5cbk3Bp._Gi9+8QOFqAukQ6]7902J&cOMr\7H^)aT8i\OPHbj)$B9N:<,oj_Aej?W!)P6JV_d7a(hZ_9ZjChn\*i>urb,f:Zu"qHrqPlIR]NIu:Q-JF4C#\U -%:`5Q%)pnMEcTIP!"@XbMu9kdIe2uNZfBH"@usjX+@:Z"9T88!5o&_J4:M;E=a1AA=spC-6iY">B?h)E[`j/!.Pt,UC[gWQ-JB*#$_>6P3R_76V1$]DNJcrdVB)s4H7U&RFU(nfZ_T3+%,2a^s:`*J2+UlhS&j$`"0.\ZS6k&.o@?MpC"aJjC`947R>_rL>%]u#NeO4]1g^>N%f>N:(G#2%1#^^gF^2@iNruo -%:lmV,-QJZ(`+HM9/Qu7X[4H7R2J_rHT4fX8)I*JkQ]O_&jV>4+o(W_5_&cA*_Dc"t7F9'(u:dcAghiqL4fohZN<^D7t$pTPkNJ/T^%EUn]*CL(F\iY,u[m'4-pAi+a"HAQ$ld>Wrd?bht#6tJT0B$MS:3:*nP-_31ZXDhVp;*=V5pe8U2-`DYNr(Wdgae9f8\1;f1jhMlG@Z%]#D5th)a@-h(G6eG=6XEG@#JnG?af1hBS[@D#$9Bns= -%:f4qHpXpn[+\[H\SFm\>Vk;pt4\Eb!`nZJ']6X@T7_d+(j`ji0mh;Z#he`(nnop"cFf?:QE0#0Lm_6\hPPYjaII=B.-f!b<5Ns3\U->p??(Y,h9:o!e6sii!?=-:]9cp+%K<5]" -%:X,kU\dBCdl)@aM+(+in.MW6J,^m^o:(-'.&H8n0\J@9#`P/6`nX-1qafk#W8?Otj!n:SVu8EQhMm)[QI:!LD]UgWhiGcl"gGnZeVmp2%W4^4)!/L/ZG7SiW_*W_.Tc=[9d[O!F0,j;!,.%Z)u^(#Z8Pr*]ZVa@gPb6,j%lK`p.#s)5*eT\hclqrl.! -%:BqpchI42A43,\_CN[nBR'?g>HV\KQ9m74b;6;^ZoT.4OSXbHPB?CsNu2eU>sbFp%Nf06T-0Pun(BHZrZd03U`oQrR#j!d$AERX/PFLDp4dFiF9u(6/b2iOEe.3:8eii1)H3@3.Fi>>g$MsCUkd1t(k&C-#LICUt2F6<+7>SVL5`@jhaJ(>N%VVT()(%g[PUuAu:);u6^/TD4Kc9>K'W'VP11PgH=<%.F\!3'_Qp#Pt"lQC/h$Ip@'r-*7+eR.8pkNqJFcG+F'X?Q!*!r>P0B=OkN)kL7'/YSru';A@k/3"l5^lSr!T!Y"B#Nq0`XMstHRL`m?E/0cHopQ:rBE`7R0K(:T'/;W/\,t@Eof!mr6'3ClZ^,j8k=]>Kg>m7+FW).N/6612]J#GU0\U4%V!`/mXTGq7E7gr+V\WZZ>a^(![j5B2;FcCea`=`0hW\S=pU:Ar".^$uH-.UmsS>_O4T.P$dp] -%:dOSs,Hd\_8Bq.>mEqU[lc<_,r:gPU:g"^oGKA -%:i@d3d.:2SRd?$'hB/I0*?VX3h@n;6B`gfV$c8)<7R58jV1'M:KS)Eg/G,jh5.-@5fterE&#,*"nb_b^rrHIW+E8p.QB#4MoW -%:ZCs%,bejr$a!(8r*-SIsOqWIUCl<5@Oh$iDTCm@"5^+gf*K__))bt*j6?^'N%?_G\@*FhI[2q6cqOko9'3aSkYU#'i>a44K$DVtlReV$q>3o\k6Xl72a>R,P)YW,!%pfA"_oHRInc9DA_F"RZk?ZY!<=-i*_)+05:1>UT"Aq%&DO^*Cr6bc[XnH9VO6p-EGMs5?L0/o$Xs#]>EU=q8%lL:3U>c2GZIODBddh`32]9i>B5'IEZ5F9LDF6`23WFYEe3l=&lXfogH:&dsSbhdg9l-nT -%:1dJEMDs5Jl)g]:f\M)Red*J:u6[rT'-k*V\DXF/XU#>hR)2ira(9/DMQEbW$r-%%qH4"l:*PbA,5c^SZ!NkK(r)P*%IB_ki0EcJn%7?=]bod+)qb[mAE+!CQ_*.?:gZO`["tK=_ks%t2/uY0&ndCd]oj4u`[&j7OuPB(M=ZNk\0Ys,=URLl;"JK/-P@YeOLW(;C"#QaM:"mc>X[<<9&c!j-?6;U`2+nR>Xfuf[Ni%/e3k==3#$+:Oaf_BG)pN#R)A?3"oOMnW`IjK=p;K/L=JljN%qE=l!Xs^@>/,q&jFpFCHc0F6L+0SIl[/K+'HSk -%:]#P7\4u]=rF#3@^`K&8Zconr@T5C9K/G=#W9W`ZsAg;"OOglVBM-CEND>IPf4ml'3igt6dik@5rENbYGr@(:E&;ac]8;&^ue%6jfC!>l5o!qfD5=>=62.]KEUj4c7&rB3R8Jr!VNnEtoW?rZZ6K3"5VUq.,A/^YV_Fige'I97s'#3+^#V@QhLb7r-+q\!Z_b4jXMA)&Mn@P'`l6R:mg/u6Cp))(&dDm1Yf^ou2eMtIC,ckc>*n2L9:)u`FGl9"R+?>tL;f8T[a<'&BW7l;NdX+;1@dfLQuCE=OT!KPjohDjPo\]e/J"e!S+s&SK;p\k0nX8Oug>fkpR*5[o*#Db3LDRBB-R87N9R=\6i.K#Bc>+uHM^mgl6N -%:&r-RG\F_Qj8GlO^5<-*"s3%[L0u'uDNA\4q&+(n(YICpC`dGeC2LQ/cKAVYWPH\4A?*d]YNEIiNA^rR?X!NU&=LPQ@3c*dqR^(':/7gXUg>N,tN\FF,@PU%6 -%:9JfcR5IR6q2p5=Jcl>Dmr.hZ0Ta>Ug='H1T-J=,GR\R,74CFFb5\7$.XI\@:2*Mag]sVeNik14md/$?s0o[($6OU6q&9rZ%1<5em:cCgV0\O*>dnO2eEHPT,>YlgrEgbn3HYA<`feKoT'a49SI9-"M,kZ0fPO(WT=d9/hsCYF]l]K'm"GWMl9GP]4YB2Bdol -%:(`R19!6?`*K\I=r^]Vm4S)t]'JQ)LFr,B`)e#KMEo8?S-Z2"ns*JYJ[[-N]'+S'-aQ:\HcCtdI5D/*m>"ogV?@9K-F>/=_"c:)_Xr<-Ulldc#X)VQQqV1U?8?SJUU`f?_"4`Y:R@VfiHP`!#9"EU7W%`Ze%/mW9PN?O#%[]M;!2JO[g$THR:_Wl9[JscC9c*%oW0!FLnp"-ALJPDh&if)\I,t(dX]RnG?)7riDXG1TY6'=habAQPO -%:,a\H%9Pn-jd8.Fg_X2t1DfQm2lENd9H-6t`oCp9UN;_8lN;^/jUq7q3"/.i+oTfT/,LkMss%gD^QU2W-N.X-/it/AmE?s/g36GicXisuT5B#J\!Ub*(Uh"sD)$rd1tu(.TpYL@$p=L7G.lTX.Q%kGZ`VtSkdn/2NI"jt -%:W]&pe.;!:D^@r=5!9gF%-$dGZ""#nm[oZ:q;SaiKr&Mc,R"f^io=OFCf4Id`Bq>&()6sX_'CRKc,.Q-]f3+fpNFG"SK!K -%:F#(&kO,"!tO,("1L(KJ'2eV/XeI]H5L9XoO(7]6RnEiV*2W7jViS3BGD!KE.U1<0-aIg$;6m9ro5SPO?'$26l1dom$#L9&2LbkdpY$GV%1Tua*Q2gPP_Y)<;#!L'IC4kPR'j! -%:,ejZQJZ9b;[gDeL40m-Pjp4a,fjp>,H(IFCtq&LV%@p(_^j^[9IWVUG^U\;Rp1+,o+.;Z,j\l/ajnKS2D@oh_^eV9oiKEuQKgUO_N&640:gYi#q#]C6C#;`Z.j\?*?dWr:h:)b?=QU-g4[C4*]+l"a'L7;]I#i!(>@"=r'f*Eai\?V;h_Lt9bce7@cJoI`mKW6a7?4(].UY,?:+,&,)f!E39FMbTJ!iiiSCPBBSTkd(b9QofE^k?aCGDr6;>PWoc5j/NS?O9:2L*84;ENs(ePOlJG&*?FDQHdl4$67GT2GCI[0hU1<;d$rIhn&5i5#b6ml!]%EXlpB6?BT37ct7AnKoW1("9]BBgTNR6pA2kof<:*3Gp>uaWjX?M=,oBl((@YT?^$WGrc -%:;&0!4XEW;V_@5FP6>kbi<*Pu&j2?&qqFjZEen:/RopLu;ooY54WV(h&$O9%<35E]F^sG#hGpkcn2j/%Cqj6g9:Q]Lo1K/O'DE9PXAbH5bn^Q`mtm6r\#?GYE@-.lU\cBeSFrq^iCW[=6IJiQ=,eG+ccS_?F#I+_!3mprjAb3"1[Aff]SB:!SH`[11UkE58T-&-:0A\s)U1YJWa/VQ]$EiR,%BEWKN:=\APgu/C$dY+j7oc\j[tLY#hcS-\5/PdZlWL?Vd"[s4-I.&j -%:+b*h[rX`CX^HhR1oIId[>=YEf]!I%YG$l`!ft7]$Pr\LL;,q=8%cL!VQ%[I92'@9#XU`?^>3.6hE=l=7Tr!Ehd<@F8>k%6]"csA93]K!^2f-c\>'97Dm,!Fh"?5%g?PpFKETWC$upLA@>)rGcm0jjgCW=ck5>_Yq34)LpFOsK!WI)8UTeI[F]N1oBL4AE3JaX!F=WspS'[6SpNe"L]@iY_RW(nZf0(5a -%:PoVc=6.69E+0P"QAsIceS/Hf_P=`/nKb0a+N%NG]7XZGgl!m[EWc:ZkoO/#0/2e%LI=A?@W/BH96\s:C[p`D6(ua]Fa-_g*rGDq^T,)(gCCMZ`+'/XYf!f=gE3/g>f%e\?fR%*fWlipR/8VCaL3`1C7@=,8=%$":>8ddF[Oil^SL'Zmq3+$>$$VBQNiLkVRgF(;[M*P.@j/K`PC-B0?RfeojUA7VNdG89,K[Ul9F`!c)]$aMP%]nE`0%Uc_;S@Brb2bkL.d-`MpgtgNEX2M=E+YLfLJgK -%:'SnA*Q%[cJ))6\'%nGUO]OT/sQQ'B$pMCMA0MEA&9\0e2O,cj=?(!XGQK([+TEq/[LmchTVjrC@WMFA5a9b`,j"/>j1kg+Fhc5nV>[sp\/eR6pG=L'hj&O31/DoV+_Q+RK.&A&a=r?"R4)BVUo;@9c)g>.f\CqZ%%-B=N**k?+=!qfp^D3:c>Rbo,A5m+NgFQTXfHiP@C3amZRVP3Th28`Z]Fc3lUkrN2MBddMX7e9d(PV0"$,jKt -%:MCc7Pd@[=ukT8B.H#..^kdoOad@+Rmh;o[+6pU4+>H[g`(NM#+$!1Uh!'KR#X\5fC/>O#SJ6DKQpr'YZLLq2J`E<965I=LcrH'`7i@P]5g/mjr+>Qbq8tQ[^Q/6^tO3\BVP<\;"0EfW>.Ug7D8:J"L_1\o-%.UiEGIZ!-)%s/8qU2'03ZmZF.=mp`^-X04"G,72&J;cA8S61&8'O:[:,7:M-"o2Xa;bIaiUb6u0qiAXJ#eaNV$KG2&R-:_&2"rj/GU2\o"%N?DO-lfr#)liaXX<8KXm)K>&HS-;/4IL?WW#,0B?APU>?&Ap2'"nQ0f:GDJS\$Dljm2A1M/T;F$1gYue`9]3m'uS=Xdi/c[%)6X;cHM2GL9GdckBr#rA1qh&RYNGrF\1tOdSjU191127LG8:%fO10I_qhcNWV*] -%:?SUq88(8>!ZX"b[dNk3!@5_;OlZZm&0Rn!U2R$.Z_B'bD&^f4'\3sd$^2L*.qbb5XO(onK>_Cq"VAoh_\0K5@ohCWIeSC1K(`IQG>"b7/cbKMc?h+l]:&'_DSp^Ec5/)Q(WT$L"d!NQ[4>lO=FM]l-^Sh2;PSJ*Y#Sg/fE`'X/;ab;p`77lYP`/4V7-<1_82aZ[77s\I<5F9A!bung>31lq=d2=T6Bc<.9K8&^XMRB`B@c81L`0sU/Y_DCRYr9f,J\ji_08VPqU'^.qHm>_uXZ&49_1^[Yk+bX=9c,.a,HE"h -%:aQgpbVS*Uj)V*5G<%YhuSl?WJAU/sZ8-6m8^Ze.BX0jF%/82sCjN/4L\Dqi4a7:QWCmat8/a2sLC=uO0#XM4?U@G(ccTE_rUfp8S*?fI5NlW-kLmmIu/lE.#*NSJ__XPm31+]c]fNNgEnKp]`5mH;Dk))nkB3^I6"i12Fsms),"q?!W7qBb1`FD^5+h*CuniVf8o -%:Dgc@n(pJR_VL#It51sete.t8d(iS,SMH`=j3aHXiG#.S!W,+V,oL,@IbT7=E(CgDLEf\AT@cr=NnqF]E?61h84R-iZ)[ofYK2,2Y$`E0_q-cBjD)i1*!aOf]YV9.@kh5MdQkRb\6EiMTKf6GW-Xo#lSecX&1XQ.qo5g#Ch:'$6pL:,Wj4uWtF6!J*;'RdRT=)lUo_KlAmC2'm>p4+0Qj0+dHCK@;?bsP<5eOQ/[jU8=hH5bg%n7>K`+J=4n[2`qCfV -%:':-6ZqK+7j"+KQ_:7rE;@shs;ApeI.:47m0dpu.#pA)00[ToZhT(kHfQ54g'Zj,fdQ/N6&)CX;6O\-9J0O&t$]*@-R08MV9q6S)QMhjC,9MRpcDCtL7c\X;\'XlhS\kp:X.b/-2"s%->Wa>H@ZU%`k)e/dN$T5V"K[Lit)W+tC>;paZc3eD%+IRL4h%G_mH%b[*F;$GZHjj;'G5UPS64A9k]%Qi\/7`J+$ia]lO`#>.57Z8NCp_q6G7n5iIGjT4]43`FP3$c2mjKU3<7RRIf,HZ(&YH%Kd[h7p:R#)7,5Q?73(b_cV(=,2160_hIsFGaFGm?9_fVK"MoERd@/c-M -%:;V"-/[<+2RP)XqdVkqQeRAk:Lfp+14=]i8cSX31fLfm4^&?G5nnN[,Yh8F0EdNN)e_`l9o@fd%!=@anN$g)[df&!i897,3oXt8>bUIEYR2A@jdWM\K?dFlt9qMV_m;;+029=srdXV:r5]6c-7iTY3HMQA\q."TNRDm@^gh3s;&*0"2oV.$g;7DqZR#&@pkkVA.^4"h0bm-.4FK5BH$._LpAEE:kSM:=iP^bdLEDNXL%W+&_6k>PO; -%:5QaM;SbOZgC.l`^:!'+bXCV3hR^F-XD`6@kq,Saaof5oa\E9D#@G-GT=C's?J\ou`_q@e1.:M!rUCbfh`j%C?/;q:BINHaQoIB(V*LQ8h^McT;p3b?_0[U<`8`Km#g5EIAM>3Vr?JhLBNa"X=B%njaf*qbq'`4!gcMNulErG, -%:&2B?F`UQC2#g9RAA[,,A@JmR&Lg%6QbB$cP`L"G^_b5k#jA`IN?R]C+4ASVhlk=MD6L1,Xluhi_$BS9<8+HiT!IIMg=JFfT -%:$@+&qPep$!,s/M$0KXkea>;?tPYt,OlW+9P`&)=bb#i@/pE-e0Ijk()7!3JAk>-Le.=WdQcjIV#ODX>NX\aTF!CWUjc/XI;B5-sHJVB/Jfd`@O>?NJ2:fK=maU^@ -%:,PT!V+>m@rqbCPqonA&F[IS$frCoK[q2V[0="TAZ;nsu>IJn'Zd0,T<$8bO>qX?M&;mH+\J-:4rq;YgKL?*Phi;?\#LA(-LsK8Yk>1?bFH'OYGlbbB)e;[Nn=5'"&7%fX'c%:S74Is[J\p2)bo#If@BCQgRm/]K@EoM;/\e?`ZGt3EiSi]9PJCfZ-Q3ebUY7na3Z*bRR69ILH);\-j.9?Mqa@iZV2>^Ip\P37QH-[Ee&NYa\QRd!0CD@Vq?&;BBm%h&`Xn"@jA`J9>Of%2X3WH)eX*QFK>Wr,EmI^JU-Q(&?Ad$8@*Y[IrUnTdD#`ih_OHn@.5)fZW`PdiaiP#A>FgNVY<:"7"=roSEP`)mfPYDckYgY#`N7*MTTiEgPh*tW@pc=l)5([IIflCSH=Jqc!u_g>JP"+Cj-7AEg(8L^[?iWoQ,c6b5loGm_NggbQSONC#p2usodMre3ok8$m81WmO[DWoOUb;0U)Z'P*,p/^ki#XtEI_PPj4_^]1-a?.2H2Ih2V'a/@=UU=?Rdc9Ai6,rB"Wd4!Qq.Hl&Mn%/"ra#=p;l2%nMD<+T -%:l/D<(^j0#XqIa11-E(4/_!1Ds``_aXEFK[3b1rT;)+ph_e,##=:PcCh`ASS(hNR8t)5]f9=LN:8fh*+CY;Lun-.rPrF>3W8L%tLr$ro\Z@uV-p0BHV\S+bR]+Jb=UiYcs_g2-;CO9J(]:QBMQ+5Ps(uZlT1\:+]K^.8)(lC/?N"Qd)PhI3.&?BQ9k:f\?X)SU*DM7N9N7!e*W6=`YqGL\$`o2)bq0S\K+RGp.h^+Cb[2m^.[e$I4,B6>"SFJKGr*+9ZL*6f<`6=91WGUi#Vik945c?43rhMr:VRTl>TA@976@BN3^ai07ae0s1_*WZIB/bQX)S>huo`N1Z6a0@OI0`qq>0+.'3M^hhZmk>+Il4q$f2&h^HO1/jDh54k36E1f7lQ%tpU4q5<+p8*p!b%>4CZ;oSTCf7^Z:dF0UT[%#+*=Ua"Eun_!rSXkPVVVlORS17hXf)1rrQXud01184*\E0@K9h5V -%:&NF1#Yi[=ngL#\cK;6q:%X3XapP_1`)1l/MJa7--irV3jdLZ`J5;*9=f$WV%#)Ck!C*=#`AI(LlK>VQ<&5<+p&@e)L+ZR11mtBU)6X22Z:;8F'T5]o9j,Xbe$LoX,E'S9rV%gPZkKIq=+f.)M.;oF/UZn*[6o*.[_4!o -%:!YMu^>)l*mBT91t_Q8M3N=MH\rsf!4Im4CY!I_bGGZI9$GJHu)F8NE5KQ9sNY+1)K\Z/RBa2Z7]-!6Spe4^0GAgqedKhA_X<*>u4<-B[pRF`k-Pg^,`acCf[;<$)e*HE\#nA6=i^;]NV'lhS^\1@PtZ[@umHI1T$4o9EsJGTDs?t9AgQ2kJ)N8>S9.VFtK#FHfYXFJ:Y?%5Okn046,=:aLUQW(GF63\hJQiL`M@4;mWJPtlrQ\Ok3 -%:@p'L*Gpt7Q_8C`p$.$X[+;Q_->"b6bEA6?+Vi$-LMg%K=P$@TdUu?(qj]p\hk!\hif0>/^\7lT7gQjIJ\QueR+O",g,@T]^h$I<[%Nlb$3"r"]lb*c51=d3mo\P\"d\Q9s:EK9ugfIl&f(&KOP9]`47Uu3ml@:sK1F]e#S4hGeVe-LpC]r88#::[H2aV"d5/%9J'LYW];@Ys%E4$pIfn>jVZf2)Z4Y!Y2(b."L5q=[)[ -%:(Vt!L%MSc45@=BE4^;u*Ff!^[E*fkAWhnL&e7\rn+j(8U2Pu6B;laR*VO]gF;0j3Aa-,Q"#LCM\Y*jch;F-`ka`s,\?7o%e6A/5 -%:\8@:plPj]]$2#lak?b^M?E`6iHgaaZm*l"$!9Wi8OtMstrs7$J2uVN]p`KIW:P8K?TD7^7)aF5co[Wpg^[45H^]*JI!D8#;:rM't.Jb^l./L,4d=2U_rYqSFe_-^RQJgmlro]1RrHFn5pTIKe5O;8>5D#X0#o*?a9Mp//+tS2?B^_-5_Om3i^!@KDqHlJch_[bZWVu:4'`B,Hkl1cSrteUU\jm?*pAbUj -%:$`^Q5Br-Qf=DI-m7>h)::]KKE2qt;H7EDZ:/J>-s97DJI-75-YoOnuF!iD3.0qL"F"T02oIY>Y!omSWUXJYG@/MZ.@fk^+sZoGJ&\;5?Dc7J%t%8:S?Ed9h7if4g,LXr[H5HPHEE;"Q\sU/-W?r868(Ls.f[m/9^V7":qr^&RmP7=XOZDq#KcI6#'l -%:Q$n1`=Xu&he,T4$Va/Ye%#Y$"VWcpnUPO0dc+e>mYO-fX*mn'-,Q7E^7@tUuoW&[SF-!&f!C]3\MZ-YRkhgZ:U7[0EicV%\m5i+VGTEd0(Ff48%fV9]W$\pEhkTCrJtbI6MLL+*qR?2I,%o(sg\W7qiD2#4^!@KDqY]7Z9i4W"NBN/fTVr$O%Z-qU`?%I\U>bD357NZ;_cOLVeL+8uT?7+'(]'C\n_fE#M$M'+FMM5I=_^pM=M0t% -%:h4sND<.5'Orp<,8oYV&9rq)h(IXrfE5-6+#-^LS)'Y`s3oSWt3H^,chd;,f]QU0"J-u(P,mpDdpTak"s4tT4u'2t\j5B3*[o"aaIm]3]SHaL;U"_VBfoSJn'='qVS_De2XIi;MS:IL-?Hq),Ir=AQo)M*\DjE@6)`@rs;lm:IND*k;-:\iFSi[285^r=Q@T^"^:mbB_f9.Q@3WHH)(F.bPim2#[\/qqk)2JRD2?%C5XrQ1=1%F>/&=im->7[0eB*5:Qc=h`%p'DHq"L7%/[>q\_a+C#.3HaV-mK8HST&97bY0J8UR4f)IMl]5,2]f.P8,VZtr"NQ_jg!+W?nb(]hd!A?h)k+qg:lVPGY2=$#iCFD8#iRd.6p]QG8c#q8kd'QlejJpHL6:n.kO`I6OFfmsC=c^OM<1IfQkRK:q=%0eGW[&hQXeR25I0Bu-F/(A180k-+cbbs2%0rtV#=Or+))?fTB0POi-CpkQhj*rI7;l8$7>pdYkooW**6@s`=tj.Q:A!8W-ZkW\f$?D.1b8@OFnrFtJm57u`Jo92sVT]i"/pnqJqkb$P'kar#IcVIG/ -%:IhiasF%"F%r>dOg"<`4D;P07!r.uk#T.a+7k77Ip9i5cPs7ng8IMEQj.!4r3&k,%Vl['?E4Q$j\OaE]g&cT^,EpjZaje"<9jZiY,J,\\^qs".Ol2Q2$UBa#'nCJX"*;ncJT0)i!_9p)C%lsrJK8YBGi)^D##O`.'#PSIa#Cl=&+$00E&,uBWJ*GG^JE;jir\o;dJBA.I#iO5$-OBYEruIG6/?FOIf(ceV8NEPl8ZNV`7iV7mHgkmd4KSrMr$SrL.IfpqIpLj;XR_(+emVY#+/?kL/J>%7$'q'L"_$3;Th;s,3iU"/FP$&=q`o]*3G&O)"86TD\7-hu0D-Wqbque_U2smJ7X6g&/MQc-NQDn&s6D -%:Mq\ZTq8I8AU&1t$hu'>>rPWo0\pMg2VjG\AS)X9nqq5Q14s+l1qrYB%pu6D%.BYl#go`R(nVU\$d1*^[?(MRYn2!2nM_?(=S"G+M\_V/;o>MLV%hG;Yki\QkDHHJJq_'SjDXk8ZjT[`uOCq.,p4?2/2Y^"@f&-bf-,r9Eg!G_C>ZF8'bFkl'd]]a_.]q:531b>GLS]e/$o]@C`ph(NFE#+>e0r.M22"B/sfgH.LZDK9\= -%:)rDC?EIU;/BJj"HU\L\]`D:mAUCY)q?EHukmUhO1UM'4k+:J?(Bs0YZ#C/IYN$3o-I(bna+k85(g%R@\Y=r?]^:4@\9+%^Imd^29fDkWP=1;=V[_:*"cg]iLCGd#cheG!_eS9c>k')iH^N9/srU(L"'sZnr9YK?C$#VJEVk6T8#/P\jn_Gkbs(!1#@@@&L0.c9@cUSc$n9-utJ,^:b$3/2F+&aUj(mg"41G(*IV@C5@YEhr/=oA1Cn[#MhnoKk&+FbLN4*s!Ii)bq6i6Jt)ucEe6snUucb7')h\+0,2-`\uhX1(0&ir)LMWT?Mf[]UO>s\@kVAIV$aiX"^4R]>_KH>'hD\3Po?`h)'+nbZtL%j&Sl%bA:SJ2ei\Gb0:%#!0elas2$eIoTNDXE]Jr8D\mh+6%Kfj;&]g+FZDDR>(GLkUHfk"92` -%:J!$goJ,Aa.ok+'^IV=(WpM>?OIr4T"/+<;OV=hI*[(bB)l@l_EiA18c=@SPKqm5tI&j:R7DR>(5'+Y"cfEP-N_O^ELgFLHDg?Fi/hE;b4:EF4"0h=\DAG("L?k54ueNQ1,j":94'/C\aucM@/0lLjCW5C&Lqrmbf>F56?PO$CFp>%b2Z?Y0F*`;\gB%pEgtb#MeqM#$o?#>c6-eVFaZHg)EOY6@oeIVBqVdd-;hY_H?B -%:[)>?Fh-9oF>-j]:+fa_Ki8XW\4mD(!D,8j4\EY*BmS&Ur%et7)c5)*aN@/1Yqo#2(^jpA$a$FMWW`d/f(qbf@tK>dW?Rne]%EfBqK`di'e?SGk9@B(l'+YmH_%^TasaV4aMG@a52&^9-\BD?@62%`C;NPrTeQDgoLg9 -%:B5fA47&VJ^I9hQ2`co8c_lJMtrSZ4o&M:-R2Zqe5=+#6ae?=`:,<))nk5GXq-p0RCY2??q1Ycn__W_!.&LI'&g%OEEVH6<:jo,%BCnfW*NV!QgK(KR3s1(ed?Znof1Zr6Unho*0.'9DrHar3Q2]c"Rc0IM\>;+8MRke=B5p#[X_i"O&VL+i8In-\7$g;/A?=#qV2qqENnc%VUE<1q;^SBIPZX*5',4F*^h#[h$4U(6,KcmV_KBlcr[cRb.*=O#F30AQ`"feV)Y'q_CD998dn,Pi2c05]1!UAQPoEc_;h`[G"u@cG,+"(Y=;P%>A7`U+4%JZ%E><\pkuG]QM/t"00]6l5=EbAfD:6=HE1GOQ\/DKc!+[fSHnY@QGt:9``bLq"1%"ZgF?C1JA@3Th!/d"j/VfI_$`n'R9Y3PS,tqXYJ,Mb_&UD^ -%:\\-iI]DDHTII"OkgN(#NlF]:U\A`q+[eJoWq,'mOFRIQ]53)>hWWqr+g>bao59/#6#C+;q!%^?B]YWcM6No1oggKNJ1perod-_2otr>'Gl#8n1m,^0Se-d_g='-r)%pe]T.>CP-QD(6e$5H_UTtVnjEsrI%c".1!AT5hp$Ahk5=;s;;\e' -%:dZ<;\4CI:[]:HfaN!a0*1^i(3l&a*N/kWPgZXuf2FErBQ%BCR=gV+bHS0Um/r1F]]7D_BB5N;c1%f-Q9.rcXL#.DYbnFCS]cPjjYQmEb1GX/,deFN%CU"S4tQQBI&EV]1mEN>0=`_GVN.9Nn'lq,SH%bF,KI(W$a7R'Q[T#")r:[A;-p<<"$4m#Fe1/]+WbU;d1%uuJ9q#Y7@ni8$#c$E2>"p0qQ?=hs)C5.D9q?a%/Pg__onE--!^"fn^4kW\X*>O6OT^mIWX>#P3,UW]8(Wulh+sLf4N)NT`5>)Gk_=QFtSUH7amu_n'7Z34^0a%_P&T]Wj(+!YXu*QqpR[>H,cQ!.i+-eJ-#+3[R,aPdcN!>o@S=Zf%qs1%f9[^2J1^DAdH;u%J/r?DgADd2$pnJKC9;Z=1r)f.q4\(Nj<\6r)BFU(.6?Qa6k5a+Sn1#@=Lnh.mKFM*U#q#>]L+eQ*mDIe:DK08+,Lg=d'#GRPUeSdqC126dq+XN#u4JYWPVMMF2BeH"R:N08+i3,cu-D/\9otKLct; -%:qoH?S^K&^3UZaoQP,6P*N\,T7=)1B>BUt[F3#!k1:!sD63pndqV1`'SbD*ZA;Q'PJ%Z"2V-*)hE7nL@])".@f(4o';:IkS73E2![sp/lWH)h^giTZafVFogU_meUMKn7?dGMfiWe6Pma;mG6%!-VQj$?J!Phgio -%:SI@DG!9e%GNK]J1[<[K\NX(e),lT@]`C\e

/sEkk*\/,E&f(3-/QLbkDc`#LkSn^a._EB$%],^ab`P,?pWJ72eX3:7NX%c^&fp97s8&Tc0HW-Hem -%:4WPr*DC+8QPEuP$#t)=h%[;9%(p14]L[pX%b98u569+`@`?G7S/`GAkSS\7=I8p!M:0ZQ>h9c1]>%c0Ba%XE%?BjkKk4d8"C@GI#g=X]Xq8[pkbkqKG$p(=d"m-W"uEK*>,\,bKNq,'3+e0I.V"th=01Er@p(`eY!AYMI[^q9,r%N#ZrdANSp6e&/.3*-_V:E<;>*l(edk0WrZ4:)3dFI:U&]Q(V]_RO?8ag,".Tb3U) -%::b,HaC;.1#^DmgZ:6Z7`rh;l3MK]^$R/p'hZdr/dGWA\T/F$m0o!^DC$Pg\Wd;WB<8r)AW)eY$qrqrWK&2F6W?KltZ5Aml^>:PSq`>:M:Z?!k+KaQ=>fC'i-/R8A&&GKJ,")27Gdt(JPEPn:O+B$TJr1rOPOb@E@I?YVb@qu5F`_!YZTc7Q/<_Yl0r5nNQ\C][6+q'["LBc%oAif4s9NKf,pVThZSMpFqR(keR%+P5l -%:ZJ\3-3_r2!,'N4N\$8TU#^DOD5D4cWV&'JVQ(6]]'K-=?Y$M&%jWC8i7o*eo9c.ucEG&$9fo!G@1)V8Gjs2>sGB\J;?h -%:SM^u?J7t!2>/G`Oh-&^*!Q3)Gl0pZNFqjo&/E'u*]gJ_-;=qml,@,W;o8Mm_B:$@>FFddQ#O$pK273q\@5Xr7IKq0-f8DN;FQ.*4_e*)+TuIAJj*7ME^q[>k`pB8+Qc\f!*,;KQVObM/=UA$"T"p$t8]s3jp-Zhg -%:XjfmdbiTqfWcA,m_eJI1Q;pL9dQP:(c72%(hfABaGk1npGWkqMB;85RXcZ8$0&%&m*20Xb?Ie\1hFNar/'DgseA=DcJjVpPtS@\9LS-.V$!lMka'EL%#A("YVVV,j&V`Mq7FebaaeW'CF]E%VG`iW-8HPbZ?QA45H;F& -%:D2"o!0;>Bl@7Ja<#5C.9!Me5olP-0;L_aP="T>hJ**Eb[J-g>Lb0$ilUaG%fKt#(4`3#0-EcHR7(L.l0IZg3hUW2G6b(.%=>:Gjo1fA.9G;1OYJKotmT[\0j'PI=R;:!udCC[$2nDa@#mWrNPLWp8OdXLD!4MYq"?A3Bi[*G?XN@SY/7VPT6K#WWUJpu:U_R0Jr[l.5'k=q,L`hCh7f`CQ:\qKB_>dRr9M0'Vc5[EVnGMYTN7;Ktb8>1#Y@$6O^:J/KNB\XF;[_h,,#h5+Lqra_@e"?=Je06/tH:(d"5TPj-DCpXJ'-C(0;PAr5MR7L8KIG3c'`Td(#KJE!q507cRO%8'R_=BH34H?Z6uRQI%@7^Ju7V'k,_KZbVart5+nJbfUN1S(H^Hd((=,Uqb"o+#Zb?]koSS!%2C:sXF_Roi&CL@mgFZR,Ic3,1eF&ua939.kAXm#H4][r^bk]g2O0KPWfq2o8ToG>jX.HTts[BcKLt -%:nDY"3&YsA4X(OCZ(oQR>T?T6"g"Lt`pk"lC8_OR%h1-eF*+JTCO9dZ#iP^(iKV8\$9pPsS4!/&dZ4\I=b!6sLKWSZmUGu4QQ0='T=%`>JE*E/L2*]Z6+lVr/Y9E%i/gq1Io$o"eW_.Nqj.+YDj,7kTnY5[Lno&d?Z'?s+(Dg\B5giko?.(d,X%IiY-gUT$ -%:YAqX9$aZ"^)-45%2$ql?fE8?6i=[Cu,.=Ajp7Y1R5ULfFKL9]e6,.hCAb4Ua@4r9#P7+uo_n!Wga,aGJ@6@rc^lKcrJjcZW'F?`NHFRq1BG\&a"4;9K_hp*qRt4!<;1+b,k -%:gBs(_HPDrZd/c#LbD/O$b/.\DGd0&*Np3/_=KN;?H<2UO&B#P0O=#qtRR9W-["MYYC9S+;P!Z7?8GJXR@eM,HVLKA@2pXiU0NP2+o:\b#gZinB0poR$jX4MF;k]\Ap$/TL>P3!p^7p!%9/PLF4TW1B@(!nCGja7fUBggh&9aL+\q'PRb4@.uK/-$CJ$&Er!n/Rrf=D5WuX![=gaE+>3uCJC\>c&Pk&@5g8:J -%:&@]%W^tqs+-c4sGhJ.,5,^c1C9#?d8U=<7ZM@6>]ktg9d:-i70b1,W=!aZ*gT%*1e0$s_f"HOl-_pSeFSt%DEXYL+uo1hYj7]2oRUtK!q!H(D]RYF0G$@>oOH!>4l##. -%:Z-YYP&hbQtXVus?>Wm]UXP9!M:Y\5b@71/^X*()YP's8FYgh"(q/&Z2Q/msYWUNnd[_aUZ/gr,*Xf"1J=7#XB*_Vl+?/rbB;l_`B$L_7uHpA16sLTXSn(H+F?"*#e;oO!uc(brhp4YRK\]JD/_Cu8F4Ra[R`ZM`as0k4N=LTCJ7Xj,Pk'[$$e@f< -%:1`un@",qni,NTI6IY!Yg)5QUgOd++k)8^T2a/^JU\R%`)GVbA>$fD'PkpOANiN3T9e)(m6n#rc>T_P5nMOVB!F"sbp,gU%HLS$bLEFA&^Wbi%8fb)^g`[!Pgd*da*n_!qD@,QNTl(-:W<[qD-sSgp5Q%(Y,rECb9RUOeY-)(Sr5YX%DZ/HHt'>/L+*D$@2lU]@tC(;L^+n!*36bUS+>S%u(r9>m`4)_OEf62U^qeEHe?e=ED+sL19ZR5dM)PGICUb.L[4"OYID0"'`=*R[&eDI[2lg -%:Z'K?fG#_tSI>;-2ZdQb!.f4GLe(`;9QiVi*Vla3oH8Q"!Q%:^ndKoo\dZ5t\$e;pNS>=:2o)SDLNA]Q2htU@[R_COr4MY;=*3#<)luD/ebs=m2+11me%,/kCfnVubNo+!\5aim%bbAkO><(Fj?i[I`,1ttNa5cYMQjB!Dk0LnRqO=W*iW+N=JS!:]?-k$OhrVkBXn8p.DjgsfNom@%3fij-(l]';#NW_Dq%Al.-F9NJr"0A4Ae^pc;i,%Ml)I&i"57at2^/F?*itZ$'lb^Z2Nctqb#Qa3.dW;BJ(^[,7ap%FBonV(a#=u-`B^2o!lqeo=e%9/*m#P=NV#fko^#8J14CbA>6A:FI[=?2R+I);=@($R>L6qNjm=VE[[$80PW'69U[^347!YMPVPNCC\&6-(\5_UZ4F^ZMYYJ"5R>F4EI.c@['uY]+9,D+[:GL4hNBA,3Qc -%:agTP\9iMrGV+o)eGQ8qQ94BF@b4eL53p=f8*,6&u;4A_c4OIT"nF_JjE.2<7/rU%Z*MNMG>bP[2L3K43&],^d4Q;m&@@Nu2(h757Z@U!!P`C>Q$K3]r2g;[:;53t>5=%CfOJWWL_KC."NfmDmU.q6@Pj,2L0cDD:3GmGnGEUB&Xk,bID[k&KM*Q:*1BjHE(Fh66PaV:>M0N(%d?\IdAEkADo4P'6Qc*iV1PZ')Csci2-r:uKp8uEE\A)7sW5*kE&3EOO!lK`7MlrW@:k4>FYlF,3)-[E+1tLJ-teW]1^YddUdXJiV;k7CIO!e!6,&A/lJj;ZJFKWs&,:\tc[='n&#<#u*L>9N_\GOT@E*IB#+am%%er5@jZ-.#Le#>SMr+P[UZc,I_6jC_0jml9<3?BkmWA_;cR@A/$3#!s0,P-[Q^r.`IiT,Z/[<[NdN#EAp.V;"4UTmGV_m!tj)OBkF/KFk7^qQ(o3%a)_(XL"-Zpts']NFR>ERFEu'O4$>bos!a*.\d,]IM\OJ+(sGkG(Vnbb7p<=.j`H8e!3=QD3#@&Z3\_?m?F,!HY6iJVif8FWT]m>j(4`*cbsp"=MCN,-01BBNHT."b(B37*OTjek0Jab;Jq+P]0^JhY2*M -%:gg^5`bOt)/V?>dDJ\qE_auD/JJ`7E;Y-fl`Y@g[)OmjS(6=!$t`j&*K7)Bb;7>PL8pU8^\-gGJR)Q9_)EXeeM4]>KM-aV6/-/C``,]drl,>D$Ch[K6ElI55iHK`\nM]p?N*(),!8j3R<*$LLE^/6Q'GUj:WCB#TWZK^FG3c-c2@Q=4#0[+OZlbf>jetP1GH^[+8Vhf14qlP%K/#'\2494['MZE -%:W1sfT,;\O!To2<($)>B#h7a1>tikj(-cJ`[)4#Eg`?X,`PJ3_sGfp)/ST$:'"&-6%KL/]7"$\hL>9,tF#u#5d-V#3se6(qL=t'c=2aM,C5L7+Wd:DmF398(&pOAT->5Qb? -%:AVbaBFVX;Z8#p$8qOkb!BJ'0u7(U#f@'e-NGDSZC3o"#7)oYA*E+q;%Xot)'$/Z/6nJpgtj^L=pSbRM(WB5%Z#'K#]#aekN8&u,7IHg"(:ILN+iV,FR-10S.u\:fg$![W9L&Be[L27U;Lt3^e_q^gCLRA_OMeZ<#!?)O;'SFY-b"F@!SP^Xb=A+s>14RYs^,T#JY`6(fDHGa(K==;E!\iDY$[RckbfM1*7s%1'm?.YZ?BSJr`Z;hqg*6N@i1G(UTJbgX@@tPIW6P"aTVZ04.m*eP`D6BuK0EZj:eg_4!CuJ29S6(N1)3?jW)b1R4 -%:/`AQ\^;:g@Lh#Oc2hEMB80=hKiM2O_Sjt9_,q'P@>12sOY.-bOt2eZr2IF^6B*'Wp2iFVri$P7'!?f.7LdBb&t;)O%eZZjXKp.kn*r@lP[dkQ"8C>(0-4oqsBAr5YZn!k*X$<@l)90)&D`ADkb*p/+o,`X&Wg+9e.&EadWQ`T[40AJfal[asP$Ikpt0e/Jfi)Gu:] -%:N`ptpV(J6n)[YOQ^*?OMW-r(c)]h7O!1:[\UQU<:6r!k`'`-;+IMgeTfhNlQ,MtbRS-mc$"(U93H5#$12C30l!>1?/U1?-ts6b+^\'.e<47lu=oT5=RqAXP%:rRroC&5Te'VF+?P_A(5<,r6WSgK_d2`%6?-B&W7PH%P%.XF6=25mQe.ld0oPL[T/JZ`tU.=.U< -%:>48r^)6b,JF?h+a4]fW&EEP+1iUVL-e^"kIM1AK]P;aKPf4t,>MTul,`IpV!WKM45@EN%'gf#XjC'd[;jFR\\V0WUIVg?m:1orXPFcE:8%MdCp-AuhfCbS;@qI%\k)P%)Ej9KR?C.jkAC%!`F+R!YFVWC'E3.u/:9#^JPX37b._VrBOXA]#)-qL1He*3)o,?[[YW'q(foBjpcaKPrGNT-Q"h:5OqDl`Qk^TjJIc+FC;3YDo'S(9b=H98E(/fP;U^lUa3T?i*EY?$og;roZu(rNOk]OZ%R,8*$11gDiqc#:[-/.-B'/Zp"clZr]FT9X6K,e:;qf#>25stQ']5o)qJ]= -%:E&AWom>R5F%`PD*E2%?$9u8u_MOieAh9*N-g(U'/r,??Qd'ol4'X(?N[-osDUbJOFgq9PTI'gL>BHkp?E#2F8.%_'1G#C=$l7*cGCaqfeani8/>t)X)WUU)_Ka1(0h8p1D_2G_S'gthU7c6&L:*+)=$IkV8033'Fm3q5X6@@J8962rOURK_&-WEK+3T(b[n7K][8JV.2U,Ykd9&L?YX/fKJe#?TZ/Q=V#f5qo+7&]U:;qb'&Xhc%&7Rj36datoF?"9%2uum+@dMSu -%:B>U=,m2IUe0H;X>Zml^&)=$4,(r3pA>K]tMBO%M=TRZCZk[-M<`AQQ48(8h7*'s`OlN"[elo"EY0%L&rECpJqVEs7\^nLXV#27$$:(4hC9JjQ9)g'.M]J],:\9ET2(dHTI,>g$#EDo^M/;L -%:r"qKU1tImbQ2:%Od-i@hpSP47>M6eTVGI)e\/%_iW#H3a.jktT7Q+)`J'2FSe30(Me+\"]QhhCt5n^(/lqsP;3Es%.;g.8\*lO,:W%.'_GjAQkJVfZ(4t1Uk"qCn.="]F:TZsZp[n^F3F)XuKYPs;. -%:+>ch:&Mh77N7="?X7;mVEMTW.*?LeGOQ'+S`ri'%l=39ei!KK#\UYMM:2$.QE3bc^*#%OF>;`*oHDu3f#73!\VJX!/RX*[M[URKRr7=eEq9bQ>V\qhHd70hk2N;(%eN)__a8jZG!9D@a'46bMk3OAj36MJbb8`[6ALGPl.,td&cRO`[W5'5Hp>8u]rT"HVS@&e:b`$._^B68^bLV1Pc'DsN0*t,MYi[M -%:fHdN7+l&G]$#im`P<'5Y'$g-k+S!I9$r]2e!-mUUpRLOeqPe01'+Q&Ccp53*g^a$roCD&F0h_9UID=kSg=*o\kmIC"4nb_B!=`p`'*\buE/[`7^#?4F)+pRF*9n#dl3D2JR3720]^cq@V=3d[K@HD@+S6bH-*$#a^&]-[QG4+8kHVA3e4Bt;LQf?GBYnNYBB/hf>TK?@Nb$:!jq2mmE0@nS/R/`fK2q;OCnh3cWE2n'7lsc -%:n9^Cfb9)Z^`LWite<^DF!&#su(52MGgkA-UPj60]V).;7OCZm4pl1GU2sQkp>D+Md2B"6?EMkkXXfMV=Y"f_96)$s67De@p-"/I3=;)'$ng&*Q'#)+76&O$]4g=c$,7psE`N]dj_&W:_W90amCS3\p6W@)=%:NaeA3/87"0cgPkdZlH38-D3DiKRTKZ7^9c"nlI*-0*,r6+W`*=Er"e,^7jlOfE!0U9'2h,3;?04s]gN,!fK9=DZ -%:2OV^ldG^9U\M+Qkr(Hn8M(@3eX\`d9I&C\r+EI$#+>elI;`okBp:MUsfWTGNI=VT/$ -%:^>IE3B5#$AG9@f`&K'R'50]chAb%gi^5r>qdK+!YK9Yt^73Yi^RgY.h!e-AR6&'#+Ic)rf<>kXAmXM2r6kKrlj>G$Y:VF^-,I],lGZnY]>J3"TY[QiC9V@0gBY0hKii>/CEKbnrb)q4Z#oM6QKk&@m/AVSj4VHmpW@3#=dVfX&!qC2m5!SDKeW.T)C6SC@>.N>mel;Roa7RDk93\5M+lTfMrL-\YT0J*BL66^Z/P`\dRe"tlLC!L'<)g`.gpk8/!gJ,m6IQiANK,G7#L0*I:H%b1tmOoVPF)/QSf1epWPQdBkN[6?s9 -%:<&.u#2T2<>C3d,t.$bXPA1-ir$s[sF:7c)H-&d2e.e;#i/K"ook_7JA+<+[b-2iG)l=6jS-V*4!,2oNTkMWP12$qSBag7B\-=\no[XO/:F`3ucp$lXOG#("-4?u#Wr'gkT4YIdi%R&Jr`m2q&l.f]:'?SBk%rj7()9*t.TmmOt70X=[>"`G(+)H!0F(js-BUkIk3bn^COmqp8`7t)HW3Z[b36g -%:A;4)]H@"St7DI8Z*0pQ?lmCiUcN=0h.1'W3g\N,d"%ar8(/l6@X__JMF6H@X(/X%T>5eR>kmKA!`gK!]69ebS;6I+Q:+@5/@DZ6:6e>Pu=>6554m+$E<)*Qs'#qV?ZD1TF@.6I_0/cYjZ9Qh=X1*9eU^6pHMX.t&c5^'mC`n+>WIfff(s&Q%J[6eL!2&[M_K:[9bu=!)VB-iKQmWhR8c0>Ap!)a[q`Dmq?[`Wh>>.OQN<'-:C0![I'D+[jGHrPHl^.SSX@KZZVk;3IBWLFVP7_fP^3E>i?^rmdC;="P!BJW-q(Hk0,U;l&\8j40g;e*l]A:!9Yj:kdfii8OHGkJKW7uLlaRb0kA&iQ>Q8P%8Q37OBTlm]*&P;b:6DIB:Ur>JQ-nepDgi/g.A'fRjI*1@sYcai%smel&^!o/;E-%dQnBGh0@ -%:MHDlu(I(dkVU,io7HcNhWWh[0^i)e/%((7V'r\T)ZI8('=iI)GJWP*&*3'8/%Zgs^YR!2Dhe"b4NaS]KK]ND#@g&N++V:m?&6fIHk+kh1%i8&^a?raV>oNWnER$`4Q%TYu$'4,c&Ic$'!7D3c[`3d@8rVu$C*R0H&.)Facq+b1X==OO\OL08GtA;7KlCUROYE6MbR_c#A2>2K2o)hOp;W[%HoY#F -%:5hGBu@HFYnHSRP;dEC"R"U[lNQ9h?-6eoHPY*[+YZ]Q2Z`Z)rS>9)-Si78GEV%7XF&fOb"(D&S;i6]a8.B`5s]pnIuZtf6>Td/"P$k@1"!f%,(V\8FK;h6R(4_mNDG=Qj,f`>TMr/uan^'eNDj]Qk5MCOFM!>-L?QMsY3\C^\]SHPF&LdT*#)6eTRCiWEn.#JpHI,TB$+fd#07]kPubVB+!ep;-.!17kYGBXgnbAV#a<]fX]_6jt-Uk@$FR6k`:Jh7g9N2qD[eSpKiNM0Le -%:+k+dU,(!ph2RlWeY?]Y(T_W(l4ZT1c5dYGNMOf\9Mjnc%Gb\<_/TL0mCcMrrQRDR)3]XIR,I0kk,NcSNRh/HtP[.9sUM>R!iVtC-I"uo[DJH#&jU2!H&.\0a5;HF$>b_5]'\ANuQ>M\>#AIk^YF-A*eU&Q]?F,)bNFT79iOT_>f%`i%b?^d-4$*]c59W`KESU<85l[Om>-7l!O8_Yj,fT0Xj"#.'!_IaHeb7AaRh@ODo:)8?l]_V-ZdJ_uo?!HCjnaBhQa33n*%?3gc)<\N=R@Dr(bTF:Y25N)o@'/@$4$?V_R*[p9pE!2d/* -%:P+;T>n)3E@pS"h!WJf*_3'1@:7ZrKRCGoLo9]>7BGN3DM]SKd6'Jln6I1ji))2:Xhj-t:99ScV/$WNHFN'Q+L4A;Bk@1?:S`--I96T^[FbJ\s__ks&G1bS62Y@_Hc^rB(MO,kB=Q(scBho#t[INmSX(jB#'.u1:.P!ds=f`;QmSMhJ);iR'K1Q5S4T1G:Lg<+u*&9hb9%b1uXRDD)jlqqfE=uhuOQ[8;Y2cdFN@*d!k=e5PIbQm3I -%:$?.^Fq/K9lcpEN"q<#b=#W#)cKMnVMO4Yjd$53>BIZY)X;^]?7I,-:r<0kmsdJ%OZ/%Q9tU5?N0]T<(C63jd)2scQG9QLUu>QV%/T?/Y5kRMmNJ) -%:_s.A[`*472L:S-A\nd*^4Q%O825s7D3U/Xge2eT"nW\gRdOp#BdQZr"i1rpjiTI0*;;>&1]SF(QNCnV1L1dINBiFB.PIB'$nrd=\-_M(AP"?iJh-%!)!:$T$3&j>W@1;@Q;5?b> -%:LFUY^-&IOG9o&VWpn(jOS3)!$lc3Cq9_"a7!'j&h^Mo2@T;rTF"0b=beulm)?E\^[[IRZoaKZl`IZ+uns8rYs+8I\\"#TA!k<2`!hb2V;M%oR>r]=toS-t]DD3\UkiBVeoh&K7>O[Qk]gC`ke$S5rDQS'skgD&Tr8PSD_'mGI_WLWU"*Jb&Vk'N>rA_D+[qJC,[?`3q -%:5!GI$Qkm2uCj4f61[:C62KME-7uK90S@X-*-muuX5]!$GU"J;SL[?OFI3NI!ronY0%KR;OC^[@+K'VT\.`RAY5T.`2O.cnDnE/'#mSmH^+9ok)0`k00U3H4.?jbKJTQG<;g*iCiZ=bNk``_P1kU]AoZfrJRPL^d7/1\)lkje'I&!,K$%5u& -%:&&9W5#tpM4i-!N:i,Ll!Cln)DY_LQ,BRcZ[fGWQ@'8FO&W?EmX8H;OlX`cjh)+0`f_@u5_"'4.rQ],`Nac[<&4R#$XU5'-CfDlEU0O9s!+%Tq$SZPk;3N,.2,Z\s5LR,u:1>jHCrB"42=,0:.T]TG)Hp/P:4a'k#1_\5#L,*/5:XY=-b^&rg0>R?mm+6R10,W8l:RqZgT'4([EU^:,Z+l3@+5PGGWn'WPah2Rna[+D'5prDYgl>qfhQTH5Ep@.^*bN^^Ff;L#8W$K/NsB8H92iQLZB=D=EIT2isBg-b8Dneq4[Z6d"/$ -%:Z>RJ?6eh@s@htKWe2^>e2Ld,^YW^$<&HHhKB[o)f`g[t"1MpfeH"h`mOsHKtNe85+"ZmCb6?GlfMdg\!3Gai4%L00CQ;CCc^>/NPLAf"D12cHLSh>e/?p#mab":EtNECNSF`iM+*EYTBhqOU7sh(0Vl/:Lt:Q5I[1^uNXmKJte%2l0%iYYL?sda5$6\JWY_iF%BYrQ@tr3 -%:n&,k1q992#\J<_k20HHAnAiQD:6n%^lN3VZ2tO7uRKCanGF8&XfU9fV#7*:HIc:Jn`#Bu]F[b9jrj9c-C`2dJk\!@d^pB,hS1qh8:mt/Oj>jB-]M]@h&!qj*r5'[EOTku^oY[WiV63AjY6ej8[-+J9:XsF^@4oZ=2S3W3U*qSpoApB!+N4of:aQU"1K6K+@Oq8Y) -%:9Z@D5'ckPFn`6FUl!oJ.a4$inCSe2EY!nYqYaq6LMJ[.fVmtHmKl(.0?nEL@h3qAJTNfi%(JKssA[tn7D,eP_S]M1mHR$s:B&KX21+uQOs@kS62)=r@d6)pFmF_W`Lf\q%4K,fY,RU=,9#G-cV]JP)3 -%:nLd^2JTUe:H>.j?U\n6<0BPD5BV6+@34T#KS@m7PrY3c)h_mZu6!H^^6jCs.%)fC?6YB_"l&]jp94$d65/9)"(9WI3VD!)BJ0Xe)QLMQ15R)@!r7]33+jUVY-JML$e@V[L=HLJQ%bi1!2nZ1(Cp+H9\(^Ku]oId9XD3@e*QMsl[Ei6nL -%:S.!YngS$^iZ7[K/?qE>?&$RrRQhYM+iR'^Wqf.c*LbNQPYZc;P:!G>H=^IOs>AoQH8GouC5&7%okf,\/dt3r+i<4H?pcIAT)m>,=(AqU009[s$I7!Z:>u"Q=!%LcZN%o]:=h.0>cN?-r]-OuMjkJfL*PnMBa,QoP@E`]rB>!(d5j3"*_17j+O4U?!2[5(K!8>;uNZ67UFpqM`4Eq4aBb%IoRF#f8DL7#%O)Wr[icNd`&4:m9=N>-2 -%:!7]@#a37RV^#kF`I4EPR>K+cOE9##ni$shVims9P4uW1DM;4qU\:A1K#*KDh>`PE(IOaidbnP_G:P,)0%#=gH;R0$c"mC(480,Q:Kl,Ih:%--a`=g0Xel@VD';/LB5#/$dF.dkrF"rijgUn>d[tT8hV"='SHR7.IHmU7qQHeFE[E#TE4jN5nf:9$ce+VP4Q85U -%:YQpi8Oh*R#CXVWn^d`7*qJkQj95l/u'&O-*E@AY/&22ZN=ac@*JB3+>XHS^8i71'#0+mHiL<+L*mrDLF"D!#rokI%"-$:Gg2'naQ-hX1S\A5Fg*a_U%%LY8j.kSP?G3men\\$cPuLQuEn.M;no_:1a]QR=dm_T,9?VJ#5%tdSR4?h?" -%:RTY$[Y)/'-[MQVnM#aT1%&Leg:JP:0$e2V`V.0@QjAdHglClJ-H]#-_[c'2+8PoFYU;B:Urd:#p9*dVKaf9?F[aL81Q=OQ9=PQdV'HQ5`D_dN`NgeR$d>LK0LWqEa -%:Koau/-krjCTRV#YXg,4hkUF/!LKbq!\227-lUTDE7E:3_iCl/Q;39:0X%K1aaUEp?R9L:<1H(:VeSOo\lNRU(6m]_>CZ5dQI6)'L7niD]NZT`YDN(;.;@"`Y:2iDaP$`0i3W;or@n=T&Dju;ZbS9Ps>`1o'p2NK@D`Pl_ASo7rn-)o9`M,U*UF`bsXr6us?*Mpu;s%/Sh,g-?.q.%KXc,DA*C!K9UEVCrpWS\sa/m-h3E?5S*Cn8X\jMBNX;e=NKg**"Le[nENMN=;%^"#I0i9"I-Np6cO(q\&#aL4l[\Fiq[:U0BqR9q#tfJHgC-q -%:ZY9+n"cC1c0P]Q+TN3rjF.DO-g'GJ3p9*7hBMBXnH7+5BcmW;`fX@s1+sC1t@;9$Rj(9kZ(;)fK[?)i`5^n]e0L0`VnBr*?I`6%*N-u`i?=cV;2o#N7]DHlOOPg\#%[hHs_)LDDU5RR6Q8#ITcQNZH#@-%\E,\H'#QP4A?F+:-&0Wc(++X71C,NY*p?5&+EP*Gn6TI#8]Cul.FQSt@>(uu9?5QtC/]%Vr2nO*XTL*MuJ\2s8[]1A- -%:0LN8j@Te43%CfN05M.BJ""Ys>o+$DDMD+>e[KT3cFY+K;j8frl@VRG#?C:n;HCp2VS-!j"M3ZV;&V4_S@4MWeqd&W&I:Oepn.#hgO[Up+)I$4+=UWPPVCjC&4!l$Y\PU"m:oM.TAfcJUDhtHgfJfT7d`Q<)5&UEh[mu99%m^+m)#DuQc*&"%$a%?;Z6<^KF'Tsnk#W`6TKGVK<$58Ek[3+A=TI/3^:c=q\L'?%OQ3Mg;&t1/UT(M"(F!_3GMm`Q(hrJgF\la6\8=*'P>C(NToV;\8R?MMT<6ZeiS;<&<+9&O>pt0o$!]9YqUMMXt.qLd6[eJd6gjdc8t2&_ZOag%kn*pGREOjN+3qN/%g1[*3KJjZ.H[#H,C#B[#@bL!;$N1kS+[N<]OBlV(q@B6(t3(-e$?Dl^RL*R'd0HM=EIbl*n -%:.?<6/OIG\J=$<@qXlUiag`>f"SH_&fYdQsL/3JH[10cdpCpZjr*ZM7/fG?P6g^9_$41+Il4@YP^2@,_SOZJ!gA`^=GBk&<@?cioH!!/uI[(76-]49JJ,%M1A(>90YS26D3^\JmV[&%@3!B!:UBq7EuJBO4bZ2e*k,XjZ%kma?'U4jN(jRl'Z=upWB^,3D,>n.r-f-IrJ!!6gs -%:PZ&5+JQmY.p=%60Ru'@DVZ]N44&?GGq.T-6L>i1oot08W&9p\D1dqJ5P"S0L$ma4W@[)$*'f7tr@nU3dJRJ5/fKe;d/k"b+tA_*D+Y5'HH3W+BrQl&AD(8,qt_t"VaSi3$7b,nTYHqPTgKXFT77JrDADLJ+-?`f^M -%:erC4Miu[<&kqs>d'DbPU#m&[DRcj;u5djG0p3kLA:C*r%J8tiK!e(:2RHe+8eaU!k66\%FVCnN;hDhAp=i&-6[Jkl>R't=2L6=-MB(D:!nN5_20aH\_'_97^db>iPU)&.Ls52a@/s>L$l`_"s@kl@)/)(=brBRaWELf,8hK]i5^XQGW(U%lbjTbh#9Y!Dh][%A^rArd#_?sjg8m\rX?M3=_;7@.$GeTO4E -%:a;di4^imcSZrM51^r?*i0"O$>[[H"RRlR>a"7@gF`[r:_aoX`""hJFt!T`l<*.-%od,q1/P9WiP4g3F\0Q\.8SbU&tm"Xq6l;XTp*l)3rTH'p!:q7Jc*[nHNEP1'%?L_HTN4R5bgtY81Y#3Y/1=e%>RGHBMn2j>mE3 -%:!,JErHFfkC]7j;l,!(]e(T_8;%i8VR:#DXSX@5eg'U:Fo\E7im3'`AFS(BG1a&7"8YV:$us&)6=s@;+7Yg%tJNa_JK`J[7.;QQ' -%:],ad!\VZ7lP,Q2!OuVI,']BI3/*(UO*-[$+(E[9g7F"R,8?&i(EbhG78Df^uXJU806#1!D[4!?Bts@3LUuWHPejd?^"0O!o4Ii[R)JDRa-Y)"d'' -%:,WV]Gl$6V&a/D$Vfl%9q650qu;FI,W,-D=Yl^%/\KtJ4m]TbF-I'.8$D%dP"A4S4\/=@[PlJXJK(#TJKF(3`aAKodZJY3,u$T]HmK]-n*6AZ.G+*6B"_Bg`q9)ct$4@ec4'^^EQ*FTU-Co]KfHJ(>C1pA!./`b41G]n^C2m"UurB[+\\33CKiODat)Zgl//tPB"*O=$d#g4e%WgAZ#%k("8dh&,C"SH"Mp#No:KHpni=6$S#_jh=G -%:-K&YLh8!L/G$>nI;#nTl!%lue_BR2:N02kgnj,J94]XfmZWf8g1CV'GlH5M9;Ll_(,8sTZVP;Yl'rh@<1-EI]AK@J(+CDQQ.L[Wa(.[edJ;nBY1,#MXJ?BZ-a)EU#%TTra_5e6Z4Z98fN_pC`4Tbs>,+-!I]D-i)$MpF%%MdJFd#9GQu#al\b7n!\D"^Euj3?01<_kYGigIb?"9W9+U`JCQP!>a,i+aR=_D@!^M5baO9\)XF!M-_+4lF@[d.V>X$neeFqA@VX!49?*7L#41&JCrYeZK%\X!0I\'$=l+/M)mu$hd-r^drTK-#uOW!Z_udhA]>7$*1=q\CHY*/N&igN5,9e?0 -%:8DH)A1[*UMN2U?o3(#bp!a@KHI)5,>S;o7-K&+0BLFAGP;'(T>Ct#\T7(4j4[DacWarO)!WJ13O-%L'cWs#M1Z*`H`G#==$f+*DFDJnn9!q0a7MH#Z9SL(lJ*FB9N?%bp70aBPqUDGC_-$r>?.h.^9in@4j?*PP#$COp)i_T\%3m`5SF%-!.>cc[`!i;3RNjZ?06QePg\m>$s2BkYaKBi8>AtL7\`0 -%:o_Q?'',8Z&T7j+K>"&M\p^+:(V"e1)&ZFe(dB_79B.LGQcIlEJ;%n.)\FHhoJ)T$J]Zf5X#'(cp>S]#:Q6WZu;JPn4emr.qV!n_0*CCj"$ogD]6f9L:6-*O_?D"G&&hMutKu?V49q`Xa7QD?Aa.U2tl_C,DYUja@5'jEZ1gr`ZIL#RV+f4[$Ulf=n5TTC&Os(@O_>1+#,,2fi!TJ(Y%#`C7>SakW@N='I -%:a?`&oHXJ;,D3N6U*_:OS<`01,MA5.ncH=GYnZ!mJ$cYc5`^@D(j2^N=`"8U^J5CP6DIF>@1^#"U`s!IHLX0d!*O(pB0Z5b[@Lj]gp$(cOi6SZ:KqUUoT1PdOF5kJG^#9_S3DYjqdOkcc^Tae%o)-@qMTm6CmUii9r;".n-?`8W7kf!Tqho$YTpd5T^ml5NrEN4qS4SHtAQU;a#AR7'7\G,Q)(]ZW/J_m?^G,4ildUkn65/Vs<9)Vf:KeDb9_%a_V7SK'fb%iFelZo$-= -%:RPL6UDFC4*(0%NbQpc4.Q"hGfL%1\,VV+9HOr2Ds!F.T%G.eC&Y!*^GBsc%R`P^haPZ-#6UK?&['SbOpl8er,7LRth"%CrcEA(Q`CV(=Q+&>n!,RZU%O#,]rb\HD",d't1/)90C4\"4k%]GRPG'O9a*adsM5!sS1F0<Z1VebQ1'"h7D;cQ)_,`Y@/J!C!p8!6N -%:OF.2a-QNM%;HR4L.sn^M!1*59/85/_X2@D>/iqU8dF",N*aAK#b^f9jUdji?cARu-3+;G!!E-C8(-TY!;C7BdUnF,?5rR6:6etH3U,A%_8gAn^52:0ol+Mm^u%^T$n>)0Fb92E\m8bqhud^#jLc(J4eZX@2gsTr"A5EV[knsOTrs@&%.DZ$.r`pQf^b.E&'k6c>f5YWTZSq4hVgCtX_'r$YdNh[Jq6Eb+I5!ErM]VTh7D%s -%:-j?B8)B1EuC)%]rYu_=S!-c*#6Pme>/^^+kR*os(U7;6tjVcE67N(AP/p-)?DC%X2%T$#):Q^df@@0a[h!N+kNIV!3[sPWi@^mQ)a+bh>od#/MR)r%Ht"?)!)0AIGtsoq=Pa)LaEbrO"+UUi/d+?IJYN4KJnFhZbihILa]^sU*9t2\NgM(!UbN,u0"0aR?Mgg\?=56/+hduDEqHd?*M;>_q+P8@\KeXa%G"\"!&nf+3CX7N_Ub_"lIfc:C!+eT"ATMkd/S"LYI7:/fb'1'1_6(h3uuDcaoUuXpaDAS9qGT[LsLOajaW,'/R9<+MuUR$9g7PVTm7LRVp8cu9XlcmbWpc4mc1S=\4#pB>7%[]h,6?9ZT,pIdhI6uKVpkGKWWNtPTK>PCOn>=O>r!W!TYg=)5-(a/!l,9[YQW/%*JN$V(q,?j/+S)Z,B*d*<1k=-bLC$&lr@];"OED"#_8&LP(@JI:h=U::XR/AoZ3LW-@XaSC?(]&B=5?fN,@d/rkMh\TaA% -%:Vqt=$=!(.;mLU.^).8:s^ii0K.i\q>5(@];"*ep[p6t_3!(aN)%qf?+<;:!3.;nid_t!Et&$XDnAFe+pHUDGH!>)+ipS]a4#;JeKN%>4a)G8*A=d.mS]uVfi"O\t*]p,\uBqYuqHKF6j7)XCg3YR,W-WXKm"VIcn'WR&"(lMR2Ap&Z14dHFQjX9a"'$/s?onS27fDgBL,9Fn3l=79 -%:FK,$h![\P)h@/u[3cTlcIN#-hHCG(8ml\om`S>95oUr4[fCIT>nGqQ+8h]0K-KlOAGll7#&(K:n+"k*a``tnn'Ft0l!C00nJc9\Z9Q"j$*g7A6)]9IMiW+9DCLHf7fA;oQ\$]fASSbjlBm7.YjMe457(JSqj[oM%869*^CPsH'M7NgY!9\l!Q-0=DClnikif[-%i_)I,W\QT01XC.%bcf-$a_R's>&3STp)*k9bO+_@2rqPf7uG;p -%:MSdB)f3Z@ErRWk:J8lu=`N%m$_>iFV"kl!,RR[]@oVDpnD,kB01d[)V<9Z>kSRG'2FgW$-CN`67X^m)OfKU4TlEV-aC?<\+S:enq/Z>ReDV"]\6'b;$^4rCj3K9cM,'MrG0(@`!Amh_7?[2LdipZL86gJP1D_\U0rhVl%s@CCJE$<0Y*@!W=;tLr:;CpT^%mtVm9t<[7Kn^YW"i1-=Z#X -%:66kq:O;64KBEHH+*OsA+$$cf>8uH\!SPIuE$*<'&8%g0ZmH3!@M=2/4=)GQ923s,]ni"!GPMWTQgNX46t;_ef6n1+ZnZ@1!-*@47s$3\q^1r\Q`Q]P5'"^-EX9d5XQX6^D0$4C[q>=,N84b%)cfUTF!`Xhf[4JH_?_dal8dC%<.6^.Zm2b7oLF;7'?>Zco%cli8/8in(0'2 -%:(_.aWm_%!i1c/`DPQtH<'pP5m$"7`;*@HSMZGj/Dc>5@r>L/1N5\-.0I^KECC=RO$r+9.8s4U\I&!,@#4or+u$(2CV1ISf,.gSRfaQqN!?C4Hm*[FN#8^Y6d@oi8`Fi[\1lh7OrJSP^%o:^6#2'QaN4X]s@PL[+W#RSG$h4OFPj^>C&XI9IY)O6mFmgPC?SXAB&2@"*s=FqGad1eeNEe,\$rea<2l9f6ggt)ak5b%Bai0&b#pUp_iE+\;)HtP^QF\XZ#+r@mV5^V$NMAQo65is,-]d-d*!P8.n"r^c!Z-%fQFt+VASY^,g4Q"o1m\FM$CuB,4BNNQSlG-d_$b9,YhH146H-bSl@Btl*;'U%WFc]1Zm'bG(An3sdq?\GO^\Z4cG8T\Md?mcL.q_4O&)J:^?HuI2W;:sI45(go[gSW0 -%:@-=0:!j%_em7_nkS]$b1dpoJg]`X3p0E0:%@iT9[[[>^s*`R!oN9cp$)B_jJ[h&K9m!PqX>Y -%:W^@EF8IQ^6:Mb8]-/Z[MS@*nM3k+q9%-hgup-qcMB>DJB%9"4UnO4E7/U:h(pjK5U;hj^@BlG:fXPmrO?ram0Xf_$D4;6:5N&o&i78W@13QWu/ec7pAIf,Pl(kal4+D:`rRbY:TF$O.m\#W`4pb?QX:$0XbCB(%V)'[S&3u>jarDG^OL=`@58VAUJKl['Q%"^E'Hr]"h[OM5> -%:oP\Zh?p$])I3lU:"PP.&BHVkdMZbqq+%j'D^9pOs3Z$tC&7>?i]2^?W`e;mU]tsRdL%e+CiOE(o+@39)?;bW^%[kdeWrmPVq0==_^mgL<@PIQ!nT.mefIfu-;h'f@'8t]G/122bS7"\r?kT4g#[LG6A(C@NOj684cY8Y\#A5uR^D/j&*;!%o.8nLfSacJj".UDEoQ -%:Em*0nShk4+E/52<#m#a2H4s(&(MSKqY_3C-b"4i'[,.U'H,sY#9KYK.k6YmcFEh4P[e;C;Dj("@\"^7aLDmfrP2;IXj9b4PImY0"-V(#\e4`u@P5Fn9c)09Ql6?oj>Rc>4#rr+0d+?clP!"C2acuD@59q(i%`\S9dJXR,T%Zs2HJ2e[?-Q8cbfW9C[ID0J[($:KUO]grgBW)cZKs-:Y:fi0rC]C+io)<]EOt6DL\/p.^37BDr',q%HrCr(Lu"4NfOG%*:Q?6N@GIi5ghpu%tc+n3"s'f+?(H_S.bsekNnp"UY".hX]B]AEcH*&Ael>Oen`^:2F6IPB5-I:BNOCYGR0!H/g6f8PHYJlD4$MV8+SUf01*1F]#Jc5tl`Y#RVl6dgSp1@%C)m;J?",+J$kcL-Q(*ZL'p"]5QpaG2S -%:A2@S&DHaKCJBiF&Y1mCqjR&SpF%l"aNt1L^ei1_^^&^/0A[[e%i\c-)P/:+kc1/IQQGr<5iUF5o8&AI4&l_O\na[5^Fbanu/K"\CKNNRcfemQ33n/D%G[C9LF,;W5[lng0&>_M'&5RtU*5%oBX/1lt5oelC3;'Ik-s76HX]lKEk9+tN@Td^-,:S].egnsN:2WWk>T:20GpX!1@L')Br5W.qs)1cS-+Hk]&^'El&-uFCo(S\%r`'@X -%:bH)=^HRO_nfXtY2DSdkTKEoRKE`O4E;]?#5'?T=m#0EPR_D_cqWW#;/VbH_/Qb*0s6[/B]1kh:YO9;5fS]oV6)%D^N9Xej;Uq,"koJVgd#+`1nkjE,T6C!<=^T0)9N^"-L^'O2Rg=:r37,5NkY:ueqZK9tPp'#8EDV"%!LB&[4d.3$6C#MZCi/Fj?3N^rmBVGiM:4m\%i\4G_8_::%M(7jZrIu3#H -%:`q_5]bIA7kIe]@jBt8NAV/dS*&`F*.qb1*_A/^:7aetWe"BgD8;^%hD":r7=4h9S:N7!*'o<\Or[3sl5$\o/9L?;.oGIBLU6Bfa[[1aQ:%D"+*7$n2!qen4g!"ucE@&+Nm#Y,KXOSXuWL>b_RqqKfXcle6kI98u#SJ0p,oNIq(Oprl6B`p"=8rM-=X$pIq*2J?2EV=/2LdaAE*"gp1M9Le)"3:P@(E(_kDAplfc?^l3Ic-ASVB(jp -%:F*ZI`J'`p!)b"Al%#hOTc^0&95%Qjnb.JIt:g;3rj2oW@0Rb_]nu8pI-6=;H$edj3*5KIC/-==U7j9.@EBtF.LmABa%3,Zd./W<""*!kb&DCOMaXkBu_a`YTE8d?s9N4ks'P/-uPGsRs9-s15B@TbuY"i/B2`[eW_b:Xe'=j"2dVV9u81EB^%(OenN;5b!$([ZV`a$(g(NP4\LgY'27[VCUmrKYWa]Ql<+^2f56eF,B&L-g&3R_FkB8FTBY^o"Wn%E523MUUb"!nH22]a`k&0F%IqJsm"(_j,nsKjkO(g1rYo5Ea6`]gNeeaMZaGnXQ7*_,N7^ou-tr(TJ&PQSBRg -%:D8XMZa_MEPp5\87X/TUHXS3q_5cTf2HM`@_r5CX0M-#V0^,?A4C(J`Md'fqJ[V8^\nfW;3dB3mWpf&3\q8jJQa#U09T+$G)AGe>.3R,.3"/Ns25n0il;_fZHL805FR^K2+HV7E3:< -%:XL0X$n2*Po/8YIh8ieL\+[o\86i5d^R2S%b+6J>m\9Ze\^OG/(h/2qChhI@sQi3W?]Fb,"BEK.@aHn7;TBs\YF5VX5h97-E`Yf8Y_u@G2ZT/o\("35hI"p"TWL;n8=aTY>Bd8BZQ7QPqfnuil%Imc#i;QIFa!b.@`#'M=:Sle02,T@')dC0&q`S/CKWO2=YR7=U0s%cek)`CZko1DWQXjbRpI\%7S>80s9(DcC.Z$+sj#)_uVhCS# -%:2=>;Z;:I%h-9m.Ze`1Pj8d(Y?5HkYmP!5BuHK<]dgC'gPj1^,h%DW'#0$cKpIuG+#,1=_\%8FT[61anlB:#l$@=m5*mjI!TbQW]cZ;4Kg!6jF?tI$--A+u63IWJ)XI.;D5Ke9&IR-=fX@mD>c#\" -%:\:iA]8&96_BqINZ_1F&8K*Q'(4OU#bJ2_c&^b)Vn@I55][kiUK-5nmU;^&X]+:h[&S7ka4)BLLO2>5-<'K*&Y3S"Dn9u\P'k\KY,"r)EBpQ.o%BW2.KXpn"+(;dKEa\As;B0Cp"]A(M'578AWeb4.Zl^q!aD;B$YO^JE&nd)]sP;n7:a?rs,l\ahGapNqSMRcI9X`Zi2t>0r&CP<)W4VRn/rjOG\1bs;;`ZVi[IEQ6_8!g4Un\`]*BQPQ@KD]r!!ZVWBSUPKdnrP+H",bMS%dL`:Hf(4u)F*bG1_a&^-?Y;ai@n5e9;>TU1i!4uUUuZt7]D$;T5Yn.)1Oc!TKcJTBA,6s*'p9fpS@54"G98?5;_(WIssU_dfP@)Hlk;l)g(p4Qp*#9P:I2PuEmqUN4p?oVS9G9A]kRN6=)i;ubDS4cDhQWO^+D1DC/*B2(0n:X1BRQ],ApR8`YXN2??3aI-CjiON$PulC,aJX5-@prj7)Y3W=LB55[[]`c^]aoLP-d1gH/W-6[,LC"(Esre(ihV!Be`qaH76`"?ZFt1GWXU -%:&J\pqE*ZL4@j,j2>V-$?L9!R?&:P.rZ*aT\rd[E.+LFgm.IfAE1>iZg\fD7BcoLUG;EKM^;bQ(n-RTCH!\90oQr9nu"1<;F!Fb*3oU&Gh(?)9;Fbm=JTp[MBG+<:M<>t#@F:E5#iYY@/;MpT7hs,+LaL\4@GI%uL:.005Y6#?oe&f:>jY2HP7Pf6"6] -%:-[*lIhhT%Jg0qb,ejCaA>-u38q'oq)cB@\gL>oFRZNPIWMoJT]5RAhkp-1KH9cUWt!#I,)e;1%P.H$:f0$#f8c`QP!43;CVgSYGG;I^P#*EnX$,7E_Z;KZ:ddnp*"!,Cr)Pec]K[W]MKhu34hHY-gYmuNJE)BjmIJl\HJf8HFFi>SJ\>G"dr?"+`$FVU@1HkXBSS`>T(X9G(Ki(!&)bRh:$XW!4#$2I5/Vl9)VIl+ -%:oD4Ohp7&*GA@QMpQ,.Y743VE(W2q7rBS4aFi!u6]!&0M=cb3X9s&,m-_[#>lZeo6Z7rC(YpC_U0/-EoM`]j8OeclZp2Rmt'Dk)q$Me'i;$#c[*/i\Oec@QA'Z`3r3)r%uc!JjP5aM -%:3)3c8Y6L\-#Bd3eVTiP`ghqD-OaiS%!H."`aCdK!V'B,4@cbVpT+i0?"Vl:P4St?9+@=!gY4u7%!T(0a/?j^F1l.6C5N`GR)gJ-3eI#W[I2HH#rm,bO%Z0MCrjQIO"e>`W.m1&=-49UbS7-.Cc7IVp@#-M'I_09RhX0i)Ok -%:7kAN2&oYJoM6Z>_da4,Jcl6u738G]A9Po=FOXoMnFna[LU^c[!27HM\a(^%W1nNsd^,EdY'-2">W(9t3SsWBudc",(HYl#3/W00aPSTofJ@\YA$AkUK&52?D;'>NXVa2dNJpnKb4!(%FsbtrcN#6!5`]?I5!_J -%:9XK?urNajKhGu)*/\5uZO6(q/US0*5mr>hKR,nNT6!>e(S1s%=eK0BGPVV@;qj>hnWc"Ogn1_VagaJ*`V%AGPA$*\NuG,[n^La^.&Bb)8F\T%-["2?_oLAWUDeqk*"R(mpt+QpD_2GZr,ak`W>M_j-N5I8NC9gNM.NIp0PBb+Bq]:@H` -%:#aDA]NQ%CMLD0ul]UmeP>L*'>@7i5jIb"_/K+Hd#D1H%'_*N^8]X!;oDdI4JB+Dg-aBkKToCe\ch9$JOo[iQgS&a[EUpYr/.*h\KE*Xbd=M9"6^h!q!X.%:j2U>qJ^dtPrBK`lk-T<^5]LZepW&%Y`_(E/18k5#"Hf*sg&'g@NA8,X$oO6q6Thmm+*`>WFX9WU6p-=@bA#FS1fdZ'$SssiL22eT%D;I?%+BlXOm2BBr45"o:Eh[$` -%:k%TIh-m6dMDdF])0abS$V[]YcqNFHd#&VB@;D0ni0"=0m8#!s1UNb"Q;Uts>NQq'rY+L)m"0D3M3AYg[BS-SYiLd"2>ig_&Sh-)+>CiF_FOo"150X/d`;I;:S>0 -%:V@?plat6m8P-I$(hM0PI3HBlFI4feRh=5Y(BOPQaFi%nL9\YC$m##7O4Qq+6c."b@Coo'M<@g3g]G"W$A4+fMZ=+[!b$:@aWc9Z^8bt9E0AgY_"9/inA8'O:miG/U]5=-)dfr6h,/u@TSL>(o?ea@FQ]\kP9:)O/0nK,*$QGCUj&uNcD$qUL<+F/oQX!NqdA:qUmp1=k*GKh6n'*)If*5+e@ak*sUo6n6!'5X0'qnAeO3$Lj0ONtK -%:S`WI2QTep37iP20kdZe4p*+2]C08u^GbKuf`7N9ieY+93DBVh$M"o@9A-2'K'r+\pbTK0Fb"@G!8WWU7Ss3,#,E)2s=s/e_<"T0aLVY>)[$K\I`[14bEqQ"_1nJH4b!'o/Z-nDh]HL(MGYV/e!jg&M0(Kh,q(Y;J8B_RU]CBgSe'6V$=" -%:RdYjN:G3k6AWJ#$#a1Pu[3=*@[Uj"2QZbs&>K7>*4efk**b(f38hrQ'j/!t%8_1BG.Vd+SKEXG,K;_45lhN7h%e.i;*k8j8Fip'G:"f8MtS'4F7kj5<.pq@T.rYs>jVcJ!,%;fJ;."VL96>>!DtYF)@^:%G+@9kk2`M-ZjCX%4dejeMrUAHJ\8bs:j,2.P$6Ii%NDQEb30;c`6/pcC6>D1:<[q(>B(b5M^m1+kXlhqYp6/^]6CA87%nEEe[K_JqVjNoh_n^Bb?<@i6KKuTq:(A\J_]=kiO'C1.R"&:i;Akq#N(]iG.6HapGP,?4joD,Q,1'WReCT,39[r`EJtZ_gCC^q@@[.Ir4^#&53AM,^!k?.7aePCB:fuWfWmYa-.nU`EOIS<5*ZbCJF+XE+,"[taG9>*[GrH#PjaTWj -%::]QQX==>l2JL>7&4T3WVg#c/i'2Y(3`)C&e.E(1gQ:PQbjLF?n(uXnGH^(SQp0ej`f\-Fm&E(P_KaQ?\ga&Y14H5MZFE[;fA`DQ6K&lUsNd35V81G`jGnD];rB#8+>tG(mO=b6N8r/"B+-h?*+X)>U2'<^#J(+ZHXSboiq5Vnj"^4/dX*a<*=kWD6m*>Ff'^Yf.`LcpC8PVeBF.U+.oJA"4Cm0l]9u=AW';QAJmhdu<8sB_+-@Ii;OAIK5B-E'%rV/gfO69>eZ+YHr3+u'U65-=->`(MZT6Zkr:N4+o]>I4'$9ZIWcmA=.>!tI&hmn#GC007.b;+;'n(PSWo)6-%kN++iN;X6/)a;/9VS#T9J1'G/jJ`cE-9'B`DW#O>JS,n>[3F.("lGS:4ia%k6PAlB\]F[Q -%:#gbaH!o9MkIr]:fTrOY@h[1K9R"-ZEBj7(&H^`Ipr[#I90;9Z\Y+b3(+8ckQG*oekO=/mlYpX4Gi&\L -%:KEguoo,Qpc1`t:QAi(fos2``_U54J&bc!QH3er,j^8QEIa=b;geEcIDR]tQnpXmTT,@$b/mj++.PX*QYhNDM!)X;1&rMUAVM.Z,&+mCL)-T:`K7P7fH.j-HW:'F\';P%j@8,$.aR/7t^g5TbMK:?ehGH!P\hnG7oLo:!eHVW:0A+[+Je9b.0T2,*@#[6(,QTn47X@HobMd -%:-G(p4=W9mU2l_J.biH]pdJuRcH4dKm`SGuL+T034GZP+L7Lh%\Ms*J=Dj=0unBBa+D=Au]WK2HR`OR:;hSUtQt1+Q'!pA\)3P_H[UsgnV?a4A#)2emt'kb=B2587$oFk#RXdfFHsKS"NAEh,HHS,LRD8LIgAm?e[]Ha*sCBZ#+U"3[=aY`i`63IdW^,:*>J(:LU&]nNJCf-QAu/?aBtDNYWJXQ?CVj`*V8F]kE$LI[ab*>leqj4i]"9H/@W6#/hPY@(IrqW160j7'>WU8[6jpQ1sGS[\lViW7T$e0k7Emn+N;6WU8^(S"Tc,aO@jK%]qf5E(7dOKMapK+@rR?#^cZ;7$,4Bd7P`Nh+&U[-g%)8%k*:,n%-bM,iaW;AW_*de0<0M'b4DDIi)X],1<3(kUQ87Dl$cFGN;PtP>.(7H7L;c6eHl-T90E\a-+h] -%:OR&h$c%X',ROHZ3bZ-D1\l"t'4CQqGjKrU<$#JInb9M(4hfp`MQm&77T\:27>9W$.&3[rp8sYB)WV*R(9XuZEV[]B+=/D6jO+b^*QIB4N5`.i9W5ZS<-!UQrB$g\PNS1^OVSo2Afd\:EcQo;5-8P="!;)]3FFZ+5_7c.?+ZuDO!_$KdEsNd*k5C.)R$fY;NRLLelA4q\\%mA'2shckjCWude%rY=-NjRUG2=o'$W6tg6bS=,c.1&( -%:KdBa%KH=giK[W!cNd9'\qN+JC*DilYlC(eP^Pd_WCdc6',\3l&=RR]U%7uDTrsd(lI?+oFKPT-Ca%6pTejcT*W1Zr8_'e6#PsPaC@#kEA%UW+L?7"@/&.*_*_mN\M@"INC0V$M4M1G;RT.u6MRj0_XNo"Bj(-GC\TjbEip(_',C,\%-q&*FB=AYNQ7:d]C2(Ch82n%`Po<1C6D0[YTdj2/36n<7Qa:W,a:G0/:6oD8j.!Cmhn2&s, -%:kCR'QonTZ*/W(S=%RgN"or`nlD>$GlPTpOYM#!+H4HB]g$tNbOJ(8Q78k\J\/<0.oBMO;^hM>@E_GB@#,$"8p0PE^%fLt? -%:Ka!lWiZGjVKZgi&"YQ)j2JFOBV!am0Gp+X!Q5m79e^lT5/&;Pe#a@5D0pk0,F4c&7^U5J/#@>u9-eCclfNdf0-:N`0UP^0GH@69`[l,cui*T,Vk#k3A]SMC0Alcu'S$]6eWC'UXF]n[IOK58gMu^S`'fq1HlWu(pYI"*P4PjCptaXUg=Jn?7c8i"ajb0?WS1#4mLKQ+XCGiTJr8LBtDI8UFP^QC//32hi_Tll8I- -%:bUQHX/)gtJN)oVqK&,7e)CUhRD%\/1&l-$.D7?P%'.:M9oW`G,"Xqq@\kTtPE2ME>R\:]Y[q#i\SWO`Z"C,`t#HQnMF=X*X!;#;K%8X[9aoA,FQ0*ckn+"*FcYcMdHUm!o_2;W@/$2Xj:`@=ohX+S%AQ;0Q342+Uo5Rau0b!XUU0IOjB",*cLLG=W9^84\W5/[1k2_%-^t.61dT8Q$DAek9ML -%:=Xs5[EX!m@>kq/TsmMMMf@T$YVUrAj(Cc?X'+Fr_C[][5>JukP^<;Hu*m7Md@CZ1_"-]gt8`gOV-L;nRS=D:&;sLjcZ2+]Mg1s!O3BJSgAs!-S%SoTO\;M7eZ\4<6CaY/3Clb8mg8_lA4Z"d3'qi>6h?.k)ZntMt((=2_#[Ikc%JC6gIg%%Jjsthd%M^QggW9'r*q92.`LDiiE(4`gr(rM.':S2tMqNX(q(D36g+$:%i*pYtSi"H5#7+aGPTQOtgCoaMsjc"fQR*b9.L:7'eOGMXG^B3k1f(2NqY_ -%:P"Glf+6hDX:#V;mb]jkD_"hX83+2ZpZGtuU^H-'r$t_uJ,'uWq_!XI4o1^gsM==M[ne7>"=qCE<_Z8J)=nc^/_rf//g-/UuA=`4%@p\uaLCg\[b)tXR9,`pS1ASlV:pr?1_Qk2*6GZpsSj_8H'-%+R!S%S5P/4coZ64[BVW&GGf]imO9N(]*$"?uCJ%M>g_[VKhc1@f*rC -%:e<@No*_+Vl8`dpJ1YT`>'cA%>L&o'Y7Yg\6;&jkad@h"sjd?8u$TuAMDurq0LXLGYio/H0KT%unj#VCdCJA;.H,NQ.L3T++\)VInW\34E_1Pa1FgVIKHO^j2Y8ZT1K#W"igJ^'o#$4Q7DsgETjK(MHUFnYTQ3C?+]9[`HbhoF5LW%*@pK=Z)%d?.X*6VYmV6^Y3ZR/npILooYn$C(fRrg!-'A-qi!]ZLZg-@V[JhK\!0GOoerd!9L -%:#oNHtNg?o*(XnVf+FsF`'J:^!_3^*K!'d=:?:b,-DdXkA*:K&WVs*(/QqQgtbsDD7/ZrA\D(X]V/'A60fK(+JEItJp)^'W$afp!"f4m<1)-d?6)f0U953:0m8]^/]U4k0K_O[n0mbJP#W+qQ1bI^s;j/tPT1Oi$q.T1O?mW77No\0 -%:PdCHXCFlkI`4qEm"'4%=*YtoZ2M`3U]a&5,B2KS#9RLbDB`g82S!OemHfqa:FW3\uc2nfNU?U)[\0kbtSH)WBD+Yc*4Hnc\Tsa6J -%:E:BZiOpol*1JJoN1aXsU'891h;+tkjmCKjfV6CSCR\J$C(m7sS^s-s$$RtJU:kNHm&hrlF)r*N;]*%Tnf*:acW1jBP>tqMjcme3W:L?6V'\s>B!K\7X-].UKVICrW#R(`)6&!he%,JThFs.Wm2>`>N/INEe%+b&Z=?\_I##Y(BOMe$0]d02aAH2Opc8RuVmK(I[uhs,V_;)mX4%q>e)j/H5B3!-XYq_k7A0W?RAMg(nEeiR$R -%:+cg!3a6MfLOMD68iAEX4U0p,po5$r$!Oc\5ZpEjP41[R#\pCk<"HJ2\UE$XWSi..Ua$Vd])c5B?erLlfh,[A$.Q=Pd6tc+u#8`>+]QpFli0Yu7KC_!>>ne+BJKHoaO3cQCk7ln;q0X=<_7][P:KH`Bfc8q!0"sO@2GY:e-e1>gIe04lFRo)&#6>,ZH-#,^"+;`ggH:Cm`Hl<+a0+./PakkC_-]D`JU9=O)orN3(1tnR -%:KJV\*lk:3B;Z;iRfYk5(NS@(SpG^:QqM9'WE3J/j*#eHn7f-83k7&T:f[a[#gjO]aP&DbiU$F-&J])-@jX/daB@;itO$i3dD]#e-=phh>C,5M(7V?0rdPJMiWhc+e0JZhsA54U(tHhJQZfa&@Kmiab;clU_m7Dh'`18b_&/o6=<]K\$kZ*H1Z5U9MhV70bf+]',YB9T*_6:D=Rp5QBKWA1M\]U*,RfCpSqG*MATPR/D1KVR.@TdRlB9Z'\mN24Qh=0\eMm7BX;#Umd_`P[EQK=OeG\s@#44^8K%L&RqAVhbjrM#>n'E7;<(8o`WU\\0*++sI=oS">.mF\N'e4@s@Fe6*ZiS2iFW[Cj&fK2&^kQCfF0!IbiZu#MZiO%)#,35Yd7"lT3EI8N?k)P?+N3h<)rQ7u.!4T^H1b3C:u#gU\$qPD -%:5%,)$+RgrqTa`-b2u8M\grs5fCBJHUjC?:,F00DtNAtFLpnp"]UEC'g/lr&GV7s&:UTF'j>;^H==\7=44Hk&'G+cK+V^)RrV#oG:$uh);VTX5D#q&'[E*`unBZT_k*^HYc9_KGEb5H%)'5<(3VC6K'(FcVs_*^>Mrg7@$.KjLXp7dZHU=5Qbj>"u=WK`Zn -%:O]1Y`60AXVUT+ZMXR)nsO;l<]e-5trmYF.B`A;'!;7f('jIZIBF:l]Z+oH/+,bihE%$u8Cg0iRR*suB=mY/^U;c+=%"XreuFU0Qe>Z.kQ2C+D!pMHM6j4_;]Xp%)CSB\A]Lk@p6ok]8K,VTcmp&@&O"0="rbD&6'dL\,M]bJ -%:EGqCFE7]]\*I&>n)[+KtSjHR]V`]lX9tT^!D]Cr2>:%te?Aj1si@#KrdeGD1[gfA5bRb?"J[3[6%4238W>mEoj+&T0WX7WUD6W2$"#K=%b1D39p^e?6NucUPrcrN=bWQ<4cWnI66d6>a1)&66)2d$#^532+-.8MNlu$SkTo<9)m$D[TJ<^WK@J!rR-4Xm#9##tpW,F]`M*`M+*_M(sXcp'1)&nPn#UBEol>uPTWCto=1i_g(VS+*5 -%:iF`'WKLc.;g&RNInMSkEpf7j+8l\TgVk=.]>g@#Y2"m>RmAKbHch;VEoiA!+fT=I2\O;%8jqh_O.>euAm>F\'&*.;j'hF_.4bUOJ8g?2NZPV -%:3B*EPCbJHod8P\N7s.jLABRS<0*FCHAe'tKndH?:DU&T#RXt1*4M!O\Uf8;6DrWahThqL8!*-0-=@$i*%3c/o/:o:,"g;^FF"8SGB75m!8FfC+n::HN$mV?,?m2iZl&>d[oTCGmL%%>br^gf>9; -%:]\6IAjhbkaI60b_QLspE`>B/:S#FOGk,)."+IrS3IY4F=N.bZc7G8t^P*0u+i`JfIq)P+mLQqEW7]ot$Yg*P9f48MA$61L+^F`'QR0#V$9A],om"*eX//nu1d';3]j'ZFsCLj)&WrU:$m@Tb(_rP7*kj5n_TsPSB58jKrg%@ig]=>OlUbRhY2mr<#.D>pm+Lg4S-W;Qlp;\("!?UP!V3Ce/);C*=jE%+p;+>a:,25IhY24ORFiX=s!-GjiJ8T+PfMo`pd4RF;TH4)Yb/i+p!lAmo],k&]"n9-d2@M=>`n"[3\T+/l1\\(B15_Ci*J['M+8#d?f6&h?7mK"DJ$_\"h)N1;%Iu(BF,=?lR-eC%lnF3mq?9hhN9.1;"('?S5`+\9lYRg*XJBrrt@R-B53pn1cUsWK#UrW0*OB>r_["5u@O`IK'ArA6Ra\*7_dg#E(kdI-# -%:JXuj%ip^JOC76P!g7WQ#rG/4+(d#I&$>#eQZYU,_,!/k&XjH'S_s<@Mn-01pd5_^$oROBE/8?fE6qoBp@$:!!'&_\2QDH.[Td0 -%:V>soLb*5mSf0]NAP92.4,[jY\o[,CBIk[QDKX6]!RH$$-)e.^o[,!!%:BOI&#(G_b+1a@(2a.7jL>[sdhCkYBj):h;t'`GmLU!!%_Fh**i1*<_BN[R2EGS72Hu5-PRZ.6Gf9Q#>2>2mf),!!#MQo=:2%A^R8?;O"4Jh)bT:R^V#+#`>bJ[%_O$ZEqV[!!#?4ceHi6nc?MG9mCKER\p,c4a:LNVX)3[/X1:SUQdT?JLX/tuE)`6rqV$T>t,*7N/!!!bZXh?pbXcX8b%\oZ6V?[)$\1t7SX\d2aHnsn3c-^Ji!!(]>_6)_!h1;Lc>fV]NgNuqm_ImV&B=6DJ^a5d@uROgS4eLK\=hM!!$R'3B'-gq%)r$iht*VfKT?9qJ#Wk6UJ9cZiDGZ>$ufW!!'KY&?#gA$W/JhG?m-h25^ES@(E!]g7[0$C_+rtj-/1.!!")t01i9QD'6$WIi&WNeF3G"]#*uBQpMR?;eTjfT7^lh=aG%!!#/e@tNn:O+9D;c59CcC]"/4.XZ[5 -%:CkC>:W8/`CG!g$3^T!!#]a2W%Or7*$1l*\p&qa5[."aX)Od7I,cfIa"&gd0&UHa[U)N+)dWLEcWdN6U<^02._k."CmF'5!!#h=0V0#Dp5SQfRT%&QG6n6L8)OF5K?bX[UPUSV'l"?)!!)sI^!@T"Cg+A;][+N_$'P>h3Ti4"J+`oHqK+diOk!N( -%:<:?L%!!!!l[aV6ZFP6hRT/k5+Ho_6-j^=tXM@l!!&dlQ8]%j8l<1iVbsd1SeD)(nLXc\_k\8kd&(0n'312i!!(:MYt=,!Rl*pe1#Q]Tbrbt+Bp#a:ZsfeYQRu>K;(]/1!!'>'O?!fFFHA7`OE9WM2iI_:Ab?Rlp/'#nRN6+GW5l)T!!#SfB.,&p?(qMR_tJrKBo`5o,?Zkd+DQO7Yjj]u2DcHh!!&D;'r0#>*bCfL -%:`4!;A"S5t>PW&RBX@BosFqF$V)C:%pE+t8A!!(iI:tNZ8">8?&WRhq?R'$9*eRa]Um-!!:UA_*d2Z%!!#B79k1':I%=4\Y@WcV?6T@L*Ko2'F3nNPB_:<54hNBn!!$c*=c2gRA,$\2"9'W^&#B7+gq)[S -%:l_nfH[t/EAh3268E>Rn1!!%^79fbm&jc@:;HAe_#8jE@VrhQ%C@E1)>'J,QX""ajN!!)IKlje\h,]f3s+=f9g4So*Ym@O6f%V]%c&La$FD;=Nl!!(a-GFL8*mghH,mlk!*n^RU>qSr3tTO$U@n*>a94rFfB!!'nij_'$)4dsKR0:rZVY(coVTD6h60)OPjjRelOJZr>W!!$0)^iBUE/$N90jU*P?@(?[G!m;<\+9;Qe!<]L?(p/ZX -%::NQcS[IT=7!!)ubQ#Ee+XT"d@^Us>hX+(*LDtWS&re&aN\FRn0n*U[H!!(jb59.-bYKhnZ"so3/J*$_2s1J9Sg[iO^+!+cpT3biO!!*&*qW$:BO,blR/k;fU+2.^Ts&mccIK%2u^\Qup^&53@!!%A8^%^uaO#.^IkZtLaeXHO=bt"CSroD2%.9'E12DU>P)E](c7K+PmNbs9!9\RKLB%r[8bS'Qr]*A+OaA!;L#'9J%6Tja6Z1d!,Bh(B=I'kKf(+1M;$m$n]GZ/B%Yj!)-qr1Of;mY\0i^FGM[G3rf8Y(I,G-*E*Fip2K,8mT6.`!4.anMlRc4,&$oj`l1ANe!;e?+i*m(sH@ufuVJJP1('">hZWVX6Bp1]?Hq=8mkL\$&!5DW"9;D#$pZi7\8jCjYp<*F9;!Eb\ -%:=u6kA`-#A`m:A)9eT>uo!!#>KJ)Qcq%)kn-/QdnX\W6^j^qe?9.o40T/`dcG66+h@!!#.ESDDNW?f[6<41fQ_rP\a:g=*&t2kE7[rH`a4e_ss!!!%;+fg!p?_cu8E0XT -%:=m]qK!!)buE((Sd`0/[M#]5(Djo'Hs(_APs&`TQ!!)bD^3]MXYDNID]r<)qW`fB&mI;)arVk45r;Zi;2cfq5m]4U?Q'LfcJrG3[!)1e`l]XiB\%]?Bo\'(Sc>!Mj -%:oDelDkKcZk(MgDVk/slOO(XUU!5:*l#qC43jd0%tFeucl\GuVM[;ru:>ab*Umu3:1'ho):!;9ql-D5jIkb*EO0tP$^ScAcId8H>A?@K0Y\/,'+WitLa!<;n;rJTGqf,?n._]Sj6?N:(/q%I*EY@h(+8*T:.NTVQ7pVe&=TAG)q,8fYc@7@Zn\80*o'0Q^!*T9$X+,!ZYHRrnlJG_BRfEGhIr"^qYPt2O7HM-0srnGtQ[f?F)moTP,l@3(;:TM7FqO^gh!<:7-IpN"kCu;Gg:=#!)h#IFVLB%'L^A!,ZrqFtCTta_1!*rb'J,_J*gWF_hMuDYMiW&tN?Q(Xq53r2e3kk:-q"ZQC!3U_;?)Pll -%:I`&Y;T5XW2rnhXr]Dqs0dsl)lQbLS&X8gX,lb!&p!;u]n"45nU\H#>*QiN=>B`J-LART%aAH2d06?73iBN/[O!,qo>;-3eu!_>^fFCeEcD.N\I!!5JcH#7#/CdW#IF)q<^!!(ML6tp.Q!!1GH;fm%oDJ&qL!!+cMATDj2ARfgrG%F0a!Q]'De!P_!0U"b6tLFLEbTK7Dh&BQ#i&NoDfT[p!S:@S#64e%<%nkl@P@dG%fd&)7mogb49GUp:i[6MDfABG$",[l@qB1nEb,4PF@QEX9P&*_;#p^5<,$5lIgc@l<'DIc!^[Fu!L-Uq3<3.n!3\n8Bk1d9+HR-C;fHZ7!Wn?Z@:s4aA2aWp#E2(WP7l.= -%:#^C;sDN"PrWDm;FATD#VCfgZL!!.+<3!j#2B06k0N`0_)FCT!9@"ncA7!3'_H2muZ63oUPC]FNo6I6T4%QFH14sU2j<,uDbF&*d*!!,_R(BFML!!'r2@Y,ZK>66VbO8&7riNjDu]kc6#q!a90mc&$3G33!bF@r3WinR*)^3UBjjXAJnR7K84.3-E*rbLCH2DS!d'h6!#Wie0EKN$O?ik4!!1FH9L/YE!!(XOc2[hEc2c,ic2c,ic2c,ic2c-4!!(;#!@Ijp!%.ao!%.ao!%0N%!8(ib_#se#1BR%Go)MGcF9(ff(c_`;!:WJY!*'"#G62n]!(-_do)TdKn6,VoY%!&$>8%6":=!:tgF!D>i_!d#nu!D>?Q!rr83#k%g\"AK#Q!'(*,"TsY`K`K!lJH:H)K`Jpj;\H)-rBC9J!'pTN!)jb0&cf,Y)DMkK!ET7Y*]Y+83<5"G?P`a-!*pLK)i=]X2$'$g!=/aB!d0$9:B4f)3?!`K"TgI[>lp&gLZXpt -%:N<5.@aS7H-#r;TB*\.:!4W][dQNE$t!=X$"#QeN$U4_T#qZ/]O*qA=&75SBMN7s#!6l.k.;JsFMZKdl0fM$GD\>PE!gkbK@n@L9ucA8Lcq)6O7]u#XJGZ#Qg!\"%*>G!!!([rV:@78HD0^0b$2^9gf&:(-O!?"\Bb&![RjQ!gPbkJ+AOi$:=m@!i6&\'K6Lb).?6(/SP8Z%0Dfm#Qe@hN\_R"B`q!53t*o>3=/,IW<,UR!_eNs"+3NXT1Ql]1PR#0*Y74"XaOi-O4B6#APUkC*s7$-O4B6#AQa65ld7a5l^sW4%qt"76O(&8n.ig-NON:!BC3;8--NrIn<:%3]R9-A+K]rYsQ6=:IS/9>gltO"#0gF>o@TS!8-T;lMpr"1BpB9!KCSP"Ju4O!.R6/9*d[hc&!!"rZ9HaE>+TVQp!!'tC^n3`c -%:.00E#!!#:h;0,_Gs8Ri\0)u&,!!:%BaT-5^/HPu,!!6d70*hV4!!(1G.00E#!!"/G"sX0Ls8OYN!%e0N0*VhV!T>1n-T)--Ej$-L.UaPr!CHsG!Qb>`!<<)@!6G5_!6G3a#6;jHaT0E_aT0E_aT0E_aT0E_aT0E_s8U1@aT0E_aT0E_aT0E_aT0E_aT0E_aT0E_aT0E_aT2A@aT0E_aT0E_aT0E_aT0E_aT0E_aT0E_aT0E_9LV!8 -%:aT0E_s8U1@aT0E_aT0E_aT0E_aT0E_aT0E_aT0E_aT0E_4]DAF>Fpg/9`RHZ5l`EE"bC)H2?HfI"?-DN@!uES!CI%jjc*^9!'aY.YuA=t"@WGd3]-mpYsiC/;DS;M@g;u5`rp$bu'-L!ODl5Z(h*YJ;GMdFr'kIP1&opbL9+/iA8H:mUWBgM;%L>9$]:hjt[JM`^*bD@""7F-Ue>+aK7fiY&/HYu=!K.$$!3#rg!$_RG0,"Q_RW:asi=\Ed:IP>GcM`Lu7goHU2ZhGJ6NI3>!t9)^2$8+3.09T+*03)frV]Y=3u9=I%>tKD!Z61dn0J5L4TmJ@MZlHX-Q``:)bZk,s7q-RDZEuMNrVfVM#c'K2_R#mGJbSn -%:3Hq;=M#oaeF903;H1p%Z!:'XN!:'Uc*^'p31dqE+*d8`#@gP:!n14M=o.u3"1CXdN!'B:4#rMbR11^QE$8DT.*AH4mO2=arPqsTg*-/er/!Cm8K]$Q$.73Fc&!!"SN!<,/6!!"SN!%e0N/H>c&!!"SN!*oTo!3)M$B+$d51CSKt!e6i)57g'L6h!\D7IdJkV%Q2t!ff/+3V-tR@fRYb")m(;,m"3t&ooW-![e!U-NOR@!A=]\R/qGA,sr,U$7>i]QN@-d>m)GU$!RFc'(H-.!@IsZ.ffr($=-:Iq@g!o -%:5la\9:C'H2>p*W4!$)=HE<:7aMuo%?a@cPD%T<@$cN';\P62'l9f1X>!]:*82ZQi)-QrIc!`/V^!dthWs1^Js4XB=nlMt]#AHGRWVZ8F[%A'HmMXs8VBlWP-VZ"uso034K!(AJ5!&1g9^Ceam -%:!!!#(!.b2o!:U![!;Sn\!d"H9!d.iM+8kp7q8H8e<+92FQ3rnaML.5ufFCdjO@rGm#!+c-2s-1q&*mF9= -%:~> -%%EndAGDEmbeddedDoc -%%BeginResource: procset Altsys_header 4 0 -userdict begin /AltsysDict 300 dict def end -AltsysDict begin -/bdf{bind def}bind def -/xdf{exch def}bdf -/defed{where{pop true}{false}ifelse}bdf -/ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf -/d{setdash}bdf -/h{closepath}bdf -/H{}bdf -/J{setlinecap}bdf -/j{setlinejoin}bdf -/M{setmiterlimit}bdf -/n{newpath}bdf -/N{newpath}bdf -/q{gsave}bdf -/Q{grestore}bdf -/w{setlinewidth}bdf -/Xic{matrix invertmatrix concat}bdf -/Xq{matrix currentmatrix mark}bdf -/XQ{cleartomark setmatrix}bdf -/sepdef{ -dup where not -{ -AltsysSepDict -} -if -3 1 roll exch put -}bdf -/st{settransfer}bdf -/colorimage defed /_rci xdf -/cntr 0 def -/readbinarystring{ -/cntr 0 def -2 copy readstring -{ -{ -dup -(\034) search -{ -length exch pop exch -dup length 0 ne -{ -dup dup 0 get 32 sub 0 exch put -/cntr cntr 1 add def -} -{ -pop 1 string dup -0 6 index read pop 32 sub put -}ifelse -3 copy -putinterval pop -1 add -1 index length 1 sub -1 index sub -dup 0 le {pop pop exit}if -getinterval -} -{ -pop exit -} ifelse -} loop -}if -cntr 0 gt -{ -pop 2 copy -dup length cntr sub cntr getinterval -readbinarystring -} if -pop exch pop -} bdf -/_NXLevel2 defed { -_NXLevel2 not { -/colorimage where { -userdict eq { -/_rci false def -} if -} if -} if -} if -/md defed{ -md type /dicttype eq { -/colorimage where { -md eq { -/_rci false def -}if -}if -/settransfer where { -md eq { -/st systemdict /settransfer get def -}if -}if -}if -}if -/setstrokeadjust defed -{ -true setstrokeadjust -/C{curveto}bdf -/L{lineto}bdf -/m{moveto}bdf -} -{ -/dr{transform .25 sub round .25 add -exch .25 sub round .25 add exch itransform}bdf -/C{dr curveto}bdf -/L{dr lineto}bdf -/m{dr moveto}bdf -/setstrokeadjust{pop}bdf -}ifelse -/privrectpath { -4 -2 roll m -dtransform round exch round exch idtransform -2 copy 0 lt exch 0 lt xor -{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto} -{exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto} -ifelse -closepath -}bdf -/rectclip{newpath privrectpath clip newpath}def -/rectfill{gsave newpath privrectpath fill grestore}def -/rectstroke{gsave newpath privrectpath stroke grestore}def -/_fonthacksave false def -/currentpacking defed -{ -/_bfh {/_fonthacksave currentpacking def false setpacking} bdf -/_efh {_fonthacksave setpacking} bdf -} -{ -/_bfh {} bdf -/_efh {} bdf -}ifelse -/packedarray{array astore readonly}ndf -/` -{ -false setoverprint -/-save0- save def -5 index concat -pop -storerect left bottom width height rectclip -pop -/MMdict_count countdictstack def -/MMop_count count 1 sub def -userdict begin -/showpage {} def -0 setgray 0 setlinecap 1 setlinewidth -0 setlinejoin 10 setmiterlimit [] 0 setdash newpath -} bdf -/currentpacking defed{true setpacking}if -/min{2 copy gt{exch}if pop}bdf -/max{2 copy lt{exch}if pop}bdf -/xformfont { currentfont exch makefont setfont } bdf -/fhnumcolors 1 -statusdict begin -/processcolors defed -{ -pop processcolors -} -{ -/deviceinfo defed { -deviceinfo /Colors known { -pop deviceinfo /Colors get -} if -} if -} ifelse -end -def -/printerRes -gsave -matrix defaultmatrix setmatrix -72 72 dtransform -abs exch abs -max -grestore -def -/graycalcs -[ -{Angle Frequency} -{GrayAngle GrayFrequency} -{0 Width Height matrix defaultmatrix idtransform -dup mul exch dup mul add sqrt 72 exch div} -{0 GrayWidth GrayHeight matrix defaultmatrix idtransform -dup mul exch dup mul add sqrt 72 exch div} -] def -/calcgraysteps { -forcemaxsteps -{ -maxsteps -} -{ -/currenthalftone defed -{currenthalftone /dicttype eq}{false}ifelse -{ -currenthalftone begin -HalftoneType 4 le -{graycalcs HalftoneType 1 sub get exec} -{ -HalftoneType 5 eq -{ -Default begin -{graycalcs HalftoneType 1 sub get exec} -end -} -{0 60} -ifelse -} -ifelse -end -} -{ -currentscreen pop exch -} -ifelse -printerRes 300 max exch div exch -2 copy -sin mul round dup mul -3 1 roll -cos mul round dup mul -add 1 add -dup maxsteps gt {pop maxsteps} if -dup minsteps lt {pop minsteps} if -} -ifelse -} bdf -/nextrelease defed { -/languagelevel defed not { -/framebuffer defed { -0 40 string framebuffer 9 1 roll 8 {pop} repeat -dup 516 eq exch 520 eq or -{ -/fhnumcolors 3 def -/currentscreen {60 0 {pop pop 1}}bdf -/calcgraysteps {maxsteps} bdf -}if -}if -}if -}if -fhnumcolors 1 ne { -/calcgraysteps {maxsteps} bdf -} if -/currentpagedevice defed { -currentpagedevice /PreRenderingEnhance known -{ -currentpagedevice /PreRenderingEnhance get -{ -/calcgraysteps -{ -forcemaxsteps -{maxsteps} -{256 maxsteps min} -ifelse -} def -} if -} if -} if -/gradfrequency 144 def -printerRes 1000 lt { -/gradfrequency 72 def -} if -/adjnumsteps { -dup dtransform abs exch abs max -printerRes div -gradfrequency mul -round -5 max -min -}bdf -/goodsep { -spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or -}bdf -/BeginGradation defed -{/bb{BeginGradation}bdf} -{/bb{}bdf} -ifelse -/EndGradation defed -{/eb{EndGradation}bdf} -{/eb{}bdf} -ifelse -/bottom -0 def -/delta -0 def -/frac -0 def -/height -0 def -/left -0 def -/numsteps1 -0 def -/radius -0 def -/right -0 def -/top -0 def -/width -0 def -/xt -0 def -/yt -0 def -/df currentflat def -/tempstr 1 string def -/clipflatness currentflat def -/inverted? -0 currenttransfer exec .5 ge def -/tc1 [0 0 0 1] def -/tc2 [0 0 0 1] def -/storerect{/top xdf /right xdf /bottom xdf /left xdf -/width right left sub def /height top bottom sub def}bdf -/concatprocs{ -systemdict /packedarray known -{dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse -{ -/proc2 exch cvlit def /proc1 exch cvlit def -proc1 aload pop proc2 aload pop -proc1 length proc2 length add packedarray cvx -} -{ -/proc2 exch cvlit def /proc1 exch cvlit def -/newproc proc1 length proc2 length add array def -newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval -newproc cvx -}ifelse -}bdf -/i{dup 0 eq -{pop df dup} -{dup} ifelse -/clipflatness xdf setflat -}bdf -version cvr 38.0 le -{/setrgbcolor{ -currenttransfer exec 3 1 roll -currenttransfer exec 3 1 roll -currenttransfer exec 3 1 roll -setrgbcolor}bdf}if -/vms {/vmsv save def} bdf -/vmr {vmsv restore} bdf -/vmrs{vmsv restore /vmsv save def}bdf -/eomode{ -{/filler /eofill load def /clipper /eoclip load def} -{/filler /fill load def /clipper /clip load def} -ifelse -}bdf -/normtaper{}bdf -/logtaper{9 mul 1 add log}bdf -/CD{ -/NF exch def -{ -exch dup -/FID ne 1 index/UniqueID ne and -{exch NF 3 1 roll put} -{pop pop} -ifelse -}forall -NF -}bdf -/MN{ -1 index length -/Len exch def -dup length Len add -string dup -Len -4 -1 roll -putinterval -dup -0 -4 -1 roll -putinterval -}bdf -/RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch -{1 index MN cvn/NewN exch def cvn -findfont dup maxlength dict CD dup/FontName NewN put dup -/Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf -/RF{ -dup -FontDirectory exch -known -{pop 3 -1 roll pop} -{RC} -ifelse -}bdf -/FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known -{exch pop findfont 3 -1 roll pop} -{pop dup findfont dup maxlength dict CD dup dup -/Encoding exch /Encoding get 256 array copy 7 -1 roll -{3 -1 roll dup 4 -2 roll put}forall put definefont} -ifelse}bdf -/RCJ{4 -1 roll -/ourvec xdf -256 string cvs -(|______) anchorsearch -{pop -cvn -dup FDFJ -exch -1 index -eq -{ -_bfh findfont _efh -dup -maxlength dict -CD -dup -/FontName -3 index -put -dup -/Encoding ourvec put -1 index -exch -definefont -pop -} -{exch pop} -ifelse -} -{pop} -ifelse -}bdf -/RFJ{ -dup -FontDirectory exch -known -{pop 3 -1 roll pop} -{RCJ} -ifelse -}bdf -/hasfont -{ -/resourcestatus where -{ -pop -/Font resourcestatus -{ -pop pop true -} -{ -false -} -ifelse -} -{ -dup FontDirectory exch known -{pop true} -{ -256 string -cvs -(fonts/) exch MN -status -{pop pop pop pop true} -{false} -ifelse -} -ifelse -} -ifelse -}bdf -/FDFJ -{ -dup -hasfont -not -{ -pop -/Ryumin-Light-83pv-RKSJ-H -hasfont -{ -/Ryumin-Light-83pv-RKSJ-H -} -{ -/Courier -} -ifelse -} -if -}bdf -/FFJ{ -_bfh -dup -256 string cvs -(|______)exch MN -cvn -dup -FontDirectory -exch known -{ -exch -pop -findfont -3 -1 roll -pop -} -{ -pop -FDFJ -dup findfont -dup maxlength dict -CD -dup dup -/Encoding exch -/Encoding get -dup length 256 eq -{ -256 array copy -7 -1 roll -{ -3 -1 roll -dup -4 -2 roll -put -}forall -put -definefont -} -{ -7 -1 roll pop -pop pop pop pop -findfont -} -ifelse -} -ifelse -_efh -}bdf -/GS { -dup -hasfont -{ -findfont -exch makesetfont -exch -pop -ts -} -{ -pop pop pop -ts -} ifelse -} bdf -/RCK{4 -1 roll -/ourvec xdf -256 string cvs -(|______) anchorsearch -{pop -cvn -dup FDFK -exch -1 index -eq -{ -_bfh findfont _efh -dup -maxlength dict -CD -dup -/FontName -3 index -put -dup -/Encoding ourvec put -1 index -exch -definefont -pop -} -{exch pop} -ifelse -} -{pop} -ifelse -}bdf -/RFK{ -dup -FontDirectory exch -known -{pop 3 -1 roll pop} -{RCK} -ifelse -}bdf -/hasfont -{ -/resourcestatus where -{ -pop -/Font resourcestatus -{ -pop pop true -} -{ -false -} -ifelse -} -{ -dup FontDirectory exch known -{pop true} -{ -256 string -cvs -(fonts/) exch MN -status -{pop pop pop pop true} -{false} -ifelse -} -ifelse -} -ifelse -}bdf -/FDFK -{ -dup -hasfont -not -{ -pop -/JCsm -hasfont -{ -/JCsm -} -{ -/Courier -} -ifelse -} -if -}bdf -/FFK{ -_bfh -dup -256 string cvs -(|______)exch MN -cvn -dup -FontDirectory -exch known -{ -exch -pop -findfont -3 -1 roll -pop -} -{ -pop -FDFK -dup findfont -dup maxlength dict -CD -dup dup -/Encoding exch -/Encoding get -256 array copy -7 -1 roll -{ -3 -1 roll -dup -4 -2 roll -put -}forall -put -definefont -} -ifelse -_efh -}bdf -/RCTC{4 -1 roll -/ourvec xdf -256 string cvs -(|______) anchorsearch -{pop -cvn -dup FDFTC -exch -1 index -eq -{ -_bfh findfont _efh -dup -maxlength dict -CD -dup -/FontName -3 index -put -dup -/Encoding ourvec put -1 index -exch -definefont -pop -} -{exch pop} -ifelse -} -{pop} -ifelse -}bdf -/RFTC{ -dup -FontDirectory exch -known -{pop 3 -1 roll pop} -{RCTC} -ifelse -}bdf -/FDFTC -{ -dup -hasfont -not -{ -pop -/DFMing-Lt-HK-BF -hasfont -{ -/DFMing-Lt-HK-BF -} -{ -/Courier -} -ifelse -} -if -}bdf -/FFTC{ -_bfh -dup -256 string cvs -(|______)exch MN -cvn -dup -FontDirectory -exch known -{ -exch -pop -findfont -3 -1 roll -pop -} -{ -pop -FDFTC -dup findfont -dup maxlength dict -CD -dup dup -/Encoding exch -/Encoding get -256 array copy -7 -1 roll -{ -3 -1 roll -dup -4 -2 roll -put -}forall -put -definefont -} -ifelse -_efh -}bdf -/RCSC{4 -1 roll -/ourvec xdf -256 string cvs -(|______) anchorsearch -{pop -cvn -dup FDFSC -exch -1 index -eq -{ -_bfh findfont _efh -dup -maxlength dict -CD -dup -/FontName -3 index -put -dup -/Encoding ourvec put -1 index -exch -definefont -pop -} -{exch pop} -ifelse -} -{pop} -ifelse -}bdf -/RFSC{ -dup -FontDirectory exch -known -{pop 3 -1 roll pop} -{RCSC} -ifelse -}bdf -/FDFSC -{ -dup -hasfont -not -{ -pop -/zh-gbscript-1.11 -hasfont -{ -/zh-gbscript-1.11 -} -{ -/Courier -} -ifelse -} -if -}bdf -/FFSC{ -_bfh -dup -256 string cvs -(|______)exch MN -cvn -dup -FontDirectory -exch known -{ -exch -pop -findfont -3 -1 roll -pop -} -{ -pop -FDFSC -dup findfont -dup maxlength dict -CD -dup dup -/Encoding exch -/Encoding get -256 array copy -7 -1 roll -{ -3 -1 roll -dup -4 -2 roll -put -}forall -put -definefont -} -ifelse -_efh -}bdf -/fps{ -currentflat -exch -dup 0 le{pop 1}if -{ -dup setflat 3 index stopped -{1.3 mul dup 3 index gt{pop setflat pop pop stop}if} -{exit} -ifelse -}loop -pop setflat pop pop -}bdf -/fp{100 currentflat fps}bdf -/clipper{clip}bdf -/W{/clipper load 100 clipflatness dup setflat fps}bdf - -userdict begin /BDFontDict 29 dict def end -BDFontDict begin -/bu{}def -/bn{}def -/setTxMode{av 70 ge{pop}if pop}def -/gm{m}def -/show{pop}def -/gr{pop}def -/fnt{pop pop pop}def -/fs{pop}def -/fz{pop}def -/lin{pop pop}def -/:M {pop pop} def -/sf {pop} def -/S {pop} def -/@b {pop pop pop pop pop pop pop pop} def -/_bdsave /save load def -/_bdrestore /restore load def -/save { dup /fontsave eq {null} {_bdsave} ifelse } def -/restore { dup null eq { pop } { _bdrestore } ifelse } def -/fontsave null def -end -/MacVec 256 array def -MacVec 0 /Helvetica findfont -/Encoding get 0 128 getinterval putinterval -MacVec 127 /DEL put MacVec 16#27 /quotesingle put MacVec 16#60 /grave put -/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI -/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US -MacVec 0 32 getinterval astore pop -/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute -/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave -/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute -/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis -/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls -/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash -/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation -/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash -/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta/guillemotleft -/guillemotright/ellipsis/nbspace/Agrave/Atilde/Otilde/OE/oe -/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide/lozenge -/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl -/daggerdbl/periodcentered/quotesinglbase/quotedblbase -/perthousand/Acircumflex/Ecircumflex/Aacute -/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex -/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde -/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron -MacVec 128 128 getinterval astore pop -/findheaderfont { -/Helvetica findfont -} def -end %. AltsysDict -%%EndResource -%%EndProlog - -%%BeginSetup - -AltsysDict begin -_bfh - -_efh -end %. AltsysDict - -%%EndSetup -AltsysDict begin - -/onlyk4{false}ndf -/ccmyk{dup 5 -1 roll sub 0 max exch}ndf -/cmyk2gray{ -4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul -add add add 1 min neg 1 add -}bdf -/setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf -/maxcolor { -max max max -} ndf -/maxspot { -pop -} ndf -/setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf -/findcmykcustomcolor{5 packedarray}ndf -/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf -/setseparationgray{setgray}ndf -/setoverprint{pop}ndf -/currentoverprint false ndf -/cmykbufs2gray{ -0 1 2 index length 1 sub -{ -4 index 1 index get 0.3 mul -4 index 2 index get 0.59 mul -4 index 3 index get 0.11 mul -4 index 4 index get -add add add cvi 255 min -255 exch sub -2 index 3 1 roll put -}for -4 1 roll pop pop pop -}bdf -/colorimage{ -pop pop -[ -5 -1 roll/exec cvx -6 -1 roll/exec cvx -7 -1 roll/exec cvx -8 -1 roll/exec cvx -/cmykbufs2gray cvx -]cvx -image -} -%. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only) -version cvr 47.1 le -statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse -and{userdict begin bdf end}{ndf}ifelse -fhnumcolors 1 ne {/yt save def} if -/customcolorimage{ -aload pop -(_vc_Registration) eq -{ -pop pop pop pop separationimage -} -{ -/ik xdf /iy xdf /im xdf /ic xdf -ic im iy ik cmyk2gray /xt xdf -currenttransfer -{dup 1.0 exch sub xt mul add}concatprocs -st -image -} -ifelse -}ndf -fhnumcolors 1 ne {yt restore} if -fhnumcolors 3 ne {/yt save def} if -/customcolorimage{ -aload pop -(_vc_Registration) eq -{ -pop pop pop pop separationimage -} -{ -/ik xdf /iy xdf /im xdf /ic xdf -1.0 dup ic ik add min sub -1.0 dup im ik add min sub -1.0 dup iy ik add min sub -/ic xdf /iy xdf /im xdf -currentcolortransfer -4 1 roll -{dup 1.0 exch sub ic mul add}concatprocs 4 1 roll -{dup 1.0 exch sub iy mul add}concatprocs 4 1 roll -{dup 1.0 exch sub im mul add}concatprocs 4 1 roll -setcolortransfer -{/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage -} -ifelse -}ndf -fhnumcolors 3 ne {yt restore} if -fhnumcolors 4 ne {/yt save def} if -/customcolorimage{ -aload pop -(_vc_Registration) eq -{ -pop pop pop pop separationimage -} -{ -/ik xdf /iy xdf /im xdf /ic xdf -currentcolortransfer -{1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll -{1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll -{1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll -{1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll -setcolortransfer -{/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy} -true 4 colorimage -} -ifelse -}ndf -fhnumcolors 4 ne {yt restore} if -/separationimage{image}ndf -/spotascmyk false ndf -/newcmykcustomcolor{6 packedarray}ndf -/inkoverprint false ndf -/setinkoverprint{pop}ndf -/setspotcolor { -spots exch get -dup 4 get (_vc_Registration) eq -{pop 1 exch sub setseparationgray} -{0 5 getinterval exch setcustomcolor} -ifelse -}ndf -/currentcolortransfer{currenttransfer dup dup dup}ndf -/setcolortransfer{st pop pop pop}ndf -/fas{}ndf -/sas{}ndf -/fhsetspreadsize{pop}ndf -/filler{fill}bdf -/F{gsave {filler}fp grestore}bdf -/f{closepath F}bdf -/S{gsave {stroke}fp grestore}bdf -/s{closepath S}bdf -userdict /islevel2 -systemdict /languagelevel known dup -{ -pop systemdict /languagelevel get 2 ge -} if -put -islevel2 not -{ -/currentcmykcolor -{ -0 0 0 1 currentgray sub -} ndf -} if -/tc -{ -gsave -setcmykcolor currentcmykcolor -grestore -} bind def -/testCMYKColorThrough -{ -tc add add add 0 ne -} bind def -/fhiscomposite where not { -userdict /fhiscomposite -islevel2 -{ -gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore -add add add 4 eq -} -{ -1 0 0 0 testCMYKColorThrough -0 1 0 0 testCMYKColorThrough -0 0 1 0 testCMYKColorThrough -0 0 0 1 testCMYKColorThrough -and and and -} ifelse -put -} -{ pop } -ifelse -/bc4 [0 0 0 0] def -/_lfp4 { -1 pop -/yt xdf -/xt xdf -/ang xdf -storerect -/taperfcn xdf -/k2 xdf /y2 xdf /m2 xdf /c2 xdf -/k1 xdf /y1 xdf /m1 xdf /c1 xdf -c1 c2 sub abs -m1 m2 sub abs -y1 y2 sub abs -k1 k2 sub abs -maxcolor -calcgraysteps mul abs round -height abs adjnumsteps -dup 1 lt {pop 1} if -1 sub /numsteps1 xdf -currentflat mark -currentflat clipflatness -/delta top bottom sub numsteps1 1 add div def -/right right left sub def -/botsv top delta sub def -{ -{ -W -xt yt translate -ang rotate -xt neg yt neg translate -dup setflat -/bottom botsv def -0 1 numsteps1 -{ -numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse -taperfcn /frac xdf -bc4 0 c2 c1 sub frac mul c1 add put -bc4 1 m2 m1 sub frac mul m1 add put -bc4 2 y2 y1 sub frac mul y1 add put -bc4 3 k2 k1 sub frac mul k1 add put -bc4 vc -1 index setflat -{ -mark {newpath left bottom right delta rectfill}stopped -{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} -{cleartomark exit}ifelse -}loop -/bottom bottom delta sub def -}for -} -gsave stopped grestore -{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} -{exit}ifelse -}loop -cleartomark setflat -}bdf -/bcs [0 0] def -/_lfs4 { -/yt xdf -/xt xdf -/ang xdf -storerect -/taperfcn xdf -/tint2 xdf -/tint1 xdf -bcs exch 1 exch put -tint1 tint2 sub abs -bcs 1 get maxspot -calcgraysteps mul abs round -height abs adjnumsteps -dup 2 lt {pop 2} if -1 sub /numsteps1 xdf -currentflat mark -currentflat clipflatness -/delta top bottom sub numsteps1 1 add div def -/right right left sub def -/botsv top delta sub def -{ -{ -W -xt yt translate -ang rotate -xt neg yt neg translate -dup setflat -/bottom botsv def -0 1 numsteps1 -{ -numsteps1 div taperfcn /frac xdf -bcs 0 -1.0 tint2 tint1 sub frac mul tint1 add sub -put bcs vc -1 index setflat -{ -mark {newpath left bottom right delta rectfill}stopped -{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} -{cleartomark exit}ifelse -}loop -/bottom bottom delta sub def -}for -} -gsave stopped grestore -{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} -{exit}ifelse -}loop -cleartomark setflat -}bdf -/_rfs6 { -/tint2 xdf -/tint1 xdf -bcs exch 1 exch put -/inrad xdf -/radius xdf -/yt xdf -/xt xdf -tint1 tint2 sub abs -bcs 1 get maxspot -calcgraysteps mul abs round -radius inrad sub abs -adjnumsteps -dup 1 lt {pop 1} if -1 sub /numsteps1 xdf -radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse -2 div /halfstep xdf -currentflat mark -currentflat clipflatness -{ -{ -dup setflat -W -0 1 numsteps1 -{ -dup /radindex xdf -numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse -/frac xdf -bcs 0 -tint2 tint1 sub frac mul tint1 add -put bcs vc -1 index setflat -{ -newpath mark -xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360 -{ arc -radindex numsteps1 ne -inrad 0 gt or -{ -xt yt -numsteps1 0 eq -{ inrad } -{ -radindex 1 add numsteps1 div 1 exch sub -radius inrad sub mul halfstep add inrad add -}ifelse -dup xt add yt moveto -360 0 arcn -} if -fill -}stopped -{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} -{cleartomark exit}ifelse -}loop -}for -} -gsave stopped grestore -{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} -{exit}ifelse -}loop -cleartomark setflat -}bdf -/_rfp6 { -1 pop -/k2 xdf /y2 xdf /m2 xdf /c2 xdf -/k1 xdf /y1 xdf /m1 xdf /c1 xdf -/inrad xdf -/radius xdf -/yt xdf -/xt xdf -c1 c2 sub abs -m1 m2 sub abs -y1 y2 sub abs -k1 k2 sub abs -maxcolor -calcgraysteps mul abs round -radius inrad sub abs -adjnumsteps -dup 1 lt {pop 1} if -1 sub /numsteps1 xdf -radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse -2 div /halfstep xdf -currentflat mark -currentflat clipflatness -{ -{ -dup setflat -W -0 1 numsteps1 -{ -dup /radindex xdf -numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse -/frac xdf -bc4 0 c2 c1 sub frac mul c1 add put -bc4 1 m2 m1 sub frac mul m1 add put -bc4 2 y2 y1 sub frac mul y1 add put -bc4 3 k2 k1 sub frac mul k1 add put -bc4 vc -1 index setflat -{ -newpath mark -xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360 -{ arc -radindex numsteps1 ne -inrad 0 gt or -{ -xt yt -numsteps1 0 eq -{ inrad } -{ -radindex 1 add numsteps1 div 1 exch sub -radius inrad sub mul halfstep add inrad add -}ifelse -dup xt add yt moveto -360 0 arcn -} if -fill -}stopped -{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if} -{cleartomark exit}ifelse -}loop -}for -} -gsave stopped grestore -{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if} -{exit}ifelse -}loop -cleartomark setflat -}bdf -/lfp4{_lfp4}ndf -/lfs4{_lfs4}ndf -/rfs6{_rfs6}ndf -/rfp6{_rfp6}ndf -/cvc [0 0 0 1] def -/vc{ -AltsysDict /cvc 2 index put -aload length dup 4 eq -{pop dup -1 eq{pop setrgbcolor}{setcmykcolor}ifelse} -{6 eq {sethexcolor} {setspotcolor} ifelse } -ifelse -}bdf -0 setseparationgray -/imgr {9948.87 8060.14 10544.1 8902.03 } def -/bleed 0 def -/clpr {9948.87 8060.14 10544.1 8902.03 } def -/xs 1 def -/ys 1 def -/botx 0 def -/overlap 0 def -/wdist 18 def -0 2 mul fhsetspreadsize -0 0 ne {/df 0 def /clipflatness 0 def} if -/maxsteps 256 def -/forcemaxsteps false def -/minsteps 0 def - -userdict begin /AGDOrigMtx matrix currentmatrix def end -vms --10130 -8439 translate - -/currentpacking defed{false setpacking}if -/spots[ - -1 0 0 0 (Process Cyan) false newcmykcustomcolor - -0 1 0 0 (Process Magenta) false newcmykcustomcolor - -0 0 1 0 (Process Yellow) false newcmykcustomcolor - -0 0 0 1 (Process Black) false newcmykcustomcolor -]def -n -[] 0 d -3.863708 M -1 w -0 j -0 J -false setoverprint -0 i -false eomode -[0 0 0 1]vc -vms -10156.0404 8491.5296 m -10155.9044 8481.6775 10159.0846 8472.6331 10165.4321 8464.0634 C -10157.4287 8456.4363 L -10146.6564 8467.1826 10139.7981 8478.5362 10136.854 8490.8099 C -10139.4893 8489.3973 10142.5015 8488.5961 10145.7008 8488.5961 C -10149.5135 8488.5961 10153.0803 8489.575 10156.0404 8491.5296 C -h -10187.7124 8446.6715 m -10184.7113 8444.3035 10181.5073 8441.9619 10178.1005 8439.6431 C -10174.68 8441.9729 10171.4881 8444.3095 10168.4947 8446.6715 C -10165.4205 8449.0971 10162.5593 8451.5505 10159.9108 8454.0357 C -10167.5902 8461.3741 L -10170.5624 8457.8019 10173.9538 8454.5112 10178.1031 8451.1581 C -10196.1365 8465.6152 10203.1469 8482.2105 10199.2783 8501.0251 C -10178.1397 8501.0251 L -10163.4398 8501.0251 L -10164.1472 8503.0007 10164.4532 8505.1295 10164.4532 8507.3485 C -10164.4532 8510.5228 10163.6644 8513.513 10162.2722 8516.1337 C -10178.0438 8516.1336 L -10220.1112 8516.1336 L -10224.3685 8489.4407 10213.5687 8467.0735 10187.7124 8446.6715 C -[1 0.65 0 0.3]vc -f -n -10130.2032 8507.3481 m -10130.2032 8515.9073 10137.1416 8522.8458 10145.7008 8522.8458 C -10154.26 8522.8458 10161.1984 8515.9073 10161.1984 8507.3481 C -10161.1984 8498.7889 10154.26 8491.8505 10145.7008 8491.8505 C -10137.1416 8491.8505 10130.2032 8498.7889 10130.2032 8507.3481 C -[0.3 0.15 0 0.1]vc -f -n -10243.1803 8454.1436 m -10243.1803 8453.5355 L -10245.0249 8453.4098 10245.0668 8453.3679 10245.0668 8452.194 C -10245.0668 8445.402 L -10245.0668 8443.4106 10244.7524 8442.1528 10244.1235 8441.3145 C -10243.4736 8440.4758 10242.5514 8440.0568 10241.3356 8440.0568 C -10240.1406 8440.0568 10239.2184 8440.4758 10238.5685 8441.3145 C -10237.9396 8442.1528 10237.6252 8443.4106 10237.6252 8445.402 C -10237.6252 8452.194 L -10237.6252 8453.3679 10237.6879 8453.4098 10239.5117 8453.5355 C -10239.5117 8454.1436 L -10233.6634 8454.1436 L -10233.6634 8453.5355 L -10235.508 8453.4098 10235.5499 8453.3679 10235.5499 8452.194 C -10235.5499 8444.9411 L -10235.5707 8443.7042 10235.7594 8442.5933 10236.1158 8441.8803 C -10237.0801 8439.8262 10239.2811 8439.323 10241.3356 8439.323 C -10243.4109 8439.323 10245.6119 8439.8051 10246.5762 8441.8803 C -10246.9326 8442.6141 10247.1421 8443.7253 10247.1421 8444.983 C -10247.1421 8452.194 L -10247.1421 8453.3679 10247.2051 8453.4098 10249.0286 8453.5355 C -10249.0286 8454.1436 L -10243.1803 8454.1436 L -[0.05 0 0 0.75]vc -f -n -10250.3426 8454.1436 m -10250.3426 8453.5355 L -10252.1873 8453.4098 10252.2292 8453.3679 10252.2292 8452.194 C -10252.2292 8443.8929 L -10252.2292 8442.7817 10252.1873 8441.9852 10252.0827 8441.2934 C -10251.9566 8440.4131 10251.4538 8440.3293 10250.3637 8440.2455 C -10250.3637 8439.6374 L -10255.3318 8439.6374 L -10255.3318 8440.2455 L -10253.9692 8440.3501 10253.4661 8440.4131 10253.3404 8441.2934 C -10253.2355 8441.9852 10253.1936 8442.7817 10253.1936 8443.8929 C -10253.1936 8452.257 L -10253.2355 8452.257 L -10256.2332 8448.0434 10259.2099 8443.851 10262.1657 8439.6374 C -10263.5491 8439.6374 L -10263.5491 8449.8881 L -10263.5491 8450.9993 10263.591 8451.7957 10263.6959 8452.4876 C -10263.8217 8453.3679 10264.3248 8453.4517 10265.4149 8453.5355 C -10265.4149 8454.1436 L -10260.4468 8454.1436 L -10260.4468 8453.5355 L -10261.8091 8453.4309 10262.3122 8453.3679 10262.4379 8452.4876 C -10262.5428 8451.7957 10262.5847 8450.9993 10262.5847 8449.8881 C -10262.5847 8442.5303 L -10262.5428 8442.5722 L -10259.7968 8446.4294 10257.0716 8450.2863 10254.3674 8454.1436 C -10250.3426 8454.1436 L -f -n -10270.8804 8452.194 m -10270.8804 8453.3679 10270.9434 8453.4098 10272.7669 8453.5355 C -10272.7669 8454.1436 L -10266.9185 8454.1436 L -10266.9185 8453.5355 L -10268.7632 8453.4098 10268.8051 8453.3679 10268.8051 8452.194 C -10268.8051 8441.587 L -10268.8051 8440.4131 10268.7632 8440.3712 10266.9185 8440.2455 C -10266.9185 8439.6374 L -10272.7669 8439.6374 L -10272.7669 8440.2455 L -10270.9434 8440.3712 10270.8804 8440.4131 10270.8804 8441.587 C -10270.8804 8452.194 L -f -n -10273.9584 8454.1436 m -10273.9584 8453.5355 L -10275.1323 8453.4936 10275.384 8453.4098 10275.8034 8452.2989 C -10276.4741 8450.538 10277.2498 8448.4417 10277.9832 8446.3456 C -10280.3522 8439.6374 L -10281.8405 8439.6374 L -10284.5235 8446.8696 L -10285.3829 8449.1962 10286.2216 8451.3345 10286.7248 8452.4454 C -10287.1649 8453.4309 10287.4163 8453.4728 10288.5483 8453.5355 C -10288.5483 8454.1436 L -10283.9158 8454.1436 L -10283.9158 8453.5355 L -10285.0685 8453.4213 L -10285.6136 8453.3794 10285.6347 8453.1699 10285.5298 8452.772 C -10285.2991 8451.8501 10284.6495 8450.0068 10283.8946 8447.912 C -10281.7148 8441.8998 L -10281.6729 8441.9417 L -10279.7233 8447.3253 L -10279.0733 8449.1479 10278.4237 8450.9913 10277.8786 8452.6671 C -10277.7107 8453.191 10277.7737 8453.3794 10278.2769 8453.4213 C -10279.367 8453.5355 L -10279.367 8454.1436 L -10273.9584 8454.1436 L -f -n -10289.6096 8454.1436 m -10289.6096 8453.5355 L -10291.4543 8453.4098 10291.4962 8453.3679 10291.4962 8452.194 C -10291.4962 8441.587 L -10291.4962 8440.4131 10291.4543 8440.3712 10289.6096 8440.2455 C -10289.6096 8439.6374 L -10300.7197 8439.6374 L -10300.9711 8443.2641 L -10300.3423 8443.2641 L -10299.8603 8440.7064 10298.917 8440.3712 10296.2756 8440.3712 C -10295.2904 8440.3712 10294.5358 8440.4131 10294.0954 8440.5807 C -10293.6552 8440.7694 10293.5714 8441.1258 10293.5714 8442.1528 C -10293.5714 8446.7857 L -10296.5062 8446.7857 L -10298.2881 8446.7857 10298.3719 8446.2826 10298.5607 8444.9619 C -10299.1895 8444.9619 L -10299.1895 8449.3849 L -10298.5607 8449.3849 L -10298.3719 8448.0853 10298.2881 8447.5822 10296.5062 8447.5822 C -10293.5714 8447.5822 L -10293.5714 8452.6552 L -10293.5714 8453.326 10293.6763 8453.4098 10294.3471 8453.4098 C -10296.4013 8453.4098 L -10298.7913 8453.4098 10299.2733 8452.8858 10299.5666 8450.7057 C -10300.1955 8450.7057 L -10300.1955 8454.1436 L -10289.6096 8454.1436 L -f -n -true eomode -10308.0337 8446.4713 m -10309.2914 8446.4713 10310.2558 8446.0731 10310.6121 8444.6474 C -10310.7589 8444.0605 10310.9896 8442.4046 10311.2202 8441.4402 C -10311.5346 8440.0987 10312.3311 8439.6374 10313.568 8439.6374 C -10315.2658 8439.6374 L -10315.2658 8440.2455 L -10313.6307 8440.4131 10313.2955 8441.587 10313.1068 8443.0123 C -10312.855 8444.8781 10312.4779 8446.2826 10310.2558 8446.8276 C -10310.2558 8446.8696 L -10312.2262 8447.247 10313.6726 8448.5674 10313.6726 8450.5589 C -10313.6726 8452.5714 10312.4149 8454.1436 10308.7464 8454.1436 C -10302.6255 8454.1436 L -10302.6255 8453.5355 L -10304.4701 8453.4098 10304.512 8453.3679 10304.512 8452.194 C -10304.512 8441.587 L -10304.512 8440.4131 10304.4701 8440.3712 10302.6255 8440.2455 C -10302.6255 8439.6374 L -10308.4738 8439.6374 L -10308.4738 8440.2455 L -10306.6503 8440.3712 10306.5873 8440.4131 10306.5873 8441.587 C -10306.5873 8446.4713 L -10308.0337 8446.4713 L -h -10306.5873 8447.2048 m -10306.5873 8452.3616 L -10306.5873 8453.2422 10306.7341 8453.4098 10308.1175 8453.4098 C -10309.6689 8453.4098 10311.4297 8452.8439 10311.4297 8450.3701 C -10311.4297 8448.1691 10310.2766 8447.2048 10308.2432 8447.2048 C -10306.5873 8447.2048 L -f -n -false eomode -10316.9595 8440.5807 m -10317.882 8439.7213 10319.6217 8439.323 10321.0892 8439.323 C -10324.7996 8439.323 10326.2668 8441.4402 10326.2668 8443.5785 C -10326.2668 8446.052 10324.5898 8447.2259 10322.1374 8448.1272 C -10321.4664 8448.379 L -10320.0618 8448.9029 10318.8879 8449.8043 10318.8879 8451.062 C -10318.8879 8452.5922 10319.8104 8453.7242 10321.5713 8453.7242 C -10323.374 8453.7242 10324.3803 8452.6971 10324.7155 8450.58 C -10325.3655 8450.58 L -10325.3655 8453.5355 L -10324.6528 8454.1017 10323.2272 8454.458 10321.8019 8454.458 C -10319.2446 8454.458 10316.9806 8453.1792 10316.9806 8450.4124 C -10316.9806 8448.211 10318.7414 8447.0583 10320.9424 8446.2826 C -10321.3198 8446.1358 L -10322.242 8445.7794 10324.2335 8444.8151 10324.2335 8442.9496 C -10324.2335 8441.1469 10323.0807 8440.0568 10321.2149 8440.0568 C -10319.2446 8440.0568 10317.9446 8441.587 10317.4207 8443.9348 C -10316.75 8443.9348 L -10316.9595 8440.5807 L -f -n -10332.0455 8452.194 m -10332.0455 8453.3679 10332.1085 8453.4098 10333.932 8453.5355 C -10333.932 8454.1436 L -10328.0836 8454.1436 L -10328.0836 8453.5355 L -10329.9283 8453.4098 10329.9702 8453.3679 10329.9702 8452.194 C -10329.9702 8441.587 L -10329.9702 8440.4131 10329.9283 8440.3712 10328.0836 8440.2455 C -10328.0836 8439.6374 L -10333.932 8439.6374 L -10333.932 8440.2455 L -10332.1085 8440.3712 10332.0455 8440.4131 10332.0455 8441.587 C -10332.0455 8452.194 L -f -n -10342.838 8453.4098 m -10344.0749 8453.4098 L -10346.5273 8453.4098 10346.9677 8452.9485 10347.2191 8450.6638 C -10347.848 8450.6638 L -10347.848 8454.1436 L -10335.7527 8454.1436 L -10335.7527 8450.6638 L -10336.3815 8450.6638 L -10336.6329 8452.9485 10337.0734 8453.4098 10339.5258 8453.4098 C -10340.7627 8453.4098 L -10340.7627 8441.587 L -10340.7627 8440.4131 10340.6997 8440.3712 10338.4568 8440.2455 C -10338.4568 8439.6374 L -10345.1439 8439.6374 L -10345.1439 8440.2455 L -10342.901 8440.3712 10342.838 8440.4131 10342.838 8441.587 C -10342.838 8453.4098 L -f -n -10359.2249 8439.6374 m -10359.2249 8440.2455 L -10357.0658 8440.3712 10357.0028 8440.4339 10357.0028 8441.587 C -10357.0028 8444.7943 L -10357.0028 8445.2974 10357.0658 8445.6118 10357.2753 8446.0309 C -10358.3446 8448.1691 10359.9167 8451.1039 10360.5664 8452.1521 C -10361.2793 8453.3049 10361.405 8453.4728 10362.8096 8453.5355 C -10362.8096 8454.1436 L -10358.2186 8454.1436 L -10358.2186 8453.5355 L -10359.3506 8453.4309 L -10359.728 8453.389 10359.7699 8453.1584 10359.6023 8452.7601 C -10359.078 8451.5021 10357.6527 8448.6304 10356.5415 8446.4502 C -10356.4996 8446.4502 L -10355.2838 8448.6512 10354.1937 8450.7687 10353.2716 8452.7809 C -10353.104 8453.1584 10353.1878 8453.3679 10353.5022 8453.4098 C -10354.7388 8453.5355 L -10354.7388 8454.1436 L -10349.3097 8454.1436 L -10349.3097 8453.5355 L -10350.4206 8453.4936 10350.7139 8453.3679 10351.1752 8452.4876 C -10352.3491 8450.3282 10353.586 8448.0015 10354.6131 8445.9263 C -10354.8437 8445.4861 10354.9275 8445.1295 10354.9275 8444.7105 C -10354.9275 8441.587 L -10354.9275 8440.4339 10354.8648 8440.3712 10352.7054 8440.2455 C -10352.7054 8439.6374 L -10359.2249 8439.6374 L -f -n -10238.464 8475.594 m -10238.464 8476.7679 10238.5267 8476.8098 10240.3505 8476.9355 C -10240.3505 8477.5436 L -10234.5022 8477.5436 L -10234.5022 8476.9355 L -10236.3468 8476.8098 10236.3887 8476.7679 10236.3887 8475.594 C -10236.3887 8465.9092 L -10236.3887 8463.8758 10236.0324 8462.8699 10235.5292 8462.2618 C -10235.068 8461.7168 10234.3134 8461.3605 10233.5797 8461.1717 C -10233.6846 8460.6478 L -10234.5022 8460.6897 10235.5081 8460.9203 10236.3257 8461.2978 C -10238.2122 8462.1569 10238.464 8463.897 10238.464 8466.0352 C -10238.464 8475.594 L -f -n -true eomode -10254.1152 8463.0375 m -10254.1152 8463.6455 L -10252.8994 8463.7502 10252.6688 8463.8132 10252.2916 8464.9032 C -10247.8475 8477.5436 L -10246.2961 8477.5436 L -10244.0951 8471.3386 L -10243.4455 8469.515 10242.5649 8466.9993 10241.8312 8465.092 C -10241.391 8463.96 10241.2023 8463.7082 10239.8816 8463.6455 C -10239.8816 8463.0375 L -10244.4934 8463.0375 L -10244.4934 8463.6455 L -10243.4036 8463.7502 L -10242.7744 8463.8132 10242.7117 8464.0227 10242.8793 8464.5888 C -10243.2357 8465.8465 10243.6758 8467.1461 10244.1582 8468.6345 C -10248.8537 8468.6345 L -10250.2583 8464.6307 L -10250.4678 8464.0227 10250.3629 8463.792 10249.6921 8463.7294 C -10248.7488 8463.6455 L -10248.7488 8463.0375 L -10254.1152 8463.0375 L -h -10248.602 8469.4309 m -10244.4307 8469.4309 L -10245.1014 8471.5273 10245.8352 8473.5818 10246.4641 8475.4264 C -10246.5267 8475.4264 L -10248.602 8469.4309 L -f -n -false eomode -10266.563 8477.0405 m -10265.6197 8477.4806 10264.0264 8477.858 10262.1191 8477.858 C -10259.5407 8477.858 10257.4654 8477.1035 10256.2077 8475.699 C -10255.0127 8474.3571 10254.3 8472.5544 10254.3 8470.1858 C -10254.3 8467.7331 10255.0335 8465.7627 10256.2915 8464.505 C -10257.5911 8463.2051 10259.6453 8462.7231 10261.9931 8462.7231 C -10263.6701 8462.7231 10265.5989 8463.1843 10266.6048 8463.7294 C -10266.8985 8467.2299 L -10266.2696 8467.2299 L -10265.6827 8465.0497 10264.6134 8463.4568 10261.8674 8463.4568 C -10257.5492 8463.4568 10256.6478 8467.7123 10256.6478 8470.2485 C -10256.6478 8473.6864 10258.0105 8477.1454 10261.9093 8477.1243 C -10264.0475 8477.1243 10265.5359 8476.244 10265.9341 8473.7702 C -10266.563 8473.7702 L -10266.563 8477.0405 L -f -n -true eomode -10275.695 8477.1243 m -10279.4266 8477.1243 10280.286 8473.3719 10280.3279 8470.2904 C -10280.286 8467.2092 10279.4266 8463.4568 10275.695 8463.4568 C -10271.9638 8463.4568 10271.1044 8467.2092 10271.0625 8470.2904 C -10271.1044 8473.3719 10271.9638 8477.1243 10275.695 8477.1243 C -h -10275.695 8477.858 m -10273.3891 8477.858 10271.6702 8477.1454 10270.4963 8475.8247 C -10269.3643 8474.567 10268.7147 8472.6593 10268.7147 8470.2904 C -10268.7147 8467.9426 10269.3643 8466.0141 10270.4963 8464.7564 C -10271.6702 8463.4357 10273.3891 8462.7231 10275.695 8462.7231 C -10278.022 8462.7231 10279.7199 8463.4357 10280.8938 8464.7564 C -10282.0469 8466.0141 10282.6757 8467.9426 10282.6757 8470.2904 C -10282.6757 8472.6593 10282.0469 8474.567 10280.8938 8475.8247 C -10279.7199 8477.1454 10278.022 8477.858 10275.695 8477.858 C -f -n -10290.9093 8463.0375 m -10294.0955 8463.0375 10296.15 8464.1903 10296.15 8467.1042 C -10296.15 8469.5777 10294.3891 8470.6678 10292.3557 8470.9403 C -10292.3557 8470.9823 L -10294.3261 8471.3805 10295.4792 8472.5963 10295.4792 8474.2106 C -10295.4792 8475.3634 10295.018 8476.2229 10294.1796 8476.789 C -10293.362 8477.3341 10292.104 8477.5644 10290.4692 8477.5436 C -10284.411 8477.5436 L -10284.411 8476.9355 L -10286.2556 8476.8098 10286.2975 8476.7679 10286.2975 8475.594 C -10286.2975 8464.9871 L -10286.2975 8463.8132 10286.2556 8463.7713 10284.411 8463.6455 C -10284.411 8463.0375 L -10290.9093 8463.0375 L -h -10288.3728 8470.4791 m -10289.8822 8470.4791 L -10292.4814 8470.4791 10293.9071 8469.1795 10293.9071 8466.9574 C -10293.9071 8464.442 10292.1881 8463.7713 10290.3854 8463.7713 C -10288.7083 8463.7713 10288.3728 8464.0857 10288.3728 8465.3853 C -10288.3728 8470.4791 L -h -10288.3728 8475.7616 m -10288.3728 8476.663 10288.4358 8476.789 10290.0706 8476.8098 C -10291.5801 8476.8309 10293.2779 8476.244 10293.2779 8474.0846 C -10293.2779 8472.0304 10291.9575 8471.2129 10289.7773 8471.2129 C -10288.3728 8471.2129 L -10288.3728 8475.7616 L -f -n -false eomode -10298.681 8463.9808 m -10299.6035 8463.1213 10301.3432 8462.7231 10302.8107 8462.7231 C -10306.5212 8462.7231 10307.9884 8464.8402 10307.9884 8466.9785 C -10307.9884 8469.452 10306.3113 8470.6259 10303.8589 8471.5273 C -10303.1879 8471.779 L -10301.7833 8472.303 10300.6095 8473.2043 10300.6095 8474.462 C -10300.6095 8475.9923 10301.5319 8477.1243 10303.2928 8477.1243 C -10305.0955 8477.1243 10306.1018 8476.0972 10306.4371 8473.98 C -10307.087 8473.98 L -10307.087 8476.9355 L -10306.3743 8477.5017 10304.9487 8477.858 10303.5234 8477.858 C -10300.9661 8477.858 10298.7021 8476.5792 10298.7021 8473.8124 C -10298.7021 8471.6111 10300.463 8470.4583 10302.6639 8469.6826 C -10303.0414 8469.5358 L -10303.9635 8469.1795 10305.955 8468.2151 10305.955 8466.3497 C -10305.955 8464.5469 10304.8022 8463.4568 10302.9365 8463.4568 C -10300.9661 8463.4568 10299.6662 8464.9871 10299.1422 8467.3348 C -10298.4715 8467.3348 L -10298.681 8463.9808 L -f -n -vmrs -vmr -vmr -end -%%Trailer diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.pdf b/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.pdf deleted file mode 100644 index 6e9afa1ed60..00000000000 Binary files a/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.pdf and /dev/null differ diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.png b/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.png deleted file mode 100644 index 0bbe28c44fc..00000000000 Binary files a/Master/texmf-dist/tex/latex/stex/mikoslides/jacobs-logo.png and /dev/null differ diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/mikoaffiliation.sty b/Master/texmf-dist/tex/latex/stex/mikoslides/mikoaffiliation.sty deleted file mode 100644 index 3004b99b7ba..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/mikoaffiliation.sty +++ /dev/null @@ -1,54 +0,0 @@ -\RequirePackage[ngerman,USenglish]{babel} - -\newcommand{\mikoand}[1]% joint work with -{{\large\sc Michael Kohlhase}\\{\normalsize\green{joint work with #1}}\\[1ex]\mikoaffiliation} - -\newcommand{\miko} -{{\large\sc Michael Kohlhase}\\[1ex] -\JacobsAffiliation} - -\newcommand{\mikoJacobsDFKI}{\mikoJacobsDfki} -\newcommand{\mikoJacobsDfki} -{{\large\sc Michael Kohlhase}\\[1ex] -\JacobsDfkiAffiliation} - -\newcommand{\JacobsAffiliation} -{{\begin{small} - Computer Science\\ - School of Engineering \& Science \\ - Jacobs University Bremen, Germany \\ - \end{small}} -{\color{black}\normalsize\url{http://kwarc.info/kohlhase}}} - -\newcommand{\mikoboth} -{\begin{creator} -{\large\sc Michael Kohlhase}\\[1ex] -{\small\begin{tabular}{c@{\qquad}c} -School of Engineering \& Science & School of Computer Science \\ -Jacobs University Bremen & Carnegie Mellon yUniversity -\end{tabular}} -{\color{black}\normalsize\url{http://kwarc.info/kohlhase}} -\end{creator}} - -\newcommand{\JacobsDfkiAffiliation} -{\begin{small} -\begin{tabular}{c@{\qquad}c} -Computer Science -&\iflanguage{german}{Sichere Kognitive Systeme}{Safe and Secure Cognitive Systems} \\ -%School of Engineering \& Science -%& DFKI Bremen\\ -Jacobs University, Bremen -&\iflanguage{german}{Deutsches Forschungszentrum f\"ur KI}{German Research Center for AI}\\ -\end{tabular} -\end{small} -{\color{black}\normalsize\url{http://kwarc.info/kohlhase}}} - -\newcommand{\mikocmu} -{\begin{creator} -{\large\sc Michael Kohlhase}\\[1ex] -{\small\begin{tabular}{c} -School of Computer Science \\ -Carnegie Mellon University \\ -\end{tabular}}\\ -{\color{black}\normalsize\url{http://kwarc.info/kohlhase}} -\end{center}} diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/mikoaffiliation.sty.ltxml b/Master/texmf-dist/tex/latex/stex/mikoslides/mikoaffiliation.sty.ltxml deleted file mode 100644 index 591d7469f24..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/mikoaffiliation.sty.ltxml +++ /dev/null @@ -1,25 +0,0 @@ -# -*- CPERL -*- -# /=====================================================================\ # -# | quiz.sty | # -# | Implementation for LaTeXML | # -# |=====================================================================| # -# | Not (yet) Part of LaTeXML: | # -# | Copyright (c) 2004 Michael Kohlhase, released under the | # -# |---------------------------------------------------------------------| # -# | $URL: svn://kwarc.faculty.iu-bremen.de/kohlhase/kwarc/projects/content/cnx/xsl/latexml.xsl$ -# | $Revision: 9990 $; last modified by $Author: $ -# | $Date: 2006-09-20 13:31:37 +0200 (Wed, 20 Sep 2006) $ -# |---------------------------------------------------------------------| # -# | Michael Kohlhase #_# | # -# | http://dlmf.nist.gov/LaTeXML/ (o o) | # -# \=========================================================ooo==U==ooo=/ # -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; - -DefConstructor('\miko',"Michael KohlhaseSchool of Engineering & Sciences International University Bremen, Germany "); -#********************************************************************** -# To be extended/experimental - -#********************************************************************** -1; diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/mikoslides.cls b/Master/texmf-dist/tex/latex/stex/mikoslides/mikoslides.cls deleted file mode 100644 index 6fdb6157e74..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/mikoslides.cls +++ /dev/null @@ -1,104 +0,0 @@ -%% -%% This is file `mikoslides.cls', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% mikoslides.dtx (with options: `cls') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesClass{mikoslides}[2010/06/25 v0.9 Jacobs slides] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\ifnotes\notesfalse -\newif\ifproblems\problemstrue -\DeclareOption{notes}{\notestrue} -\DeclareOption{slides}{\notesfalse} -\DeclareOption{noproblems}{\problemsfalse} -\ifnotes\else\DeclareOption*{\PassOptionsToClass{\CurrentOption}{beamer}}\fi -\ProcessOptions -\ifnotes -\LoadClass{omdoc} -\RequirePackage{a4wide} -\RequirePackage{marginnote} -\RequirePackage[notheorems,noamsthm]{beamerarticle} -\else -\LoadClass[notheorems,noamsthm,10pt]{beamer} -\newcounter{Item} -\newcounter{paragraph} -\newcounter{subparagraph} -\newcounter{Hfootnote} -\usetheme{Jacobs} -\fi -\RequirePackage{stex} -\RequirePackage{latexml} -\RequirePackage{amssymb} -\RequirePackage{tikz} -\usepgflibrary{shapes}\usetikzlibrary{arrows} -\RequirePackage{url} -\RequirePackage{amsmath} -\RequirePackage{comment} -\newcounter{slide} -\newlength{\slidewidth}\setlength{\slidewidth}{13.5cm} -\newlength{\slideheight}\setlength{\slideheight}{9cm} -\ifnotes\renewenvironment{note}{}{}\else\excludecomment{note}\fi -\ifnotes -\newlength{\slideframewidth}\setlength{\slideframewidth}{2pt} -\newsavebox{\myframebox} -\renewenvironment{frame}[1][]% -{\stepcounter{slide} -\def\itemize@level{outer} -\def\itemize@outer{outer} -\def\itemize@inner{inner} -\renewcommand\metakeys@show@keys[2]{\marginnote{{\scriptsize ##2}}} -\renewenvironment{itemize} -{\ifx\itemize@level\itemize@outer\def\itemize@label{$\rhd$}\fi - \ifx\itemize@level\itemize@inner\def\itemize@label{$\scriptstyle\rhd$}\fi - \begin{list} - {\itemize@label} - {\setlength{\labelsep}{.3em}\setlength{\labelwidth}{.5em}\setlength{\leftmargin}{1.5em}} - \edef\itemize@level{\itemize@inner}} -{\end{list}} - \noindent\hfill\begin{lrbox}{\myframebox} - \begin{minipage}{\slidewidth}\sf}% - {\miko@slidelabel\end{minipage}\end{lrbox}% - \begin{center}\fbox{\usebox\myframebox}\end{center}\hfill} -\renewcommand{\frametitle}[1]{{\Large\bf\sf\color{blue}{#1}}} -\fi -\makeindex -\ifproblems\newenvironment{problems}{}{}\else\excludecomment{problems}\fi -\newlength{\slidelogoheight} -\ifnotes\setlength{\slidelogoheight}{.4cm}\else\setlength{\slidelogoheight}{1cm}\fi -\newsavebox{\slidelogo}\sbox{\slidelogo}{\includegraphics[height=\slidelogoheight]{jacobs-logo}} -\def\source{Michael Kohlhase}% customize locally -\def\copyrightnotice{\footnotesize\copyright:\hspace{.3ex}{\source}} -\newsavebox{\cclogo}\sbox{\cclogo}{\includegraphics[height=\slidelogoheight]{cc_somerights}} -\newif\ifcchref\cchreffalse -\AtBeginDocument{\@ifpackageloaded{hyperref}{\cchreftrue}{\cchreffalse}} -\def\licensing{\ifcchref\href{http://creativecommons.org/licenses/by-sa/2.5/}{\usebox{\cclogo}}\else{\usebox{\cclogo}}\fi} -\newcommand{\miko@slidelabel}% -{\vbox to \slidelogoheight{\vss\hbox to \slidewidth% -{\licensing\hfill\copyrightnotice\hfill\arabic{slide}\hfill\usebox{\slidelogo}}}} -\AtBeginDocument{\definecolor{green}{rgb}{0,.5,0}\definecolor{purple}{cmyk}{.3,1,0,.17}} -\def\defemph#1{{\textcolor{magenta}{#1}}} -\def\notemph#1{{\textcolor{magenta}{#1}}} -\def\stDMemph#1{{\textcolor{blue}{#1}}} -\def\@@lec#1{(\textcolor{green}{#1})} -\def\textwarning{\raisebox{-.05cm}{\includegraphics[width=1.2em]{dangerous-bend}}\xspace} -\newcommand\titleframe{\begin{frame}\titlepage\end{frame}} -\newenvironment{titleframewith}{\begin{frame}\titlepage}{\end{frame}} -\newenvironment{ttitle}{\begin{center}\LARGE\begin{tabular}{|c|}\hline}% - {\\\hline\end{tabular}\end{center}\vspace{1ex minus 1ex}} -\newenvironment{ttitlejoint}[1]% -{\newbox\boxwith\setbox\boxwith\hbox{\begin{tabular}{c}{\em joint work with}\\#1\end{tabular}}% -\begin{center}\LARGE\begin{tabular}{c}\color{red}}% -{\\\box\boxwith\end{tabular}\end{center}% -\vspace{1ex minus 1ex}} -\newcommand{\putgraphicsat}[3]{% - \begin{picture}(0,0)\put(#1){\includegraphics[#2]{#3}}\end{picture}} -\newcommand{\putat}[2]{\begin{picture}(0,0)\put(#1){#2}\end{picture}} -\newcommand\hateq{\ensuremath{\hat=}} -\newcommand\textleadsto{\ensuremath{\leadsto}} -\ifnotes\else\sf\fi -\endinput -%% -%% End of file `mikoslides.cls'. diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/mikoslides.cls.ltxml b/Master/texmf-dist/tex/latex/stex/mikoslides/mikoslides.cls.ltxml deleted file mode 100644 index 6e252baabd5..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/mikoslides.cls.ltxml +++ /dev/null @@ -1,105 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RawTeX('\newif\ifnotes\notesfalse'); -RawTeX('\newif\ifproblems\problemsfalse'); -LoadClass('omdoc'); -DefConstructor('\usetheme{}',''); -RequirePackage('stex'); -RequirePackage('latexml'); -RequirePackage('amssymb'); -RequirePackage('graphicx'); -RequirePackage('tikz'); -RequirePackage('amsmath'); -DefRegister('\slidewidth' => Dimension('13.5cm')); -DefRegister('\slideheight' => Dimension('9cm')); -DefEnvironment('{note}','#body'); -DefEnvironment('{frame}[]', - "" - . "#body\n" - ."\n\n", - afterDigestBegin=>sub { - $_[1]->setProperty(theory=>LookupValue('current_module')); }); -DefConstructor('\frametitle{}', - "\n#1"); -DefEnvironment('{problems}','#body'); -#DefMacro('\defemph{}','{\textcolor{magenta}{#1}}'); -#DefMacro('\notemph{}','{\textcolor{magenta}{#1}}'); -DefMacro('\textwarning',""); -DefMacro('\title[]{}', '\@add@frontmatter{ltx:title}{#1}'); -DefMacro('\date[]{}', '\@add@frontmatter{ltx:date}[role=creation]{#1}'); -DefMacro('\author[]{}', sub { andSplit(T_CS('\@author'),$_[1]); });#$ -DefConstructor('\titleframe',"titleframe elided here"); -DefEnvironment('{titleframewith}', - "begin elided titleframe" - . "#body" - ."end elided titleframe"); -DefEnvironment('{titleslide}',""); -DefEnvironment('{titleslide}',"#body"); -DefEnvironment('{ttitle}', "\n#body"); -DefConstructor('\hateq',"=\x{03C2}"); -DefConstructor('\textleadsto',"=\x{219D}"); -DefEnvironment('{columns}','#body'); -DefEnvironment('{column}{}','#body'); -DefConstructor('\uncover','#1'); -#Define a Beamer Overlay Parameter type - DefParameterType('BeamerOverlay', sub { - my ($gullet) = @_; - my $tok = $gullet->readXToken; - if (ref $tok && ToString($tok) eq '<') { - $gullet->readUntil(T_OTHER('>')); - } else { - $gullet->unread($tok) if ref $tok; - undef; }}, - reversion=> sub { - (T_OTHER('<'), $_[0]->revert, T_OTHER('>')); - }); - -#Take the "from" field of the overlay range -sub overlayFrom { - return "" unless defined $_[0]; - my $overlay=ToString($_[0]); $overlay =~ /^(\d+)/; $1;} - -#Reuse the CMP itemizations, only adjust the \item constructors. -DefMacro('\beamer@group@item[] OptionalBeamerOverlay IfBeginFollows', sub { - my($gullet,$tag,$overlay,$needwrapper)=@_; - $overlay=$overlay||T_OTHER(""); - ( T_CS('\group@item@maybe@unwrap'), - ($needwrapper ? (Invocation(T_CS('\beamer@group@item@wrap'),$tag,$overlay)->unlist) : ()) ); }); -DefConstructor('\beamer@group@item@wrap {} OptionalBeamerOverlay', - "" - . "?#1(#1)()" - . "", - beforeDigest=>sub { - Let('\group@item@maybe@unwrap','\group@item@unwrap'); - #$_[0]->bgroup; - useCMPItemizations(); - return; }, - properties=>sub{ RefStepItemCounter(); }); - -DefConstructor('\beamer@itemize@item[] OptionalBeamerOverlay', - "" - . "?#1(#1)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\beamer@enumerate@item[] OptionalBeamerOverlay', - "" - . "?#1(#1)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\beamer@description@item[] OptionalBeamerOverlay', - "" - . "?#1(#1)()", # trust di and dt to autoclose - properties=>sub{ RefStepItemCounter(); }); - -#We ALWAYS use the beamer itemizations for the slides: -Let('\CMP@itemize@item'=>'\beamer@itemize@item'); -Let('\CMP@enumerate@item'=> '\beamer@enumerate@item'); -Let('\CMP@description@item'=> '\beamer@description@item'); -Let('\group@item' =>'\beamer@group@item'); -Let('\itemize@item'=>'\beamer@group@item'); -Let('\enumerate@item'=>'\beamer@group@item'); -Let('\description@item'=>'\beamer@group@item'); -Let('\only'=>'\beamer@group@item'); -DefMacro('\putgraphicsat{}{}{}','\mygraphics[#2]{#3}'); -DefMacro('\putat{}{}','#2'); -1; diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/shading-l2r.eps b/Master/texmf-dist/tex/latex/stex/mikoslides/shading-l2r.eps deleted file mode 100644 index 39a8ebc4cc6..00000000000 --- a/Master/texmf-dist/tex/latex/stex/mikoslides/shading-l2r.eps +++ /dev/null @@ -1,458 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: (ImageMagick) -%%Title: (shading-l2r.eps) -%%CreationDate: (Mon Jul 9 20:57:19 2007) -%%BoundingBox: 0 0 716 3 -%%HiResBoundingBox: 0 0 715.911 3 -%%DocumentData: Clean7Bit -%%LanguageLevel: 1 -%%Pages: 1 -%%EndComments - -%%BeginDefaults -%%EndDefaults - -%%BeginProlog -% -% Display a color image. The image is displayed in color on -% Postscript viewers or printers that support color, otherwise -% it is displayed as grayscale. -% -/DirectClassPacket -{ - % - % Get a DirectClass packet. - % - % Parameters: - % red. - % green. - % blue. - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - compression 0 eq - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/DirectClassImage -{ - % - % Display a DirectClass image. - % - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { DirectClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayDirectClassPacket } image - } ifelse -} bind def - -/GrayDirectClassPacket -{ - % - % Get a DirectClass packet; convert to grayscale. - % - % Parameters: - % red - % green - % blue - % length: number of pixels minus one of this color (optional). - % - currentfile color_packet readhexstring pop pop - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 eq - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/GrayPseudoClassPacket -{ - % - % Get a PseudoClass packet; convert to grayscale. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - color_packet 0 get 0.299 mul - color_packet 1 get 0.587 mul add - color_packet 2 get 0.114 mul add - cvi - /gray_packet exch def - compression 0 eq - { - /number_pixels 1 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add def - } ifelse - 0 1 number_pixels 1 sub - { - pixels exch gray_packet put - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassPacket -{ - % - % Get a PseudoClass packet. - % - % Parameters: - % index: index into the colormap. - % length: number of pixels minus one of this color (optional). - % - currentfile byte readhexstring pop 0 get - /offset exch 3 mul def - /color_packet colormap offset 3 getinterval def - compression 0 eq - { - /number_pixels 3 def - } - { - currentfile byte readhexstring pop 0 get - /number_pixels exch 1 add 3 mul def - } ifelse - 0 3 number_pixels 1 sub - { - pixels exch color_packet putinterval - } for - pixels 0 number_pixels getinterval -} bind def - -/PseudoClassImage -{ - % - % Display a PseudoClass image. - % - % Parameters: - % class: 0-PseudoClass or 1-Grayscale. - % - currentfile buffer readline pop - token pop /class exch def pop - class 0 gt - { - currentfile buffer readline pop - token pop /depth exch def pop - /grays columns 8 add depth sub depth mul 8 idiv string def - columns rows depth - [ - columns 0 0 - rows neg 0 rows - ] - { currentfile grays readhexstring pop } image - } - { - % - % Parameters: - % colors: number of colors in the colormap. - % colormap: red, green, blue color packets. - % - currentfile buffer readline pop - token pop /colors exch def pop - /colors colors 3 mul def - /colormap colors string def - currentfile colormap readhexstring pop pop - systemdict /colorimage known - { - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { PseudoClassPacket } false 3 colorimage - } - { - % - % No colorimage operator; convert to grayscale. - % - columns rows 8 - [ - columns 0 0 - rows neg 0 rows - ] - { GrayPseudoClassPacket } image - } ifelse - } ifelse -} bind def - -/DisplayImage -{ - % - % Display a DirectClass or PseudoClass image. - % - % Parameters: - % x & y translation. - % x & y scale. - % label pointsize. - % image label. - % image columns & rows. - % class: 0-DirectClass or 1-PseudoClass. - % compression: 0-none or 1-RunlengthEncoded. - % hex color packets. - % - gsave - /buffer 512 string def - /byte 1 string def - /color_packet 3 string def - /pixels 768 string def - - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - x y translate - currentfile buffer readline pop - token pop /x exch def - token pop /y exch def pop - currentfile buffer readline pop - token pop /pointsize exch def pop - /Times-Roman findfont pointsize scalefont setfont - x y scale - currentfile buffer readline pop - token pop /columns exch def - token pop /rows exch def pop - currentfile buffer readline pop - token pop /class exch def pop - currentfile buffer readline pop - token pop /compression exch def pop - class 0 gt { PseudoClassImage } { DirectClassImage } ifelse - grestore -} bind def -%%EndProlog -%%Page: 1 1 -%%PageBoundingBox: 0 0 716 3 -userdict begin -DisplayImage -0 0 -715.911 2.99963 -12.000000 -716 3 -0 -0 -049DFE049DFE059DFE059DFE069EFE069EFE079EFE079FFE079EFE079EFE089FFE089EFE -099EFE099FFE0A9FFE0AA0FE0A9FFE0B9FFE0B9FFE0BA0FE0B9FFE0BA0FE0CA1FE0DA0FE -0DA1FE0EA0FE0DA1FE0EA0FE0EA1FE0EA1FE0FA2FE10A1FE10A1FE10A1FE10A2FE11A2FE -11A2FE11A2FE12A3FE12A3FE12A3FE13A3FE13A3FE13A3FE14A4FE14A3FF15A4FE14A3FE -16A4FE16A4FE16A4FE17A4FE17A4FE17A5FE18A4FE17A5FE18A4FE19A5FE19A5FF19A5FE -19A6FE1AA5FE1AA6FE1AA6FF1BA6FE1CA6FE1CA6FE1CA7FE1DA6FE1CA7FE1DA7FE1DA7FE -1DA7FE1EA7FE1FA7FE1EA8FE1FA7FE1FA8FE20A7FE20A8FF20A8FE21A8FF22A9FE22A9FE -22A9FE22A9FE22A9FE23A9FE23AAFE24AAFE24AAFE24A9FE25A9FE25AAFE26AAFE26AAFE -26ABFE27AAFE27ABFE27ABFE27ABFF28ABFE28ABFE29ACFE29ACFE29ACFE2AABFF2AACFE -2BABFE2AACFF2BACFE2BACFE2CACFE2CADFE2CADFE2DADFF2DADFE2DADFE2EADFE2EAEFF -2FAEFE2FAEFE2FADFF2FAEFE30AEFE30AEFE31AEFF31AFFE31AEFE32AFFE32AFFE33AFFE -33B0FE33AFFF34B0FE34B0FF34AFFE34B0FF35B0FE35B1FE36B0FE36B0FF37B0FE37B1FE -37B1FE38B1FE38B1FE38B2FF38B1FE38B1FE39B1FE3AB2FE3AB2FE3BB2FF3BB2FE3BB3FF -3BB2FE3BB3FE3CB3FF3CB3FE3CB3FE3DB3FF3EB4FE3EB3FE3EB4FF3EB4FE3FB4FE3FB4FE -3FB4FE40B4FE40B4FF40B5FE40B5FE42B5FE42B5FE42B5FF42B6FF43B5FE43B6FE43B6FE -43B5FE44B6FE45B6FE44B6FF45B7FE46B7FE46B7FE46B6FF46B7FE46B7FE47B7FE48B7FE -48B8FE48B7FE48B7FF49B8FF49B8FF4AB8FF4AB8FF4AB8FF4AB9FE4BB8FF4BB9FE4BB9FE -4DB9FE4CBAFF4CB9FE4DBAFE4DBAFE4EBAFF4FBAFE4EBAFE4FBAFE4FBBFE50BBFE4FBBFE -50BAFF50BBFE51BBFF52BBFE52BBFE52BBFF52BCFF53BCFE53BCFE53BCFF54BCFE55BDFE -55BDFE55BDFE55BDFE56BDFF56BDFE56BDFF56BEFE57BDFE58BEFF57BDFE58BEFE59BEFE -58BEFE59BEFE5ABEFF59BEFE5ABFFE5BBFFE5ABEFE5BBFFE5CBFFE5CBFFE5CBFFE5DC0FE -5DC0FE5DC0FE5EC0FE5DC1FE5EC0FE5FC1FE5FC1FE5FC1FF60C1FE60C1FF60C1FF61C1FE -61C1FE61C2FF62C1FE63C2FF62C1FE62C2FF63C2FF64C3FE64C2FE64C3FF65C2FF65C2FF -66C3FF66C3FF66C3FE66C4FF66C4FE67C4FE68C4FE67C4FE68C5FE69C4FE69C5FE69C5FE -69C5FF6AC5FE6AC5FE6AC5FF6BC5FE6CC5FE6CC5FE6CC5FF6DC5FE6DC6FE6EC6FE6DC6FF -6DC6FF6EC6FF6FC6FE6FC6FF6FC7FE70C7FE70C8FE70C7FF71C8FE70C8FE72C7FE71C8FE -72C8FF72C8FE73C8FE73C9FF73C8FE73C9FF74C9FF74C9FF75C9FE76C9FE75C9FF76C9FF -76C9FF77CAFE77CAFE77CAFF78CAFE78CAFE79CBFE79CAFE79CBFE7ACBFE7ACBFF7BCCFE -7ACBFE7BCCFF7CCBFF7CCCFF7CCCFF7CCCFE7DCDFE7DCCFE7DCCFF7ECCFF7ECCFE7ECDFE -7FCDFE7FCDFF7FCDFE80CDFF80CDFF80CEFE81CDFF81CEFF82CEFF81CEFF82CFFF83CEFE -82CEFE83CEFF84CFFF84CFFF85CFFF85CFFE85CFFE86D0FE86D0FF86D0FE86D0FE87D0FF -87D0FE87D0FE87D0FE88D1FF88D1FF88D1FF89D1FE89D1FF8AD1FF8BD1FF8BD2FF8BD1FF -8CD2FF8CD2FE8CD2FF8DD2FE8DD3FF8DD3FF8DD3FE8ED3FF8ED2FF8FD3FE8FD3FF8FD4FE -8FD3FE90D4FF90D4FE91D4FE91D4FF91D4FF91D4FF92D4FF92D4FF93D4FE93D5FF94D5FF -94D5FF95D5FE95D5FF95D6FF95D6FE96D5FE96D6FE96D6FE97D6FF97D6FF97D6FE97D7FF -98D7FE99D7FF98D7FF99D7FE9AD7FF9AD7FE9AD8FF9BD8FE9BD7FF9BD8FE9CD8FF9CD9FE -9CD9FF9DD9FF9DD9FF9DD9FF9ED9FF9ED9FE9EDAFF9ED9FE9FDAFF9FDAFEA0D9FFA0D9FE -A0DAFFA1DAFEA1DAFFA1DAFFA2DAFFA2DBFEA2DBFFA2DBFFA3DBFFA4DBFFA4DBFFA4DCFE -A4DCFFA5DCFEA5DCFFA5DCFFA6DDFEA6DCFFA7DCFFA8DDFFA7DDFFA7DDFFA9DDFEA9DDFF -A9DDFEAADEFEAADEFFAADDFEAADEFEABDEFFABDEFEABDEFEACDEFEACDFFEADDFFEACDFFE -AEDFFFAEE0FFAEDFFFAFE0FFAFE0FFAFE0FFAFDFFEB0E0FEB0E0FFB1E0FEB0E0FEB1E1FF -B1E0FEB2E1FEB2E1FFB3E1FFB3E1FFB4E1FFB3E1FEB4E2FFB4E2FEB4E2FFB4E2FFB5E2FF -B5E2FEB6E2FEB6E3FEB7E3FFB7E3FEB7E3FFB8E3FEB8E3FFB8E4FFB9E3FEB9E3FEBAE3FF -BAE4FEBAE4FFBBE4FFBAE4FFBBE4FFBCE5FFBCE5FFBCE5FFBDE5FFBDE5FFBDE5FFBEE5FF -BEE6FFBFE6FEBFE6FFBFE6FEBFE6FFC0E7FEC0E6FFC0E6FEC0E7FEC1E7FEC1E7FFC2E7FF -C3E7FFC2E8FFC2E7FFC3E8FFC4E8FEC4E8FFC4E8FFC4E9FFC5E8FEC5E8FFC5E9FFC6E9FF -C7E9FEC7E9FEC7E9FFC8EAFFC8E9FFC8E9FFC9EAFFC9EAFFC9EAFFCAEAFFCAEAFECAEBFE -CBEAFECBEBFECBEBFFCCEBFFCCEBFFCCEBFFCDEBFFCDECFFCDECFFCEECFFCEECFFCFECFF -CFECFFCFECFFCFEDFFD0EDFFD0EDFFD1EDFFD1EDFFD1EDFFD2EDFFD2EDFFD2EEFED3EEFF -D3EEFED3EEFFD3EEFFD4EFFFD4EEFFD5EFFED5EFFFD6EFFFD6EFFFD6F0FFD6EFFFD7EFFE -D7F0FED8F0FFD8EFFFD9F0FFD9F0FFD9F0FFDAF0FFD9F1FFDAF0FFDAF1FFDBF1FFDBF1FF -DBF1FFDCF1FEDCF1FFDDF2FFDDF2FFDEF2FFDDF2FFDEF2FEDEF3FEDEF3FEDFF2FFDFF3FE -DFF3FFE0F3FFE1F3FFE1F3FFE1F3FFE1F4FFE2F4FEE2F3FFE3F4FFE3F4FEE3F4FFE4F5FF -E4F5FFE4F4FFE5F5FFE5F5FFE6F5FFE6F5FFE6F5FEE6F6FFE7F5FFE7F6FFE8F6FFE8F5FF -E8F6FFE9F6FFE9F6FFE9F6FFEAF7FFEAF7FFEBF7FFEAF7FFEBF7FFECF7FFEBF8FFEDF8FF -ECF7FFEDF8FFEDF8FFEDF8FEEEF8FFEEF9FFEEF8FFEEF9FEEFF9FFF0F9FFEFF9FFF0F9FF -F1F9FFF1F9FFF1F9FFF2FAFFF2FAFFF3FAFFF3FAFFF3FBFFF4FBFFF3FBFFF4FBFFF4FBFF -F5FBFFF5FCFFF6FBFFF5FBFFF6FCFFF6FBFFF7FCFFF7FCFFF8FCFFF8FCFFF9FDFFF9FDFF -F9FDFFFAFDFFFAFCFFFAFDFFFAFEFFFBFEFFFBFEFFFCFDFFFCFEFEFCFEFFFCFEFFFCFEFF -FDFFFFFDFFFFFEFFFFFEFEFFFFFFFFFFFFFFFFFFFFFFFFFF059DFE059EFE059EFE059EFE -069EFE069EFE079EFE079EFE079EFE089FFE079EFE089FFE099FFE099FFE099FFE0AA0FE -0A9FFE0AA0FE0BA0FE0BA0FE0BA0FE0CA0FE0CA0FE0DA1FE0DA1FF0EA1FE0DA1FE0EA1FE -0FA1FF0EA1FE0FA2FE10A1FE10A2FE10A1FE10A2FE11A2FE11A2FE12A2FE12A3FE12A3FE -13A3FE13A3FF14A3FE14A3FE14A3FE15A3FE14A3FE14A4FE15A4FE16A4FE16A4FE16A4FE -17A5FE17A4FE18A5FE18A5FE18A4FE18A5FE19A6FE1AA5FF19A5FE1AA5FE1AA6FE1AA6FE -1BA6FF1BA6FE1CA6FE1CA6FE1CA6FF1CA6FE1DA6FE1DA7FE1DA7FE1EA7FE1EA7FE1FA8FE -1FA8FE1FA8FE1FA8FE20A8FE20A8FF21A8FE21A8FE21A8FE22A8FE22A9FE22A9FE22A9FE -24A9FE24AAFE24A9FE25A9FE24AAFF25AAFE26AAFF26AAFE26ABFF27AAFE26ABFE27AAFE -28ABFE28ABFF29ABFE29ABFE29ABFE29ABFE29ACFE2AABFE2AACFE2BADFE2BACFE2CADFF -2CADFE2CADFE2CADFE2DADFE2DADFE2DADFE2EADFE2EADFE2EADFE2EAEFE2FAEFE30AEFE -30AEFE31AEFE31AEFE31AEFE31AFFE32AFFE32AFFE32B0FE32AFFE33B0FF33B0FF34B0FE -34B0FE34B0FF35B0FF35B0FE36B0FE36B1FE36B0FE37B0FE37B1FE37B1FE37B2FE38B1FF -38B2FE39B2FE39B2FE3AB1FE3AB2FF3AB2FE3BB3FE3BB2FE3CB2FF3BB2FE3CB3FE3CB3FE -3DB3FF3DB3FE3DB3FE3DB3FE3EB4FE3FB4FE3FB4FE3FB4FE3FB4FE40B4FE40B5FE40B5FE -40B5FE41B5FE42B5FE42B5FE42B5FE43B5FE43B5FF43B6FE43B6FE44B6FE44B6FE45B6FF -45B6FF46B6FE45B6FF46B7FE47B7FE47B7FF47B7FE47B7FE48B7FE48B8FF49B8FE49B8FE -4AB8FE4AB8FE4AB8FE4AB9FE4BB8FE4BB8FE4BB9FE4BB9FE4CB9FF4CB9FE4DB9FE4DB9FE -4EBAFE4EBAFE4EBAFF4EBAFE4EBAFE4FBBFF4FBBFF50BBFE51BBFE51BAFF51BBFE52BCFE -52BCFF52BBFE52BCFE53BBFE53BCFE53BCFE54BCFE54BCFE55BCFF55BCFE55BDFE55BDFE -56BDFE57BDFE56BDFF57BDFE57BEFE58BEFE58BEFE58BEFF59BEFE59BEFE5ABFFF5ABEFE -5ABFFE5BBFFE5BBEFE5BBFFE5CBFFE5CBFFE5DC0FE5CC0FE5DC0FF5DC0FE5DC0FE5EC0FE -5EC0FE5EC0FE5FC1FF5FC0FF5FC1FE60C1FF60C2FE61C1FE61C1FE61C1FE61C1FE62C2FE -63C2FF63C2FE63C3FE64C2FE64C2FE65C3FF64C2FF65C3FE65C3FE66C3FE66C3FE66C4FF -66C3FE67C3FF68C4FF68C4FE68C4FE68C5FE69C4FE69C4FE6AC5FF6AC5FE6AC5FE6AC5FF -6BC5FE6BC6FF6CC6FE6CC6FE6CC6FE6DC5FE6DC6FF6DC7FF6EC7FE6EC6FE6EC6FE6FC7FF -70C7FF6FC7FE70C7FF70C7FF70C8FF71C8FF72C8FF72C8FF72C8FE73C8FE73C8FE73C8FF -74C8FE74C9FF74C9FF75C8FE75C9FE75C9FF75CAFF76C9FE76CAFF77CAFF77CAFF77CAFE -78CBFF79CAFF78CAFE78CBFE79CBFF79CBFF79CBFE7ACBFE7BCBFE7BCCFF7BCCFE7CCCFE -7CCBFE7CCCFE7CCCFE7DCCFF7DCCFF7DCDFF7ECDFF7ECDFE7ECDFF7FCDFE7FCDFF80CDFF -80CEFF80CEFE81CDFE81CEFE82CEFF81CEFE82CEFF83CEFE83CFFF84CFFE84CEFF84CFFE -84D0FE84D0FE85CFFE85CFFF86CFFF86D0FF86D0FF87D0FE87D0FE87D0FE88D0FF88D1FF -89D1FF89D0FF89D1FE8AD2FF8AD2FF8BD2FF8BD2FF8BD1FE8BD2FF8CD1FF8CD2FF8CD2FE -8DD3FE8DD3FF8DD3FE8ED3FE8ED3FF8ED3FE8FD3FF90D4FE8FD3FE8FD4FE90D4FF90D4FE -91D4FE91D4FE92D4FE92D4FF93D5FE92D5FE93D5FF94D5FF94D5FF94D5FF95D6FF95D6FE -96D5FE96D6FF96D6FF96D6FF96D6FE97D6FE97D6FF98D6FE98D7FF98D7FF99D7FF9AD7FF -9AD8FF99D8FE9AD8FF9BD8FE9BD8FE9CD8FF9CD8FF9CD8FF9CD8FE9CD9FF9DD9FF9ED9FF -9ED9FE9ED9FF9EDAFF9FD9FE9FDAFE9FDAFEA0DAFFA0DAFFA1DAFFA1DBFFA1DAFFA1DAFE -A2DBFEA2DAFFA3DAFFA3DBFEA3DBFFA3DCFFA4DCFFA4DCFFA5DCFFA5DCFFA5DCFFA6DCFE -A6DCFEA7DCFFA7DCFFA7DDFFA8DCFFA8DDFFA8DDFFA8DDFFA9DDFFAADEFFAADEFEAADEFE -AADEFEABDEFEABDEFFABDEFFACDFFEACDFFFACDFFEADDFFFADDFFFADDFFFAEDFFEAEDFFF -AFDFFFAEE0FFAFE0FEB0E0FFB0E0FFB0E0FEB0E0FFB1E1FEB2E0FEB2E0FFB2E1FFB3E2FE -B3E1FFB3E2FFB4E1FFB3E1FFB4E1FFB5E2FFB5E2FFB5E2FFB5E2FFB6E2FFB6E3FFB7E3FE -B7E2FEB8E3FEB7E3FEB8E3FEB9E4FFB9E3FFB9E4FFB9E4FFBAE4FEBBE4FFBBE4FFBBE5FE -BBE5FEBBE5FFBCE5FFBCE5FEBDE5FEBDE5FFBDE5FFBEE6FFBEE6FFBEE6FEBEE5FEBFE6FF -C0E6FFBFE6FFC0E6FFC1E7FFC0E6FFC1E7FFC2E7FFC2E7FFC2E8FFC2E7FFC3E7FFC4E7FE -C4E8FFC4E8FEC5E8FFC4E9FFC5E8FFC6E9FFC6E8FFC6E9FEC6E9FFC7E9FEC7E9FFC7E9FF -C8E9FFC9EAFFC9EAFFC9EAFFC9EAFECAEAFFCAEBFFCAEAFFCBEAFFCBEBFFCBEBFFCBEBFE -CCECFECCEBFFCDECFFCDEBFFCEEBFECEECFFCEECFFCFECFFCEECFFD0EDFFCFECFFD0EDFF -D1EDFFD1EDFFD1EDFFD1EDFFD2EDFFD2EEFFD3EEFFD3EEFED3EEFFD3EEFED4EEFFD4EEFF -D4EFFFD5EFFED6EFFED6EEFFD6EFFED6F0FED6EFFFD7F0FFD7EFFFD8F0FFD8F0FFD8F0FF -D9F0FFD9F0FFD9F0FFDAF0FEDAF1FFDAF1FEDBF1FFDBF1FFDBF2FEDCF1FFDCF2FFDCF1FF -DDF1FFDEF2FFDEF2FFDEF2FFDFF2FFDFF2FEDFF2FFDFF3FFE0F3FEE0F3FFE0F3FFE1F3FF -E1F3FFE2F3FFE2F4FFE2F4FFE3F4FFE3F4FFE4F4FFE4F4FFE4F4FFE4F4FFE5F4FFE5F5FF -E5F5FFE6F5FFE6F6FFE7F6FFE7F6FFE7F6FFE7F6FFE8F6FFE8F6FFE8F6FFE9F6FEE9F6FF -E9F6FFEAF7FFEAF7FFEBF7FFEBF7FFECF8FFECF8FFECF7FFECF8FFEDF7FFEDF8FFEDF9FF -EDF8FFEEF8FFEEF9FFEEF9FFEFF8FFF0F9FFF0F9FFF0F9FFF1F9FFF0F9FFF2FAFFF1FAFF -F2FAFFF2FAFFF3FBFEF3FAFFF3FAFFF4FBFFF4FBFFF5FBFFF5FBFFF5FBFFF6FBFFF6FBFF -F7FCFFF6FCFEF7FCFFF7FCFFF8FCFFF8FDFFF9FCFFF8FDFFF9FCFFF9FDFFF9FDFFFAFDFF -FAFDFFFBFDFFFBFEFFFCFEFFFCFEFFFCFEFFFDFEFFFDFFFFFEFEFFFDFEFFFEFFFFFEFEFF -FFFFFFFFFFFFFFFFFFFFFFFF059DFE059DFE059EFE059EFE069EFE069EFE069EFE079EFE -079EFE079EFE089FFF089FFE089FFE099FFE099FFE099FFE0A9FFE0AA0FE0AA0FE0B9FFE -0CA0FE0CA0FE0CA0FE0CA0FE0CA0FE0EA0FE0DA1FE0EA1FE0FA1FE0FA1FE0FA2FE0FA1FE -0FA2FE10A2FE11A2FE11A2FE11A2FE11A2FE11A2FE12A2FE12A3FE12A3FE13A3FE13A3FE -14A3FE14A4FE15A3FF15A4FE16A4FE16A4FE16A4FE16A4FE16A4FE17A4FE18A5FE18A5FE -18A4FF18A5FE19A5FE19A5FE1AA6FE1AA6FE1BA5FE1BA6FE1BA6FE1BA6FF1CA6FE1CA7FF -1DA6FE1DA7FE1DA7FF1EA6FE1DA7FE1EA7FE1EA7FE1EA7FE1FA8FE20A8FE1FA8FE20A8FE -20A9FE20A8FE21A8FE21A9FE22A9FE22A9FE22A9FE23A9FE23A9FF24AAFE24AAFE24AAFE -25AAFE25AAFE26AAFE26AAFE26AAFE26AAFE27ABFE27ABFE28ABFE28ABFE28ABFE28ACFE -29ACFE2AACFE2AACFE2AACFE2AACFF2BACFE2CACFE2BADFF2CADFE2CADFE2DADFE2DADFE -2DADFE2DADFE2EADFF2FADFE2EAEFE2FAEFE2FAEFE30AEFE30AEFE31AEFE30AEFE31AFFE -32AEFE31AFFF32AFFE33AFFE33AFFE33AFFE33AFFF33B0FE34B0FF35B0FE35B0FE35B0FE -36B0FE36B0FF36B1FF37B1FE37B1FF38B1FE37B2FF38B1FE39B1FE39B2FF39B2FF3AB2FE -3AB2FE3AB2FE3AB2FE3AB2FE3BB2FE3CB2FF3CB3FF3CB3FE3CB3FE3DB3FE3DB4FE3EB4FF -3EB4FE3EB4FF3FB4FE3FB5FF3FB5FF3FB5FF40B4FF40B5FE41B5FE41B5FE41B5FE42B5FF -43B5FE43B5FE43B5FE43B6FE44B6FE44B6FE44B6FF44B6FE45B6FF46B6FF46B6FF46B7FE -46B7FE47B7FE47B7FE48B7FF48B8FE49B8FE49B7FE49B8FE49B8FF4AB9FE4AB9FE4AB9FE -4BB8FF4BB9FE4BB9FF4CB9FE4CB9FE4DBAFE4DB9FF4DBAFF4EBAFF4EBAFE4EBAFE4FBAFE -4FBBFF4FBBFE4FBAFE50BBFE50BBFF51BBFE51BBFF52BCFF52BCFE52BBFF53BCFE53BBFE -53BCFF53BCFF54BCFF54BCFF55BDFF54BDFE55BDFE56BDFE56BDFE56BDFE57BDFE57BDFE -58BDFE58BEFE58BEFE58BEFE58BEFE59BEFF59BFFE5ABFFE5ABFFE5ABFFE5BBFFE5CBFFE -5BC0FE5CC0FE5CBFFE5CC0FE5DC0FE5DC0FE5DC0FE5EC0FE5EC0FE5EC0FE5FC1FE5FC0FE -5FC1FE61C1FE61C1FE61C1FF61C1FF62C1FF62C2FE63C1FF63C1FE63C2FF63C3FF63C2FE -64C3FF64C2FE65C2FF65C3FE66C3FF66C3FE66C4FF66C4FE67C4FF67C3FE68C4FE68C4FE -68C4FF69C4FE69C4FE69C4FE6AC5FE6AC5FF6AC5FE6BC5FE6BC5FE6CC6FE6CC5FE6CC5FE -6CC6FE6DC6FF6DC6FF6DC6FE6EC6FF6FC7FF6FC6FF6FC7FE6FC7FE70C7FF70C7FF70C7FF -70C8FE71C7FF71C8FF72C8FF72C8FE72C8FE73C9FE73C8FE73C8FF73C8FE74C9FF75C9FE -75C9FE75C9FF75CAFE76C9FF76C9FF77CAFF77CAFE77CAFF78CAFE78CAFF78CAFF78CAFF -79CBFE79CBFE7ACBFF7ACBFF7ACBFF7BCBFF7BCCFF7BCBFE7CCCFE7CCCFF7DCCFE7DCDFF -7DCCFE7ECCFE7ECDFE7FCDFF7FCDFF7FCDFE7FCDFF80CEFF80CDFE81CEFE80CDFE81CEFE -82CEFF82CEFF82CEFE82CEFE83CFFF83CFFE83CFFF83CFFE84D0FE84D0FE85CFFE86D0FF -86CFFE86D0FE86D0FE87D0FE88D1FF88D0FF87D1FE88D1FE88D1FE89D1FF89D1FF89D1FE -8AD1FE8AD1FE8BD1FF8BD2FF8CD2FE8BD2FF8CD2FF8DD2FF8DD3FF8DD2FE8ED3FF8ED2FF -8ED3FE8ED3FE8FD3FF8FD4FE8FD3FE90D4FF90D4FF90D4FE91D4FF91D4FF92D4FE92D5FF -92D4FE93D5FE93D5FF94D5FF93D5FF94D5FE95D5FF95D6FF96D6FF95D6FF96D6FE97D6FE -96D6FF97D6FE97D7FE98D7FF98D7FE99D7FF98D7FF99D7FF99D8FE99D8FF9AD8FF9AD8FF -9BD8FF9CD8FF9BD8FF9CD8FE9CD8FE9CD8FE9DD9FE9DD9FE9ED9FF9ED9FF9ED9FE9EDAFF -9FD9FEA0D9FFA0DAFEA0DAFEA0DAFFA1DAFFA1DAFFA2DBFFA2DBFFA2DBFFA3DBFFA3DBFF -A4DBFFA4DCFFA4DCFFA5DBFFA4DCFEA5DCFEA5DCFFA6DCFFA6DCFEA7DCFEA7DCFEA7DDFF -A7DCFFA8DDFEA9DDFFA9DDFFA9DEFFA9DDFEAADEFFAADDFFABDEFFABDEFFAADEFEABDFFE -ACDEFEACDFFFADDEFFADDFFEADDFFEADDFFFADE0FEAEE0FFAEDFFFAFE0FFAFDFFFB0E0FF -B0E0FEB0E0FFB0E1FFB1E0FFB1E0FEB2E0FFB2E1FEB3E2FEB3E1FFB3E1FFB3E1FFB4E1FF -B4E1FFB5E2FFB4E2FFB5E2FFB5E2FEB6E2FEB7E2FFB7E3FFB7E3FFB7E3FFB7E3FEB8E3FF -B9E3FFB8E4FEB9E3FEB9E4FEBAE4FFBAE5FFBAE4FFBBE4FFBBE5FFBCE4FFBCE5FFBCE5FF -BDE5FFBDE5FEBDE5FFBDE5FFBEE5FFBEE6FFBEE6FFBFE6FFBFE6FFBFE6FFC0E6FFC1E7FE -C0E6FFC1E7FEC2E7FEC2E7FFC2E7FFC2E7FFC3E7FEC3E8FFC4E8FFC4E8FFC4E8FFC5E9FF -C5E9FFC6E9FFC6E9FFC6E9FFC7E8FEC7E9FFC7E9FFC7EAFEC8E9FFC9EAFFC9E9FEC9EAFF -CAEAFECAEAFECAEAFFCAEAFFCBEBFFCBEBFFCBEBFECCEBFFCCEBFECDEBFFCDEBFFCDEBFE -CDEBFFCEECFFCEECFFCFECFFCFECFFCFECFED0ECFED0EDFFD0EDFFD1EDFED1EDFFD2EEFF -D2EDFED2EDFFD2EDFED3EEFED3EEFFD4EDFFD3EEFFD5EFFFD4EFFFD4EFFED5EEFFD5EFFF -D6EFFFD6EFFFD6EFFFD7F0FFD7F0FFD7EFFFD8F0FFD8F0FFD9F0FFD9F0FFDAF1FEDAF1FE -DAF1FFDAF1FFDAF1FFDBF1FFDCF1FFDBF1FEDDF1FFDDF1FFDDF1FFDEF2FFDEF2FFDEF3FF -DFF2FEDFF3FEDFF2FFE0F2FFDFF3FFE0F3FEE0F3FFE1F4FEE1F3FFE2F4FFE2F3FFE2F3FF -E2F4FFE3F4FFE3F4FFE3F5FFE4F4FFE5F5FFE5F5FFE5F5FFE6F5FEE5F6FFE7F5FFE6F5FF -E7F6FFE7F5FFE8F5FFE8F6FFE8F6FFE8F6FFE9F7FFE9F7FFEAF7FFEAF7FFEBF7FFEBF7FF -EBF7FFECF7FFEBF8FFECF8FFECF8FEEDF7FFEDF8FFEDF8FFEEF8FFEFF8FFEFF8FFEFF8FF -F0F9FFEFF9FFF0F9FFF0FAFFF1FAFFF1F9FFF1F9FFF1FAFFF2FAFFF2FAFFF3FAFFF3FAFF -F4FAFFF4FAFFF4FAFFF5FBFFF4FBFFF5FBFFF6FBFFF6FBFFF6FCFFF6FCFFF7FCFFF7FCFF -F8FCFEF8FCFFF9FCFFF9FDFFF9FDFFF9FCFFF9FDFFFAFDFFFAFDFFFBFDFFFBFDFFFBFDFF -FCFEFFFCFEFFFCFEFFFDFEFFFDFEFFFDFEFFFEFEFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFF - -end -%%PageTrailer -%%Trailer -%%EOF diff --git a/Master/texmf-dist/tex/latex/stex/mikoslides/shading-l2r.png b/Master/texmf-dist/tex/latex/stex/mikoslides/shading-l2r.png deleted file mode 100644 index 2eabe7a8b17..00000000000 Binary files a/Master/texmf-dist/tex/latex/stex/mikoslides/shading-l2r.png and /dev/null differ diff --git a/Master/texmf-dist/tex/latex/stex/modules/modules.sty b/Master/texmf-dist/tex/latex/stex/modules/modules.sty deleted file mode 100644 index 4a422b69cc9..00000000000 --- a/Master/texmf-dist/tex/latex/stex/modules/modules.sty +++ /dev/null @@ -1,230 +0,0 @@ -%% -%% This is file `modules.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% modules.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{modules}[2010/06/25 v1.0 Semantic Markup] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\ifmod@show\mod@showfalse -\DeclareOption{show}{\mod@showtrue} -\newif\ifmod@qualified\mod@qualifiedfalse -\DeclareOption{qualifiedimports}{\mod@qualifiedtrue} -\ProcessOptions -\RequirePackage{sref} -\RequirePackage{xspace} -\RequirePackage{xcomment} -\define@key{module}{cd}{} -\define@key{module}{id}{% -\edef\this@module{\expandafter\noexpand\csname module@defs@#1\endcsname}% -\global\@namedef{module@defs@#1}{}% -\ifmod@qualified -\edef\this@qualified@module{\expandafter\noexpand\csname module@defs@qualified@#1\endcsname}% -\global\@namedef{module@defs@qualified@#1}{}% -\fi -\def\mod@id{#1}% -\expandafter\edef\csname #1@cd@file@base\endcsname{\mod@path}% -\expandafter\g@addto@macro\csname module@defs@#1\expandafter\endcsname\expandafter% -{\expandafter\def\csname #1@cd@file@base\expandafter\endcsname\expandafter{\mod@path}}} -\newenvironment{module}[1][]{\setkeys{module}{#1}}{} -\def\activate@defs#1{\csname module@defs@#1\endcsname} -\def\export@defs#1{\@ifundefined{mod@id}{}% -{\expandafter\expandafter\expandafter\g@addto@macro\expandafter% -\this@module\expandafter{\csname module@defs@#1\endcsname}}} -\def\coolurion{} -\def\coolurioff{} -\newcommand{\importmodule}[2][]{{\def\mod@path{#1}% -\ifx\mod@path\@empty\else\requiremodules{#1}\fi}% -\activate@defs{#2}\export@defs{#2}} -\newcommand{\importOMDocmodule}[3][]{\importmodule[#1]{#3}} -\let\metalanguage=\importmodule -\def\mod@newcommand{\@star@or@long\mod@new@command} -\def\mod@new@command#1{\@testopt{\@mod@newcommand#1}0} -\def\@mod@newcommand#1[#2]{\kernel@ifnextchar [{\mod@xargdef#1[#2]}{\mod@argdef#1[#2]}} -\long\def\mod@argdef#1[#2]#3{\@yargdef#1\@ne{#2}{#3}} -\long\def\mod@xargdef#1[#2][#3]#4{\expandafter\def\expandafter#1\expandafter{% -\expandafter\@protected@testopt\expandafter #1\csname\string#1\endcsname{#3}}% -\expandafter\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}} -\define@key{symdef}{local}[true]{\@symdeflocaltrue} -\define@key{symdef}{name}{} -\define@key{symdef}{assocarg}{} -\define@key{symdef}{bvars}{} -\define@key{symdef}{bvar}{} -\newif\if@symdeflocal -\def\symdef{\@ifnextchar[{\@symdef}{\@symdef[]}} -\def\@symdef[#1]#2{\@ifnextchar[{\@@symdef[#1]{#2}}{\@@symdef[#1]{#2}[0]}} -\def\@mod@nc#1{\mod@newcommand{#1}[1]} -\def\@@symdef[#1]#2[#3]#4{% -\@symdeflocalfalse\setkeys{symdef}{#1}% -\expandafter\mod@newcommand\csname modules@#2@pres\endcsname[#3]{#4}% -\expandafter\def\csname#2\endcsname{\csname modules@#2@pres\endcsname}% -\expandafter\@mod@nc\csname mod@symref@#2\expandafter\endcsname\expandafter% -{\expandafter\mod@termref\expandafter{\mod@id}{#2}{##1}}% -\if@symdeflocal\else% -\@ifundefined{mod@id}{}{% -\expandafter\g@addto@macro\this@module% -{\expandafter\mod@newcommand\csname modules@#2@pres\endcsname[#3]{#4}}% -\expandafter\g@addto@macro\this@module% -{\expandafter\def\csname#2\endcsname{\csname modules@#2@pres\endcsname}}% -\expandafter\g@addto@macro\csname module@defs@\mod@id\expandafter\endcsname\expandafter% -{\expandafter\@mod@nc\csname mod@symref@#2\expandafter\endcsname\expandafter% -{\expandafter\mod@termref\expandafter{\mod@id}{#2}{##1}}}% -\ifmod@qualified% -\expandafter\g@addto@macro\this@qualified@module% -{\expandafter\mod@newcommand\csname modules@#2@pres@qualified\endcsname[#3]{#4}}% -\expandafter\g@addto@macro\this@qualified@module% -{\expandafter\def\csname#2atqualified\endcsname{\csname modules@#2@pres@qualified\endcsname}}% -\fi% -}\fi} -\define@key{DefMathOp}{name}{\def\defmathop@name{#1}} -\newcommand\DefMathOp[2][]{% -\setkeys{DefMathOp}{#1}% -\symdef[#1]{\defmathop@name}{#2}} -\def\resymdef{\@ifnextchar[{\@resymdef}{\@resymdef[]}} -\def\@resymdef[#1]#2{\@ifnextchar[{\@@resymdef[#1]{#2}}{\@@resymdef[#1]{#2}[0]}} -\def\@@resymdef[#1]#2[#3]#4{\expandafter\renewcommand\csname modules@#2@pres\endcsname[#3]{#4}} -\let\abbrdef\symdef -\def\mod@path{} -\def\mod@true{true} -\addmetakey[false]{termdef}{local} -\addmetakey{termdef}{name} -\newcommand{\termdef}[3][]{\metasetkeys{termdef}{#1}% -\expandafter\mod@newcommand\csname#2\endcsname[0]{#3\xspace} -\ifx\termdef@local\mod@true\else% -\@ifundefined{mod@id}{}{\expandafter\g@addto@macro\this@module% -{\expandafter\mod@newcommand\csname#2\endcsname[0]{#3\xspace}}} -\fi} -\def\@captitalize#1{\uppercase{#1}} -\newcommand\capitalize[1]{\expandafter\@captitalize #1} -\def\mod@termref#1#2#3{\def\@test{#3} -\@ifundefined{#1@cd@file@base} - {\protect\G@refundefinedtrue - \@latex@warning{\protect\termref with unidentified cd "#1": the cd key must - reference an active module} - \def\@label{sref@#2 @target}} - {\def\@label{sref@#2@#1@target}}% -\expandafter\ifx\csname #1@cd@file@base\endcsname\@empty% local reference -\sref@hlink@ifh{\@label}{\ifx\@test\@empty #2\else #3\fi}\else% -\def\@uri{\csname #1@cd@file@base\endcsname.pdf\#\@label}% -\sref@href@ifh{\@uri}{\ifx\@test\@empty #2\else #3\fi}\fi} -\def\mod@simplify#1{\expandafter\mod@simpl#1/\relax} -\def\mod@simpl#1/#2\relax{\def\@second{#2}% -\ifx\mod@blaaaa\@empty\edef\mod@savedprefix{}\def\mod@blaaaa{aaa}\else\fi% -\ifx\@second\@empty\edef\mod@savedprefix{\mod@savedprefix#1}% -\else\mod@simplhelp#1/#2\relax\fi} -\def\mod@updir{..} -\def\mod@simplhelp#1/#2/#3\relax{\def\@first{#1}\def\@second{#2}\def\@third{#3}% -\ifx\@third\@empty% base case -\ifx\@second\mod@updir\else% -\ifx\mod@second\@empty\edef\mod@savedprefix{\mod@savedprefix#1}% -\else\edef\mod@savedprefix{\mod@savedprefix#1/#2}% -\fi% -\fi% -\else% -\ifx\@first\mod@updir% -\edef\mod@savedprefix{\mod@savedprefix#1/}\mod@simplhelp#2/#3\relax% -\else% -\ifx\@second\mod@updir\mod@simpl#3\relax% -\else\edef\mod@savedprefix{\mod@savedprefix#1/}\mod@simplhelp#2/#3\relax% -\fi% -\fi% -\fi}% -\newcommand{\defpath}[2]{\expandafter\newcommand\csname #1\endcsname[1]{#2/##1}} -\newif\ifmodules -\gdef\mod@reg{} -\def\mod@update#1{\ifx\mod@reg\@empty\xdef\mod@reg{#1}\else\xdef\mod@reg{#1@\mod@reg}\fi} -\def\mod@check#1@#2///#3\relax{% -\def\mod@one{#1}\def\mod@two{#2}\def\mod@three{#3}% -\expandafter% -\ifx\mod@three\mod@one\modulestrue% -\else% -\ifx\mod@two\@empty\modulesfalse\else\mod@check#2///#3\relax\fi% -\fi} -\def\mod@search#1{% -\modulesfalse\expandafter\mod@check\mod@reg @///#1\relax% -\ifmodules\else\mod@update{#1}\fi} -\def\mod@reguse#1{\modulesfalse\expandafter\mod@check\mod@reg @///#1\relax} -\def\mod@prefix{} -\def\mod@updatedpre#1{% -\edef\mod@prefix{\mod@prefix\mod@pathprefix@check#1/\relax}} -\def\mod@pathprefix@check#1/#2\relax{% -\ifx\\#2\\% no slash in string -\else\mod@ReturnAfterFi{#1/\mod@pathprefix@help#2\relax}% -\fi} -\def\mod@pathprefix@help#1/#2\relax{% -\ifx\\#2\\% end of recursion -\else\mod@ReturnAfterFi{#1/\mod@pathprefix@help#2\relax}% -\fi} -\long\def\mod@ReturnAfterFi#1\fi{\fi#1} -\def\mod@pathpostfix@check#1/#2\relax{% slash -\ifx\\#2\\%no slash in string -#1\else\mod@ReturnAfterFi{\mod@pathpostfix@help#2\relax}% -\fi} -\def\mod@pathpostfix@help#1/#2\relax{% -\ifx\\#2\\% -#1\else\mod@ReturnAfterFi{\mod@pathpostfix@help#2\relax}% -\fi} -\def\mod@updatedpost#1{% -\edef\mod@savedprefix{\mod@savedprefix\mod@pathpostfix@check#1/\relax}} -\def\mod@updatesms{\edef\mod@savedprefix{\mod@savedprefix.sms}} -\newcommand{\requiremodules}[1]{% -{\mod@updatedpre{#1}% add the new file to the already existing path -\let\mod@savedprefix\mod@prefix% add the path to the new file to the prefix -\mod@updatedpost{#1}% -\def\mod@blaaaa{}% macro used in the simplify function (remove .. from the prefix) -\mod@simplify{\mod@savedprefix}% remove |xxx/..| from the path (in case it exists) -\mod@reguse{\mod@savedprefix}% -\ifmodules\else% -\mod@updatesms% update the file to contain the .sms extension -\let\newreg\mod@reg% use to compare, in case the .sms file was loaded before -\mod@search{\mod@savedprefix}% update registry -\ifx\newreg\mod@reg\else\input{\mod@savedprefix}\fi% check if the registry was updated and load if necessary -\fi}} -\def\sinput#1{ -{\mod@updatedpre{#1}% add the new file to the already existing path -\let\mod@savedprefix\mod@prefix% add the path to the new file to the prefix -\mod@updatedpost{#1}% -\def\mod@blaaaa{}% macro used in the simplify function (remove .. from the prefix) -\mod@simplify{\mod@savedprefix}% remove |xxx/..| from the path (in case it exists) -\mod@reguse{\mod@savedprefix}% -\let\newreg\mod@reg% use to compare, in case the .sms file was loaded before -\mod@search{\mod@savedprefix}% update registry -\ifx\newreg\mod@reg%\message{This file has been previously introduced} -\else\input{\mod@savedprefix}% -\fi}} -\let\sinputref=\sinput -\let\inputref=\input -\def\requirepackage#1#2{\makeatletter\input{#1.sty}\makeatother} -\srefaddidkey{view} -\addmetakey{view}{from} -\addmetakey{view}{to} -\addmetakey*{view}{title} -\ifmod@show -\newsavebox{\viewbox} -\newcounter{view}[section] -\def\view@heading{{\textbf{View} \thesection.\theview} - \sref@label@id{View \thesection.\theproblem} - \@ifundefined{view@title}{:\quad}{\quad(\view@title)\hfill\\}} -\newenvironment{view}[1][]{\metasetkeys{view}{#1}\sref@target\stepcounter{view} -\begin{lrbox}{\viewbox}\begin{minipage}{.9\textwidth}\importmodule{\view@to}} -{\end{minipage}\end{lrbox} -\setbox0=\hbox{\begin{minipage}{.9\textwidth}% -\noindent\view@heading\rm% -\end{minipage}} -\smallskip\noindent\fbox{\vbox{\box0\vspace*{.2em}\usebox\viewbox}}\smallskip} -\else\newxcomment[]{view}\fi -\def\vassign#1#2{#1\ensuremath{\mapsto #2}} -\define@key{module}{uses}{% -\@for\module@tmp:=#1\do{\activate@defs\module@tmp\export@defs\module@tmp}} -\define@key{module}{usesqualified}{% -\@for\module@tmp:=#1\do{\activate@defs{qualified@\module@tmp}\export@defs\module@tmp}} -\def\csymdef{\@ifnextchar[{\@csymdef}{\@csymdef[]}} -\def\@csymdef[#1]#2{\@ifnextchar[{\@@csymdef[#1]{#2}}{\@@csymdef[#1]{#2}[0]}} -\def\@@csymdef[#1]#2[#3]#4#5{\@@symdef[#1]{#2}[#3]{#4}} -\def\notationdef[#1]#2#3{} -\endinput -%% -%% End of file `modules.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/modules/modules.sty.ltxml b/Master/texmf-dist/tex/latex/stex/modules/modules.sty.ltxml deleted file mode 100644 index d8689c4a7b9..00000000000 --- a/Master/texmf-dist/tex/latex/stex/modules/modules.sty.ltxml +++ /dev/null @@ -1,503 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Global; -use LaTeXML::Package; -DefEnvironment('{module} OptionalKeyVals:Module', - "?#excluded()(#body)", -# beforeDigest=>\&useTheoryItemizations, - afterDigestBegin=>sub { - my($stomach, $whatsit)=@_; - $whatsit->setProperty(excluded=>LookupValue('excluding_modules')); - - my $keys = $whatsit->getArg(1); - my($id, $cd)=$keys - && map(ToString($keys->getValue($_)),qw(id cd)); - #make sure we have an id or give a stub one otherwise: -if (not $id) { -#do magic to get a unique id for this theory -$whatsit->setProperties(beginItemize('theory')); -$id = ToString($whatsit->getProperty('id')); -} - $cd = $id unless $cd; - # update the catalog with paths for modules - my $module_paths = LookupValue('module_paths') || {}; - $module_paths->{$id} = LookupValue('last_module_path'); - AssignValue('module_paths', $module_paths, 'global'); - - #Update the current module position - AssignValue(current_module => $id); - AssignValue(module_cd => $cd) if $cd; - - #activate the module in our current scope - $STATE->activateScope("module:".$id); - - #Activate parent scope, if present - my $parentmod = LookupValue('parent_module'); - use_module($parentmod) if $parentmod; - #Update the current parent module - AssignValue("parent_of_$id"=>$parentmod,'global'); - AssignValue("parent_module" => $id); - return; }, - afterDigest => sub { - #Move a step up on the module ancestry - AssignValue("parent_module" => LookupValue("parent_of_".LookupValue("parent_module"))); - return; - }); -sub use_module { - my($module,%ancestors)=@_; - $module = ToString($module); - if (defined $ancestors{$module}) { - Fatal(":module \"$module\" leads to import cycle!"); - } - $ancestors{$module}=1; - # Depth-first load definitions from used modules, disregarding cycles - foreach my $used_module (@{ LookupValue("module_${module}_uses") || []}){ - use_module($used_module,%ancestors); - } - # then load definitions for this module - $STATE->activateScope("module:$module"); }#$ -DefMacro('\coolurion',sub {AssignValue('cooluri'=>1);}); -DefMacro('\coolurioff',sub {AssignValue('cooluri'=>0);}); -sub omext { - my ($mod)=@_; my $dest=''; - if (ToString($mod)) { - #We need a constellation of abs_path invocations - # to make sure that all symbolic links get resolved - my ($d,$f,$t) = pathname_split(abs_path(ToString($mod))); - $d = pathname_relative(abs_path($d),abs_path(cwd())); - $dest=$d."/".$f; - } - $dest.=".omdoc" if (ToString($mod) && !LookupValue('cooluri')); - return Tokenize($dest);} -sub importmoduleI { - my($stomach,$whatsit)=@_; - my $file = $whatsit->getArg(1); - my $omdocmod = $file.".omdoc" if $file; - my $module = $whatsit->getArg(2); - $module = ToString($module); - my $containing_module = LookupValue('current_module'); - #set the relation between the current module and the one to be imported - PushValue("module_".$containing_module."_uses"=>$module) if $containing_module; - #check if we've already loaded this module file or no file path given - if((!$file) || (LookupValue('file_'.$module.'_loaded'))) {use_module($module);} #if so activate it! - else { - #if not: - my $gullet = $stomach->getGullet; - #1) mark as loaded - AssignValue('file_'.$module.'_loaded' => 1, 'global'); - #open a group for its definitions so that they are localized - $stomach->bgroup; - #update the last module path - AssignValue('last_module_path', $file); - #queue the closing tag for this module in the gullet where it will be executed - #after all other definitions of the imported module have been taken care of - $gullet->unread(Invocation(T_CS('\end@requiredmodule'), T_OTHER($module))->unlist); - #we only need to load the sms definitions without generating any xml output, so we set the flag to 1 - AssignValue('excluding_modules' => 1); - #queue this module's sms file in the gullet so that its definitions are imported - $gullet->input($file,['sms']); - } - return;} -DefConstructor('\importmodule OptionalSemiverbatim {}', - "", - afterDigest=>sub{ importmoduleI(@_)}); -DefConstructor('\importOMDocmodule OptionalSemiverbatim {}{}',"", -afterDigest=>sub{ - #Same as \importmodule, just switch second and third argument. - my ($stomach,$whatsit) = @_; - my $path = $whatsit->getArg(1); - my $ouri = $whatsit->getArg(2); - my $module = $whatsit->getArg(3); - $whatsit->setArgs(($path, $module,$ouri)); - importmoduleI($stomach,$whatsit); - return; -}); -DefConstructor('\metalanguage OptionalSemiverbatim {}', - "", - afterDigest=>sub{ importmoduleI(@_)}); -DefMacro('\DefMathOp OptionalKeyVals:symdef {}', - sub { - my($self,$keyval,$pres)=@_; - my $name = KeyVal($keyval,'name') if $keyval; - #Rewrite this token - my $scopes = $STATE->getActiveScopes; - DefMathRewrite(xpath=>'descendant-or-self::ltx:XMath',match=>ToString($pres), - replace=>sub{ - map {$STATE->activateScope($_);} @$scopes; - $_[0]->absorb(Digest("\\".ToString($name))); - }); - #Invoke symdef - (Invocation(T_CS('\symdef'),$keyval,$name,undef,undef,$pres)->unlist); - }); -DefMacro('\symdef OptionalKeyVals:symdef {}[][]{}', - sub { - my($self,@args)=@_; - ((Invocation(T_CS('\@symdef'),@args)->unlist), - (LookupValue('excluding_modules') ? () - : (Invocation(T_CS('\@symdef@pres'), @args)->unlist))); }); - -#Current list of recognized formatter command sequences: -our @PresFormatters = qw (infix prefix postfix assoc mixfixi mixfixa mixfixii mixfixia mixfixai mixfixaii mixfixiii); -DefPrimitive('\@symdef OptionalKeyVals:symdef {}[][]{}', sub { - my($stomach,$keys,$cs,$nargs,$opt,$presentation)=@_; - my($name,$cd,$role,$bvars,$bvar)=$keys - && map($_ && $_->toString,map($keys->getValue($_), qw(name cd role - bvars bvar))); - $cd = LookupValue('module_cd') unless $cd; - $name = $cs unless $name; - #Store for later lookup - AssignValue("symdef.".ToString($cs).".cd"=>ToString($cd),'global'); - AssignValue("symdef.".ToString($cs).".name"=>ToString($name),'global'); - $nargs = (ref $nargs ? $nargs->toString : $nargs || 0); - my $module = LookupValue('current_module'); - my $scope = (($keys && ($keys->getValue('local') || '' eq 'true')) ? 'module_local' : 'module').":".$module; - - #The DefConstructorI Factory is responsible for creating the \symbol command sequences as dictated by the \symdef - DefConstructorI("\\".$cs->toString,convertLaTeXArgs($nargs,$opt), sub { - my ($document,@args) = @_; - my @props = @args; - my $localpres = $presentation; - @args = splice(@props,0,$nargs); - my %prs = @props; - $prs{isbound} = "BINDER" if ($bvars || $bvar); - my $wrapped; - my $parent=$document->getNode; - if(! defined $parent->lookupNamespacePrefix("http://omdoc.org/ns")){ # namespace not already declared? - $document->getDocument->documentElement->setNamespace("http://omdoc.org/ns","omdoc",0); } - my $symdef_scope=$parent->exists('ancestor::omdoc:rendering'); #Are we in a \symdef rendering? - if (($localpres =~/^LaTeXML::Token/) && $symdef_scope) { - #Note: We should probably ask Bruce whether this maneuver makes sense - # We jump back to digestion, at a processing stage where it has been already completed - # Hence need to reinitialize all scopes and make a new group. This is probably expensive to do. - - my @toks = $localpres->unlist; - while(@toks && $toks[0]->equals(T_SPACE)){ shift(@toks); } # Remove leading space - my $formatters = join("|",@PresFormatters); - $formatters = qr/$formatters/; - $wrapped = (@toks && ($toks[0]->toString =~ /^\\($formatters)$/)); - $localpres = Invocation(T_CS('\@use'),$localpres) unless $wrapped; - # Plug in the provided arguments, doing a nasty reversion: - my @sargs = map (Tokens($_->revert), @args); - $localpres = Tokens(LaTeXML::Expandable::substituteTokens($localpres,@sargs)) if $nargs>0; - #Digest: - my $stomach = $STATE->getStomach; - $stomach->beginMode('inline-math'); - $STATE->activateScope($scope); - use_module($module); - use_module(LookupValue("parent_of_".$module)) if LookupValue("parent_of_".$module); - $localpres=$stomach->digest($localpres); - $stomach->endMode('inline-math'); - } - else { #Some are already digested to Whatsit, usually when dropped from a wrapping constructor - } - if ($nargs == 0) { - if (!$symdef_scope) { #Simple case - discourse flow, only a single XMTok - #Referencing XMTok when not in \symdefs: - $document->insertElement('ltx:XMTok',undef,(name=>$cs->toString, meaning=>$name,omcd=>$cd,role => $role,scriptpos=>$prs{'scriptpos'})); - } - else { - if ($symdef_scope && ($localpres =~/^LaTeXML::Whatsit/) && (!$wrapped)) {#1. Simple case: converts to a single token - $localpres->setProperties((name=>$cs->toString, meaning=>$name,omcd=>$cd,role => $role,scriptpos=>$prs{'scriptpos'})); - } - else { - #Experimental treatment - COMPLEXTOKEN - #$role=$role||'COMPLEXTOKEN'; - #$document->openElement('ltx:XMApp',role=>'COMPLEXTOKEN'); - #$document->insertElement('ltx:XMTok',undef,(name=>$cs->toString, meaning=>$name, omcd=>$cd, role=>$role, scriptpos=>$prs{'scriptpos'})); - #$document->openElement('ltx:XMWrap'); - #$document->absorb($localpres); - #$document->closeElement('ltx:XMWrap'); - #$document->closeElement('ltx:XMApp'); - } - #We need expanded presentation when invoked in \symdef scope: - - #Suppress errors from rendering attributes when absorbing. - #This is bad style, but we have no way around it due to the digestion acrobatics. - my $verbosity = $LaTeXML::Global::STATE->lookupValue('VERBOSITY'); - my $errors = $LaTeXML::Global::STATE->getStatus('error'); - $LaTeXML::Global::STATE->assignValue('VERBOSITY',-5); - - #Absorb presentation: - $document->absorb($localpres); - - #Return to original verbosity and error state: - $LaTeXML::Global::STATE->assignValue('VERBOSITY',$verbosity); - $LaTeXML::Global::STATE->setStatus('error',$errors); - - #Strip all/any wrappers: - #TODO: Ugly LibXML work, possibly do something smarter - my $parent = $document->getNode; - my @renderings=$parent->findnodes(".//omdoc:rendering"); - foreach my $render(@renderings) { - my $content=$render; - while ($content && $content->localname =~/^rendering|[X]?Math/) { - $content = $content->firstChild; - } - my $sibling = $content->parentNode->lastChild; - my $localp = $render->parentNode; - while ((defined $sibling) && (!$sibling->isSameNode($content))) { - my $clone = $sibling->cloneNode(1); - $localp->insertAfter($clone,$render); - $sibling = $sibling->previousSibling; - } - $render->replaceNode($content); - } - } - } - else {#2. Constructors with arguments - if (!$symdef_scope) { #2.1 Simple case, outside of \symdef declarations: - #Referencing XMTok when not in \symdefs: - $document->openElement('ltx:XMApp',scriptpos=>$prs{'scriptpos'},role=>$prs{'isbound'}); - $document->insertElement('ltx:XMTok',undef,(name=>$cs->toString, meaning=>$name, omcd=>$cd, role=>$role, scriptpos=>$prs{'operator_scriptpos'})); - foreach my $carg (@args) { - if ($carg =~/^LaTeXML::Token/) { - my $stomach = $STATE->getStomach; - $stomach->beginMode('inline-math'); - $carg=$stomach->digest($carg); - $stomach->endMode('inline-math'); - } - $document->openElement('ltx:XMArg'); - $document->absorb($carg); - $document->closeElement('ltx:XMArg'); - } - $document->closeElement('ltx:XMApp'); - } - else { #2.2 Complex case, inside a \symdef declaration - #We need expanded presentation when invoked in \symdef scope: - - #Suppress errors from rendering attributes when absorbing. - #This is bad style, but we have no way around it due to the digestion acrobatics. - my $verbosity = $LaTeXML::Global::STATE->lookupValue('VERBOSITY'); - my $errors = $LaTeXML::Global::STATE->getStatus('error'); - $LaTeXML::Global::STATE->assignValue('VERBOSITY',-5); - - #Absorb presentation: - $document->absorb($localpres); - - #Return to original verbosity and error state: - $LaTeXML::Global::STATE->assignValue('VERBOSITY',$verbosity); - $LaTeXML::Global::STATE->setStatus('error',$errors); - - #Strip all/any wrappers: - #TODO: Ugly LibXML work, possibly do something smarter? - my $parent = $document->getNode; - if(! defined $parent->lookupNamespacePrefix("http://omdoc.org/ns")){ # namespace not already declared? - $document->getDocument->documentElement->setNamespace("http://omdoc.org/ns","omdoc",0); } - my @renderings=$parent->findnodes(".//omdoc:rendering"); - foreach my $render(@renderings) { - my $content=$render; - while ($content && $content->localname =~/^rendering|[X]?Math/) { - $content = $content->firstChild; - } - my $sibling = $content->parentNode->lastChild; - my $localp = $render->parentNode; - while ((defined $sibling) && (!$sibling->isSameNode($content))) { - my $clone = $sibling->cloneNode(1); - $localp->insertAfter($clone,$render); - $sibling = $sibling->previousSibling; - } - $render->replaceNode($content); - } - } - }}, - properties => {name=>$cs->toString, meaning=>$name,omcd=>$cd,role => $role}, - scope=>$scope); - return; }); -DefPrimitive('\abbrdef OptionalKeyVals:symdef {}[][]{}', sub { - my($stomach,$keys,$cs,$nargs,$opt,$presentation)=@_; - my $module = LookupValue('current_module'); - my $scope = (($keys && ($keys->getValue('local') || '' eq 'true')) ? 'module_local' : 'module').":$module"; - DefMacroI("\\".$cs->toString,convertLaTeXArgs($nargs,$opt),$presentation, - scope=>$scope); - return; }); -DefMacro('\defpath{}{}', sub { - my ($gullet,$arg1,$arg2)=@_; - $arg1 = ToString($arg1); - $arg2 = ToString($arg2); - my $paths = LookupValue('defpath')||{}; - $$paths{"$arg1"}=$arg2; - AssignValue('defpath'=>$paths,'global'); - DefMacro('\\'.$arg1.' Semiverbatim',$arg2."/#1"); - });#$ -DefPrimitive('\requiremodules{}', sub { - my($stomach,$module)=@_; - my $GULLET = $stomach->getGullet; - $module = Digest($module)->toString; - if(LookupValue('file_'.$module.'_loaded')) {} - else { - AssignValue('file_'.$module.'_loaded' => 1, 'global'); - $stomach->bgroup; - AssignValue('last_module_path', $module); - $GULLET->unread(T_CS('\end@requiredmodule')); - AssignValue('excluding_modules' => 1); - $GULLET->input($module,['sms']); - } - return;}); - -DefPrimitive('\end@requiredmodule{}',sub { - #close the group - $_[0]->egroup; - #print STDERR "END: ".ToString(Digest($_[1])->toString); - #Take care of any imported elements in this current module by activating it and all its dependencies - #print STDERR "Important: ".ToString(Digest($_[1])->toString)."\n"; - use_module(ToString(Digest($_[1])->toString)); - return; });#$ -DefPrimitive('\sinput Semiverbatim', sub { - my($stomach,$module)=@_; - my $GULLET = $stomach->getGullet; - $module = Digest($module)->toString; - AssignValue('file_'.$module.'_loaded' => 1, 'global'); - $stomach->bgroup; - AssignValue('last_module_path', $module); - $GULLET->unread(Invocation(T_CS('\end@requiredmodule'),T_OTHER($module))->unlist); - $GULLET->input($module,['tex']); - return;});#$ -DefConstructor('\sinputref{}',""); -DefConstructor('\inputref{}',""); -DefMacro('\@symdef@pres OptionalKeyVals:symdef {}[][]{}', sub { - my($self,$keys, $cs,$nargs,$opt,$presentation)=@_; - - my($name,$cd,$role)=$keys - && map($_ && $_->toString,map($keys->getValue($_), qw(name cd role))); - $cd = LookupValue('module_cd') unless $cd; - $name = $cs unless $name; - AssignValue('module_name'=>$name) if $name; - $nargs = 0 unless ($nargs); - my $nargkey = ToString($name).'_args'; - AssignValue($nargkey=>ToString($nargs)) if $nargs; - $name=ToString($name); - - Invocation(T_CS('\@symdef@pres@aux'), - $cs, - ($nargs || Tokens(T_OTHER(0))), - symdef_presentation_pmml($cs,ToString($nargs)||0,$presentation), -# symdef_presentation_TeX($presentation), - (Tokens(T_OTHER($name))), - (Tokens(T_OTHER($cd))), - $keys)->unlist; });#$ -sub symdef_presentation_pmml { - my($cs,$nargs,$presentation)=@_; - my @toks = $presentation->unlist; - while(@toks && $toks[0]->equals(T_SPACE)){ shift(@toks); } # Remove leading space - $presentation = Tokens(@toks); - # Wrap with \@use, unless already has a recognized formatter. - my $formatters = join("|",@PresFormatters); - $formatters = qr/$formatters/; - $presentation = Invocation(T_CS('\@use'),$presentation) - unless (@toks && ($toks[0]->toString =~ /^\\($formatters)$/)); - # Low level substitution. - my @args = map(Invocation(T_CS('\@SYMBOL'),T_OTHER("arg:".($_))),1..$nargs); - $presentation = Tokens(LaTeXML::Expandable::substituteTokens($presentation,@args)); - $presentation; }#$ -sub getSymmdefProperties { - my $cd = LookupValue('module_cd'); - my $name = LookupValue('module_name'); - my $nargkey = ToString($name).'_args'; - my $nargs = LookupValue($nargkey); - $nargs = 0 unless ($nargs); - my %props = ('cd'=>$cd,'name'=>$name,'nargs'=>$nargs); - return %props;} -DefConstructor('\@use{}', sub{ - my ($document,$args,%properties) = @_; - #Notation created at \@symdef@pres@aux - #Create the rendering: - $document->openElement('omdoc:rendering'); - $document->openElement('ltx:Math'); - $document->openElement('ltx:XMath'); - if ($args->isMath) {$document->absorb($args);} - else { $document->insertElement('ltx:XMText',$args);} - $document->closeElement('ltx:XMath'); - $document->closeElement('ltx:Math'); - $document->closeElement('omdoc:rendering'); -}, -properties=>sub { getSymmdefProperties($_[1]);}, - mode=>'inline_math'); -sub get_cd { - my($name,$cd,$role)=@_; - return $cd;} -DefConstructor('\@symdef@pres@aux{}{}{}{}{} OptionalKeyVals:symdef', sub { - my ($document,$cs,$nargs,$pmml,$name,$cd,$keys)=@_; - my $assocarg = ToString($keys->getValue('assocarg')) if $keys; - $assocarg = $assocarg||"0"; - my $bvars = ToString($keys->getValue('bvars')) if $keys; - $bvars = $bvars||"0"; - my $bvar = ToString($keys->getValue('bvar')) if $keys; - $bvar = $bvar||"0"; - my $appElement = 'om:OMA'; $appElement = 'om:OMBIND' if ($bvars || $bvar); - - $document->insertElement("omdoc:symbol",undef,(name=>$cs,"xml:id"=>ToString($cs).".sym")); - $document->openElement("omdoc:notation",(name=>$name,cd=>$cd)); - #First, generate prototype: - $nargs = ToString($nargs)||0; - $document->openElement('omdoc:prototype'); - $document->openElement($appElement) if $nargs; - my $cr="fun" if $nargs; - $document->insertElement('om:OMS',undef, - (cd=>$cd, - name=>$name, - "cr"=>$cr)); - if ($bvar || $bvars) { - $document->openElement('om:OMBVAR'); - if ($bvar) { - $document->insertElement('omdoc:expr',undef,(name=>"arg$bvar")); - } else { - $document->openElement('omdoc:exprlist',(name=>"args")); - $document->insertElement('omdoc:expr',undef,(name=>"arg")); - $document->closeElement('omdoc:exprlist'); - } - $document->closeElement('om:OMBVAR'); - } - for my $id(1..$nargs) { - next if ($id==$bvars || $id==$bvar); - if ($id!=$assocarg) { - my $argname="arg$id"; - $document->insertElement('omdoc:expr',undef,(name=>"$argname")); - } - else { - $document->openElement('omdoc:exprlist',(name=>"args")); - $document->insertElement('omdoc:expr',undef,(name=>"arg")); - $document->closeElement('omdoc:exprlist'); - } - } - $document->closeElement($appElement) if $nargs; - $document->closeElement('omdoc:prototype'); - #Next, absorb rendering: - $document->absorb($pmml); - $document->closeElement("omdoc:notation"); - }, afterDigest=>sub { my ($stomach, $whatsit) = @_; - my $keys = $whatsit->getArg(6); - my $module = LookupValue('current_module'); - $whatsit->setProperties(for=>ToString($whatsit->getArg(1))); - $whatsit->setProperty(role=>($keys ? $keys->getValue('role') - : (ToString($whatsit->getArg(2)) ? 'applied' - : undef))); }); -sub symdef_presentation_TeX { - my($presentation)=@_; - my @tokens = $presentation->unlist; - my(@frag,@frags) = (); - while(my $tok = shift(@tokens)){ - if($tok->equals(T_PARAM)){ - push(@frags,Invocation(T_CS('\@symdef@pres@text'),Tokens(@frag))) if @frag; - @frag=(); - my $n = shift(@tokens)->getString; - push(@frags,Invocation(T_CS('\@symdef@pres@arg'),T_OTHER($n+1))); } - else { - push(@frag,T_OTHER($tok->getString)); }} # IMPORTANT! Neutralize the tokens! - push(@frags,Invocation(T_CS('\@symdef@pres@text'),Tokens(@frag))) if @frag; - Tokens(map($_->unlist,@frags)); } -DefConstructor('\@symdef@pres@arg{}', "", - afterDigest=>sub { my ($stomach, $whatsit) = @_; - my $select = $whatsit->getArg(1); - $select = ref $select ? $select->toString : ''; - $whatsit->setProperty(select=>"*[".$select."]"); }); -DefConstructor('\@symdef@pres@text{}', "#1"); -DefConstructor('\requirepackage{} Semiverbatim',"", - afterDigest=>sub { my ($stomach, $whatsit) = @_; - my $select = $whatsit->getArg(1); - RequirePackage($select->toString); });#$ -Tag('omdoc:recurse',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:imports',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:theory',afterOpen=>\&numberIt,afterClose=>\&locateIt); -1; diff --git a/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls b/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls deleted file mode 100644 index 2d239c41ac8..00000000000 --- a/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls +++ /dev/null @@ -1,28 +0,0 @@ -%% -%% This is file `omdoc.cls', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% omdoc.dtx (with options: `cls') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesClass{omdoc}[2010/06/25 v1.0 OMDoc Documents] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\def\omdoc@class{article} -\DeclareOption{report}{\def\omdoc@class{report}\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{book}{\def\omdoc@class{book}\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{chapter}{\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{part}{\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{showignores}{\PassOptionsToPackage{\CurrentOption}{omdoc}} -\DeclareOption{extrefs}{\PassOptionsToPackage{\CurrentOption}{sref}} -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} -\ProcessOptions -\LoadClass{\omdoc@class} -\RequirePackage{omdoc} -\let\orig@document=\document -\srefaddidkey{document} -\renewcommand{\document}[1][]{\metasetkeys{document}{#1}\orig@document} -\endinput -%% -%% End of file `omdoc.cls'. diff --git a/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls.ltxml b/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls.ltxml deleted file mode 100644 index 866a6339f5b..00000000000 --- a/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.cls.ltxml +++ /dev/null @@ -1,53 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use LaTeXML::Util::Pathname; -use Cwd qw(cwd abs_path); -DeclareOption('report',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('book',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('chapter',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('part',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('showignores',sub {PassOptions('omdoc','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption('extrefs',sub {PassOptions('sref','sty',ToString(Digest(T_CS('\CurrentOption')))); }); -DeclareOption(undef,sub {PassOptions('article','cls',ToString(Digest(T_CS('\CurrentOption')))); }); -ProcessOptions(); -LoadClass('article'); -RequirePackage('sref'); -RegisterNamespace('omdoc'=>"http://omdoc.org/ns"); -RegisterNamespace('om'=>"http://www.openmath.org/OpenMath"); -RegisterNamespace('m'=>"http://www.w3.org/1998/Math/MathML"); -RegisterNamespace('dc'=>"http://purl.org/dc/elements/1.1/"); -RegisterNamespace('cc'=>"http://creativecommons.org/ns"); -RegisterNamespace('stex'=>"http://kwarc.info/ns/sTeX"); -RegisterNamespace('ltx'=>"http://dlmf.nist.gov/LaTeXML"); -RelaxNGSchema('omdoc+ltxml', - '#default'=>"http://omdoc.org/ns", - 'om'=>"http://www.openmath.org/OpenMath", - 'm'=>"http://www.w3.org/1998/Math/MathML", - 'dc'=>"http://purl.org/dc/elements/1.1/", - 'cc'=>"http://creativecommons.org/ns", - 'ltx'=>"http://dlmf.nist.gov/LaTeXML", - 'stex'=>"http://kwarc.info/ns/sTeX"); -RequirePackage('omdoc'); -sub xmlBase { - my $baseuri = LookupValue('baseuri'); - my $baselocal = LookupValue('baselocal'); - my $cdir = abs_path(cwd()); - $cdir =~ s/^$baselocal//; - my ($d,$f,$t) = pathname_split(LookupValue('SOURCEFILE')); - $t = '' if LookupValue('cooluri'); - Tokenize($baseuri.$cdir.'/'.$f.$t); } -DefEnvironment('{document} OptionalKeyVals:omdoc', - "" - . "#body" - ."", - beforeDigest=> sub { AssignValue(inPreamble=>0); }, - afterDigest=> sub { $_[0]->getGullet->flush; return; }); -1; diff --git a/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty b/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty deleted file mode 100644 index 625c4ef0751..00000000000 --- a/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty +++ /dev/null @@ -1,72 +0,0 @@ -%% -%% This is file `omdoc.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% omdoc.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{omdoc}[2010/06/25 v1.0 OMDoc document Structure] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\if@chapter\@chapterfalse -\newif\if@part\@partfalse -\newcount\section@level\section@level=3 -\newif\ifshow@ignores\show@ignoresfalse -\def\omdoc@class{article} -\DeclareOption{report}{\def\omdoc@class{report}\section@level=2} -\DeclareOption{book}{\def\omdoc@class{book}\section@level=1} -\DeclareOption{chapter}{\section@level=2\@chaptertrue} -\DeclareOption{part}{\section@level=1\@chaptertrue\@parttrue} -\DeclareOption{showignores}{\show@ignorestrue} -\DeclareOption{extrefs}{\PassOptionsToPackage{\CurrentOption}{sref}} -\ProcessOptions -\RequirePackage{sref} -\RequirePackage{comment} -\srefaddidkey{omgroup} -\addmetakey{omgroup}{creators} -\addmetakey{omgroup}{contributors} -\addmetakey{omgroup}{type} -\addmetakey*{omgroup}{short} -\addmetakey*{omgroup}{display} -\newenvironment{omgroup}[2][]% title -{\bgroup\metasetkeys{omgroup}{#1}\sref@target -\ifx\omgroup@display\st@flow\noindent{\Large\textbf{#2}\\[.3ex]\noindent\ignorespaces} -\else -\if@part\ifnum\section@level=1\part{#2}\sref@label@id{Part \thepart}\fi\fi -\if@chapter\ifnum\section@level=2\chapter{#2}\sref@label@id{Chapter \thechapter}\fi\fi -\ifnum\section@level=3\section{#2}\sref@label@id{Section \thesection}\fi -\ifnum\section@level=4\subsection{#2}\sref@label@id{Subsection \thesubsection}\fi -\ifnum\section@level=5\subsubsection{#2}\sref@label@id{Subsubsection \thesubsubsection}\fi -\ifnum\section@level=6\paragraph{#2}\sref@label@id{this paragraph}\fi -\ifnum\section@level=7\subparagraph{#2}\sref@label@id{this subparagraph}\fi -\advance\section@level by 1 -\fi}{\egroup} -\providecommand\printindex{\IfFileExists{\jobname.ind}{\input{\jobname.ind}}{}} -\ifshow@ignores -\addmetakey{ignore}{type} -\addmetakey{ignore}{comment} -\newenvironment{ignore}[1][] -{\metasetkeys{ignore}{#1}\textless\ignore@type\textgreater\bgroup\itshape} -{\egroup\textless/\ignore@type\textgreater} -\renewenvironment{ignore}{}{}\else\excludecomment{ignore}\fi -\long\def\STRlabel#1#2{\STRlabeldef{#1}{#2}{#2}} -\def\STRcopy#1{\expandafter\ifx\csname STR@#1\endcsname\relax -\message{STR warning: reference #1 undefined!} -\else\csname STR@#1\endcsname\fi} -\newcommand{\STRsemantics}[3][]{#2\def\@test{#1}\ifx\@test\@empty\STRlabeldef{#1}{#2}\fi} -\def\STRlabeldef#1{\expandafter\gdef\csname STR@#1\endcsname} -\def\black#1{\textcolor{black}{#1}} -\def\gray#1{\textcolor{gray}{#1}} -\def\blue#1{\textcolor{blue}{#1}} -\def\red#1{\textcolor{red}{#1}} -\def\green#1{\textcolor{green}{#1}} -\def\cyan#1{\textcolor{cyan}{#1}} -\def\magenta#1{\textcolor{magenta}{#1}} -\def\brown#1{\textcolor{brown}{#1}} -\def\yellow#1{\textcolor{yellow}{#1}} -\def\orange#1{\textcolor{orange}{#1}} -\newcommand{\baseURI}[2][]{} -\endinput -%% -%% End of file `omdoc.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty.ltxml b/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty.ltxml deleted file mode 100644 index 13fa706247e..00000000000 --- a/Master/texmf-dist/tex/latex/stex/omdoc/omdoc.sty.ltxml +++ /dev/null @@ -1,112 +0,0 @@ -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use Cwd qw(cwd abs_path); -DeclareOption('report',''); -DeclareOption('book',''); -DeclareOption('chapter',''); -DeclareOption('part',''); -DeclareOption('showignores',''); -DeclareOption('extrefs',''); -RequirePackage('sref'); -RequirePackage('omtext'); -DefEnvironment('{omgroup} OptionalKeyVals:omgroup {}', - "\n" - . "#2\n" - . "#body\n" - . ""); -DefParameterType('IfBeginFollows', sub { - my ($gullet) = @_; - $gullet->skipSpaces; - my $next = $gullet->readToken; - $gullet->unread($next); - $next = ToString($next); - #Hm, falling back to regexp handling, the $gullet->ifNext approach didn't work properly - return 1 unless ($next=~/^\\begin/); - return; - }, - reversion=>'', optional=>1);#$ -Let('\group@item@maybe@unwrap','\relax'); -DefMacro('\group@item[] IfBeginFollows', sub { - my($gullet,$tag,$needswrapper)=@_; - ( T_CS('\group@item@maybe@unwrap'), - ($needswrapper ? (Invocation(T_CS('\group@item@wrap'),$tag)->unlist) : ()) ); }); -DefConstructor('\group@item@wrap {}', - "" - . "?#1(#1)()" - . "", - beforeDigest=>sub { - Let('\group@item@maybe@unwrap','\group@item@unwrap'); - #$_[0]->bgroup; - useCMPItemizations(); - return; }, - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\group@item@unwrap', - "", - beforeDigest=>sub { - # $_[0]->egroup;#$ - Let('\group@item@maybe@unwrap','\relax'); }, - beforeConstruct=>sub { - $_[0]->maybeCloseElement('omdoc:p'); - $_[0]->maybeCloseElement('omdoc:CMP'); - $_[0]->maybeCloseElement('omdoc:omtext'); - }); -Let('group@item@maybe@unwrap','\relax'); -Let('\itemize@item'=>'\group@item'); -Let('\enumerate@item'=>'\group@item'); -Let('\description@item'=>'\group@item'); -DefEnvironment('{itemize}', - "" - . "#body" - ."", - properties=>sub { beginItemize('itemize'); }, - beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); }); -DefEnvironment('{enumerate}', - "#body", - properties=>sub { beginItemize('enumerate'); }, - beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); }); -DefEnvironment('{description}', - "" - . "#body" - ."", - properties=>sub { beginItemize('description'); }, - beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); }); -DefConstructor('\printindex',''); -DefConstructor('\tableofcontents',""); -DefConstructor('\bibliography{}',""); -DefKeyVal('ignore','type','Semiverbatim'); -DefKeyVal('ignore','comment','Semiverbatim'); -DefEnvironment('{ignore} OptionalKeyVals:ignore', - "#body"); -DefConstructor('\STRlabel{}{}', sub { - my($document,$label,$object)=@_; - $document->absorb($object); - $document->addAttribute('xml:id'=>ToString($label)) if $label; }); -DefConstructor('\STRcopy{}',""); -DefConstructor('\STRsemantics[]{}{}', sub { - my($document,$label,$ignore,$object)=@_; - $document->absorb($object); - $document->addAttribute('xml:id'=>ToString($label)) if $label; }); -DefMacro('\STRlabeldef{}{}', ""); -sub omdocColorMacro { - my ($color, @args) = @_; - my $tok_color = TokenizeInternal($color); - (T_BEGIN, T_CS('\@omdoc@color'), T_BEGIN, $tok_color->unlist, - T_END, T_CS('\@omdoc@color@content'), T_OTHER('['), $tok_color->unlist, T_OTHER(']'), - T_BEGIN, $args[1]->unlist, T_END, T_END); } -DefMacro('\@omdoc@color{}', sub { MergeFont(color=>$_[1]->toString); return; });#$ -DefConstructor('\@omdoc@color@content[]{}', - "?#isMath(#2)(#2)"); -foreach my $color(qw(black gray blue red green cyan magenta brown yellow orange)) { - DefMacro("\\".$color.'{}', sub { omdocColorMacro($color, @_); }); }#$ -DefConstructor('\newpage',''); -Tag('omdoc:ignore',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:ref',afterOpen=>\&numberIt,afterClose=>\&locateIt); -DefMacro('\baseURI []Semiverbatim', sub { - AssignValue('baselocal'=>abs_path(ToString(Expand($_[1])))); - AssignValue('baseuri'=>ToString(Expand($_[2])));}); -DefConstructor('\url Semiverbatim',"#1"); -DefConstructor('\href Semiverbatim {}',"#2"); -1; diff --git a/Master/texmf-dist/tex/latex/stex/omtext/omtext.sty b/Master/texmf-dist/tex/latex/stex/omtext/omtext.sty deleted file mode 100644 index 6896df9177b..00000000000 --- a/Master/texmf-dist/tex/latex/stex/omtext/omtext.sty +++ /dev/null @@ -1,79 +0,0 @@ -%% -%% This is file `omtext.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% omtext.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{omtext}[2010/06/25 v1.0 OMDoc Text Fragments] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\ifindex\indextrue -\DeclareOption{noindex}{\indexfalse} -\ProcessOptions -\ifindex\makeindex\fi -\RequirePackage{sref} -\RequirePackage{comment} -\srefaddidkey{omtext} -\addmetakey[]{omtext}{functions} -\addmetakey*{omtext}{display} -\addmetakey{omtext}{for} -\addmetakey{omtext}{from} -\addmetakey{omtext}{type} -\addmetakey*{omtext}{title} -\addmetakey*{omtext}{start} -\addmetakey{omtext}{theory} -\addmetakey{omtext}{continues} -\addmetakey{omtext}{verbalizes} -\def\st@flow{flow} -\def\omtext@pre@skip{\smallskip} -\def\omtext@post@skip{} -\providecommand{\stDMemph}[1]{\textbf{#1}} -\newenvironment{omtext}[1][]{\bgroup\metasetkeys{omtext}{#1}\sref@label@id{this paragraph}% -\def\lec##1{\@lec{##1}} -\ifx\omtext@display\st@flow\else\omtext@pre@skip\par\noindent% -\ifx\omtext@title\@empty\else\stDMemph{\omtext@title}: \fi\fi\ignorespaces} -{\egroup\omtext@post@skip} -\srefaddidkey{phrase} -\addmetakey{phrase}{style} -\addmetakey{phrase}{class} -\addmetakey{phrase}{index} -\addmetakey{phrase}{verbalizes} -\addmetakey{phrase}{type} -\newenvironment{phrase}[1][]{\metasetkeys{phrase}{#1}}{} -\def\nlex#1{\green{\sl{#1}}} -\def\nlcex#1{*\green{\sl{#1}}} -\def\@sinlinequote#1{``{\sl{#1}}''} -\def\@@sinlinequote#1#2{\@sinlinequote{#2}~#1} -\newcommand{\sinlinequote}[2][] -{\def\@opt{#1}\ifx\@opt\@empty\@sinlinequote{#2}\else\@@sinlinequote\@opt{#2}\fi} -\def\begin@sblockquote{\begin{quote}\sl} -\def\end@sblockquote{\end{quote}} -\def\begin@@sblockquote#1{\begin@sblockquote} -\def\end@@sblockquote#1{\def\@@lec##1{{\rm ##1}}\@lec{#1}\end@sblockquote} -\newenvironment{sblockquote}[1][] - {\def\@opt{#1}\ifx\@opt\@empty\begin@sblockquote\else\begin@@sblockquote\@opt\fi} - {\ifx\@opt\@empty\end@sblockquote\else\end@@sblockquote\@opt\fi} -\providecommand{\@@lec}[1]{(#1)} -\def\@lec#1{\strut\hfil\strut\null\nobreak\hfill\hbox{\@@lec{#1}}} -\def\lec#1{\@lec{#1}\par} -\newcommand\mygraphics[2][]{\includegraphics[#1]{#2}} -\newcommand\mycgraphics[2][]{\begin{center}\includegraphics[#1]{#2}\end{center}} -\newcommand\mybgraphics[2][]{\fbox{\includegraphics[#1]{#2}\end{center}}} -\newcommand{\omdoc@index}[2][]{\def\@test{#1}% -\ifindex\ifx\@test\@empty\index{#2}\else\index{#1@#2}\fi\fi} -\newcommand{\indexalt}[3][]{{#2}\omdoc@index[#1]{#3}} % word in text and index -\newcommand{\indextoo}[2][]{{#2}\omdoc@index[#1]{#2}} % word in text and index -\newcommand{\@twin}[3][]{\def\@test{#1}% -\ifindex\ifx\@test\@empty\index{#2!#3}\else\index{#1@#2!#3}\fi\index{#3!#2}\fi} -\newcommand{\twinalt}[4][]{#2\@twin[#1]{#3}{#4}} -\newcommand{\twintoo}[3][]{{#2 #3}\@twin[#1]{#2}{#3}} % and use the word compound too -\newcommand{\@atwin}[4][]{\def\@test{#1}% -\ifindex\ifx\@test\@empty\index{#2!#3!#4}\else\index{#1@#2!#3!#4}\fi\index{#3!#2 (#1)}\fi} -\newcommand{\atwinalt}[5][]{#2\@atwin[#1]{#3}{#4}{#4}} -\newcommand{\atwintoo}[4][]{{#2 #3 #4}\@atwin[#1]{#2}{#3}{#4}} % and use it too -\def\omspace#1{\hspace*{#1}} -\endinput -%% -%% End of file `omtext.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/omtext/omtext.sty.ltxml b/Master/texmf-dist/tex/latex/stex/omtext/omtext.sty.ltxml deleted file mode 100644 index 92d9f75f5bc..00000000000 --- a/Master/texmf-dist/tex/latex/stex/omtext/omtext.sty.ltxml +++ /dev/null @@ -1,275 +0,0 @@ -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -use Cwd qw(cwd abs_path); -DeclareOption('noindex',''); -RequirePackage('sref'); -Tag('omdoc:metadata',afterOpen=>\&numberIt,afterClose=>\&locateIt,autoClose=>1,autoOpen=>1); -DefConstructor('\CMP@itemize@item[]', - "?#1(#1)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\CMP@enumerate@item[]', - "?#1(#1)()", - properties=>sub{ RefStepItemCounter(); }); -DefConstructor('\CMP@description@item[]', - "" - . "?#1(#1)()", # trust di and dt to autoclose - properties=>sub{ RefStepItemCounter(); }); -DefEnvironment('{CMP@itemize}', - "#body", - properties=>sub { beginItemize('CMP@itemize'); }, - beforeDigest=>sub { Let(T_CS('\end{itemize}') =>T_CS('\end{CMP@itemize}')); }); -DefEnvironment('{CMP@enumerate}', - "#body", - properties=>sub { beginItemize('CMP@enumerate'); }, - beforeDigest=>sub { Let(T_CS('\end{enumerate}') =>T_CS('\end{CMP@enumerate}')); }); -DefEnvironment('{CMP@description}', - "#body", - properties=>sub { beginItemize('CMP@description'); }, - beforeDigest=>sub { Let(T_CS('\end{description}') =>T_CS('\end{CMP@description}'));}); -sub useCMPItemizations { - Let(T_CS('\begin{itemize}') =>T_CS('\begin{CMP@itemize}')); - Let(T_CS('\begin{enumerate}') =>T_CS('\begin{CMP@enumerate}')); - Let(T_CS('\begin{description}')=>T_CS('\begin{CMP@description}')); - return; } -sub declareFunctions{ - my ($stomach,$whatsit) = @_; - my $keyval = $whatsit->getArg(1); - my $funval = KeyVal($keyval,'functions') if KeyVal($keyval,'functions'); - my @funsymbs = ParseKeyValList($funval); - #Unread the function declarations at the Gullet - foreach (@funsymbs) { - $stomach->getGullet->unread(Tokenize('\lxDeclare[role=FUNCTION]{$'.$_.'$}')->unlist); - } - return; -} -Tag('omdoc:CMP', afterOpen => sub {AssignValue('_LastSeenCMP', $_[1], 'global');return;});#$ -Tag('omdoc:li', autoClose=>1); -Tag('omdoc:dd', autoClose=>1); -Tag('omdoc:di', autoClose=>1); -DefKeyVal('omtext','functions','Semiverbatim'); -DefKeyVal('omtext','display','Semiverbatim'); -DefKeyVal('omtext','for','Semiverbatim'); -DefKeyVal('omtext','from','Semiverbatim'); -DefKeyVal('omtext','type','Semiverbatim'); -DefKeyVal('omtext','title','Plain'); #Math mode in titles. -DefKeyVal('omtext','start','Plain'); #Math mode in start phrases -DefKeyVal('omtext','theory','Semiverbatim'); -DefKeyVal('omtext','continues','Semiverbatim'); -DefKeyVal('omtext','verbalizes','Semiverbatim'); -DefCMPEnvironment('{omtext} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "" - . "" - . "?&KeyVal(#1,'start')(&KeyVal(#1,'start'))()" - . "#body"); -sub DefCMPEnvironment { - my ($proto, $replacement, %options) = @_; - my @before = $options{beforeDigest} ? ($options{beforeDigest}) : (); - push(@before, \&useCMPItemizations); - $options{beforeDigest} = \@before; - my @after = $options{afterDigestBegin} ? ($options{afterDigestBegin}) : (); - push(@after, \&declareFunctions); - $options{afterDigestBegin} = \@after; - DefEnvironment($proto, $replacement, %options); -} -sub DefCMPConstructor { - my ($proto, $replacement, %options) = @_; - my @before = $options{beforeDigest} ? ($options{beforeDigest}) : (); - push(@before, \&useCMPItemizations); - $options{beforeDigest} = \@before; - DefConstructor($proto, $replacement, %options); -}#$ -DefKeyVal('phrase','id','Semiverbatim'); -DefKeyVal('phrase','style','Semiverbatim'); -DefKeyVal('phrase','class','Semiverbatim'); -DefKeyVal('phrase','index','Semiverbatim'); -DefKeyVal('phrase','verbalizes','Semiverbatim'); -DefKeyVal('phrase','type','Semiverbatim'); -DefConstructor('\phrase OptionalKeyVals:phrase {}', - "#2"); -DefConstructor('\nlex{}', - "#1"); -DefConstructor('\nlcex{}', - "#1"); -DefConstructor('\sinlinequote [] {}', - "" - . "?#1(#1\n)()" - . "#2" - . ""); -DefEnvironment('{sblockquote} []', - "?#1(" - . "#1" - . "#body" - . " )" - . "(#body)"); -DefConstructor('\lec{}', - "\n#1"); -RawTeX(' -\newcommand\mygraphics[2][]{\includegraphics[#1]{#2}} -\newcommand\mycgraphics[2][]{\begin{center}\includegraphics[#1]{#2}\end{center}} -\newcommand\mybgraphics[2][]{\fbox{\includegraphics[#1]{#2}\end{center}}} -'); -DefConstructor('\indextoo[]{}', - "" - . "#2" - . "" - . "#2" - . "" - .""); -DefConstructor('\indexalt[]{}{}', - "" - . "#2" - . "" - . "#3" - . "" - .""); -DefConstructor('\twintoo[]{}{}', - "" - . "#2 #3" - . "" - . "#2" - . "#3" - . "" - .""); -DefConstructor('\twinalt[]{}{}{}', - "" - . "#2" - . "" - . "#2" - . "#3" - . "" - .""); -DefConstructor('\atwintoo[]{}{}{}', - "" - . "#2 #3" - . "" - . "#2" - . "#3" - . "#4" - . "" - .""); - -DefConstructor('\atwinalt[]{}{}{}{}', - "" - . "#2" - . "" - . "#2" - . "#3" - . "#4" - . "" - .""); -DefConstructor('\par',sub { $_[0]->maybeCloseElement('omdoc:p'); },alias=>"\\par\n"); -Tag('omdoc:p', autoClose=>1, autoOpen=>1); -Tag('omdoc:CMP', autoClose=>1, autoOpen=>1); -Tag('omdoc:omtext', autoClose=>1, autoOpen=>1); -DefConstructor('\omspace{}',''); -DefConstructor('\emph{}',"#1"); -DefConstructor('\em',""); -DefConstructor('\texttt{}',"#1"); -DefConstructor('\tt',""); -DefConstructor('\textbf{}',"#1"); -DefConstructor('\bf',""); -DefConstructor('\textsf{}',"#1"); -DefConstructor('\sf',""); -DefConstructor('\textsl{}',"#1"); -DefConstructor('\sl',""); -DefConstructor('\textit{}',"#1"); -DefConstructor('\it',""); -Tag('omdoc:phrase', autoClose=>1); -DefEnvironment('{center}','#body'); -DefEnvironment('{flushleft}','#body'); -DefEnvironment('{flushright}','#body'); -DefEnvironment('{minipage}[]{}','#body'); -DefEnvironment('{quote}', - "" - . "#body" - .""); -DefEnvironment('{quotation}', - " - . "#body" - .""); -DefEnvironment('{LARGE}','#body'); -DefEnvironment('{Large}','#body'); -DefEnvironment('{large}','#body'); -DefEnvironment('{small}','#body'); -DefEnvironment('{footnotesize}','#body'); -DefEnvironment('{tiny}','#body'); -DefEnvironment('{scriptsize}','#body'); -DefConstructor('\LARGE',''); -DefConstructor('\Large',''); -DefConstructor('\large',''); -DefConstructor('\small',''); -DefConstructor('\footnotesize',''); -DefConstructor('\scriptsize',''); -DefConstructor('\tiny',''); -DefConstructor('\fbox{}','#1'); -DefConstructor('\footnote[]{}', - "#2"); -DefConstructor('\footnotemark[]',""); -DefConstructor('\footnotetext[]{}', - "#2"); -DefConstructor('\sf', ''); -DefConstructor('\sc', ''); -Tag('omdoc:p',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:omtext',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:omgroup',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:CMP',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:link',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:meta',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:resource',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:ul',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:li',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:di',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:dt',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:dd',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:ol',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:dl',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:idx',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:phrase',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:note',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:tabular',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:thead',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:td',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:tr',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('ltx:caption',afterOpen=>\&numberIt,afterClose=>\&locateIt); -sub numberIt { - my($document,$node,$whatsit)=@_; - my(@parents)=$document->findnodes('ancestor::*[@xml:id]',$node); - my $prefix= (@parents ? $parents[$#parents]->getAttribute('xml:id')."." : ''); - my(@siblings)=$document->findnodes('preceding-sibling::*[@xml:id]',$node); - my $n = scalar(@siblings)+1; - my $id = ($node -> getAttribute('xml:id')); - $node->setAttribute('xml:id'=>$prefix."p$n") unless $id; - my $about = $node -> getAttribute('about'); - $node->setAttribute('about'=>'#'.$node->getAttribute('xml:id')) unless $about; - #Also, provide locators: - my $locator = $whatsit->getProperty('locator'); - #Need to inherit locators if missing: - $locator = (@parents ? $parents[$#parents]->getAttribute('stex:srcref') : '') unless $locator; - $node->setAttribute('stex:srcref'=>$locator) if $locator; } -sub locateIt { - my($document,$node,$whatsit)=@_; - #Estimate trailer locator: - my $trailer = $whatsit->getProperty('trailer'); - return unless $trailer; #Nothing we can do if the trailer isn't defined - $trailer = $trailer->getLocator; - return unless ($trailer && $trailer!~/^\s*$/); #Useless if broken - my $locator = $node->getAttribute('stex:srcref'); - if ($locator) { - $locator =~ /^(.+from=\d+;\d+)/; - my $from = $1; - $trailer =~ /(,to=\d+;\d+.+)$/; - my $to = $1; - $locator = $from.$to; - } else { - $locator = $trailer; #This should never happen - } - $node->setAttribute('stex:srcref' => $locator); -} -1; diff --git a/Master/texmf-dist/tex/latex/stex/presentation/presentation.sty b/Master/texmf-dist/tex/latex/stex/presentation/presentation.sty deleted file mode 100644 index c901ee923dd..00000000000 --- a/Master/texmf-dist/tex/latex/stex/presentation/presentation.sty +++ /dev/null @@ -1,163 +0,0 @@ -%% -%% This is file `presentation.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% presentation.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{presentation}[2010/06/25 v1.0 presentation for semantic macros] -\ProcessOptions -\RequirePackage{keyval}[1997/11/10] -\def\pres@default@precedence{0} -\def\pres@infty{1000000} -\def\iprec{\pres@infty} -\def\niprec{-\pres@infty} -\def\pres@initial@precedence{0} -\def\pres@current@precedence{\pres@initial@precedence} -\def\pres@default@lbrack{(}\def\pres@lbrack{\pres@default@lbrack} -\def\pres@default@rbrack{)}\def\pres@rbrack{\pres@default@rbrack} -\def\PrecSet#1{\def\pres@default@precedence{#1}} -\def\PrecWrite#1{\ifnum\pres@p>\pres@current@precedence\else{#1}\fi} -\def\prepost@clearkeys{\def\pres@p@key{\pres@default@precedence}\def\pres@pi@key{\niprec} -\def\pres@lbrack{\pres@default@lbrack}\def\pres@rbrack{\pres@default@rbrack}} -\define@key{prepost}{lbrack}{\def\pres@lbrack{#1}} -\define@key{prepost}{rbrack}{\def\pres@lbrack{#1}} -\define@key{prepost}{p}{\def\pres@p@key{#1}} -\define@key{prepost}{pi}{\def\pres@pi@key{#1}} -\newcommand{\prefix}[3][]%key, fn, arg -{\prepost@clearkeys\setkeys{prepost}{#1} -{#2}\pres@lbrack{\edef\pres@current@precedence{\pres@pi@key}#3}\pres@rbrack} -\newcommand{\postfix}[3][]%key, fn, arg -{\prepost@clearkeys\setkeys{prepost}{#1} -\pres@lbrack{\edef\pres@current@precedence{\pres@pi@key}#3}\pres@rbrack{#2}} -\def\clearkeys{\let\pres@p@key=\relax -\let\pres@pi@key=\relax% -\let\pres@pi@key=\relax% -\let\pres@pii@key=\relax% -\let\pres@piii@key=\relax} -\define@key{mi}{nobrackets}[yes]{\def\pres@p@key{\pres@infty}% -\def\pres@pi@key{-\pres@infty}} -\define@key{mi}{lbrack}{\def\pres@lbrack@key{#1}} -\define@key{mi}{rbrack}{\def\pres@lbrack@key{#1}} -\define@key{mi}{p}{\def\pres@p@key{#1}} -\define@key{mi}{pi}{\def\pres@pi@key{#1}} -\def\prep@keys@mi% -{\edef\pres@lbrack{\@ifundefined{pres@lbrack@key}\pres@default@lbrack\pres@lbrack@key} -\edef\pres@rbrack{\@ifundefined{pres@rbrack@key}\pres@default@rbrack\pres@rbrack@key} -\edef\pres@p{\@ifundefined{pres@p@key}\pres@default@precedence\pres@p@key} -\edef\pres@pi{\@ifundefined{pres@pi@key}\pres@p\pres@pi@key}} -\newcommand{\mixfixi}[4][]%key, pre, arg, post -{\clearkeys\setkeys{mi}{#1}\prep@keys@mi% -\PrecWrite\pres@lbrack% -#2{\edef\pres@current@precedence{\pres@pi}#3}#4% -\PrecWrite\pres@rbrack} -\def\@assoc#1#2#3{% precedence, function, argv -\let\@tmpop=\relax% do not print the function the first time round -\@for\@I:=#3\do{\@tmpop% print the function -{\edef\pres@current@precedence{#1}\@I}% -\let\@tmpop=#2}}%update the function -\newcommand{\mixfixa}[5][]%key, pre, arg, post, assocop -{\clearkeys\setkeys{mi}{#1}\prep@keys@mi% -\PrecWrite\pres@lbrack{#2}{\@assoc\pres@pi{#5}{#3}}{#4}\PrecWrite\pres@rbrack} -\define@key{mii}{nobrackets}[yes]{\def\pres@p@key{\pres@infty}% -\def\pres@pi@key{-\pres@infty}\def\pres@pii@key{-\pres@infty}} -\define@key{mii}{lbrack}{\def\pres@lbrack@key{#1}} -\define@key{mii}{rbrack}{\def\pres@lbrack@key{#1}} -\define@key{mii}{p}{\def\pres@p@key{#1}} -\define@key{mii}{pi}{\def\pres@pi@key{#1}} -\define@key{mii}{pii}{\def\pres@pii@key{#1}} -\def\prep@keys@mii{\prep@keys@mi% -\edef\pres@pii{\@ifundefined{pres@pii@key}\pres@p\pres@pii@key}} -\newcommand{\mixfixii}[6][]%key, pre, arg1, mid, arg2, post -{\clearkeys\setkeys{mii}{#1}\prep@keys@mii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\edef\pres@current@precedence{\pres@pii}#5}#6% -\PrecWrite\pres@rbrack} -\newcommand{\mixfixia}[7][]%key, pre, arg1, mid, arg2, post, assocop -{\clearkeys\setkeys{mii}{#1}\prep@keys@mii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\@assoc\pres@pii{#7}{#5}}#6% -\PrecWrite\pres@rbrack} -\newcommand{\mixfixai}[7][]%key, pre, arg1, mid, arg2, post, assocop -{\clearkeys\setkeys{mii}{#1}\prep@keys@mii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\@assoc\pres@pi{#7}{#3}}% -#4{\edef\pres@current@precedence{\pres@pii}#5}#6% -\PrecWrite\pres@rbrack} -\define@key{miii}{nobrackets}[yes]{\def\pres@p@key{\pres@infty}% -\def\pres@pi@key{-\pres@infty} -\def\pres@pii@key{-\pres@infty} -\def\pres@pii@key{-\pres@infty}} -\define@key{miii}{lbrack}{\def\pres@lbrack@key{#1}} -\define@key{miii}{rbrack}{\def\pres@lbrack@key{#1}} -\define@key{miii}{p}{\def\pres@p@key{#1}} -\define@key{miii}{pi}{\def\pres@pi@key{#1}} -\define@key{miii}{pii}{\def\pres@pii@key{#1}} -\define@key{miii}{piii}{\def\pres@piii@key{#1}} -\def\prep@keys@miii{\prep@keys@mii% -\edef\pres@piii{\@ifundefined{pres@piii@key}{\pres@p}{\pres@piii@key}}} -\newcommand{\mixfixiii}[8][]%key, pre, arg1, mid1, arg2, mid2, arg3, post -{\clearkeys\setkeys{miii}{#1}\prep@keys@miii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\edef\pres@current@precedence{\pres@pii}#5}% -#6{\edef\pres@current@precedence{\pres@pii}#7}#8% -\PrecWrite\pres@rbrack} -\newcommand{\mixfixaii}[9][]%key, pre, arg1, mid1, arg2, mid2, arg3, post, sep -{\clearkeys\setkeys{miii}{#1}\prep@keys@miii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\@assoc\pres@pi{#9}{#3}}% -#4{\edef\pres@current@precedence{\pres@pii}#5}% -#6{\edef\pres@current@precedence{\pres@pii}#7}#8% -\PrecWrite\pres@rbrack} -\newcommand{\mixfixiai}[9][]%key, pre, arg1, mid1, arg2, mid2, arg3, post, assocop -{\clearkeys\setkeys{miii}{#1}\prep@keys@miii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\@assoc\pres@pi{#9}{#5}}% -#6{\edef\pres@current@precedence{\pres@pii}#7}#8% -\PrecWrite\pres@rbrack} -\newcommand{\mixfixiia}[9][]%key, pre, arg1, mid1, arg2, mid2, arg3, post,assocop -{\clearkeys\setkeys{miii}{#1}\prep@keys@miii% -\PrecWrite\pres@lbrack% write bracket if necessary -#2{\edef\pres@current@precedence{\pres@pi}#3}% -#4{\edef\pres@current@precedence{\pres@pii}#5}% -#6{\@assoc\pres@pi{#9}{#7}}#8% -\PrecWrite\pres@rbrack} -\newcommand{\prefixa}[4][]%keys, fn, arg, sep -{\prepost@clearkeys\setkeys{prepost}{#1} -{#2}\pres@lbrack{\@assoc\pres@pi@key{#3}{#4}}\pres@rbrack} -\newcommand{\postfixa}[4][]%keys, fn, arg, sep -{\prepost@clearkeys\setkeys{prepost}{#1} -\pres@lbrack{\@assoc\pres@pi@key{#3}{#4}}\pres@rbrack{#2}} -\newcommand{\infix}[4][]{\mixfixii[#1]{}{#3}{#2}{#4}{}} -\newcommand{\assoc}[3][]{\mixfixa[#1]{}{#3}{}{#2}} -\def\setegroup#1#2{\expandafter\def\csname #1@egroup\endcsname{#2}} -\def\elide#1#2#3{\@ifundefined{#1@egroup}% -{\def\@elevel{0} -\PackageError{presentation}{undefined egroup #1, assuming value 0}% -{When calling \protect\elide{#1}... the elision group #1 has be have\MessageBreak -been set by \protect\setegroup before, e.g. by \protect\setegroup{an}{0}.}}% -{\edef\@elevel{\csname #1@egroup\endcsname}}% -\ifnum\@elevel>#2\else{#3}\fi} -\def\provideEdefault#1#2{\expandafter\def\csname#1@edefault\endcsname{#2} -\@ifundefined{this@module}{}% -{\expandafter\g@addto@macro\this@module{\expandafter\def\csname#1@edefault\endcsname{#2}}}} -\def\setEdefault#1#2{\expandafter\def\csname #1@edfault\endcsname{#2}} -\def\fromEcontext#1{\csname #1@edefault\endcsname} -\newcommand{\vname}[2][]{#2\def\@opt{#1}\ifx\@opt\@empty\else\expandafter\gdef\csname MOD@name@#1\endcsname{#2}\fi} -\def\vnref#1{\csname MOD@name@#1\endcsname} -\newcommand{\primvar}[2][]{\vname[#1]{#2^\prime}} -\newcommand{\pprimvar}[2][]{\vname[#1]{#2^{\prime\prime}}} -\newcommand{\uivar}[3][]{\vname[#1]{{#2}^{#3}}} -\newcommand{\livar}[3][]{\vname[#1]{{#2}_{#3}}} -\newcommand{\ulivar}[4][]{\vname[#1]{{#2}^{#3}_{#4}}} -\newcommand{\arrayline}[2]{#1#2\\} -\newcommand{\arraycell}[1]{#1&} -\endinput -%% -%% End of file `presentation.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/presentation/presentation.sty.ltxml b/Master/texmf-dist/tex/latex/stex/presentation/presentation.sty.ltxml deleted file mode 100644 index cfb1c1e8943..00000000000 --- a/Master/texmf-dist/tex/latex/stex/presentation/presentation.sty.ltxml +++ /dev/null @@ -1,381 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -DefMacro('\iprec','1000000'); -DefMacro('\niprec','-1000000'); -DefMacro('\prefix[]{}{}','\@prefix[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'); -DefConstructor('\@prefix OptionalKeyVals:mi {}{}', - "" - . "" - . "#2" - . "" - . "(" - . "#3" - . ")" - . "" - . "" - ."", - afterDigest=>sub { - #Default argument precedence is -\infty - my $keyval = $_[1]->getArg(1); - $keyval->setValue('pi',-1000000) unless ($keyval && defined($keyval->getValue('pi'))); - applyPrecedencePreferences(@_); - }, - properties=>sub { getSymmdefProperties($_[1]); }); -DefMacro('\postfix []{}{}','\@postfix[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'); -DefConstructor('\@postfix OptionalKeyVals:mi {}{}', - "" - . "" - . "" - . "(" - . "#3" - . ")" - . "" - . "#2" - . "" - ."", - afterDigest=>sub { - #Default argument precedence is -\infty - my $keyval = $_[1]->getArg(1); - $keyval->setValue('pi',-1000000) unless ($keyval && defined($keyval->getValue('pi'))); - applyPrecedencePreferences(@_); - }, - properties=>sub { getSymmdefProperties($_[1]); }); -our $max_arguments = 10; #Currently max 10 arguments to \symdef. -DefKeyVal('mi','lbrack','Semiverbatim'); -DefKeyVal('mi','rbrack','Semiverbatim'); -DefKeyVal('mi','p','Semiverbatim'); -DefKeyVal('mi','pi','Semiverbatim'); -DefKeyVal('mi','pii','Semiverbatim'); #Why are we using this at mixfixai ? -DefKeyVal('mi','cd','Semiverbatim'); -DefKeyVal('mi','name','Semiverbatim'); -DefKeyVal('mi','nobrackets','Semiverbatim'); -sub argument_precedence { - my ($keyval) = @_; - my $attr = 'pi'; - my @precs = (); - foreach (1..$max_arguments) { - if (defined KeyVal($keyval,$attr)) { - push @precs, ToString(KeyVal($keyval,$attr)) - } else { - push @precs, ""; - } - $attr = $attr.'i'; - } - return join(" ",@precs)." "; -} -sub applyPrecedencePreferences { - my ($stomach,$whatsit) = @_; - my @args = $whatsit->getArgs; - my $keyvals = shift @args; - return unless (defined $keyvals); - my %kvhash = %{$keyvals->getKeyVals}; - #Default p (operator precedence) if not set: - my $default_precedence = LookupValue('default_precedence'); - $keyvals->setValue('p',$default_precedence) unless defined($keyvals->getValue('p')); - return unless (exists $kvhash{'nobrackets'}); - $keyvals->setValue('p',1000000); - $keyvals->setValue('pi',-1000000); - $keyvals->setValue('pii',-1000000); - $keyvals->setValue('piii',-1000000); - return; -}#$ -DefMacro('\mixfixi[]{}{}{}', - '\@mixfixi[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}'); -DefConstructor('\@mixfixi OptionalKeyVals:mi {}{}{}', - "" - . "" - . "(" - . "#2 #3 #4" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefMacro('\mixfixa[]{}{}{}{}', - '\@mixfixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}' - . '{$\crossrefOp[fun]{#5}$}'); -DefConstructor('\@mixfixa OptionalKeyVals:mi {}{}{}{}', - "" - . "" - . "(" - . "#2" - . "" - . "#5" - . "" - . "" - . "#4" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefKeyVal('mii','lbrack','Semiverbatim'); -DefKeyVal('mii','rbrack','Semiverbatim'); -DefKeyVal('mii','p','Semiverbatim'); -DefKeyVal('mii','pi','Semiverbatim'); -DefKeyVal('mii','pii','Semiverbatim'); -DefKeyVal('mii','cd','Semiverbatim'); -DefKeyVal('mii','name','Semiverbatim'); -DefKeyVal('mii','nobrackets','Semiverbatim'); -DefMacro('\mixfixii[]{}{}{}{}{}', - '\@mixfixii[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}'); -DefConstructor('\@mixfixii OptionalKeyVals:mi {}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4 #5 #6" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefMacro('\mixfixia[]{}{}{}{}{}{}', - '\@mixfixia[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}' - . '{$\crossrefOp[fun]{#7}$}'); -DefConstructor('\@mixfixia OptionalKeyVals:mi {}{}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4" - . "" - . "#7" - . "" - . "" - . "#6" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefMacro('\mixfixai[]{}{}{}{}{}{}', - '\@mixfixai[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - .'{$\crossrefOp[fun]{#4}$}{$#5 $}' - .'{$\crossrefOp[fun]{#6}$}' - .'{$\crossrefOp[fun]{#7}$}'); -DefConstructor('\@mixfixai OptionalKeyVals:mi {}{}{}{}{}{}', - "" - . "" - . "(" - . "#2" - . "" - . "#7" - . "" - . "" - . "#4 #5 #6" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefKeyVal('miii','lbrack','Semiverbatim'); -DefKeyVal('miii','rbrack','Semiverbatim'); -DefKeyVal('miii','p','Semiverbatim'); -DefKeyVal('miii','pi','Semiverbatim'); -DefKeyVal('miii','pii','Semiverbatim'); -DefKeyVal('miii','piii','Semiverbatim'); -DefKeyVal('miii','cd','Semiverbatim'); -DefKeyVal('miii','name','Semiverbatim'); -DefKeyVal('miii','nobrackets','Semiverbatim'); -DefMacro('\mixfixiii[]{}{}{}{}{}{}{}', - '\@mixfixiii[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}{$#7 $}' - . '{$\crossrefOp[fun]{#8}$}'); -DefConstructor('\@mixfixiii OptionalKeyVals:mi {}{}{}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4 #5 #6 #7 #8" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefMacro('\mixfixaii[]{}{}{}{}{}{}{}{}', - '\@mixfixaii[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}{$#7 $}' - . '{$\crossrefOp[fun]{#8}$}' - . '{$\crossrefOp[fun]{#9}$}'); -DefConstructor('\@mixfixaii OptionalKeyVals:mi {}{}{}{}{}{}{}{}', - "" - . "" - . "(" - . "#2" - . "" - . "#9" - . "" - . "" - . "#4 #5 #6 #7 #8" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefMacro('\mixfixiai[]{}{}{}{}{}{}{}{}', - '\@mixfixiai[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}{$#7 $}' - . '{$\crossrefOp[fun]{#8}$}' - . '{$\crossrefOp[fun]{#9}$}'); -DefConstructor('\@mixfixiai OptionalKeyVals:mi {}{}{}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4" - . "" - . "#9" - . "" - . "" - . "#6 #7 #8" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefMacro('\mixfixiia[]{}{}{}{}{}{}{}{}', - '\@mixfixiia[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}' - . '{$\crossrefOp[fun]{#4}$}{$#5 $}' - . '{$\crossrefOp[fun]{#6}$}{$#7 $}' - . '{$\crossrefOp[fun]{#8}$}' - . '{$\crossrefOp[fun]{#9}$}'); -DefConstructor('\@mixfixiia OptionalKeyVals:mi {}{}{}{}{}{}{}', - "" - . "" - . "(" - . "#2 #3 #4 #5 #6" - . "" - . "#9" - . "" - . "" - . "#8" - . ")" - . "" - ."", - afterDigest=>sub { applyPrecedencePreferences(@_);}, - properties=>sub { getSymmdefProperties($_[1]); });#$ -DefMacro('\prefixa[]{}{}{}','\@prefixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}{$#4 $}'); -DefConstructor('\@prefixa OptionalKeyVals:mi {}{}{}', - "" - . "" - . "#2" - . "" - . "(" - . "" - . "#4" - . "" - . "" - . ")" - . "" - . "" - ."", - afterDigest=>sub { - #Default argument precedence is -\infty - my $keyval = $_[1]->getArg(1); - $keyval->setValue('pi',-1000000) unless ($keyval && defined($keyval->getValue('pi'))); - applyPrecedencePreferences(@_); - }, - properties=>sub { getSymmdefProperties($_[1]); }); -DefMacro('\postfixa []{}{}{}','\@postfixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}{$#4 $}'); -DefConstructor('\@postfixa OptionalKeyVals:mi {}{}{}', - "" - . "" - . "" - . "(" - . "" - . "#4" - . "" - . "" - . ")" - . "" - . "#2" - . "" - ."", - afterDigest=>sub { - #Default argument precedence is -\infty - my $keyval = $_[1]->getArg(1); - $keyval->setValue('pi',-1000000) unless ($keyval && defined($keyval->getValue('pi'))); - applyPrecedencePreferences(@_); - }, - properties=>sub { getSymmdefProperties($_[1]); }); -RawTeX(' -\newcommand{\infix}[4][]{\mixfixii[#1]{}{#3}{#2}{#4}{}} -\newcommand{\assoc}[3][]{\mixfixa[#1]{}{#3}{}{#2}} -'); -sub cvar_id { - my ($id)=@_; - $id=ToString($id); - if (!$id) { - $id=LookupValue('cvar_id'); - $id=0 unless $id; - $id++; - AssignValue('cvar_id',$id,'global'); - } - $id="cvar.$id"; $id;} -DefConstructor('\vname[]{}', - "#2", - requireMath=>1); -DefConstructor('\crossrefOp[]{}', - "?#2(" - . "" - . "#2" - .")()", - requireMath=>1); -DefMacro('\vnref{}','\@XMRef{cvar.#1}'); -RawTeX(' -\newcommand{\primvar}[2][]{\vname[#1]{#2^\prime}} -\newcommand{\pprimvar}[2][]{\vname[#1]{#2^{\prime\prime}}} -\newcommand{\uivar}[3][]{\vname[#1]{{#2}^{#3}}} -\newcommand{\livar}[3][]{\vname[#1]{{#2}_{#3}}} -\newcommand{\ulivar}[4][]{\vname[#1]{{#2}^{#3}_{#4}}} -'); -1; diff --git a/Master/texmf-dist/tex/latex/stex/problem/problem.sty b/Master/texmf-dist/tex/latex/stex/problem/problem.sty deleted file mode 100644 index 2a69e3f75e6..00000000000 --- a/Master/texmf-dist/tex/latex/stex/problem/problem.sty +++ /dev/null @@ -1,117 +0,0 @@ -%% -%% 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}[2010/06/25 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 deleted file mode 100644 index 39b1fee29e1..00000000000 --- a/Master/texmf-dist/tex/latex/stex/problem/problem.sty.ltxml +++ /dev/null @@ -1,60 +0,0 @@ -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#"); -DefCMPEnvironment('{problem} OptionalKeyVals:problem', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "?&KeyVal(#1,'min')(&KeyVal(#1,'min'))()" - . "?&KeyVal(#1,'pts')(&KeyVal(#1,'pts'))()" - . "#body" - ."\n"); -DefKeyVal('soln','id','Semiverbatim'); -DefKeyVal('soln','height','Semiverbatim'); -DefKeyVal('soln','for','Semiverbatim'); -DefCMPEnvironment('{solution} OptionalKeyVals:soln', - "" - . "#body" - . ""); -DefCMPEnvironment('{exnote}', - "" - . "" - . "#body" - .""); -DefCMPEnvironment('{hint}', - "" - . "" - . "#body" - .""); -DefConstructor('\pts{}',""); -DefConstructor('\min{}',""); -DefKeyVal('prob','pts','Semiverbatim'); -DefKeyVal('prob','min','Semiverbatim'); -DefKeyVal('prob','title','Semiverbatim'); -DefConstructor('\includeproblem OptionalKeyVals:prob Semiverbatim', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "?&KeyVal(#1,'min')(&KeyVal(#1,'min'))()" - . "?&KeyVal(#1,'pts')(&KeyVal(#1,'pts'))()" - .""); -Tag('omdoc:exercise',afterOpen=>\&numberIt); -Tag('omdoc:solution',afterOpen=>\&numberIt); -Tag('omdoc:hint',afterOpen=>\&numberIt); -1; diff --git a/Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty b/Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty deleted file mode 100644 index c9611171662..00000000000 --- a/Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty +++ /dev/null @@ -1,66 +0,0 @@ -%% -%% This is file `reqdoc.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% reqdoc.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{reqdoc}[2010/06/25 v0.3 Semantic Requirement Documents] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\if@deps\@depsfalse -\DeclareOption{recorddeps}{\@depstrue} -\ProcessOptions -\RequirePackage{sref} -\RequirePackage{longtable} -\newif\ifreqsnum\reqsnumfalse -\addmetakey{reqs}{numbering} -\addmetakey[R]{reqs}{prefix} -\def\reqs@no{no} -\newenvironment{requirements}[1][]% -{\metasetkeys{reqs}{#1}\ifx\reqs@numbering\reqs@no\reqsnumfalse\else\reqsnumtrue\fi}{} -\addmetakey{req}{id} -\addmetakey{req}{prio} -\addmetakey{req}{refs} -\addmetakey{req}{num} -\newcounter{reqnum}[section] -\def\req@do@refs#1#2{\let\@tmpop=\relax\@for\@I:=#1\do{\@tmpop\req@do@ref{\@I}\let\@tmpop=#2}} -\def\req@do@ref#1{\sref@hlink@ifh{#1}{\req@ref{#1}{number}}} -\def\req@def@aux#1#2#3{\expandafter\xdef\csname req@#1@#2\endcsname{#3}} -\def\req@write@aux#1#2#3{\protected@write\@auxout{}{\string\req@def@aux{#1}{#2}{\thesection.#3}}} -\def\req@def#1#2#3{\req@def@aux{#1}{#2}{#3}\req@write@aux{#1}{#2}{#3}} -\def\req@ref#1#2{\csname req@#1@#2\endcsname} -\def\print@req@prio{\ifx\req@prio\@empty\else(Priority: \req@prio)\fi} -\def\print@req@label{\sref@target@ifh\req@id{\reqs@prefix\arabic{reqnum}: }} -\def\print@req@refs{\ifx\req@refs\@empty\else\hfill [from~\req@do@refs{\req@refs}{,}]\fi} -\newenvironment{requirement}[1][]% -{\metasetkeys{req}{#1}\stepcounter{reqnum} -\ifreqsnum\ifx\req@id\@empty\else\req@def\req@id{number}\thereqnum\fi -\noindent\textbf{\print@req@label}\fi -\newcommand{\reqnote}[1]{\par\noindent Note: ##1} -\print@req@prio} -{\medskip\print@req@refs} -\newenvironment{reqtable}[1][]{\metasetkeys{reqs}{#1} -\begin{center}\begin{longtable}{|l|l|p{6cm}|p{5cm}|l|}\hline -\# & Prio & Requirement & Notes & Refs\\\hline\hline} -{\end{longtable}\end{center}} -\newcommand{\reqline}[3][]% -{\metasetkeys{req}{#1}\stepcounter{reqnum} -\req@def\req@id{number}\thereqnum% remember the number for reference -\textbf{\sref@target@ifh\req@id{\reqs@prefix\arabic{reqnum}}}& -\req@prio &\req@do@refs\req@refs{,}\tabularnewline\hline} -\newcommand{\importreqs}[1]{\req@dep@write{"#1.tex"}{IMPORTREQS}\makeatletter\input{#1.aux}\makeatother} -\newcommand{\rinput}[1]{\req@dep@write{"#1.tex"}{[dt="input"]}\bgroup\@depsfalse\input{#1}\egroup} -\if@deps\newwrite\req@depfile -\immediate\openout\req@depfile=\jobname.deps -\AtEndDocument{\closeout\req@depfile} -\renewcommand{\importmodule}[2][]{\req@dep@write{"#1.tex"}{[dt="importmodule"]}\def\@test{#1}% -\ifx\@test\@empty\else\requiremodules{#1}\fi -\expandafter\gdef\csname#2@cd@file@base\endcsname{#1} -\activate@defs{#2}\export@defs{#2}} -\fi -\def\req@dep@write#1#2{\if@deps\protected@write\req@depfile{}{#1 #2}\fi} -\endinput -%% -%% End of file `reqdoc.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty.ltxml b/Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty.ltxml deleted file mode 100644 index f7b9edf4d8a..00000000000 --- a/Master/texmf-dist/tex/latex/stex/reqdoc/reqdoc.sty.ltxml +++ /dev/null @@ -1,23 +0,0 @@ -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RegisterNamespace('r'=>"http://omdoc.org/ontology/requirements#"); -RegisterDocumentNamespace('r'=>"http://omdoc.org/ontology/requirements#"); -DefEnvironment('{requirements} OptionalKeyVals:reqs', - "#body"); -DefCMPEnvironment('{requirement} OptionalKeyVals:req', - "" - . "" - . "?&KeyVal(#1,'refs')()()" - . "#body" - .""); -DefConstructor('\reqnote{}', - "#1"); -DefEnvironment('{reqtable} OptionalKeyVals:reqs', - "#body"); -DefCMPConstructor('\reqline OptionalKeyVals:req{}{}', - "#2" - ."#3"); -DefConstructor('\importreqs {}',""); -DefMacro('\rinput','\input'); -1; diff --git a/Master/texmf-dist/tex/latex/stex/sproof/sproof.sty b/Master/texmf-dist/tex/latex/stex/sproof/sproof.sty deleted file mode 100644 index ba420ee064e..00000000000 --- a/Master/texmf-dist/tex/latex/stex/sproof/sproof.sty +++ /dev/null @@ -1,76 +0,0 @@ -%% -%% This is file `sproof.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% sproof.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{sproof}[2010/06/25 v0.9f Semantic Markup for Proofs] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\ProcessOptions -\RequirePackage{sref} -\srefaddidkey{spf} -\addmetakey*{spf}{display} -\addmetakey{spf}{for} -\addmetakey{spf}{from} -\addmetakey*[\sproof@box]{spf}{proofend} -\addmetakey{spf}{type} -\addmetakey*{spf}{title} -\addmetakey{spf}{continues} -\def\spf@flow{flow} -\newenvironment{pst@with@label}[1]{\edef\pst@label{#1}\advance\count10 by 1\count\count10=1} -{\advance\count10 by -1} -\def\the@pst@label{\pst@label.\number\count\count10} -\def\next@pst@label{\global\advance\count\count10 by 1} -\def\sproof@box{\hbox{\vrule\vbox{\hrule width 6 pt\vskip 6pt\hrule}\vrule}} -\def\spf@proofend{\sproof@box} -\def\sproofend{\ifx\spf@proofend\@empty\else\hfil\null\nobreak\hfill\spf@proofend\par\smallskip\fi} -\def\sProofEndSymbol#1{\def\sproof@box{#1}} -\def\spf@proofsketch@kw{Proof Sketch} -\newcommand{\spfsketch}[2][]{\metasetkeys{spf}{#1}\sref@target -\ifx\spf@display\spf@flow\else{\stDMemph{\ifx\spf@type\@empty\spf@proofsketch@kw\else\spf@type\fi}:}\fi{ #2}% -\sref@label@id{this \ifx\spf@type\@empty\spf@proofsketch@kw\else\spf@type\fi}} -\def\spf@proof@kw{Proof} -\newenvironment{@proof}[2][]{\metasetkeys{spf}{#1}\sref@target -\count10=10 -\ifx\spf@display\spf@flow\else{\stDMemph{\ifx\spf@type\@empty\spf@proof@kw\else\spf@type\fi}:}\fi{ #2}% -\sref@label@id{this \ifx\spf@type\@empty\spf@proof@kw\else\spf@type\fi} -\def\pst@label{}\newcount\pst@count% initialize the labeling mechanism -\begin{description}\begin{pst@with@label}{P}} -{\end{pst@with@label}\end{description}} -\newenvironment{sproof}[2][]{\begin{@proof}[#1]{#2}}{\sproofend\end{@proof}} -\newenvironment{sProof}[2][]{\begin{@proof}[#1]{#2}}{\end{@proof}} -\newcommand{\spfidea}[2][]{\metasetkeys{spf}{#1}% -\stDMemph{\ifx\spf@type\@empty{Proof Idea}\else\spf@type\fi:} #2\sproofend} -\newenvironment{spfstep}[1][]{\metasetkeys{spf}{#1} -\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi -\ifx\spf@title\@empty\else{(\stDMemph{\spf@title})}\fi} -{\next@pst@label} -\newenvironment{sproofcomment}[1][]{\metasetkeys{spf}{#1} -\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi} -{\next@pst@label} -\newenvironment{spfcases}[2][]{\metasetkeys{spf}{#1} -\def\@test{#2}\ifx\@test\empty\else -\ifx\spf@display\spf@flow {#2}\else\item[\the@pst@label]{#2} \fi\fi -\begin{pst@with@label}{\pst@label.\number\count\count10}} -{\end{pst@with@label}\next@pst@label} -\newenvironment{spfcase}[2][]{\metasetkeys{spf}{#1} -\ifx\spf@display\spf@flow\else\item[\the@pst@label]\fi -\def\@test{#2}\ifx\@test\@empty\else{\stDMemph{#2}:}\fi -\begin{pst@with@label}{\pst@label.\number\count\count10}} -{\ifx\spf@display\spf@flow\else\sproofend\fi\end{pst@with@label}\next@pst@label} -\newenvironment{subproof}[1][]% -{\begin{pst@with@label}{\pst@label.\number\count\count10}} -{\ifx\spf@display\spf@flow\else\sproofend\fi\end{pst@with@label}} -\srefaddidkey{just} -\addmetakey{just}{method} -\addmetakey{just}{premises} -\addmetakey{just}{args} -\newenvironment{justification}[1][]{}{} -\newcommand{\premise}[2][]{#2} -\newcommand{\justarg}[2][]{#2} -\endinput -%% -%% End of file `sproof.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/sproof/sproof.sty.ltxml b/Master/texmf-dist/tex/latex/stex/sproof/sproof.sty.ltxml deleted file mode 100644 index 7b4e21cfa68..00000000000 --- a/Master/texmf-dist/tex/latex/stex/sproof/sproof.sty.ltxml +++ /dev/null @@ -1,126 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('sref'); -DeclareOption('showmeta',''); -DefConstructor('\sproofend',""); -DefConstructor('\spfsketch OptionalKeyVals:pf{}', - "\n" - . "?#2(#2\n)()" - . "\n"); -DefConstructor('\sProofEndSymbol {}',''); -DefCMPEnvironment('{sproof} OptionalKeyVals:pf{}', - "\n" - . "?#2(" - . "#2" - . "\n)()" - . "#body" - . "\n"); -DefMacro('\sProof','\sproof'); -DefMacro('\endsProof','\endsproof'); -DefCMPConstructor('\spfidea OptionalKeyVals:pf {}', - "\n" - . "#2\n" - . "\n"); -DefCMPEnvironment('{spfstep} OptionalKeyVals:pf', - "" - . "#body\n", - beforeConstruct=>sub { - $_[0]->maybeCloseElement('omdoc:p'); - $_[0]->maybeCloseElement('omdoc:CMP'); - }); -DefCMPEnvironment('{sproofcomment} OptionalKeyVals:pf', - "" - . "#body" - . ""); -DefEnvironment('{spfcases} OptionalKeyVals:pf {}', - "\n" - . "#2\n" - . "#body" - . "\n"); -DefEnvironment('{spfcase} OptionalKeyVals:pf{}', - "\n" - . "?#2(" - . "#2" - . "\n)()" - . "#body" - . "\n"); -DefEnvironment('{subproof}[]', - "" - . "?#1(#1)()" - . "" - . "\n #body\n" - . "" - .""); -DefKeyVal('just','id','Semiverbatim'); -DefKeyVal('just','method','Semiverbatim'); -DefKeyVal('just','premises','Semiverbatim'); -DefKeyVal('just','args','Semiverbatim'); -sub extractBodyText { - my ($box, $remove) = @_; - my $str = ''; - my @boxes = $box->unlist; - foreach my $b(@boxes) { - my $s = ''; - if ($b =~ /LaTeXML::Whatsit/) { - my $body = $b->getBody; - $s = $body ? extractBodyText($body, $remove) : ''; - } elsif ($b =~ /LaTeXML::Box/) { - $s = $b->toString || ''; - @{$b}[0] = '' if $remove; } - $str .= $s; } - $str =~ s/\s+/ /g; - $str; } - -DefEnvironment('{justification} OptionalKeyVals:just', sub { - my ($doc, $keys, %props) = @_; - my $text = extractBodyText($props{body}, 1); - my $node = LookupValue('_LastSeenCMP'); - #$node->appendText($text) if $node; - my $method = $keys ? $keys->getValue('method') : undef; - $doc->openElement("omdoc:method", $method ? (xref => $method) : ()); - $doc->absorb($props{body}) if $props{body}; - $doc->closeElement("omdoc:method"); - return; }); -DefMacro('\premise[]{}', sub { - my ($xref, $text) = ($_[1], $_[2]); - my @res = (T_CS('\premise@content')); - push(@res, T_OTHER('['), $xref->unlist, T_OTHER(']')) if $xref; - push(@res, T_SPACE, $text->unlist) if $text; - @res; }); -DefConstructor('\premise@content[]', - ""); -DefMacro('\justarg[]{}', sub { (($_[1] ? $_[1]->unlist : ()), -T_SPACE, $_[2]->unlist, T_SPACE); }); -Tag('omdoc:derive', afterClose=>sub { - my ($doc, $node) = @_; - my @children = grep($_->nodeType == XML_ELEMENT_NODE, $node->childNodes); - my $firstCMP = undef; - foreach my $child(@children) { - next unless ($child->localname || '') eq 'CMP'; - if ($child->hasChildNodes()) { - next unless $#{$child->childNodes} == 0; - next unless $child->firstChild->nodeType == XML_TEXT_NODE; } - - if ($firstCMP) { - $firstCMP->appendText($child->textContent); - $node->removeChild($child); - } else { $firstCMP = $child; } - } - });#$ -Tag('omdoc:proof',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:derive',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:method',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:premise',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:derive',afterOpen=>\&numberIt,afterClose=>\&locateIt); -1; diff --git a/Master/texmf-dist/tex/latex/stex/sref/sref.sty b/Master/texmf-dist/tex/latex/stex/sref/sref.sty deleted file mode 100644 index 36d10f60386..00000000000 --- a/Master/texmf-dist/tex/latex/stex/sref/sref.sty +++ /dev/null @@ -1,95 +0,0 @@ -%% -%% This is file `sref.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% sref.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{sref}[2010/06/25 v0.9 Semantic Cross-References] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\newif\ifextrefs\extrefsfalse -\DeclareOption{extrefs}{\extrefstrue} -\ProcessOptions -\RequirePackage{metakeys} -\newcommand{\sref}[2][]{% -\@ifundefined{sref@part}{\sref@hlink[#1]{#2}}{\sref@hlink[#1]{\sref@part @#2}}} -\newcommand{\srefs}[3][]{% -\def\@test{#1}\ifx\@test\@empty\sref{#2} and \sref{#3}\else #1\fi} -\newcommand{\srefl}[3][]{% -\def\@test{#1}\ifx\@test\@empty\sref{#2} to \sref{#3}\else #1\fi} -\newcommand{\spageref}[2][]{% -\@ifundefined{sref@part}{\sref@hlink[#1]{#2}}{\sref@hlink[#1]{\sref@part @#2}}} -\newif\ifhref\hreffalse -\AtBeginDocument{\@ifpackageloaded{hyperref}{\hreftrue}{\hreffalse}} -\def\sref@href@ifh#1#2{\ifhref\href{#1}{#2}\else#2\fi} -\def\sref@hlink@ifh#1#2{\ifhref\hyperlink{#1}{#2}\else#2\fi} -\def\sref@target@ifh#1#2{\ifhref\hypertarget{#1}{#2}\else#2\fi} -\def\sref@target% -{\ifx\sref@id\@empty\else% -\expandafter\sref@target@ifh% -{sref@\@ifundefined{sref@part}{}{\sref@part @}\sref@id @target}{}\fi} -\def\@sref@def#1#2#3{\expandafter\gdef\csname sref@#1@#2\endcsname{#3}} -\ifextrefs\newwrite\refs@file\else\def\refs@file{\@auxout}\fi -\def\sref@def#1#2#3{%\@sref@def{#1}{#2}{#3}% -\protected@write\refs@file{}{\string\@sref@def{#1}{#2}{#3}}} -\addmetakey{srefaddidkey}{prefix} -\newcommand\srefaddidkey[2][]{\metasetkeys{srefaddidkey}{#1}% -\@metakeys@ext@clear@keys{#2}{sref@id}{}% id cannot have a default -\metakeys@ext@clear@keys{#2}{id}{}% -\metakeys@ext@showkeys{#2}{id}% -\define@key{#2}{id}{\edef\sref@id{\srefaddidkey@prefix ##1}% -\expandafter\edef\csname #2@id\endcsname{\srefaddidkey@prefix ##1}}} -\def\makeextrefs#1{\gdef\sref@part{#1}% -\makeatletter -\IfFileExists{\jobname.refs}{\input{\jobname.refs}}{}% -\immediate\openout\refs@file=\jobname.refs -\makeatother} -\def\sref@label#1#2{% -\sref@def{\@ifundefined{sref@part}{}{\sref@part @}#2}{page}{\thepage}% -\sref@def{\@ifundefined{sref@part}{}{\sref@part @}#2}{label}{#1}} -\def\sref@label@id#1{\ifx\sref@id\@empty\else\sref@label{#1}{\sref@id}\fi} -\newcommand{\sref@hlink}[2][]{\def\@test{#1}% -\@ifundefined{sref@#2@label}% -{\protect\G@refundefinedtrue\@latex@warning{reference #2 undefined}??}% -{\sref@hlink@ifh{sref@#2@target}{\ifx\@test\@empty\@nameuse{sref@#2@label}\else #1\fi}}} -\newcommand{\sref@page@label}[1]{p.~{#1}} -\newcommand{\sref@pageref}[1]{\@ifundefined{sref@#1@page}% -{\protect\G@refundefinedtrue\@latex@warning{reference #1 undefined}\sref@page@label{??}}% -{\sref@hlink@ifh{sref@#1@target}{\sref@page@label{\@nameuse{sref@#1@page}}}}} -\newcommand{\sref@href}[3][]{\def\@test{#1}% -\@ifundefined{sref@#2@label}% -{\protect\G@refundefinedtrue\@latex@warning{reference #2 undefined}??}% -{\@ifundefined{sref@#3@URI}% -{\protect\G@refundefinedtrue\@latex@warning{external refs of type #3 undefined}??}% -{\edef\@uri{\@nameuse{sref@#3@URI}.pdf\#sref@#2@target} -\edef\@label{\ifx\@test\@empty\@nameuse{sref@#2@label}\else #1\fi} -\sref@href@ifh\@uri\@label}}} -\ifextrefs -\newcommand{\extref}[3][]{\def\theextref{\sref@href[#1]{#2@#3}{#2}}% -\csname doextref@#2\endcsname} -\else -\newcommand{\extref}[3][]{\sref[#1]{#3}} -\fi -\def\extrefstyle#1#2{\expandafter\gdef\csname doextref@#1\endcsname{#2}} -\newcommand{\inputrefs}[2]{% -\@namedef{sref@#1@URI}{#2} -\makeatletter% -\IfFileExists{#2.refs}{\input{#2.refs}} - {\PackageError{sref}{Reference file #1.refs does not exist} - {Maybe you have to run LaTeX on #2.tex first}} -\makeatother} -\srefaddidkey{sequation} -\def\sref@sequation@heading{equation} -\newenvironment{sequation}[1][]{\metasetkeys{sequation}{#1}% -\ifx\sref@id\@empty\begin{displaymath}\else% no id, using equation* -\begin{equation}\sref@target\sref@label@id{\sref@sequation@heading~(\theequation)}\fi} -{\ifx\sref@id\@empty\end{displaymath}\else\end{equation}\fi} -\newenvironment{seqnarray}[1][]% -{\metasetkeys{sequation}{#1}\begin{eqnarray*}\sref@target% -\sref@label@id{\sref@sequation@heading~(\theequation)}} -{\end{eqnarray*}} -\endinput -%% -%% End of file `sref.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/sref/sref.sty.ltxml b/Master/texmf-dist/tex/latex/stex/sref/sref.sty.ltxml deleted file mode 100644 index 557ec67bd64..00000000000 --- a/Master/texmf-dist/tex/latex/stex/sref/sref.sty.ltxml +++ /dev/null @@ -1,33 +0,0 @@ -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -DeclareOption('extrefs',''); -RequirePackage('metakeys'); -DefConstructor('\sref[]{}', - "Section "); -DefConstructor('\srefs[]{}', - "Section "); -DefConstructor('\srefl[]{}', - "Section "); -DefConstructor('\spageref[]{}', - "Section "); -DefConstructor('\makeextrefs{}',''); -DefConstructor('\extref[]{}{}', - ""); -DefConstructor('\theextref',''); -DefConstructor('\extrefstyle{}{}',""); -DefConstructor('\inputrefs{}{}',''); -DefEnvironment('{sequation} OptionalKeyVals', - "" - . "" - . "#body" - . "" - . "", - mode=>'display_math', - properties=> sub { RefStepCounter('equation') }, - locked=>1); -DefMacro('\seqnarray OptionalKeyVals','\begin{eqnarray*}'); -DefMacro('\endseqnarray','\end{eqnarray*}'); -1; diff --git a/Master/texmf-dist/tex/latex/stex/statements/statements.sty b/Master/texmf-dist/tex/latex/stex/statements/statements.sty deleted file mode 100644 index 15ba42db9c8..00000000000 --- a/Master/texmf-dist/tex/latex/stex/statements/statements.sty +++ /dev/null @@ -1,141 +0,0 @@ -%% -%% This is file `statements.sty', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% statements.dtx (with options: `package') -%% -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{statements}[2010/06/25 v1.0 Semantic Markup for Statements] -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{metakeys}} -\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{omdoc}} -\ProcessOptions -\RequirePackage{omtext} -\RequirePackage{modules} -\RequirePackage[hyperref]{ntheorem} -\theoremstyle{plain} -\providecommand\STpresent[1]{#1} -\def\define@statement@env#1{% -\newenvironment{#1}[1][]{\metasetkeys{omtext}{##1}\sref@target% -\ifx\omtext@display\st@flow\else% -\ifx\omtext@title\@empty\begin{ST#1Env}\else\begin{ST#1Env}[\omtext@title]\fi% -\ifx\sref@id\@empty\else\label{#1.\sref@id}\fi -\csname st@#1@initialize\endcsname\fi -\ifx\sref@id\@empty\sref@label@id{here}\else% -\sref@label@id{\STpresent{\csname ST#1EnvKeyword\endcsname}~\@currentlabel}\fi} -{\csname st@#1@terminate\endcsname\ifx\omtext@display\st@flow\else\end{ST#1Env}\fi}} -\newenvironment{assertion}[1][]{\metasetkeys{omtext}{#1}\sref@target% -\ifx\omtext@display\st@flow\else% -\ifx\omtext@title\@empty\begin{ST\omtext@type AssEnv}% -\else\begin{ST\omtext@type AssEnv}[\omtext@title]\fi\fi% -\ifx\omtext@type\@empty\sref@label@id{here}\else% -\sref@label@id{\STpresent{\csname ST\omtext@type AssEnvKeyword\endcsname}~\@currentlabel}\fi} -{\ifx\omtext@display\st@flow\else\end{ST\omtext@type AssEnv}\fi} -\def\st@theorem@kw{Theorem} -\def\st@lemma@kw{Lemma} -\def\st@proposition@kw{Proposition} -\def\st@corollary@kw{Corollary} -\def\st@conjecture@kw{Conjecture} -\def\st@falseconjecture@kw{Conjecture (false)} -\def\st@postulate@kw{Postulate} -\def\st@obligation@kw{Obligation} -\def\st@assumption@kw{Assumption} -\def\st@observation@kw{Observation} -\theorembodyfont{\itshape} -\theoremheaderfont{\normalfont\bfseries} -\newtheorem{STtheoremAssEnv}{\st@theorem@kw} -\newtheorem{STlemmaAssEnv}[STtheoremAssEnv]{\st@lemma@kw} -\newtheorem{STpropositionAssEnv}[STtheoremAssEnv]{\st@proposition@kw} -\newtheorem{STcorollaryAssEnv}[STtheoremAssEnv]{\st@corollary@kw} -\newtheorem{STconjectureAssEnv}[STtheoremAssEnv]{\st@conjecture@kw} -\newtheorem{STfalseconjectureAssEnv}[STtheoremAssEnv]{\st@falseconjecture@kw} -\newtheorem{STpostulateAssEnv}[STtheoremAssEnv]{\st@postulate@kw} -\newtheorem{STobligationAssEnv}[STtheoremAssEnv]{\st@obligation@kw} -\newtheorem{STassumptionAssEnv}[STtheoremAssEnv]{\st@assumption@kw} -\newtheorem{STobservationAssEnv}[STtheoremAssEnv]{\st@observation@kw} -\def\st@example@initialize{}\def\st@example@terminate{} -\define@statement@env{example} -\def\st@example@kw{Example} -\theorembodyfont{\upshape} -\newtheorem{STexampleEnv}[STtheoremAssEnv]{\st@example@kw} -\def\st@axiom@initialize{}\def\st@axiom@terminate{} -\define@statement@env{axiom} -\def\st@axiom@kw{Axiom} -\theorembodyfont{\upshape} -\newtheorem{STaxiomEnv}[STtheoremAssEnv]{\st@axiom@kw} -\srefaddidkey{symboldec} -\addmetakey{symboldec}{functions} -\addmetakey{symboldec}{role} -\addmetakey*{symboldec}{title} -\addmetakey{symboldec}{name} -\addmetakey*{symboldec}{display} -\def\symboldec@type{Symbol} -\newenvironment{symboldec}[1][]{\metasetkeys{symboldec}{#1}\sref@target\st@indeftrue% -\ifx\symboldec@display\st@flow\else{\stDMemph{\symboldec@type} \symboldec@name:}\fi% -\ifx\symboldec@title\@empty~\else~(\stDMemph{\symboldec@title})\par\fi}{} -\newcommand{\symtype}[2]{Type (#1): #2} -\newif\ifst@indef\st@indeffalse -\newenvironment{definition}[1][]{\metasetkeys{omtext}{#1}\sref@target\st@indeftrue% -\ifx\omtext@display\st@flow\else% -\ifx\omtext@title\@empty\begin{STdefinitionEnv}\else\begin{STdefinitionEnv}[\omtext@title]\fi\fi% -\ifx\sref@id\@empty\sref@label@id{here}\else% -\sref@label@id{\STpresent{\csname STdefinitionEnvKeyword\endcsname}~\@currentlabel}\fi} -{\ifx\omtext@display\st@flow\else\end{STdefinitionEnv}\fi} -\def\st@definition@kw{Definition} -\theorembodyfont{\upshape} -\newtheorem{STdefinitionEnv}[STtheoremAssEnv]{\st@definition@kw} -\def\notemph#1{{\bf{#1}}} -\def\st@notation@terminate{} -\def\st@notation@initialize{} -\define@statement@env{notation} -\def\st@notation@kw{Notation} -\theorembodyfont{\upshape} -\newtheorem{STnotationEnv}[STtheoremAssEnv]{\st@notation@kw} -\def\st@def@target#1#2{\def\@test{#1}% -\ifst@indef% if we are in a definition or such -\ifx\omtext@theory\@empty% if there is no theory attribute -\@ifundefined{mod@id}% if we are not in a module -{\PackageWarning{statements}{definiendum in unidentified module\MessageBreak -\protect\definiendum, \protect\defin, -\protect\twindef, \protect\atwindef\MessageBreak -can only be referenced when called in a module with id key}}% -{\ifx\@test\@empty% -\expandafter\sref@target@ifh{sref@#2@\mod@id @target}{}\else% -\expandafter\sref@target@ifh{sref@#1@\mod@id @target}{}\fi}% -\else\expandafter\sref@target@ifh{sref@#1@\omtext@theory @target}{}\fi% -\else\PackageError{statements}% -{definiendum outside definition context\MessageBreak -\protect\definiendum, \protect\defin, -\protect\twindef, \protect\atwindef\MessageBreak -do not make sense semantically outside a definition.\MessageBreak -Consider wrapping the defining phrase in a \protect\inlinedef}% -\fi} -\newcommand{\definiendum}[2][]{\st@def@target{#1}{#2}\defemph{#2}} -\newcommand{\notatiendum}[2][]{\notemph{#2}} -\newcommand{\defin}[2][]{\definiendum[#1]{#2}\omdoc@index[#1]{#2}} -\newcommand{\definalt}[3][]{\definiendum[#1]{#2}\omdoc@index[#1]{#3}} -\newcommand{\twindef}[3][]{\st@def@target{#1}{#2-#3}\defemph{#2 #3}\@twin[#1]{#2}{#3}} -\newcommand{\twindefalt}[4][]{\definiendum[#1]{#2}\@twin[#1]{#3}{#4}} -\newcommand{\atwindef}[4][]{\st@def@target{#1}{#2-#3-#4}\defemph{#2 #3 #4}\@atwin[#1]{#2}{#3}{#4}} -\newcommand{\atwindefalt}[5][]{\definiendum[#1]{#2}\@atwin[#1]{#3}{#4}{#5}} -\newcommand{\inlineex}[2][]{\metasetkeys{omtext}{#1}\sref@target\sref@label@id{here}#2} -\newcommand{\inlinedef}[2][]{\metasetkeys{omtext}{#1}\sref@target\sref@label@id{here}\st@indeftrue #2} -\addmetakey[\mod@id]{termref}{cd} -\addmetakey{termref}{cdbase} -\addmetakey{termref}{name} -\addmetakey{termref}{role} -\def\termref@set#1#2{\def\termref@name{#2}\metasetkeys{termref}{#1}} -\newcommand{\termref}[2][]{\metasetkeys{termref}{#1}\st@termref{#2}} -\def\st@termref#1{\ifx\termref@name\@empty\def\termref@name{#1}\fi% -\mod@termref\termref@cd\termref@name{#1}} -\newcommand{\twinref}[3][]{\termref@set{#1}{#2-#3}\st@termref{#2 #3}} -\newcommand{\atwinref}[4][]{\termref@set{#1}{#2-#3-#4}\st@termref{#2 #3 #4}} -\newcommand{\termin}[2][]{\termref[#1]{#2}\index{#2}} -\providecommand{\termemph}[1]{#1} -\providecommand{\defemph}[1]{{\textbf{#1}}} -\providecommand{\stDMemph}[1]{{\textbf{#1}}} -\newcommand{\symref}[2]{\@nameuse{mod@symref@#1}{#2}} -\endinput -%% -%% End of file `statements.sty'. diff --git a/Master/texmf-dist/tex/latex/stex/statements/statements.sty.ltxml b/Master/texmf-dist/tex/latex/stex/statements/statements.sty.ltxml deleted file mode 100644 index cd1a45ef945..00000000000 --- a/Master/texmf-dist/tex/latex/stex/statements/statements.sty.ltxml +++ /dev/null @@ -1,339 +0,0 @@ -# -*- CPERL -*- -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('omtext'); -RequirePackage('modules'); -sub lowcase {my ($string) = @_; $string ? return lc(ToString($string)) : return('')}#$ -sub dashed { join('-',map($_->toString,@_));}#$ -sub makeNCName { - my ($name) = @_; - my $ncname=$name; - $ncname=~s/\s/_/g; #Spaces to underscores - $ncname="_$ncname" if $ncname!~/^(\w|_)/; #Ensure start with letter or underscore - ##More to come... - $ncname; -} -sub simple_wrapper { - #Deref if array reference - my @input; - foreach (@_) { - if (ref $_ && $_ =~ /ARRAY/ && $_ !~ /LaTeXML/) { - @input=(@input,@$_); - } else - { push (@input,$_); } - } - return '' if (!@input); - @input = map(split(/\s*,\s*/,ToString($_)),@input); - my $output=join(" ",@input); - $output=~s/(^ )|[{}]//g; #remove leading space and list separator brackets - $output||''; -} -sub hash_wrapper{ - #Deref if array reference - my @input; - foreach (@_) { - if (ref $_ && $_ =~ /ARRAY/ && $_ !~ /LaTeXML/) { - @input=(@input,@$_); - } else - { push (@input,$_); } - } - return '' if (!@input); - @input = map(split(/\s*,\s*/,ToString($_)),@input); - my $output=join(".sym #",@input); - $output=~s/(^\.sym )|[{}]//g; #remove leading space and list separator brackets - "#$output"||''; -} -DefCMPEnvironment('{assertion} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "#body" - ."\n"); -DefCMPEnvironment('{example} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "#body" - . "\n"); -DefCMPEnvironment('{axiom} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "#body" - . "\n"); -DefEnvironment('{symboldec} OptionalKeyVals:symboldec', - "" - . "#body" - ."\n"); -DefConstructor('\symtype{}{}', - "#2"); -sub definitionBody { - my ($doc, $keyvals, %props) = @_; - my $for = $keyvals->getValue('for') if $keyvals; - my $type = $keyvals->getValue('type') if $keyvals; - my %for_attr=(); - if (ToString($for)) { - $for = ToString($for); - $for =~ s/^{(.+)}$/$1/eg; - foreach (split(/,\s*/,$for)) { - $for_attr{$_}=1; - }} - my @symbols = @{$props{defs} || []}; - foreach my $symb(@symbols) { - next if $for_attr{$symb}; - $for_attr{$symb}=1; - $doc->insertElement('omdoc:symbol', undef, (name=>$symb, "xml:id"=>makeNCName("$symb.def.sym"))); - } - my %attrs = (); - $for = join(" ",(keys %for_attr)); - $attrs{'for'} = $for if $for; - my $id = $keyvals->getValue('id') if $keyvals; - $attrs{'xml:id'} = $id if $id; - $attrs{'type'} = $type if $type; - $doc->openElement('omdoc:definition', %attrs); - my $title = $keyvals->getValue('title') if $keyvals; - if ($title) { - $doc->openElement('omdoc:metadata'); - $doc->openElement('dc:title'); - $doc->absorb($title); - $doc->closeElement('dc:title');} - $doc->openElement('omdoc:CMP'); - $doc->openElement('omdoc:p'); - $doc->absorb($props{body}) if $props{body}; - $doc->maybeCloseElement('omdoc:p'); - $doc->maybeCloseElement('omdoc:CMP'); - $doc->closeElement('omdoc:definition'); - return; } -DefCMPEnvironment('{definition} OptionalKeyVals:omtext', sub{definitionBody(@_)}, - afterDigestBegin=>sub { - my ($stomach, $whatsit) = @_; - my @symbols = (); - $whatsit->setProperty(defs=>\@symbols); - AssignValue('defs', \@symbols); return; }, - afterDigest => sub { AssignValue('defs', undef); return; }); -DefCMPEnvironment('{notation} OptionalKeyVals:omtext', - "" - . "?&KeyVal(#1,'title')(&KeyVal(#1,'title'))()" - . "#body" - . "\n"); -DefConstructor('\notatiendum OptionalKeyVals:notation {}', - "#2"); -DefConstructor('\definiendum [] {}', - "#2", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $whatsit->getArg(2) unless $name; - $whatsit->setProperty(name=>$name->toString); - push(@$addr, $name->toString) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; });#$ -DefConstructor('\defin[]{}', - "" - . "" - . "#2" - . "" - . "#2" - ."", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $whatsit->getArg(2) unless $name; - push(@$addr, $name->toString) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module'));#$ - return; }, - alias=>'\defin'); -DefConstructor('\definalt[]{}{}', - "" - . "" - . "#2" - . "" - . "#3" - ."", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $whatsit->getArg(3) unless $name; - push(@$addr, $name->toString) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module'));#$ - return; }, - alias=>'\definalt'); -DefConstructor('\twindef[]{}{}', - "" - . "" - . "" - . "#2 #3" - . "" - . "" - . "" - . "#2" - . "#3" - . "" - ."", - afterDigest => sub { - my ($stomach, $whatsit) = @_; -my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $name->toString if $name; - $name = $whatsit->getArg(2)->toString.'-'.$whatsit->getArg(3)->toString unless $name; - push(@$addr, $name) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; }, - alias=>'\twindef');#$ -DefConstructor('\twindefalt[]{}{}{}', - "" - . "" - . "" - . "#2" - . "" - . "" - . "" - . "#3" - . "#4" - . "" - ."", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $name->toString if $name; - $name = $whatsit->getArg(3)->toString.'-'.$whatsit->getArg(4)->toString unless $name; - push(@$addr, $name) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; }, - alias=>'\twindef');#$ -DefConstructor('\atwindef[]{}{}{}', - "" - . "" - . "#2 #3 #4" - . "" - . "" - . "#2" - . "#3" - . "#4" - . "" - . "", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $name->toString if $name; - $name = $whatsit->getArg(2)->toString.'-'.$whatsit->getArg(3)->toString.'-'.$whatsit->getArg(4)->toString unless $name; - push(@$addr, $name) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; }, - alias=>'\atwindef'); -DefConstructor('\atwindefalt[]{}{}{}{}', - "" - . "" - . "#2" - . "" - . "" - . "#3" - . "#4" - . "#5" - . "" - . "", - afterDigest => sub { - my ($stomach, $whatsit) = @_; - my $addr = LookupValue('defs'); - my $name = $whatsit->getArg(1); - $name = $name->toString if $name; - $name = $whatsit->getArg(3)->toString.'-'.$whatsit->getArg(4)->toString.'-'.$whatsit->getArg(5)->toString unless $name; - push(@$addr, $name) if ($addr and $name); - $whatsit->setProperty(theory=>LookupValue('current_module')); - return; }, - alias=>'\atwindef'); -DefConstructor('\inlineex OptionalKeyVals:omtext {}', - "#2"); -DefConstructor('\inlinedef OptionalKeyVals:omtext {}', sub { - my ($document, $keyvals, $body, %props) = @_; - my $for = $keyvals->getValue('for') if $keyvals; - my %for_attr=(); - if (ToString($for)) { - $for = ToString($for); - $for =~ s/^{(.+)}$/$1/eg; - foreach (split(/,\s*/,$for)) { - $for_attr{$_}=1; - }} - my @symbols = @{$props{defs} || []}; - #Prepare for symbol insertion -insert before the parent of the closest ancestor CMP element - my $original_node = $document->getNode; - my $xc = XML::LibXML::XPathContext->new( $original_node ); - $xc->registerNs('omdoc', 'http://omdoc.org/ns'); - my ($statement_ancestor) = $xc->findnodes('./ancestor::omdoc:CMP/..'); - foreach my $symb(@symbols) { - next if $for_attr{$symb}; - $for_attr{$symb}=1; - my $symbolnode = XML::LibXML::Element->new('symbol'); - $symbolnode->setAttribute(name=>$symb); - $symbolnode->setAttribute("xml:id"=>makeNCName("$symb.def.sym")); - $statement_ancestor->parentNode->insertBefore($symbolnode,$statement_ancestor); - } - #Restore the insertion point - $document->setNode($original_node); - my %attrs = (); - $for = join(" ",(keys %for_attr)); - $attrs{'for'} = $for if $for; - my $id = $keyvals->getValue('id') if $keyvals; - $attrs{'xml:id'} = $id if $id; - $attrs{'type'} = 'inlinedef'; - $document->openElement('omdoc:phrase',%attrs); - $document->absorb($body); - $document->closeElement('omdoc:phrase'); }, - #Prepare 'defs' hooks for \defin and \definiendum symbol names - beforeDigest=>sub { - my @symbols = (); - AssignValue('defs', \@symbols); return; }, - #Adopt collected names as 'defs' property, remove hooks - afterDigest=>sub { - my ($stomach, $whatsit) = @_; - my $defsref = LookupValue('defs'); - my @defs = @$defsref; - $whatsit->setProperty('defs',\@defs); - AssignValue('defs',undef); - return; }); -DefConstructor('\termref OptionalKeyVals:termref {}', - "" - . "#2" - .""); -DefConstructor('\twinref OptionalKeyVals:termref {}{}', - "" - . "#2" - .""); -DefConstructor('\atwinref OptionalKeyVals:termref {}{}{}', - "" - . "#2" - .""); -DefConstructor('\termin OptionalKeyVals:term {}', - "" - . "" - . "#2" - . "" - . "#2" - . ""); -DefConstructor('\symref{}{}', - "" - . "#2" - .""); -Tag('omdoc:assertion',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:definition',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:example',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:requation',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:axiom',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:symbol',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:type',afterOpen=>\&numberIt,afterClose=>\&locateIt); -Tag('omdoc:term',afterOpen=>\&numberIt,afterClose=>\&locateIt); -1; diff --git a/Master/texmf-dist/tex/latex/stex/stex-logo.sty b/Master/texmf-dist/tex/latex/stex/stex-logo.sty deleted file mode 100644 index 229aa300eb5..00000000000 --- a/Master/texmf-dist/tex/latex/stex/stex-logo.sty +++ /dev/null @@ -1,5 +0,0 @@ -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{stex-logo}[2009/08/07 v1.0 sTeX Logo] -\RequirePackage{xspace} -\def\stex{\@ifundefined{texorpdfstring}{\let\texorpdfstring\@firstoftwo}{}\texorpdfstring{\raisebox{-.5ex}S\kern-.5ex\TeX}{sTeX}\xspace} -\def\sTeX{\stex} diff --git a/Master/texmf-dist/tex/latex/stex/stex-logo.sty.ltxml b/Master/texmf-dist/tex/latex/stex/stex-logo.sty.ltxml deleted file mode 100644 index 6f7bd00216e..00000000000 --- a/Master/texmf-dist/tex/latex/stex/stex-logo.sty.ltxml +++ /dev/null @@ -1,18 +0,0 @@ -# -*- CPERL -*- -# /=======================================================\ # -# | stex.sty - Implementation for LaTeXML | # -# | | # -# |=======================================================| # -# | Not Part of LaTeXML : http://dlmf.nist.gov/LaTeXML/ | # -# | Copyright (c) 2006 arXMLiv group | # -# | Released under the GNU Public License | # -# \=======================================================/ # - -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; -RequirePackage('xspace'); -DefConstructor('\stex', - "sTeX"); -RawTeX('\def\sTeX{\stex}'); -1; diff --git a/Master/texmf-dist/tex/latex/stex/stex.sty b/Master/texmf-dist/tex/latex/stex/stex.sty deleted file mode 100644 index 5f353c1bba4..00000000000 --- a/Master/texmf-dist/tex/latex/stex/stex.sty +++ /dev/null @@ -1,22 +0,0 @@ -% sTeX: a package for semantic markup in LaTeX -% Copyright (c) 2009 Michael Kohlhase, all rights reserved -% this file is released under the -% LaTeX Project Public License (LPPL) -% -% The development version of this file can be found at -% $HeadURL: https://svn.kwarc.info/repos/stex/trunk/sty/stex.sty $ -\NeedsTeXFormat{LaTeX2e}[1999/12/01] -\ProvidesPackage{stex}[2010/02/04 v0.9b Semantic Markup] -% we pass the options to the appropriate packages -\DeclareOption{extrefs}{\PassOptionsToPackage{\CurrentOption}{sref}} -\DeclareOption{showmeta}{\PassOptionsToPackage{\CurrentOption}{omd}} -\ProcessOptions -% now we require the respective packages. -\RequirePackage{stex-logo} -\RequirePackage{modules} -\RequirePackage{statements} -\RequirePackage{sproof} -\RequirePackage{omdoc} -\RequirePackage{presentation} -\RequirePackage{dcm} - diff --git a/Master/texmf-dist/tex/latex/stex/stex.sty.ltxml b/Master/texmf-dist/tex/latex/stex/stex.sty.ltxml deleted file mode 100644 index 497f48fe576..00000000000 --- a/Master/texmf-dist/tex/latex/stex/stex.sty.ltxml +++ /dev/null @@ -1,23 +0,0 @@ -# -*- CPERL -*- -# /=======================================================\ # -# | stex.sty - Implementation for LaTeXML | # -# | | # -# |=======================================================| # -# | Not Part of LaTeXML : http://dlmf.nist.gov/LaTeXML/ | # -# | Copyright (c) 2006 arXMLiv group | # -# | Released under the GNU Public License | # -# \=======================================================/ # - -package LaTeXML::Package::Pool; -use strict; -use LaTeXML::Package; - -RequirePackage('stex-logo'); -RequirePackage('modules'); -RequirePackage('statements'); -RequirePackage('sproof'); -RequirePackage('omdoc'); -RequirePackage('presentation'); -RequirePackage('dcm'); - -1; diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check index 097c9cdce6d..62fc5c0529a 100755 --- a/Master/tlpkg/bin/tlpkg-ctan-check +++ b/Master/tlpkg/bin/tlpkg-ctan-check @@ -360,7 +360,7 @@ my @TLP_working = qw( srbook-mem srcltx sseq stack stage standalone starfont statistik statex statex2 staves stdclsdv stdpage steinmetz - stellenbosch stex stix stmaryrd storebox storecmd stringstrings struktex + stellenbosch stix stmaryrd storebox storecmd stringstrings struktex sttools stubs sty2dtx suanpan subdepth subeqn subeqnarray subfig subfigmat subfigure subfloat substr subsupscripts sudoku sudokubundle suftesi sugconf diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index b6bf0104321..5ff57297587 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -796,6 +796,7 @@ chomp ($Build = `cd $Master/../Build/source && pwd`); 'staves', "&MAKEflatten", 'stmaryrd', "&MAKEflatten", 'stellenbosch',"&MAKEcopy", + 'stex', "die 'skipping, too complicated, bin programs, sorry'", 'streetex', "die 'skipping, nonfree'", 'style_showcase', "die 'skipping, until JimH advises it is a good idea'", 'svjour', "die 'skipping, license and packaging unclear'", diff --git a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc index d77c4397879..6045b61b646 100644 --- a/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc +++ b/Master/tlpkg/tlpsrc/collection-latexextra.tlpsrc @@ -661,7 +661,6 @@ depend standalone depend statistik depend stdclsdv depend stdpage -depend stex depend storebox depend storecmd depend stringstrings diff --git a/Master/tlpkg/tlpsrc/stex.tlpsrc b/Master/tlpkg/tlpsrc/stex.tlpsrc deleted file mode 100644 index e69de29bb2d..00000000000 -- cgit v1.2.3