diff --git a/workshops/latex/beamer/README.md b/workshops/latex/beamer/README.md new file mode 100644 index 0000000000000000000000000000000000000000..739e4c08a4f4997e88b7d776c24d4d80707b8212 --- /dev/null +++ b/workshops/latex/beamer/README.md @@ -0,0 +1,8 @@ +### Beamer presentation +Build: +```bash +mkdir pgf-img +lualatex beamer +make -f beamer.makefile # this takes some time +lualatex beamer +``` diff --git a/workshops/latex/beamer/animation.py b/workshops/latex/beamer/animation.py new file mode 100644 index 0000000000000000000000000000000000000000..168edcc0d3cd7ff4d9789d10a30d1a0a2d9ead9a --- /dev/null +++ b/workshops/latex/beamer/animation.py @@ -0,0 +1,70 @@ +# Create a very basic animation as an example +# This is a simple, but not the best way of implementing this animation. +# +# This script should work with both python2 and python3 + +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.animation import FuncAnimation + +# Resolution of the video (should be at least 200 for a good quality) +dpi = 400 +# Number of time steps, for which the plot is calculated +nt = 500 +# Number of points on the x axis +nx = 400 +x = np.linspace(-1, 1, nx) + +# Calculate a function of x and time, which will be shown in the animation +# The function is a wavefunction of a quantum mechanical particle in a one dimensional box. + +y1 = np.cos(np.pi*x/2) +y2 = np.sin(np.pi*x) +y3 = np.cos(3*np.pi*x/2) +y4 = np.sin(2*np.pi*x) +e1 = 0.5 +e2 = 1 +e3 = 1.5 +e4 = 2 + +# psi(t) returns an array of complex y values. +psi = lambda t: 0.4*np.exp(2j*np.pi*e1*t)*y1 + 0.3*np.exp(2j*np.pi*e2*t)*y2 - 0.2*np.exp(2j*np.pi*e3*t)*y3 - 0.1*np.exp(2j*np.pi*e4*t)*y4 + +y = psi(0) + +# Set up a plot +fig, ax = plt.subplots() +fig.set_size_inches(8/2.54, 5/2.54) +ax.set_xlim(-1, 1) +ax.set_ylim(0, 0.85) + +# Show the phase of the complex values in psi(t) as a color plot +img = ax.imshow(np.angle(y).reshape((1,nx)), cmap=plt.cm.hsv, norm=plt.Normalize(-np.pi,np.pi), extent=[-np.pi,np.pi,0,0.85]) + +# Clip this color plot, such that it is only shown in the area defined by 0 < y < abs( psi(t) ) +fill, = ax.fill(x, np.abs(y), facecolor='none') +img.set_clip_path(fill) + +# Plot the absolute value of psi as a black line +plot, = ax.plot(x, np.abs(y), color='black') + +# Set aspect ratio +ax.set_aspect(1.5) + +# Save the plot to an image +fig.savefig("image.jpg", dpi=dpi) + +# Define a function which updates the data +def calc_data(t): + y = psi(t) + fill.set_xy( np.array((x, np.abs(y))).T ) + img.set_data(np.angle(y).reshape((1, nx))) + img.set_clip_path(fill) + plot.set_ydata(np.abs(y)) + +# Define an array of times, for which the plot will be shown +times = np.linspace(0, 2*np.pi, nt, endpoint=False) +# Create an animation +anm = FuncAnimation(fig, calc_data, times) +# Save the animation +anm.save("movie.mp4", fps=50, dpi=dpi) diff --git a/workshops/latex/beamer/beamer.tex b/workshops/latex/beamer/beamer.tex new file mode 100644 index 0000000000000000000000000000000000000000..df596a5317d9b0c2612ccf4ff1dfa5de9da2c0b4 --- /dev/null +++ b/workshops/latex/beamer/beamer.tex @@ -0,0 +1,396 @@ +\documentclass[aspectratio=169, xcolor=dvipsnames, ngerman]{beamer} + +%\usepackage[utf8]{inputenc} +%\usepackage[T1]{fontenc} +\usepackage[ngerman]{babel} +%\usepackage{lmodern} +\usepackage{verbatim} +\usepackage{dtk-logos} +\usepackage{tikz} +\usetikzlibrary{backgrounds, fit, matrix, calc} +\usepackage{listings} +\usepackage{calc} +\usepackage{multimedia} +\usepackage{mathtools} +\usepackage{amsmath} +\usepackage{amsthm} +\usepackage{amssymb} +\usepackage{amsfonts} +\usepackage{dsfont} +\graphicspath{{figures/}{examples/}} +\usefonttheme{professionalfonts} + +\newcommand{\red}[1]{{\color{red}#1}} +\newcommand{\blue}[1]{{\color{blue}#1}} +\newcommand{\green}[1]{{\color[rgb]{0,.5,0}#1}} +\newcommand{\gray}[1]{{\color{gray}#1}} +\newcommand{\black}{\color{black}} + +%%% TIKZ SETTINGS + +%% packages +\usepackage{pgf} +\usepackage{tikz} +\usepackage{pgfplots} + +%% libraries +\usetikzlibrary{external} +\usetikzlibrary{backgrounds, fit, decorations.pathreplacing, shapes.geometric, matrix, calc, fadings} + + +%% externalize +\tikzexternalize[shell escape=-shell-escape, prefix=pgf-img/] +\tikzset{ + external/mode=list and make, + external/system call={ + lualatex \tikzexternalcheckshellescape -halt-on-error + -interaction=batchmode -jobname="\image" "\texsource"}, + external/optimize command away=\includepdf, + %external/optimize=false, +} +\tikzsetfigurename{figure_} +\pgfplotsset{compat=1.16} + +\newlength\termlength +\newcommand{\Underbrace}[3][]{% Surprisingly, this seems to work. + \ensuremath{% + \mathrlap{% + \setlength{\termlength}{\widthof{$#3$}-\widthof{$#2$}}% + \hspace*{0.5\termlength}% + \underbrace{#3}^{#1}_{\displaystyle#2}% + }% + \hphantom{#3}% + }% +} + + +\hypersetup{unicode=true} + +\setmonofont{FiraCode} + +\usetheme{OSAK} +\addtobeamertemplate{frametitle}{}{\vspace{-6pt}} + +\lstset{ + basicstyle=\footnotesize\ttfamily, + language={[LaTeX]TeX}, + texcsstyle=*\color{Mahogany}\bfseries, + commentstyle=\itshape\color{RoyalBlue}, + keywordstyle=\color{RoyalBlue}\bfseries, + moretexcs={lstset,subsubsection,paragraph,subsection,color,sl,textcolor,lstinputlisting,newfontfamily,fontsize,section,documentclass,begin,includegraphics,hello,bye,setmainlanguage,setlength}, + morekeywords={center,document,flushleft,flushright,itemize,enumerate,tabular,article,polyglossia,geometry,amsmath,graphicx,xcolor,hyperref,alert,frame,example,definition,theorem,proof,block,column,columns,exampleblock,alertblock,only,onslide}, + moredelim=**[is][\smash]{@}{@} +} + +\makeatletter +\newcommand\notsotiny{\@setfontsize\notsotiny{7}{8}} +\makeatother +\setbeamersize{text margin left=6mm, text margin right=6mm} + +% TODO Titel & Autoren anpassen! +\date{\today} +\title[\LaTeX-Workshop]{\LaTeX-Beamer} +\subtitle{Präsentationen mit \LaTeX} +\author{OSAK-Mitglied \#42} +\institute[OSAK]{ + Open Source Arbeitskreis der \\ + Fachschaft Mathematik/Physik/Informatik an der RWTH Aachen \\ + und der Aachener Linux User Group +} + +\newlength\marginwidth +\newcommand\marginbox[3][2pt]{ + % USAGE: \marginbox[margin width]{width}{content} + % TODO: width is set manually such that it fits real width! + \setlength\marginwidth{#1} + \begin{tikzpicture}[even odd rule, scale=1] + \node[anchor=north west] (text) {% + \begin{minipage}{#2-2\marginwidth-10pt}% + #3% + \end{minipage}% + }; + \begin{pgfonlayer}{background} + \node[draw opacity=.5, draw=blue, line width=#1, inner sep=2pt, fit = (text)] {}; + \end{pgfonlayer} + \end{tikzpicture} +} + +\begin{document} + +\begin{frame} + \titlepage +\end{frame} + +\begin{frame}{Inhaltsverzeichnis} + \tableofcontents +\end{frame} + +\section{Was ist \LaTeX-Beamer} +\begin{frame}{Was ist \LaTeX-Beamer?} + \null\hspace{.25\textwidth}\begin{minipage}{.5\textwidth}\lstinputlisting[basicstyle=\large]{examples/documentclass-beamer.tex}\end{minipage} + \begin{itemize} + \item Dokumentklasse für diese Präsentation + \item Saubere Formatierung + \item teilweise automatische Formatierung + \item Praktisch für Formeln, Theoreme + %\item<2-> Overlays + %\item Freie Software + %\item Ausgabe als PDF (portabel) + \item<2-> Beispiel: Euklids Präsentation + \end{itemize} +\end{frame} + +% TODO: Installation testen? + +\section{Beispiel: Euklids Präsentation} +\begin{frame}{Was sind Primzahlen} + \begin{columns}[c] + \begin{column}{.5\textwidth} + Eine Primzahl hat genau zwei Teiler. + \end{column} + \begin{column}{.5\textwidth} + \lstinputlisting{examples/euklid1.tex} + \end{column} + \end{columns} +\end{frame} + +\subsection{Was sind Primzahlen} +\begin{frame}{Was sind Primzahlen} + \begin{columns}[c] + \begin{column}{.5\textwidth} + \begin{definition}{Primzahl} + Eine Primzahl hat genau zwei Teiler. + \end{definition} + \begin{example} + \begin{itemize} + \item 2 ist Primzahl (Teiler: 1, 2) + \item 3 ist Primzahl (Teiler: 1, 3) + \item 4 ist keine Primzahl (Teiler: 1, 2, 4) + \end{itemize} + \end{example} + \end{column} + \begin{column}{.5\textwidth} + \lstinputlisting{examples/euklid2.tex} + \end{column} + \end{columns} +\end{frame} + +\begin{frame}{Was sind Primzahlen} + \begin{columns}[c] + \begin{column}{.5\textwidth} + \begin{definition}{Primzahl} + Eine \alert{Primzahl} hat genau zwei Teiler. + \end{definition} + \begin{example} + \begin{itemize} + \item 2 ist Primzahl (Teiler: 1, 2) + \item 3 ist Primzahl (Teiler: 1, 3) + \item 4 ist \alert{keine} Primzahl (Teiler: 1, \alert{2}, 4) + \end{itemize} + \end{example} + \end{column} + \begin{column}{.5\textwidth} + \lstinputlisting{examples/euklid3.tex} + \end{column} + \end{columns} +\end{frame} + +\subsection{Keine größte Primzahl} +\OSAKthemenologo +\begin{frame}{Keine größte Primzahl} + \begin{columns}[c] + \begin{column}{.5\textwidth} + \begin{theorem} + Es gibt keine größte Primzahl. + \end{theorem} + \begin{proof} + \begin{enumerate} + \setlength\itemindent{-6pt}% + \item Angenommen $p$ ist die größte Primzahl. + \item Sei $q$ das Produkt der ersten $p$ Zahlen. + \item $q+1$ ist durch keine davon teilbar. + \item Damit ist $q+1$ Primzahl und größer als $p$. + \end{enumerate} + \end{proof} + \end{column} + \begin{column}{.5\textwidth} + \lstinputlisting{examples/euklid4.tex} + \end{column} + \end{columns} +\end{frame} + +\begin{frame}{Keine größte Primzahl} + \begin{columns}[c] + \begin{column}{.5\textwidth} + \begin{theorem} + Es gibt keine größte Primzahl. + \end{theorem} + \begin{proof} + \begin{enumerate} + \setlength\itemindent{-6pt}% + \item Angenommen $p$ ist die größte Primzahl. + \item<2-> Sei $q$ das Produkt der ersten $p$ Zahlen. + \item<3-> $q+1$ ist durch keine davon teilbar. + \item<3-> Damit ist $q+1$ Primzahl und größer als $p$. + \end{enumerate} + \end{proof} + \end{column} + \begin{column}{.5\textwidth} + \lstinputlisting{examples/euklid5.tex} + \end{column} + \end{columns} +\end{frame} + +\section{Strukturierung von Folien} +\begin{frame}{Struktur einer Folie} + \begin{columns}[c] + \begin{column}{.27\textwidth} + Erste Spalte + \end{column} + \hfill% + \begin{column}{.27\textwidth} + Zweite Spalte + \end{column} + \hfill% + \begin{column}{.44\textwidth} + \lstinputlisting{examples/columns1.tex} + \end{column} + \end{columns} +\end{frame} + +\begin{frame}[t]{Struktur einer Folie} + \vspace*{-6mm}% + \begin{columns}[t] + \begin{column}{.52\textwidth} + \null\vspace*{16mm}% + \begin{columns} + \begin{column}{.45\textwidth} + \begin{block}{Einfacher Block} + Strucktur durch Blöcke + \end{block} + \end{column} + \onslide<1,3-> + \begin{column}{.45\textwidth} + \begin{exampleblock}{Beispiel} + Beispielblock + \end{exampleblock} + \end{column} + \end{columns} + \onslide<1,4-> + \begin{alertblock}{Wichtiger Block} + Dieser Block ist immer rot. + \end{alertblock} + \end{column} + \hfill% + \onslide<1-> + \begin{column}{.48\textwidth} + \only<1>{\lstinputlisting{examples/columns2.tex}}% + \only<2->{\lstinputlisting{examples/columns3.tex}}% + \end{column} + \end{columns} +\end{frame} + +\section{Was beamer noch kann} +\begin{frame}{Videos} + \vspace*{-6mm}% + \begin{center} + \movie[width=.5\textwidth, height=.3125\textwidth, loop]{}{movie.mp4}\\ + Wellenfuntion im eindimensionalen Kastenpotential + \end{center} +\end{frame} + +\newcount\timecounter +\begin{frame}{Einfache Animationen} + \animate<2-25> + \animatevalue<1-25>{\timecounter}{0}{100} + \null\hspace{\the\timecounter pt} + \begin{minipage}{.3\textwidth} + \begin{block}{Animation} + Dieser Block bewegt sich. + \end{block} + \end{minipage} + \\[5mm] + \animate<27-40> + \animatevalue<26-40>{\timecounter}{100}{0} + \begin{colormixin}{\the\timecounter!averagebackgroundcolor} + Dieser Text wird ausgeblendet. + \end{colormixin} +\end{frame} + +\begin{frame}{TikZ Beispiel: Graphen in Tight Binding} + \begin{overprint} + Näherung der Bandstruktur von Graphen + \vspace*{-1mm} + \begin{columns}[T] + \begin{column}[T]{0.5\textwidth} + \begin{block}{Tight Binding Model} + \vspace*{-1mm} + \begin{itemize} + \item Honigwabengitter + \item Nur \red{Hüpfen} zu \green{nächsten Nachbarn} + \end{itemize} + \vspace*{-2mm} + \begin{align*} + \mathcal{H} + &=-\red{t} \sum_{\green{\left<i,j\right>}}a_\green{i}^\dagger a_\green{j} \\ + &=-\sum_{\mathbf{m}, \mathbf{n}, \alpha, \beta} + \red{t}\green{_{\alpha\beta}(\mathbf{m})} a_{\alpha\,(n+m)}^\dagger a_{\beta\,n} + \end{align*} + \vspace*{-1mm} + \end{block} + \end{column} + \begin{column}[T]{0.5\textwidth} + \vspace*{-4.5mm} + \tikzsetnextfilename{graphene3d} + \hspace*{3mm}% + \begin{tikzpicture}[scale=1] + \begin{axis}[ + view/h=33, + axis lines=none, + width=8.3cm, + height=8.5cm, + xmin=-4.4, xmax=4.4, + ymin=-4.4, ymax=4.4, + zmin=-3.1, zmax=3.1, + ] + \addplot3[ + mesh, + %surf, + %shader=interp, + samples=50, + domain=-4.3:4.3, + y domain=-4.3:4.3, + ] { -sqrt(1+4*cos(\y/2 r)^2+4*cos(\y/2 r)*cos(sqrt(3)*\x/2 r)) }; + \addplot3[ + mesh, + %surf, + %shader=interp, + samples=50, + domain=-4.3:4.3, + y domain=-4.3:4.3, + ] { sqrt(1+4*cos(\y/2 r)^2+4*cos(\y/2 r)*cos(sqrt(3)*\x/2 r)) }; + \end{axis} + \end{tikzpicture} + \vspace*{-12mm} + \end{column} + \end{columns} + \onslide<2->{ + \vspace*{1.5mm} + $\implies$ Energieeigenzustände: + $\quad\displaystyle + E(\mathbf{k}) + = \pm \red{t}% + \Underbrace{% + \sqrt{1+4\cos^2\Big( \frac a2 k_y \Big)+4\cos\Big( \frac a2 k_y \Big)\cos\Big( \sqrt3 \frac a2 k_x \Big)}% + }{\left|1+e^{-i\mathbf{k}\cdot\mathbf{a_2}}+e^{-i\mathbf{k}\cdot(\mathbf{a_1}+\mathbf{a_2})}\right|}% + $ + } + \end{overprint} +\end{frame} + +\end{document} + +\begin{comment} +vim:ts=2:spelllang=de:fo=want:expandtab +\end{comment} + diff --git a/workshops/latex/beamer/examples/columns1.tex b/workshops/latex/beamer/examples/columns1.tex new file mode 100644 index 0000000000000000000000000000000000000000..bc7f67511b12341fcf52a96112322b80ce090d2a --- /dev/null +++ b/workshops/latex/beamer/examples/columns1.tex @@ -0,0 +1,10 @@ +\begin{frame}{Struktur eine Folie} + \begin{columns} + \begin{column}{0.45\textwidth} + Erste Spalte + \end{column} + \begin{column}{0.45\textwidth} + Zweite Spalte + \end{column} + \end{columns} +\end{frame} diff --git a/workshops/latex/beamer/examples/columns2.tex b/workshops/latex/beamer/examples/columns2.tex new file mode 100644 index 0000000000000000000000000000000000000000..b9ae82a24450225eb64ee6887e7f213aae5e097c --- /dev/null +++ b/workshops/latex/beamer/examples/columns2.tex @@ -0,0 +1,17 @@ +\begin{frame}{Struktur eine Folie} + \begin{columns} + \begin{column}{.45\textwidth} + \begin{block}{Einfacher Block} + Strucktur durch Blöcke + \end{block} + \end{column} + \begin{column}{.45\textwidth} + \begin{exampleblock}{Beispiel} + Beispielblock + \end{exampleblock} + \end{column} + \end{columns} + \begin{alertblock}{Wichtiger Block} + Dieser Block ist immer rot. + \end{alertblock} +\end{frame} diff --git a/workshops/latex/beamer/examples/columns3.tex b/workshops/latex/beamer/examples/columns3.tex new file mode 100644 index 0000000000000000000000000000000000000000..b5d80d28d0fa1e193b5c33fc0a28db6772cf720a --- /dev/null +++ b/workshops/latex/beamer/examples/columns3.tex @@ -0,0 +1,19 @@ +\begin{frame}{Struktur eine Folie} + \begin{columns} + \begin{column}{.45\textwidth} + \begin{block}{Einfacher Block} + Strucktur durch Blöcke + \end{block} + \end{column} + \onslide<2-> + \begin{column}{.45\textwidth} + \begin{exampleblock}{Beispiel} + Beispielblock + \end{exampleblock} + \end{column} + \end{columns} + \onslide<3-> + \begin{alertblock}{Wichtiger Block} + Dieser Block ist immer rot. + \end{alertblock} +\end{frame} diff --git a/workshops/latex/beamer/examples/documentclass-beamer.tex b/workshops/latex/beamer/examples/documentclass-beamer.tex new file mode 100644 index 0000000000000000000000000000000000000000..f33ab2701c3cfde0688f4b41972ec0be28ce6dfe --- /dev/null +++ b/workshops/latex/beamer/examples/documentclass-beamer.tex @@ -0,0 +1 @@ +\documentclass{beamer} diff --git a/workshops/latex/beamer/examples/euklid1.tex b/workshops/latex/beamer/examples/euklid1.tex new file mode 100644 index 0000000000000000000000000000000000000000..09b4230b2c49046e468c714f82f528f21960f2fe --- /dev/null +++ b/workshops/latex/beamer/examples/euklid1.tex @@ -0,0 +1,3 @@ +\begin{frame}{Was sind Primazahlen} + Eine Primzahl hat genau zwei Teiler. +\end{frame} diff --git a/workshops/latex/beamer/examples/euklid2.tex b/workshops/latex/beamer/examples/euklid2.tex new file mode 100644 index 0000000000000000000000000000000000000000..8da2c52e93879c878dfe8e8b9b4babc201734f52 --- /dev/null +++ b/workshops/latex/beamer/examples/euklid2.tex @@ -0,0 +1,14 @@ +\begin{frame}{Was sind Primzahlen} + \begin{definition}{Primzahl} + Eine Primzahl hat + genau zwei Teiler. + \end{definition} + \begin{example} + \begin{itemize} + \item 2 ist Primzahl (Teiler: 1, 2) + \item 3 ist Primzahl (Teiler: 1, 3) + \item 4 ist keine Primzahl + (Teiler: 1, 2, 4) + \end{itemize} + \end{example} +\end{frame} diff --git a/workshops/latex/beamer/examples/euklid3.tex b/workshops/latex/beamer/examples/euklid3.tex new file mode 100644 index 0000000000000000000000000000000000000000..d529e66df840f847ce524c5b489ae213cc3a05e8 --- /dev/null +++ b/workshops/latex/beamer/examples/euklid3.tex @@ -0,0 +1,14 @@ +\begin{frame}{Was sind Primzahlen} + \begin{definition}{Primzahl} + Eine @\alert{Primzahl}@ hat + genau zwei Teiler. + \end{definition} + \begin{example} + \begin{itemize} + \item 2 ist Primzahl (Teiler: 1, 2) + \item 3 ist Primzahl (Teiler: 1, 3) + \item 4 ist @\alert{keine}@ Primzahl + (Teiler: 1, @\alert{2}@, 4) + \end{itemize} + \end{example} +\end{frame} diff --git a/workshops/latex/beamer/examples/euklid4.tex b/workshops/latex/beamer/examples/euklid4.tex new file mode 100644 index 0000000000000000000000000000000000000000..6019cf001b21b87ce5005d68b044f3e64f8cc617 --- /dev/null +++ b/workshops/latex/beamer/examples/euklid4.tex @@ -0,0 +1,17 @@ +\begin{frame}{Keine größte Primzahl} + \begin{theorem} + Es gibt keine größte Primzahl. + \end{theorem} + \begin{proof} + \begin{enumerate} + \item Angenommen $p$ ist die + größte Primzahl. + \item Sei $q$ das Produkt der + ersten $p$ Zahlen. + \item $q+1$ ist durch keine + davon teilbar. + \item Damit ist $q+1$ Primzahl + und größer als $p$. + \end{enumerate} + \end{proof} +\end{frame} diff --git a/workshops/latex/beamer/examples/euklid5.tex b/workshops/latex/beamer/examples/euklid5.tex new file mode 100644 index 0000000000000000000000000000000000000000..0e062c223bca9b9cc9c9725d368fbdc070a01e3d --- /dev/null +++ b/workshops/latex/beamer/examples/euklid5.tex @@ -0,0 +1,17 @@ +\begin{frame}{Keine größte Primzahl} + \begin{theorem} + Es gibt keine größte Primzahl. + \end{theorem} + \begin{proof} + \begin{enumerate} + \item Angenommen $p$ ist die + größte Primzahl. + \item<2-> Sei $q$ das Produkt der + ersten $p$ Zahlen. + \item<3-> $q+1$ ist durch keine + davon teilbar. + \item<3-> Damit ist $q+1$ Primzahl + und größer als $p$. + \end{enumerate} + \end{proof} +\end{frame} diff --git a/workshops/latex/beamer/examples/frame.tex b/workshops/latex/beamer/examples/frame.tex new file mode 100644 index 0000000000000000000000000000000000000000..8a187abef8bb2ea175ac28f9d8205f3e8983c6a9 --- /dev/null +++ b/workshops/latex/beamer/examples/frame.tex @@ -0,0 +1,3 @@ +\begin{frame}{Titel} + Inhalt +\end{frame}