LaTeX-Spickzettel

Ein Spickzettel mit einigen Notizen zu LaTeX
1 Unicode in LaTeX
    1.1 russisch
        1.1.1 Minimalbeispiel
    1.2 japanisch
        1.2.1 Minimalbeispiel
    1.3 Unicode erzeugen
2 richtig große Schriftarten
3 eigenes Verzeichnis definieren
    3.1 Ähnlich dem Inhaltsverzeichnis
    3.2 Ohne Seitenangaben
4 Präsentationen mit beamer.sty
    4.1 uncover-Optionen
    4.2 Druckversion (Handout)
5 Bäume
    5.1 qtree und pdfLaTeX
6 Graphen und Bäume mit tree-dvips.sty
7 Dateistrukturen mit "baum.sty"
8 Einträge in das PDF-Inhaltsverzeichnis (PDF-Bookmarks) hinzufügen
9 Seiten im PDF-Dokument drehen
10 Papiergröße bestimmen
11 Graphen mit GraphViz zeichnen



Einführung in TeX LaTeX

1 Unicode in LaTeX (Index)

Wer mehrsprachige Dokumente verfassen möchte kommt heutzutage um Unicode (genauer UTF-8) nicht mehr herum. Das ist eigentlich kein Problem, allerdings ist TeX/LaTeX etwas älter als Unicode und hat daher damit ein paar kleine Schwierigkeiten. Daher hier ein paar Anmerkungen dazu. Zuerst beschreibe ich ein Beispiel anhand des Russischen, welches allerdings auch für unzählige andere Sprachen gilt und anschließend Japanisch, da sich die CJK-Sprachen etwas anders verhalten.

1.1 russisch (Index)

Um Russisch zu verwenden (und andere Sprachen, wie Vietnamesisch, Walisisch, Kirgisisch aber kein CJK!) gibt es das UCS Paket von Dominique Unruh unter http://www.unruh.de/DniQ/latex/unicode/ zum Download. Das Paket muss nur heruntergeladen, entpackt, in den TeX-Tree kopiert (/usr/pkg/share/texmf/tex/) und mit mktexlsr propagiert werden.
Anschließend kann man mit
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage[russian,ngerman]{babel}
die russisch-Unterstützung in Dokumente einbinden und mit einem kleinen Makro:
\newcommand\ru[1]{\foreignlanguage{russian}{#1}}
als einfache Umgebung einrichten.


1.1.1 Minimalbeispiel (Index)

\documentclass{article}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\usepackage[russian,ngerman]{babel}
\newcommand\ru[1]{\foreignlanguage{russian}{#1}}
\begin{document}
\Large{\noindent Guten Tag, Herzlich Willkommen in \LaTeX!\\
\ru{Добрый день, Добро
пожаловать в \LaTeXе!}}
\end{document}
erzeugt :


1.2 japanisch (Index)

CJK (chinesisch/japanisch/koreanisch) Unterstützung ist in UCS nicht direkt enthalten und etwas komplizierter zu konfigurieren.
Dmit die Pakete auch gesichert werden, bietet es sich an, sie in das texmf-Verzeichnis des eigenen Benutzers abzulegen. Das ist ~/texmf/. CJK in TeX-Dateien verwenden:
\usepackage[encapsulated]{CJK}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
und wieder eine kleines Makro:
\newcommand{\cntext}[1]{\begin{CJK}{UTF8}{cyberbit}#1\end{CJK}}


1.2.1 Minimalbeispiel (Index)

\documentclass{article}
\usepackage[encapsulated]{CJK}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}
\newcommand{\cntext}[1]{\begin{CJK}{UTF8}{cyberbit}#1\end{CJK}}
\begin{document}
\Large{\noindent Guten Tag, Herzlich Willkommen in \LaTeX!\\
\Huge \cntext{お早う ご座います!}
\end{document}
erzeugt :


1.3 Unicode erzeugen (Index)

Um Unicode einzugeben benötigt man einen Editor der Unicode unterstützt. In pkgsrc existiert yudit, der verschiedene Tastaturbelegungen enthält und diese auch editieren kann.


2 richtig große Schriftarten (Index)

Richtig große Schriftarten ohne a0poster.sty bekommt man mit "type1cm".
\documentclass[a4paper,12pt]{article} 
\usepackage[latin1]{inputenc}
\usepackage{type1cm}
\begin{document} 
{\fontsize{199}{199pt}\selectfont \LaTeX}~\\~\\
Dies ist die normale 12pt-Größe im \LaTeX-Artikel.
\end{document}
erzeugt dann was richtig großes:


Type1cm beißt sich aber mit anderen Schriftarten, wie bspw. den T1-Fonts, die dann entfernt werden müssen.

3 eigenes Verzeichnis definieren (Index)

Für eine Dokumentation benötigte ich ein Verzeichnis eigener Funktionen, dazu erschien mir algorithm/algorithmic allerdings ungeeignet. Daher habe ich eine eigene Umgebung definiert, die gleichzeitig auch in einem Verzeichnis gelistet wird.

3.1 Ähnlich dem Inhaltsverzeichnis (Index)

%Zähler für die Nummer der Funktion
\newcounter{fktnr}\setcounter{fktnr}{1}
% Definition des Verzeichnis
\makeatletter
\newcommand{\listoffkt}{%
% Name des Verzeichnis
\section*{Funktionenverzeichnis\@mkboth{FKT}{FKT}}%
\@starttoc{fk}}
\makeatother
%
%Definition der eigentlichen Umgebung
\newcommand{\fkt}[4]{
\parbox{\textwidth}{ %soll Seitenumbruch in der Umgebung verhindern
\addcontentsline{fk}{subsection}{#1} %in das Verzeichnis hinzufügen
%alle Zeilen nach der 1. einrücken
\noindent\hangafter=1\hangindent=1em{\textbf{{Funktion \arabic{fktnr}: }}\smallskip \texttt{#1}}\\
\addtocounter{fktnr}{1}
{\texttt{Argument: }#2}\\
{\texttt{R"uckgabe: }#3}\\[2mm]
#4\\}%parbox
}%umgebung
Aufgerufen wird es folgendermaßen:
\fkt{global\_includes::getPatterns();}{SQL Anfrage}{Ergebnis der
Anfrage}{Führt \texttt{SELECT FROM WHERE} Anfrage in der
Datenbank aus und liefert das Ergebnis zurück}
Und erzeugt dabei folgenden Eintrag:

Mit
\addcontentsline{toc}{section}{Funktionenverzeichnis}
\listoffkt
kann man das Verzeichnis in den TOC übernehmen und anzeigen lassen:



3.2 Ohne Seitenangaben (Index)

Etwas modifiziert habe ich das obige Bsp. für ein Verzeichnis der CVS-Tags. Ich verwende CVS um die Quellcode-Dateien zu verwalten. Da in größeren Projekten meist mehrere Dateien verwand werden, möchte ich in den Metainformationen zum Buch nicht nur die Hauptdatei angeben, sondern alle mit \input eingelesenen Dateien. Dies lässt sich ebenfalls über ein Verzeichnis realisieren, das diesmal aber anders als das Inhaltsverzeichnis (ToC) nicht mit der Punktlinie und der Seitenzahl versehen werden soll. Dies lässt sich mit einer kleinen Änderung realisieren:
\makeatletter%
\newcommand{\listofcvsid}{%
\section*{\small Dateiverzeichnis:\@mkboth{CVS}{CVS}}%
\@starttoc{cvs}}%
\makeatother%
\newcommand{\cvsid}[1]{%
\addtocontents{cvs}{\$ #1\$~\\}%
}%
Dann wird in allen einzubindenden Dateien der CVS-Tag eingelesen und an geeigneter Stelle das Verzeichnis:
\cvsid{${}$Id: latex-tips.html,v 1.36 2014/08/21 09:24:03 stefan Exp ${}$}
...
\listofcvsid



4 Präsentationen mit beamer.sty (Index)



4.1 uncover-Optionen (Index)

Da beamer.sty einige nette Optionen hat, um Listen oder Aufzählungen einzeln aufzuklappen oder auch mit alert zu markieren, kann man davon natürlich exzessiv gebrauch machen. Wenn man nun einei Liste einzeln aufklappen lässt, werden alle folgenden Items komplett ausgeblendet. Das ist nicht unbedingt wünschenswert, denn so weiß das Publikum nicht, was noch zu erwarten ist.
Daher hat beamer diverse Opaqueness-Optionen, mit denen man noch nicht aufgeklappte Elemente ausgrauen kann. Dabei wird die Schriftfarbe mit dem jeweiligen Hintergrund vermischt. Mit \opaqueness kann man die Ebene und den Grad der Vermischung festlegen lassen:
\setbeamercovered{%
still covered={
	\opaqueness<1>{60}
	\opaqueness<2->{30}},
	again covered={
		\opaqueness<1->{15}
	}
}

Hiermit wir das nächste Item 40% ausgegraut und alle folgenden 70%. Objekte die wieder zugedeckt weren, werden mit 85% ausgegraut.
Allerdings hängt die Wirkung der ausgegrauten Schriftart immer vom Monitor bzw. Beamer ab, so das man wohl oder übel vor dem Vortrag die Technik testen sollte. Mit der \color-Option kann man gewisse zusammenhänge deutlich darstellen. Hier werden nacheinander die Anfangsbuchstaben des Satzes rot hervorgehoben und aber der 9. Folie alle Anfangszeichen eingefärbt. Gleichzeitig wird unten auf der Folie das Passwort korrespondierend zur Quelle hervorgehoben.
\frame{\frametitle{Passwörter von Hand generieren}
\begin{itemize}
\item Einen Satz ausdenken und die Initialen zusammenziehen\pause
\item 
{\color<3,9>{red}W}em 
{\color<4,9>{red}d}er 
{\color<5,9>{red}g}roße 
{\color<6,9>{red}W}urf
{\color<7,9>{red}g}elungen
{\color<8,9>{red},}~\\ 
{\color<9>{red}{\color<9>{red}E}}ines {\color<9>{red}F}reundes {\color<9>{red}F}reund {\color<9>{red}z}u
{\color<9>{red}s}ein{\color<9>{red}.}~\\ {\color<9>{red}-} {\color<9>{red}F}riedrich
{\color<9>{red}S}chiller{\color<9>{red},} {\color<9>{red}1805}
\pause
\item $\leadsto$
{\color<9>{red}{\color<3>{red}W} {\color<4>{red}d} {\color<5>{red}g} {\color<6>{red}W}
{\color<7>{red}g} {\color<8>{red},}} {\color<9>{red}E} {\color<9>{red}F} {\color<9>{red}F} {\color<9>{red}z} {\color<9>{red}s} {\color<9>{red}.} {\color<9>{red}-} {\color<9>{red}F} {\color<9>{red}S} {\color<9>{red},} {\color<9>{red}1} {\color<9>{red}8} {\color<9>{red}0} {\color<9>{red}5}
\end{itemize}}
Das selbe kann man auch mit dem Bsp-Block machen. Hier werden gleichzeitig die Erklärung in der Überschrift und die gesetzte Option im Block eingefärbt.
\begin{frame}
\frametitle{Apg}
\begin{exampleblock}{\small
\begin{itemize}\itemsep-1ex
\item {\color<2>{red}Zufallspasswörter der Länge 10-14}
\item {\color<3>{red}aus Ziffern, Sonderzeichen, großen und kleine Buchstaben aber ohne
''0'', ''1'', ''2'', ''3{''}}
\item {\color<4>{red}ohne Vorkommen in »verbotenePasswörter«}
\item {\color<5>{red}mit Zufallszahlen aus shuffle(1) als Initialisierungsvektor}
\end{itemize}
}
\begin{semiverbatim}
\$ {\color<1>{red}find /etc/ | xargs md5 > /dev/null} \& \newline
\$ apg {\color<2>{red}-m 10 -x 14} {\color<3>{red}-M SNCL -E 0123} \textbackslash \newline
\indent ~~{\color<4>{red}-r /home/stefan/verbotenePasswörter} \textbackslash \newline
\indent ~~{\color<5>{red}-c `shuffle -0 -p 8 0 1 ... 8 9 a b c ... X Y Z`}
5GapsUrEet=\newline
ral+opeapKawf4\newline
EujOtEpOrp;Om8\newline
8ofCotpyulyuf.\newline
devav5KriWeb<\newline
\end{semiverbatim}
\end{exampleblock}
\end{frame}
Man kann aber auch im Democode einfärben. Dazu benötigt man fancyvrb und folgende Optionen: Zuerst werden zwei neue Befehle definiert, die den Text auf der 2. bzw. 3. Stufe einblenden und einfärben.
Anschließend wird eine MyVerbatim-Umgebung definiert, in der \, [ und ] als Befehlszeichen definierter werden. Somit kann man mit \oo[] den oben definierten \oo{}-Befehl im Quellcode verwenden. Deckt man die Folie auf, wird zuerst "2872" rot markiert angezeigt, auf der nächsten Folie dann stattdessen der Stern *. Somit lassen sich gut Änderungen an Optionen zeigen.
\newcommand{\oo}[1]{\only<2>{\textcolor{red}{#1}}}
\newcommand{\ooo}[1]{\only<3>{\textcolor{red}{#1}}}

[...]

\DefineVerbatimEnvironment{MyVerbatim}{Verbatim}{numbers=left, commandchars=\\\[\]}
\begin{MyVerbatim}
netbsd-chmod: filename \oo[eq]\ooo[match] "/var/run/httpd.mm.\oo[2872]\ooo[*].sem"
              and mode eq "600" then permit \ooo[log]

netbsd-fswrite: filename \oo[eq]\ooo[match] "/var/run/httpd.lock.\oo[1827]\ooo[*]" 
                then permit \ooo[log]
\end{MyVerbatim}
\end{frame}


4.2 Druckversion (Handout) (Index)

Sollen Folien in eine Ausarbeitung eingefügt oder als Druckversion verügbar gemacht werden, kann man auf pdfpages zurückgreifen.
Dieses Paket kan PDF-Dateien in ein LaTeX-Dokument integrieren. Dabei werden die PDF-Dateien automatisch skaliert und angeordnet. Anders als mit psnup, kann man so die Folien sehr leicht zum Ausdruck aufbereiten.
Die Folien werden mit der Klassenoption "handout" kompiliert, um nicht-druckbare Effekte auszublenden.
\documentclass{article}
\usepackage{pdfpages}
\begin{document}

\includepdf[turn=false, nup=2x2, delta=2mm 2mm, pages=-,
frame=true,  scale=0.73, pagecommand={\thispagestyle{plain}}]{backup-folien.pdf}

\end{document}

Generiert eine PDF-Datei, in der jeweils 4 Folien (2 Spalten, 2 Zeilen) mit 2mm Zwischenabstand, Rahmen und skaliert auf 73% eingebunden werden.

5 Bäume (Index)

Als Informatiker muss man verständlicherweise den ein oder anderen Baum zu Papier bringen. Da ich die Dokumentation zu einem Rot-Schwarz-Baum in LaTeX gesetzt habe, wollte ich verständlicherweise die Erläuterungen illustrieren - und zwar ohne Xfig.
zum Glück gibt es qtree - ein TeX Paket für Linguisten, das Syntaxbäume malen kann und die allseits beliebte geklammerte Notation unterstützt.
Man binde qtree als Paket ein und beginne einen Baum in einer Box oder Minipage, anschließend kann man geklammert die Knoten angeben:
\Tree
   [.1A
        [.2A
            \fbox{3A}
			{3$\frac{1}{2}$B}
        ].2A
		[.2B
			3C
			[.3D
			].3D
		].2B
    ].1A

[. öffnet, ]. schließt einen Knoten, alle Knoten dazwischen werden Kinder des Vaterknotens. Blätter müssen nicht geklammert angegeben werden (siehe 3C <-> 3D)

 

qtree verfügt über vielfältige Möglichkeiten Kanten zu manipulieren und Pfeile zwischen den Blättern anzugeben, Beispiele dazu gibt es in der Dokumentation.

5.1 qtree und pdfLaTeX (Index)

qtree hat massive Probleme mit pdfLaTeX, da dort einige PS-Specials nicht greifen und so bspw. Kanten nicht gezeichnet werden. Dafür habe ich folgenden Workaround entwickelt:

6 Graphen und Bäume mit tree-dvips.sty (Index)

qtree ist nett für normale Bäume, aber problematisch bei anderen Graphen, so kann ein qtree eben immer nur genau eine Wurzel haben. Möchte man andere Graphen, muss man zu dot oder eben tree-dvips.sty greifen.
Graphen werden in tree-dvips.sty anders gesetzt als in qtree. Man definiert eine Tabelle, in der man die Knoten setzt. Anschließend kann die Kanten zwischen den Knoten setzen und beliebig definieren (mit oder ohne Pfeil, gerade oder als Kurve ...)
\documentclass[20pt]{scrartcl}
\usepackage{extsizes}
\usepackage{tree-dvips}
\pagestyle{empty}
\begin{document}

\begin{tabular}{ccccccc}
  &\node{g}{$\eta$} &\node{h}{$\theta$}& \\[3ex]
  
  &\node{d}{$\delta$} &\node{e}{$\epsilon$}& \node{f}{$\zeta$}\\[3ex]
  
  & &\node{c}{$\gamma$}\\[3ex]

	& &\node{b}{$\beta$}\\[3ex]
	& &\node{a}{$\alpha$}\\[3ex]
\end{tabular}
\anodeconnect[b]{b}[t]{a} 
\anodeconnect[b]{c}[t]{b} 
%  
\anodeconnect[b]{d}[tl]{c}
\anodeconnect[b]{e}[t]{c}
\anodeconnect[b]{f}[tr]{c}
% 
\anodeconnect[b]{g}[t]{d}
\anodeconnect[b]{h}[tr]{d}

\end{document}
Es gibt verschiedene Kantenmöglichkeiten, nodeconnect ist eine einfach Linie, anodeconnect ein Pfeil in der Richtung der übergebenen Knoten. Zusätzlich kann man die Kantenpunkte auch an verschiedene Ecken des Knoten binden. In den Knoten c laufen insgesamt drei Pfeile ein, so das es unübersichtlich aussieht, wenn sie im selben Punkt treffen. Daher habe ich mit [tl] (top left, oben links (10 Uhr)), [t] (top, oben, 12Uhr) und [tr] (top right, oben rechts, 2 Uhr) je eine Ecke für die Kante übergeben.
Direkt mit pdflatex kann man die Bäume nicht kompilieren, da PSTricks eingesetzt werden um die Kanten zu erzeugen. Daher kann man den ersten Weg wählen um eine normale Seite mit dem Baum zu kompilieren und in eine PDF-Datei zu wandeln:
$ latex tree.tex && dvipdf tree.dvi && xpdf tree.pdf
$ latex tree.tex && dvips -E -f  tree.dvi > tree.ps && ps2epsi tree.ps && epstopdf tree.epsi && xpdf tree.pdf
Die zweite Variante erzeugt über den Umweg einer EPS-Datei eine PDF-Datei, die nur so groß wie benötigt ist (siehe Beispielbild). Die so erzeugt PDF-Datei kann man dann mit \includegraphics{} in eine andere TeX-Datei einbinden.

Das obige Beispiel fertig kompiliert und vergrößert

Weitere Anleitungen und Beispiele finden sich in http://www.essex.ac.uk/linguistics/clmt/latex4ling/trees/tree-dvips/

7 Dateistrukturen mit "baum.sty" (Index)

baum.sty ist ein Makro um Verzeichnisbäume zu setzen.
\beginpicture
    \baum {\textasciitilde gui/} structure
         	\ordner{includes}
				\datei{global\_includes.pm}
			\endordner
     \ordner{gui} 
     		\ordner{bearbeiter}
                                \datei{bearbeiter-anzeigen.pl}
                                \datei{bearbeiter-hinzufuegen.pl}
                                \datei{bearbeiter-loeschen.pl}
			\endordner
			\ordner{vorgaben}
					\datei{vorgaben-anzeigen.pl}
					\datei{vorgaben-hinzufuegen-ausfuehren.pl}
					\datei{vorgaben-hinzufuegen.pl}
					\datei{vorgaben-loeschen-ausfuehren.pl}
					\datei{vorgaben-loeschen.pl}
			\endordner
     \endordner
	\ordner{helfer}
		\datei{ascii-utf8.pl}
	\endordner
  / at 0 0
\endpicture
ein \baum muss hierbei in einer picture-Umgebung gesetzt werden und
kann mit \ordner{} / \endordner{} Verzeichnisse darstellen, in die mit
\datei{} Dateien (also Blätter) übernommen werden.

Hier gibt es ein einfaches Minimalbeispiel zum herunterladen:
Quellcode und Ergebnis als PDF

8 Einträge in das PDF-Inhaltsverzeichnis (PDF-Bookmarks) hinzufügen (Index)

Normalerweise erzeugt pdfLaTeX PDF-Bookmarks, die dann von XPDF oder dem Acrobat Reader links neben dem Dokument angezeigt werden. In diese Bookmarks werden in der Regel alle Einträge des Inhaltsverzeichnisses übernommen, also Kapitel, Unterkapitel und Verzeichnisse. Das Inhaltsverzeichnis selbst wird hingegen nicht als Bookmark angelegt. Das ist bei größeren Dokumenten nicht schön und kann manuell geändert werden:
\pdfbookmark[0]{Inhaltsverzeichnis}{toc}%
\tableofcontents%
Mit \pdfbookmark wir der nachfolgende \tableofcontents in die PDF-Bookmarks übernommen, dabei wird der Eintrag "Inhaltsverzeichnis" genannt und als Ebene 0 (bei scrbook ein Kapitel) eingefügt.

9 Seiten im PDF-Dokument drehen (Index)

Manchmal muss man eine Tabelle erzeugen, die nicht nur sehr lang, sondern auch sehr breit ist. Daher ist es erforderlich sie im Querformat zu setzen. Mit dem Paket "pdflscape" kann man die Umgebung
\begin{landscape}
foo bar baz
\end{landscape}
Benutzen. Alles in ihr wird passend zu Dokument im Querformat gesetzt und korrekt gedruckt und angezeigt. Neben pdflscape kann man auch mit pdfpages ein PDF-Dokument in ein anderes einfügen, dabei kann mit der Option "turn=" ein Neigungswinkel angegeben werden.

10 Papiergröße bestimmen (Index)

Manchmal ist es notwendig eine PDF-Datei bestimmter Größe zu erzeugen, bspw. für den oben beschriebenen "qtree mit pdfLaTeX" Hack. Dazu existiert das vmargin Paket, welches mit
\usepackage{vmargin}
\setpapersize{A4}
\setmargins{0mm}{0mm}% % linker und oberer Rand
           {100mm}{130mm}%   % Textbreite und -hoehe
           {0pt}{0pt}%   % Kopfzeilenhoehe und -abstand
           {0pt}{30pt}%    % \footheight (egal) und Fusszeilenabstand 
die Dimensionen festlegt.

Neben vmargin kann man auch geometry mit seinen Zahlreichen Optionen verwenden:
\usepackage{geometry}
\geometry{margin=10mm}
setzt alle Ränder auf 10mm
\usepackage{geometry}
\geometry{a5paper, top=10mm, left=30mm, right=5mm, bottom=10mm, 
          headsep=10mm, footskip=0mm}
benutzt A5-Papier, setzt oberen und unteren Rand auf 10mm, links auf 30 und rechts auf 5mm, Abstand zwischen Kopf und Text sowie Text und Fußzeile auf 10mm.
\usepackage{geometry}
\geometry{ paperheight=60mm, paperwidth=120mm,
           textheight=50mm, textwidth=112mm, 
           top=5mm, bottom=5mm, left=4mm, right=4mm,
           noheadfoot
		   }
Setzt das Papierformat auf 60*120mm, den Textkörper auf 50*112mm, die Ränder entsprechend, außerdem werden Kopf- und Fußzeilen deaktiviert.

11 Graphen mit GraphViz zeichnen (Index)

Desöftern benötigt man einen Graphen um bspw. ein Kommunikationsnetz oder eine Hierarchie zu illustrieren. Hierzu existiert AT&T GraphViz, ein Graphengenerator, der aus einer Beschreibungssprache Bilder erzeugen kann. Die Beschreibungssprache ist auf der Projektseite sehr gut dokumentiert und meiner Meinung nach auch einfach verständlich. Außerdem verfügt GraphViz über sehr viele Grafikwidgets, die verschiedenste Graphentypen erzeugen lassen.
Ein weiterer Vorteil der Beschreibungssprache ist die algortihmisierbarkeit der Erzeugung, man kann bspw. mit Perl aus PostgreSQL Daten auslesen und für GraphViz aufbereiten.
dot kann verschiedene Grafikformate erzeugen, bspw. PS, JPG, GIF, PNG, HTML-Imagemap (sic!) usw. usf.
Ein Quellcode und der passende Graph finden sich unter:
http://www-e.uni-magdeburg.de/steschum/ntp/include/ntp5.dot
http://www-e.uni-magdeburg.de/steschum/ntp/include/ntp5.dot.jpeg
net-tex.de, Index
$Id: latex-tips.html,v 1.36 2014/08/21 09:24:03 stefan Exp $ 
Autor: Stefan Schumacher, stefan@net-tex.de, PGP-Key 0xB3FBAE33
für net-tex.de/cryptomancer.de

Bitte beachten Sie, das die Seite inhaltlich seit Ende 2007 nicht mehr gepflegt wird!
Aktuellere Informationen erhalten Sie auf Kaishakunin.com