* Find LaTeX document dependencies automatically by scanning for
\input and \documentclass. Copied from Maak (https://svn.cs.uu.nl:12443/repos/pkgs/texwrappers/trunk/chase-latex-inputs.pl). TODO: support \bibliography, \usepackage, \includegraphics, etc. svn path=/nixpkgs/trunk/; revision=3217
This commit is contained in:
parent
6fcee91442
commit
6b35cefbf8
56
pkgs/misc/tex/nix/find-includes.pl
Normal file
56
pkgs/misc/tex/nix/find-includes.pl
Normal file
@ -0,0 +1,56 @@
|
||||
use strict;
|
||||
use File::Basename;
|
||||
|
||||
my $root = $ENV{"rootFile"};
|
||||
my $out = $ENV{"out"};
|
||||
|
||||
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 = ();
|
||||
|
||||
push @workset, $root;
|
||||
|
||||
while (scalar @workset > 0) {
|
||||
|
||||
my $fn = pop @workset;
|
||||
next if (defined $doneset{$fn});
|
||||
|
||||
if (!open FILE, "< $fn") {
|
||||
print STDERR "(cannot open $fn, ignoring)\n";
|
||||
next;
|
||||
};
|
||||
|
||||
print OUT "$fn\n";
|
||||
$doneset{$fn} = 1;
|
||||
|
||||
while (<FILE>) {
|
||||
if (/\\input\{(.*)\}/) {
|
||||
my $fn2 = $1;
|
||||
if (substr($fn2, 0, 1) ne "/") {
|
||||
$fn2 = $path . "/" . $fn2;
|
||||
}
|
||||
push @workset, $fn2;
|
||||
} elsif (/\\documentclass(\[.*\])?\{(.*)\}/) {
|
||||
my $fn2 = $2;
|
||||
if (substr($fn2, 0, 1) ne "/") {
|
||||
$fn2 = $path . "/" . $fn2;
|
||||
}
|
||||
push @workset, $fn2 . ".cls";
|
||||
}
|
||||
# !!! also support \usepackage
|
||||
}
|
||||
|
||||
close FILE;
|
||||
}
|
||||
|
||||
print OUT "]\n";
|
||||
close OUT;
|
Loading…
Reference in New Issue
Block a user