--- loncom/xml/algebra/AlgParser.pm	2005/02/24 09:06:14	1.9
+++ loncom/xml/algebra/AlgParser.pm	2005/06/09 02:35:55	1.14
@@ -547,34 +547,20 @@ sub tolatex {
     return ($args[0] . $p1 . $args[1]->tolatex() . $p2);
   };
   /binop2/ && do {
-    my ($p1, $p2, $p3, $p4) = ('','','','');
-    if ($args[0] =~ /implicit/) {
-      if ( (($args[1]->head eq qq(number)) &&
-            ($args[2]->head eq qq(number))) ||
-           (($args[1]->head eq qq(binop2)) &&
-            ($args[1]->[2]->head eq qq(number))) ) {
-        $args[0] = '\\,';
-      } else {
-        $args[0] = ' ';
-      }
-    }
-    if ($args[1]->[0] =~ /binop1|numberE/)
-      {($p1,$p2)=qw{ \left( \right) };}
- #   if ($args[2]->[0] =~ /binop[12]|numberE/)
-	if ($args[2]->[0] =~ /binop[12]|numberE|unop1/)
-      {($p3,$p4)=qw{ \left( \right) };}
+    my ($lop,$rop) = ($args[1]->tolatex,$args[2]->tolatex);
     if ($args[0] eq '/'){
-#	return('\frac{' . $p1 . $args[1]->tolatex() . $p2 . '}'.
-#               '{' . $p3 . $args[2]->tolatex() . $p4 . '}' );
-	return('\frac{' . $args[1]->tolatex() . '}'.
-               '{' . $args[2]->tolatex() . '}' ); 
+	return('\frac{'.$lop.'}{'.$rop.'}');
     }
     elsif ($args[0] eq '*'){
-	return($args[1]->tolatex() . '\cdot ' . $args[2]->tolatex() ); 
+	return($lop. '\cdot ' .$rop); 
     }
     else{
-    return ($p1 . $args[1]->tolatex() . $p2 . $args[0] . $p3 .
-            $args[2]->tolatex() . $p4);
+	$lop = '\left('.$lop.'\right)' if ($args[1]->[0] =~ /binop1|numberE/);
+	$rop = '\left('.$rop.'\right)' if ($args[2]->[0] =~ /binop[12]|numberE|unop1/);
+	if ($args[0] =~ /implicit/) {
+	    $args[0] = ($lop =~ m/[.0-9]$/ && $rop =~ m/^[-+.0-9]/) ? '\cdot ' : ' ';
+	}
+	return ($lop.$args[0].$rop);
     }
   };
   /binop3/ && do {
@@ -588,7 +574,7 @@ sub tolatex {
   };
   /func1/ && do {
       my($p1,$p2);
-      if($args[0] eq "sqrt"){($p1,$p2)=qw{ \left{ \right} };}
+      if($args[0] eq "sqrt"){($p1,$p2)=('{','}');}
       else {($p1,$p2)=qw{ \left( \right) };}
 
       #
@@ -596,24 +582,35 @@ 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/) {
 	  if (defined($1)) {
-	      return ('\mbox{log}_{10}'. $p1 . $args[1]->tolatex() . $p2);
+	      return ('\log_{10}'. $p1 . $args[1]->tolatex() . $p2);
 	  }
 	  elsif (defined($2)) {
-	      return ('\mbox{' . $2.$3 .'}^{-1}'. $p1 . $args[1]->tolatex() . $p2);
+	      if (defined($3) && ($2 eq 'sec' || $2 eq 'csc' || $2 eq 'cot')) {
+		  return ('\mathrm{' . $2.$3 .'}^{-1}'. $p1 . $args[1]->tolatex() . $p2);
+	      } else {
+		  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);
+	  if ($args[0] =~/(sec|csc|cot)h/) {
+	      return ('\mathrm{' . $args[0] . '}' . $p1 . $args[1]->tolatex() . $p2);
+	  } else {
+	      return ('\\' . $args[0] . $p1 . $args[1]->tolatex() . $p2);
+	  }
       }
   };
   /special/ && do {