Как автоматически создать PDF-презентацию для каждой доступной темы Beamer?

Как автоматически создать PDF-презентацию для каждой доступной темы Beamer?

Вместо того, чтобы менять тему вручную и компилировать ее для каждой доступной темы, есть ли более простой способ сделать это, чтобы я мог автоматически получить PDF-презентацию для каждой доступной темы?

решение1

вот скрипт оболочки, который создает основной документ main.tex с двумя примерами страниц всех тем текущего TL2012. Его можно модифицировать для использования под Windows. Запустите скрипт в пустом каталоге. Полный документ находится по адресуhttp://perce.de/temp/main.pdfи это первая страница:

введите описание изображения здесь

#!/bin/sh
DIR=`kpsewhich beamerthemeBerlin.sty`
DIR=`dirname $DIR`
#THEME=`echo $DIR | sed -e 's/beamertheme//'`

CreateExaDocument() {
  cat <<End_Of_File > $THEMESHORT.tex
  \\documentclass{beamer}
  \\usetheme{$THEMESHORT}
  \\title{A Beamer test with Theme ``$THEMESHORT''}
  \\author{Me}
  \\date{today}
  \\institute{Zentraleinrichtung Datenverarbeitung}
  \\begin{document}
  \\maketitle
  \\begin{frame}{Frametitle}{Framesubtitle}
  foo bar baz
  \\end{frame} 
  \\end{document} 
End_Of_File
}

for FILE in `ls --hide=compatibility $DIR` ; do
  THEME=`basename $FILE .sty`
  THEMESHORT=`echo $THEME | sed -e 's/beamertheme//'`
  echo $THEMESHORT
  CreateExaDocument
  pdflatex $THEMESHORT
  pdflatex $THEMESHORT
  rm *.aux *.toc *.log *.out *.nav *.snm
done

# now we crate a new PDF doc with all examples
rm -f main.pdf
echo "\\documentclass[a4paper]{article}" > main.tex
echo "\\usepackage{graphicx,geometry}" >> main.tex
echo "\\geometry{margin=10mm}" >> main.tex
echo "\\parindent=0pt" >> main.tex
echo "\\begin{document}" >> main.tex
for FILE in `ls *.pdf` ; do
    echo "\\frame{\\includegraphics[width=0.49\\linewidth,page=1]{$FILE}}" >> main.tex
    echo "\\hfill\\frame{\\includegraphics[width=0.49\\linewidth,page=2]{$FILE}}" >> main.tex
    echo "\\par\\bigskip" >> main.tex
done    
echo "\\end{document}" >> main.tex
pdflatex main #--output-directory=/tmp main
pdflatex main #--output-directory=/tmp main
rm *.aux *.log 

решение2

Вот небольшой perlскрипт (мой второй за 2 дня, обещаю, я не зациклен... сильно), который вы можете запустить следующим образом

perl createBeamer.plx slides.tex

или вы можете вызвать его с любым количеством файлов

perl createBeamer.plx file1.tex file2.tex file3.tex

Обратите внимание, что в каждом из ваших файлов есть несколько необходимых строк .tex, подробно описанных ниже.

Вам просто нужно указать, какие темы вы хотите использовать в массиве @themes, и тогда вы получите массу пользы pdfsот запуска одного скрипта-магии:)

создатьBeamer.plx

#!/usr/bin/perl

use strict;
use warnings;

my @themes=("default","Rochester","CambridgeUS","Boadilla","Warsaw","AnnArbor");
my $tmptheme='';
my $filename='';

while (@ARGV)
{
    # get filename from arguments
    $filename = shift @ARGV; 

    # make sure file exists
    if(-e $filename)
    {
        # strip .tex extension
        $filename =~ s/\.tex//; 

        # loop through the themes
        foreach $tmptheme (@themes)
        {
            system("pdflatex","\\def\\mytheme{$tmptheme}\\input{$filename}");
            system("cp","$filename.pdf","$filename$tmptheme.pdf");
        }
    }
    else
    {
        print "File does NOT exist, please try again\n";
    }
}

слайды.tex

\documentclass{beamer}

\ifdefined\mytheme
\usetheme{\mytheme}
\else
% default theme
  \usetheme{Warsaw}
\fi

\begin{document}

\begin{frame}
  \frametitle{Fingernails are pretty}
  hello world
\end{frame}

\end{document}

Скриншот

РЕДАКТИРОВАТЬ

Если вам нужен немного более динамичный подход, то вы можете читать темы бимера прямо с их местоположения.

# location of themes
my $directory="/usr/local/texlive/2012/texmf-dist/tex/latex/beamer/themes/theme/";
opendir (DIR, $directory) or die $!;
while (my $file = readdir(DIR)) {
          # remove beamertheme from the name
          $file =~ s/beamertheme//;

          # remove .sty extension
          $file =~ s/\.sty//;

          # store it
          push(@themes,$file);
              }

и просто закомментируйте (или удалите) предыдущее определение @themes.

Конечно, если вы хотите сделать его невероятно портативным, вы можете каждый раз выполнять поиск в каталоге.

решение3

Недостаток такого подхода: список тем необходимо обновлять всякий раз, когда на глобусе появляется новая тема.

  1. batch.batпринимает 2 аргумента: %1для имени темы и %2для имени включаемого файла.

    rem batch.bat
    echo off
    
    del %1.pdf
    
    pdflatex -draftmode -interaction=batchmode --jobname=%1 "\newcommand\mytheme{%1}\input{%2}"
    pdflatex -interaction=batchmode --jobname=%1 "\newcommand\mytheme{%1}\input{%2}"
    
    for %%x in (aux log out toc nav snm) do (del %1.%%x)
    
  2. automator.texдолжен быть скомпилирован с pdflatex --shell-escape automator.

    % automator.tex
    \documentclass{article}
    \usepackage{filecontents}
    \begin{filecontents*}{dummy.tex}
    \documentclass{beamer}
    \usetheme{\mytheme}
    \title{Beamer Tutorial}
    \subtitle{in less than 10 minutes}
    \author{Garbage Collector}
    \date{\today}
    \begin{document}
        \maketitle
        \begin{frame}{Introduction}
    
        \end{frame}
    \end{document}
    \end{filecontents*}
    
    \usepackage{tikz}
    \begin{document}
    \foreach \x in {default,Rochester,CambridgeUS,Boadilla,Warsaw,AnnArbor}
        {\immediate\write18{batch \x\space dummy}}
    \end{document}
    

решение4

  1. Создайте шаблон Beamer с помощью \mythemeмакроса:

    % template.tex
    \documentclass{beamer}
    \usetheme{\mytheme}
    \title{Beamer Tutorial}
    \subtitle{using \mytheme\ theme}
    \author{Garbage Collector}
    \date{\today}
    \begin{document}
        \maketitle
        \begin{frame}{Introduction}
            Stick together team and hold this position!
        \end{frame}
        \begin{frame}{Special Relativity}
            \[E\neq mc^2\]
        \end{frame}
        \begin{frame}{General Relativity}
            \[pV=nRT\]
        \end{frame}
    \end{document}
    
  2. Создайте пакетный файл для установки всех доступных тем Beamer:

    rem makelist.bat
    
    echo off
    
    rem %1: output file name with extension
    
    dir /b C:\texlive\2012\texmf-dist\tex\latex\beamer\themes\theme\*.sty > %1
    
    dir /b C:\texlive\2012\texmf-dist\tex\latex\beamer\themes\theme\compatibility\*.sty >> %1
    
  3. Создайте пакетный файл для компиляции шаблона Beamer с каждой доступной темой:

    rem createslide.bat
    
    echo off
    
    rem %1: theme name
    rem %2: Beamer input file name with or without extension
    
    del %1.pdf
    
    pdflatex -draftmode -interaction=batchmode --jobname=%1 "\newcommand\mytheme{%1}\input{%2}"
    pdflatex -interaction=batchmode --jobname=%1 "\newcommand\mytheme{%1}\input{%2}"
    
    for %%x in (aux log out toc nav snm) do (del %1.%%x)
    
  4. Создайте еще один входной файл TeX для автоматического создания альбома или каталога Beamer:

    % automator.tex
    \documentclass{article}
    \usepackage{pdfpages}
    
    \makeatletter
    \def\trim beamertheme{}
    \def\theme{\expandafter\trim \filename@base}
    
    \def\MakeThemeList#1{\immediate\write18{makelist #1}}
    
    \newread\reader
    
    % #1: theme list filename, #2: beamer template filename
    \def\CreateAPresentationForEachTheme#1#2{%
    \openin\reader=#1\relax
    \loop
        \read\reader to \themestyle
        \unless\ifeof\reader
            \filename@parse{\themestyle}%
            \immediate\write18{createslide \theme\space #2}%
    \repeat
    \closein\reader}
    
    
    % #1: theme list filename
    \def\CreateAlbum#1{%
    \openin\reader=#1\relax
    \loop
        \read\reader to \themestyle
        \unless\ifeof\reader
            \filename@parse{\themestyle}%
            \includepdf[pages=-,nup=2x2,delta=10pt 10pt,landscape]{\theme}%
    \repeat
    \closein\reader}
    
    \makeatother
    
    \begin{document}
    \MakeThemeList{themelist.txt}
    \CreateAPresentationForEachTheme{themelist.txt}{template.tex}
    \CreateAlbum{themelist.txt}
    \end{document}
    
  5. Выполнить pdflatex --shell-escape automator.texдля создания каталога Beamer.

    введите описание изображения здесь

Связанный контент