Commit d96dd6b6 authored by Jörn Stöhler's avatar Jörn Stöhler
Browse files

Initial commit

parents
Pipeline #30602 passed with stages
in 4 minutes and 45 seconds
*.aux
*.bbl
*.bcf
*.blg
*.fdb_latexmk
*.fls
*.lof
*.log
*.lol
*.nav
*.out
*.run.xml
*.snm
*.toc
*.vrb
/slides/*.pdf
/thesis/*.pdf
/slides/animation/*.mov
/slides/animation/*.mp4
/slides/animation/*.pdf
/slides/animation/*.swf
/slides/animation/png_export/*.png
_minted-*/
image: iffregistry.fz-juelich.de/imeyer/arbeit-template-docker-image:latest
stages:
- build
- deploy
build:
stage: build
script:
- make all
artifacts:
paths:
- slides/presentation.pdf
- slides/presentation_with_second_screen.pdf
- slides/presentation_with_notes_on_second_screen.pdf
- slides/presentation_without_overlays.pdf
- slides/handout.pdf
- slides/handout_with_notes.pdf
- slides/animation/animation.mov
- slides/animation/animation.mp4
- thesis/thesis.pdf
pages:
stage: deploy
script:
- mkdir public "${CI_PROJECT_NAME}"
- cp -rv /opt/pdfjs public/
- cp -v thesis/thesis.pdf slides/presentation.pdf slides/presentation_with_second_screen.pdf
slides/presentation_with_notes_on_second_screen.pdf slides/presentation_without_overlays.pdf
slides/handout.pdf slides/handout_with_notes.pdf public/
- cd "${CI_PROJECT_NAME}" &&
for f in presentation.pdf presentation_with_second_screen.pdf presentation_with_notes_on_second_screen.pdf
presentation_without_overlays.pdf handout.pdf handout_with_notes.pdf animation/animation.mov
animation/animation.mp4; do
ln -s "../slides/${f}";
done &&
cd ..
- tar -chzf folien.tar.gz "${CI_PROJECT_NAME}"
- zip -r folien.zip "${CI_PROJECT_NAME}"
- mv folien.tar.gz folien.zip public/
- sed "s/{{CI_PROJECT_NAME}}/${CI_PROJECT_NAME}/g" gitlab_pages.template.html > public/index.html
artifacts:
paths:
- public
only:
- master
SUBDIRS = thesis slides
all: $(SUBDIRS)
thesis:
make -C thesis
slides:
make -C slides
clean:
for d in $(SUBDIRS); do make -C $$d clean; done
.PHONY: all $(SUBDIRS) clean
# Template für Abschlussarbeiten und -vorträge
## Template für die eigene Arbeit verwenden
- Die Vorlage kann [von GitLab heruntergeladen
werden](https://iffgit.fz-juelich.de/imeyer/arbeit-template/-/archive/master/arbeit-template-master.tar.gz)
- Entpacken und das Oberverzeichnis passend umbenennen:
```bash
tar -xvf arbeit-template-master.tar.gz
mv arbeit-template-master <projekt-name>
cd <projekt-name>
```
- Git-Repository [auf iffgit anlegen](https://iffgit.fz-juelich.de/projects/new) und mit dem lokalen Template
verknüpfen:
```bash
git init
git add .
git commit -m "Initial commit"
git remote add origin gitlab@iffgit.fz-juelich.de:<user>/<projekt>.git
git push -u origin master
```
## Von GitLab CI gebaute PDF-Dateien ansehen und herunterladen
Dieses Projekt enthält eine GitLab CI-Konfiguration, mit der bei jedem Push automatisch die PDFs der Arbeit und der
Folien kompiliert und mit GitLab Pages online zur Verfügung stellt. Der GitLab Pages-Link für dieses Template-Projekt
lautet: https://imeyer.iffgit.fz-juelich.de/arbeit-template
Nach dem Erstellen eines eigenen Projektes lautet der Link allgemein: `https://<user>.iffgit.fz-juelich.de/<projekt>`
PDF-Dateien können online direkt über pdfjs betrachtet werden. Für eine Präsentation sollte allerdings der Download-Link
verwendet werden, um sicherzustellen, dass evtl. vorhandene externe Videos ebenfalls mit ausgeliefert werden.
Die Folien des Template-Projektes enthalten allgemeine Information darüber, wie Folien und Animationen erstellt werden
können.
## Änderungen am zentralen Template vornehmen:
- Dieses [Projekt forken](https://iffgit.fz-juelich.de/imeyer/arbeit-template/-/forks/new)
- Änderungen vornehmen, Commit erstellen und pushen
- Beim Push wird GitLab eine URL im Terminal ausgeben, die zur Erstellung eines Merge Requests angeklickt werden kann
- Merge Request erstellen und als Assignee "Ingo Meyer" angeben
## Jülicher Beamer Theme auf einem privaten Linux-Rechner installieren
- Mit folgendem Skript kann das Jülicher Beamer Theme (inkl. Patch für die Handout-Erstellung) auf einem Linux-System
eingerichtet werden:
```bash
#!/bin/bash
LATEX_BEAMER_THEME_JUELICH_GIT_URL="https://gitlab.version.fz-juelich.de/kabadshow1/beamertheme-juelich.git"
LATEX_BEAMER_THEME_JUELICH_PATCHES_URL="https://imeyer.iffgit.fz-juelich.de/beamertheme-juelich_patches/62GW75UqXtEQyikfP2sugxPSi_oEbXks4DoV6M2T5JU/beamertheme-juelich_patches.tgz"
PREFIX="/usr/local"
cleanup () {
if [[ -d "${THEME_TMP_DIR}" ]]; then
rm -rf "${THEME_TMP_DIR}"
fi
}
trap cleanup EXIT
install_theme () {
git clone "${LATEX_BEAMER_THEME_JUELICH_GIT_URL}" && \
curl -O -L "${LATEX_BEAMER_THEME_JUELICH_PATCHES_URL}" && \
tar -xvf "beamertheme-juelich_patches.tgz" && \
pushd "beamertheme-juelich" && \
git apply -3 "../beamertheme-juelich_patches/beamertheme-juelich-handout.patch" && \
rm -rf .git && \
popd && \
sudo mkdir -p "${PREFIX}/share/texmf/tex/latex" && \
sudo rsync -rlpv --delete beamertheme-juelich/ "${PREFIX}/share/texmf/tex/latex/beamertheme-juelich" && \
sudo texhash
}
main () {
THEME_TMP_DIR="$(mktemp -d)" || return
pushd "${THEME_TMP_DIR}" && \
install_theme && \
popd
}
main "$@"
```
- Dieses Skript kann in einer Datei gespeichert, mit `chmod +x <script_name>` ausführbar gemacht und mit
`./<script_name>` installiert werden.
## FAQ
- Wenn ich die Folien herunterlade, funktionieren Videos und / oder Animationen nicht. Wie kann ich das beheben?
Dies kann mehrere Ursachen haben:
- Animationen und Videos sind beim Template nur dann aktiv, wenn das PDF Overlays enthält.
- Der PDF-Reader muss das entsprechende Feature unterstützen. Flash- und Javascript-Animationen werden nur im Adobe
Reader korrekt angezeigt. Videos werden auch von vielen anderen PDF-Readern unterstützt, aber nicht von allen.
- Bei externen Videos muss neben der PDF-Datei noch die Videodatei heruntergeladen werden. Bei der Vorlage kann dies
über den Download Link [auf der GitLab Pages-Seite](https://imeyer.iffgit.fz-juelich.de/arbeit-template/)
sichergestellt werden.
- Wenn der PDF-Reader Videos unterstützt, sie aber trotzdem nicht wiedergegeben werden, so ist fehlt wahrscheinlich
der entsprechende Codec. Viele Reader (die auf `poppler` basieren) benötigen `gstreamer`, um Videos abspielen zu
können. Unter Linux heißt das Paket `gst-libav`, `gstreamer1.0-libav` (Debian, Ubuntu) oder ähnlich.
- Wieso sehen die Folien ohne Overlays und die Handout-Fassung anders aus, wenn ich sie lokal kompiliere?
Die Originalversion des Jülicher Beamer-Themes enthält Code, der zwei Folien auf eine DIN A4-Seite zusammenfasst. Beim
GitLab CI Lauf wird dieser Codeblock deaktiviert. Hierzu müssen lokal alle Zeilen aus der Datei
`beamerthemeJuelich.sty` entfernt werden, die mit `\pgfpageuselayout` oder `\pgfpageslogicalpageoptions` beginnen.
- Ich möchte die Vorlage auf einem privaten Computer nutzen, aber es fehlen Abhängigkeiten. Was kann ich tun?
Die notwendige Software zum Kompilieren des Templates ist im
[dazugehörigen Dockerimage](https://iffgit.fz-juelich.de/imeyer/arbeit-template-docker-image/container_registry)
enthalten. Über das entsprechenden
[Dockerfile](https://iffgit.fz-juelich.de/imeyer/arbeit-template-docker-image/blob/master/Dockerfile) kann
nachvollzogen werden, welche Software benötigt wird und wie sie installiert werden sollte.
- Ich habe alles auf meinem private Debian / Ubuntu installiert, aber ich bekomme die Fehlermeldung, dass die Datei
`StrobeMediaPlayback.swf` fehlt. Wieso?
Debian-basierte Linux-Distributionen liefern das `media9`-Paket ohne `StrobeMediaPlayback.swf` aus. Diese Datei kann
von einer anderen Distribution bezogen werden:
```bash
curl -o texlive-latexextra.tar.xz -L "https://www.archlinux.org/packages/extra/any/texlive-latexextra/download/"
tar -xvf texlive-latexextra.tar.xz
sudo cp usr/share/texmf-dist/tex/latex/media9/players/StrobeMediaPlayback.swf \
/usr/share/texlive/texmf-dist/tex/latex/media9/players/
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{{CI_PROJECT_NAME}}</title>
<style>
body {
font-family: "Myriad Set Pro","Lucida Grande","Helvetica Neue","Helvetica","Arial","Verdana","sans-serif";
font-size: 14px;
font-weight: 400;
color: #666;
margin: 15px;
}
a {
color: #08C;
text-decoration-line: none;
}
h1 {
font-size: 36px;
font-weight: 200;
}
h2 {
font-size: 27px;
font-weight: 200;
margin: 25px 0px 15px 0px;
}
li {
margin-top: 5px;
margin-bottom: 5px;
}
</style>
</head>
<body>
<h1>{{CI_PROJECT_NAME}}</h1>
<h2>Arbeit</h1>
<p>
<ul>
<li><a href="/{{CI_PROJECT_NAME}}/pdfjs/web/viewer.html?file=/{{CI_PROJECT_NAME}}/thesis.pdf">Arbeit</a></li>
</ul>
</p>
<h2>Folien</h1>
<p>
<ul>
<li><a href="/{{CI_PROJECT_NAME}}/pdfjs/web/viewer.html?file=/{{CI_PROJECT_NAME}}/presentation.pdf">Folien mit Overlays</a></li>
<li><a href="/{{CI_PROJECT_NAME}}/pdfjs/web/viewer.html?file=/{{CI_PROJECT_NAME}}/presentation_with_second_screen.pdf">Folien für zwei Bildschirme</a></li>
<li><a href="/{{CI_PROJECT_NAME}}/pdfjs/web/viewer.html?file=/{{CI_PROJECT_NAME}}/presentation_with_notes_on_second_screen.pdf">Folien für zwei Bildschirme mit Notizen</a></li>
<li><a href="/{{CI_PROJECT_NAME}}/pdfjs/web/viewer.html?file=/{{CI_PROJECT_NAME}}/presentation_without_overlays.pdf">Folien ohne Overlays</a></li>
<li><a href="/{{CI_PROJECT_NAME}}/pdfjs/web/viewer.html?file=/{{CI_PROJECT_NAME}}/handout.pdf">Handout</a></li>
<li><a href="/{{CI_PROJECT_NAME}}/pdfjs/web/viewer.html?file=/{{CI_PROJECT_NAME}}/handout_with_notes.pdf">Handout mit Notizen</a></li>
</ul>
</p>
<p>
Download der Folien als <a href="/{{CI_PROJECT_NAME}}/folien.tar.gz">tar.gz</a> oder <a href="/{{CI_PROJECT_NAME}}/folien.zip">zip</a>.
</p>
</body>
</html>
$pdflatex = 'pdflatex %O -shell-escape %S';
LATEXMK = latexmk
PDFS = presentation.pdf presentation_with_second_screen.pdf presentation_with_notes_on_second_screen.pdf \
presentation_without_overlays.pdf handout.pdf handout_with_notes.pdf
all: $(PDFS)
animation:
make -C animation
%.pdf: %.tex content.tex presentation.sty animation
$(LATEXMK) -pdf -halt-on-error $<
clean:
make -C animation clean
rm -rf *.aux *.fdb_latexmk *.fls *.log *.nav *.out *.pdf *.pyg *.snm *.synctex.* *.toc *.vrb _minted-*
.PHONY: all animation clean
animation/animation.mov
\ No newline at end of file
animation/animation.mp4
\ No newline at end of file
PDF2SWF = pdf2swf
SWFCOMBINE = swfcombine
PDFINFO = pdfinfo
MUTOOL = mutool
FFMPEG = ffmpeg
LATEXMK = latexmk
FRAMERATE = 30
DPI = 600
H264_QUALITY = 18
all: animation.mov animation.mp4 animation_loop.swf animation_stop.swf
animation_loop.swf: animation.pdf
$(PDF2SWF) $< -o $@ -T 9 -s framerate=$(FRAMERATE)
animation_stop.swf: animation.pdf
PDF_PAGE_NUM="$$($(PDFINFO) "$<" | awk '$$1 == "Pages:" { print $$2 }')" && \
$(PDF2SWF) $< -o $(basename $@)_part01.swf -T 9 -p 1-$$(( PDF_PAGE_NUM - 1 )) -s framerate=$(FRAMERATE) && \
$(PDF2SWF) $< -o $(basename $@)_part02.swf -T 9 -p $${PDF_PAGE_NUM} -t -s framerate=$(FRAMERATE) && \
$(SWFCOMBINE) -F 9 -z --cat $(basename $@)_part01.swf $(basename $@)_part02.swf -o $@
animation.mp4: animation.pdf
$(MUTOOL) draw -r $(DPI) -o png_export/%05d.png $<
$(FFMPEG) -y -framerate $(FRAMERATE) -i png_export/%05d.png -c:v h264 -tune animation \
-crf $(H264_QUALITY) -pix_fmt yuv420p -vf "crop=floor(iw/2)*2:floor(ih/2)*2" $@
animation.mov: animation.mp4
$(FFMPEG) -y -i $< -c:v copy $@
animation.pdf: animation.tex animation.sty graphics/pendel.tex
$(LATEXMK) -pdf -halt-on-error $<
clean:
rm -f *.aux *.fdb_latexmk *.fls *.log *.pdf *.mov *.mp4 *.swf png_export/*.png
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[ngerman]{babel}
\usepackage{animate}
\usepackage{tikz}
\newenvironment{page}{}{}%
\documentclass[12pt, multi=page, crop=true]{standalone}
%
\usepackage{animation}
%
\pagestyle{empty}
\thispagestyle{empty}
\begin{document}
%
\foreach \i in {0, ..., 360} {%
\begin{page}%
\input{graphics/pendel}%
\end{page}%
}%
%
\end{document}
\begin{tikzpicture}[x={(3, 0)}, y={(0, 3)}]
% nodes
\begin{scope}[fill=yellow]
\node (a) at (0, 0) [draw, fill, circle] {A};
\node (b) at (1, 0) [draw, fill, circle] {B};
\node (c) at (1, 1) [draw, fill, circle] {C};
\node (d) at (0, 1) [draw, fill, circle] {D};
\end{scope}
% Verbindungslinien
\begin{scope}[>=latex, very thick]
\foreach \s/\e/\f in {a/b/1, b/c/2, c/d/3, d/a/4} {
\ifthenelse{\f < \i \OR \f = \i}{
\draw[->] (\s) -- (\e);
}{}
}
\end{scope}
\end{tikzpicture}
\begin{tikzpicture}
\useasboundingbox (-4.35, 0) rectangle (4.35, -4.6);
\pgfmathsetmacro{\a}{90 - 70*cos(\i)}
\draw[very thick] (0, 0) -- (-\a:4);
\filldraw[fill=blue] (-\a:4) circle(0.5cm);
\end{tikzpicture}
\author{\red{Autor}}%
\title{Masterkolloquium}%
\title{\red{Beispiel-Titel}}%
\subtitle{}%
\institute{PGI/JCNS-TA}%
\date{\red{\today}}%
\fzjset{title=regular}
\fzjset{title page=image}
\titlegraphic{\includegraphics[width=\paperwidth]{graphics/scientificitsystems.png}}
\maketitle
\begin{frame}
\frametitle{Inhaltsverzeichnis}%
\tableofcontents
[pausesections]
\end{frame}
\section{Zweiter Bildschirm}
% \itemizeonewidth wird später für das Einbinden von Codeboxen benötigt
\newlength{\itemizeonewidth}
\begin{frame}
\frametitle{Zweiter Bildschirm}%
%\framesubtitle{}%
\begin{itemize}[<+->]
\setlength{\itemizeonewidth}{\linewidth}\global\itemizeonewidth=\itemizeonewidth%
\setlength{\itemsep}{2ex}%
\item \LaTeX{}-Beamer kann PDF-Seiten doppelter Breite mit zwei unterschiedlichen Versionen der Folien erzeugen
\item[$ \Rightarrow $] Version für Beamer und für den Laptop-Bildschirm (mit Vorschau, Notizen etc.)
\note[item]<.->{Beispiel-Notiz}
\item Notizen können über den \texttt{\textbackslash{}note}-Befehl eingefügt werden
\note[item]<.->{Um einen zweiten Bildschirm verwenden zu können, wird eine spezielle Vortragssoftware benötigt, die die PDF-Seiten in der Mitte \glqq{}zerschneidet\grqq{}.}
\end{itemize}
\end{frame}
\section{Varianten dieser Präsentation}
\begin{frame}
\frametitle{Varianten dieser Präsentation}%
%\framesubtitle{}%
\begin{itemize}[<+->]
\setlength{\itemsep}{1ex}%
\item \texttt{presentation.pdf}: Vortrags-Version ohne zweiten Bildschirm ($ \rightarrow $ für Adobe Reader)
\item \texttt{presentation\_with\_second\_screen.pdf}: Vortrags-Version mit Vorschau auf zweitem Bildschirm ($ \rightarrow $ für spezielle Vortragssoftware)
\item \texttt{presentation\_with\_notes\_on\_second\_screen.pdf}: Vortrags-Version mit Notizen auf zweitem Bildschirm
\item \texttt{presentation\_without\_overlays.pdf}: Version ohne Overlays ($ \rightarrow $ Veröffentlichung der Folien)
\item \texttt{handout.pdf}: Druckfassung ohne Notizen
\item \texttt{handout\_with\_notes.pdf}: Druckfassung mit Notizen
\end{itemize}
\end{frame}
\section{Grafiken}
\begin{frame}
\frametitle{Grafiken}%
\framesubtitle{\texttt{\textbackslash{}includegraphics}}%
\begin{itemize}[<+->]
\setlength{\itemsep}{2ex}%
\item In \texttt{presentation.sty} werden verschiedene Hilfskommandos definiert
\item \texttt{\textbackslash{}includegraphicsbeamer} sorgt dafür, dass Grafiken mit Transparenz verwendet werden können (s. \texttt{presentation\_with\_second\_screen.pdf})
\uncover<.->{%
\begin{center}
\includegraphicsbeamer[width=0.35\paperwidth]{graphics/result3d_sphere.png}%
\end{center}
}%
\end{itemize}
\end{frame}
\newsavebox{\MintedTikz}
\begin{lrbox}{\MintedTikz}
\begin{minipage}{\itemizeonewidth}
\begin{minted}{tex}
\begin{tikzpicture}[x={(2, 0)}]
\uncover<.->{
\node[circle, draw, fill=AliceBlue] (a) at (0, 0) {A};
}
\uncover<.(1)->{
\node[circle, draw, fill=AliceBlue] (b) at (1, 0) {B};
\draw[>=latex, ->] (a) -- (b);
}
\end{tikzpicture}
\end{minted}
\end{minipage}
\end{lrbox}
\begin{frame}
\frametitle{Grafiken}%
\framesubtitle{TikZ}%
\begin{itemize}[<+->]
\setlength{\itemsep}{1ex}%
\item TikZ unterstützt Overlay-Befehle (\texttt{\textbackslash{}uncover}, \texttt{\textbackslash{}visible} etc.)
\useboxbeamer{\MintedTikz}%
\uncover<+->{%
\vspace*{1ex}%
\begin{center}
\begin{tikzpicture}[x={(2, 0)}]
\uncover<.->{
\node[circle, draw, fill=AliceBlue] (a) at (0, 0) {A};
}
\uncover<.(1)->{
\node[circle, draw, fill=AliceBlue] (b) at (1, 0) {B};
\draw[>=latex, ->] (a) -- (b);
}
\end{tikzpicture}
\end{center}
}%
\end{itemize}
\end{frame}
\section{Codeboxen}
\newsavebox{\MintedUseboxbeamer}
\begin{lrbox}{\MintedUseboxbeamer}
\begin{minipage}{\itemizeonewidth}
\begin{minted}[escapeinside=||]{tex}
\newsavebox{\MintedUseboxbeamer}
\begin{lrbox}{\MintedUseboxbeamer}
\begin{minipage}{\itemizeonewidth}
\begin{minted}{tex}
\uncover<+->{%
\useboxbeamer{\MintedUseboxbeamer}%
}%
|\textcolor{mintedsyntax}{\textbackslash{}end}|{minted}
\end{minipage}
\end{lrbox}
\end{minted}
\end{minipage}
\end{lrbox}
\begin{frame}
\frametitle{Codeboxen}%
% \framesubtitle{}%
\begin{itemize}[<+->]
\setlength{\itemsep}{1ex}%
\item \texttt{\textbackslash{}useboxbeamer} ergänzt Transparenz-Unterstützung ebenfalls bei Codeboxen
\item Der Code muss hierzu vorher mit Hilfe einer \texttt{savebox} vordefiniert worden sein!
\useboxbeamer{\MintedUseboxbeamer}%
\end{itemize}
\end{frame}
\section{Animationen}
\newsavebox{\MintedAnimateinline}
\begin{lrbox}{\MintedAnimateinline}
\begin{minipage}{\itemizeonewidth}
\begin{minted}{tex}
\begin{animateinline}[autoplay]{1}%
\multiframe{5}{i=0+1}{%
\input{animation/animation_js.tikz}%
}%
\end{animateinline}%
\end{minted}
\end{minipage}
\end{lrbox}
\begin{frame}
\label{label:animation_javascript}
\frametitle{Animationen}%
\framesubtitle{Javascript-Animationen}%
\begin{itemize}[<+->]
\setlength{\itemsep}{1ex}%
\item Allgemeine Animationen (Vektorgrafik und alle \LaTeX-Inhalte) können über \texttt{\textbackslash{}animateinline} aus dem \texttt{animate}-Paket eingefügt werden
\item Benötigen Javascript, daher nur im Adobe Reader abspielbar und recht CPU-intensiv
\item \LaTeX-Code kann über eine Zählvariable (hier \texttt{\textbackslash{}i}) parametrisiert werden
\useboxbeamer{\MintedAnimateinline}%
\end{itemize}
\end{frame}
\begin{frame}
\frametitle{Animationen}%
\framesubtitle{Javascript-Animationen -- \only<1>{Standbild}\only<2|handout:0>{Animation}}%
\begin{center}
\only<1>{%
\def\i{0}%
\input{animation/animation_js.tikz}%
}%
\only<2|handout:0>{%
\begin{animateinline}[autoplay]{1}%
\multiframe{5}{i=0+1}{%
\input{animation/animation_js.tikz}%
}%
\end{animateinline}%
}%
\end{center}
\end{frame}
\newsavebox{\MintedIncludemedia}
\begin{lrbox}{\MintedIncludemedia}
\begin{minipage}{\itemizeonewidth}
\begin{minted}{tex}
\includemedia[%
noplaybutton, transparent=true,%
activate=pageopen, deactivate=pageclose
]{\includegraphics[page=1]{animation/animation.pdf}}%