Ticket #9725: latex.rst

File latex.rst, 22.8 KB (added by mardaus, 9 years ago)
Line 
1*********************************
2Sage, LaTeX und ihre Freunde
3*********************************
4
5Sage und der LaTeX Dialekt TeX haben eine sehr synergetische Beziehung.
6Dieses Kapitel hat das Ziel die Vielfalt an Interaktionen, von den einfachsten
7bishin zu den ungewöhnlichen und fast schon magischen, vorzustellen.
8(Sie sollten also nicht gleich das ganze Kapitel im ersten Durchgang durch das Tutorial
9lesen.)
10
11Überblick
12=========
13
14Es ist wahrscheinlich am einfachsten die verschiedenen Einsatzmöglichkeiten
15von LaTeX zu verstehen, wenn man sich die drei grundsätzlichen Methoden in Sage
16ansieht.
17
18    #. Jedes Objekt in Sage muss eine LaTeX Darstellung haben.
19       Sie können diese Darstellung erreichen, indem Sie im Notebook oder
20       der Kommandozeile ``latex(foo)`` ausführen, wobei ``foo`` ein Objekt in
21       Sage ist. Die Ausgabe ist eine Zeichenkette, die eine recht genaue Darstellung
22       im mathematischen Modus von TeX bietet (z.B. zwischen jeweils zwei Dollarzeichen).
23       Einige Beispiele hierfür folgen unten.
24
25       So kann Sage effektiv genutzt werden um Teile eines LaTeX Dokument zu erstellen:
26       Erstellen oder berechnen Sie ein Objekt in Sage, drucken Sie es mit dem ``latex()`` Befehl
27       aus und fügen Sie es in Ihr Dokument ein.
28
29    #. Die Notebook Schnittstelle ist konfiguriert
30       `jsMath <http://www.math.union.edu/~dpvc/jsMath/>`_
31       zu nutzen um mathematische Ausdrücke im Browser darzustellen.
32       jsMath ist eine Kollektion aus JavaScript Routinen und zugehörigen Schriftarten.
33       Es ist also nichts zusätzlich einzustellen um mathematische Ausdrücke in
34       Ihrem Browser anzuzeigen, wenn Sie das Sage Notebook nutzen.
35
36       jsMath wurde entwickelt um einen großen, aber nicht vollständigen
37       Teil von TeX darstellen zu können. Es gibt keine Unterstützung
38       für Dinge, wie komplizierte Tabellen, Kapiteleinteilung oder Dokument
39       Management, da es für genaues Darstellen von TeX Ausdrücken konzipiert wurde.
40       Die nahtlose Darstellung von mathematischen Ausdrücken im Sage Notebook wird durch
41       Konvertierung der ``latex()`` Darstellung in jsMath gewährleistet.
42       
43       Da jsMath seine eigenen skalierbaren Schriftarten nutzt, ist es anderen Methoden überlegen,
44       die auf Konvertierung in kleine Bilder beruhen.
45       
46       jsMath wird möglicherweise von MathJAX abgelöst werden, einer ähnlichen Technik, die
47       vom gleichen Author stammt und eine breite Unterstützung von Technikern und professionellen
48       Vereinen hat.
49       
50    #. Sollte in der Sage Kommandozeile oder im Notebook mehr LaTeX Code
51       vorkommen als jsMath verarbeiten kann, kann eine systemweite Installation
52       von LaTeX aushelfen. Sage beinhaltet fast alles, das Sie brauchen um Sage zu
53       generieren und zu nutzen. Eine Ausnahme hierzu ist TeX selbst. In diesen Situationen
54       müssen also TeX und verschiedene Konverter installiert sein, um alle Möglichkeiten nutzen zu können.
55       
56Hier führen wir einige grundlegenden Funktionen von ``latex()`` vor. ::
57
58    sage: var('z')
59    z
60    sage: latex(z^12)
61    z^{12}
62    sage: latex(integrate(z^4, z))
63    \frac{1}{5} \, z^{5}
64    sage: latex('a string')
65    \texttt{a string}
66    sage: latex(QQ)
67    \Bold{Q}
68    sage: latex(matrix(QQ, 2, 3, [[2,4,6],[-1,-1,-1]]))
69    \left(\begin{array}{rrr}
70    2 & 4 & 6 \\
71    -1 & -1 & -1
72    \end{array}\right)
73
74Grundlegende jsMath Funktionen gibt es im Notebook weitgehend automatisch,
75aber wir können es teilweise mit Hilfe der ``JSMath`` Klasse demonstrieren.
76Die ``eval`` Funktion dieser Klasse konvertiert ein Sage Objekt in seine LaTeX
77Darstellung und dann in HTML mit der CSS ``math`` Klasse, die dann jsMath verwendet. ::
78
79    sage: from sage.misc.latex import JSMath
80    sage: js = JSMath()
81    sage: var('z')
82    z
83    sage: js(z^12)
84    <html><div class="math">\newcommand{\Bold}[1]{\mathbf{#1}}z^{12}</div></html>
85    sage: js(QQ)
86    <html><div class="math">\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Q}</div></html>
87    sage: js(ZZ[x])
88    <html><div class="math">\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Z}[x]</div></html>
89    sage: js(integrate(z^4, z))
90    <html><div class="math">\newcommand{\Bold}[1]{\mathbf{#1}}\frac{1}{5} \, z^{5}</div></html>
91
92Grundlegende Nutzung
93====================
94
95Wie schon im Überblick angekündigt, ist der einfachste Weg Sage's LaTeX
96Unterstützung zu nutzen die ``latex()`` Funktion um eine legitime LaTeX
97Darstellung eines mathematischen Objekts zu erhalten.
98Diese Zeichenketten können dann in unabhänigen LaTeX Dokumenten genutzt werden.
99Das funktioniert im Notebook genauso wie in der Sage Kommandozeile.
100
101Das andere Extrem ist der ``view()`` Befehl. In der Sage Kommandozeile
102wird der Befehl ``view()`` die LaTeX Darstellung von ``foo`` in ein einfaches
103LaTeX Dokument packen, und dann dieses mit der systemweiten TeX Installation aufrufen.
104Zuletzt wird das passende Programm zum Anzeigen der Ausgabe von TeX aufgerufen.
105Welche Version von TeX genutzt wird, und damit auch wie die Ausgabe aussieht und welches
106Anzeigeprogramm aufgerufen wird, kann angepasst werden (siehe :ref:`sec-custom-processing`).
107
108Im Notebook schafft der ``view(foo)`` Befehl die nötige Kombination
109von HTML und CSS sodass jsMath die LaTeX Darstellung im Arbeitsblatt anzeigt.
110Für den Anwender erstellt er einfach eine schön formatierte Ausgabe, die sich
111von der normalen ASCII Ausgabe aus Sage unterscheidet. Nicht jedes
112mathematische Objekt in Sage hat eine LaTeX Darstellung, die die eingeschränkten
113Möglichkeiten von jsMath unterstützt. In diesen Fällen kann die jsMath Darstellung
114umgangen werden, und stattdessen die systemweite TeX Installation aufgerufen werden.
115Dessen Ausgabe kann dann als Bild im Arbeitsblatt angezeigt werden. Die Einstellungen
116und Auswirkungen dieses Prozesses wird im Kapitel :ref:`sec-custom-generation` dargestellt.
117
118Der interne ``pretty_print()`` Befehl zeigt die Konvertierung von Sage Objekten
119in HTML Code der jsMath nutzt im Notebook.  ::
120
121    sage: from sage.misc.latex import pretty_print
122    sage: pretty_print(x^12)
123    <html><span class="math">\newcommand{\Bold}[1]{\mathbf{#1}}x^{12}</span></html>
124    sage: pretty_print(integrate(sin(x), x))
125    <html><span class="math">\newcommand{\Bold}[1]{\mathbf{#1}}-\cos\left(x\right)</span></html>
126
127Das Notebook hat zwei weitere Möglichkeiten TeX zu nutzen. Die erste ist der "Typeset"
128Knopf über der ersten Zelle eines Arbeitsblatts, rechts von den vier Drop-Down Boxen.
129Ist er ausgewählt werden die Ausgaben aller folgenden Berechnungen von jsMath interpretiert.
130Beachten Sie, dass dieser Befehl nicht rückwirkend ist -- alle vorher berechneten Zellen
131werden nicht neu berechnet. Im Grunde ist der "Typeset" Knopf gleichzusetzen mit dem Aufruf
132des ``view()`` Befehls in allen Zellen.
133
134Die zweite Möglichkeit im Notebook ist das Eingeben von TeX Kommentaren
135in einem Arbeitsblatt. Wenn der Cursor zwischen zwei Zellen steht, und der
136erscheinende blaue Balken mit gedrückter Shift Taste geklickt wird, wird ein
137kleiner Texteditor TinyMCE geöffnet. Dieser erlaubt die Eingabe von HTML und CSS formatiertem
138Text mit einem WYSIWYG Editor. Es ist also möglich den so formatierten Text als Kommentar in einem
139Arbeitsblatt unterzubringen. Text den Sie hier zwischen ``$...$`` oder ``$$...$$`` eingeben wird
140ebenfalls von jsMath in einer "inline" bzw. "display math" Umgebung gesetzt.
141
142.. _sec-custom-generation:
143
144Anpassen der LaTeX Generierung
145==============================
146
147Es gibt verschiedene Arten den vom ``latex()`` Befehl generierten LaTeX Code anzupassen.
148Im Notebook und der Sage Kommandozeile gibt es ein vordefiniertes Objekt names
149``latex``, das verschiedene Methoden hat, die Sie sich auflisten lassen können
150indem Sie ``latex.`` eingeben und die Tab Taste drücken (beachten Sie den Punkt).
151
152Ein gutes Beispiel ist die ``latex.matrix_delimiters`` Methode. Es kann benutzt werden
153um die Darstellung der Matrizen zu beeinflussen -- runde Klammern, eckige Klammern, geschwungene Klammern
154oder senkrechte Striche. Sie müssen sich nicht für eine Darstellung entscheiden, Sie können
155verschiedene miteinander kombinieren, wie Sie es wünschen. Beachten Sie dass die in LaTeX benötigten
156Backslashes einen zusätzlichen Slash benötigen damit sie in Python korrekt erkannt werden. ::
157
158    sage: A = matrix(ZZ, 2, 2, range(4))
159    sage: latex(A)
160    \left(\begin{array}{rr}
161    0 & 1 \\
162    2 & 3
163    \end{array}\right)
164    sage: latex.matrix_delimiters(left='[', right=']')
165    sage: latex(A)
166    \left[\begin{array}{rr}
167    0 & 1 \\
168    2 & 3
169    \end{array}\right]
170    sage: latex.matrix_delimiters(left='\\{', right='\\}')
171    sage: latex(A)
172    \left\{\begin{array}{rr}
173    0 & 1 \\
174    2 & 3
175    \end{array}\right\}
176
177Die ``latex.vector_delimiters`` Methode funktioniert ähnlich.
178
179Die Darstellung von Ringen und Körpern (ganze, rationale, reele Zahlen, etc.)
180kann mit der ``latex.blackboard_bold`` Methode verändert werden.
181Diese Mengen werden in standardmäßig in fett gedruckt, alternativ können
182sie auch mit Doppelstrichen geschrieben werden. Hierfür wird das
183``\Bold{}`` Makro genutzt, das in Sage integriert ist. ::
184
185    sage: latex(QQ)
186    \Bold{Q}
187    sage: from sage.misc.latex import JSMath
188    sage: js=JSMath()
189    sage: js(QQ)
190    <html><div class="math">\newcommand{\Bold}[1]{\mathbf{#1}}\Bold{Q}</div></html>
191    sage: latex.blackboard_bold(True)
192    sage: js(QQ)
193    <html><div class="math">\newcommand{\Bold}[1]{\mathbb{#1}}\Bold{Q}</div></html>
194    sage: latex.blackboard_bold(False)
195
196Dank der Erweiterbarkeit von TeX können Sie selbst Makros und Pakete einbinden.
197Individuelle Makros können hinzugefügt werden, die dann von jsMath als TeX-Schnipsel
198interpretiert werden. ::
199
200    sage: latex.extra_macros()
201    ''
202    sage: latex.add_macro("\\newcommand{\\foo}{bar}")
203    sage: latex.extra_macros()
204    '\\newcommand{\\foo}{bar}'
205    sage: var('x y')
206    (x, y)
207    sage: latex(x+y)
208    x + y
209    sage: from sage.misc.latex import JSMath
210    sage: js=JSMath()
211    sage: js(x+y)
212    <html><div class="math">\newcommand{\Bold}[1]{\mathbf{#1}}\newcommand{\foo}{bar}x + y</div></html>
213
214Zusätzliche Makros, die so hinzugefügt wurden, werden auch vom
215systemweiten TeX genutzt, wenn jsMath an seine Grenzen gestoßen ist.
216Der Befehl ``latex_extra_preamble`` kann genutzt werden um eine Präambel eines
217kompletten LaTeX Dokuments zu erzeugen, das folgende Beispiel zeigt wie.
218Beachten Sie wiederrum die doppelten Backslashes in den Python Zeichenketten. ::
219
220
221    sage: latex.extra_macros('')
222    sage: latex.extra_preamble('')
223    sage: from sage.misc.latex import latex_extra_preamble
224    sage: print latex_extra_preamble()
225    \newcommand{\ZZ}{\Bold{Z}}
226    ...
227    \newcommand{\Bold}[1]{\mathbf{#1}}
228    sage: latex.add_macro("\\newcommand{\\foo}{bar}")
229    sage: print latex_extra_preamble()
230    \newcommand{\ZZ}{\Bold{Z}}
231    ...
232    \newcommand{\Bold}[1]{\mathbf{#1}}
233    \newcommand{\foo}{bar}
234
235Für größere oder kompliziertere LaTeX Ausdrücke können mit
236``latex.add_to_preamble`` Pakete (oder ähnliches)zur LaTeX Präambel
237hinzugefügt werden. Der zweite Befehl ``latex.add_package_to_preamble_if_available`` 
238prüft hingegen erst ob das Paket vorhanden ist, bevor es eingebunden wird.
239
240Hier fügen wir das geometry Paket zur Präambel hinzu, um die
241Seitenränder einzustellen. Achten Sie wieder auf die doppelten
242Backslashes in Python. ::
243
244
245    sage: from sage.misc.latex import latex_extra_preamble
246    sage: latex.extra_macros('')
247    sage: latex.extra_preamble('')
248    sage: latex.add_to_preamble('\\usepackage{geometry}')
249    sage: latex.add_to_preamble('\\geometry{letterpaper,total={8in,10in}}')
250    sage: latex.extra_preamble()
251    '\\usepackage{geometry}\\geometry{letterpaper,total={8in,10in}}'
252    sage: print latex_extra_preamble()
253    \usepackage{geometry}\geometry{letterpaper,total={8in,10in}}
254    \newcommand{\ZZ}{\Bold{Z}}
255    ...
256    \newcommand{\Bold}[1]{\mathbf{#1}}
257
258Ein bestimmtes Paket, dessen Existenz nicht sicher ist, wird wie folgt
259eingebunden. ::
260
261    sage: latex.extra_preamble('')
262    sage: latex.extra_preamble()
263    ''
264    sage: latex.add_to_preamble('\\usepackage{foo-bar-unchecked}')
265    sage: latex.extra_preamble()
266    '\\usepackage{foo-bar-unchecked}'
267    sage: latex.add_package_to_preamble_if_available('foo-bar-checked')
268    sage: latex.extra_preamble()
269    '\\usepackage{foo-bar-unchecked}'
270
271.. _sec-custom-processing:
272
273Anpassen der LaTeX Verarbeitung
274===============================
275
276Es ist möglich zu entscheiden welche Variante von TeX für einen
277systemweiten Aufruf genutzt werden soll, und somit auch wie die Ausgabe
278aussehen soll. Ebenso ist es möglich zu beeinflussen, ob das Notebook
279jsMath oder die systemweite LaTeX Installation nutzt.
280
281Der Befehl ``latex.engine()`` entscheidet, ob die systemweiten Anwendungen
282``latex``, ``pdflatex`` oder ``xelatex`` genutzt werden für kompliziertere
283LaTeX Ausdrücke. Wenn ``view()`` in der Sage Kommandozeile aufgerufen wird,
284und ``latex`` als Prozessor eingestellt ist, wird eine .dvi Datei erzeugt, die dann mit einem dvi
285Anzeigeprogramm (wie xdvi) angezeigt wird. Im Gegensatz hierzu wird bei Aufruf von
286``view()`` mit dem Prozessor ``pdflatex`` eine .PDF Datei erzeugt, die mit dem
287Standard-PDF-Programm angezeigt wird. (acrobat, okular, evince, etc.).
288
289Im Notebook kann es nötig sein, dem System die Entscheidung abzunehmen, ob
290jsMath für einige TeX Schnipsel, oder das systemweite LaTeX für kompliziertere
291Ausdrücke genutzt werden soll. Es gibt eine Liste von Befehlen, die wenn einer
292von ihnen in einem Stück LaTeX Code erkannt wird, die Ausgabe von LaTeX (oder
293welcher Prozessor auch immer durch ``latex.engine()`` gesetzt ist) statt von
294jsMath erstellen lässt. Diese Liste wird verwaltet durch die Befehle
295``latex.add_to_jsmath_avoid_list`` und
296``latex.jsmath_avoid_list``. ::
297
298    sage: latex.jsmath_avoid_list([])
299    sage: latex.jsmath_avoid_list()
300    []
301    sage: latex.jsmath_avoid_list(['foo', 'bar'])
302    sage: latex.jsmath_avoid_list()
303    ['foo', 'bar']
304    sage: latex.add_to_jsmath_avoid_list('tikzpicture')
305    sage: latex.jsmath_avoid_list()
306    ['foo', 'bar', 'tikzpicture']
307    sage: latex.jsmath_avoid_list([])
308    sage: latex.jsmath_avoid_list()
309    []
310
311Nehmen wir an ein LaTeX Ausdruck wurde im Notebook durch ``view()``
312oder während aktiviertem "Typeset" Knopf erzeugt. Und dann wird
313festgestellt, dass er die externe LaTeX Installation benötigt, weil
314er in der ``jsmath_avoid_list`` steht. Der Ausdruck wird nun vom
315ausgewählten (durch ``latex.engine()``) Prozessor erzeugt, und statt der
316Anzeige in einem externen Programm (was in der Kommandozeile passieren
317würde) wird Sage versuchen das Ergebnis in einem einzigen, leicht beschnittenen
318Bild in der Ausgabezelle darzustellen.
319
320Wie diese Umwandlung abläuft hängt von einigen Faktoren ab, hauptsächlich
321vom verwendeten LaTeX-Prozessor und davon welche Konvertierungswerkzeuge
322auf dem System vorhanden sind. Vier nützliche Konverter, die alle
323Eventualitäten abdecken sind ``dvips``, ``ps2pdf``, ``dvipng`` und aus dem
324``ImageMagick`` Paket, ``convert``. Das Ziel ist die Erzeugung einer .png
325Datei, die später wieder im Arbeitsblatt eingebunden werden kann. Wenn ein
326LaTeX Ausdruck erfolgreich von ``latex`` in eine .dvi Datei verwandelt wird,
327dann sollte dvipng die Umwandlung vornehmen. Wenn der LaTeX Ausdruck und der
328gewählte LaTeX-Prozessor eine .dvi Datei mit Erweiterungen erstellt, die dvipng
329nicht unterstützt, so wird dvips eine PostScript Datei erzeugen. So eine
330PostScript Datei, oder eine .pdf Datei aus dem Prozessor ``pdflatex``, wird dann
331von ``convert`` in eine .png Datei gewandelt. Das Vorhandensein von zweier solcher
332Konverter kann mit Hilfe der ``have_dvipng()`` und ``have_convert()``
333Routinen überprüftt werden.
334
335Diese Umwandlungen werden automatisch ausgeführt, wenn Sie die nötigen Konverter
336installiert haben; falls nicht wird Ihnen eine Fehlermeldung angezeigt, die Ihnen
337sagt was fehlt und wo Sie es herunterladen können.
338
339Für ein konkretes Beispiel wie komplizierte LaTeX Ausdrücke verarbeitet werden
340können, sehen Sie sich das Beispiel des ``tkz-graph`` Pakets zum Erstellen
341von hochwertigen kombinatorischen Graphen im nächsten Abschnitt (:ref:`sec-tkz-graph`)
342an. Für weitere Beispiele gibt es einige vorgepackte Testfälle. Um diese zu nutzen
343müssen Sie das ``sage.misc.latex.latex_examples`` Objekt importieren. Dieses
344ist eine Instanz der ``sage.misc.latex.LatexExamples`` Klasse, wie unten beschrieben.
345Diese Klasse enthält momentan Beispiele von kommutativen Diagrammen, kombinatorischen Graphen,
346Knotentheorie und Beispiele für Graphen mit pstricks. Es werden damit die folgenden Pakete getestet:
347xy, tkz-graph, xypic, pstricks.  Nach dem Import können Sie mittels Tab-Vervollständigung von ``latex_examples``
348die vorgepakten Beispiele sehen. Bei Aufruf vom jedem Beispiel erhalten Sie eine Erklärung was nötig ist,
349damit das Beispiel korrekt dargestellt wird. Um die Darstellung tatsächlich zu sehen müssen Sie
350``view()`` benutzen (sofern die Präambel, der LaTeX-Prozessor, etc richtig eingestellt sind).
351::
352
353    sage: from sage.misc.latex import latex_examples
354    sage: latex_examples.diagram()
355    LaTeX example for testing display of a commutative diagram produced
356    by xypic.
357    <BLANKLINE>
358    To use, try to view this object -- it won't work.  Now try
359    'latex.add_to_preamble("\\usepackage[matrix,arrow,curve,cmtip]{xy}")',
360    and try viewing again -- it should work in the command line but not
361    from the notebook.  In the notebook, run
362    'latex.add_to_jsmath_avoid_list("xymatrix")' and try again -- you
363    should get a picture (a part of the diagram arising from a filtered
364    chain complex).
365
366.. _sec-tkz-graph:
367
368Ein Beispiel: Kombinatorische Graphen mit tkz-graph
369===================================================
370
371Hochwertige Darstellungen von kombinatorischen Graphen (fortan nur noch
372"Graphen") sind mit Hilfe des ``tkz-graph`` Pakets möglich.
373Dieses Paket wurde ausbauend auf das ``tikz`` front-end der ``pgf`` 
374Bibliothek entwickelt. Es müssen also alldiese Komponenten Teil der
375systemweiten TeX Installation sein, und es ist möglich, dass sie nicht
376in ihrer neusten Version in der TeX Implementation vorliegen. Es ist also
377unter Umständen nötig oder ratsam diese Teile seperat in Ihrem persönlichen
378texmf Baum zu installieren. Das Erstellen, Anpassen und Warten einer systemweiten
379oder persönlichen TeX Installation würde allerdings den Rahmen dieses Dokuments sprengen.
380Es sollte aber einfach sein Anleitungen hierzu zu finden. Die nötigen Dateien sind unter
381:ref:`sec-system-wide-tex` aufgeführt.
382
383Um also zu beginnen, müssen wir sicher sein, dass die relevanten
384Pakete eingeschlossen werden, indem wir sie in die Präambel des
385LaTeX Dokuments hinzufügen. Die Bilder der Graphen werden nicht
386korrekt formatiert sein, wenn eine .dvi Datei als Zwischenergebnis
387erzeugt wird. Es ist also ratsam, den LaTeX-Prozessor auf
388``pdflatex`` zu stellen. Nun sollte ein Befehl wie ``view(graphs.CompleteGraph(4))``
389in der Sage Kommandozeile erfolgreich eine .pdf Datei erzeugen mit einem
390Bild vom kompletten `K_4` Graphen.
391
392Um das Gleiche im Notebook zu erstellen, müssen Sie jsMath
393für die Verarbeitung von LaTeX Code ausschalten, indem Sie
394die "jsmath avoid list" benutzen. Graphen werden in einer
395``tikzpicture`` Umgebung eingebunden, das ist also eine gute Wahl
396für die Zeichenkette für die Ausschlussliste. Jetzt sollte
397``view(graphs.CompleteGraph(4))`` in einem Arbeitsblatt
398eine .pdf Datei mit pdflatex erstellen, mit dem
399``convert`` Werkzeug eine .png Grafik erstellen und in die Ausgabezelle
400des Arbeitsblatts einfügen.
401Die folgenden Befehle veranschaulichen die Schritte einen Graphen
402mittels LaTeX in einem Notebook darzustellen. ::
403
404    sage: from sage.graphs.graph_latex import setup_latex_preamble
405    sage: setup_latex_preamble()
406    sage: latex.extra_preamble() # random - depends on system's TeX installation
407    '\\usepackage{tikz}\n\\usepackage{tkz-graph}\n\\usepackage{tkz-berge}\n'
408    sage: latex.engine('pdflatex')
409    sage: latex.add_to_jsmath_avoid_list('tikzpicture')
410    sage: latex.jsmath_avoid_list()
411    ['tikzpicture']
412
413Beachten Sie, dass es eine Vielzahl von Optionen gibt, die die Darstellung
414des Graphen in LaTeX mit ``tkz-graph`` beeinflussen. Auch das wiederrum ist nicht Ziel dieses Abschnitts.
415Sehen Sie sich hierfür den Abschnitt "LaTeX Optionen für Graphen" aus dem Handbuch für weitere Anleitungen
416und Details an.
417
418.. _sec-system-wide-tex:
419
420Eine vollfunktionsfähige TeX Installation
421=========================================
422Viele der erweiterten Integrationsmöglichkeiten von
423TeX in Sage benötigen eine systemweite Installation von TeX.
424Viele Linuxdistributionen bieten bereits TeX Pakete basierend auf
425TeX-live, für OSX gibt es TeXshop und für Windows MikTeX.
426Das ``convert`` Werkzeug ist Teil der
427`ImageMagick <http://www.imagemagick.org/>`_ Suite (welche ein
428Paket oder zumindest ein simpler Download sein sollte). Die drei
429Programme ``dvipng``, ``ps2pdf``, und ``dvips`` sind wahrscheinlich
430bereits Teil Ihrer TeX Distribution.  Die ersten beiden sollten
431auch von http://sourceforge.net/projects/dvipng/ als Teil von
432`Ghostscript <http://www.ghostscript.com/>`_ bezogen werden können.
433
434Um kombinatorische Graphen darstellen zu können, wir eine aktuelle Version
435der PGF Bibliothek und die Dateien ``tkz-graph.sty``, ``tkz-arith.sty``
436und eventuell ``tkz-berge.sty`` benötigt, allesamt verfügbar auf der `Altermundus` Seite
437<http://altermundus.com/pages/graph.html>`_.
438
439Externe Programme
440=================
441
442Es sind drei Programme verfügbar um TeX weiter in Sage zu integrieren.
443Das erste ist sagetex. Eine kurze Beschreibung von sagetex wäre: Es ist
444eine Sammlung von TeX Makros, die es einem LaTeX Dokument erlauben
445Anweisungen einzubinden, mit denen Sage genutzt wird um verschiedene
446Objekte zu berechnen und/oder mittels eingebauter ``latex()`` Funktion darzustellen.
447Als Zwischenschritt zum Kompilieren eines LaTeX Dokuments werden also
448alle Berechnungs- oder LaTeX-formatierungseigenschaften von Sage automatisch genutzt.
449Als Beispiel hierfür kann in einer mathematischen Betrachtung die korrekte Reihenfolge
450von Fragen und Antworten beibehalten werden, indem sagetex dazu genutzt wird Sage die einen
451aus den anderen berechnen zu lassen. Siehe hierfür auch :ref:`sec-sagetex`
452
453tex2sws beginnt mit einem LaTeX Dokument, aber definiert einige zusätzliche
454Umgebungen für Sage Code. Wenn es richtig genutzt wird, ist das Ergebnis eine
455Sage Arbeitsblatt mit korrekt von jsMath formatiertem Inhalt und dem dazugehörigen
456Sage Code in den Eingabezellen. Ein Lehrbuch oder Artikel kann also mit Sage Code Blöcken
457in LaTeX gesetzt werden und es kann "live" das ganze Dokument in ein Sage Arbeitsblatt überführt werden;
458unter Beibehaltung der Sage Code Blöcke und mit schön formatiertem mathematischen Text.
459Momentan in Arbeit, siehe `tex2sws @ BitBucket
460<http://bitbucket.org/rbeezer/tex2sws/>`_ .
461
462sws2tex kehrt den Prozess um, indem es mit einem Sage Arbeitsblatt beginnt, und
463es in ein legitimes LaTeX Dokument zur weiteren Bearbeitung mit allen
464LaTeX Werkzeugen verwandelt.
465Momentan in Arbeit, siehe `sws2tex @ BitBucket
466<http://bitbucket.org/whuss/sws2tex/>`_ .