summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/Makefile5
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/Modparse.pm189
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/README151
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/TexId.pm464
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/allgen30
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/bms340
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/checksum71
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/convert-paths56
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/filedate42
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/gen-symdef-table.pl85
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/grep-rerun59
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/idcheck29
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/msplit140
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/old/Makefile28
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/old/defcon.l91
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/old/idcheck.l130
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/old/modstr.l137
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/old/symdef46
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/rf63
-rw-r--r--Master/texmf-dist/source/latex/stex/bin/rng2dot/ModelRNC.pm770
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/rng2dot/rng2dot37
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/sgraph173
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/sms138
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/stexml2
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/stexmlmod2
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/termin279
-rw-r--r--Master/texmf-dist/source/latex/stex/cmathml/cmathml.dtx2503
-rw-r--r--Master/texmf-dist/source/latex/stex/cnx/cnx.dtx1209
-rw-r--r--Master/texmf-dist/source/latex/stex/dcm/dcm.dtx1067
-rw-r--r--Master/texmf-dist/source/latex/stex/hwexam/hwexam.dtx566
-rw-r--r--Master/texmf-dist/source/latex/stex/metakeys/metakeys.dtx372
-rw-r--r--Master/texmf-dist/source/latex/stex/mikoslides/mikoslides.dtx554
-rw-r--r--Master/texmf-dist/source/latex/stex/modules/modules.dtx1899
-rw-r--r--Master/texmf-dist/source/latex/stex/omdoc/omdoc.dtx751
-rw-r--r--Master/texmf-dist/source/latex/stex/omtext/omtext.dtx850
-rw-r--r--Master/texmf-dist/source/latex/stex/presentation/presentation.dtx1487
-rw-r--r--Master/texmf-dist/source/latex/stex/problem/problem.dtx578
-rw-r--r--Master/texmf-dist/source/latex/stex/reqdoc/reqdoc.dtx387
-rw-r--r--Master/texmf-dist/source/latex/stex/sproof/sproof.dtx783
-rw-r--r--Master/texmf-dist/source/latex/stex/sref/sref.dtx725
-rw-r--r--Master/texmf-dist/source/latex/stex/statements/statements.dtx1376
-rw-r--r--Master/texmf-dist/source/latex/stex/xsl/ltxml2cnx.xsl43
-rw-r--r--Master/texmf-dist/source/latex/stex/xsl/omdocpost.xsl457
-rw-r--r--Master/texmf-dist/source/latex/stex/xsl/owl2post.xsl62
44 files changed, 0 insertions, 19226 deletions
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 = <SNIPPATHDEF>;
- 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 = <FIN>;
- 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 <input filename> [options]
-
-Options:
- --output <filename> filename of new main .tex file; default stdout
- --path <path> path where to write the module files;
- --header <filename> 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 <filename> .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 <filename> .tex input file; stdin by default
- --output <filename> output file; out.dot by default
- --format <ps|png|jpg|...> output format; .ps by default; for available formats, see dot --help
- --nodot do not generate .dot file, just target format
- --root <string> the 'root' of the graph. (name of course)
- --theory <string> generate a subgraph for the theory
- --sliderange <begin:end> 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 <filename> .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 <filename> .tex file to read from
- --graph <filename> if mentioned, produce the suggested module structure as
- a graphviz digraph (.dot file)
- --path <pathname> if mentioned, produce same input file/s (including
- dependencies) in specified path with suggested
- module structure.
- --output <filename> the new name of the main .tex file in specified path
- --root <string> 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? [ <y>, n ]";
- my $answer = <STDIN>;
- 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}} = <FIN>;
- 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 <input filename> [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 <filename> if mentioned, produce the suggested module structure as
- a graphviz digraph. (.dot file)
- --opath <pathname> if mentioned, produce same input file/s (including
- dependencies) in specified path with suggested
- module structure.
- --output <name> the new name of the main .tex file in specified path.
- --root <name> 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 (<IN>) {
- 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 <input filename> --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 (<P>) {
- 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 = <T>;
- $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 (<IN>) {
- if ($_ =~ /\\Provides(Package|Class)/) {
- $_ =~ s/\[(.*?)\s/\[$date /;
- }
- push @lines, $_;
-}
-close(IN);
-open(OUT,">$file");
-print OUT join("",@lines);
-close(OUT);
-
-__END__
-
-
-=head1 SYNOPSIS
-
-filedate <input filename> <newdate>
-
-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=<PATH_STY>) {
- $line =~ m/\\def\\(\w*).*\/([\w-]*)\/#1/;
- $macros{$2}=$1; # dir -> macro
-}
-close(PATH_STY);
-
-print <<PRE_TEX;
-\\documentclass[notes]{mikoslides}
-\\usepackage{amssymb}
-\\usepackage{latexml,stex,program}
-\\usepackage{ded,calbf,myindex}
-\\usepackage{tikz,multicol}
-\\usepackage{paths}
-\\usepackage[show]{ed}
-\\def\\bsp{\\sl\\color{green}}
-\\def\\hrcr#1#2{#2}
-
-\\begin{document}
-PRE_TEX
-
-chdir("$ENV{KWARC_HOME}/teaching/snippets/");
-
-foreach $dir (<*/>) {
- $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=<FILE>) {
- $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 (<IN>) {
- #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 <errlog filename> <grep pattern>
-
-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 (<FIN>){
- 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 = <HDR>;
- close(HDR); }
-
-$path.='/' if $path && $path !~ m!\/$!;
-go($input,$path.$output);
-print "Done.\n" if $verbose;
-
-__END__
-
-
-=head1 SYNOPSIS
-
-msplit <inputfile> [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 <string.h>
-
-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);
-<idenv>"]" BEGIN(INITIAL);
-
-<idenv>"id="{ID} {
- for (i=3; i<yyleng; i++) ltxml[i-3]=yytext[i];
- t=yyleng-3;
- tmp=strlen(fext);
- for (i=0; i<tmp; i++) ltxml[t+i]=fext[i];
- t=t+tmp;
- ltxml[t]=0;
- if (!q) printf("File %s\n",ltxml);
- lt = fopen(ltxml,"w");
- BEGIN(env);
-}
-
-<env>"symdef{\\"{ID}"}"(.)* {
-i=7;
-while (yytext[i]!='}'){
- symstr[i-7]=yytext[i];
- i++;
-}
-symstr[i-7]=0;
-BEGIN(sym);
-}
-
-<sym>"latexmldef{"(.)* {
-i=11;
-while (i<yyleng){
- ltxmlstr[i-11]=yytext[i];
- i++;
-}
-ltxmlstr[i-12]=0;
-fprintf(lt,"DefConstructor('\%s{}...{}','%s')\n",symstr,ltxmlstr);
-BEGIN(env);
-}
-
-<env,sym>"\\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<argc){
- if (!q) printf("Processing %s...\n",argv[i]);
- yyin = fopen(argv[i], "r");
- c=0;
- yylex();
- fclose(yyin);
- i++;
- }
- }
-}
diff --git a/Master/texmf-dist/source/latex/stex/bin/old/idcheck.l b/Master/texmf-dist/source/latex/stex/bin/old/idcheck.l
deleted file mode 100644
index 9b1603527d2..00000000000
--- a/Master/texmf-dist/source/latex/stex/bin/old/idcheck.l
+++ /dev/null
@@ -1,130 +0,0 @@
-%{
-#include <string.h>
-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);
-}
-
-<env>"]" {
-if (fe && !for_ok && f) printf("Missing 'for' at line %d\n",curr_lin);
-BEGIN(INITIAL);
-}
-
-<env>"id"{WS}"="{WS} BEGIN(fid);
-
-<fid>{ID} {
-for (i=0; i<yyleng; i++) l[n][i]=yytext[i];
-l[n][yyleng]=0;
-if (s) printf("%s\n",l[n]);
-n++;
-BEGIN(env);
-}
-
-<env>("for"){WS}"="{WS} {
-for_ok=1;
-BEGIN(foc);
-}
-<env>("continues"|"for"|"uses"|"premises"){WS}"="{WS} BEGIN(foc);
-
-<foc>{ID} {
-for (j=0; j<yyleng; j++) r[m][j]=yytext[j];
-r[m][yyleng]=0;
-m++;
-BEGIN(env);
-}
-
-<env>("premises"|"uses"){WS}"="{WS}"{" BEGIN(inenv);
-
-<inenv>{ID} {
-strncpy(r[m],yytext,yyleng);
-r[m][yyleng]=0;
-m++;
-}
-
-<inenv>"}" 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<strlen(argv[1]); j++)
- if (argv[1][j]=='s') s=1; else
- if (argv[1][j]=='q') q=1; else
- if (argv[1][j]=='f') f=1;
- }
- d=0;
- while (a<argc){
- if (!q) printf("Parsing %s...\n",argv[a]);
- yyin = fopen(argv[a] , "r");
- c = 0;
- lin = 1;
- n = 0;
- m = 0;
- yylex();
- fclose(yyin);
- if (!q) printf("%d characters skipped. Found %d IDs. \n",c,n);
- if (!q) printf("Checking for duplicates...\n");
- for (i=0; i<n; i++)
- for (j=i+1; j<n; j++)
- if (strcmp(l[i],l[j])==0) {
- printf("ID=%s is a duplicate in %s\n",l[i],argv[a]);
- d++;
- }
- if (!q) printf("Found %d duplicates.\n",d);
- if (!q) printf("Checking references... (found %d)\n",m);
- ur=0;
- for (i=0;i<m; i++){
- ok=0;
- for (j=0; j<n; j++)
- if (strcmp(r[i],l[j])==0){
- ok=1;
- break;
- }
- if (!ok) {
- printf("Unmatched reference for ID=%s\n",r[i]);
- ur++;
- }
- }
- if (!q) printf("Found %d unmatched references.\n",ur);
- a++;
- }
- return d+ur;
- }
- return 1;
-}
diff --git a/Master/texmf-dist/source/latex/stex/bin/old/modstr.l b/Master/texmf-dist/source/latex/stex/bin/old/modstr.l
deleted file mode 100644
index ae0101147c5..00000000000
--- a/Master/texmf-dist/source/latex/stex/bin/old/modstr.l
+++ /dev/null
@@ -1,137 +0,0 @@
-%{
-#include <iostream>
-#include <string>
-#include <map>
-#include <vector>
-using namespace std;
-
-
-const int indent = 4;
-const char start_char = '*';
-
-typedef struct {
- vector<string> defs,list;
- int father;
-} nodetype;
-
-map<string,nodetype> 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
-
-%%
-
-<INITIAL>"\\begin"{WS}"{module}"{WS}"[" BEGIN(in_module);
-
-<in_module>"id"{WS}"=" BEGIN(found_vertex);
-<found_vertex>{ID} {
-vertex = YYText();
-g[vertex].father=0;
-if (miss) cout << endl << "<-------- Module '" << vertex
- << "' -------->" << endl << endl;
-BEGIN(in_module);
-}
-<in_module>"uses"{WS}"=" BEGIN(found_one_child);
-<found_one_child>"{" BEGIN(found_more_children);
-<found_more_children>"}" BEGIN(in_module);
-<found_one_child>{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);
-}
-<found_more_children>{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);
-}
-
-<found_one_child,found_more_children,found_vertex>{SEP}|{WS}
-
-<in_module>"]" BEGIN(in_module_cont);
-
-<in_module,in_module_cont>(.|\n)
-
-<in_module_cont>"\\"("symdef"|"abbrdef"|"elldef"|"aliasdef"){WS}"{"{WS} BEGIN(mdef);
-<mdef>{M} {
-data = YYText();
-g[vertex].defs.push_back(data);
-}
-<mdef>"}" BEGIN(in_module_cont);
-<in_module_cont>"\\end"{WS}"{module}" BEGIN(INITIAL);
-
-<INITIAL>(.|\n) if (miss) cout << YYText();
-
-<*>{WS}(%)(.)*(\n)*
-
-%%
-
-void spc(int n){
- for(int i=0; i<n; i++) cout << " ";
-}
-
-int max(int a, int b){
- return a>b?a:b;
-}
-
-void go(map<string, nodetype > ::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; i<node->second.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<string, nodetype > ::iterator start = g.begin();
-map<string, nodetype > ::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=<FIN>){
- 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 <input filename> [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 = <FIN>;
- 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 <filename> [options]
-
- <filename> .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 <input filename> [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 = <FIN>;
- 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 = <FIN>;
- 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: <Y, y, [n]> ";
-
- my $answer = <STDIN>;
- 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
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\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}
-%</driver>
-% \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}
-% <math xmlns="http://www.w3.org/1998/Math/MathML">
-% <apply>
-% <eq/>
-% <apply>
-% <exp/>
-% <apply><times><imaginaryi/><pi/></times></apply>
-% </apply>
-% <apply><minus/><cn>1</cn></apply>
-% </apply>
-% </math>
-% \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}
-%</sty|styx>
-% \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');
-%</ltxml|ltxmlx>
-% \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;
-}
-%</ltxml>
-% \end{macrocode}
-%
-% The structural macros are rather simple:
-%
-% \begin{macrocode}
-%<*sty>
-\newcommand{\Capply}[3][]{#2(#3)}
-%</sty>
-%<*ltxml>
-DefConstructor('\Capply [] {} {}',
- "<ltx:XMApp ?#1(definitionURL='#1')()>#2 #3</ltx:XMApp>");
-%</ltxml>
-% 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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Ccn [] {}',"#2");
-DefConstructor('\Cci [] {}',"#2");
-DefConstructor('\Ccsymbol [] {}',
- "<ltx:XMTok role='CSYMBOL' meaning='#2' ?#1(definitionURL='#1')()/>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cccinterval [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONSTRUCTOR' meaning='ccinterval' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg></ltx:XMApp>");
-DefConstructor('\Ccointerval [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONSTRUCTOR' meaning='cointerval' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg></ltx:XMApp>");
-DefConstructor('\Cocinterval [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONSTRUCTOR' meaning='ocinterval' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg></ltx:XMApp>");
-DefConstructor('\Coointerval [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONSTRUCTOR' meaning='oointerval' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg></ltx:XMApp>");
-%</ltxml>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*sty>
-\newcommand{\Cinverse}[2][]{#2^{-1}}
-% what about separator
-%</sty>
-%<*ltxml>
-DefConstructor('\Cinverse [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='inverse' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%\ednote{need do deal with multiple variables!}
-%<*ltxml>
-DefConstructor('\Clambda [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BINDER' meaning='lambda' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\ClambdaDA [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BINDER' meaning='lambda' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Crestrict [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='restrict' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\CcomposeOp []',
- "<ltx:XMTok meaning='compose' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ccompose [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='MULOP' meaning='compose' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\Cident []',
- "<ltx:XMTok meaning='ident' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cdomain [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='domain' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ccodomain [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='codomain' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cimage [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='image' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cpiecewise [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='piecewise' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cpiece [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='piece' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cotherwise [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='otherwise' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cquotient [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='quotient' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CfactorialOp []',
- "<ltx:XMTok meaning='factorial' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cfactorial [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='factorial' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CdivideOp []',
- "<ltx:XMTok meaning='divide' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cdivide [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='divide' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CmaxOp []',
- "<ltx:XMTok meaning='max' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cmax [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='max' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CminOp []',
- "<ltx:XMTok meaning='min' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cmin [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='min' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CminusOp []',
- "<ltx:XMTok meaning='minus' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cminus [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='ADDOP' meaning='minus' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cuminus [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='uminus' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CplusOp []',
- "<ltx:XMTok meaning='plus' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cplus [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='ADDOP' meaning='plus' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\Cpower [] {} {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='power' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CremOp []',
- "<ltx:XMTok meaning='rem' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Crem [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='rem' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CtimesOp []',
- "<ltx:XMTok meaning='times' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ctimes [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='MULOP' meaning='times' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CrootOp []',
- "<ltx:XMTok meaning='root' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Croot [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='root' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cgcd [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='gcd' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CandOp []',
- "<ltx:XMTok meaning='and' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cand [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONNECTIVE' meaning='and' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CorOp []',
- "<ltx:XMTok meaning='or' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cor [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONNECTIVE' meaning='or' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CxorOp []',
- "<ltx:XMTok meaning='xor' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cxor [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONNECTIVE' meaning='xor' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CnotOp []',
- "<ltx:XMTok meaning='not' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cnot [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONNECTIVE' meaning='not' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CimpliesOp []',
- "<ltx:XMTok meaning='implies' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cimplies [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONNECTIVE' meaning='implies' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\CAndDa [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='and' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CAndCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='and' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\COrDa [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='or' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\COrCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='or' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CXorDa [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='xor' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CXorCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='xor' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cforall [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BINDER' meaning='forall' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CforallCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BINDER' meaning='forall' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cexists [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BINDER' meaning='exists' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CexistsCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BINDER' meaning='exists' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cabs [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='abs' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cconjugate [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='conjugate' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carg [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='arg' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Creal [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='real' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cimaginary [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='imaginary' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Clcm [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='lcm' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cfloor [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='floor' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cceiling [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='ceiling' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\CeqOp []',
- "<ltx:XMTok meaning='eq' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ceq [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='eq' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CneqOp []',
- "<ltx:XMTok meaning='neq' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cneq [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='neq' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CgtOp []',
- "<ltx:XMTok meaning='gt' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cgt [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='gt' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CltOp []',
- "<ltx:XMTok meaning='lt' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Clt [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='lt' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CgeqOp []',
- "<ltx:XMTok meaning='geq' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cgeq [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='geq' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CleqOp []',
- "<ltx:XMTok meaning='leq' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cleq [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='leq' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CequivalentOp []',
- "<ltx:XMTok meaning='equivalent' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cequivalent [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='equivalent' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>");
-DefConstructor('\CapproxOp []',
- "<ltx:XMTok meaning='approx' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Capprox [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='approx' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CfactorofOp []',
- "<ltx:XMTok meaning='factorof' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cfactorof [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='factorof' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-
-%</sty>
-%<*ltxml>
-DefConstructor('\CintOp []',
- "<ltx:XMTok meaning='int' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cint [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='int' role='INTOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CintLimits [] {}{}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='int' role='INTOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "<ltx:XMArg>#5</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CintDA [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='int' role='INTOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CintCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='int' role='INTOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cdiff [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='diff' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cddiff [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='diff' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cpartialdiff [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='diff' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "?#2(<ltx:XMArg>#2</ltx:XMArg>)()"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cdegree {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='degree'/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#1</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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
-%</sty>
-%<*ltxml>
-DefConstructor('\Climit [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='limit' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\ClimitCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='limit' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\CtendstoOp []',
- "<ltx:XMTok meaning='tendsto' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ctendsto [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='RELOP' meaning='tendsto' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CtendstoAboveOp []',
- "<ltx:XMTok meaning='tendsto' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CtendstoAbove [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='RELOP'meaning='tendsto' type='above' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CtendstoBelowOp []',
- "<ltx:XMTok meaning='tendsto' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CtendstoBelow [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='RELOP' meaning='tendsto' type='below' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cdivergence [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='divergence' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cgrad [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='grad' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Curl [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='url' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Claplacian [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='OPFUNCTION' meaning='laplacian' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cset [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='set' role='CONSTRUCTOR' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CsetRes [] {}{}',
- "<ltx:XMApp role='BIGOP'>"
- . "<ltx:XMTok role='BIGOP' meaning='set' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg role='BVAR'>#2</ltx:XMArg>"
- . "<ltx:XMArg role='CONDITION'>#3</ltx:XMArg>"
- . "<ltx:XMArg role='SCOPE'>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CsetCond [] {}{}{}',
- "<ltx:XMApp role='BIGOP'>"
- . "<ltx:XMTok role='BIGOP' meaning='set' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg role='BVAR'>#2</ltx:XMArg>"
- . "<ltx:XMArg role='CONDITION'>#3</ltx:XMArg>"
- . "<ltx:XMArg role='SCOPE'>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CsetDA [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='set' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg role='BVAR'>#2</ltx:XMArg>"
- . "<ltx:XMArg role='DOMAINOFAPPLICATION'>#3</ltx:XMArg>"
- . "<ltx:XMArg role='SCOPE'>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\ClistOp []',
- "<ltx:XMTok meaning='list' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Clist [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='list' role='CONSTRUCTOR' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CunionOp []',
- "<ltx:XMTok meaning='union' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cunion [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='union' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CintersectOp []',
- "<ltx:XMTok meaning='intersect' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cintersect [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='intersect' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CinOp []',
- "<ltx:XMTok meaning='in' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cin [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='in' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CnotinOp []',
- "<ltx:XMTok meaning='notin' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cnotin [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='notin' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CsubsetOp []',
- "<ltx:XMTok meaning='subset' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Csubset [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='subset' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CprsubsetOp []',
- "<ltx:XMTok meaning='prsubset' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cprsubset [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='prsubset' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\CnotsubsetOp []',
- "<ltx:XMTok meaning='notsubset' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cnotsubset [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='notsubset' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CnotprsubsetOp []',
- "<ltx:XMTok meaning='notprsubset' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cnotprsubset [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='notprsubset' role='RELOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CsetdiffOp []',
- "<ltx:XMTok meaning='setdiff' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Csetdiff [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='setdiff' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CcardOp []',
- "<ltx:XMTok meaning='card' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ccard [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='card' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CcartesianproductOp []',
- "<ltx:XMTok meaning='cartesianproduct' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ccartesianproduct [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='cartesianproduct' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-%</ltxml>
-% \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}}
-%</sty>
-% \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 []',
- "<ltx:XMTok meaning='supset' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CprsupsetOp []',
- "<ltx:XMTok meaning='prsupset' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CnotsupsetOp []',
- "<ltx:XMTok meaning='notsupset' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CnotprsupsetOp []',
- "<ltx:XMTok meaning='notprsupset' role='ID' ?#1(definitionURL='#1')()/>");
-DefMacro('\Csupset[]{}','\Csubset[#1]{#2}');
-DefMacro('\Cprsupset[]{}','\Cprsubset[#1]{#2}');
-DefMacro('\Cnotsupset[]{}{}','\Cnotsubset[#1]{#3}{#2}');
-DefMacro('\Cnotprsupset[]{}{}','\Cnotprsubset[#1]{#3}{#2}');
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\CUnionDAOp []',
- "<ltx:XMTok meaning='union' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CUnionDA [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='union' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CUnionCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='union' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CIntersectDaOp []',
- "<ltx:XMTok meaning='intersect' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CIntersectDa [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='intersect' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CIntersectCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='intersect' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CCartesianproductDaOp []',
- "<ltx:XMTok meaning='cartesianproduct' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CCartesianproductDa [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='cartesianproduct' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CCartesianproductCond [] {}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='BIGOP' meaning='cartesianproduct' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\CsumOp []',
- "<ltx:XMTok meaning='sum' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CsumLimits [] {}{}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='sum' role='SUMOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "#5</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\CprodOp []',
- "<ltx:XMTok meaning='prod' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\CprodLimits [] {}{}{}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='prod' role='SUMOP' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg><ci>#2</ci></ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "<ltx:XMArg>#4</ltx:XMArg>"
- . "#5</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Csin [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='sin' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ccos [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='cos' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ctan [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='tan' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Csec [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='sec' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ccsc [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='csc' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ccot [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='cot' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Csinh [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='sinh' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ccosh [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='cosh' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ctanh [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='tanh' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Csech [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='sech' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ccsch [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='csch' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ccoth [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='coth' role='TRIGFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carcsin [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arcsin' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carccos [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arccos' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carctan [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arctan' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carcsec [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arcsec' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carccsc [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arccsc' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carccot [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arccot' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carcsinh [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arcsinh' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carccosh [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arccosh' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carctanh [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arctanh' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carcsech [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arcsech' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carccsch [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arccsch' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Carccoth [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='arccoth' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cexp [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='exp' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cln [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='ln' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Clog [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='log' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cmean [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='mean' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Csdev [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='sdev' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cvar [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='var' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cmedian [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='median' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cmode [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='mode' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cmoment [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='moment' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxml>
-% \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}}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cvector [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONSTRUCTOR' meaning='vector' ?#1(definitionURL='#1')()/>"
- . "#2"
- . "</ltx:XMApp>",
- afterDigest=>sub { remove_math_commas($_[1], 2); });
-DefConstructor('\Cmatrix [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok role='CONSTRUCTOR' meaning='matrix' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cdeterminant [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='determinant' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Ctranspose [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='transpose' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cselector [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='selector' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CvectorproductOp []',
- "<ltx:XMTok meaning='vectorproduct' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cvectorproduct [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='vectorproduct' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\Cscalarproduct [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='scalarproduct' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");
-DefConstructor('\CouterproductOp []',
- "<ltx:XMTok meaning='outerproduct' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Couterproduct [] {}{}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='outerproduct' role='OPFUNCTION' ?#1(definitionURL='#1')()/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "<ltx:XMArg>#3</ltx:XMArg>"
- . "</ltx:XMApp>");#$
-%</ltxml>
-% \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}
-%</sty>
-%<*ltxml>
-DefConstructor('\Cintegers []',
- "<ltx:XMTok meaning='integers' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Creals []',
- "<ltx:XMTok meaning='reals' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Crationals []',
- "<ltx:XMTok meaning='rationals' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cnaturalnumbers []',
- "<ltx:XMTok meaning='naturalnumbers' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ccomplexes []',
- "<ltx:XMTok meaning='complexes' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cprimes []',
- "<ltx:XMTok meaning='primes' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cexponentiale []',
- "<ltx:XMTok meaning='exponentiale' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cimaginaryi []',
- "<ltx:XMTok meaning='imaginaryi' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cnotanumber []',
- "<ltx:XMTok meaning='notanumber' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ctrue []',
- "<ltx:XMTok meaning='true' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cfalse []',
- "<ltx:XMTok meaning='false' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cemptyset []',
- "<ltx:XMTok meaning='emptyset' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cpi []',
- "<ltx:XMTok meaning='pi' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Ceulergamma []',
- "<ltx:XMTok meaning='eulergamma' role='ID' ?#1(definitionURL='#1')()/>");
-DefConstructor('\Cinfinit []',
- "<ltx:XMTok meaning='infinit' role='ID' ?#1(definitionURL='#1')()/>");
-%</ltxml>
-% \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}}
-%</styx>
-%<*ltxmlx>
-DefConstructor('\Ccomplement [] {}',
- "<ltx:XMApp>"
- . "<ltx:XMTok meaning='complement' role='CSYMBOL'/>"
- . "<ltx:XMArg>#2</ltx:XMArg>"
- . "</ltx:XMApp>");
-%</ltxmlx>
-% \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}
-%<ltxml>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
-%<class>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<class>\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}
-%</driver>
-% \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
-%</package>
-% \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}
-%</cls>
-% \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');
-%</ltxml>
-% \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}}{}
-%</cls>
-%<*ltxml>
-DefKeyVal('cnxmodule','name','Semiverbatim');
-DefKeyVal('cnxmodule','id','Semiverbatim');
-DefEnvironment('{document}','<cnx:document>#body</cnx:document>',
- beforeDigest=> sub { AssignValue(inPreamble=>0); },
- afterDigest=> sub { $_[0]->getGullet->flush; return; });
-DefEnvironment('{cnxmodule} OptionalKeyVals:cnxmodule',
- "<cnx:name>&KeyVal('#1','name')</cnx: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'));
- });
-%</ltxml>
-% \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}{}{}
-%</cls>
-%<*ltxml>
-DefEnvironment('{ccontent}',"<cnx:content>#body</cnx:content>");
-%</ltxml>
-% \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}}{}
-%</cls>
-%<*ltxml>
-DefKeyVal('sectioning','id','Semiverbatim');
-DefEnvironment('{csection}OptionalKeyVals:sectioning{}',
- "<cnx:section %&KeyVals(#1)>\n"
- . "?#2(<cnx:name>#2</cnx:name>\n)()"
- . "#body\n</cnx:section>\n");
-DefEnvironment('{csubsection}OptionalKeyVals:sectioning{}',
- "<cnx:section %&KeyVals(#1)>\n"
- . "?#2(<cnx:name>#2</cnx:name>\n)()"
- . "#body\n</cnx:section>\n");
-DefEnvironment('{csubsubsection}OptionalKeyVals:sectioning{}',
- "<cnx:section %&KeyVals(#1)>\n"
- . "?#2(<cnx:name>#2</cnx:name>\n)()"
- . "#body\n</cnx:section>\n");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{cpara}
-% For the |<cnx:para>| 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}
-%</cls>
-%<*ltxml>
-DefKeyVal('para','id','Semiverbatim');
-DefEnvironment('{cpara} OptionalKeyVals:para','<cnx:para %&KeyVals(#1)>#body</cnx:para>');
-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);
-%</ltxml>
-% \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}
-%</cls>
-%<*ltxml>
-DefKeyVal('note','id','Semiverbatim');
-DefKeyVal('note','type','Semiverbatim');
-DefEnvironment('{cnote}OptionalKeyVals:note','<cnx:note %&KeyVals(#1)>#body</cnx:note>');
-%</ltxml>
-% \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}}
-%</cls>
-%<*ltxml>
-DefKeyVal('equation','id','Semiverbatim');
-DefEnvironment('{cequation} OptionalKeyVals:equation',
- "<cnx:equation %&KeyVals(#1)>"
- . "<ltx:Math mode='display'>"
- . "<ltx:XMath>#body</ltx:XMath>"
- . "</ltx:Math></cnx:equation>",
- mode=>'display_math');
-%</ltxml>
-% \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}}
-%</cls>
-%<*ltxml>
-DefKeyVal('cquote','id','Semiverbatim');
-DefKeyVal('cquote','type','Semiverbatim');
-DefKeyVal('cquote','src','Semiverbatim');
-DefEnvironment('{cquote} OptionalKeyVals:cquote',
- "<cnx:quote %&KeyVals(#1)>#body</cnx:quote>");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{footnote}
-% \begin{macrocode}
-%<*ltxml>
-DefConstructor('\footnote[]{}',"<cnx:note type='foot'>#2</cnx:note>");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{emph}
-% \begin{macrocode}
-%<*ltxml>
-DefConstructor('\emph{}',"<cnx:emphasis>#1</cnx:emphasis>");
-%</ltxml>
-% \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('\[',
- "<cnx:equation id='#id'>"
- . "<ltx:Math mode='display'>"
- . "<ltx:XMath>"
- . "#body"
- . "</ltx:XMath>"
- . "</ltx:Math>"
- ."</cnx:equation>",
- beforeDigest=> sub{ $_[0]->beginMode('display_math'); },
- captureBody=>1,
- properties=> sub { RefStepID('equation') });
-DefConstructor('\]' ,"",beforeDigest=> sub{ $_[0]->endMode('display_math'); });
-%</ltxml>
-% \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('\[',
- "<cnx:equation id='#id'>"
- . "<ltx:Math mode='display'>"
- . "<ltx:XMath>"
- . "#body"
- . "</ltx:XMath>"
- . "</ltx:Math>"
- ."</cnx:equation>",
- 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}');
-%</ltxml>
-% \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}}
-%</cls>
-%<*ltxml>
-Tag('cnx:item', autoClose=>1);
-DefConstructor('\item[]',"<cnx:item>?#1(<cnx:name>#1</cnx:name>)");
-DefConstructor('\litem[]{}',"<cnx:item id='#2'>?#1(<cnx:name>#1</cnx:name>)");
-DefConstructor('\itemize@item[]',
- "<cnx:item id='#id'>?#1(<cnx:name>#1</cnx:name>)",
- properties=>sub{ RefStepItemCounter(); });
-DefConstructor('\enumerate@item[]',
- "<cnx:item id='#id'>?#1(<cnx:name>#1</cnx:name>)",
- properties=>sub{ RefStepItemCounter(); });
-DefConstructor('\description@item[]',
- "<cnx::item id='#id'>?#1(<cnx:name>#1</cnx:name>)",
- properties=>sub{ RefStepItemCounter(); });
-AssignValue(itemlevel=>0);
-DefEnvironment('{itemize}',
- "<cnx:list id='#id' type='itemize'>#body</cnx:list>",
- properties=>sub { beginItemize('itemize'); });
-DefEnvironment('{enumerate}',
- "<cnx:list type='enumerate' id='#id'>#body</cnx:list>",
- properties=>sub { beginItemize('enumerate'); });
-DefEnvironment('{description}',
- "<cnx:list type='description' id='#id'>#body</cnx:list>",
- properties=>sub { beginItemize('description'); });
-%</ltxml>
-% \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');
-%</ltxml>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*ltxml>
-DefConstructor('\ref Semiverbatim', "<cnx:cnxn target='#1'>&LookupValue('LABEL@#1')</cnx:cnxn>");
-%</ltxml>
-% \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}}
-{}
-%</cls>
-%<*ltxml>
-DefKeyVal('example','id','Semiverbatim');
-DefEnvironment('{cexample}OptionalKeyVals:example',
- "<cnx:example %&KeyVals(#1)>#body</cnx:example>");
-%</ltxml>
-% \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 |<cnx:para>| element for the |<cnx:problem>| and |<cnx:solution>|
-% 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}}{}
-%</cls>
-%<*ltxml>
-DefKeyVal('cexercise','id','Semiverbatim');
-DefKeyVal('cexercise','name','Semiverbatim');
-DefEnvironment('{cexercise}OptionalKeyVals:exercise',
- "<cnx:exercise ?&defined(&KeyVal(#1,'id'))(id='&KeyVal(#1,'id')')()>"
- . "#body"
- . "</cnx:exercise>");
-DefKeyVal('cproblem','id','Semiverbatim');
-DefKeyVal('cproblem','name','Semiverbatim');
-DefEnvironment('{cproblem}OptionalKeyVals:cproblem',
- "<cnx:problem ?&defined(&KeyVal(#1,'id'))(id='&KeyVal(#1,'id')')()>"
- . "?&defined(&KeyVal(#1,'name'))(<cnx:name>&KeyVal(#1,'name')</cnx:name>\n)()"
- . "#body"
- . "</cnx:problem>");
-DefKeyVal('csolution','id','Semiverbatim');
-DefKeyVal('csolution','name','Semiverbatim');
-DefEnvironment('{csolution}OptionalKeyVals:cproblem',
- "<cnx:solution ?&defined(&KeyVal(#1,'id'))(id='&KeyVal(#1,'id')')()>"
- . "?&defined(&KeyVal(#1,'name'))(<cnx:name>&KeyVal(#1,'name')</cnx:name>\n)()"
- . "#body"
- . "</cnx:solution>");
-%</ltxml>
-% \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}}%
-{}
-%</cls>
-%<*ltxml>
-DefKeyVal('rule','id','Semiverbatim');
-DefKeyVal('rule','name','Semiverbatim');
-DefKeyVal('rule','type','Semiverbatim');
-DefEnvironment('{crule}OptionalKeyVals:rule',
- "<cnx:rule ?&defined(&KeyVal(#1,'id'))(id='&KeyVal(#1,'id')')() type='&KeyVal(#1,'type')'>\n"
- . "?&defined(&KeyVal(#1,'name'))(<cnx:name>&KeyVal(#1,'name')</cnx:name>\n)()"
- . "\n#body\n"
- . "</cnx:rule>\n");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{statement}
-% \begin{macrocode}
-%<*cls>
-\srefaddidkey{statement}
-\newenvironment{statement}[1][]{\metasetkeys{statement}{#1}}{}
-%</cls>
-%<*ltxml>
-DefKeyVal('statement','id','Semiverbatim');
-DefEnvironment('{statement} OptionalKeyVals:statement','<cnx:statement %&KeyVals(#1)>#body</cnx:statement>');
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{proof}
-% \begin{macrocode}
-%<*cls>
-\srefaddidkey{proof}
-\newenvironment{proof}[1][]{\metasetkeys{proof}{#1}}{}
-%</cls>
-%<*ltxml>
-DefKeyVal('proof','id','Semiverbatim');
-DefEnvironment('{proof}OptionalKeyVals:proof','<cnx:proof %&KeyVals(#1)>#body</cnx:proof>');
-%</ltxml>
-% \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:}}}{}
-%</cls>
-%<*ltxml>
-DefKeyVal('definition','id','Semiverbatim');
-DefKeyVal('definition','term','Semiverbatim');
-DefKeyVal('definition','seealso','Semiverbatim');
-DefEnvironment('{definition}OptionalKeyVals:definition',
- "<cnx:definition ?&defined(&KeyVal(#1,'id'))(id='&KeyVal(#1,'id')')()>\n"
- . "?&defined(&KeyVal(#1,'term'))(<cnx:term>&KeyVal(#1,'term')</cnx:term>\n)()"
- . "\n#body\n"
- . "?&defined(&KeyVal(#1,'seealso'))(<cnx:seealso><cnx:term>&KeyVal(#1,'term')</cnx:term></cnx:seealso>\n)()"
- . "</cnx:definition>\n");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{cmeaning}
-% \begin{macrocode}
-%<*cls>
-\srefaddidkey{meaning}
-\newenvironment{cmeaning}[1][]{\metasetkeys{meaning}{#1}}{}
-%</cls>
-%<*ltxml>
-DefKeyVal('meaning','id','Semiverbatim');
-DefEnvironment('{cmeaning}OptionalKeyVals:meaning','<cnx:meaning %&KeyVals(#1)>#body</cnx:meaning>');
-%</ltxml>
-% \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}
-%</cls>
-%<*ltxml>
-DefKeyVal('cnxn','document','Semiverbatim');
-DefKeyVal('cnxn','target','Semiverbatim');
-DefKeyVal('cnxn','strength','Semiverbatim');
-DefConstructor('\cnxn OptionalKeyVals:cnxn {}','<cnx:cnxn %&KeyVals(#1)>#1</cnx:cnxn>');
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{link}
-% \begin{macrocode}
-%<*cls>
-\addmetakey{link}{src}
-\newcommand{\link}[2][]{\metasetkeys{link}{#1}\underline{#2}}
-%</cls>
-%<*ltxml>
-DefKeyVal('link','src','Semiverbatim');
-DefConstructor('\link OptionalKeyVals:link {}','<cnx:link %&KeyVals(#1)>#2</cnx:link>');
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{cfigure}
-% The |cfigure| only gives us one of the possible instances of the |<figure>|
-% 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}}
-%</cls>
-%<*ltxml>
-DefKeyVal('cfigure','id','Semiverbatim');
-DefKeyVal('cfigure','name','Semiverbatim');
-DefKeyVal('cfigure','type','Semiverbatim');
-DefKeyVal('cfigure','caption','Semiverbatim');
-DefConstructor('\cfigure OptionalKeyVals:cfigure Semiverbatim Semiverbatim',
- "<cnx:figure ?&defined(&KeyVal(#1,'id'))(id='&KeyVal(#1,'id')')()>"
- . "?&defined(&KeyVal(#1,'name'))(<cnx:name>&KeyVal(#1,'name')</cnx:name>\n)()"
- . "<cnx:media type='&KeyVal(#1,'type')' src='#3'/>"
- . "?&defined(&KeyVal(#1,'caption'))(<cnx:caption>&KeyVal(#1,'caption')</cnx:caption>\n)()"
- . "</cnx:figure>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{ccite}
-% \begin{macrocode}
-%<*cls>
-\addmetakey{ccite}{src}
-\newcommand{\ccite}[2][]{\metasetkeys{ccite}{#1}\emph{#2}}
-%</cls>
-%<*ltxml>
-DefKeyVal('ccite','src','Semiverbatim');
-DefConstructor('\ccite OptionalKeyVals:ccite {}','<cnx:cite %&KeyVals(#1)>#2</cnx:cite>');
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{term}
-% \begin{macrocode}
-%<*cls>
-\newcommand{\term}[1]{{\bfseries\underline{#1}}}
-%</cls>
-%<*ltxml>
-DefConstructor('\term[]{}',"<cnx:term>#2</cnx:term>");
-%</ltxml>
-% \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]}
-%</cls>
-%<*ltxml>
-DefKeyVal('metadata','version','Semiverbatim');
-DefKeyVal('metadata','created','Semiverbatim');
-DefKeyVal('metadata','revised','Semiverbatim');
-DefEnvironment('{metadata}OptionalKeyVals:metadata',
- "<cnx:metadata>\n"
- . "<md:version>&KeyVal('#1','version')</md:version>\n"
- . "<md:created>&KeyVal('#1','created')</md:created>\n"
- . "<md:revised>&KeyVal('#1','revised')</md:revised>\n"
- . "#body\n"
- . "</cnx:metadata>");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{authorlist}
-% \begin{macrocode}
-%<*cls>
-\newenvironment{authorlist}{{\bfseries{Authors}:~}}{\\[1ex]}
-%</cls>
-%<*ltxml>
-DefEnvironment('{authorlist}',"<md:authorlist>#body</md:authorlist>");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{environment}{maintainerlist}
-% \begin{macrocode}
-%<*cls>
-\newenvironment{maintainerlist}{{\bfseries{Maintainers}:~}}{\\[1ex]}
-%</cls>
-%<*ltxml>
-DefEnvironment('{maintainerlist}',"<md:maintainerlist>#body</md:maintainerlist>");
-%</ltxml>
-% \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,}
-%</cls>
-%<*ltxml>
-DefKeyVal('auth','id','Semiverbatim');
-DefKeyVal('auth','firstname','Semiverbatim');
-DefKeyVal('auth','surname','Semiverbatim');
-DefKeyVal('auth','email','Semiverbatim');
-DefConstructor('\cnxauthor OptionalKeyVals:auth',
- "<md:author id='&KeyVal('#1','id')'>\n"
- . "?&defined(&KeyVal(#1,'honorific'))(<md:honorific>&KeyVal('#1','honorific')</md:honorific>\n)()"
- . "?&defined(&KeyVal(#1,'firstname'))(<md:firstname>&KeyVal('#1','firstname')</md:firstname>\n)()"
- . "?&defined(&KeyVal(#1,'other'))(<md:other>&KeyVal('#1','other')</md:other>\n)()"
- . "?&defined(&KeyVal(#1,'surname'))(<md:surname>&KeyVal('#1','surname')</md:surname>\n)()"
- . "?&defined(&KeyVal(#1,'lineage'))(<md:lineage>&KeyVal('#1','lineage')</md:lineage>\n)()"
- . "?&defined(&KeyVal(#1,'email'))(<md:email>&KeyVal('#1','email')</md:email>\n)()"
- . "</md:author>\n");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{maintainer}
-% \begin{macrocode}
-%<*cls>
-\newcommand{\maintainer}[1][]{\metasetkeys{auth}{#1}\auth@first~\auth@sur,}
-%</cls>
-%<*ltxml>
-DefConstructor('\maintainer OptionalKeyVals:auth',
- "<md:maintainer id='&KeyVal('#1','id')'>\n"
- . "?&defined(&KeyVal(#1,'honorific'))(<md:honorific>&KeyVal('#1','honorific')</md:honorific>\n)()"
- . "?&defined(&KeyVal(#1,'firstname'))(<md:firstname>&KeyVal('#1','firstname')</md:firstname>\n)()"
- . "?&defined(&KeyVal(#1,'other'))(<md:other>&KeyVal('#1','other')</md:other>\n)()"
- . "?&defined(&KeyVal(#1,'surname'))(<md:surname>&KeyVal('#1','surname')</md:surname>\n)()"
- . "?&defined(&KeyVal(#1,'lineage'))(<md:lineage>&KeyVal('#1','lineage')</md:lineage>\n)()"
- . "?&defined(&KeyVal(#1,'email'))(<md:email>&KeyVal('#1','email')</md:email>\n)()"
- . "</md:maintainer>\n");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{environment}{keywordlist}
-% \begin{macrocode}
-%<*cls>
-\newenvironment{keywordlist}{\bfseries{Keywords}:~}{\\[1ex]}
-%</cls>
-%<*ltxml>
-DefEnvironment('{keywordlist}',"<md:keywordlist>\n#body\n</md:keywordlist>");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{macro}{keyword}
-% \begin{macrocode}
-%<*cls>
-\newcommand{\keyword}[1]{#1,}
-%</cls>
-%<*ltxml>
-DefConstructor('\keyword {}',"<md:keyword>#1</md:keyword>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{environment}{cnxabstract}
-% \begin{macrocode}
-%<*cls>
-\newenvironment{cnxabstract}%
-{\par\noindent\strut\hfill\begin{minipage}{10cm}{\bfseries{Abstract}:~}}%
-{\end{minipage}\hfill}
-%</cls>
-%<*ltxml>
-DefEnvironment('{cnxabstract} OptionalKeyVals:cnxabstract',
- "<md:abstract>\n#body\n</md:abstract>\n");
-1;
-%</ltxml>
-% \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]
-%</package>
-%<*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}
-%</driver>
-% \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
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-# -*- CPERL -*-
-package LaTeXML::Package::Pool;
-use strict;
-use LaTeXML::Global;
-use LaTeXML::Package;
-RequirePackage('sref');
-%</ltxml>
-% \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}
-%</package>
-% \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
-%</package>
-%<*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;}
-%</ltxml>
-% \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}
-%</package>
-%<*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;
-});#$
-%</ltxml>
-% \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;}#$
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefEnvironment('{DCmetadata}[]', "<omdoc:metadata>#body</omdoc:metadata>");
-%</ltxml>
-% \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&#2: \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}
-%</package>
-% \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}}
-%</package>
-%<*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;});
-%</ltxml>
-% \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}
-%</package>
-%<*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;});
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMtitle}
-% \begin{macrocode}
-%<*package>
-\def\DCMtitle#1{\def\dcm@title{#1}\providecommand{\dcm@shorttitle}{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMtitle{}',"<dc:title>#1</dc:title>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMsubtitle}
-% \begin{macrocode}
-%<*package>
-\def\dcm@subtitle{}
-\def\DCMsubtitle#1{\def\dcm@subtitle{#1}}
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMshorttitle}
-% \begin{macrocode}
-%<*package>
-\def\dcm@shorttitle{}
-\def\DCMshorttitle#1{\def\dcm@shorttitle{#1}}
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMsubject}
-% \begin{macrocode}
-%<*package>
-\def\DCMsubject#1{\def\dcm@subject{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMsubject{}',"<dc:subject>#1</dc:subject>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMdescription}
-% \begin{macrocode}
-%<*package>
-\long\def\DCMdescription#1{\long\def\dcm@description{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMdescription{}',"<dc:description>#1</dc:description>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMpublisher}
-% \begin{macrocode}
-%<*package>
-\def\DCMpublisher#1{\def\dcm@publisher{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMpublisher{}',"<dc:publisher>#1</dc:publisher>");
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMdate{}',"<dc:date>#1</dc:date>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMtype}
-% \begin{macrocode}
-%<*package>
-\def\DCMtype#1{\def\dcm@type{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMtype{}',"<dc:type>#1</dc:type>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMidentifier}
-% \begin{macrocode}
-%<*package>
-\def\DCMidentifier#1#2{\def\dcm@scheme{#1}\def\dcm@identifier{#2}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMidentifier{}{}',"<dc:identifier scheme='#1'>#2</dc:identifier>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMsource}
-% \begin{macrocode}
-%<*package>
-\def\DCMsource#1{\def\dcm@source{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMsource{}',"<dc:source>#1</dc:source>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMlanguage}
-% \begin{macrocode}
-%<*package>
-\def\DCMlanguage#1{\def\dcm@language{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMlanguage{}',"<dc:language>#1</dc:language>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMrelation}
-% \begin{macrocode}
-%<*package>
-\def\DCMrelation#1{\def\dcm@relation{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMrelation{}',"<dc:relation>#1</dc:relation>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMrights}
-% \begin{macrocode}
-%<*package>
-\def\DCMrights#1{\long\def\dcm@rights{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMrights{}',"<dc:rights>#1</dc:rights>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMlicense}
-% \begin{macrocode}
-%<*package>
-\def\DCMlicense#1{\def\dcm@license{#1}}
-%</package>
-% \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}}
-%</package>
-%<*ltxml>
-DefMacro('\DCMlicensenotice{}','\DCMrights{#1}');
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMcopyrightnotice}
-% \begin{macrocode}
-%<*package>
-\def\DCMcopyrightnotice#1#2{\DCMrights{Copyright {\copyright} #1: #2}}
-%</package>
-%<*ltxml>
-DefMacro('\DCMcopyrightnotice{}{}','\DCMrights{Copyright {\copyright} #1: #2}');
-%</ltxml>
-% \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}}}
-%</package>
-%<*ltxml>
-DefConstructor('\cclicense{}',"<cc:license>#1</cc:license>");
-DefConstructor('\attribution',"<cc:attribution/>");
-DefConstructor('\noncommercial',"<cc:noncommercial/>");
-DefConstructor('\sharealike',"<cc:sharealike/>");
-DefConstructor('\noderivativeworks',"<cc:noderivativeworks>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\DCMabstract}
-% \begin{macrocode}
-%<*package>
-\long\def\DCMabstract#1{\long\def\dcm@abstract{#1}}
-%</package>
-%<*ltxml>
-DefConstructor('\DCMabstract{}',"<dc:description>#1</dc:description>");
-%</ltxml>
-% \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}}
-%</package>
-% \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}}
-%</package>
-% \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}
-%</package>
-% \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}
-%</package>
-% \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}}}
-%</package>
-% \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}
-%</package>
-% \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}}
-%</package>
-% \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;});
-%</ltxml>
-% \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}}
-%</package>
-%<*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;});
-%</ltxml>
-% \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}}
-%</package>
-%<*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;});
-%</ltxml>
-% \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}}
-%</package>
-%<*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;});
-%</ltxml>
-% \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}}
-%</package>
-%<*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;});
-%</ltxml>
-% \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);
-%</ltxml>
-% \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}
-%</package>
-%<*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}');
-%</ltxml>
-% \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}
-%</package>
-% \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);
-%</ltxml>
-% \end{macrocode}
-%
-%\DCMsubsection{Finale}
-%
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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
-%<package|cls>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\ProvidesPackage{hwexam}[2010/06/25 v0.9b homework assignments and exams]
-%<cls>\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}
-%</driver>
-% \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
-%</cls>
-%<*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();
-%</ltxml.cls>
-% \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}
-%</cls>
-%<*ltxml.cls>
-LoadClass('omdoc');
-RequirePackage('stex');
-RequirePackage('hwexam');
-RequirePackage('graphicx');
-RequirePackage('amssymb');
-RequirePackage('amstext');
-RequirePackage('amsmath');
-%</ltxml.cls>
-% \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
-%</package>
-% \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}
-%</package>
-% \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');
-%</ltxml>
-% \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#");
-%</ltxml>
-% \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}{}
-%</package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*ltxml>
-DefEnvironment('{assignment} OptionalKeyVals:assig',
- "<omdoc:omgroup ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')() "
- . "assig:dummy='for the namespace'"
- . "?#locator(stex:srcref='#locator')()>"
- . "<omdoc:metadata ?#locator(stex:srcref='#locator')()>"
- . "<dc:title ?#locator(stex:srcref='#locator')()>"
- . "Assignment ?&KeyVal(#1,'num')(&KeyVal(#1,'num').)()"
- . "?&KeyVal(#1,'title')((&KeyVal(#1,'title')))"
- . "</dc:title>"
- . "?&KeyVal(#1,'given')(<omdoc:meta property='assig:given'>&KeyVal(#1,'given')</omdoc:meta>)()"
- . "?&KeyVal(#1,'due')(<omdoc:meta property='assig:due'>&KeyVal(#1,'due')</omdoc:meta>)()"
- . "?&KeyVal(#1,'pts')(<omdoc:meta property='assig:pts'>&KeyVal(#1,'pts')</omdoc:meta>)()"
- . "</omdoc:metadata>"
- . "#body"
- ."</omdoc:omgroup>\n");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{macrocode}
-%<*package>
-\addmetakey[\assig@default@type]{document}{hwexamtype}
-%</package>
-% \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}}
-%</package>
-%<*ltxml>
-DefMacro('\includeassignment [] {}','\input{#2}');
-DefMacro('\inputassignment [] {}','\input{#2}');
-%</ltxml>
-% \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}
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-DefEnvironment('{testheading}OptionalKeyVals:omdoc','');
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefConstructor('\testspace{}','');
-DefConstructor('\testnewpage','');
-DefConstructor('\testemptypage','');
-%</ltxml>
-% \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 &}}
-%</package>
-% \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}}
-%</package>
-% \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}
-%<ltxml>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]
-%</package>
-%<*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}
-%</driver>
-% \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]
-%</package>
-% \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}
-%</package>
-% \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}}
-%</package>
-% \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}
-%</package>
-% \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}}}}
-%</package>
-% \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}}
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\showmetakeys}
-% \begin{macrocode}
-%<package>\newcommand\showmetakeys{\metakeys@showmetatrue}
-%<ltxml>DefConstructor('\showmetakeys','');
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\hidemetakeys}
-% \begin{macrocode}
-%<package>\newcommand\hidemetakeys{\metakeys@showmetafalse}
-%<ltxml>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}
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Finale}
-%
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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
-%<cls>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<cls>\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}
-%</driver>
-% \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;
-%</ltxml>
-% \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
-%</cls>
-%<*ltxml>
-RawTeX('\newif\ifnotes\notesfalse');
-RawTeX('\newif\ifproblems\problemsfalse');
-%</ltxml>
-% \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
-%</cls>
-%<*ltxml>
-LoadClass('omdoc');
-DefConstructor('\usetheme{}','');
-%</ltxml>
-% \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}
-%</cls>
-%<*ltxml>
-RequirePackage('stex');
-RequirePackage('latexml');
-RequirePackage('amssymb');
-RequirePackage('graphicx');
-RequirePackage('tikz');
-RequirePackage('amsmath');
-%</ltxml>
-% \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}
-%</cls>
-%<*ltxml>
-DefRegister('\slidewidth' => Dimension('13.5cm'));
-DefRegister('\slideheight' => Dimension('9cm'));
-%</ltxml>
-% \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
-%</cls>
-%<*ltxml>
-DefEnvironment('{note}','#body');
-%</ltxml>
-% \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}
-%</cls>
-% \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}
-%</cls>
-%<*ltxml>
-DefEnvironment('{frame}[]',
- "<omdoc:omgroup layout='slide' ?#locator(stex:srcref='#locator')()>"
- . "#body\n"
- ."</omdoc:omgroup>\n\n",
- afterDigestBegin=>sub {
- $_[1]->setProperty(theory=>LookupValue('current_module')); });
-%</ltxml>#$
-% \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
-%</cls>
-%<*ltxml>
-DefConstructor('\frametitle{}',
- "\n<omdoc:metadata ?#locator(stex:srcref='#locator')()><dc:title>#1</dc:title></omdoc:metadata>");
-%</ltxml>
-% \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
-%</cls>
-%<*ltxml>
-DefEnvironment('{problems}','#body');
-%</ltxml>
-% \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}}}}
-%</cls>
-% \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})}
-%</cls>
-%<*ltxml>
-#DefMacro('\defemph{}','{\textcolor{magenta}{#1}}');
-#DefMacro('\notemph{}','{\textcolor{magenta}{#1}}');
-%</ltxml>
-% \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}
-%</cls>
-%<*ltxml>
-DefMacro('\textwarning',"");
-%</ltxml>
-% \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}
-%</ltxml>
-%
-% 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}}
-%</cls>
-%<*ltxml>
-DefConstructor('\titleframe',"<omdoc:ignore>titleframe elided here</omdoc:ignore>");
-DefEnvironment('{titleframewith}',
- "<omdoc:ignore>begin elided titleframe</omdoc:ignore>"
- . "#body"
- ."<omdoc:ignore>end elided titleframe</omdoc:ignore>");
-DefEnvironment('{titleslide}',"");
-DefEnvironment('{titleslide}',"<omdoc:omgroup ?#locator(stex:srcref='#locator')()>#body</omdoc:omgroup>");
-DefEnvironment('{ttitle}', "\n<dc:title>#body</dc:title>");
-%</ltxml>
-% \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}}
-%</cls>
-%<*ltxml>
-%</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}}
-%</cls>
-%<*ltxml>
-DefConstructor('\hateq',"=\x{03C2}");
-DefConstructor('\textleadsto',"=\x{219D}");
-%</ltxml>
-% \end{macrocode}
-%
-% We need to disregard the columns macros introduced by the |beamer| class
-% \begin{macrocode}
-%<*ltxml>
-DefEnvironment('{columns}','#body');
-DefEnvironment('{column}{}','#body');
-%</ltxml>
-% \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',
- "<omdoc:omtext ?#locator(stex:srcref='#locator')() ?#2(overlay='&overlayFrom(#2)')()>"
- . "?#1(<dc:title>#1</dc:title>)()"
- . "<omdoc:CMP ?#locator(stex:srcref='#locator')()><omdoc:p ?#locator(stex:srcref='#locator')()>",
- beforeDigest=>sub {
- Let('\group@item@maybe@unwrap','\group@item@unwrap');
- #$_[0]->bgroup;
- useCMPItemizations();
- return; },
- properties=>sub{ RefStepItemCounter(); });
-
-
-DefConstructor('\beamer@itemize@item[] OptionalBeamerOverlay',
- "<omdoc:li ?#locator(stex:srcref='#locator')() ?#2(overlay='&overlayFrom(#2)')() >"
- . "?#1(<dc:title ?#locator(stex:srcref='#locator')()>#1</dc:title>)()",
- properties=>sub{ RefStepItemCounter(); });
-DefConstructor('\beamer@enumerate@item[] OptionalBeamerOverlay',
- "<omdoc:li ?#locator(stex:srcref='#locator')() ?#2(overlay='&overlayFrom(#2)')() >"
- . "?#1(<dc:title ?#locator(stex:srcref='#locator')()>#1</dc:title>)()",
- properties=>sub{ RefStepItemCounter(); });
-DefConstructor('\beamer@description@item[] OptionalBeamerOverlay',
- "<omdoc:di ?#locator(stex:srcref='#locator')() ?#2(overlay='&overlayFrom(#2)')() >"
- . "?#1(<omdoc:dt ?#locator(stex:srcref='#locator')()>#1</omdoc:dt>)()<omdoc:dd>", # 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');
-%</ltxml>#$
-% \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');
-%</ltxml>
-% \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}
-%<cls>\ifnotes\else\sf\fi
-%<ltxml>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
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\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}
-%</driver>
-% \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}
-% <OMA>
-% <OMS cd="calculus" name="SmoothFunctionsOn"/>
-% <OMS cd="calculus" name="Reals"/>
-% </OMA>\end{lstlisting}\\\hline
-% {\mathml} & \lstset{morekeywords={apply,csymbol}}
-% \begin{lstlisting}
-% <apply>
-% <csymbol cd="calculus">SmoothFunctionsOn</csymbol>
-% <csymbol cd="calculus">Reals</csymbol>
-% </apply>\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
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-# -*- CPERL -*-
-package LaTeXML::Package::Pool;
-use strict;
-use LaTeXML::Global;
-use LaTeXML::Package;
-%</ltxml>
-% \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}{}
-%</package>
-% \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}}}
-%</package>
-% \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}}{}
-%</package>
-% \end{macrocode}
-% for the {\latexml} bindings, we have to do the work all at once.
-% \begin{macrocode}
-%<*ltxml>
-DefEnvironment('{module} OptionalKeyVals:Module',
- "?#excluded()(<omdoc:theory "
- . "?&defined(&KeyVal(#1,'id'))(xml:id='&KeyVal(#1,'id')')(xml:id='#id')>#body</omdoc:theory>)",
-# 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;
- });
-%</ltxml>
-% \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"); }#$
-%</ltxml>
-% \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}
-%</package>
-% \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}}}
-%</package>
-% \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}}
-%</package>
-%<*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 {}',
- "<omdoc:imports from='?#1(&omext(#1))\##2'/>",
- afterDigest=>sub{ importmoduleI(@_)});
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\importOMDocmodule OptionalSemiverbatim {}{}',"<omdoc:imports from='#3\##2'/>",
-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;
-});
-%</ltxml>
-% \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
-%</package>
-%<*ltxml>
-DefConstructor('\metalanguage OptionalSemiverbatim {}',
- "<omdoc:imports type='metalanguage' from='?#1(&omext(#1))\##2'/>",
- afterDigest=>sub{ importmoduleI(@_)});
-%</ltxml>
-% \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}}
-%</package>
-% \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}{}
-%</package>
-% \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}
-%</package>
-% \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}}
-%</package>
-%<*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 <rendering><Math><XMath> 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 <rendering><Math><XMath> 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; });
-%</ltxml>%$
-% \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}}
-%</package>
-% \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
-%</package>
-%<*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; });
-%</ltxml>
-% \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{}
-%</package>
-% \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}
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\capitalize}
-% \begin{macrocode}
-%<*package>
-\def\@captitalize#1{\uppercase{#1}}
-\newcommand\capitalize[1]{\expandafter\@captitalize #1}
-%</package>
-% \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}
-%</package>
-% \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}%
-%</package>
-% \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}}
-%</package>
-%<*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");
- });#$
-%</ltxml>
-% \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}}
-%</package>
-% \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}}
-%</package>
-%<*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; });#$
-%</ltxml>
-% \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}}
-%</package>
-%<*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;});#$
-%</ltxml>
-% \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
-%</package>
-%<*ltxml>
-DefConstructor('\sinputref{}',"<omdoc:ref xref='#1.omdoc' type='cite' class='expandable'/>");
-DefConstructor('\inputref{}',"<omdoc:ref xref='#1.omdoc' type='cite' class='expandable'/>");
-%</ltxml>
-% \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{}', "<omdoc:recurse select='#select'/>",
- afterDigest=>sub { my ($stomach, $whatsit) = @_;
- my $select = $whatsit->getArg(1);
- $select = ref $select ? $select->toString : '';
- $whatsit->setProperty(select=>"*[".$select."]"); });
-DefConstructor('\@symdef@pres@text{}', "<omdoc:text>#1</omdoc:text>");
-%</ltxml>#$
-% \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}
-%</package>
-%<*ltxml>
-DefConstructor('\requirepackage{} Semiverbatim',"<omdoc:imports from='#2'/>",
- afterDigest=>sub { my ($stomach, $whatsit) = @_;
- my $select = $whatsit->getArg(1);
- RequirePackage($select->toString); });#$
-%</ltxml>
-% \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}}
-%</package>
-% \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}}
-%</package>
-% \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}}
-%</package>
-% \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);
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-%</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{}
-%</package>
-%<*ltxml>
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Finale}
-%
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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
-%<package|cls>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\ProvidesPackage{omdoc}[2010/06/25 v1.0 OMDoc document Structure]
-%<cls>\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}
-%</driver>
-% \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
-%</cls>
-%<*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();
-%</ltxml.cls>
-% \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}
-%</cls>
-%<*ltxml.cls>
-LoadClass('article');
-RequirePackage('sref');
-%</ltxml.cls>
-% \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");
-%</ltxml.cls>
-% \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");
-%</ltxml.cls>
-% \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');
-%</ltxml.cls>
-% \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}
-%</cls>
-%<*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',
- "<omdoc:omdoc "
- . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')"
- . "(?&Tokenize(&LookupValue('SOURCEBASE'))"
- . "(xml:id='&Tokenize(&LookupValue('SOURCEBASE')).omdoc')()) "
- . "?&Tokenize(&LookupValue('baseuri'))"
- . "(xml:base='&xmlBase()')() "
- . "?#locator(stex:srcref='#locator')()>"
- . "#body"
- ."</omdoc:omdoc>",
- beforeDigest=> sub { AssignValue(inPreamble=>0); },
- afterDigest=> sub { $_[0]->getGullet->flush; return; });
-%</ltxml.cls>
-% \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);
-%</ltxml.sty>
-% \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
-%</package>
-%<*ltxml.sty>
-DeclareOption('report','');
-DeclareOption('book','');
-DeclareOption('chapter','');
-DeclareOption('part','');
-DeclareOption('showignores','');
-DeclareOption('extrefs','');
-%</ltxml.sty>
-% \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}
-%</package>
-%<*ltxml.sty>
-RequirePackage('sref');
-RequirePackage('omtext');
-%</ltxml.sty>
-% \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}
-%</package>
-%<*ltxml.sty>
-DefEnvironment('{omgroup} OptionalKeyVals:omgroup {}',
- "<omdoc:omgroup layout='sectioning'"
- . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()"
- . "?&KeyVal(#1,'type')(type='&KeyVal(#1,'type')')()>\n"
- . "<dc:title ?#locator(stex:srcref='#locator')()>#2</dc:title>\n"
- . "#body\n"
- . "</omdoc:omgroup>");
-%</ltxml.sty>
-% \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
-% |<omgroup layout='itemize|description|enumerate'>|, where the text after the macros
-% |\item| come to be the children. If that is only text, then it is enclosed in an
-% |<omtext><CMP>|, otherwise it is left as it is. The optional argument of the |\item|
-% is transformed into the |<metadata><dc:title>| 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 {}',
- "<omdoc:omtext>"
- . "?#1(<dc:title>#1</dc:title>)()"
- . "<omdoc:CMP><omdoc:p>",
- 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}',
- "<omdoc:omgroup xml:id='#id' layout='itemize'>"
- . "#body"
- ."</omdoc:omgroup>",
- properties=>sub { beginItemize('itemize'); },
- beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
-DefEnvironment('{enumerate}',
- "<omdoc:omgroup xml:id='#id' layout='enumerate'>#body</omdoc:omgroup>",
- properties=>sub { beginItemize('enumerate'); },
- beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
-DefEnvironment('{description}',
- "<omdoc:omgroup xml:id='#id' layout='description'>"
- . "#body"
- ."</omdoc:omgroup>",
- properties=>sub { beginItemize('description'); },
- beforeDigestEnd=>sub { Digest(T_CS('\group@item@maybe@unwrap')); });
-%</ltxml.sty>
-% \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}}{}}
-%</package>
-%<*ltxml.sty>
-DefConstructor('\printindex','<omdoc:index/>');
-%</ltxml.sty>
-% \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',"<omdoc:tableofcontents level='2'/>");
-%</ltxml.sty>
-% \end{macrocode}
-% \end{macro}
-%
-% The case of the |\bibliography| command is similar
-%
-% \begin{macro}{\bibliography}
-% \begin{macrocode}
-%<*ltxml.sty>
-DefConstructor('\bibliography{}',"<omdoc:bibliography files='#1'/>");
-%</ltxml.sty>
-% \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
-%</package>
-%<*ltxml.sty>
-DefKeyVal('ignore','type','Semiverbatim');
-DefKeyVal('ignore','comment','Semiverbatim');
-DefEnvironment('{ignore} OptionalKeyVals:ignore',
- "<omdoc:ignore %&KeyVals(#1)>#body</omdoc:ignore>");
-%</ltxml.sty>
-% \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}}
-%</package>
-%<*ltxml.sty>
-DefConstructor('\STRlabel{}{}', sub {
- my($document,$label,$object)=@_;
- $document->absorb($object);
- $document->addAttribute('xml:id'=>ToString($label)) if $label; });
-%</ltxml.sty>
-% \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}
-%</package>
-%<*ltxml.sty>
-DefConstructor('\STRcopy{}',"<omdoc:ref xref='##1'/>");
-%</ltxml.sty>
-% \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}
-%</package>
-%<*ltxml.sty>
-DefConstructor('\STRsemantics[]{}{}', sub {
- my($document,$label,$ignore,$object)=@_;
- $document->absorb($object);
- $document->addAttribute('xml:id'=>ToString($label)) if $label; });
-%</ltxml.sty>#$
-% \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}
-%</package>
-%<*ltxml.sty>
-DefMacro('\STRlabeldef{}{}', "");
-%</ltxml.sty>
-% \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}}
-%</package>
-% \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; });#$
-%</ltxml.sty>
-% \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)(<omdoc:phrase ?#1(style='color:#1')()>#2</omdoc:phrase>)");
-foreach my $color(qw(black gray blue red green cyan magenta brown yellow orange)) {
- DefMacro("\\".$color.'{}', sub { omdocColorMacro($color, @_); }); }#$
-%</ltxml.sty>
-% \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','');
-%</ltxml.sty>
-% \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);
-%</ltxml.sty>
-% \end{macrocode}
-% \end{omgroup}
-%
-% \begin{omgroup}{Leftovers}
-%
-% \begin{macrocode}
-%<*package>
-\newcommand{\baseURI}[2][]{}
-%</package>
-%<*ltxml.sty>
-DefMacro('\baseURI []Semiverbatim', sub {
- AssignValue('baselocal'=>abs_path(ToString(Expand($_[1]))));
- AssignValue('baseuri'=>ToString(Expand($_[2])));});
-DefConstructor('\url Semiverbatim',"<omdoc:link href='#1'>#1</omdoc:link>");
-DefConstructor('\href Semiverbatim {}',"<omdoc:link href='#1'>#2</omdoc:link>");
-%</ltxml.sty>
-% \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}
-%<ltxml.sty|ltxml.cls>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
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\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}
-%</driver>
-% \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);
-%</ltxml>
-% \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
-%</package>
-%<*ltxml>
-DeclareOption('noindex','');
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-RequirePackage('sref');
-%</ltxml>
-% \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);
-%</ltxml>
-% \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[]',
- "<omdoc:li>?#1(<dc:title ?#locator(stex:srcref='#locator')()>#1</dc:title>)()",
- properties=>sub{ RefStepItemCounter(); });
-DefConstructor('\CMP@enumerate@item[]',
- "<omdoc:li>?#1(<dc:title ?#locator(stex:srcref='#locator')()>#1</dc:title>)()",
- properties=>sub{ RefStepItemCounter(); });
-DefConstructor('\CMP@description@item[]',
- "<omdoc:di>"
- . "?#1(<omdoc:dt>#1</omdoc:dt>)()<omdoc:dd>", # trust di and dt to autoclose
- properties=>sub{ RefStepItemCounter(); });
-DefEnvironment('{CMP@itemize}',
- "<omdoc:ul>#body</omdoc:ul>",
- properties=>sub { beginItemize('CMP@itemize'); },
- beforeDigest=>sub { Let(T_CS('\end{itemize}') =>T_CS('\end{CMP@itemize}')); });
-DefEnvironment('{CMP@enumerate}',
- "<omdoc:ol xml:id='#id'>#body</omdoc:ol>",
- properties=>sub { beginItemize('CMP@enumerate'); },
- beforeDigest=>sub { Let(T_CS('\end{enumerate}') =>T_CS('\end{CMP@enumerate}')); });
-DefEnvironment('{CMP@description}',
- "<omdoc:dl xml:id='#id'>#body</omdoc:dl>",
- 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);
-%</ltxml>
-% \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}
-%</package>
-%<*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');
-%</ltxml>
-% \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}
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{omtext} OptionalKeyVals:omtext',
- "<omdoc:omtext "
- . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')() "
- . "?&KeyVal(#1,'type')(type='&KeyVal(#1,'type')')() "
- . "?&KeyVal(#1,'for')(for='&KeyVal(#1,'for')')() "
- . "?&KeyVal(#1,'from')(from='&KeyVal(#1,'from')')()>"
- . "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
- . "<omdoc:CMP>"
- . "<omdoc:p>"
- . "?&KeyVal(#1,'start')(<omdoc:phrase type='startemph'>&KeyVal(#1,'start')</omdoc:phrase>)()"
- . "#body");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% We also make our life easier If defining an environment that is
-% turned into something that contains |<CMP>|\meta{body}|</CMP>|, 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);
-}#$
-%</ltxml>
-% \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}}{}
-%</package>
-%<*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 {}',
- "<omdoc:phrase %&KeyVals(#1)>#2</omdoc:phrase>");
-%</ltxml>
-% \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}}}
-%</package>
-%<*ltxml>
-DefConstructor('\nlex{}',
- "<omdoc:phrase type='nlex'>#1</omdoc:phrase>");
-DefConstructor('\nlcex{}',
- "<omdoc:phrase type='nlcex'>#1</omdoc:phrase>");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefConstructor('\sinlinequote [] {}',
- "<omdoc:phrase type='inlinequote'>"
- . "?#1(<dc:source ?#locator(stex:srcref='#locator')()>#1</dc:source>\n)()"
- . "#2"
- . "</omdoc:phrase>");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefEnvironment('{sblockquote} []',
- "?#1(<omdoc:omtext type='quote'>"
- . "<dc:source>#1</dc:source>"
- . "#body"
- . " </omdoc:omtext>)"
- . "(<omdoc:p class='quote'>#body</omdoc:p>)");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefConstructor('\lec{}',
- "\n<omdoc:note type='line-end-comment'>#1</omdoc:note>");
-%</ltxml>
-% \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}
-%<ltxml>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}}}
-%</ltxml|package>
-%<ltxml>');
-% \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
-%</package>
-% \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
-%</package>
-% \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
-%</package>
-%<*ltxml>
-DefConstructor('\indextoo[]{}',
- "<omdoc:idx>"
- . "<omdoc:idt>#2</omdoc:idt>"
- . "<omdoc:ide ?#1(sort-by='#1')()>"
- . "<omdoc:idp>#2</omdoc:idp>"
- . "</omdoc:ide>"
- ."</omdoc:idx>");
-DefConstructor('\indexalt[]{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>#2</omdoc:idt>"
- . "<omdoc:ide ?#1(sort-by='#1')()>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "</omdoc:ide>"
- ."</omdoc:idx>");
-%</ltxml>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*ltxml>
-DefConstructor('\twintoo[]{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>#2 #3</omdoc:idt>"
- . "<omdoc:ide ?#1(sort-by='#1')()>"
- . "<omdoc:idp>#2</omdoc:idp>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "</omdoc:ide>"
- ."</omdoc:idx>");
-DefConstructor('\twinalt[]{}{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>#2</omdoc:idt>"
- . "<omdoc:ide ?#1(sort-by='#1')()>"
- . "<omdoc:idp>#2</omdoc:idp>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "</omdoc:ide>"
- ."</omdoc:idx>");
-%</ltxml>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*ltxml>
-DefConstructor('\atwintoo[]{}{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>#2 #3</omdoc:idt>"
- . "<omdoc:ide ?#1(sort-by='#1')()>"
- . "<omdoc:idp>#2</omdoc:idp>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "<omdoc:idp>#4</omdoc:idp>"
- . "</omdoc:ide>"
- ."</omdoc:idx>");
-
-DefConstructor('\atwinalt[]{}{}{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>#2</omdoc:idt>"
- . "<omdoc:ide ?#1(sort-by='#1')()>"
- . "<omdoc:idp>#2</omdoc:idp>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "<omdoc:idp>#4</omdoc:idp>"
- . "</omdoc:ide>"
- ."</omdoc:idx>");
-%</ltxml>
-% \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);
-%</ltxml>#$
-% \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}
-%<package>\def\omspace#1{\hspace*{#1}}
-%<*ltxml>
-DefConstructor('\omspace{}','');
-DefConstructor('\emph{}',"<omdoc:phrase class='emphasis'>#1</omdoc:phrase>");
-DefConstructor('\em',"<omdoc:phrase class='emphasis'>");
-DefConstructor('\texttt{}',"<omdoc:phrase class='code'>#1</omdoc:phrase>");
-DefConstructor('\tt',"<omdoc:phrase class='code'>");
-DefConstructor('\textbf{}',"<omdoc:phrase class='bold'>#1</omdoc:phrase>");
-DefConstructor('\bf',"<omdoc:phrase class='bold'>");
-DefConstructor('\textsf{}',"<omdoc:phrase class='sans-serif'>#1</omdoc:phrase>");
-DefConstructor('\sf',"<omdoc:phrase class='sans-serif'>");
-DefConstructor('\textsl{}',"<omdoc:phrase class='slanted'>#1</omdoc:phrase>");
-DefConstructor('\sl',"<omdoc:phrase class='slanted'>");
-DefConstructor('\textit{}',"<omdoc:phrase class='italic'>#1</omdoc:phrase>");
-DefConstructor('\it',"<omdoc:phrase class='italic'>");
-Tag('omdoc:phrase', autoClose=>1);
-DefEnvironment('{center}','#body');
-DefEnvironment('{flushleft}','#body');
-DefEnvironment('{flushright}','#body');
-DefEnvironment('{minipage}[]{}','#body');
-DefEnvironment('{quote}',
- "<omdoc:phrase type='quote' style='display:block'>"
- . "#body"
- ."</omdoc:phrase>");
-DefEnvironment('{quotation}',
- "<omdoc:phrase type='quote' style='display:block'>
- . "#body"
- ."</omdoc:phrase>");
-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[]{}',
- "<omdoc:note type='foot' ?#1(mark='#1')>#2</omdoc:note>");
-DefConstructor('\footnotemark[]',"");
-DefConstructor('\footnotetext[]{}',
- "<omdoc:note class='foot' ?#1(mark='#1')>#2</omdoc:note>");
-DefConstructor('\sf', '');
-DefConstructor('\sc', '');
-%</ltxml>
-% \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);
-%</ltxml>
-% \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);
-%</ltxml>
-% \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);
-}
-%</ltxml>#$
-% \end{macrocode}
-% \end{omgroup}
-%
-% \begin{omgroup}{Finale}
-%
-% We need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\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}
-%</driver>
-% \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;
-%</ltxml>
-% \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
-%</package>
-% \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}
-%<package>\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}
-%</package>
-%<*ltxml>
-DefMacro('\iprec','1000000');
-DefMacro('\niprec','-1000000');
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-%</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}
-%</package>
-% \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}}
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\prefix[]{}{}','\@prefix[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}');
-DefConstructor('\@prefix OptionalKeyVals:mi {}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . "argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "#2"
- . "<m:mrow>"
- . "<m:mo fence='true'>(</m:mo>"
- . "#3"
- . "<m:mo fence='true'>)</m:mo>"
- . "</m:mrow>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- 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]); });
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefMacro('\postfix []{}{}','\@postfix[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}');
-DefConstructor('\@postfix OptionalKeyVals:mi {}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- ."argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mrow>"
- . "<m:mo fence='true'>(</m:mo>"
- . "#3"
- . "<m:mo fence='true'>)</m:mo>"
- . "</m:mrow>"
- . "#2"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- 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]); });
-%</ltxml>
-% \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}}
-%</package>
-%<*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;
-}#$
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\mixfixi[]{}{}{}',
- '\@mixfixi[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'
- . '{$\crossrefOp[fun]{#4}$}');
-DefConstructor('\@mixfixi OptionalKeyVals:mi {}{}{}',
- "<omdoc:rendering"
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')')"
- . " argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2 #3 #4"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\mixfixa[]{}{}{}{}',
- '\@mixfixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'
- . '{$\crossrefOp[fun]{#4}$}'
- . '{$\crossrefOp[fun]{#5}$}');
-DefConstructor('\@mixfixa OptionalKeyVals:mi {}{}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')')>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2"
- . "<omdoc:iterate name='args' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')>"
- . "<omdoc:separator>#5</omdoc:separator>"
- . "<omdoc:render name='arg' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')/>"
- . "</omdoc:iterate>"
- . "#4"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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}}
-%</package>
-%<*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');
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\mixfixii[]{}{}{}{}{}',
- '\@mixfixii[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'
- . '{$\crossrefOp[fun]{#4}$}{$#5 $}'
- . '{$\crossrefOp[fun]{#6}$}');
-DefConstructor('\@mixfixii OptionalKeyVals:mi {}{}{}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . "argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2 #3 #4 #5 #6"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\mixfixia[]{}{}{}{}{}{}',
- '\@mixfixia[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'
- . '{$\crossrefOp[fun]{#4}$}{$#5 $}'
- . '{$\crossrefOp[fun]{#6}$}'
- . '{$\crossrefOp[fun]{#7}$}');
-DefConstructor('\@mixfixia OptionalKeyVals:mi {}{}{}{}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . " argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2 #3 #4"
- . "<omdoc:iterate name='args' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')>"
- . "<omdoc:separator>#7</omdoc:separator>"
- . "<omdoc:render name='arg' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')/>"
- . "</omdoc:iterate>"
- . "#6"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\mixfixai[]{}{}{}{}{}{}',
- '\@mixfixai[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'
- .'{$\crossrefOp[fun]{#4}$}{$#5 $}'
- .'{$\crossrefOp[fun]{#6}$}'
- .'{$\crossrefOp[fun]{#7}$}');
-DefConstructor('\@mixfixai OptionalKeyVals:mi {}{}{}{}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . " argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2"
- . "<omdoc:iterate name='args' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')>"
- . "<omdoc:separator>#7</omdoc:separator>"
- . "<omdoc:render name='arg' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')/>"
- . "</omdoc:iterate>"
- . "#4 #5 #6"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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}}}
-%</package>
-%<*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');
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\mixfixiii[]{}{}{}{}{}{}{}',
- '\@mixfixiii[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}'
- . '{$\crossrefOp[fun]{#4}$}{$#5 $}'
- . '{$\crossrefOp[fun]{#6}$}{$#7 $}'
- . '{$\crossrefOp[fun]{#8}$}');
-DefConstructor('\@mixfixiii OptionalKeyVals:mi {}{}{}{}{}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . " argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2 #3 #4 #5 #6 #7 #8"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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}
-%</package>
-%<*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 {}{}{}{}{}{}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . " argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2"
- . "<omdoc:iterate name='args' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')>"
- . "<omdoc:separator>#9</omdoc:separator>"
- . "<omdoc:render name='arg' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')/>"
- . "</omdoc:iterate>"
- . "#4 #5 #6 #7 #8"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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}
-%</package>
-%<*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 {}{}{}{}{}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . " argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2 #3 #4"
- . "<omdoc:iterate name='args' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')>"
- . "<omdoc:separator>#9</omdoc:separator>"
- . "<omdoc:render name='arg' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')/>"
- . "</omdoc:iterate>"
- . "#6 #7 #8"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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}
-%</package>
-%<*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 {}{}{}{}{}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . " argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mo egroup='fence' fence='true'>(</m:mo>"
- . "#2 #3 #4 #5 #6"
- . "<omdoc:iterate name='args' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')>"
- . "<omdoc:separator>#9</omdoc:separator>"
- . "<omdoc:render name='arg' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')/>"
- . "</omdoc:iterate>"
- . "#8"
- . "<m:mo egroup='fence' fence='true'>)</m:mo>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- afterDigest=>sub { applyPrecedencePreferences(@_);},
- properties=>sub { getSymmdefProperties($_[1]); });#$
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\prefixa[]{}{}{}','\@prefixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}{$#4 $}');
-DefConstructor('\@prefixa OptionalKeyVals:mi {}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- . "argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "#2"
- . "<m:mrow>"
- . "<m:mo fence='true'>(</m:mo>"
- . "<omdoc:iterate name='args' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')>"
- . "<omdoc:separator>#4</omdoc:separator>"
- . "<omdoc:render name='arg' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')/>"
- . "</omdoc:iterate>"
- . "<m:mo fence='true'>)</m:mo>"
- . "</m:mrow>"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- 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]); });
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefMacro('\postfixa []{}{}{}','\@postfixa[#1]{$\crossrefOp[fun]{#2}$}{$#3 $}{$#4 $}');
-DefConstructor('\@postfixa OptionalKeyVals:mi {}{}{}',
- "<omdoc:rendering "
- . "?&defined(&KeyVal(#1,'p'))(precedence='&KeyVal(#1,'p')') "
- ."argprec='&argument_precedence(#1)'>"
- . "<m:mrow>"
- . "<m:mrow>"
- . "<m:mo fence='true'>(</m:mo>"
- . "<omdoc:iterate name='args' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')>"
- . "<omdoc:separator>#4</omdoc:separator>"
- . "<omdoc:render name='arg' "
- . "?&defined(&KeyVal(#1,'pi'))(precedence='&KeyVal(#1,'pi')')/>"
- . "</omdoc:iterate>"
- . "<m:mo fence='true'>)</m:mo>"
- . "</m:mrow>"
- . "#2"
- . "</m:mrow>"
- ."</omdoc:rendering>",
- 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]); });
-%</ltxml>
-% \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}
-%<ltxml>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}}
-%</package|ltxml>
-%<ltxml>');
-% \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}}
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-%</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}}}}
-%</package>
-%<*ltxml>
-%</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}}
-%</package>
-%<*ltxml>
-%</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}
-%</package>
-%<*ltxml>
-%</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}
-%</package>
-%<*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[]{}',
- "<ltx:XMWrap role='ID' xml:id='&cvar_id(#1)'>#2</ltx:XMWrap>",
- requireMath=>1);
-DefConstructor('\crossrefOp[]{}',
- "?#2(<ltx:XMApp role='CROSSREFOP'>"
- . "<ltx:XMTok role='CROSSREFOP' cr='?#1(#1)(fun)'/>"
- . "<ltx:XMWrap>#2</ltx:XMWrap>"
- ."</ltx:XMApp>)()",
- requireMath=>1);
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\vnref}
-% \begin{macrocode}
-%<*package>
-\def\vnref#1{\csname MOD@name@#1\endcsname}
-%</package>
-%<*ltxml>
-DefMacro('\vnref{}','\@XMRef{cvar.#1}');
-%</ltxml>
-% \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}
-%<ltxml>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}}}
-%</package|ltxml>
-%<ltxml>');
-% \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}
-%<package>\newcommand{\arrayline}[2]{#1#2\\}
-%<*ltxml>
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\arraycell}
-% \begin{macrocode}
-%<package>\newcommand{\arraycell}[1]{#1&}
-%<*ltxml>
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Finale}
-%
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\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}
-%</driver>
-% \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
-%</package>
-% \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
-');
-%</ltxml>
-% \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}
-%</package>
-% \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');
-%</ltxml>
-% \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#");
-%</ltxml>
-% \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
-%</package>
-% \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',
- "<omdoc:exercise ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()"
- . "?#locator(stex:srcref='#locator')()>"
- . "?&KeyVal(#1,'title')(<dc:title ?#locator(stex:srcref='#locator')()>&KeyVal(#1,'title')</dc:title>)()"
- . "?&KeyVal(#1,'min')(<omdoc:meta property='prob:solvedinminutes' prob:dummy='for the namespace' "
- . "?#locator(stex:srcref='#locator')()>&KeyVal(#1,'min')</omdoc:meta>)()"
- . "?&KeyVal(#1,'pts')(<omdoc:meta property='prob:points' prob:dummy='for the namespace' "
- . "?#locator(stex:srcref='#locator')()>&KeyVal(#1,'pts')</omdoc:meta>)()"
- . "<omdoc:CMP ?#locator(stex:srcref='#locator')()><omdoc:p>#body"
- ."</omdoc:exercise>\n");
-%</ltxml>
-% \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}}}
-%</package>
-% \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{}
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-DefKeyVal('soln','id','Semiverbatim');
-DefKeyVal('soln','height','Semiverbatim');
-DefKeyVal('soln','for','Semiverbatim');
-DefCMPEnvironment('{solution} OptionalKeyVals:soln',
- "<omdoc:solution ?&KeyVals(#1,'for')(for='&KeyVal(#1,'for')')() ?#locator(stex:srcref='#locator')()>"
- . "#body"
- . "</omdoc:solution>");
-%</ltxml>
-% \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
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{exnote}',
- "<omdoc:hint ?#locator(stex:srcref='#locator')()>"
- . "<omdoc:CMP ?#locator(stex:srcref='#locator')()>"
- . "<omdoc:p>#body"
- ."</omdoc:hint>");
-DefCMPEnvironment('{hint}',
- "<omdoc:hint ?#locator(stex:srcref='#locator')()>"
- . "<omdoc:CMP ?#locator(stex:srcref='#locator')()>"
- . "<omdoc:p>#body"
- ."</omdoc:hint>");
-DefConstructor('\pts{}',"");
-DefConstructor('\min{}',"");
-%</ltxml>
-% \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
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-DefKeyVal('prob','pts','Semiverbatim');
-DefKeyVal('prob','min','Semiverbatim');
-DefKeyVal('prob','title','Semiverbatim');
-DefConstructor('\includeproblem OptionalKeyVals:prob Semiverbatim',
- "<omdoc:ref type='cite' xref='#2' ?#locator(stex:srcref='#locator')()>"
- . "?&KeyVal(#1,'title')(<dc:title ?#locator(stex:srcref='#locator')()>&KeyVal(#1,'title')</dc:title>)()"
- . "?&KeyVal(#1,'min')(<omdoc:meta property='prob:solvedinminutes' prob:dummy='for the namespace' "
- . "?#locator(stex:srcref='#locator')()>&KeyVal(#1,'min')</omdoc:meta>)()"
- . "?&KeyVal(#1,'pts')(<omdoc:meta property='prob:points' prob:dummy='for the namespace' "
- . "?#locator(stex:srcref='#locator')()>&KeyVal(#1,'pts')</omdoc:meta>)()"
- ."</omdoc:ref>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%<*ltxml>
-Tag('omdoc:exercise',afterOpen=>\&numberIt);
-Tag('omdoc:solution',afterOpen=>\&numberIt);
-Tag('omdoc:hint',afterOpen=>\&numberIt);
-%</ltxml>
-% \end{macrocode}
-%
-% \subsection{Reporting Metadata}
-%
-% \begin{macrocode}
-%<*package>
-\def\pts#1{\ifpts\marginpar{#1 pt}\fi}
-\def\min#1{\ifmin\marginpar{#1 min}\fi}
-%</package>
-%<*ltxml>
-%</ltxml>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*package>
-\AtEndDocument{\ifpts\message{Total: \arabic{pts} points}\fi
-\ifmin\message{Total: \arabic{min} minutes}\fi}
-%</package>
-%<*ltxml>
-%</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}
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{Finale}
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\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}
-%</driver>
-% \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}
-%</package>
-%<*ltxml>
-package LaTeXML::Package::Pool;
-use strict;
-use LaTeXML::Package;
-%</ltxml>
-% \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#");
-%</ltxml>
-% \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}{}
-%</package>
-%<*ltxml>
-DefEnvironment('{requirements} OptionalKeyVals:reqs',
- "<omdoc:omgroup type='itemize'>#body</omdoc:omgroup>");
-%</ltxml>
-% \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: <text>|.
-% \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}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{requirement} OptionalKeyVals:req',
- "<omdoc:omtext ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')() r:dummy='to ensure the namespace'>"
- . "<omdoc:meta property='texttype' content='r:requirement'/>"
- . "?&KeyVal(#1,'refs')(<omdoc:link rel='r:dependsOn' href='#&KeyVal(#1,'refs')'/>)()"
- . "#body"
- ."</omdoc:omtext>");
-DefConstructor('\reqnote{}',
- "<omdoc:note type='requirement'>#1</omdoc:note>");
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefEnvironment('{reqtable} OptionalKeyVals:reqs',
- "<omdoc:omgroup type='itemize'>#body</omdoc:omgroup>");
-%</ltxml>
-% \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 &#2&#3&\req@do@refs\req@refs{,}\tabularnewline\hline}
-%</package>
-%<*ltxml>
-DefCMPConstructor('\reqline OptionalKeyVals:req{}{}',
- "<omdoc:omtext type='requirement'><omdoc:CMP>#2</omdoc:CMP></omdoc:omtext>"
- ."<omdoc:omtext type='note'><omdoc:CMP>#3</omdoc:CMP></omdoc:omtext>");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefConstructor('\importreqs {}',"<omdoc:imports from='#1'/>");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefMacro('\rinput','\input');
-%</ltxml>
-% \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}
-%</package>
-% \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
-%</package>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*package>
-\def\req@dep@write#1#2{\if@deps\protected@write\req@depfile{}{#1 #2}\fi}
-%</package>
-% \end{macrocode}
-% \subsection{Finale}
-%
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\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}
-%</driver>
-% \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');
-%</ltxml>
-% \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
-%</package>
-%<*ltxml>
-DeclareOption('showmeta','');
-%</ltxml>
-% \end{macrocode}
-%
-% Then we make sure that the |sref| package is loaded~\ctancite{Kohlhase:sref}.
-% \begin{macrocode}
-%<*package>
-\RequirePackage{sref}
-%</package>
-% \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}
-%</package>
-% \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}
-%<package>\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}}
-%</package>
-%<ltxml>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}}
-%</package>
-%<*ltxml>
-DefConstructor('\spfsketch OptionalKeyVals:pf{}',
- "<omdoc:proof "
- . "?&defined(&KeyVal(#1,'id'))(xml:id='&KeyVal(#1,'id')')()>\n"
- . "?#2(<omdoc:omtext><omdoc:CMP><omdoc:p>#2\n)()"
- . "</omdoc:proof>\n");
-DefConstructor('\sProofEndSymbol {}','');
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{sproof} OptionalKeyVals:pf{}',
- "<omdoc:proof "
- . "?&KeyVal(#1,'for')(for='&hash_wrapper(&KeyVal(#1,'for'))')()"
- . "?&defined(&KeyVal(#1,'id'))(xml:id='&KeyVal(#1,'id')')()>\n"
- . "?#2(<omdoc:omtext>"
- . "<omdoc:CMP><omdoc:p>#2</omdoc:CMP>"
- . "</omdoc:omtext>\n)()"
- . "#body"
- . "</omdoc:proof>\n");
-DefMacro('\sProof','\sproof');
-DefMacro('\endsProof','\endsproof');
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefCMPConstructor('\spfidea OptionalKeyVals:pf {}',
- "<omdoc:proof "
- . "?&defined(&KeyVal(#1,'id'))(xml:id='&KeyVal(#1,'id')')()"
- . "?&KeyVal(#1,'for')(for='&hash_wrapper(&KeyVal(#1,'for'))')()>\n"
- . "<omdoc:omtext><omdoc:CMP><omdoc:p>#2</omdoc:omtext>\n"
- . "</omdoc:proof>\n");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{spfstep} OptionalKeyVals:pf',
- "<omdoc:derive "
- . "?&defined(&KeyVal(#1,'id'))(xml:id='&KeyVal(#1,'id')')()>"
- . "<omdoc:CMP><omdoc:p>#body</omdoc:derive>\n",
- beforeConstruct=>sub {
- $_[0]->maybeCloseElement('omdoc:p');
- $_[0]->maybeCloseElement('omdoc:CMP');
- });
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{sproofcomment} OptionalKeyVals:pf',
- "<omdoc:omtext "
- . "?&defined(&KeyVal(#1,'id'))(xml:id='&KeyVal(#1,'id')')()>"
- . "<omdoc:CMP><omdoc:p>#body</omdoc:CMP>"
- . "</omdoc:omtext>");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefEnvironment('{spfcases} OptionalKeyVals:pf {}',
- "<omdoc:derive "
- . "?&defined(&KeyVal(#1,'id'))(xml:id='&KeyVal(#1,'id')')()>\n"
- . "<omdoc:CMP><omdoc:p>#2</omdoc:CMP>\n"
- . "<omdoc:method xref='#proof-by-cases'>#body</omdoc:method>"
- . "</omdoc:derive>\n");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefEnvironment('{spfcase} OptionalKeyVals:pf{}',
- "<omdoc:proof "
- . "?&defined(&KeyVal(#1,'id'))(xml:id='&KeyVal(#1,'id')')()>\n"
- . "?#2(<omdoc:omtext>"
- . "<omdoc:CMP><omdoc:p>#2</omdoc:CMP>"
- . "</omdoc:omtext>\n)()"
- . "#body"
- . "</omdoc:proof>\n");
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefEnvironment('{subproof}[]',
- "<omdoc:derive>"
- . "?#1(<omdoc:CMP><omdoc:p>#1</omdoc:CMP>)()"
- . "<omdoc:method>"
- . "<omdoc:proof>\n #body\n</omdoc:proof>"
- . "</omdoc:method>"
- ."</omdoc:derive>");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefKeyVal('just','id','Semiverbatim');
-DefKeyVal('just','method','Semiverbatim');
-DefKeyVal('just','premises','Semiverbatim');
-DefKeyVal('just','args','Semiverbatim');
-%</ltxml>
-% \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][]{}{}
-%</package>
-%<*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; });
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{macro}{\premise}
-% \begin{macrocode}
-%<*package>
-\newcommand{\premise}[2][]{#2}
-%</package>
-%<*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[]',
- "<omdoc:premise xref='#1'/>");
-%</ltxml>
-% \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}
-%</package>
-%<*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; }
- }
- });#$
-%</ltxml>
-% \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);
-%</ltxml>
-% \end{macrocode}
-%
-% \section{Finale}
-%
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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]
-%</package>
-%<*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}
-%</driver>
-% \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;
-%</ltxml>
-% \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
-%</package>
-%<*ltxml>
-DeclareOption('extrefs','');
-%</ltxml>
-% \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}
-%</package>
-%<ltxml>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}}}
-%</package>
-%<*ltxml>
-DefConstructor('\sref[]{}',
- "Section <omdoc:ref type='cite' xref='#2'/>");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefConstructor('\srefs[]{}',
- "Section <omdoc:ref type='cite' xref='#2'/>");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefConstructor('\srefl[]{}',
- "Section <omdoc:ref type='cite' xref='#2'/>");
-%</ltxml>
-% \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}}}
-%</package>
-%<*ltxml>
-DefConstructor('\spageref[]{}',
- "Section <omdoc:ref type='cite' xref='#2'/>");
-%</ltxml>
-% \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}}}
-%</package>
-% \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}
-%</package>
-%<ltxml>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}}
-%</package>
-% \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}
-%</package>
-% \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}}}
-%</package>
-% \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}}
-%</package>
-% \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}}}}}
-%</package>
-% \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}}}
-%</package>
-% \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
-%</package>
-%<*ltxml>
-DefConstructor('\extref[]{}{}',
- "<omdoc:ref type='cite' xref='#2@#3'/>");
-DefConstructor('\theextref','');
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\extrefstyle{}{}',"");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefConstructor('\inputrefs{}{}','');
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefEnvironment('{sequation} OptionalKeyVals',
- "<ltx:equation "
- . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')' "
- . "refnum='#refnum')(xml:id='#id')>"
- . "<ltx:Math mode='display'>"
- . "<ltx:XMath>#body</ltx:XMath>"
- . "</ltx:Math>"
- . "</ltx:equation>",
- mode=>'display_math',
- properties=> sub { RefStepCounter('equation') },
- locked=>1);
-%</ltxml>
-% \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*}}
-%</package>
-%<*ltxml>
-DefMacro('\seqnarray OptionalKeyVals','\begin{eqnarray*}');
-DefMacro('\endseqnarray','\end{eqnarray*}');
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-%
-% \subsection{Finale}\label{sec:common}
-%
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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
-%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\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}
-%</driver>
-% \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
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-# -*- CPERL -*-
-package LaTeXML::Package::Pool;
-use strict;
-use LaTeXML::Package;
-RequirePackage('omtext');
-RequirePackage('modules');
-%</ltxml>
-% \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,@_));}#$
-%</ltxml>
-% \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;
-}
-%</ltxml>
-% \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"||'';
-}
-%</ltxml>
-% \end{macrocode}
-%
-% \subsection{Statements}\label{sec:impl:statements}
-%
-% \begin{macro}{\STpresent}
-% \begin{macrocode}
-%<*package>
-\providecommand\STpresent[1]{#1}
-%</package>
-% \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}}
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{assertion} OptionalKeyVals:omtext',
- "<omdoc:assertion "
- . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')() "
- . "?&KeyVal(#1,'theory')(theory='&KeyVal(#1,'theory')')() "
- . "type='&lowcase(&KeyVal(#1,'type'))'>"
- . "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
- . "<omdoc:CMP><omdoc:p>#body"
- ."</omdoc:assertion>\n");
-%</ltxml>
-% \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}
-%</package>
-% \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}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{example} OptionalKeyVals:omtext',
- "<omdoc:example "
- . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')() "
- . "?&KeyVal(#1,'for')(for='&hash_wrapper(&KeyVal(#1,'for'))')()>"
- . "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
- . "<omdoc:CMP><omdoc:p>#body"
- . "</omdoc:example>\n");
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{axiom} OptionalKeyVals:omtext',
- "<omdoc:axiom "
- . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')()>"
- . "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
- . "<omdoc:CMP><omdoc:p>#body"
- . "</omdoc:axiom>\n");
-%</ltxml>
-% \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}{}
-%</package>
-%<*ltxml>
-DefEnvironment('{symboldec} OptionalKeyVals:symboldec',
- "<omdoc:symbol "
- . " ?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id')')"
- . "(xml:id='&makeNCName(&KeyVal(#1,'name')).def.sym')"
- . "name='&KeyVal(#1,'name')'>"
- . "<dc:description>#body</dc:description>"
- ."</omdoc:symbol>\n");
-%</ltxml>
-% \end{macrocode}
-% \end{environment}
-%
-% \begin{macro}{\symtype}
-% \begin{macrocode}
-%<*package>
-\newcommand{\symtype}[2]{Type (#1): #2}
-%</package>
-%<*ltxml>
-DefConstructor('\symtype{}{}',
- "<omdoc:type system='#1'>#2</omdoc:type>");
-%</ltxml>
-% \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}
-%</package>
-%<*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; });
-%</ltxml>
-% \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}
-%</package>
-%<*ltxml>
-DefCMPEnvironment('{notation} OptionalKeyVals:omtext',
- "<omdoc:definition "
- . "?&KeyVal(#1,'id')(xml:id='&KeyVal(#1,'id').not')()"
- . "?&KeyVal(#1,'for')(for='&simple_wrapper(&KeyVal(#1,'for'))')()>"
- . "?&KeyVal(#1,'title')(<dc:title>&KeyVal(#1,'title')</dc:title>)()"
- . "<omdoc:CMP><omdoc:p>#body"
- . "</omdoc:definition>\n");
-DefConstructor('\notatiendum OptionalKeyVals:notation {}',
- "<omdoc:phrase type='notation'>#2</omdoc:phrase>");
-%</ltxml>
-% \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}
-%</package>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\definiendum [] {}',
- "<omdoc:term role='definiendum' name='#name' cd='#theory'>#2</omdoc:term>",
- 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; });#$
-%</ltxml>
-% \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}}
-%</package>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\defin[]{}',
- "<omdoc:idx>"
- . "<omdoc:idt>"
- . "<omdoc:term role='definiendum' name='?#1(#1)(#2)' cd='#theory'>#2</omdoc:term>"
- . "</omdoc:idt>"
- . "<omdoc:ide index='default'><omdoc:idp>#2</omdoc:idp></omdoc:ide>"
- ."</omdoc:idx>",
- 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');
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\definalt}
-% \begin{macrocode}
-%<*package>
-\newcommand{\definalt}[3][]{\definiendum[#1]{#2}\omdoc@index[#1]{#3}}
-%</package>
-%<*ltxml>
-DefConstructor('\definalt[]{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>"
- . "<omdoc:term role='definiendum' name='?#1(#1)(#3)' cd='#theory'>#2</omdoc:term>"
- . "</omdoc:idt>"
- . "<omdoc:ide index='default'><omdoc:idp>#3</omdoc:idp></omdoc:ide>"
- ."</omdoc:idx>",
- 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');
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\twindef[]{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>"
- . "<omdoc:term role='definiendum' name='?#1(#1)(&dashed(#2,#3))' cd='#theory'>"
- . "#2 #3"
- . "</omdoc:term>"
- . "</omdoc:idt>"
- . "<omdoc:ide index='default'>"
- . "<omdoc:idp>#2</omdoc:idp>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "</omdoc:ide>"
- ."</omdoc:idx>",
- 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');#$
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\twindefalt}
-% \begin{macrocode}
-%<*package>
-\newcommand{\twindefalt}[4][]{\definiendum[#1]{#2}\@twin[#1]{#3}{#4}}
-%</package>
-%<*ltxml>
-DefConstructor('\twindefalt[]{}{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>"
- . "<omdoc:term role='definiendum' name='?#1(#1)(&dashed(#3,#4))' cd='#theory'>"
- . "#2"
- . "</omdoc:term>"
- . "</omdoc:idt>"
- . "<omdoc:ide index='default'>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "<omdoc:idp>#4</omdoc:idp>"
- . "</omdoc:ide>"
- ."</omdoc:idx>",
- 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');#$
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\atwindef[]{}{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>"
- . "<omdoc:term role='definiendum' cd='#theory' name='?#1(#1)(&dashed(#2,#3,#4))'>#2 #3 #4</omdoc:term>"
- . "</omdoc:idt>"
- . "<omdoc:ide index='default'>"
- . "<omdoc:idp>#2</omdoc:idp>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "<omdoc:idp>#4</omdoc:idp>"
- . "</omdoc:ide>"
- . "</omdoc:idx>",
- 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');
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\atwindefalt}
-% \begin{macrocode}
-%<*package>
-\newcommand{\atwindefalt}[5][]{\definiendum[#1]{#2}\@atwin[#1]{#3}{#4}{#5}}
-%</package>
-%<*ltxml>
-DefConstructor('\atwindefalt[]{}{}{}{}',
- "<omdoc:idx>"
- . "<omdoc:idt>"
- . "<omdoc:term role='definiendum' cd='#theory' name='?#1(#1)(&dashed(#3,#4,#5))'>#2</omdoc:term>"
- . "</omdoc:idt>"
- . "<omdoc:ide index='default'>"
- . "<omdoc:idp>#3</omdoc:idp>"
- . "<omdoc:idp>#4</omdoc:idp>"
- . "<omdoc:idp>#5</omdoc:idp>"
- . "</omdoc:ide>"
- . "</omdoc:idx>",
- 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');
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\inlineex}
-% \begin{macrocode}
-%<*package>
-\newcommand{\inlineex}[2][]{\metasetkeys{omtext}{#1}\sref@target\sref@label@id{here}#2}
-%</package>
-%<*ltxml>
-DefConstructor('\inlineex OptionalKeyVals:omtext {}',
- "<omdoc:phrase type='example'>#2</omdoc:phrase>");
-%</ltxml>
-% \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}
-%</package>
-%<*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; });
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\termref OptionalKeyVals:termref {}',
- "<omdoc:term cd='&KeyVal(#1,'cd')' name='&KeyVal(#1,'name')'>"
- . "#2"
- ."</omdoc:term>");
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\twinref OptionalKeyVals:termref {}{}',
- "<omdoc:term cd='&KeyVal(#1,'cd')' name='&KeyVal(#1,'name')'>"
- . "#2"
- ."</omdoc:term>");
-%</ltxml>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\atwinref}
-% \begin{macrocode}
-%<*package>
-\newcommand{\atwinref}[4][]{\termref@set{#1}{#2-#3-#4}\st@termref{#2 #3 #4}}
-%</package>
-%<*ltxml>
-DefConstructor('\atwinref OptionalKeyVals:termref {}{}{}',
- "<omdoc:term cd='&KeyVal(#1,'cd')' name='&KeyVal(#1,'name')'>"
- . "#2"
- ."</omdoc:term>");
-%</ltxml>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\termin OptionalKeyVals:term {}',
- "<omdoc:idx>"
- . "<omdoc:idt>"
- . "<omdoc:term cd='&KeyVal(#1,'cd')' name='&KeyVal(#1,'name')'>#2</omdoc:term>"
- . "</omdoc:idt>"
- . "<omdoc:ide index='default'><omdoc:idp>#2</omdoc:idp></omdoc:ide>"
- . "</omdoc:idx>");
-%</ltxml>
-% \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}}}
-%</package>
-% \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}}
-%</package>
-%<*ltxml>
-DefConstructor('\symref{}{}',
- "<omdoc:term cd='&LookupValue('symdef.#1.cd')' name='&LookupValue('symdef.#1.name')'>"
- . "#2"
- ."</omdoc:term>");
-%</ltxml>
-% \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);
-%</ltxml>
-% \end{macrocode}
-%
-% \subsection{Finale}
-%
-% Finally, we need to terminate the file with a success mark for perl.
-% \begin{macrocode}
-%<ltxml>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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:ltx="http://dlmf.nist.gov/LaTeXML"
- xmlns='http://cnx.rice.edu/cnxml'
- xmlns:m='http://www.w3.org/1998/Math/MathML'
- xmlns:md="http://cnx.rice.edu/mdml/0.4"
- xmlns:bib="http://bibtexml.sf.net/"
- exclude-result-prefixes="ltx md bib"
- version="1.0">
-
- <xsl:output method="xml" indent="yes"
- doctype-public="-//CNX//DTD CNXML 0.5 plus MathML//EN"
- doctype-system="http://cnx.rice.edu/cnxml/0.5/DTD/cnxml_mathml.dtd"/>
-
- <xsl:strip-space elements="*"/>
-
-<!-- if there is no other template, give a warning -->
-<!-- <xsl:template match="*">
- <xsl:message>Cannot deal with element <xsl:value-of select="local-name()"/> yet! (id=<xsl:value-of select="@xml:id"/>)</xsl:message>
- <xsl:comment>elided element <xsl:value-of select="local-name()"/></xsl:comment>
- </xsl:template> -->
-
- <xsl:template match="*">
- <xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
- </xsl:template>
-
- <xsl:template match="ltx:Math">
- <xsl:copy-of select="m:math"/>
- </xsl:template>
-
-<xsl:template match="ltx:*">
- <xsl:element name="{local-name()}">
- <xsl:copy-of select="@*"/><xsl:apply-templates/>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="ltx:tabular">
- <table>
- <xsl:copy-of select="@*"/><xsl:apply-templates/>
- </table>
-</xsl:template>
-
-</xsl:stylesheet>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- this style sheet transforms the tex.xml file to OMDoc -->
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns="http://omdoc.org/ns"
- xmlns:omdoc="http://omdoc.org/ns"
- xmlns:mcd="http://www.w3.org/ns/mathml-cd"
- xmlns:ltx="http://dlmf.nist.gov/LaTeXML"
- xmlns:stex="http://kwarc.info/ns/sTeX"
- xmlns:m="http://www.w3.org/1998/Math/MathML"
- xmlns:om="http://www.openmath.org/OpenMath"
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:str="http://exslt.org/strings"
- extension-element-prefixes="str"
- exclude-result-prefixes="xsl omdoc ltx m om dc">
-
-<xsl:output method="xml" indent="yes" cdata-section-elements="data"/>
-<xsl:strip-space elements="*"/>
-
-<!-- these parameters set the paths to the special latexml cds. The default is made so that it works for GenCS -->
-<xsl:param name="latexmlcds" select="'../../../slides/extcds/stex'"/>
-<xsl:param name="omcds" select="'../../../slides/extcds/omstd'"/>
-
-<xsl:template match="/">
- <xsl:comment>This OMDoc document is generated from an sTeX-encoded one via LaTeXML, you may want to reconsider editing it.</xsl:comment>
- <xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="omdoc:omdoc">
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <xsl:apply-templates/>
- <xsl:comment>The data elements</xsl:comment>
- <xsl:apply-templates mode="extract-data"/>
- </xsl:copy>
-</xsl:template>
-
-<xsl:template match="*">
- <xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
-</xsl:template>
-
-<xsl:template match="ltx:ERROR"/>
-<xsl:template match="*|text()" mode="extract-data">
- <xsl:apply-templates mode="extract-data"/>
-</xsl:template>
-
-<xsl:template match="ltx:Math">
- <xsl:apply-templates select="om:OMOBJ"/>
-</xsl:template>
-
-<!-- we directly access the content of titles -->
-<xsl:template match="ltx:title"/>
-<xsl:template match="ltx:chapter|ltx:part|ltx:section|ltx:subsection|ltx:subsubsection|ltx:paragraph">
- <omgroup layout="sectioning">
- <xsl:copy-of select="@*"/>
- <metadata>
- <dc:title><xsl:apply-templates select="ltx:title/*|ltx:title/text()"/></dc:title>
- </metadata>
- <xsl:apply-templates/>
- </omgroup>
-</xsl:template>
-
-<xsl:template match="ltx:p">
- <p><xsl:copy-of select="@*"/><xsl:apply-templates/></p>
-</xsl:template>
-
-<xsl:template match="ltx:para">
- <omtext><xsl:copy-of select="@*"/><CMP><xsl:apply-templates/></CMP></omtext>
-</xsl:template>
-
-<xsl:template match="ltx:text">
- <phrase>
- <xsl:copy-of select="@*"/>
- <xsl:if test="@font">
- <xsl:attribute name="class"><xsl:value-of select="@font"/></xsl:attribute>
- </xsl:if>
- <xsl:apply-templates/>
- </phrase>
-</xsl:template>
-
-
-<xsl:template match="ltx:graphics|ltx:verbatim">
- <omlet action="display" data="#{generate-id()}" show="embed" style="{translate(@options,'=',':')}">
- <xsl:copy-of select="@*"/>
- </omlet>
-</xsl:template>
-
-<xsl:template match="omdoc:tikz">
- <omlet action="display" data="#{generate-id()}" show="embed" style="{translate(@options,'=',':')}">
- <xsl:copy-of select="@*"/>
- </omlet>
-</xsl:template>
-
-<!-- for citations we just extract the bibrefs at the moment. -->
-<xsl:template match="ltx:cite"><xsl:apply-templates select="ltx:bibref"/></xsl:template>
-<xsl:template match="ltx:bibref">
- <citation><xsl:copy-of select="@bibrefs"/></citation>
-</xsl:template>
-
-<!-- we ignore LaTeXML breaks -->
-<xsl:template match="ltx:break"/>
-
-<xsl:template match="ltx:figure[ltx:graphics]">
- <omlet action="display" data="#{generate-id(ltx:graphics)}" show="embed" class="float-figure-{@placement}">
- <xsl:if test="@label">
- <xsl:attribute name="xml:id"><xsl:value-of select="@label"/></xsl:attribute>
- </xsl:if>
- <xsl:if test="ltx:graphics/@options">
- <xsl:attribute name="style"><xsl:value-of select="translate(ltx:graphics/@options,'=',':')"/></xsl:attribute>
- </xsl:if>
- <xsl:if test="ltx:caption/*|ltx:caption/text()">
- <metadata><dc:title><xsl:apply-templates select="ltx:caption/*|ltx:caption/text()"/></dc:title></metadata>
- </xsl:if>
- </omlet>
-</xsl:template>
-
-<xsl:template match="ltx:graphics" mode="extract-data">
- <private>
- <xsl:attribute name="xml:id"><xsl:value-of select="generate-id()"/></xsl:attribute>
- <xsl:variable name="sources" select="str:tokenize(@sources,',')"/>
- <xsl:variable name="graphic" select="@graphic"/>
- <xsl:for-each select="$sources">
- <xsl:variable name="current" select="."/>
- <xsl:variable name="type">
- <xsl:choose>
- <xsl:when test="$current='jpg'">
- <xsl:value-of select="'image/jpeg'"/>
- </xsl:when>
- <xsl:when test="$current='jpeg'">
- <xsl:value-of select="'image/jpeg'"/>
- </xsl:when>
- <xsl:when test="$current='png'">
- <xsl:value-of select="'image/png'"/>
- </xsl:when>
- <xsl:when test="$current='gif'">
- <xsl:value-of select="'image/gif'"/>
- </xsl:when>
- <xsl:when test="$current='eps'">
- <xsl:value-of select="'application/postscript'"/>
- </xsl:when>
- <xsl:when test="$current='ps'">
- <xsl:value-of select="'application/postscript'"/>
- </xsl:when>
- <xsl:when test="$current='ai'">
- <xsl:value-of select="'application/postscript'"/>
- </xsl:when>
- <xsl:when test="$current='pdf'">
- <xsl:value-of select="'application/pdf'"/>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$current"/>
- </xsl:otherwise>
- </xsl:choose>
- </xsl:variable>
- <data format="{$type}" href="{$graphic}.{.}"/>
- </xsl:for-each>
- </private>
-</xsl:template>
-<xsl:template match="ltx:verbatim" mode="extract-data">
- <private>
- <xsl:attribute name="xml:id"><xsl:value-of select="generate-id()"/></xsl:attribute>
- <data format="text"><xsl:value-of select="text()"/></data>
- </private>
-</xsl:template>
-
-<xsl:template match="omdoc:tikz|ltx:tikz" mode="extract-data">
- <private>
- <xsl:attribute name="xml:id"><xsl:value-of select="generate-id()"/></xsl:attribute>
- <data format="tikz"><xsl:value-of select="."/></data>
- </private>
-</xsl:template>
-
-<!-- for LaTeXML tables -->
-<xsl:template match="ltx:tabular">
- <table>
- <xsl:copy-of select="@*"/>
- <xsl:apply-templates/>
- </table>
-</xsl:template>
-
-<xsl:template match="ltx:tr">
- <tr>
- <xsl:copy-of select="@*"/>
- <xsl:apply-templates/>
- </tr>
-</xsl:template>
-
-<xsl:template match="ltx:td">
- <td>
- <xsl:copy-of select="@*"/>
- <xsl:apply-templates/>
- </td>
-</xsl:template>
-
-<xsl:template match="ltx:thead|ltx:tbody"><xsl:apply-templates/></xsl:template>
-
-<!-- for LaTeXML references from \url -->
-<xsl:template match="ltx:ref[@class='url']">
- <link href="{@href}" class="url">
- <xsl:value-of select="ltx:text"/>
- </link>
-</xsl:template>
-
-<xsl:template match="ltx:ref[@labelref]">
- <ref type="cite" xref="{@labelref}"/>
-</xsl:template>
-
-<!-- LaTeXML listings -->
-<xsl:template match="ltx:text[@class='listing']">
- <omdoc:phrase type='progsnippet'><xsl:copy-of select="@*"/><xsl:apply-templates/></omdoc:phrase>
-</xsl:template>
-
-<xsl:template match="ltx:listingblock">
- <omlet action='display' show='embed' style='display:block'>
- <xsl:copy-of select="@*"/>
- <code>
- <data format='listingblock'><xsl:apply-templates mode="listing"/></data>
- </code>
- </omlet>
-</xsl:template>
-
-<xsl:template match="ltx:tabular" mode="listing">
- <table class="listing"><xsl:apply-templates mode="listing"/></table>
-</xsl:template>
-
-<xsl:template match="ltx:tr" mode="listing">
- <tr><xsl:apply-templates mode="listing"/></tr>
-</xsl:template>
-
-<xsl:template match="ltx:td" mode="listing">
- <td><xsl:apply-templates mode="listing"/></td>
-</xsl:template>
-
-<xsl:template match="ltx:text[not(@*)]" mode="listing">
- <xsl:apply-templates mode="listing"/>
-</xsl:template>
-
-<xsl:template match="ltx:text[@font='bold']" mode="listing">
- <keyword><xsl:apply-templates mode="listing"/></keyword>
-</xsl:template>
-
-<xsl:template match="ltx:text[@color]" mode="listing">
- <phrase>
- <xsl:attribute name='type'><xsl:text>lstemph</xsl:text></xsl:attribute>
- <xsl:attribute name='style'><xsl:text>color:</xsl:text><xsl:value-of select="@color"/></xsl:attribute>
- <xsl:apply-templates mode="listing"/>
- </phrase>
-</xsl:template>
-
-<xsl:template match="ltx:text[@class]" mode="listing">
- <xsl:apply-templates mode="listing"/>
-</xsl:template>
-
-
-<xsl:template match="ltx:*" mode="listing">
- <xsl:message>cannot deal with element <xsl:value-of select="local-name()"/> yet!</xsl:message>
-</xsl:template>
-
-
-<xsl:template match="ltx:equation">
- <om:OMOBJ style="display:block">
- <xsl:apply-templates select="ltx:Math/om:OMOBJ/*"/>
- </om:OMOBJ>
-</xsl:template>
-
-<!-- equationgroups come from eqnarray and eqnarray*, they really need OMDoc-level parallel markup -->
-<xsl:template match="ltx:equationgroup">
- <xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="ltx:equationgroup/ltx:equation">
- <om:OMOBJ style="display:block">
- <xsl:apply-templates select="ltx:MathFork/ltx:Math/om:OMOBJ/*"/>
- </om:OMOBJ>
-</xsl:template>
-
-
-<!-- for notations -->
-<xsl:template match="omdoc:rendering">
- <xsl:apply-templates select="." mode="rendering"/>
-</xsl:template>
-<xsl:template match="ltx:Math" mode="rendering">
- <xsl:apply-templates select="m:math/*" mode="rendering"/>
-</xsl:template>
-
-<!-- copy where not specified otherwise -->
-<xsl:template match="*" mode="rendering">
- <xsl:copy><xsl:copy-of select="@*[not(name()='argprec')]"/><xsl:apply-templates mode="rendering"/></xsl:copy>
-</xsl:template>
-
-<xsl:template match="ltx:text" mode="rendering">
- <text><xsl:value-of select="text()"/></text>
-</xsl:template>
-
-<!-- Template to recover the appropriate argument precedence" -->
-<xsl:template name="argument-precedence">
- <xsl:param name="count" select="1"/>
- <xsl:param name="precattr" select="1"/>
- <xsl:choose>
- <xsl:when test="$count > 1">
- <xsl:call-template name="argument-precedence">
- <xsl:with-param name="count" select="$count - 1"/>
- <xsl:with-param name="precattr" select="substring-after($precattr,' ')"/>
- </xsl:call-template>
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="substring-before($precattr,' ')"/>
- </xsl:otherwise>
- </xsl:choose>
-</xsl:template>
-
-<!-- we have to treat the m:mi that come from an
- #i argument invocation differently -->
-<xsl:template match="m:mi[starts-with(.,'arg:')]|m:mo[starts-with(.,'arg:')]" mode="rendering">
- <xsl:variable name="precedence">
- <xsl:call-template name="argument-precedence">
- <xsl:with-param name="count" select="substring-after(.,'arg:')"/>
- <xsl:with-param name="precattr" select="ancestor::omdoc:rendering[1]/@argprec"/>
- </xsl:call-template>
- </xsl:variable>
- <render name="arg{substring-after(.,'arg:')}">
- <xsl:choose>
- <xsl:when test="string($precedence)">
- <xsl:attribute name="precedence"><xsl:value-of select="$precedence"/></xsl:attribute>
- </xsl:when>
- <xsl:when test="string(ancestor::omdoc:rendering[1]/@precedence)">
- <xsl:attribute name="precedence"><xsl:value-of select="ancestor::omdoc:rendering[1]/@precedence"/></xsl:attribute>
- </xsl:when>
- <xsl:otherwise/>
- </xsl:choose>
- </render>
-</xsl:template>
-
-
-<!-- make an mrow around the generated things. -->
-<xsl:template match="omdoc:style[@format='pmml']">
- <xsl:copy>
- <xsl:copy-of select="@*"/>
- <element name="mrow" ns="http://www.w3.org/1998/Math/MathML">
- <xsl:apply-templates/>
- </element>
- </xsl:copy>
-</xsl:template>
-
-
-<xsl:template match="omdoc:separator/ltx:Math">
- <xsl:apply-templates select="m:math/*" mode="elementize"/>
-</xsl:template>
-
-<xsl:template match="omdoc:map/ltx:Math">
- <xsl:apply-templates select="m:math/*" mode="elementize"/>
-</xsl:template>
-
-
-<xsl:template match="text()" mode="elementize">
- <text><xsl:value-of select="."/></text>
-</xsl:template>
-
-<xsl:template match="ltx:text" mode="elementize">
- <element name="mtext" ns="http://www.w3.org/1998/Math/MathML">
- <xsl:value-of select="."/>
- </element>
-</xsl:template>
-
-<xsl:template match="m:*" mode="elementize">
- <element name="{local-name()}" ns="{namespace-uri()}">
- <xsl:for-each select="@*">
- <attribute name="{local-name()}" select="'{.}'"/>
- </xsl:for-each>
- <xsl:apply-templates mode="elementize"/>
- </element>
-</xsl:template>
-
-<!-- get rid of the list OMAs LaTeXML uses -->
-<xsl:template match="om:OMA[om:OMS[position()=1 and @name='list' and @cd='latexml']]">
- <xsl:apply-templates select="*[position() &gt; 1]"/>
-</xsl:template>
-
-<!-- special treatment for latexml symbols -->
-<!-- we have a set of special CDs that correspond to the ones latexml postulates -->
-<!-- they need to be imported whereever necessary -->
-<xsl:template match="omdoc:theory">
- <theory>
- <xsl:copy-of select="@*"/>
- <xsl:if test="//om:OMS[@cd='latexml' and @name='multirelation']">
- <imports from="{$latexmlcds}/multirel.omdoc#multirel"/>
- </xsl:if>
- <xsl:if test="//om:OMS[@cd='latexml' and
- (@name='times' or
- @name='divide' or
- @name='plus' or
- @name='minus')]">
- <imports from="{$omcds}/arith1.omdoc#arith1"/>
- </xsl:if>
- <xsl:if test="//om:OMS[@cd='latexml' and
- (@name='greater-than' or
- @name='less-than' or
- @name='not-equals' or
- @name='greater-than-or-equals' or
- @name='less-than-or-equals')]">
- <imports from="{$omcds}/relation1.omdoc#relation1"/>
- </xsl:if>
- <xsl:apply-templates/>
- </theory>
-</xsl:template>
-
-<!-- and we need to convert the symbols -->
-<xsl:template match="om:OMS[@cd='latexml' and @name='multirelation']">
- <om:OMS cd="multirel" name="multirelation"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='multirelation']"/>
-
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='plus']">
- <om:OMS cd="arith1" name="plus"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='minus']">
- <om:OMS cd="arith1" name="minus"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='times']">
- <om:OMS cd="arith1" name="times"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='divide']">
- <om:OMS cd="arith1" name="divide"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='greater-than']">
- <om:OMS cd="relation1" name="gt"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='greater-than-or-equals']">
- <om:OMS cd="relation1" name="gt"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='less-than']">
- <om:OMS cd="relation1" name="lt"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='less-than-or-equals']">
- <om:OMS cd="relation1" name="lt"/>
-</xsl:template>
-
-<xsl:template match="om:OMS[@cd='latexml' and @name='not-equals']">
- <om:OMS cd="relation1" name="neq"/>
-</xsl:template>
-
-<!-- get rid of the sectioning commands -->
-<xsl:template match="omdoc:chapter|omdoc:section|omdoc:subsection|omdoc:subsubsection|omdoc:paragraph|omdoc:subparagraph">
- <omgroup class="{local-name()}">
- <xsl:copy-of select="@*|*"/>
- </omgroup>
-</xsl:template>
-</xsl:stylesheet>
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 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- this style sheet transforms the tex.xml file to OMDoc -->
-<xsl:stylesheet version="1.0"
- xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
- xmlns:ltx="http://dlmf.nist.gov/LaTeXML"
- xmlns:omdoc="http://omdoc.org/ns"
- xmlns:stex="http://kwarc.info/ns/sTeX"
- xmlns="http://www.w3.org/2002/07/owl#"
- xmlns:owl="http://www.w3.org/2002/07/owl#"
- exclude-result-prefixes="xsl omdoc ltx stex owl">
-
-<xsl:output method="xml" indent="yes" cdata-section-elements="data"/>
-<xsl:strip-space elements="*"/>
-
-<xsl:template match="/">
- <xsl:comment>This OWL2 ontology is generated from an sTeX-encoded one via LaTeXML, you may want to reconsider editing it.</xsl:comment>
- <xsl:apply-templates/>
-</xsl:template>
-
-<xsl:template match="*">
- <xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
-</xsl:template>
-
-<xsl:template match="omdoc:imports">
- <Import><xsl:value-of select="@from"/></Import>
-</xsl:template>
-
-
-<xsl:template match="owl:Axiom">
- <xsl:variable name="anno" select="*[2]"/>
- <xsl:apply-templates select="*[1]">
- <xsl:with-param name="anno" select="$anno"/>
- </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="ltx:Math|ltx:XMath">
- <xsl:param name="anno"/>
- <xsl:apply-templates>
- <xsl:with-param name="anno" select="$anno"/>
- </xsl:apply-templates>
-</xsl:template>
-
-<xsl:template match="ltx:XMApp[ltx:XMTok[position()=1 and @meaning='list']]">
- <xsl:apply-templates select="*[position() &gt; 1]"/>
-</xsl:template>
-
-<xsl:template match="ltx:XMApp">
- <xsl:param name="anno"/>
- <xsl:element name="{ltx:XMTok[1]/@meaning}">
- <xsl:copy-of select="$anno"/>
- <xsl:apply-templates select="*[position() &gt; 1]"/>
- </xsl:element>
-</xsl:template>
-
-<xsl:template match="ltx:XMTok">
- <Class IRI="{@name}"/>
-</xsl:template>
-
-<xsl:template match="ltx:ERROR">
- <Class IRI="{substring-after(ltx:XMTok,'\')}"/>
-</xsl:template>
-</xsl:stylesheet>