Projekt

Allgemein

Profil

« Zurück | Weiter » 

Revision 4d4da297

Von Moritz Bunkus vor mehr als 2 Jahren hinzugefügt

  • ID 4d4da297117a86f93597728854e4b02481e384e7
  • Vorgänger fa77d973
  • Nachfolger c686f4cd

LaTeX: TeX-Var-Verzeichnis permanent im users-Verzeichnis belassen

Bisher lag es bei PDF-Erzeugung im temporären Verzeichnis
users/kivitendo-print-…, das anschließend wieder gelöscht wurde. Das
bedeutete, dass Font-Caching bei jeder PDF-Erstellung erfolgen
musste.

Nach dieser Umstellung wird ein Verzeichnis …/users/texmf/var angelegt
& die entsprechenden Umgebungsvariablen so gesetzt, dass TeX dort die
temporären Dateien ablegt. Dieses Verzeichnis kann dauerhaft bestehen
bleiben, sodass tatsächlich gecachet wird.

Unterschiede anzeigen:

.gitignore
/users/session_files/
/users/templates-cache/
/users/templates-cache-for-tests/
/users/texmf/
/users/xvfb_display
/webdav/*
crm
SL/Template/LaTeX.pm
use Cwd;
use English qw(-no_match_vars);
use File::Basename;
use File::Path;
use File::Spec;
use File::Temp;
use HTML::Entities ();
use List::MoreUtils qw(any);
......
return join(':', grep({ $_ } ('.', $exe_dir . '/texmf', $exe_dir . '/users', $templates_path, $ENV{TEXINPUTS})), '');
}
sub _setup_env {
my ($self) = @_;
my $userspath = $::lx_office_conf{paths}->{userspath};
$ENV{openin_any} = "r";
$ENV{TEXINPUTS} = $self->_texinputs_path($self->{form}->{templates});
$ENV{TEXMFHOME} = File::Spec->rel2abs($userspath . "/texmf", SL::System::Process::exe_dir());
$ENV{TEXMFVAR} = $ENV{TEXMFHOME} . "/var";
File::Path::make_path($ENV{TEXMFVAR});
}
sub convert_to_postscript {
my ($self) = @_;
my ($form, $userspath) = ($self->{"form"}, $self->{"userspath"});
# Convert the tex file to postscript
local $ENV{TEXINPUTS} = $self->_texinputs_path($form->{templates});
local ($ENV{TEXINPUTS}, $ENV{TEXMFHOME}, $ENV{TEXMFVAR}, $ENV{openin_any});
$self->_setup_env;
if (!chdir("$userspath")) {
$self->{"error"} = "chdir : $!";
......
$form->{tmpfile} =~ s/\Q$userspath\E\///g;
my $latex = $self->_get_latex_path();
my $old_home = $ENV{HOME};
my $old_openin_any = $ENV{openin_any};
$ENV{HOME} = $userspath =~ m|^/| ? $userspath : getcwd();
$ENV{openin_any} = "r";
for (my $run = 1; $run <= 2; $run++) {
if (system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
......
die "system call to $latex failed: $!";
}
if ($?) {
$ENV{HOME} = $old_home;
$ENV{openin_any} = $old_openin_any;
$self->{"error"} = $form->cleanup($latex);
return 0;
}
......
if (system("dvips $form->{tmpfile} -o -q > /dev/null") == -1) {
die "system call to dvips failed: $!";
}
$ENV{HOME} = $old_home;
$ENV{openin_any} = $old_openin_any;
if ($?) {
$self->{"error"} = "dvips : $?";
......
my ($form, $userspath) = ($self->{"form"}, $self->{"userspath"});
# Convert the tex file to PDF
local $ENV{TEXINPUTS} = $self->_texinputs_path($form->{templates});
local ($ENV{TEXINPUTS}, $ENV{TEXMFHOME}, $ENV{TEXMFVAR}, $ENV{openin_any});
$self->_setup_env;
if (!chdir("$userspath")) {
$self->{"error"} = "chdir : $!";
......
$form->{tmpfile} =~ s/\Q$userspath\E\///g;
my $latex = $self->_get_latex_path();
my $old_home = $ENV{HOME};
my $old_openin_any = $ENV{openin_any};
$ENV{HOME} = $userspath =~ m|^/| ? $userspath : getcwd();
$ENV{openin_any} = "r";
for (my $run = 1; $run <= 2; $run++) {
if (system("${latex} --interaction=nonstopmode $form->{tmpfile} " .
......
}
if ($?) {
$ENV{HOME} = $old_home;
$ENV{openin_any} = $old_openin_any;
$self->{error} = $form->cleanup($latex);
return 0;
}
}
$ENV{HOME} = $old_home;
$ENV{openin_any} = $old_openin_any;
$form->{tmpfile} =~ s/tex$/pdf/;
$self->cleanup();

Auch abrufbar als: Unified diff