Vor dem Ausführen von (pdf)latex das HOME auf das users-Verzeichnis setzen
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 27 Dec 2010 12:12:35 +0000 (13:12 +0100)
committerMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 27 Dec 2010 12:12:35 +0000 (13:12 +0100)
Es gibt Situationen, in denen (pdf)latex Fontdateien für bestimmte
Schriftgrößen on the fly erzeugen muss. Diese werden in ~/.texmf-var
gespeichert. Deshalb muss das Verzeichnis, das (pdf)latex für HOME
hält, vom Webserver schreibbar sein.

Verhält sich analog zur Situation mit Umwandlung von
OpenDocument-Vorlagen nach PDF; da muss OpenOffice nach
~/.openoffice.org schreiben.

SL/Template/LaTeX.pm

index 4bfef01..6b18ad0 100644 (file)
@@ -4,6 +4,8 @@ use parent qw(SL::Template::Simple);
 
 use strict;
 
+use Cwd;
+
 sub new {
   my $type = shift;
 
@@ -374,11 +376,14 @@ sub convert_to_postscript {
   $form->{tmpfile} =~ s/\Q$userspath\E\///g;
 
   my $latex = $self->_get_latex_path();
+  my $old_home = $ENV{HOME};
+  $ENV{HOME}   = $userspath =~ m|^/| ? $userspath : getcwd() . "/" . $userspath;
 
   for (my $run = 1; $run <= 2; $run++) {
     system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
            "> $form->{tmpfile}.err");
     if ($?) {
+      $ENV{HOME} = $old_home;
       $self->{"error"} = $form->cleanup();
       $self->cleanup();
       return 0;
@@ -388,6 +393,8 @@ sub convert_to_postscript {
   $form->{tmpfile} =~ s/tex$/dvi/;
 
   system("dvips $form->{tmpfile} -o -q > /dev/null");
+  $ENV{HOME} = $old_home;
+
   if ($?) {
     $self->{"error"} = "dvips : $!";
     $self->cleanup();
@@ -415,17 +422,21 @@ sub convert_to_pdf {
   $form->{tmpfile} =~ s/\Q$userspath\E\///g;
 
   my $latex = $self->_get_latex_path();
+  my $old_home = $ENV{HOME};
+  $ENV{HOME}   = $userspath =~ m|^/| ? $userspath : getcwd() . "/" . $userspath;
 
   for (my $run = 1; $run <= 2; $run++) {
     system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
            "> $form->{tmpfile}.err");
     if ($?) {
+      $ENV{HOME} = $old_home;
       $self->{"error"} = $form->cleanup();
       $self->cleanup();
       return 0;
     }
   }
 
+  $ENV{HOME} = $old_home;
   $form->{tmpfile} =~ s/tex$/pdf/;
 
   $self->cleanup();