--- loncom/xml/lonplot.pm	2006/09/06 19:26:15	1.114
+++ loncom/xml/lonplot.pm	2007/08/03 17:44:35	1.125
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Dynamic plot
 #
-# $Id: lonplot.pm,v 1.114 2006/09/06 19:26:15 albertel Exp $
+# $Id: lonplot.pm,v 1.125 2007/08/03 17:44:35 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -117,7 +117,7 @@ my $pos_real_test  =
 my $color_test     = sub {$_[0]=~s/\s+//g;$_[0]=~/^x[\da-fA-F]{6}$/};
 my $onoff_test     = sub {$_[0]=~/^(on|off)$/};
 my $key_pos_test   = sub {$_[0]=~/^(top|bottom|right|left|outside|below| )+$/};
-my $sml_test       = sub {$_[0]=~/^(small|medium|large)$/};
+my $sml_test       = sub {$_[0]=~/^(\d+|small|medium|large)$/};
 my $linestyle_test = sub {exists($linestyles{$_[0]})};
 my $words_test     = sub {$_[0]=~s/\s+/ /g;$_[0]=~/^([\w~!\@\#\$\%^&\*\(\)-=_\+\[\]\{\}:\;\'<>,\.\/\?\\]+ ?)+$/};
 
@@ -127,9 +127,10 @@ my $words_test     = sub {$_[0]=~s/\s+/
 ##                                                               ##
 ###################################################################
 my @gnuplot_edit_order = 
-    qw/alttag bgcolor fgcolor height width font transparent grid samples 
-    border align texwidth texfont plotcolor plottype lmargin rmargin tmargin
-    bmargin major_ticscale minor_ticscale boxwidth gridlayer fillstyle
+    qw/alttag bgcolor fgcolor height width texwidth fontface font texfont
+    transparent grid samples 
+    border align plotcolor plottype gridtype lmargin rmargin
+    tmargin bmargin major_ticscale minor_ticscale boxwidth gridlayer fillstyle
     pattern solid/;
 
 my $margin_choices = ['default',0..20];
@@ -139,35 +140,35 @@ my %gnuplot_defaults =
      alttag       => {
 	 default     => 'dynamically generated plot',
 	 test        => $words_test,
-	 description => 'brief description of the plot',
+	 description => 'Brief description of the plot',
       	 edit_type   => 'entry',
 	 size        => '40'
 	 },
      height       => {
 	 default     => 300,
 	 test        => $int_test,
-	 description => 'height of image (pixels)',
+	 description => 'Height of image (pixels)',
       	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      width        => {
 	 default     => 400,
 	 test        => $int_test,
-	 description => 'width of image (pixels)',
+	 description => 'Width of image (pixels)',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      bgcolor      => {
 	 default     => 'xffffff',
 	 test        => $color_test, 
-	 description => 'background color of image (xffffff)',
+	 description => 'Background color of image (xffffff)',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      fgcolor      => {
 	 default     => 'x000000',
 	 test        => $color_test,
-	 description => 'foreground color of image (x000000)',
+	 description => 'Foreground color of image (x000000)',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
@@ -203,12 +204,19 @@ my %gnuplot_defaults =
 	 edit_type   => 'onoff'
 	 },
      font         => {
-	 default     => 'medium',
+	 default     => '9',
 	 test        => $sml_test,
-	 description => 'Size of font to use',
+	 description => 'Font size to use in web output (pts)',
 	 edit_type   => 'choice',
-	 choices     => ['small','medium','large']
+	 choices     => [['5','5 (small)'],'7',['9','9 (medium)'],'10','12',['15','15 (large)']]
 	 },
+     fontface     => {
+        default     => 'sans-serif',
+        test        => sub {$_[0]=~/^(sans-serif|serif|classic)$/},
+        description => 'Type of font to use',
+        edit_type   => 'choice',
+        choices     => ['sans-serif','serif', 'classic']
+        },
      samples      => {
 	 default     => '100',
 	 test        => $int_test,
@@ -217,11 +225,11 @@ my %gnuplot_defaults =
 	 choices     => ['100','200','500','1000','2000','5000']
 	 },
      align        => {
-	 default     => 'center',
-	 test        => sub {$_[0]=~/^(left|right|center)$/},
-	 description => 'alignment for image in html',
+	 default     => 'middle',
+	 test        => sub {$_[0]=~/^(left|right|middle|center)$/},
+	 description => 'Alignment for image in HTML',
 	 edit_type   => 'choice',
-	 choices     => ['left','right','center']
+	 choices     => ['left','right','middle']
 	 },
      texwidth     => {
          default     => '93',
@@ -247,7 +255,7 @@ my %gnuplot_defaults =
      pattern      => {
 	 default     => '',
 	 test        => $int_test,
-	 description => 'pattern value for boxes:',
+	 description => 'Pattern value for boxes:',
 	 edit_type   => 'choice',
          choices     => [0,1,2,3,4,5,6]
          },
@@ -272,6 +280,13 @@ my %gnuplot_defaults =
 	 edit_type   => 'choice',
          choices     => ['Cartesian','Polar']
          },
+     gridtype     => {
+	 default     => 'Cartesian',
+	 test        => sub {$_[0]=~/^(Polar|Cartesian|Linear-Log|Log-Linear|Log-Log)$/},
+	 description => 'Grid type:',
+	 edit_type   => 'choice',
+         choices     => ['Cartesian','Polar','Linear-Log','Log-Linear','Log-Log']
+         },
      lmargin      => {
 	 default     => 'default',
 	 test        => sub {$_[0]=~/^(default|\d+)$/},
@@ -303,7 +318,7 @@ my %gnuplot_defaults =
      boxwidth     => {
 	 default     => '',
 	 test        => $real_test, 
-	 description => 'width of boxes default auto',
+	 description => 'Width of boxes, default is auto',
 	 edit_type   => 'entry',
          size        => '5'
          },
@@ -341,7 +356,7 @@ my %key_defaults =
      pos   => { 
 	 default => 'top right', 
 	 test => $key_pos_test, 
-	 description => 'position of the key on the plot',
+	 description => 'Position of the key on the plot',
 	 edit_type   => 'choice',
 	 choices     => ['top left','top right','bottom left','bottom right',
 			 'outside','below']
@@ -353,14 +368,14 @@ my %label_defaults =
      xpos    => {
 	 default => 0,
 	 test => $real_test,
-	 description => 'x position of label (graph coordinates)',
+	 description => 'X position of label (graph coordinates)',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      ypos    => {
 	 default => 0, 
 	 test => $real_test,
-	 description => 'y position of label (graph coordinates)',
+	 description => 'Y position of label (graph coordinates)',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
@@ -387,7 +402,7 @@ my %tic_defaults =
      mirror => {
 	 default => 'on', 
 	 test => $onoff_test,
-	 description => 'mirror tics on opposite axis?',
+	 description => 'Mirror tics on opposite axis?',
 	 edit_type   => 'onoff'
 	 },
      start => {
@@ -426,55 +441,55 @@ my %axis_defaults =
      color   => {
 	 default => 'x000000', 
 	 test => $color_test,
-	 description => 'color of grid lines (x000000)',
+	 description => 'Color of grid lines (x000000)',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      xmin      => {
 	 default => '-10.0',
 	 test => $real_test,
-	 description => 'minimum x-value shown in plot',
+	 description => 'Minimum x-value shown in plot',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      xmax      => {
 	 default => ' 10.0',
 	 test => $real_test,
-	 description => 'maximum x-value shown in plot',	 
+	 description => 'Maximum x-value shown in plot',	 
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      ymin      => {
 	 default => '-10.0',
 	 test => $real_test,
-	 description => 'minimum y-value shown in plot',	 
+	 description => 'Minimum y-value shown in plot',	 
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      ymax      => {
 	 default => ' 10.0',
 	 test => $real_test,
-	 description => 'maximum y-value shown in plot',	 
+	 description => 'Maximum y-value shown in plot',	 
 	 edit_type   => 'entry',
 	 size        => '10'
 	 }
      );
 
-my @curve_edit_order = ('color','name','linestyle','pointtype','pointsize','limit');
+my @curve_edit_order = ('color','name','linestyle','linewidth','pointtype','pointsize','limit');
 
 my %curve_defaults = 
     (
      color     => {
 	 default => 'x000000',
 	 test => $color_test,
-	 description => 'color of curve (x000000)',
+	 description => 'Color of curve (x000000)',
 	 edit_type   => 'entry',
 	 size        => '10'
 	 },
      name      => {
 	 default => '',
 	 test => $words_test,
-	 description => 'name of curve to appear in key',
+	 description => 'Name of curve to appear in key',
 	 edit_type   => 'entry',
 	 size        => '20'
 	 },
@@ -485,32 +500,31 @@ my %curve_defaults =
 	 edit_type   => 'choice',
 	 choices     => [keys(%linestyles)]
 	 },
-# gnuplots term=gif driver does not handle linewidth :(
-#     linewidth => {
-#         default     => 1,
-#         test        => $int_test,
-#         description => 'Line width (may not apply to all line styles)',
-#         edit_type   => 'choice',
-#         choices     => [1,2,3,4,5,6,7,8,9,10]
-#         },
+     linewidth => {
+         default     => 4,
+         test        => $int_test,
+         description => 'Line width (may not apply to all line styles)',
+         edit_type   => 'choice',
+         choices     => [1,2,3,4,5,6,7,8,9,10]
+         },
      pointsize => {
          default     => 1,
          test        => $pos_real_test,
-         description => 'point size (may not apply to all line styles)',
+         description => 'Point size (may not apply to all line styles)',
          edit_type   => 'entry',
          size        => '5'
          },
      pointtype => {
          default     => 1,
          test        => $int_test,
-         description => 'point type (may not apply to all line styles)',
+         description => 'Point type (may not apply to all line styles)',
          edit_type   => 'choice',
          choices     => [0,1,2,3,4,5,6]
          },
      limit     => {
          default     => 'closed',
 	 test        => sub {$_[0]=~/^(closed|x1|x2|y1|y2)$/},
-         description => 'point to fill -- for filledcurves',
+         description => 'Point to fill -- for filledcurves',
          edit_type   => 'choice',
          choices     => ['closed','x1','x2','y1','y2']
          },
@@ -543,7 +557,9 @@ sub start_gnuplot {
     } elsif ($target eq 'edit') {
 	$result .= &Apache::edit::tag_start($target,$token,'GnuPlot');
 	$result .= &edit_attributes($target,$token,\%gnuplot_defaults,
-				    \@gnuplot_edit_order);
+				    \@gnuplot_edit_order)
+	    .&Apache::edit::end_row()
+	    .&Apache::edit::start_spanning_row();
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
 	    ($token,$parstack,$safeeval,keys(%gnuplot_defaults));
@@ -665,6 +681,51 @@ sub end_ytics {
     return $result;
 }
 
+##-----------------------------------------------------------------font
+my %font_properties =
+    (
+     'classic'    => {
+	 face       => 'classic',
+	 file       => 'DejaVuSansMono-Bold',
+	 printname  => 'Helvetica',
+	 tex_no_file => 1,
+     },
+     'sans-serif' => {
+	 face       => 'sans-serif',
+	 file       => 'DejaVuSans',
+	 printname  => 'DejaVuSans',
+     },
+     'serif'      => {
+	 face       => 'serif',
+	 file       => 'DejaVuSerif',
+	 printname  => 'DejaVuSerif',
+     },
+     );
+
+sub get_font {
+    my ($target) = @_;
+    my ($size, $selected_font);
+
+    if ( $Apache::lonplot::plot{'font'} =~ /^(small|medium|large)/) {
+	$selected_font = $font_properties{'classic'};
+	if ( $Apache::lonplot::plot{'font'} eq 'small') {
+	    $size = '5';
+	} elsif ( $Apache::lonplot::plot{'font'} eq 'medium') {
+	    $size = '9';
+	} elsif ( $Apache::lonplot::plot{'font'} eq 'large') {
+	    $size = '15';
+	} else {
+	    $size = '9';
+	}
+    } else {
+	$size = $Apache::lonplot::plot{'font'};
+	$selected_font = $font_properties{$Apache::lonplot::plot{'fontface'}};
+    }
+    if ($target eq 'tex' && defined($Apache::lonplot::plot{'texfont'})) {
+	$size = $Apache::lonplot::plot{'texfont'};
+    }
+    return ($size, $selected_font);
+}
 
 ##----------------------------------------------------------------- key
 sub start_key {
@@ -710,9 +771,7 @@ sub start_title {
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::tag_start($target,$token,'Plot Title');
 	my $text=&Apache::lonxml::get_all_text("/title",$parser,$style);
-	$result.=&Apache::edit::end_row().
-	    &Apache::edit::start_spanning_row().
-	    &Apache::edit::editline('',$text,'',60);
+	$result.=&Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
 	$result.=&Apache::edit::rebuild_tag($token);
 	$result.=&Apache::edit::modifiedfield("/title",$parser);
@@ -743,9 +802,7 @@ sub start_xlabel {
     } elsif ($target eq 'edit') {
 	$result.=&Apache::edit::tag_start($target,$token,'Plot Xlabel');
 	my $text=&Apache::lonxml::get_all_text("/xlabel",$parser,$style);
-	$result.=&Apache::edit::end_row().
-	    &Apache::edit::start_spanning_row().
-	    &Apache::edit::editline('',$text,'',60);
+	$result.=&Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
 	$result.=&Apache::edit::rebuild_tag($token);	
 	$result.=&Apache::edit::modifiedfield("/xlabel",$parser);
@@ -777,9 +834,7 @@ sub start_ylabel {
     } elsif ($target eq 'edit') {
 	$result .= &Apache::edit::tag_start($target,$token,'Plot Ylabel');
 	my $text = &Apache::lonxml::get_all_text("/ylabel",$parser,$style);
-	$result .= &Apache::edit::end_row().
-	    &Apache::edit::start_spanning_row().
-	    &Apache::edit::editline('',$text,'',60);
+	$result .= &Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
 	$result.=&Apache::edit::rebuild_tag($token);
 	$result.=&Apache::edit::modifiedfield("/ylabel",$parser);
@@ -851,13 +906,15 @@ sub start_curve {
     } elsif ($target eq 'edit') {
 	$result .= &Apache::edit::tag_start($target,$token,'Curve');
 	$result .= &edit_attributes($target,$token,\%curve_defaults,
-                                    \@curve_edit_order);
+                                    \@curve_edit_order)
+	    .&Apache::edit::end_row()
+	    .&Apache::edit::start_spanning_row();
+
     } elsif ($target eq 'modified') {
 	my $constructtag=&Apache::edit::get_new_args
 	    ($token,$parstack,$safeeval,keys(%curve_defaults));
 	if ($constructtag) {
 	    $result = &Apache::edit::rebuild_tag($token);
-	    $result.= &Apache::edit::handle_insert();
 	}
     }
     return $result;
@@ -895,9 +952,7 @@ sub start_function {
     } elsif ($target eq 'edit') {
 	$result .= &Apache::edit::tag_start($target,$token,'Gnuplot compatible curve function');
 	my $text = &Apache::lonxml::get_all_text("/function",$parser,$style);
-	$result .= &Apache::edit::end_row().
-	    &Apache::edit::start_spanning_row().
-	    &Apache::edit::editline('',$text,'',60);
+	$result .= &Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
 	$result.=&Apache::edit::rebuild_tag($token);
 	$result.=&Apache::edit::modifiedfield("/function",$parser);
@@ -972,9 +1027,7 @@ sub start_data {
     } elsif ($target eq 'edit') {
 	$result .= &Apache::edit::tag_start($target,$token,'Comma or space deliminated curve data');
 	my $text = &Apache::lonxml::get_all_text("/data",$parser,$style);
-	$result .= &Apache::edit::end_row().
-	    &Apache::edit::start_spanning_row().
-	    &Apache::edit::editline('',$text,'',60);
+	$result .= &Apache::edit::editline('',$text,'',60);
     } elsif ($target eq 'modified') {
 	$result.=&Apache::edit::rebuild_tag($token);
 	$result.=&Apache::edit::modifiedfield("/data",$parser);
@@ -1068,9 +1121,9 @@ sub get_attributes{
 ##------------------------------------------------------- write_gnuplot_file
 sub write_gnuplot_file {
     my ($tmpdir,$filename,$target)= @_;
+    my ($fontsize, $font_properties) =  &get_font($target);
     my $gnuplot_input = '';
     my $curve;
-    my $pt = $Apache::lonplot::plot{'texfont'};
     #
     # Check to be sure we do not have any empty curves
     my @curvescopy;
@@ -1101,24 +1154,46 @@ sub write_gnuplot_file {
     }
     # set term
     if ($target eq 'web') {
-	$gnuplot_input .= 'set term '.$weboutputformat .' ';
+	$gnuplot_input .= 'set terminal png enhanced nocrop ';
 	$gnuplot_input .= 'transparent ' if ($Apache::lonplot::plot{'transparent'} eq 'on');
-	$gnuplot_input .= $Apache::lonplot::plot{'font'} . ' ';
-	$gnuplot_input .= 'size '.$Apache::lonplot::plot{'width'}.','.$Apache::lonplot::plot{'height'}.' ';
+	$gnuplot_input .= 'font "'.$Apache::lonnet::perlvar{'lonFontsDir'}.
+	    '/'.$font_properties->{'file'}.'.ttf" ';
+	$gnuplot_input .= $fontsize;
+	$gnuplot_input .= ' size '.$Apache::lonplot::plot{'width'}.','.$Apache::lonplot::plot{'height'}.' ';
 	$gnuplot_input .= "@Colors\n";
 	# set output
 	$gnuplot_input .= "set output\n";
     } elsif ($target eq 'tex') {
-	$gnuplot_input .= "set term postscript eps $Apache::lonplot::plot{'plotcolor'} solid \"Helvetica\" $pt \n";
-	$gnuplot_input .= "set output \"/home/httpd/perl/tmp/".
+	$gnuplot_input .= "set term postscript eps enhanced $Apache::lonplot::plot{'plotcolor'} solid ";
+	if (!$font_properties->{'tex_no_file'}) {
+	    $gnuplot_input .=
+		'fontfile "'.$Apache::lonnet::perlvar{'lonFontsDir'}.
+		'/'.$font_properties->{'file'}.'.pfb" ';
+	}
+	$gnuplot_input .= ' "'.$font_properties->{'printname'}.'" ';
+	$gnuplot_input .= $fontsize;
+	$gnuplot_input .= "\nset output \"/home/httpd/perl/tmp/".
 	    &unescape($filename).".eps\"\n";
     }
-    # cartesian or polar?
+    # cartesian or polar plot?
     if (lc($Apache::lonplot::plot{'plottype'}) eq 'polar') {
         $gnuplot_input .= 'set polar'.$/;
     } else {
         # Assume Cartesian
     }
+    # cartesian or polar grid?
+    if (lc($Apache::lonplot::plot{'gridtype'}) eq 'polar') {
+        $gnuplot_input .= 'set grid polar'.$/;
+    } elsif (lc($Apache::lonplot::plot{'gridtype'}) eq 'linear-log') {
+        $gnuplot_input .= 'set logscale x'.$/;
+    } elsif (lc($Apache::lonplot::plot{'gridtype'}) eq 'log-linear') {
+        $gnuplot_input .= 'set logscale y'.$/;
+    } elsif (lc($Apache::lonplot::plot{'gridtype'}) eq 'log-log') {
+        $gnuplot_input .= 'set logscale x'.$/;
+        $gnuplot_input .= 'set logscale y'.$/;
+    } else {
+        # Assume Cartesian
+    }
     # solid or pattern for boxes?
     if (lc($Apache::lonplot::plot{'fillstyle'}) eq 'solid') {
         $gnuplot_input .= 'set style fill solid '.
@@ -1161,14 +1236,17 @@ sub write_gnuplot_file {
     $gnuplot_input .= "set samples $Apache::lonplot::plot{'samples'}\n";
     # title, xlabel, ylabel
     # titles
+    my $extra_space_x = ($xtics{'location'} eq 'axis') ? ' 0, -0.5 ' : '';
+    my $extra_space_y = ($ytics{'location'} eq 'axis') ? ' -0.5, 0 ' : '';
+
     if ($target eq 'tex') {
-        $gnuplot_input .= "set title  \"$title\" font \"Helvetica,".$pt."pt\"\n"  if (defined($title)) ;
-        $gnuplot_input .= "set xlabel \"$xlabel\" font \"Helvetica,".$pt."pt\" \n" if (defined($xlabel));
-        $gnuplot_input .= "set ylabel \"$ylabel\" font \"Helvetica,".$pt."pt\"\n" if (defined($ylabel));
+	$gnuplot_input .= "set title  \"$title\"          font \"".$font_properties->{'printname'}.",".$fontsize."pt\"\n" if (defined($title)) ;
+	$gnuplot_input .= "set xlabel \"$xlabel\" $extra_space_x font \"".$font_properties->{'printname'}.",".$fontsize."pt\"\n" if (defined($xlabel));
+	$gnuplot_input .= "set ylabel \"$ylabel\" $extra_space_y font \"".$font_properties->{'printname'}.",".$fontsize."pt\"\n" if (defined($ylabel));
     } else {
-        $gnuplot_input .= "set title  \"$title\"  \n"  if (defined($title)) ;
-        $gnuplot_input .= "set xlabel \"$xlabel\" \n" if (defined($xlabel));
-        $gnuplot_input .= "set ylabel \"$ylabel\" \n" if (defined($ylabel));
+        $gnuplot_input .= "set title  \"$title\"          \n" if (defined($title)) ;
+        $gnuplot_input .= "set xlabel \"$xlabel\" $extra_space_x \n" if (defined($xlabel));
+        $gnuplot_input .= "set ylabel \"$ylabel\" $extra_space_y \n" if (defined($ylabel));
     }
     # tics
     if (%xtics) {    
@@ -1212,25 +1290,29 @@ sub write_gnuplot_file {
 	$gnuplot_input .= 'set label "'.$label->{'text'}.'" at '.
 	    $label->{'xpos'}.','.$label->{'ypos'}.' '.$label->{'justify'};
         if ($target eq 'tex') {
-            $gnuplot_input .=' font "Helvetica,'.$pt.'pt"' ;
+	    $gnuplot_input .=' font "'.$font_properties->{'printname'}.','.$fontsize.'pt"' ;
         }
         $gnuplot_input .= $/;
     }
     if ($target eq 'tex') {
         $gnuplot_input .="set size 1,".$Apache::lonplot::plot{'height'}/$Apache::lonplot::plot{'width'}*1.38;
         $gnuplot_input .="\n";
-        }
+    }
     # curves
     $gnuplot_input .= 'plot ';
     for (my $i = 0;$i<=$#curves;$i++) {
 	$curve = $curves[$i];
 	$gnuplot_input.= ', ' if ($i > 0);
+	if ($target eq 'tex') {
+	    $curve->{'linewidth'} *= 2;
+	}
 	if (exists($curve->{'function'})) {
 	    $gnuplot_input.= 
 		$curve->{'function'}.' title "'.
 		$curve->{'name'}.'" with '.
                 $curve->{'linestyle'};
-            $gnuplot_input.= ' linewidth 4 ' if ($target eq 'tex');
+            $gnuplot_input.= ' linewidth '.$curve->{'linewidth'};
+
             if (($curve->{'linestyle'} eq 'points')      ||
                 ($curve->{'linestyle'} eq 'linespoints') ||
                 ($curve->{'linestyle'} eq 'errorbars')   ||
@@ -1260,12 +1342,12 @@ sub write_gnuplot_file {
 	    }
 	    #   write file
 	    print $fh $datatext;
-	    close ($fh);
+	    close($fh);
 	    #   generate gnuplot text
 	    $gnuplot_input.= '"'.$datafilename.'" title "'.
 		$curve->{'name'}.'" with '.
 		$curve->{'linestyle'};
-            $gnuplot_input.= ' linewidth 4 ' if ($target eq 'tex');
+            $gnuplot_input.= ' linewidth '.$curve->{'linewidth'};
             if (($curve->{'linestyle'} eq 'points')      ||
                 ($curve->{'linestyle'} eq 'linespoints') ||
                 ($curve->{'linestyle'} eq 'errorbars')   ||