User Tools

Site Tools


latexslideshow

This is an old revision of the document!


I found myself in a situation recently, where somebody wanted to create a Powerpoint slideshow for a hundred or so photos, all with the same header and footer. I thought it might be a lot easier to produce the file using Latex, and indeed it was. This is what I did.

The steps shown here include resizing and renaming the photos first.

I am assuming that you have all your images in the directory <tt>images</tt>

Resize photos

I used the Imagemagick <tt>mogrify</tt> command to bulk resize all the images. This command resizes all images to a maximum size of 1280×1024, but does not resize them if they are already smaller than that.

mogrify -resize 1280×1024\> images/*

Rename files sequentially

The following Perl script renames all the files sequentially. This makes it easier to include them in the Latex script. See [http://stackoverflow.com/questions/3211595/renaming-files-in-a-folder-to-sequential-numbers this Stackoverflow question] for more details.

<pre> #!/usr/bin/perl

use strict; use warnings;

use File::Temp qw/tempfile/;

my $dir = $ARGV[0]

  or die "Please specify directory as first argument";

opendir(my $dh, $dir) or die “can't opendir $dir: $!”;

# First rename any files that are already numeric while (my @files = grep { /^[0-9]+(\..*)?$/ } readdir($dh)) {

  for my $old (@files) {
      my $ext = $old =~ /(\.[^.]+)$/ ? $1 : '';
      my ($fh, $new) = tempfile(DIR => $dir, SUFFIX => $ext);
      close $fh;
      rename "$dir/$old", $new;
  }

}

rewinddir $dh; my $i; while (my $file = readdir($dh)) {

  next if $file =~ /\A\.\.?\z/;
  my $ext = $file =~ /(\.[^.]+)$/ ? $1 : '';
  rename "$dir/$file", sprintf("%s/%s%s", $dir, ++$i, $ext); 

} </pre>

Save the above script and run:

./rename.pl images

You should now have all your images as 1.jpg, 2.jpg and so on.

Convert to slideshow PDF

Save the following Latex script as <tt>slides.tex</tt>. Comments being with a <tt>%</tt>.

<pre> \documentclass{beamer} \usepackage[size=a4]{beamerposter} \usepackage{pdfpages}

\usefonttheme{professionalfonts} % using non standard fonts for beamer \usefonttheme{serif} % default family is serif \usepackage{fontspec} \usepackage{pgffor} \setmainfont{Source Sans Pro Light}

\usepackage{graphicx}

\begin{document}

% Uncomment the following to insert a title image without header and footer text % \begin{frame} % \transduration{1.5} % \transglitter % \begin{figure} % \includegraphics[height=20cm]{another-image-file} % \end{figure} % \end{frame}

\foreach \n in {1,…,11}{

  \begin{frame}
  \transduration{1.5} % Duration between slides
  \transglitter % Transition effect

% \includegraphics{logo}\hspace{2cm} % Optional: add a logo at the top of each slide

  {\LARGE\textbf{Here is a header for each page}}\newline
  \begin{figure}
      \includegraphics[height=14cm]{images/\n}
  \end{figure}
  Here is some small footer text
  \end{frame}

}

\end{document} </pre>

Run the script. <tt>xelatex</tt> is used so that fonts can be used:

xelatex slides.tex

This will produce <tt>slides.pdf</tt>. This file can be opened with Adobe Acrobat and shown in full screen to see the slideshow with transitions. As much as I dislike the proprietary Adobe viewer, it does show the slideshow well, which not many other PDF viewers seem to support.

latexslideshow.1544125828.txt.gz · Last modified: 2018/12/06 19:50 by abeverley