
테마를 직접 변경하고 사용 가능한 각 테마에 대해 컴파일하는 대신 사용 가능한 각 테마에 대한 PDF 프레젠테이션을 자동으로 얻을 수 있는 더 쉬운 방법이 있습니까?
답변1
다음은 현재 TL2012의 모든 테마에 대한 두 개의 예제 페이지가 포함된 기본 문서 main.tex를 생성하는 쉘 스크립트입니다. 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
스크립트(이틀 만에 두 번째입니다. 집착하지 않는다고 약속합니다... 많이)는 다음과 같습니다.
perl createBeamer.plx slides.tex
또는 원하는 수의 파일로 호출할 수 있습니다.
perl createBeamer.plx file1.tex file2.tex file3.tex
각 파일에는 아래에 자세히 설명된 몇 가지 필수 줄이 있습니다 .tex
.
배열에서 사용할 테마를 지정하기만 하면 됩니다 . 그러면 하나의 스크립트 매직을 실행하여 @themes
많은 것을 얻을 수 있습니다.pdfs
:)
createBeamer.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";
}
}
슬라이드.텍스
\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
이 접근 방식의 단점은 지구본에 새로운 테마가 존재할 때마다 테마 목록을 업데이트해야 한다는 것입니다.
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)
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
매크로를 사용하여 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}
사용 가능한 모든 비머 테마를 설치하려면 배치 파일을 만듭니다.
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
사용 가능한 각 테마로 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)
Beamer 앨범 또는 카탈로그를 자동으로 생성하려면 다른 TeX 입력 파일을 생성하십시오.
% 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}
pdflatex --shell-escape automator.tex
비머 카탈로그를 생성하려면 실행하세요 .