--- loncom/xml/algebra/AlgParser.pm	2005/02/24 08:27:17	1.5
+++ loncom/xml/algebra/AlgParser.pm	2005/02/25 06:31:00	1.11
@@ -39,11 +39,11 @@ $close{'('} = ')';
 
 my $binoper3 = '(?:\\^|\\*\\*)';
 my $binoper2 = '[/*_,]';
-my $binoper1 = '[-+=><%!#]';
+my $binoper1 = '(?:<>|<=|>=|[-+=><%!])';
 my $openparen = '[{(\\[]';
 my $closeparen = '[})\\]]';
 my $varname = '[A-Za-z](?:_[0-9]+)?';
-my $greek='alpha|bita|gamma|zita|thita|iota|kappa|lambda|mu|nu|xi|rho|sigma|tau|phi|chi|psi|omega|zepslon|zdelta|xeta|zupslon|pi';
+my $greek='alpha|(?:(?:(?:var)?(?:[tT]h))|(?:[bz])?)eta|[gG]amma|iota|kappa|[lL]ambda|mu|nu|[xX]i|(?:var)?rho|(?:var)?[sS]igma|tau|(?:var)?(?:[pP])hi|chi|[oO]mega|(?:(?:var)?(?:[eE])|(?:[uU]))psilon|[dD]elta|[pP]si|(?:var)?[pP]i';
 my $delete='zeroplace';
 my $escape='infty';
 my $specialvalue = '(?:'.$escape.'|'.$greek.'|'.$delete.'|d[a-z]|e)';
@@ -534,7 +534,11 @@ sub tolatex {
   /binop1/ && do {
     my ($p1, $p2) = ('','');
     if ($args[2]->[0] eq 'binop1') {($p1,$p2)=qw{ \left( \right) };}
-    return ($args[1]->tolatex() . $args[0] . $p1 .
+    my $cmd=$args[0];
+    if    ($args[0] eq '<>') { $cmd='\\not= '; }
+    elsif ($args[0] eq '<=') { $cmd='\\leq ';  }
+    elsif ($args[0] eq '>=') { $cmd='\\geq ';  }
+    return ($args[1]->tolatex() . $cmd . $p1 .
             $args[2]->tolatex() . $p2);
   };
   /unop1/ && do {
@@ -566,8 +570,6 @@ sub tolatex {
                '{' . $args[2]->tolatex() . '}' ); 
     }
     elsif ($args[0] eq '*'){
-#	return('\frac{' . $p1 . $args[1]->tolatex() . $p2 . '}'.
-#               '{' . $p3 . $args[2]->tolatex() . $p4 . '}' );
 	return($args[1]->tolatex() . '\cdot ' . $args[2]->tolatex() ); 
     }
     else{
@@ -594,20 +596,33 @@ sub tolatex {
       #       added missing trig functions
       #
       #$specialfunc = '(?:abs|logten|asin|acos|atan|sech|sgn|step|fact)';
-      my $specialfunc = '(?:abs|logten|a(?:sin|cos|tan|sec|csc|cot)h?|sgn|step|fact)';
+      my $specialfunc = '(?:(logten)|a(sin|cos|tan|sec|csc|cot)(h)?|sgn|step|fact|(abs))';
       #
       #  End DPVC
       #
 
       if ($args[0] =~ /$specialfunc/) {
-         return ('\mbox{' . $args[0] .'}'. $p1 . $args[1]->tolatex() . $p2);
+	  if (defined($1)) {
+	      return ('\log_{10}'. $p1 . $args[1]->tolatex() . $p2);
+	  }
+	  elsif (defined($2)) {
+	      return ('\\' . $2.$3 .'^{-1}'. $p1 . $args[1]->tolatex() . $p2);
+	  }
+	  elsif (defined($4)) {
+	      return ('|' . $args[1]->tolatex() . '|');
+	  }
+	  else {
+	      return ('\mbox{' . $args[0] .'}'. $p1 . $args[1]->tolatex() . $p2);
+	  }
       }
       else {
         return ('\\' . $args[0] . $p1 . $args[1]->tolatex() . $p2);
       }
   };
   /special/ && do {
-    if ($args[0] eq 'pi') {return '\pi';} else {return $args[0];}
+      if    ($args[0] =~/($greek|$escape)/) {return '\\'.$1;}
+      elsif ($args[0] =~/$delete/) {return '';}
+      else { return $args[0]; }
   };
   /varname|(:?number$)/ && return $args[0];
   /numberE/ && do {
@@ -616,7 +631,6 @@ sub tolatex {
   };
   /closep/ && do {
     my($backslash) = '';
-    my(%close) = %AlgParser::close;
     if ($args[0] eq '{') {$backslash = '\\';}
 #This is for editors to match: }
     return ('\left' . $backslash . $args[0] . $args[1]->tolatex() .