--- loncom/xml/londefdef.pm 2007/01/17 10:09:26 1.351 +++ loncom/xml/londefdef.pm 2007/01/22 11:28:08 1.353 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Tags Default Definition Module # -# $Id: londefdef.pm,v 1.351 2007/01/17 10:09:26 foxr Exp $ +# $Id: londefdef.pm,v 1.353 2007/01/22 11:28:08 foxr Exp $ # # # Copyright Michigan State University Board of Trustees @@ -1570,13 +1570,15 @@ sub end_a { $currentstring .= $token->[2]; } if ($target eq 'tex') { - my $a=&Apache::lonxml::get_param('href',$parstack,$safeeval,undef,1); - my $b=&Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1); - if ($a=~/\S/) { - $a=~s/([^\\])%/$1\\\%/g; - $currentstring .= ' ({\tt URI:'.&Apache::lonxml::latex_special_symbols($a).'})'; - } elsif ($b=~/\S/) { - $currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($b).'})'; + my $href = + &Apache::lonxml::get_param('href',$parstack,$safeeval,undef,1); + my $name = + &Apache::lonxml::get_param('name',$parstack,$safeeval,undef,1); + if ($href =~ /\S/) { + $href =~ s/([^\\])%/$1\\\%/g; + $currentstring .= ' ({\tt URI:'.&Apache::lonxml::latex_special_symbols($href).'})'; + } elsif ($name =~ /\S/) { + $currentstring .= ' ({\tt Anchor:'.&Apache::lonxml::latex_special_symbols($name).'})'; } else { $currentstring.=''; } @@ -2877,47 +2879,10 @@ sub start_img { $size=~s/,$/]/; $currentstring .= '\graphicspath{{'.$path.'}}' .'\includegraphics'.$size.'{'.$file.'} '; - - # 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.'}'; - } elsif ($latex_rendering eq "parbox") { - $currentstring = '\begin{minipage}[l]{'.$width_param.'mm}' - .$currentstring.'\end{minipage}'; - } elsif ($latex_rendering eq "wrapfigure" - || $latex_rendering ne 'none') { # wrapfig render - $currentstring = - '\begin{wrapfigure}{l}{'.$width_param.'mm}' - .'\scalebox{1.0}{'.$currentstring.'}\end{wrapfigure}'; - } - } elsif ($align eq "right") { - if ($latex_rendering eq "parpic") { - $currentstring = '\parpic[r]{'.$currentstring.'}'; - } elsif ($latex_rendering eq "parbox") { - $currentstring = '\begin{minipage}[r]{'.$width_param.'mm}' - .$currentstring.'\end{minipage}'; - } elsif ($latex_rendering eq "wrapfigure" - || $latex_rendering ne 'none') { # wrapfig render - $currentstring = - '\begin{wrapfigure}{r}{'.$width_param.'mm}' - .'\scalebox{1.0}{'.$currentstring.'}\end{wrapfigure}'; - } - } else { # Bottom is also default. - # $currentstring = '\raisebox{'.$height_param.'mm}{'.$currentstring.'}'; - } + $currentstring = &align_latex_image($align, $latex_rendering, + $currentstring, + $width_param, $height_param); + } else { &Apache::lonxml::debug("$src does not exist"); #original image file doesn't exist so check the alt attribute @@ -4387,6 +4352,62 @@ sub LATEX_length { return $value; } +# Wrap image 'stuff' inside of the LaTeX required to implement +# alignment: +# align_tex_image(align, latex_rendering, image) +# Where: +# align - The HTML alignment specification. +# latex_rendering - rendering hint for latex. +# image - The LaTeX needed to insert the image itsef. +# width,height - dimensions of the image. +# +sub align_latex_image { + my ($align, $latex_rendering, $image, $width, $height) = @_; + my $currentstring; # The result. + + # 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.'mm}{'.$image.'}'; + } elsif (($align eq "center") || ($align eq "middle")) { # Being kind + my $offset = $height/2; + $currentstring = '\raisebox{-'.$offset.'mm}{'.$image.'}'; + } elsif ($align eq "left") { + if ($latex_rendering eq "parpic") { + $currentstring = '\parpic[l]{'.$image.'}'; + } elsif ($latex_rendering eq "parbox") { + $currentstring = '\begin{minipage}[l]{'.$width.'mm}' + .$image.'\end{minipage}'; + } elsif ($latex_rendering eq "wrapfigure" + || $latex_rendering ne 'none') { # wrapfig render + $currentstring = + '\begin{wrapfigure}{l}{'.$width.'mm}' + .'\scalebox{1.0}{'.$image.'}\end{wrapfigure}'; + } + } elsif ($align eq "right") { + if ($latex_rendering eq "parpic") { + $currentstring = '\parpic[r]{'.$image.'}'; + } elsif ($latex_rendering eq "parbox") { + $currentstring = '\begin{minipage}[r]{'.$width.'mm}' + .$image.'\end{minipage}'; + } elsif ($latex_rendering eq "wrapfigure" + || $latex_rendering ne 'none') { # wrapfig render + $currentstring = + '\begin{wrapfigure}{r}{'.$width.'mm}' + .'\scalebox{1.0}{'.$image.'}\end{wrapfigure}'; + } + } else { # Bottom is also default. + # $currentstring = '\raisebox{'.$height.'mm}{'.$image.'}'; + $currentstring = $image; + } + return $currentstring; +} # is_inside_of $tagstack $tag # This sub returns true if the current state of Xml processing