forked from mirrors/nixpkgs
* runLaTeX: support generation of Postscript.
* findLaTeXIncludes: handle the case where the input is already in the Nix store, and allow a different prefix to be used for searching included files. svn path=/nixpkgs/trunk/; revision=8268
This commit is contained in:
parent
c9c70b8d75
commit
ead48be229
|
@ -5,11 +5,15 @@ rec {
|
|||
|
||||
runLaTeX =
|
||||
{ rootFile
|
||||
, generatePDF ? true
|
||||
, generatePDF ? true # generate PDF, not DVI
|
||||
, generatePS ? false # generate PS in addition to DVI
|
||||
, extraFiles ? []
|
||||
, compressBlanksInIndex ? true
|
||||
, packages ? []
|
||||
, searchRelativeTo ? dirOf (toString rootFile) # !!! duplication
|
||||
}:
|
||||
|
||||
assert generatePDF -> !generatePS;
|
||||
|
||||
pkgs.stdenv.mkDerivation {
|
||||
name = "doc";
|
||||
|
@ -17,10 +21,10 @@ rec {
|
|||
builder = ./run-latex.sh;
|
||||
copyIncludes = ./copy-includes.pl;
|
||||
|
||||
inherit rootFile generatePDF extraFiles
|
||||
inherit rootFile generatePDF generatePS extraFiles
|
||||
compressBlanksInIndex;
|
||||
|
||||
includes = import (findLaTeXIncludes {inherit rootFile;});
|
||||
includes = import (findLaTeXIncludes {inherit rootFile searchRelativeTo;});
|
||||
|
||||
buildInputs = [ pkgs.tetex pkgs.perl ] ++ packages;
|
||||
};
|
||||
|
@ -28,6 +32,7 @@ rec {
|
|||
|
||||
findLaTeXIncludes =
|
||||
{ rootFile
|
||||
, searchRelativeTo ? dirOf (toString rootFile)
|
||||
}:
|
||||
|
||||
pkgs.stdenv.mkDerivation {
|
||||
|
@ -38,6 +43,8 @@ rec {
|
|||
|
||||
rootFile = toString rootFile; # !!! hacky
|
||||
|
||||
inherit searchRelativeTo;
|
||||
|
||||
# Forces rebuilds.
|
||||
hack = __currentTime;
|
||||
};
|
||||
|
|
|
@ -3,17 +3,12 @@ use File::Basename;
|
|||
|
||||
my $root = $ENV{"rootFile"};
|
||||
my $out = $ENV{"out"};
|
||||
my $path = $ENV{"searchRelativeTo"};
|
||||
my $store = $ENV{"NIX_STORE"};
|
||||
|
||||
open OUT, ">$out" or die;
|
||||
print OUT "[\n";
|
||||
|
||||
# We search for files relative to the root file. TODO: search
|
||||
# relative to the paths in $TEXINPUTS.
|
||||
die unless substr($root, 0, 1) eq "/";
|
||||
my ($x, $path, $y) = fileparse($root);
|
||||
|
||||
$path =~ s/\/$//;
|
||||
|
||||
my @workset = ();
|
||||
my %doneset = ();
|
||||
|
||||
|
@ -37,11 +32,18 @@ while (scalar @workset > 0) {
|
|||
|
||||
|
||||
# Print out the full path *and* its relative path to $root.
|
||||
|
||||
die if substr($fn, 0, length $path) ne $path;
|
||||
my $relFN = substr($fn, (length $path) + 1);
|
||||
|
||||
print OUT "$fn \"$relFN\"\n";
|
||||
if (substr($fn, 0, length $path) eq $path) {
|
||||
my $relFN = substr($fn, (length $path) + 1);
|
||||
print OUT "$fn \"$relFN\"\n";
|
||||
} else {
|
||||
my $base = basename $fn;
|
||||
my $x = substr($fn, 0, length($store) + 1);
|
||||
if (substr($fn, 0, length($store) + 1) eq "$store/") {
|
||||
$base = substr($base, 33);
|
||||
}
|
||||
print OUT "$fn \"$base\"\n";
|
||||
}
|
||||
|
||||
|
||||
# If this is a TeX file, recursively find include in $fn.
|
||||
|
|
|
@ -94,6 +94,11 @@ if test -n "$generatePDF"; then
|
|||
cp $rootNameBase.pdf $out
|
||||
else
|
||||
cp $rootNameBase.dvi $out
|
||||
if test -n "$generatePS"; then
|
||||
echo "CONVERTING TO POSTSCRIPT..."
|
||||
dvips $rootNameBase.dvi -o $out/$rootNameBase.ps
|
||||
echo
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue