Das kompakte und durchdachte Satzsystem ConTeXt bietet gegenüber seinem großen Bruder LaTeX einige Vorteile und wird eng zusammen mit der PDF-Engine LuaTeX entwickelt.
Die Arbeit mit Textsatzsystemen bietet gegenüber WYSIWYG gewisse Vorteile, und spätestens, wenn die Grenzen von Textverarbeitungen herkömmlicher Art erreicht werden, kommt LaTeX ins Spiel. ConTeXt [1] wiederum bietet eine interessante Alternative zu LaTeX und verdient mehr als nur einen Seitenblick. ConTeXt wurde 1990 von der niederländischen Firma Pragma ADE vorgestellt, der Quellcode (aktuelle Version 2010.07.30) unterliegt der GNU GPL.
Bei dem System handelt es sich wie bei LaTeX um ein Erweiterungsformat für das von Donald Knuth entwickelte TeX-Grundsystem (“Plain TeX”). Im Gegensatz zu LaTeX gibt es bei ConTeXt nur eine geringe Anzahl von Zusatzpaketen (“Third party modules”), denn das Grundsystem integriert praktisch den gesamten Funktionsumfang. Spielte ConTeXt zunächst eng mit der PDF-Engine pdfTeX zusammen (“ConTeXt Mark II” oder kurz MKII), so wird ConTeXt mittlerweile vor allem eng zu der Engine LuaTeX weiterentwickelt (“ConTeXt Mark IV”, MKIV). Letztere beherrscht genau wie das vergleichbare XeTeX aktuelle Zeichensatz-Technologien wie Unicode und Open Type (siehe auch Kasten “LuaTeX-Hintergrund”).
Als Bestandteil von TeX Live lässt sich ConTeXt in allen gängigen Distributionen ohne Weiteres über den Paketmanager des Systems einrichten, obendrein gibt die eigene schlanke Distribution ConTeXt Minimals [2]. Direkt nach der Installation des Paketes context und aller Abhängigkeiten (es bietet sich an, gleich das Paket context-nonfree mitzuziehen) können Sie mit einem beliebigen Editor als ersten Test eine rudimentäre ConTeXt-Datei test.tex erstellen (Listing 1) und mit context test.tex ein PDF-Dokument daraus generieren.
Listing 1
% test.tex \starttext % jetzt kommt der Text: Hello, World! \stoptext
Für Hilfe bietet das Wiki ConTeXt Garden [3] einen guten Anlaufpunkt, und alle Anleitungen von Pragma [4] befinden sich nach der Installation des Paketes context-doc-nonfree im Verzeichnis /usr/share/doc/context-doc-nonfree. Eine gute Zusammenstellung von Infomaterialien bietet der Eintrag der englischen Wikipedia [5]. Außerdem arbeitet die Community an einem neuen, umfassenden Manual [6], und es gibt eine sehr lebendige ConTeXt-Mailingliste [7]. Im Buchhandel findet sich bezüglich ConTeXt – anders als für LaTeX – jedoch bislang noch nichts.
Präambel
Im Kopf eines ConTeXt-Dokuments vor \starttext definieren Sie bei Bedarf globale Dokumenteneigenschaften. So stellt etwa der Befehl \mainlanguage[de] das Dokument auf Deutsch um, \setupwhitespace[1ex] setzt den Abstand zwischen den Paragraphen auf 1 ex (Höhe eines “x”). Der Zeilenabstand lässt sich mit
\setupinterlinespace[line=1.25\bodyfontsize]
auf das 1,25-fache der Hauptschrift vergrößern. Absatzanfänge rückt ConTeXt in der Standardeinstellung nicht ein. PDF-Metadaten wie Dokumententitel und Autorenname lassen sich beispielsweise mit
\setupinteraction[title={Mein Dokument}, author={Ich}]
durchreichen, für ein klickbares Inhaltsverzeichnis mit blauen Links in der resultierenden PDF-Datei sorgt das Kommando:
\setupcombinedlist[content][interaction=all, color=blue]
Für die Ausstattung des resultierenden PDFs mit Bookmarks für Kapitel und Abschnitte sorgen Sie, indem Sie in der Präambel Folgendes eingeben:
\setupinteractionscreen[option=bookmark]\placebookmarks[chapter, section]
Der von XeTeX [8] bekannte, bequeme Fontloader Fontspec ist mittlerweile für die Nutzung von LaTeX aus mittels LuaTeX angepasst worden [9]. Bei ConTeXt dagegen müssen Sie dem System bislang unbekannte Schriften entweder mit eigenen sogenannten Typescripts zugänglich machen, oder Sie verwenden das mitgelieferte Modul Simplefonts [10]. Zunächst gilt es aber den Fontcache zu regenerieren, um die Systemschriften berücksichtigen zu können (siehe Tabelle “Befehle für den Fontcache”). Den Font Times_New_Roman.ttf mit allen seinen Schnitten, wie ihn das Paket mstcorefonts installiert, nehmen Sie dann beispielsweise mit den Befehlen aus Listing 2 in Betrieb.
Befehle für den Fontcache
| Funktion | Befehl |
|---|---|
| Fontpaths einbinden | export OSFONTDIR="/usr/share/fonts;/usr/local/share/fonts" |
| Dateicache regenerieren | context --generate |
| Fontcache regenerieren | mtxrun --script fonts --reload |
| Verfügbare Fonts anzeigen | mtxrun --script fonts --list --all --pattern=* |
Listing 2
\usemodule[simplefonts][size=11pt] \setmainfont[timesnewroman] \definesimplefonttypeface[myfont][timesnewroman] \setupfootnotes[bodyfont=myfont] \setuppagenumbering[bodyfont=myfont]
Die voreingestellten Layouteigenschaften lassen sich ohne Umstände bis ins Detail verändern. Die standardmäßige Seitenzählung in der Mitte der Kopfzeile manipulieren Sie beispielsweise, indem Sie bei \setuppagenumbering die Position mittels location={footer, right} nach rechts unten verschieben. Die Linie zum Abtrennen der Fußnoten beseitigen Sie, indem Sie \setupfootnotes die Option rule=off mitgeben. Der Abstand zwischen den Fußnoten selbst lässt sich mit
\setupfootnotedefinition[after={\blank[0.4ex]}]
auf 0,4 ex vergrößern. Die Abstände auf der voreingestellten DIN-A4-Seite lassen sich übrigens gut kontrollieren, wenn Sie ein Probedokument des Inhalts
\starttext \usemodule[t-layout] \ShowLayout[units=cm] Hallo! \stoptext
durchlaufen lassen. Die einzelnen Werte modifizieren Sie mit \setuplayout im Dokumentenkopf (siehe Listing 3).
Brauchbares
In der Umgebung zwischen \starttext und \stoptext erstellen Sie nun das eigentliche Dokument. Für die nummerierten Abschnittsüberschriften \chapter, \section, und \subsection finden sich dabei mit \title, \subject und \subsubject auch unnummerierte Gegenstücke. Überschriften dürfen Sie jeweils einen internen Titel mitgegeben (\section{akw}[Atomkraftwerke]), auf den Sie dann später bei Bedarf querverweisen (\in[akw]). Ein zweiter Durchlauf für die Auflösung von Querverweisen wie bei LaTeX erübrigt sich bei ConTeXt.
ConTeXt bietet gegenüber LaTeX einige Vorteile. So gibt es hier weder komplizierte Dokumentenklassen, noch müssen Sie sich mit einem ausufernden Zusatzpaketwesen auseinander setzen. Der Unterschied wird besonders deutlich wenn man sieht, wie einfach sich alles in ConTeXt manipulieren lässt: So bringen Sie beispielsweise \chapter-Überschriften mit einem schlichten \setuphead[chapter][style=\tfb] auf die Größe von \section bringen.
Obwohl Erfahrung mit LaTeX keine Bedingung ist, um mit ConTeXt zurecht zu kommen, gibt es im Netz eine ganze Reihe von Leitfäden gerade für Umsteiger, welche die bekannten Elemente des Typensatzes von LaTeX den entsprechenden Funktionen von ConTeXt gegenüberstellen [11]. Einen ähnlichen Vergleich der gängigsten Elemente von ConTeXt mit den jeweiligen LaTeX-Gegenstücken bietet die Tabelle “Umstieg von LaTeX auf ConTeXt”. Viele andere Elemente, wie \footnote{} und \endnote{}, unterscheiden sich bei den beiden Systemen nicht.
Umstieg von LaTeX auf ConTeXt
| Funktion | LaTeX | ConTeXt |
|---|---|---|
| Kursiv, fett | \textit{foo}, \textbf{foo} |
{\it foo}, {\bf foo} |
| Inhaltsverzeichnis | \tableofcontents |
\completecontent, \placecontent |
| Nummerierung | \begin{enumerate} |
\startitemize[n] |
\item foo |
\item foo |
|
\end{enumerate} |
\stopitemize |
|
| Zitat | \begin{quote} foo \end{quote} |
\startquotation foo \stopquotation |
| Querverweismarke setzen | \label{foo} |
\pagereference[foo] |
| Seitennummer der Marke | \pareref{foo} |
\at[foo] |
Lua
Durch die Verbindung mit der LuaTeX-Engine [12] in der MKIV-Version findet sich in ConTeXt-Modulen mittlerweile immer mehr Lua-Code (siehe Kasten “LuaTeX-Hintergrund”), aber auch als Anwender können Sie beliebiges Lua in den Dokumenten ausführen. So generiert etwa
\directlua{tex.print(math.random(100))}
eine Zufallszahl zwischen 1 und 100, die sich natürlich bei jedem neuen Durchlauf verändert.
LuaTeX-Hintergrund
Bei Lua handelt es sich um eine erweiterbare Skriptsprache, die an der Päpstlichen Katholischen Universität (PUC) in Rio de Janeiro entwickelt wird. Eines der Ziele von Lua ist eine sehr geringe Programmgröße, und so eignet sich die Sprache besonders zum Einbetten, wie etwa bei der LuaTeX-PDF-Engine. Auf der einen Seite lässt sich so der TeX-Kern in Lua umsetzen, was besonders im professionellen Drucksatz enorme Geschwindigkeitszuwächse ermöglicht. Auf der anderen Seite gibt dies dem Anwender die Gelegenheit, neben der TeX-Makrosprache auch Lua auf der ConTeXt-Seite zur Steuerung der Engine einzusetzen, was enorme Möglichkeiten eröffnet. Das erste Stable-Release von LuaTeX war die Version 0.60 vom April 2010, Version 1.00 ist für 2012 anvisiert. Das Paket luatex wird bei der Installation von context automatisch mitgezogen.
Die sich durch Lua ergebenden Möglichkeiten demonstriert beispielsweise das Filter-Modul von Adtiya Mahajan [13], das unter der Verwendung der Skriptsprache umgesetzt wurde: Unter anderem erlaubt es, den Konverter Pandoc [14] als externen Filter einzubinden, etwa um reST-Markup [15] im Dokument zu verwenden. Auf diese Weise lassen sich Tabellen viel einfacher erstellen sind (siehe \usemodule, \defineexternalfilter, sowie \startrest und \stoprest in Listing 3). Mit dem selben Modul lässt sich zum Beispiel auch übers Netz die Google-Chart-API einsetzen.
Listing 3
\setuplayout[backspace=2.9cm, leftmargin=2.4cm, rightmargin=2.4cm, header=0cm, topspace=3.5cm, height=23cm]
\mainlanguage[de]
\setupwhitespace[1ex]
\setupinterlinespace[line=1.25\bodyfontsize]
\setupinteraction[title={Mein Dokument}, author={Ich}]
\setupcombinedlist[content][interaction=all, color=blue]
\usemodule[simplefonts][size=11pt]
\setmainfont[timesnewroman]
\definesimplefonttypeface[myfont][timesnewroman]
\setuppagenumbering[bodyfont=myfont, location={footer, right}]
\setupfootnotes[bodyfont=myfont, rule=off]
\setupfootnotedefinition[after={\blank[0.4ex]}]
\usemodule[filter]
\defineexternalfilter[rest][filter={pandoc -f rst -t context -o \externalfilteroutputfile\space \externalfilterinputfile}]
\starttext
\completecontent
\section[kap1]{Ein Probekapitel}
Das ist eine Kapitel. Hier wird über Düsseldorf gesprochen. Jetzt kommt mal eine Fußnote.\footnote{Das ist die Fußnote.} Düsseldorf ist eine {\bf Stadt}.
Bei \TeX\ ist bekanntlich alles außer eine Leerzeile ein Leerzeichen. Eine zufällige Zahl zwischen 1 und 100: \directlua{tex.print(math.random(100))}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris dui enim, iaculis a tincidunt at, rutrum at metus. Aliquam erat volutpat.\footnote{Das war Latein.}
\section[kap2]{Probekapitel, Fortsetzung}
Das ist ein anderes Kapitel. Oben in \in{Kapitel}[kap1] wird über Düsseldorf gesprochen. Jetzt kommt eine {\it Aufzählung} von Städten:
\startitemize[n, packed, joinedup, nowhite, before]
\item Köln
\item Düsseldorf
\item Hamburg
\stopitemize
\section{reST}
Eine Demonstration von der Benutzung von reST Markup innerhalb von ConTeXt mit dem Modul {\it Filter} und Pandoc:
\blank[1cm]
\startrest
====== ====== =======
A B A und B
====== ====== =======
Falsch Falsch Falsch
Wahr Falsch Falsch
Falsch Wahr Falsch
Wahr Wahr Wahr
====== ====== =======
\stoprest
\stoptext
Fazit
ConTeXt nimmt im Bereich des professionellen Textsatzes jenseits von WYSIWYG sicherlich eine Frontstellung ein. Vor allem im Vergleich zu LaTeX sticht hervor, dass Funktionen wie das Verwalten von Synonymen und sortierten Listen sowie das Auswerfen von Daten von Versionskontrollsystemen von Haus aus angeboten werden und auch ein umfangreiches Zusammenspiel mit XML-Daten möglich ist [16]. Auch das Verarbeiten von Scalable Vector Graphics (SVG) [17], das Einbinden von Google Docs [18] und das Erstellung von aufwändigen Präsentationen bereitet mit ConTeXt keinerlei Probleme [19]. Zwar fällt der Einstieg in ConTeXt nicht ganz leicht, aber wer ihn meistert, dem steht ein äußerst potentes System für das Erstellen professioneller Dokumente zur Verfügung. Besonders die Einbindung von eigenem Lua-Code eröffnet hier schier unbegrenzte Möglichkeiten.
Glossar
-
pdfTeX
-
Engine für die Erzeugung von PDF-Dokumenten für LaTeX, das sonst Device-Independent-Dateien (
.dvi) auswirft. -
LuaTeX
-
Wie XeTeX eine PDF-Engine für TeX, mit eingebetteter Skriptsprache Lua.
-
XeTeX
-
Unicode- und Open-Type-fähige PDF-Engine für LaTeX, Nachfolger von pdfTeX.
-
TeX Live
-
Eine umfangreiche Zusammenstellung der verschiedenen Programme der TeX-Familie.
-
reST
-
Restructured Text. Eine vereinfachte, besonders gut lesbare Auszeichnungssprache. Der reST-Parser, eine Komponente der Docutils, unterstützt das Umwandeln nach LaTeX, Manpage, ODT, S5, XHTML und XML.
Infos
[1] Pragma ADE: http://www.pragma-ade.nl
[2] ConTeXt Minimals http://wiki.contextgarden.net/ConTeXt_Minimals
[3] ConTeXt Garden: http://wiki.contextgarden.net/Main_Page
[4] Manuals von Pragma: http://www.pragma-ade.nl/overview.htm
[5] ConTeXt bei Wikipedia: http://en.wikipedia.org/wiki/ConTeXt
[6] ConTeXt-Manuals: http://foundry.supelec.fr/gf/project/contextman/docman
[7] ConTeXt-Mailingliste: http://www.ntg.nl/mailman/listinfo/ntg-context
[8] XeTeX-Einführung: Daniel Stender, “Weltsprache”, LU 11/2008, S. 76, https://www.linux-community.de/17025
[9] Fontspec für Lualatex: http://latex-alive.tumblr.com/post/643148677/fontspec-for-luatex
[10] Simplefonts-Modul: http://www.ctan.org/pkg/context-simplefonts
[11] LaTeX in Proper ConTeXt: http://www.berenddeboer.net/tex/LaTeX2ConTeXt.pdf
[12] LuaTeX: http://www.luatex.org
[13] Externe Filtermodule: http://randomdeterminism.wordpress.com/2010/05/30/using-external-filters
[14] Pandoc: http://johnmacfarlane.net/pandoc
[15] reST-Einführung: http://sphinx.pocoo.org/rest.html
[16] ConTeXt und XML: http://wiki.contextgarden.net/XML
[17] SVG in ConTeXt: http://wiki.contextgarden.net/SVG
[18] Google Docs und ConTeXt: http://randomdeterminism.wordpress.com/2010/02/26/reading-files-off-the-we
[19] Präsentationen: http://wiki.contextgarden.net/Presentations






