Wie erstelle ich automatisch eine PDF-Präsentation für jedes verfügbare Beamer-Thema?

Wie erstelle ich automatisch eine PDF-Präsentation für jedes verfügbare Beamer-Thema?

Gibt es eine einfachere Möglichkeit, das Design manuell zu ändern und für jedes verfügbare Design zu kompilieren, sodass ich automatisch eine PDF-Präsentation für jedes verfügbare Design erhalte?

Antwort1

hier ist ein Shell-Skript, das ein Hauptdokument main.tex mit zwei Beispielseiten aller Themen des aktuellen TL2012 erstellt. Es kann für die Verwendung unter Windows angepasst werden. Führen Sie das Skript in einem leeren Verzeichnis aus. Das vollständige Dokument finden Sie unterhttp://perce.de/temp/main.pdfund dies ist die erste Seite:

Bildbeschreibung hier eingeben

#!/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 

Antwort2

Hier ist ein kleines perlSkript (mein zweites in 2 Tagen, ich verspreche, ich bin nicht besessen... sehr), das Sie wie folgt ausführen können

perl createBeamer.plx slides.tex

oder Sie können es mit einer beliebigen Anzahl von Dateien aufrufen

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

Beachten Sie, dass jede Ihrer Dateien einige erforderliche Zeilen enthält .tex, die unten aufgeführt sind.

Sie müssen nur angeben, welche Themen Sie im Array verwenden möchten @themes, und dann erhalten Sie eine ganze Menge pdfsvon der Ausführung eines Skripts - Magie:)

erstelleBeamer.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";
    }
}

Folien.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}

Bildschirmfoto

BEARBEITEN

Wenn Sie es etwas dynamischer angehen möchten, können Sie die Beamer-Themen direkt von ihrem Standort aus einlesen.

# 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);
              }

und kommentieren Sie einfach die vorherige Definition von aus (oder entfernen Sie sie) @themes.

Wenn Sie es besonders portabel machen möchten, können Sie natürlich jedes Mal eine Verzeichnissuche durchführen.

Antwort3

Der Nachteil dieses Ansatzes: Die Themenliste muss aktualisiert werden, wenn ein neues Thema auf dem Globus existiert.

  1. batch.batakzeptiert 2 Argumente: %1für den Designnamen und %2für den einzuschließenden Dateinamen.

    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.texmuss mit kompiliert werden 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}
    

Antwort4

  1. Erstellen Sie eine Beamer-Vorlage per \mythemeMakro:

    % 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. Erstellen Sie eine Batchdatei, um alle verfügbaren Beamer-Designs zu installieren:

    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. Erstellen Sie eine Batchdatei, um die Beamer-Vorlage mit jedem verfügbaren Design zu kompilieren:

    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. Erstellen Sie eine weitere TeX-Eingabedatei, um automatisch ein Beamer-Album oder einen Beamer-Katalog zu erstellen:

    % 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. Ausführen pdflatex --shell-escape automator.tex, um den Beamer-Katalog zu erstellen.

    Bildbeschreibung hier eingeben

verwandte Informationen