--- loncom/xml/londefdef.pm 2004/10/18 22:02:02 1.243 +++ loncom/xml/londefdef.pm 2004/12/27 14:06:32 1.248 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.243 2004/10/18 22:02:02 albertel Exp $ +# $Id: londefdef.pm,v 1.248 2004/12/27 14:06:32 foxr Exp $ # # # Copyright Michigan State University Board of Trustees @@ -66,6 +66,7 @@ sub initialize_londefdef { undef(@Apache::londefdef::description); @Apache::londefdef::DD=(0); @Apache::londefdef::DT=(0); + @Apache::londefdef::seenDT=(0); $Apache::londefdef::list_index=0; } @@ -154,7 +155,7 @@ sub start_html { $currentstring = &Apache::lonxml::xmlbegin(); } elsif ($target eq 'tex') { @Apache::londefdef::table = (); - $currentstring .= '\documentclass[letterpaper]{book}'; + $currentstring .= '\documentclass[letterpaper]{article}'; if ($ENV{'form.latex_type'}=~'batchmode') {$currentstring .='\batchmode';} $currentstring .= '\newcommand{\keephidden}[1]{}'. '\renewcommand{\deg}{$^{\circ}$}'. @@ -162,6 +163,7 @@ sub start_html { '\usepackage{textcomp}'. '\usepackage{makeidx}'. '\usepackage[dvips]{graphicx}'. + '\usepackage{picins}'. '\usepackage{epsfig}'. '\usepackage{calc}'. '\usepackage{amsmath}'. @@ -478,6 +480,7 @@ sub end_accessrule { sub start_body { my ($target,$token,$tagstack,$parstack,$parser,$safeeval) = @_; my $currentstring = ''; + if ($target eq 'web') { if ($Apache::lonhomework::parsing_a_problem) { &Apache::lonxml::warning(" tag found inside of tag this can cause problems."); @@ -529,12 +532,19 @@ sub start_body { $token->[2]->{'onunload'}=&Apache::lonmenu::unloadevents(). ';'.$onUnload; - $currentstring .= '<'.$token->[1]; + if ($ENV{'request.state'} ne 'construct') { + $currentstring .= '<'.$token->[1]; + } foreach (keys %{$token->[2]}) { $currentstring.=' '.$_.'="'.$token->[2]->{$_}.'"'; } - $currentstring.='>'; + if ($ENV{'request.state'} ne 'construct') { + $currentstring.='>'; + } if ($ENV{'request.state'} ne 'published') { + my $remote=($ENV{'environment.remote'} ne 'off'); + $currentstring=&Apache::loncommon::bodytag(undef,undef, + $currentstring,$remote); $currentstring.=(< @@ -1701,6 +1711,7 @@ sub start_dl { push(@Apache::londefdef::description,[]); $Apache::londefdef::DD[$Apache::londefdef::DL]=0; $Apache::londefdef::DT[$Apache::londefdef::DL]=0; + $Apache::londefdef::seenDT[$Apache::londefdef::DL]=0; } return $currentstring; } @@ -1720,6 +1731,7 @@ sub end_dl { $currentstring.='\end{description}'; delete($Apache::londefdef::DD[$Apache::londefdef::DL]); delete($Apache::londefdef::DT[$Apache::londefdef::DL]); + delete($Apache::londefdef::seenDT[$Apache::londefdef::DL]); $Apache::londefdef::DL--; } return $currentstring; @@ -1736,6 +1748,7 @@ sub start_dt { if ($Apache::londefdef::DD[-1]) { &end_dd(@_); } &Apache::lonxml::startredirection(); $Apache::londefdef::DT[-1]++; + $Apache::londefdef::seenDT[-1]=1; } return $currentstring; } @@ -1748,7 +1761,7 @@ sub end_dt { } elsif ($target eq 'tex') { if ($Apache::londefdef::DT[-1]) { my $data=&item_cleanup(); - push(@{$Apache::londefdef::description[-1]},'\item['.$data.']'); + push(@{$Apache::londefdef::description[-1]},'\item['.$data.'] \strut \vskip 0mm'); $Apache::londefdef::DT[-1]--; } } @@ -1771,6 +1784,9 @@ sub start_dd { } elsif ($target eq 'tex') { if ($Apache::londefdef::DT[-1]) { &end_dt(@_); } if ($Apache::londefdef::DD[-1]) { &end_dd(@_);} + if (!$Apache::londefdef::seenDT[-1]) { + push(@{$Apache::londefdef::description[-1]},'\item[\strut] \strut \vskip 0mm '); + } push(@{$Apache::londefdef::description[-1]},''); $Apache::londefdef::description[-1]->[-1].=' \strut '; $Apache::londefdef::DD[-1]++; @@ -2428,13 +2444,46 @@ sub start_img { $currentstring.='[IMAGE: '.$alttag.']'; } } elsif ($target eq 'tex') { + # + # The alignment will require some superstructure to be put around + # the \includegraphics stuff. At present we can only partially + # simulate the alignments offered by html. + # + # + my $align = lc(&Apache::lonxml::get_param('align', + $parstack, + $safeeval, + undef,1)); + if(!$align) { + $align = "bottom"; # This is html's default so it's ours too. + } + # + &Apache::lonxml::debug("Alignemnt = $align"); + # LaTeX's image/text wrapping is really bad since it wants to + # make figures float. + # The user has the optional parameter (applicable only to l/r + # alignment to use the picins/parpic directive to get wrapped text + # this is also imperfect.. that's why we give them a choice... + # so they can't yell at us for our choice. + # + my $latex_rendering = &Apache::lonxml::get_param('TeXwrap', + $parstack, + $safeeval, + undef,0); + &Apache::lonxml::debug("LaTeX rendering = $latex_rendering"); + if(!$latex_rendering) { + $latex_rendering = "parbox"; + } + &Apache::lonxml::debug("LaTeX rendering = $latex_rendering"); + my $oldSRC=$src; $oldSRC=~s/\.(gif|jpg|png)$/\.eps/; $src=&Apache::lonnet::filelocation($Apache::lonxml::pwd[-1],$src); #if original gif/jpg/png file exist do following: if (-e $src) { #what is the image size? - my $width_param=&image_size($src,$scaling,$parstack,$safeeval); + my $width_param=&image_width($src,$scaling,$parstack,$safeeval); + my $height_param=&image_height($src,$scaling,$parstack,$safeeval); my ($file,$path)=&file_path($src); my $newsrc = $src; $newsrc =~ s/\.(gif|jpg|png)$/.eps/i; @@ -2444,7 +2493,8 @@ sub start_img { if (-e $newsrc) { #eps counterpart for image exist if ($path) { - $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} '; + $currentstring .= '\graphicspath{{'.$path.'}}' + .'\includegraphics[width='.$width_param.' mm,height='.$height_param.'mm]{'.$file.'} '; } } else { #there is no eps counterpart for image - check for ps one @@ -2453,13 +2503,42 @@ sub start_img { #ps counterpart for image exist $file =~ s/\.eps$/\.ps/; if ($path) { - $currentstring .= '\vskip 1 mm \noindent\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} '; + $currentstring .= '\graphicspath{{'.$path.'}}\includegraphics[width='.$width_param.' mm]{'.$file.'} '; } } else { #care about eps dynamical generation - $currentstring.='\vskip 1 mm '.&eps_generation($src,$file,$width_param); + $currentstring.=&eps_generation($src,$file,$width_param); } } + # If there's an alignment specification we need to honor it here. + # For the horizontal alignments, we will also honor the + # value of the latex specfication. The default is parbox, + # and that's used for illegal values too. + # + # Even though we set a default alignment value, the user + # could have given us an illegal value. In that case we + # just use the default alignment of bottom.. + if ($align eq "top") { + $currentstring = '\raisebox{-'.$height_param.'mm}{'.$currentstring.'}'; + } elsif (($align eq "center") || ($align eq "middle")) { # Being kind + my $offset = $height_param/2; + $currentstring = '\raisebox{-'.$offset.'mm}{'.$currentstring.'}'; + } elsif ($align eq "left") { + if ($latex_rendering eq "parpic") { + $currentstring = '\parpic[l]{'.$currentstring.'}'; + } else { # parbox rendering + $currentstring = '\newline'."\n".'\parbox{'.$width_param.'mm}{'.$currentstring.'}'; + } + } elsif ($align eq "right") { + if ($latex_rendering eq "parpic") { + $currentstring = '\parpic[r]{'.$currentstring.'}'; + } else { # parbox rendering. + $currentstring = '\parbox{'.$width_param.'mm}{\begin{flushright}' + .$currentstring.'\end{flushright}} \newline'."\n"; + } + } else { # Bottom is also default. + # $currentstring = '\raisebox{'.$height_param.'mm}{'.$currentstring.'}'; + } } else { #original image file doesn't exist so check the alt attribute my $alt = @@ -3684,12 +3763,25 @@ sub image_size { $width_param = $TeXwidth; } } elsif ($TeXheight ne '') { - $width_param = $TeXheight/$height_param*$width_param; + $height_param = $TeXheight; + $width_param = $TeXheight/$height_param*$width_param; } elsif ($width ne '') { $width_param = $width*$scaling; } if ($width_param > $ENV{'form.textwidth'}) {$width_param =0.95*$ENV{'form.textwidth'}} - return $width_param; + return ($height_param, $width_param); +} + +sub image_width { + my ($height, $width) = &image_size(@_); + return $width; +} +# Not yet 100% sure this is correct in all circumstances.. +# due to my uncertainty about mods to image_size. +# +sub image_height { + my ($height, $width) = &image_size(@_); + return $height; } sub eps_generation {