Kochbuch mit LaTeX verfassen

Dienstag, 15.12.2009 um 17:20 Uhr

Moin liebe Lesergemeinde,

lang ist’s her, dass ich mal was von mir hören ließ. Deswegen soll es nun heute wieder eine Vorlage für LaTeX Liebhaber geben.

Vor einiger Zeit ist mir der Zettelwust in der Küche mit den Rezepten auf die Nerven gegangen, hier mal ein Rezept hingekritzelt, da mal vergessen, das Rezept zu benennen und man weiß nicht mehr was man da eigentlich kochen wollte. Da kam ich auf die Idee das ganze mit einem eigenen Design zu digitalisieren und damit zu ordnen und vor allem auch durchsuchbar zu machen – die Idee zu einem eigenen Kochbuch war geboren.

Da ich nunmal ein Liebhaber von LaTeX bin, lag der Schluss nahe, ein Kochbuch in LaTeX zu verfassen. Zumal mir Word/OpenOffice/Scribus eher ungeeignet dafür erschienen, da man hier auch mit Vorlage immer noch formatieren muss.

Es gibt bereits einige Kochbuchklassen in einigen LaTeX Paketen, jedoch hat mir sowohl der Aufbau des Kochbuches als auch der Quelltext für ein Rezept nicht gefallen. So habe ich mir meine eigene Rezeptumgebung zusammen programmiert. Da ich bisher mit richtiger LaTeX-Programmierung sehr wenig am Hut hatte (und trotz viel Übung immer noch habe) hat das Ganze doch geraume Zeit gedauert. Nun möchte ich euch das Ergebnis präsentieren.

Hier gibt’s erstmal das Paket zum Download: Kochbuch Vorlage

So sieht ein Beispielrezept aus:

kochbuch

Wenn das Zip Archiv entpackt wird, befinden sich mehre Dateien und Ordner darin. Die PDF im Hauptordner ist eine vorkompilierte Beispieldatei. In die Ordner ./bilder/ und ./rezepte/ kommen jeweils die Bilder für die Rezepte und die jeweiligen Tex-Dateien für jedes einzelne Rezept. Die cook.sty im Hauptordner ist meine Style-Datei, die alle notwendigen Befehle und Umgebungen für mein Rezeptbuch beinhaltet. Diese muss sich immer in dem selben Ordner wie die cookbook.tex (Hauptdokument) befindet.

Öffnet man dieses Hauptdokument (cookbook.tex) ist das in dem Beispiel sehr übersichtlich. Je mehr Rezepte, desto länger wird auch dieses Dokument. In der zweiten Zeile der cookbook.tex sieht man wie die Style-Datei (cook.sty) eingebunden wird. In den folgenden Zeilen werden verschiedene Schriftarten für abwechslungsreiche Rezeptüberschriften geladen. Will man dies nicht, können diese Zeilen auskommentiert/gelöscht werden. Im Allgemeinen ist für die Nutzung der Schriftarten das Paket texlive-fonts-extra nachzuinstallieren. Nach den Schriftarten erfolgt die Deklaration der PDF Metadaten und der Titelseite.

Will man sein Rezeptbuch in verschiedene Kategorien unterteilen, kann man das wie in der Datei zu sehen, wie gewohnt mit den \section-Befehlen tun. Bei zweiseitigem Druck ist darauf zu achten, wie Titelseiten und Rezeptbeginn angeordnet sind (meistens auf der ungerade Seite). Mit \newpage kann man entsprechende Leerseiten einfügen. Rezepte werden an der entsprechenden Stelle mit dem Befehl \input{./rezepte/….tex} eingebunden.

Im Ordner ./rezepte/ liegt bereits ein Beispiel Rezept, wie es aussehen könnte.

Die Datei dummy.txt im Hauptordner des Kochbuchs listet alle Befehle mit ihren Parametern/Optionen auf. Diese Datei ist sehr wichtig, wenn man sein Kochbuch weiter individualisieren will (Bilder, mehrseitige Rezepte, Tipps, Anmerkungen, etc.). Ich bitte darum diese Datei aufmerksam zu lesen.

Bevor ihr eigene Rezepte in das Kochbuch einfügt, solltet ihr überprüfen, ob alles einwandfrei funktioniert. Eventuell sind einige Pakete nachzuinstallieren. Ich habe eine vollständige Textlive Distri installiert, so dass ich nicht weiß, welche Pakete in einer Standardinstallation über die Ubuntuquellen nicht enthalten sind. Sollte es nicht funktionieren, könnte es helfen im Hauptdokument alle Schriftarten und im Beispielrezept den optionalen Parameter in der Rezeptdeklaration >>[font=\rustfamily]<< zu entfernen.

Viel Spaß beim Testen, weitere Anregungen/Fehler/Lob bitte in die Kommentare ;-)

TeXLive 2009 veröffentlicht

Dienstag, 10.11.2009 um 14:24 Uhr

Moin liebe Lesergemeinde,

vor einigen Tagen ist die neue Version 2009 von TeX Live veröffentlicht worden. Das ISO der Version kann man sich auf der CTAN Webseite herunterladen. Die Installationsmethode funktioniert auch nach meiner Beschreibung bei mir auf dem Blog. Wenn man TeXLive 2008 installiert hatte, bekommt man die Updates mit dem Updatemanager von TeXLive.

Leider hat es keine neue TeXLive Version in die Ubuntu Version 9.10 geschafft. Dort (genauso wie bei Debian) wird immer noch mit der längst veralteten 2007er Version gearbeitet – eigentlich sehr schade, denn es gibt “Tonnen” von Neuerungen in den folgenden Versionen.

Weiß jemand, ob es wenigstens die 2009er Version nach Debian und damit Ubuntu schafft? → würde mich zumindest riesig freuen.

Briefe in LaTeX

Freitag, 02.10.2009 um 15:42 Uhr

Moin liebe Lesergemeinde,

ich mache für gewöhnlich einen großen Bogen um normale Office Software, da diese für mich einfach nur umständlich ist. Deswegen liegt es nahe, dass ich auch meine Briefe in LaTeX verfasse. Dazu gibt es nur eins zu sagen: Nie war Briefe schreiben so einfach!

Im folgenden gibt es eine kurze Einführung in die Welt der Briefe unter LaTeX mit der Briefklasse scrlttr2. Die komplette Dokumentation zu Koma Skript und damit auch zur Briefklasse findet man auf BerliOS zum Download. Dort einfach zur passenden Koma Skript Version die Datei scrguide-….pdf herunterladen. Anmerkung: Die Dokumentation ist ausgesprochen gut, ausführlich und mit vielen Beispielen. Für LaTeX Schreiber ein muss.

So nun zum eigentlichen Thema. Das Grundgerüst für einen Brief besteht aus knapp 20 Zeilen:

test.tex

\documentclass{scrlttr2} % Letter Klasse des Koma-Skripts
\LoadLetterOption{test}
\begin{document}
%% Brief
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setkomavar{subject}{Mein Grund}
\begin{letter}{
Name Empfänger\\
Adresse\\
PLZ Ort
}
\opening{Sehr geehrte Damen und Herren,}
hiermit üöäß...
\closing{Mit freundlichen Grüßen}
\vskip-5em
\includegraphics[height=4em]{../dokumente/unterschrift.png}
\end{letter}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}

Gehen wir dieses Gerüst einmal durch. Als erstes wird die LaTeX Klasse scrlttr2 aus dem Koma Skript aufgerufen. Dann werden sämtliche Einstellungen für den Brief geladen. Diese befinden sich in der Datei test.lco. Dazu später mehr.

Nun beginnt das eigentliche LaTeX Dokument. Jeder Brief sollte einen Betreff haben, der wird mit der Koma Variable subject festgelegt. Nun beginnt der eigentliche Brief mit der Anschrift des Empfängers. Mit normalen \\ kann ein Zeilenumbruch hervorgerufen werden. Wichtig ist, dass hier keine Leerzeilen (Absatz) genutzt werden. Mit dem Befehl \opening legt man die Anrede im Brief fest, mit \closing demnach das Ende des Briefes. Zwischen opening und closing kommt der eigentliche Brieftext, den es zu verfassen gilt.

Mit \vskip (Position festlegen) und \includegraphics binde ich meine handschriftliche Unterschrift in das Dokument ein. Mit einer entsprechenden Auflösung sieht das Ganze ausgedruckt sogar wie eine echte Unterschrift aus.

Dann wird nur noch Brief und Dokument beendet. Das wars auch schon. So kann man innerhalb von einer Minute ein Briefgerüst verfassen, dass nach DIN in einer PDF gesetzt wird. Als Zusatz hat man gleich Falt-/Lochmarken sowie eine Rücksendeadresse für Briefumschläge mit Fenster integriert ohne sich um Abstände und irgendwelche anderen Sachen Gedanken zu machen.

test.lco

\ProvidesFile{test.lco}[2009/03/04 lco (Christian Gatzlaff)]
% Pakete
\usepackage{cmap}        % to make the PDF files "searchable and copyable" in pdf viewer
\usepackage[ngerman]{babel}    % deutschsprachig
\usepackage[utf8]{inputenc}    % utf8 encoding
\usepackage[T1]{fontenc}    % Schriftkodierung
\usepackage{lmodern}        % Computer Modern-Schrift (TYPE1-tauglich)
\usepackage{microtype}        % echter Blocksatz
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{pdfpages}        % Einbinden von PDF Seiten aus PDF Dokument
\usepackage{fixltx2e}        % Verbessert einige Kernkompetenzen von LaTeX2e
\usepackage{ellipsis}        % Korrigiert den Weißraum um Auslassungspunkte
\KOMAoptions{%
foldmarks=true,
backaddress=true,
fromphone,
fromemail,
enlargefirstpage=true,
paper=A4,    %
fontsize=12pt,    %
fromalign=left,    %
draft=false    %
}
\setkomavar{fromname}{Vorname Nachname}
\setkomavar{fromaddress}{Irgendwo 35\\
02635 Im Nirgendwo}
\setkomavar{fromphone}{03845945097}
\setkomavar{fromemail}{test@noaddress.de}
\renewcommand*{\raggedsignature}{\raggedright}
\setkomavar{place}{Im Nirgendwo}
%\@addtoplength[-1]{toaddrvpos}{20mm}
%\@addtoplength[-1]{refvpos}{20mm}

Das ist nun die text.lco, wenn man so will die Konfigurationsdatei für eigene Briefe. Hier kommen alle Einstellungen rein, die man in allen Briefen nutzen will. Neben den hier gezeigten Daten können natürlich auch ganze Briefköpfe, Firmenlogos, zusätzliche Daten etc. eingefügt werden (wichtig für Geschäftsbriefe in einem Corporate Design).

Um hier die wichtigsten Einstellungen zu erklären. Mit \ProvidesFile legt man fest um welche Datei es sich handelt, wie sie heißt, wann sie geschrieben wurden und wer der Autor ist. Der nächste Abschnitt bindet die Pakete ein, die man für seine Briefe benötigt. Hier eine kleine Auswahl, die ich nutze.

Der Abschnitt \KOMAoptions legt generelle Briefeinstellungen fest, so zum Beispiel Faltmarken, die Anzeige von verschiedenen Adresselementen, etc.

Mit \setkomavar werden die persönlichen Daten festgelegt, diese erscheinen dann in jedem Brief. Anmerkung: natürlich können auch für jeden Brief manuell diese Angaben überschrieben werden. Diese Angaben sind eigentlich selbsterklärend.

Die Zeile \renewcommand setzt den Namen unter der Unterschrift linksbündig. Lässt man diesen Befehl weg, wird der Name eingerückt (hier kann natürlich jeder für sich entscheiden, was er mag). Die Variable place, setzt neben das aktuelle Datum in Brief noch die Ortsangabe.

Die beiden letzten Zeilen sind auskommentiert. Mit diesen kann man, wenn der Briefinhalt nicht auf eine Seite passt, jedoch nur wenige Zeilen auf der nächsten Seite sind, spielen, um die Zeilen auch noch auf die erste Seite zu holen. Wenn diese Abstandsänderungen nicht gebraucht werden, kann man sie auch löschen.

So das wars, ich hoffe ich konnte euch die Einfachheit des Briefeschreibens unter LaTeX etwas näher bringen. Wenn man einmal seine Vorlage zusammen hat, kann man so schnell Briefe schreiben, wie sonst kein anderer. Im Hauptdokument lassen sich übrigens auch mehrere Briefe verfassen, indem man einfach nach dem Schließen der letter-Umgebung eine neue letter-Umgebung aufmacht.

Achja aussehen tut die PDF ohne auch nur einen Satz Inhalt geschrieben zu haben wie folgt:

test

Ein paar kleine Tipps für LaTeX Schreiber

Samstag, 05.09.2009 um 15:58 Uhr

Moin liebe Lesergemeinde,

heute gibt es mal ein paar kleine Tipps zu verschiedenen LaTeX Problemen.

Bis vor kurzem habe ich Hoch-/Tiefstellungen von Buchstaben im Text immer in der Matheumgebung mit _{} gemacht. Da werden die Buchstaben allerdings kursiv geschrieben, was in einem Flusstext eher stört. Also habe ich das kursiv mit \mathrm{} wieder aufgehoben. Nicht sonderlich toll zu schreiben und daher nicht zweckmäßig. Neulich habe ich beiden Befehle \textsuperscript und \textsubscript gefunden. Mit denen kann man Buchstaben hoch und tief stellen. Um das Schreiben etwas abzukürzen habe ich mir die beiden Befehle \up und \down definiert. Das ist kürzer und einfacher zu merken :) Wer diese Befehle auch verwenden möchte, muss die folgenden zwei Zeilen in seine tex-Dokumenteneinleitung schreiben:

\newcommand{\up}[2]{#1\textsuperscript{#2}}
\newcommand{\down}[2]{#1\textsubscript{#2}}

Für Tabellen nutze ich entweder tabularx oder auch LTXTable (verbindet longtable mit tabularx). Tabularx führt den neuen Spaltentyp X ein, die X Spalte passt sich variabel an die Breite der Tabelle und der Anzahl der Spalten an. Text wird allerding immer linksbündig gesetzt. Will man eine zentrierte Spalte haben muss man in der Spaltendefinition \centering\arraybackslash}X schreiben. Oder man legt sich selber einen neuen Spaltentyp an, den man einfach anstelle von X einsetzt. Für eine zentrierte X Spalte nutze ich folgenden Befehl:

\newcolumntype{C}{>{\centering\arraybackslash}X}

Manchmal wird es notwendig die Spalten manuell in der Größe einzustellen, das geht mit p{Breite}, allerdings ist dieser Typ ebenfalls linksbündig. Für eine Spalte mi der Ausrichtung in der Mitte und Rechts sind folgende Befehle zu verwenden.

\newcolumntype{Z}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}

Ab und zu ist es ganz schick ein Bild durch Text umfließen zu lassen. Das geht mit dem Paket wrapfig ganz gut. Allerdings hat das Paket einen nervigen Fehler. Wenn das umflossene Bild nicht vollständig umflossen wird, sondern der nebenstehende Text kürzer ist als die Bildhöhe, wird die wrapfig Umgebung nicht richtig geschlossen und man bekommt Probleme mit den Absätzen und Einrückungen. Das lässt sich durch einen Workaround lösen. Dieser definiert den neuen Befehl \wrapfill. Dieser wird an das Ende des Absatzes der das Bild nicht ganz umfließt angefügt. Nun wird die Bildumgebung ordentlich geschlossen. Der nächste Absatz beginnt jetzt unter dem Bild. Hier sollte ich noch anfügen, dass ich diesen Hack auch nur kopiert habe. Ich habe dazu leider gar keine Doku gefunden. Das Paket wrapfig ist zwar leidlich dokumentiert, aber durchgesehen habe ich dort trotzdem nicht.


\usepackage{blindtext,wrapfig}
\makeatletter
\newcommand\wrapfill{\par
\ifx\parshape\WF@fudgeparshape
\nobreak
\vskip-\baselineskip
\vskip\c@WF@wrappedlines\baselineskip
\allowbreak
\WFclear
\fi
}
\makeatother

LaTeX Serienbriefe – GUI zur Adressbuch Generierung

Freitag, 24.07.2009 um 16:32 Uhr

Moin liebe Lesergemeinde,

da ich mich ja, wie ihr wisst, ausführlich mit LaTeX beschäftige, gibt es heute eine kleine GUI Anwendung, die das Leben mit LaTeX etwas vereinfachen soll.

Aber vorher noch zur Vorgeschichte:

Ich habe vor einiger Zeit ein Projekt begonnen, was das Schreiben von Briefen in LaTeX vereinfachen soll. Das heißt es gibt eine Oberfläche in der man sämtliche Adressdaten und den Briefinhalt eingeben kann. Beim Speichern der Angaben wird mit Hilfe eines Brief Templates das ganze in einen LaTeX Brief umgewandelt.

Das Ganze soll sich allerdings mehr an Firmen richten, denn jemand (Admin) muss sich die Arbeit machen und ein LaTeX Template im Corporate Design der jeweiligen Firma anfertigen. Dieses Template könnte (read only) im Netz liegen und von den Mitarbeitern mit Hilfe meiner Oberfläche genutzt werden. Das würde den Nutzern erlauben, wirklich nur den Brief mit den jeweiligen Daten zu verfassen, das ganze Layout wird automatisch im Hintergrund durch ein Template erzeugt. Es gibt zwar auch Vorlagen, die man in Word erstellen kann, aber da kann man doch schnell das Design verhunzen, wenn man keine Ahnung hat – außerdem sieht sogar ein Latex Brief deutlich besser aus, als ein Word Brief.

Das Projekt wird in Python mit Qt als GUI Framework geschrieben. Momentan habe ich das große Projekt (was ich eben beschrieben habe) allerdings ersteinmal hinten angestellt. Da ich gerade erst Python richtig lerne, versuche ich kleine Teilaufgaben zu programmieren. Die heute vorgestellte Software kann also als Teilprojekt angesehen werden.

Die Oberfläche für die Briefe soll später auch Serienbriefe unterstützen. Da LaTeX aber ein eigenes Adressbuchformat voraussetzt, muss man gängige Adressbücher aus Evolution, Outlook, Thunderbird, etc. erst in dieses Format bringen. Das wäre händisch sehr unschön zu lösen, pflegen lässt sich so ein Adressbuch eher auch schlecht, da es bisher dazu keine sinnvolle Oberfläche gibt.

Adressbuchformat von LaTeX abgespeichert in einem *.adr-Textfile:

\adrentry{Name}{Vorname}{Adresse}{Telefon}{F1}{F2}{Kommentar}{Kürzel}

Durch ein Python Skript von Frederik Elwert bin ich auf die Idee gekommen, eine GUI zum Mapping eines Adressbuches im CSV Format in das LaTeX kompatible Format zu schreiben. Das eigentliche Mapping führt das Skript von Frederik bereits aus, ich habe dieses um eine GUI erweitert. Vollständig konsolenbedienbar bleibt das Skript allerdings trotzdem.

Nun aber genug der Rede:

onGnome

onKDE

onWindows

Wie man sieht, funktioniert das Programm mit Gnome, KDE und Windows. Mac OS kann ich nicht testen. Das Programm sollte mit jeder Standard-Installation von Python und PyQt4 laufen. Bei Kubuntu ist alles standardmäßig vorhanden, bei Ubuntu muss man schauen, ob PyQt4 bereits installiert ist und es notfalls nachinstallieren.

Bedienung:

GUI:

Das Adressbuch muss im CSV Format vorliegen. Jede mir bekannte Adressbuchverwaltung kann in ein CSV Format exportieren, was also kein Problem darstellen dürfte. Das Skript muss ausführbar sein (chmod +x LatexAddressbook.py). Wird das Skript ohne Parameter aufgerufen startet die GUI automatisch (./LatexAddressbook.py). Mit Klick auf die Schaltfläche “…” kann das CSV Adressbuch ausgewählt werden. Ist dies geschehen, sollten in der Liste am rechten Rand des Programms alle verfügbaren Spaltenüberschriften des Adressbuches erscheinen. Diese kann man nun per Drag and Drop in die Textfelder für die jeweiligen Adressbuchfelder des LaTeX Adressbuches ziehen.

Dabei können auch mehrere CSV-Felder in einem LaTeX Feld verbunden werden.

Beispiel: Die Adresse liegt im CSV Adressbuch in den einzelnen Spalten Adresse, PLZ, Ort vor. So kann man das Feld “Address” folgendermaßen gestalten: $Adresse\\$PLZ $Ort. \\ bedeutet in LaTeX einen Zeilenumbruch. Das heißt man hat nun die gesamte Adresse des Empfängers in einem Feld stehen.

In dieser Weise können auch alle anderen Adressbuchfelder ausgefüllt werden. Free 1 und Free 2 sind im LaTeX Adressbuch keiner Funktion zugeordnet und können so frei verwendet werden. Mit Klick auf OK wird man nach dem Speicherort für das LaTeX Adressbuch gefragt. Dieses wird mit der Erweiterung *.adr gespeichert.

Konsole:

Hier ist die Bedienung der vom Original Skript übernommen. Mit dem Befehl

./LatexAddressbook.py -h

wird die Hilfe angezeigt. Hier ist ein Beispielbefehl, wie er zur Umwandlung des Adressbuches genutzt werden kann.

./LatexAddressbook.py -m 'Name=$Nachname' -m 'Vorname=$Vorname' -m 'Adresse=$Strasse\\$PLZ $Ort' -m 'F1=$Geschlecht' -o 'adressen.adr' adressen.csv

So das wars auch schon zur Benutzung. Bei meinen Tests hat eigentlich alles funktioniert soweit. Bitte gebt mir Feedback, ob prinzipiell Interesse besteht eine GUI für Briefe in LaTeX zu benutzen und wenn ja, was alles an Features enthalten sein sollte. Gibt es eventuell Interessenten, die sich vorstellen könnten, sowas auch in der eigenen Firma einzusetzen? Bitte gebt mir Feedback, ob es sich überhaupt lohnt, soetwas zu programmieren.

Probleme:

Probleme gibt es, wenn es Spaltenüberschriften in der CSV Datei mit Sonderzeichen gibt. Die Überschriften werden im Skript als Schlüssel in einem Dictionary verwendet. Ich habe bisher nichts gefunden, was UTF-8 Schlüssel in Dictionaries in Python erlauben würde. Ich lasse mich aber gerne eines Besseren belehren.

Es fehlt auch noch eine Mehrsprachen-Unterstützung. Die ist allerdings schon vorgesehen. Allerdings würde ich sowas erst implementieren, wenn Interesse an Nutzung bestehen sollte.

Falls weitere Fehler auffallen oder es Verbesserungsvorschläge gibt, dann bitte ab damit in die Kommentare.

Aber nun, fast hätte ich es vergessen, hier der Download des Skripts. Sollte ich das ganze noch weiter entwickeln, würde ich das auch bei Launchpad hosten.

Download: latexAddressbook.zip

LaTeX Vorlage für wissenschaftliche Arbeiten und Bücher

Freitag, 03.07.2009 um 16:27 Uhr

Moin liebe Lesergemeinde,

da ich gerade meine Diplomarbeit schreibe und diese wie alle anderen Dokumente auch in LaTeX verfasse, will ich diese Vorlage der Öffentlichkeit vor- und zur allgemeinen Nutzung zur Verfügung stellen. Mit der Vorlage lassen sich sehr unkompiziert umfangreiche wissenschaftliche Arbeiten verfassen, die zudem noch sehr gut aussehen. Mit wenigen Besonderheiten, die man beim Schreiben gleich beachten sollte, kann man sich vorranging auf den Inhalt konzentrieren und muss sich nicht mit großen Formatierungen und Verzeichnissen etc herumschlagen.

Die Vorlage ist in mehrere Ordner aufgeteilt. Im Dokument Root Verzeichnis findet man das Hauptdokument projekt.tex), die bereits übersetzte PDF und die Kile Projekt Datei. Die Kile Projekt Datei fasst alle Dateien zusammen und hat den Vorteil, dass man später von allen eingefügten Dokumenten aus übersetzen kann und nicht ins Masterdokument zurückkehren muss.

Verzeichnisstruktur:

root: Wie schon erwähnt: Hauptdokument mit allen Einstellungen, fertige PDF und das Kile Projekt

bibliography: Hier befinden sich die Literaturverzeichnisse (*.bib)

chapter: Hier befinden sich alle Kapitel in einzelnen *.tex Dokumenten aufgesplittet

chapter/table: Hier befinden sich alle Tabellen in separaten *.tex Dokumenten

data: Verzeichnis für Quelltexte oä. welche direkt in das Dokument (zB verbatim Umgebung) eingebunden werden

images: Hier befinden sich alle Bilder für das gesamte Projekt, das Skript zum Umwandeln von SVG nach PDF liegt in der Vorlage auch bei

Besonderheiten:

Die größte Besonderheit dieser Vorlage ist, dass alle Bildformate die LaTeX oder PDFLaTeX unterstützt, in einem Dokument verwendet werden können (also ps, eps, jpg, png, pstricks, pdf). Dies erfordert allerdings einen gesonderten Kompilierbefehl. Anstatt mit latex oder pdflatex zu übersetzen, verwendet man

ps4pdf projekt.tex

Bei TeX Live ist das Programm schon dabei, wie es bei MikTex unter Windows aussieht, kann ich leider nicht sagen. Nutzt man keine ps oder eps kann auch der normale pdflatex Befehl verwendet werden.

Die nächste Besonderheit sind die Tabellen. Um ein einheitliches Layout der Tabellen zu erhalten, auch wenn diese mehr als eine Seite lang sind, bin ich auf das Paket ltxtable umgestiegen, welches die Pakete longtable und tabularx vereint. Das heißt die Tabellen können über mehrere Seiten gehen und man kann Tabellenbreite und die Ausdehnung einzelner Spalten mit Hilfe der Spaltenangaben X oder C (wie X nur zentriert) verwenden. Ein Beispiel habe ich im Ordner chapter/table/test_longtable.tex eingefügt. Eingebunden wird diese Tabelle, wie es in introduction.tex zu sehen ist.

Die PDF Metadaten werden mit dem Hyperref Paket in die PDF geschrieben. Die Einstellungen des Hyperref Paketes findet man im Hauptdokument projekt.tex in den Zeilen 118 bis 128 und müssen dort angepasst werden.

Titel, Autor und Thema für die Titelseite und verschiedene andere Stellen (wie zB die Selbständigkeitserklärung) werden im Dokument title.tex angepasst. Dazu sind die Zeilen 25 bis 27 zu editieren. Dies sind benutzerdefinierte Befehle, die mehrfach wiederverwendet werden (können).

Die grundlegenden Einstellungen des Dokuments sind im Hauptdokument projekt.tex zu finden. Alle Optionen sind dort kommentiert und können auch in der Koma Skript Dokumentation nachgelsen werden.

Troubleshooting:

Diese Vorlage wurde mit TeX Live 2008 angefertigt. Das Koma Skript (hier wird die Klasse scrbook verwendet) hat in TeX Live 2008 einen großen Schritt getan, was die Anpassung betrifft. Es gibt hunderter neuer Optionen, die einem ermöglichen ein schönes Dokument zu schreiben.

Daher kann es sein, dass bei der Nutzung von TeX Live 2007, was bis Ubuntu 9.04 standardmäßig in den Quellen vorhanden ist, Probleme beim Übersetzen auftreten. Ist dies der Fall sollten im Hauptdokument projekt.tex die Zeilen 137 bis 138 auskommentiert werden. Alle anderen verwendeten Optionen sollten bereits in TeX Live 2007 vorhanden sein. Wenn das Auskommentieren nicht hilft, bitte ein Kommentar hinterlassen. Sollten Pakete fehlen, müssen diese nachinstalliert werden, andernfalls müssen diese ebenfalls auskommentiert werden, wenn man sie denn nicht braucht.

Hinweis: Das Projekt ist UTF-8 formatiert. Also sollte man sicher stellen, dass der entsprechende LaTeX Editor die Dateien richtig anzeigt.

Für Anregungen und Korrekturen bin ich natürlich wie immer Offen.

Hier nun Download der Vorlage Dateien: LaTeXVorlage ZIP

Und die Beispiel PDF (allerdings mit wenig Inhalt): LaTeX Vorlage PDF

Kleines Shell Skript zum Umwandeln von SVGs in PDF Bilder

Samstag, 20.06.2009 um 14:10 Uhr

Moin liebe Lesergemeinde,

da ich ja, wie in anderen Einträgen schon erwähnt des Öfteren in LaTeX Dokumente verfasse, ist es auch manchmal nötig Grafiken einzubinden. Da ich normalerweise Grafiken mit Inkscape im Vektorformat SVG erstelle, ist es nötig diese Dateien zu konvertieren. LaTeX kann leider SVGs nicht direkt einbinden. Bei meinen Recherchen im Internet habe ich auch nicht wirklich Bestrebungen gefunden, dieses Leck zu stopfen – also wer von euch in LaTeX voll den Durchblick hat, kann ja mal die Unterstützung dafür Programmieren ;-)

Damit die Eigenschaften eines Vektorformats – also die gute Skalierbarkeit der Grafiken – erhalten bleiben, wandle ich die Dateien immer in eps oder pdf um. Allerdings wird es sehr anstrengend, wenn man eine Kleinigkeit im Bild geändert oder sehr viele Bilder hat, diese immer wieder von Hand umzuwandeln. Deshalb habe ich mir ein kleines Shell Skript geschrieben, dass immer im Ordner meiner SVG Bilder liegt und dort aufgerufen werden kann.

Benutzung:

Man gehe in einer Konsole in den Ordner mit den Bildern und dem Skript. Das Skript muss die Rechte zum Ausführen haben. Ist dies noch nicht der Fall, dann den folgenden Befehl ausführen:

jazz@jazz:~$ chmod +x SVG2PDF

Jetzt hat man die Möglichkeit das Skript ohne Parameter aufzurufen. Dann werden alle im Ordner befindlichen SVGs in eine PDF konvertiert. Dabei richtet sich die Größe der PDF nach der Seiteneinstellung der SVG.

jazz@jazz:~$ ./SVG2PDF

Die zweite Variante ist der Aufruf mit Parametern. Als Parameter kann man eine beliebig lange Liste von SVG Dateien angeben. Dies ist sinnvoll, wenn man nicht alle SVGs in PDF umwandeln will, wenn man zum Beispiel nur ein oder zwei der im Ordner befindlichen SVGs verändert/hinzugefügt hat.

jazz@jazz:~$ ./SVG2PDF eine.svg eineandere.svg

So jetzt hier das Skript zum Runterladen (Rechtsklick → Ziel Speichern unter):

Skript SVG2PDF

Und hier nochmal ausgeschrieben:

#!/bin/bash
if [ $# -lt 1 ]
then
    for f in *.svg; do 
        e=$(basename $f svg)eps;
        echo "Converting $f to a pdf image!"
        inkscape --export-embed-fonts  --export-text-to-path -f $f -E $e; 
        epstopdf $e
        rm $e
    done
else
    for f in $*; do
        if [ -f $f -a ${f#*.} = "svg" ]
        then
            e=$(basename $f svg)eps;
            echo "Converting $f to a pdf image!"
            inkscape --export-embed-fonts  --export-text-to-path -f $f -E $e; 
            epstopdf $e
            rm $e
        else
            echo "File $f is not a SVG!"
        fi
    done
fi

EDIT: Für das Skript muss epstopdf (unter Ubuntu in texlive-extra-utils) installiert sein. Ist es nicht vorhanden, führt dies ebenfalls zu “command not found”-Fehlern.

PDFTK und die Umstände eine PDF zu erzeugen

Samstag, 18.04.2009 um 18:12 Uhr

Moin liebe Lesergemeinde,

da ich viel LaTeX nutze, habe ich logischerweise auch viel mit PDFs zu tun. Da ich meine Briefe zum Beispiel alle hintereinander weg in ein Tex-Dokument schreibe und dann aber jeweils nur den aktuellen Brief brauche zum Verschicken, muss ich Seiten aus einer PDF herauskopieren und sie in eine andere PDF packen.

Es gibt da verschiedenste Möglichkeiten – vom seitenbezogenen PDF Druck aus Evince oder Okular (PDF Betrachter) heraus, über Öffnen in Gimp und exportieren als PDF oder die Bezahlvariante des Acrobat Readers von Adobe. All diese Varianten sind aber irgendwie zu umständlich und beschreiben eigentlich immer nur einen Umweg.

Nach meinem Geschmack ist daher das Tool PDFTK. Es ist ein extrem mächtiges Werkzeug was die PDF-Bearbeitung anbelangt. Man kann PDFs zusammenfügen, einzelne Seiten auslesen, die Seiten einer PDF einzeln speichern, die Metadaten auslesen und aktualisieren, PDF Sicherheits-Optionen setzen (auch wenn die meisten davon von Evince und Okular ignoriert werden ;-) ), Hintergrundbilder und Wasserzeichen setzen und noch einiges mehr.

Problem hierbei ist bei komplizierteren Vorgängen die unübersichtliche Schreibweise in der Konsole (Siehe Man-Page). Ich hatte überlegt selber mal eine GUI dafür zu entwickeln, da ich nicht immer in der Man-Page schauen wollte, wie der Befehl lautet. Bei der Recherche bin ich auf ein bestehendes Entwicklungsprojekt gestoßen, welches aber schon sehr bedienbar ist. Der Name des Projekts heißt PDFChain. Der ubuntuusers-Beitrag beinhaltet auch die entsprechenden Download-Links. Die Oberfläche ist eigentlich intuitiv bedienbar.

Jetzt aber genug der Vorstellung, viel Spaß beim PDF Bearbeiten ;-)

Leider habe ich aber noch ein Problem mit PDFTK, der mich ein Bisschen annervt. Es gibt nicht die Möglichkeit, dass input- und output-PDF-File das selbe ist.

pdftk hallo.pdf update_info info.txt output hallo.pdf

Das ist gerade sehr unschön, wenn man die Metadaten einer PDF aktualisieren möchte (siehe Code-Beispiel). So muss man quasi eine neue PDF Datei erzeugen mit den neuen Metadaten, die alte löschen und die neue wieder in die alte umbenennen. Irgendwie blöd.

Es gibt dann noch die Option dont_ask, diese überschreibt ohne Nachfrage bestehende Dateien. Leider funktioniert diese Option trotzdem nur, wenn man für input und output einen anderen Namen vergibt. Das ließe sich meiner Meinung nach nur durch ein Skript oder durch die Integration in das oben genannte Programm verhindern (zumindest für update_info, wo es ja auch irgendwie sinnvoll ist) oder hat jemand noch eine andere Idee.

Paketmanager von Texlive 2008

Samstag, 28.03.2009 um 18:17 Uhr

Hallo liebe Lesergemeinde,

nach längerer Zeit veröffentliche ich nun mal wieder einen Eintrag. In einem früheren Artikel habe ich schon darüber berichtet, wie mit wenig Aufwand TexLive 2008 auf einem Ubuntu System installiert werden kann. Zu einer der aufregensten Neuerungen zu dieser Distribution gehört ein eigener Paketmanager. Mit ihm ist es möglich neue Pakete direkt im System zu installieren ohne extra die *.sty Dateien etc. händisch in die entsprechenden Ordner zu kopieren und ins System zu integrieren, zudem können Pakete aktualisiert und gelöscht werden.

Der Paketmanager kann sowohl über die Konsole als auch übereine GUI gesteuert werden, auch wenn ich zugeben muss, dass die GUI nicht mehr wirklich zeitgemäß aussieht.

Ich werde hier nur kurz die GUI vorstellen, will man den Manager über die Konsole steuern, hilft die Dokumentationsseite des Paketmanagers sehr gut weiter.

Die GUI startet man mit dem Befehl

tlmgr --gui

Nun bekommt man folgende Oberfläche zu Gesicht. Zu allererst muss die aktuelle Paketliste aus dem Internet geladen werden. Die offizielle Paketquelle ist bereits voreingestellt, so dass nur noch auf den Button “Laden” gedrückt werden muss. Will man eine alternative Quelle verwenden, kann dies mit dem Button “Ändern” eingestellt werden. Nun hat man verschiedene Tabs zur Auswahl, die eigentlich selbsterklärend sind. Die beiden wichtigsten sind sicherlich “Installation” und “Aktualisieren”. Über das Suchfeld findet man dabei seine gewünschten Pakete sehr schnell. Vielmehr kann man zu diesem Programm eigentlich gar nicht mehr sagen, außer dass die Oberfläche einer Überarbeitung bedarf, denn sie nutzt die Grafikbibliothek PerlTK.

Paketmanager TexLive 2008

EDIT:

Ich habe noch ein paar Korrekturen:

1. Ich habe vergessen zu erwähnen, dass der Paketmanager natürlich als sudo ausgeführt werden muss, ansonsten kann man natürlich keine Pakete unter /usr/local/… installieren.

2. Beim händischen Kopieren des texlive Ordners funktioniert zwar Kompilieren via Kile und Konsole. Ich hatte mit dem Paketmanager nur probiert, ob er startet und die Pakete anzeigt. Dabei ist mir leider nicht aufgefallen, dass er keine Pakete als Installiert markiert! Der Paketmanager erkennt demnach keine installierte TexLive Distribution. Dies ist mir aufgefallen, als ich in der Konsole den Befehl:

sudo tlmgr update --all

ausgeführt habe. Das führte zu der Fehlermeldung:

Fundamental package bin-texlive not present, that is sooo bad.
Serious error, bin-texlive not found

Das ist natürlich sehr schlecht, da somit keine Aktualisierungen rein kommen. Bei einer Installation mit der Option die Symbolischen Links im Systemverzeichnis zu generieren tritt das Problem nicht auf.

Allerdings hat man mit dem Fehler auch Probleme, wenn man ein Ubuntu Upgrade startet. Da werden nämlich die alten TexLive Pakete wieder drüber installiert :-/

Da ich keine Lust habe alle halbe Jahre die Netzinstallation die Ewigkeiten dauert zu wiederholen, habe ich mir das TexLive Iso Image heruntergeladen und von diesem installiert. Nun war innerhalb von Minuten die Distri drauf. Leider sind die Pakete nicht sonderlich aktuell, so dass ein zusätzliches Update nötig wird. Nach der Umstellung auf die Installationsresourcen aus dem Netz:

sudo tlmgr -location http://mirror.ctan.org/systems/texlive/tlnet/2008 update --all

kommen eine ganze Reihe von Paketen zusammen. Insgesamt ist die Aktualisierung aber weniger Zeitaufwendig als eine Neuinstallation!

So dies war nun ein etwas längerer Nachtrag, aber wichtig für alle, die meine Installation nachgemacht haben.

TeX Live 2008 auf Ubuntu 8.10/9.04 installieren

Mittwoch, 25.02.2009 um 22:46 Uhr

Moin liebe Lesergemeinde,

da Ubuntu selbst in Jaunty noch kein TeX Live 2008 integriert und diese Version sehr viele sehr gute Überarbeitungen der Bibliotheken enthält, will ich nicht länger auf TeX Live 2008 verzichten. Zudem bringt diese Distribution einen eigenständigen Paketmanager mit, mit dessen Hilfe man TeX-Pakete unabhängig der Linux-Distribution aktualisieren und installieren kann.

Eine Kurzanleitung für die Installation habe ich auf der Seite von tug gefunden, nach der sich meine Anleitung anlehnt. Das Installationsprogramm kann man von hier herunterladen.

Hat man die Installation heruntergeladen, muss man das tar.gz Archiv entpacken. Nun hat man zwei Möglichkeiten. Entweder man nutzt die Konsolenbasierte Installation oder man installiert TeX Live über eine GUI.

Installation ohne GUI

In der Konsole gibt man folgenden Befehl ein. Das sudo ist notwendig, um TeX Live nach /usr/local/ zu installieren. Will man TeX Live in sein Home-Verzeichnis installieren, kann man ohne sudo installieren, muss aber die Installationspfade anpassen.

jazz@jazz:~/Desktop/install-tl$ sudo ./install-tl

Per default sind in der Installation alle Pakete angewählt. Für mich war es nicht sehr sinnvoll alle Sprachen mit zu installieren. Die Spracheinstellungen erhält man durch tippen von “l” in die Konsole. Nun kann man die entsprechenden Sprachen auswählen, die Steuerung ist intuitiv und steht immer mit dabei. Nun kehrt man zum Hauptmenü der Installation zurück und startet mit “i” die Installation. Nun kann man ne geraume Zeit warten, denn die Installation lädt nun ca. 1,4 GB aus dem Netz.

Ist dies geschehen, werden die Pakete installiert.

Installation mit GUI

Für die Installation mit grafischer Bedienoberfläche muss noc, sofern nicht schon geschehen, das Perl/TK-Paket installiert werden.

jazz@jazz:~$ sudo apt-get install perl-tk

Nun kann in einer Konsole die Installation mit grafischer Oberfläche gestartet werden.

jazz@jazz:~/Desktop/install-tl$ sudo ./install-tl -gui

Folgende Oberfläche sollte man nun erhalten. Auch hier kann man alle Einstellungen wie in der Installation ohne GUI durchführen.

texlive install gui

Eine wichtige Option ist bei der Installation von TeX Live zu beachten. Da sich die Pakete in /usr/local installieren, liegen dort ebenfalls alle Binaries. Man muss dem System noch beibringen, auch das TeX Live 2008 zu nutzen. Nun hat man mehrere Möglichkeiten.

1. Variante

Man passt nach der Installation die $PATH Variable des Systems an, so dass das System weiß, wo es nach den Programmen für TeX Live zu schauen hat. Das ist aber problematisch sofern manzum Beispiel Kile als Tex-Editor nutzt. Es gibt keine Möglichkeit Kile zu sagen, wo er die besagten Programme her nehmen soll. Es nutzt auch nicht die Pfadangaben in einer bestimmten Reihenfolge zu beschreiben. Da Kile an Tex Live aus den Paketquellen von Ubuntu gebunden ist, hat man zwangsläufig eine TeX Live 2007 Variante installiert.

Will man jedoch nur über die Konsole LaTeX Dokumente übersetzen, ist diese Variante durchaus praktikabel, da man bis auf die Pfadangabe nicht ins System eingreift und Fremdprogramme drauf hat.

2. Variante

Man setzt vor der Installation die Option “Symbolische Links in Systemverzeichnissen” (siehe Screenshot) auf Ja. Dann werden alle Binaries in /usr/bin/ Verzeichnis verlinkt. Dies ist sicherlich die einfachste und sinnvollste Variante. So überschreibt man direkt alle Links von der alten TeX Live 2007 Version.

3. Variante

Diese Variante nutze ich, da ich Tex Live 2008 auf mehreren PCs installiert habe. Da ich nicht die Lust hatte mehrmals eine Installation von über einem GB aus dem Netz laden zu lassen, habe ich TeX Live ohne die Links in die Systemverzeichnisse installiert. Mit dem Befehl

sudo ln -s /usr/local/texlive/2008/bin/i386-linux/* /usr/bin/ -f

erzeugt man in /usr/bin/ Verzeichnis zu allen Dateien der LaTeX Distribution symbolische Links. Allerdings geht dies nur auf die brachiale Art und Weise mit der Option “-f”, da bereits Programme im Ordner von TeX Live 2007 existieren und diese überschrieben werden müssen. Das ist sicher nicht die schönste Variante, geht aber schnell, wenn mehrere PCs TeX Live 2007 bekommen sollen und diese auch von Kile und anderen Editoren genutzt werden sollen. Es ist sichermit Vorsicht zu genießen und sollte nicht unbedingt von Laien ausgeführt werden, da bei einer falschen Eingabe große Schäden am System etstehen können! Darauf sei ausdrücklich hingewiesen!

Nun gilt es zu überprüfen, ob auch alles glatt gelaufen ist. Dazu tippt man in der Konsole

jazz@jazz:~$ latex -v

Herauskommen sollte dabei

pdfTeX 3.1415926-1.40.9-2.2 (Web2C 7.5.7)
kpathsea version 3.5.7
Copyright 2008 Peter Breitenlohner (eTeX)/Han The Thanh (pdfTeX).
Kpathsea is copyright 2008 Karl Berry and Olaf Weber.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the pdfTeX copyright and
the Lesser GNU General Public License.
...

In Kile überprüft man das ganze mit einem kleinen Latex-Programm in dem man die Version des Koma-Skripts überprüft.

Skript:

\documentclass{scrartcl}
\begin{document}
TeX Live 2008
\end{document}

Nun schaut man sich nach dem Kompilieren in Kile die .log-Datei an. Findet man dort die folgende Zeile ist die Installation geglückt, denn TeX Live 2007 nutzt Koma-Skript 2.95b und TeX Live 2008 nutzt die Version 3.02b. Herzlichen Glückwunsch ihr habt ein neues und aktuelles TeX Live!

Document Class: scrartcl 2009/01/24 v3.02b
KOMA-Script document class (article)