Software-Projekt 2008/09: viive


Nach nun einiger Zeit und Überarbeitung haben wir uns dazu entschlossen, die Dokumente des Software-Projektes 2008/09 zu veröffentlichen.

Aktuell fehlt noch das Handbuch; hier will der Index nicht so recht generiert werden (und ich weiß nicht, wieso das auf einmal nicht mehr)… Natürlich sind die Dokumente in LaTeX gesetzt ;-)

LG,
Dominik

LaTeX-Template


Weil ich es ständig brauche: meine häufigste LaTeX-Vorlage zum Kopieren und weiterverwenden.

\documentclass[a4paper,10pt,twoside]{article}

\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage[sc,osf]{mathpazo}
\usepackage[scaled=.90]{helvet}
\usepackage{beramono,longtable,array,booktabs}
\usepackage{graphicx,textcomp,calc,verbatim,amsmath,xcolor}
\usepackage{amssymb,listings,enumitem,microtype,hyperref}

\linespread{1.05}
\setlength\parskip{1ex}
\setlength\parindent{0pt}
\renewcommand\arraystretch{1.3}
\raggedbottom

\setlist{itemsep=.25pt,leftmargin=30pt,topsep=.5ex}
\setlist[2]{leftmargin=*}
\setdescription{leftmargin=10pt,style=nextline}

\lstset{
    numbers=left,
    basicstyle=\footnotesize\ttfamily,
    numberstyle=\tiny\sffamily,
    tabsize=4,
    xleftmargin=30pt,
    breaklines=true
}

\hypersetup{
    linktocpage=false,
    colorlinks=true,
    linkcolor=black,
    citecolor=black,
    filecolor=black,
    urlcolor=black,
    frenchlinks=false,
    breaklinks=true,
    pdffitwindow=true,
    pdfauthor={Dominik Menke}
}

\author{Dominik Menke}
\date{\today}
\title{...}

\begin{document}
\maketitle


\end{document}

Aufgrund fehlender Dokumentation nur eine kurze Zusammenfassung: Es wird Palatino mit Kapitälichen und Mediävalziffern als Brot-, Helvetica als serifenlose und Bera Mono als dicktengleiche Schrift gesetzt. Eingabekodierung ist UTF-8, der Zwischenraum zwischen Listeneinträgen wird verringert, der Raum in Tabellenzellen vergrößert, es werden die »üblichen verdächtigen« Pakete geladen, anklickbare Hyperlinks aktiviert (zur besseren Lesbarkeit aber farblich nicht hervorgehoben) und eine Anpassung listings-Umgebung vorgenommen.

Durch die Verwendung des Paketes microtype (optischer Randausgleich) verbietet sich die Verwendung von latex/pdflatex im DVI-Modus. Stattdessen ist direkte PDF-Ausgabe zu forcieren oder das Paket herauszunehmen.

Die genaue Dokumentation der einzelnen Befehle findet sich direkt im CTAN (am besten via Katalog nach dem Paket suchen).

Daneben möchte ich nochmal kurz auf die Dokumenten-Klasse für Übungszettel hinweisen.

—Dominik

uhb-inf LaTeX-Klasse


Kurze Ankündigung: Auf einer Google Code-Seite verfolge ich einen Ansatz, die alte PI1-Dokumentklasse durch etwas moderneres zu ersetzen. Wer es nutzen möchte, darf sich sehr gerne bedienen, wer daran mitarbeiten möchte, kann sich bei mir melden.

—Dominik

The visual LaTeX FAQ


Bei Fragen zu (La)TeX, die ich entweder nicht sofort beantworten kann, oder aber Bereiche berühren, mit denen ich mich noch gar nicht auseinander gesetzt habe, konsultiere ich als erstes die Paketdokumentation. Oft genug habe ich aber nur eine Idee davon, was ich haben möchte und kenne die dazu passenden Pakete nicht (oder ich bin auf der Suche nach Alternativen…), hier helfen dann die UK TUG FAQ und das Pendant dazu bei Dante.

Jetzt flog mir eher durch Zufall eine Dokumentation zu, die einen ganz anderen Ansatz verfolgt: The visual LaTeX FAQ. Dahinter steckt die Idee, die Antworten auf die spezifischen Fragen zu Layout, Paketen, Schriften, Must-haves und Do-nots direkt anzuwenden und mit der entsprechenden Beschreibung in der UK FAQ zu verlinken.

Sicher, zum direkten Finden einer Lösung zu einer ganz bestimmten Frage eignet sich dieses Werk nicht, aber wann weiß man denn schon mal, was man will? ;-)

—Dominik

Verbesserte verbatim-Umgebungen


Nicht nur eine sehr nützliche Verbesserung bietet das verbatim-Paket an. Hat man bisher versucht durch Einrückungen den TeX-Quelltext übersichtlich zu halten, stieß man bei verbatim-Umgebungen bisher auf unschöne Nebeneffekte:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr.

\begin{verbatim}
    public final static void main(String[] args) { System.exit(-1); }
\end{verbatim}

Sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat.

Kompiliert zeigt sich dann, dass die kurze Java-Codezeile eben nicht mehr linksbündig mit dem Text ausgerichtet ist (ganz davon abgesehen, dass man Code-Schnippsel mit dem Paket listings einbinden sollte).

Mit dem verbatim-Paket (CTAN:/macros/latex/required/tools, Doku) ist das nun kein Problem mehr.

LG,
Dominik

Bilder mit Punkten und Unterstrichen


Punkte und Unterstriche mag LaTeX in Dateinamen (Bilder) nicht? Falsch:

\usepackage{grffile}

Das reicht schon. Sinnvoll ist es aber dennoch, sich die Doku (CTAN:macros/latex/contrib/oberdiek/grffile.pdf) anzusehen.

—Dominik

TeX-Symbol gesucht? Detexify gefunden!


Detexify ist ein kleines Webtool, in das man (nahezu) beliebige Symbole zu malen kann, und recht zügig den dazu passenden LaTeX-Code zurückgeliefert bekommt.

Definitiv in meinen Favoriten!

—Dominik

Update: Eine neue Version findet sich jetzt hier.

Professionelle Tabellen mit LaTeX


Tabellen anlegen ist mühselig weil relativ stumpf. Insbesondere sind longtable-Umgebungen mit einheitlichem Aussehen größtenteils copy'n'paste. Um mir diese Arbeit zu erleichtern, habe ich (nicht ganz ohne Hilfe) eine kleine Umgebung geschrieben:

% Benötigte Pakete
\usepackage[table]{xcolor}
\usepackage{longtable,calc,array}

% Vorgeplenkel: "LaTeX-Kernel"-Modus betreten (es werden interne Makros benötigt)
\makeatletter
% Grundfarbe definieren
\definecolor{tabcolor}{RGB}{255,0,0}
% alternierende Hintergrundfarben; ab der zweiten Zeile ein zartes rosa verwenden 
\rowcolors{1}{tabcolor!5}{}
% Zeilenhöhe um 50% vergrößern
\renewcommand\arraystretch{1.5}

% Eigentliche Definition. Es werden vier Parameter erwartet:
% 1. Spaltendefinition
% 2. Kopfzeile
% 3. Tabellenbeschriftung
% 4. (eindeutiger) Referenzschlüssel/Label
\newenvironment{tabelle}[4]{
    % temp-Variable definieren
    \let\xyz@tempa\@empty%
    % ersten Parameter durchgehen
    \@for\xyz@tempb:=#1\do{%
        % Spaltendefinition der longtable erzeugen
        % die Spaltenbreiten ergeben sich aus der anteiligen Textbreite
        % anzüglich 2 mal der Breite der Tabellenzellenbegrenzung
        % (einmal links, einmal rechts)
        \edef\xyz@tempa{\xyz@tempa p{\xyz@tempb\linewidth-2tabcolsep}}%
    }
    % longtable-Definition vorbereiten...
    \edef\xyz@tempa{\noexpand\begin{longtable}{\xyz@tempa}}
    % ... und ausführen
    \xyz@tempa
    % Kopfzeile; wird auf jeder Seite wiederholt und hat 15& Hintergrundfarbe
        \rowcolor{tabcolor!15} #2 \\
    \endhead
    % Fusszeile vor Seitenumbruch; angegebener Text + Hinweis, dass die
    % Tabelle fortgesetzt wird
        \caption[]{#3\\(wird fortgesetzt)}
    \endfoot
    % letzte Fusszeile ohne diesen Hinweis. Dafür mit referenzierbarem Label
    % und Eintrag ins Tabellenverzeichnis (sofern vorhanden)
        \caption{#3 \label{#4}}
    \endlastfoot
}{
    \end{longtable}%
}
% internen LaTeX-Modus wieder verlassen
\makeatother

Erläuterung der Parameter:

  1. Spaltendefinition. Erwartet wird eine Komma-separierte Liste mit Dezimalwerten, die der prozentualen Textbreite entsprechen. Beispiel: {.5,.25,.25} würde eine Tabelle mit drei Spalten erzeugen, die erste 50%, die anderen beiden 25% der verfügbaren Textbreite breit. Unsinnige Angaben wie {1,3} werden nicht verhindert, veranlassen LaTeX aber dazu Warnungen auszugeben. Anmerkung: Alle Spalten sind vom Typ p - und damit links ausgerichtet.
  2. Kopfzeile. Hier wird erwartet, dass zu maximal jeder definierten Spalte ein Kopfzeileninhalt angegeben wird. Tabellen-typisch ist die Trennung der Spalten mit &. Für das obige Spaltendefinitionsbeispiel wäre {a&&b} möglich; hier bekäme die 50% breite Spalte die Kopfzeilentext a, die dritte Spalte b.
  3. Tabellenbeschriftung. Der Text, der unter der Tabelle angezeigt wird. Entspricht dem normalen \caption.
  4. Referenzschlüssel. Eindeutiger Bezeichner der Tabelle; entspricht einem \label.

Der Einsatz ist mit diesem Wissen denkbar einfach:

\begin{tabelle}{.5,.5}{Kopf links & Kopf rechts}{Eine Tabellenunterschrift}{tab:example}
    Zelle 1.1 & Zelle 1.2 \\
    Zelle 2.1 & Zelle 2.2 \\
    ...       & ...       \\
    Zelle n.1 & Zelle n.2 \\
\end{tabelle}

Verbesserungsmöglichkeiten:

  • Parameter 4 (und vllt. auch 3) könnte man optional machen.
  • Derzeit sind einzig p-Spalten möglich
  • Die Farbe ist auch relativ statisch

Dass man in Tabelle keine Linien verwenden sollte, braucht hoffentlich nicht weiter erwähnt werden…

Viel Spaß beim Tabellen setzen ;-)
Dominik

(Nachbearbeitung 02.04.09, 19:13 - Blogsoftware hat einige (okay, alle) \ verschluckt…)

Fehlende LaTeX-Pakete installieren


Wenn man Pakete nutzen möchte, die die vorliegende TeX-Distribution (meist MiKTeX unter Windows, TeXlive unter Linux, MacTeX auf… dem Mac) nicht oder nur in einer veralteten Version bietet, gibt es zwei sinnvolle Möglichkeiten, dieses Paket dennoch einzubinden.

Beiden Möglichkeiten ist gemein, dass das Paket schon in irgendeiner Form auf dem System liegen muss - sei es nun als komprimierte ZIP-Datei, als pure INS- und DTX-Dateien, oder bereits kompiliert als STY-Datei.

Liegt das Paket nur komprimiert vor, so muss es zunächst entpackt werden. Dabei kommen (mindestens) eine DTX- und eine INS-Datei zum Vorschein. Dieses Paar von Dateien enthält alles, was man braucht.

Über den (dokumentierten) Paketquellcode (*.dtx) bzw. die Installationsanweisungen (*.ins) muss nun der LaTeX-Interpreter gejagt werden; dies geschieht durch latex <paketname>.ins in der Konsole, wobei <paketname> natürlich durch den Namen des Pakets ersetzt werden muss. Hierbei sollten mindestens zwei weitere Dateien entstehen: einmal die (wichtige) STY-Datei und einmal eine DVI-, PS- oder PDF-Datei, welche die Dokumentation zu dem Paket enthält.

Die STY-Datei ist nun endlich das Paket. Wohin man die aber nun kopiert ist eine Frage des geplanten Einsatzes: Möchte man das Paket nur einmalig verwenden (aus welchen Gründen auch immer), so reicht es die STY-Datei in das Verzeichnis zu kopieren, in dem die zu kompilierende TEX-Datei liegt.

Möchte man das Paket auch zukünftig wiederverwenden, sollte das komplette Paket in den lokalen TeX-Baum installiert werden. Zur Erklärung: ein TeX-Baum ist eine definierte Verzeichnisstruktur, wo LaTeX beim zusammensuchen der benötigten Klassen, Pakete und Fonts nach eben diesen Klassen, Paketen und Fonts schaut. Typischerweise gibt es in einem Mehrbenutzersystem einmal den globalen TeX-Baum, welcher die meisten Pakete enthält, sowie eine Reihe benutzerspezifischer lokaler TeX-Bäume. Diese lokalen Bäume liegen unter Linux im Verzeichnis ~/texmf, unter Vista/TeXlive im Verzeichnis C:\Users\<username>\texmf; oft zeigt die Umgebungsvariable $TEXMF bzw. %TEXMF% aber auch woanders hin (notfalls den Systemadministrator fragen ;-) ).

Hat man herausgefunden, wo der lokale TeX-Baum liegt, öffnet man diesen und muss sich nun an die Verzeichnisstruktur halten. Typischerweise werden Pakete unter .../texmf/tex/latex/<paket>/<paket>.sty gesucht (ich verweise hier mal auf die UK TeX FAQ), d.h. dorthin muss wenigstens die STY-Datei kopiert werden. Ich empfehle das komplette, heruntergeladene und entpackte Verzeichnis dorthin zu kopieren, allein weil so die Dokumentation und die Quelldaten nicht verloren gehen.

Ist das Kopieren vollzogen, muss dem TeX-System noch die Änderung bekannt gemacht werden. Unter Linux geschieht dies mit sudo texhash. Windows-Benutzer müssten da eventuell selbst nochmal googlen ;-) .

Grüße Dominik

Literaturverzeichnisse ein wenig vereinfacht


Gerade entdeckt und nur kurz notiert: biblatex.

LG
Dominik