diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/gridslides/compile.pl |
Initial commit
Diffstat (limited to 'macros/latex/contrib/gridslides/compile.pl')
-rwxr-xr-x | macros/latex/contrib/gridslides/compile.pl | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/macros/latex/contrib/gridslides/compile.pl b/macros/latex/contrib/gridslides/compile.pl new file mode 100755 index 0000000000..b488a08b38 --- /dev/null +++ b/macros/latex/contrib/gridslides/compile.pl @@ -0,0 +1,79 @@ +#!/usr/bin/perl +# Package: gridslides +# Description: LaTeX package to create free form slides with blocks placed on a grid +# File: compile.pl +# Author: Daniel Mendler <mail@daniel-mendler.de> +# Version: 0.1.1 +# Date: 2017-11-28 +# License: GPL2 or LPPL1.3 at your option +# Homepage: https://github.com/minad/gridslides + +use strict; +use Digest::MD5 qw(md5_hex); +use File::Slurp qw(read_file write_file); + +sub load_file { + my ($file) = @_; + my $code = read_file($file); + $code =~ /\A(.*?\\begin\{document\})/s; + return ($1, $'); +} + +sub compile_slide { + my ($format, $slide, $body) = @_; + + my $code = "%&$format\n\\begin{document}\\setcounter{slide}{$slide}\n$body\n\\end{document}\n"; + my $hash = md5_hex($code); + my $pdf = "$hash.pdf"; + unless (-e $pdf) { + my $tex = "$hash.tex"; + write_file($tex, $code); + print "Compiling slide $slide - $tex...\n"; + `pdflatex -interaction=batchmode $tex; biber $hash; pdflatex -interaction=batchmode $tex; pdflatex -interaction=batchmode $tex`; + } + + return $pdf; +} + +my $once = 0; +my $file; +if ($ARGV[0] eq "--once") { + $file = $ARGV[1]; + $once = 1; +} else { + $file = $ARGV[0]; +} + +my $result = $file; +$result =~ s/\.tex\Z//g; +$result .= '.pdf'; + +my $out = 'output'; +mkdir($out); +chdir($out); +$ENV{TEXINPUTS}='..:.:'; +$ENV{BIBINPUTS}='..'; + +my ($header, $body) = load_file "../$file"; +my $format = "header$file"; +write_file("$format.tex", "$header\n\\end{document}"); +`pdftex -interaction=batchmode -ini -jobname="$format" '&pdflatex' mylatexformat.ltx "$format.tex"`; + +do { + my @slides = (); + my $slide = 1; + while ($body =~ /(\\maketitle|\\begin\{.*?slide\}.*?\\end\{.*?slide\})/sg) { + my $pdf = compile_slide "$format", $slide, $1; + push @slides, $pdf if (-e $pdf); + ++$slide; + } + + print "Joining $result...\n"; + `pdfjoin -q -o $result @slides`; + rename $result, "../$result"; + + unless ($once) { + `inotifywait -e modify ../$file`; + (my $unused, $body) = load_file "../$file"; + } +} until ($once); |