Vortrag fürs Doktorandenforum
Hier ist der Vortrag den ich beim jährlichen Doktorandenforum (Postgraduate Research Symposium) der Universität Leeds am 30. Juni 2010 gehalten habe. Er basiert auf der LaTeX-Klasse Beamer für Präsentationen sowie einigen speziellen Paketen und Vorlagen. In diesem Artikel erläutere ich diese technischen Aspekte meiner Präsentation.
- die Präsentationsvorlage ist progressbar v0.32 von Sylvain Bouveret: http://recherche.noiraudes.net/en/LaTeX.php
- die verwendete Schriftart ist Palatino
- die animierten Vektorgrafiken auf Seite 11 wurden mit der PSTricks-Erweiterung pst-solides3d generiert
Bis auf die Präsentationsvorlage sollte alles Bestandteil einer umfassenden und aktuellen LaTeX-Installation sein. Die beiden Grafiken im oberen linken Bild wurden übrigens mit Inkscape und Mathematica erstellt.
Wie richtet man dies alles ein? Schauen wir uns zunächst einmal die Präambel des LaTeX-Dokuments an:
documentclass[10pt]{beamer} % verwende die Beamer Klasse für Präsentationen usetheme{progressbar} % verwende die Präsentationsvorlage "Progressbar" usecolortheme{crane} % verwende das gelbe Farbschema "crane" usepackage{pst-solides3d} % lade das PSTricks Paket für 3D Grafiken usepackage{animate} % lade das Paket für Animationen usepackage[T1]{fontenc} % lade die Schriftart "Palatino" usepackage{iwona} usepackage{palatino}
Um die benutzerdefinierte Vorlage progressbar zu verwenden, müssen wir diese zunächst herunterladen und dessen Dateien in das gleiche Verzeichnis wie die LaTeX-Datei entpacken. Die dritte Zeile der Präambel lädt das Farbschema crane, eines der Standardfarbschemen der Beamer-Klasse. Die nächsten zwei Zeilen sind die Voraussetzungen für die Erstellung von animierten Vektorgrafiken. Das PSTricks-Paket pst-solides3d lädt automatisch pstricks selbst, so dass wir keinen eigenen Eintrag dafür erzeugen müssen. Schließlich weisen die letzten drei Zeilen LaTeX an, die Schriftart Palatino zu verwenden (Aber fragt mich nicht wieso wir dafür drei Befehle brauchen. Ich habe dies selber im Internet gefunden, und es funktioniert bei mir nicht wenn ich eine der Zeilen weglasse).
Zu erwähnen ist dass ich Version 0.32 der progressbar Vorlage benutzt habe, anstatt der derzeit aktuellen Version 0.42, da meine Präsentation mit dem alten Farbschema etwas besser aussieht. Ich habe Sylvain eine E-Mail geschrieben mit der Frage ob er das alte Schema als eine Option in einer künftigen Version zurückbringen kann, und er hat mir geantwortet dass er es für den künftigen 0.5x Zweig in Betracht ziehen wird.


Beim Öffnen der Präsentation mit dem Adobe Reader sollten auf Seite 11 Animationen von rotierenden Polyeder zu sehen sein. Diese wurden mit Hilfe der Pakete pst-solides3d und animate erstellt. Das erste stellt eine Schnittstelle zu den mächtigen Vektorgrafik-Funktionen von PSTricks bereit, um 3D-Grafiken zu erzeugen. Das zweite Paket ermöglicht es, daraus Animationen zu erstellen und diese in die resultierende PDF-Datei einzubetten. Die Befehlskette dafür ist latex -> dvips -> ps2pdf, weil PSTricks nicht mit pdflatex funktioniert (allerdings existieren dafür auch Workarounds). Zudem muss erwähnt werden, dass nicht alle PDF-Reader derart eingebettete Videoclips und Animationen abspielen können. Für Vektoranimationen ist jedoch der Adobe Reader eine sichere Wahl, da er diese unter allen Betriebssystemen abspielen kann (Windows, Mac, Linux).
Diese hübschen Objekte können folgendermaßen erstellt werden: Das Paket pst-solides3d beinhaltet einige vordefinierte geometrische Körper wie die Kugel, den Würfel und die platonischen Körper. Das gelbe Polyeder links ist der Ikosaeder, einer der fünf platonischen Körper. Er kann mit dem unten stehenden Code leicht generiert werden, und das Ergebnis sollte folgendermaßen aussehen (Quellcode).
begin{figure}[ht] begin{animateinline}[autoplay, loop]{20} multiframe{72}{rotationangle=0+1}{ psset{viewpoint=0 -100 30,Decran=115,lightsrc=-50 -100 80, lightintensity=1.2} begin{pspicture}(2.1,2.25) psSolid[object=icosahedron,a=1,RotZ=rotationangle,fillcolor=yellow, action=draw*](1.0,0,1.05) end{pspicture} } end{animateinline} end{figure}
Nun zur Analyse des Codes. Die {animateinline} Umgebung umfasst den Bereich, in dem eine Animation beschrieben wird. Die Optionen [autoplay, loop]{20} bedeuten dass die Animation automatisch startet, mit 20 Bildern pro Sekunde abgespielt wird, und in einer unendlichen Schleife läuft. Die nächste Zeile gibt an, dass 72 Einzelbilder generiert werden sollen, und dass die Variable rotationangle auf 0 gesetzt werden soll und nach jedem Einzelbild um 1 erhöht wird. Die Zeile welche mit psset startet, nimmt einige Optionen entgegen welche den Betrachterpunkt sowie die Licht/Schatteneigenschaften angeben (für ausführliche Informationen siehe das Handbuch von pst-solides3d). Wir sind dann bereit, die eigentliche {pspicture} Umgebung zu starten, welche eine PSTricks Vektorgrafik zeichnet. Die Zahlen in runden Klammern legen die Abmessungen und Position des Bildes fest. Der wichtigste Befehl ist psSolid, welcher das eigentliche Objekt zeichnet. Hier geben wir an, dass ein gelber Ikosaeder mit Kantenlängen von 1 gezeichnet werden soll, und dass er entlang der vertikalen Z-Achse um einen Winkel gedreht werden soll welcher in der Variable rotationangle festgelegt ist. Ein allgemeines dreidimensionales Objekt müsste man um 360 Grad drehen, um zum Ausgangspunkt zurück zu gelangen, aber wegen der Ikosaedersymmetrie genügen uns hier 360/5 = 72 Grad, um zu einer Orientierung zu gelangen welche identisch mit der Startorientierung ist.
Nun zu dem orangenen Polyeder im oberen rechten Bild. Dieses "kubische Antiprisma" ist nicht als vorgefertigter Baustein im pst-solides3d Paket enthalten, und daher müssen wir LaTeX mit den Informationen zu allen Ecken und Flächen versorgen. Der folgende Code sollte dieses Ergebnis produzieren
(Quellcode).
begin{figure}[ht] begin{animateinline}[autoplay, loop]{20} multiframe{90}{rotationangle=0+1}{ psset{viewpoint=0 -100 30,Decran=150,lightsrc=-50 -100 80, lightintensity=1.2} begin{pspicture}(3.0,2.5) psSolid[object=new,RotZ=rotationangle,fillcolor=orange, sommets= 0.3289 0.7941 0.5110 -0.3289 -0.7941 0.5110 0.7941 -0.3289 0.5110 -0.7941 0.3289 0.5110 0.3289 -0.7941 -0.5110 -0.3289 0.7941 -0.5110 0.7941 0.3289 -0.5110 -0.7941 -0.3289 -0.5110, faces={ [4 6 5 7] [2 6 0] [2 4 6] [1 4 2] [1 7 4] [3 7 1] [3 5 7] [0 5 3] [0 6 5] [0 3 1 2]}, action=draw*](1.08,0,0.95) end{pspicture} } end{animateinline} end{figure}
Der Großteil dieses Codes ist analog zum Code des vorherigen Beispiels. Der wichtige Unterschied ist, dass object=new festlegt, dass wir es nun mit ein benutzerdefinierten Objekt zu tun haben, dessen geometrischen Eigenschaften dem Befehl psSolid mitgegeben werden müssen. Dies lässt sich entweder direkt in der LaTeX-Datei bewerkstelligen (so wie hier gemacht), oder durch den Import einer 3D Daten-Datei (.obj und .off Dateien, siehe Handbuch von pst-solides3d für mehr Infos). Die kartesischen (x,y,z)-Koordinaten der acht Ecken des Antiprisma werden an die sommets Liste übergeben. Schließlich müssen wir der faces Liste noch mitteilen wie die Flächen des Objektes zwischen den Ecken aufgespannt sind. Beispielsweise bedeutet [0 1 2 3] dass die ersten vier Ecken aus der sommets Liste gemeinsam eine Fläche beschreiben (nämlich das Quadrat welches die Oberseite des Antiprisma bildet). Das gleiche gilt für die anderen Flächen, wobei jede Fläche durch mindestens drei Ecken definiert ist. Soweit so gut, aber ein paar Dinge müssen im Auge behalten werden: Erstens beginnt die Zählung der Ecken mit 0, nicht mit 1. Zweitens sollten die Ecken, welche eine Fläche beschreiben, entweder im Uhrzeigersinn oder Gegenuhrzeigersinn aufgelistet werden, ansonsten wird die Fläche nicht korrekt gezeichnet. Drittens scheint es, als ob Latex manchmal Schwierigkeiten hat, zu bestimmen, welche Flächen vor oder hinter anderen liegen, und zeichnet die Flächen einfach in der Reihenfolge in der sie in der faces Liste erscheinen. Um auf Nummer sicher zu gehen, sollte man diese Liste also mit denjenigen Flächen beginnen, welche am weitesten hinten liegen. Dies erklärt auch, warum die obige Liste [0 3 1 2] statt [0 1 2 3] enthält, und warum dieser Eintrag als letztes kommt (weil das Quadrat auf der Oberseite des Antiprismas nie von anderen Flächen verdeckt wird).





