summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/gridslides/compile.pl
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/gridslides/compile.pl
Initial commit
Diffstat (limited to 'macros/latex/contrib/gridslides/compile.pl')
-rwxr-xr-xmacros/latex/contrib/gridslides/compile.pl79
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);