ein kleines LaTeX-HowTo – Alles für „Theoretische Informatik“ – und ein Exkurs

März 29, 2012 um 10:05 pm | Veröffentlicht in LaTeX, Programmieren, Ubuntuusers | 3 Kommentare

Nach langer Zeit wollte ich mal wieder ein LaTeX-HowTo schreiben in welchem ich meine eigenen Erfahrungen mit LaTeX niederschreibe. Ursprünglich sollte das Thema, passend zu meinem Artikel Zitate und Literaturverzeichnis mit BibTex zu tun haben. Da das Thema aber recht umfangreich ist wollte ich hierfür auch eine Menge an Anschauungsmaterial liefern um die Unterschiede unter verschiedenen Styles hervorzuheben. Dieser Artikel muss leider noch warten. Stattdessen möchte ich hier kleine Hilfestellungen die mir meine Hausaufgaben in der Lehrveranstaltung „Theoretische Informatik“ verschönt haben zeigen.

Kleiner Exkurs: Bei der Theoretischen Informatik handelt es sich um das Wissen wie grundlegende Mechanismen funktionieren. Dazu gehört z.B. die Automatentheorie. Kurz gesagt: nach dieser LV hat man den Großteil des theoretischen Hintergrundes intus mit welchem man einen Compiler bauen könnte. Das heißt aber natürlich nicht, dass man sich danach gleich daran setzt eine neue Programmiersprache zu schreiben.

Wie du siehst verknüpfe ich die von mir verwendeten Befehle und Hilfsmittel mit einem einfachen konkreten Beispiel welches direkt aus der Lehrveranstaltung kommt. Wenn dich die Theorie nicht interessiert kannst du auch einfach nur den Code und den gerenderten Text analysieren. Da dieser Artikel zum Teil auch für mich als Übung und als Erinnerung herhalten soll gehe ich auch auf die theoretische Vorgangsweise näher ein.

Der LaTeX-Code ist als Bilder eingefügt weil Blogilo permanent die Backslash frisst. Mit diesen Backslash beginnt in LaTeX jedoch jeder Befehl und eine Reihe von Maskierungen.

Praktische Befehle

Die Kapitel sind nach dem Anwendungsgebiet benannt.

Formale Beschreibung

Ein Beispiel beginnt mit der formalen Beschreibung einer gegeben Sprache. Die Sprache ist dann z.B. als regulärer Ausdruck gegeben:

Beschreiben Sie die durch den regulären Ausdruck (y | x)+ definierte formale Sprache mittels Mengenschreibweise.

Erklärung der Angabe: Diese Angabe besagt, dass entweder y oder x beliebig oft (0 bis unendlich) vorkommen dürfen (dafür steht der jeweilige Stern). Durch das Plus am Ende wird angegeben, dass der ganze Ausdruck in der Klammer mindestens einmal aber ansonsten beliebig oft (eben 1 bis unendlich) vorkommen soll. Dadurch kann jede beliebige Zeichenkette erzeugt werden welche aus den Zeichen x und y besteht, in beliebiger Reihenfolge und beliebig lange. Obwohl das Plus darauf besteht, dass der Ausdruck mindestens einmal vorkommen muss kann das Ergebnis auch leer sein, da x und y ja auch 0-mal vorkommen können.

Für die Mengenschreibweise empfiehlt sich dann der Mathe-Modus von LaTeX, welcher mit dem $-Zeichen beginnt und endet. Die Lösung als LaTeX-Code und als gerenderter Text:

Code 01

Hierbei stehen folgende Zeichen für das jeweilige Ergebnis:

  • Code 02 steht für eine geöffnete geschwungene Klammer die auch angezeigt werden soll. Der Backslash ist in diesem Fall wichtig, weil er die Klammer maskiert. Ohne ihm sind wir beim nächsten Punkt:
  • Code 03 das ^ (caret) ist das Signal an LaTeX das nachfolgende Zeichen hochzustellen. Mit den Klammern wird eine ganze Zeichenkette eingeschlossen auf die dieser Befehl angewandt werden soll. Diese wird dann, wie im Beispiel oben, als Hochzahl dargestellt. Es können natürlich auch mehr als ein Zeichen sein. Weder das caret noch die Klammern werden im Ergebnis sichtbar sein. Sie dienen nur als Formatierungs-Befehle.
  • Code 04 wird zur sogenannten Pipe. Das ist der senkrechte Strich in der Mitte der Definition. Hinter diesem Befehl muss ein Leerzeichen folgen, da der Befehl sonst nicht erkannt wird. Dieses Leerzeichen wird nicht ausgegeben.
  • Code 05 steht für „greater or equal“ und produziert das größergleich-Zeichen. Das Gegenstück heißt „lesser or equal“: leq.

Grammatik

Nachdem wir diese Definition geschafft haben ist der nächste Schritt eine reguläre Grammatik zu erzeugen mit der wir alle Wörter aus dem regulären Ausdruck erzeugen können:

Konstruieren Sie die entsprechende reguläre Grammatik, die die Sprache aus Beispiel 1 erzeugt, und spezifizieren Sie einen Automaten, der sie akzeptiert.

Unsere Grammatik sieht so aus:

Code 06

Example 02

Da in diesem Code nichts Neues vorkommt nehmen wir ihn einfach als gegeben hin. Das erste S ist die Liste aller Symbole die wir für die Ersetzungsvorgänge benötigen (in diesem Fall eben nur das S). x und y sind die Symbole welche wir zum eigentlichen Schreiben eines Wortes zur Verfügung haben. P ist die Menge aller Regeln. Hierfür werden wir eine eigene Zeile benötigen. Das letzte S ist im Grunde genommen dasselbe S wie das S am Anfang, nur wird es hier als Startsymbol verwendet. Dabei handelt es sich um eine Konvention. Irgendwo müssen wir ja anfangen.

Regelwerk

Kommen wir zur Menge der Regeln. Hier gibt es wieder eine interessante Neuerung:

Code 07

Der Befehl overset ist hier der wichtigste von allen. Lange habe ich nach einer Möglichkeit gesucht ein beliebiges Zeichen über ein anderes stellen zu können. Dieser Befehl bewirkt genau das. Er übernimmt zwei Parameter und stellt das Ergebnis des Ersten über den Zweiten. In diesem Beispiel besteht P aus 3 Regeln. Die Syntax einer Regel besteht aus:

Ausgangssymbol -> Ergebnis

wobei jeder Pfeil eine fortlaufende Nummer hat. Ich hätte natürlich auch schreiben können: ->1 . Aber ehrlich: Das wäre das Ergebnis mit MS Word. LaTeX kann es besser. Der Befehl rightarrow zeichnet dann den einfachen Pfeil nach rechts. Das kleine e-ähnliche Zeichen ist das kleine griechische Epsilon und wird als „Leerwort“ verwendet. Sprich: damit verschwindet die Variable und ich bin fertig. Der Befehl für das kleine Epsilon: epsilon und für das große Epsilon: Epsilon. Das funktioniert auf diese Art und Weise mit allen griechischen Zeichen.

Der Automat

Nun ist in der Angabe noch ein Automat gefordert, welcher alle Wörter annehmen kann, welche von der Grammatik, die wir gerade erstellt haben, erzeugt werden können. Die Definition des Automaten:

Code 08

Example 04

beinhält nur zwei Punkte die noch nicht angesprochen wurden. Analog zum caret (^) stellt der Unterstrich im Mathe-Modus das nachfolgende Zeichen herab. Ist danach eine Zeichenkette in geschwungenen Klammern angegeben wird die ganze Zeichenkette herabgestellt. Der Befehl delta wiederum ist analog zum Befehl epsilon und erzeugt ein kleines griechisches delta-Zeichen.

Der erste Punkt in der Definition ist die Menge der möglichen Zustände des Automaten. In diesem Fall ist das nur q0. Danach kommen die möglichen Zeichen die der Automat akzeptieren muss (hier: x und y). Danach kommt der Name der Tabelle in welcher die Verbindungen des Automaten definiert werden. Diese wird mit dem delta beschriftet. Danach kommt der Startzustand (wie das S bei den Grammatik-Regeln). Dabei handelt es sich wieder um q0. Zum Schluss geben wir die Menge an möglichen Endzuständen des Automaten an. Diese Ehre kommt wieder q0 als einzigem Zustand des Automaten zu.

Die Tabelle

Nun wollen wir die Tabelle des Automaten erzeugen:

Code 09

Example 05

Da es sich um eine tabellarische Auflistung handelt liegt es nahe eine einfache Tabelle zu erzeugen. Dazu müssen wir mit begin eine neue Umgebung eröffnen. Diese Umgebung soll vom Typ tabular sein. Nicht vergessen die Umgebung mit end wieder zu schließen. Als Argument geben wir der Tabelle noch Folgendes mit: l|ccDie lesbaren Zeichen stehen für die Ausrichtung des Textes in der jeweiligen Spalte. Die erste Spalte soll also linksbündig sein, die beiden anderen centriert. Mit der Pipe zwischen der ersten und zweiten Spalte gebe ich an, das LaTeX einen senkrechten Strich zwischen diesen beiden Spalten ziehen soll.

Die Tabelle beginnt dann mit einfachem Text. In diesem Fall ist es das Zeichen delta, welches nur im Mathe-Modus dargestellt werden kann. Die einzelnen Spalten werden durch das Kaufmännische Und (&) getrennt. Nach der letzten Spalte muss ein Zeilenumbruch erfolgen. Diesen erzwingt man mit den beiden Backslash am Ende der Zeile. Die Zeichen x und y müssen nicht unbedingt im Mathe-Modus geschrieben werden. Ich habe es dennoch gemacht um das Schriftbild zu vereinheitlichen. Der Befehl hline erzeugt mir den waagrechten Strich den ich benutze um die Kopfzeile vom Körper der Tabelle zu trennen. Dieser Befehl sollte für sich in einer Zeile stehen und braucht nicht mit einem Zeilenumbruch bedacht zu werden. Das macht er selbst. Auch die letzte Zeile in der Tabelle muss nicht mit einem Zeilenumbruch beendet werden. Das passiert beim beenden der Tabelle mit end.

Zur Erklärung der Tabelle: Das delta ist der Bezeichner (Name) der Tabelle. Daneben stehen die Zeichen die der Automat verarbeitet in relativ beliebiger Reihenfolge. In der linken Spalte sind alle Zustände aufgelistet. Dem Automaten werden nun die einzelnen Zeichen des Eingabewortes gefüttert. Je nachdem in welchem Zustand man sich gerade befindet muss man nur in die Spalte mit dem jeweiligen Zeichen sehen um zu erkennen in welchen Zustand der Automat nun wechselt. Ist das Wort zu Ende und der Automat ist in einem akzeptierten Endzustand stehengeblieben (die Menge welche wir bei der Definition angegeben haben) gilt das Wort als akzeptiert. Wenn nicht, dann nicht.

Dieser Automat funktioniert wie folgt: Wir starten im Zustand q0 und bekommen einer der beiden Zeichen x oder y. In beiden Fällen wechseln wir vom Zustand q0 in den Zustand q0. Das bedeutet, wir akzeptieren in jedem Durchgang jedes Zeichen. Da q0 auch gleichzeitig ein Endzustand ist können wir ohne Probleme jedes beliebig lange Wort akzeptieren, da wir immer in q0 zu stehen kommen werden.

Soweit zu den Techniken die ich bisher in der LV Theoretische Informatik verwendet habe. Ein großes Kapitel habe ich noch nicht angeschnitten: LaTeXDraw. Dieses werde ich in Kürze in einem eigenen Artikel behandeln. Auch dieser Artikel wird ein konkretes Beispiel aus der LV behandeln und Schritt für Schritt vorgehen.

Ich hoffe du konntest etwas nützliches über LaTeX lernen.

=-=-=-=-=
Powered by Blogilo

3 Kommentare »

RSS feed for comments on this post. TrackBack URI

  1. „Als Argument geben wir der Tabelle noch Folgendes mit: l|cc. Die lesbaren Zeichen stehen für die Ausrichtung des Textes in der jeweiligen Spalte. Die erste Spalte soll also linksbündig sein, die beiden anderen centriert.“

    Eine kleine Anmerkung zu der Ausrichtung der Spalten: da die Latex Befehle Englisch sind bedeutet l = left und c = center.

    Aber worum es mir wirklich geht ist, dass du vergessen hast zu erwähnen, dass beide Befehle die Spaltenbreite am längsten Eintrag einer Zeile ausrichten. Das kann bei längeren Einträgen wichtig werden. Wenn man einen Zeilenumbruch innerhalb seiner Tabellenzellen braucht, so muss man den Befehl „p{Länge}“ als Argument für die Tabelle verwenden. „p“ setzt den Text linksbündig und bricht in nach der definierten „Länge“ (jedes beliebige von LaTeX akzeptierte Maß) um. Z.B. p{3cm} erzeugt eine Spalte, welche linksbündig ausgerichtet und 3 cm breit ist.
    Möchte man den umgebrochenen Text innerhalb der Zelle zentrieren, so muss innerhalb der jeweiligen Zelle der Text mit einem „\begin{center} Text \end{center}“ umschlossen werden.

    Im großen und ganzer: netter Artikel.

    • Danke für deine Ergänzungen. Da ich nur die gegebene Tabelle in ihrer Funktion beschreiben wollte bin ich nicht näher auf Details eingehen. Ein Artikel über die ganze Macht der Tabellen in LaTeX ist aber auch eine gute Idee.

      • Darf ich raten, wer bei diesem Artikel zumindest mithelfen darf (soll/muss)?🙂

        Ich fand es einfach nur wichtig zu ergänzen, dass eben keine Zeilenumbrüche stattfinden, für den Fall, dass jemand eine solche Tabelle mit längerem Inhalt füllt.


Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

Bloggen auf WordPress.com.
Entries und Kommentare feeds.

%d Bloggern gefällt das: