Ich habe gehört, dass LaTeX vollständig ist. Gibt es Programme, die in LaTeX geschrieben sind?

79

Es ist möglich, interessante Dinge mit etwas zu tun, was normalerweise als Schriftsatzsprachen angesehen wird. Beispielsweise können Sie das Mandelbrot-Set mithilfe von Postscript erstellen .

In dieser MathOverflow-Frage wird vorgeschlagen , dass LaTeX möglicherweise Turing-vollständig ist . Dies impliziert die Fähigkeit, beliebige Programme zu schreiben (obwohl dies möglicherweise nicht einfach ist!). Kennt jemand ein konkretes Beispiel für ein solches Programm in LaTeX, das mit der Sprache etwas sehr Ungewöhnliches macht?

ire_and_curses
quelle
87
Weißt du, ich wollte ein Wochenende draußen spielen. Weißt du, einer von denen, die nicht am Computer sind? Dann postest du diese Frage. Deshalb kann ich keine schönen Dinge haben.
Wheaties
1
/ d {def} def / u {dup} d [0 - 185 u 0 300 u] concat / q 5e - 3 d / m {mul} d / z {A um B um} d / r {rlineto} d / X -2 q 1 {d / Y -2 q 2 {d / A 0 d / B 0 d 64 -1 1 {/ f Austausch d / BA / A z sub X add d B 2 mm Y add dz add 4 gt {exit} if / f 64 d} für f 64 div setgray XY moveto 0 q neg u 0 0 qu 0 rrrr fill / Y} für / X} für showpage
DNA

Antworten:

84

In Ausgabe 13 von The Monad Reader schreibt Stephen Hicks über die Implementierung der Lösung für einen ICFP-Wettbewerb (mit Mars-Rover-Navigation) in TeX unter Verwendung von Makros. Amüsanterweise ist die Ausgabe der Lösung beim Satz eine Postscript-Karte des Rover-Pfades.

Derrick Turk
quelle
10

Die pgfmathBibliothek überrascht mich immer noch. Turing-bezogener: Es ist jedoch möglich, eine tatsächliche Turing-Maschine in TeX zu schreiben ( siehe http://en.literateprograms.org/Turing_machine_simulator_(LaTeX) . Es ist nur eine raffinierte Möglichkeit, Erweiterungen in TeX zu verwenden.

PostScript ist ebenfalls vollständig. Wenn Sie das Handbuch lesen, werden Sie von den allgemeinen Programmierfunktionen begeistert sein (zumindest war ich das).

Pieter
quelle
1
Leute haben LISP in PostScript geschrieben. (Lesen Sie den vorherigen Satz, bis Sie die seltsame Schönheit einer solchen Konstruktion vollständig verstanden haben.)
new123456
Die PLRM Handbuch erwähnt ist jetzt ein toter Link, versuchen Sie diese stattdessen adobe.com/products/postscript/pdfs/PLRM.pdf
Aaron Robson
9

\ def \ K # 1 # 2 {# 2}

\ def \ S # 1 # 2 # 3 {# 1 # 3 {# 2 # 3}}

Mateusz Grotek
quelle
4
Endlich jemand, der Sinn macht
user1129682
Was soll das machen?
URL
6

Ich bin mir nicht sicher, ob dies per se als Programmierung qualifiziert ist , aber ich habe kürzlich damit begonnen, etwas Ähnliches wie objektorientiertes Zeug in LaTeX zu tun. (Sie müssen keine Mathematikkenntnisse haben, um Folgendes zu befolgen.) In den letzten Veröffentlichungen habe ich über Kategorien geschrieben , die Objekte und Morphismen aufweisen . Da es einige davon gab, wollte ich einen einheitlichen Stil, so dass beispielsweise 𝒞 eine Kategorie mit typischem Objekt C und typischem Morphismus c war . Dann hätte ich auch 𝒟 mit D und d. Also definiere ich eine "Klasse", sage "Kategorie" (Sie müssen Mathematiker sein, um den Witz dort zu verstehen) und erkläre, dass C eine Instanz dieser Klasse ist, und habe dann Zugriff auf \ ccat, \ cobj, \ cmor und so weiter. Der Grund dafür, dass \ cat {c}, \ obj {c} und \ mor {c} usw. nicht ausgeführt werden, ist, dass diese Kategorien manchmal spezielle Namen haben. Nachdem ich die Instanz deklariert habe, kann ich ihren Namen sehr einfach ändern (Definieren Sie einfach \ ccat neu - nun ja, eigentlich \ mathccat, da \ ccat ein Wrapper ist, der \ mathccat im Mathematikmodus und \ textccat im Textmodus auswählt). (Natürlich ist es etwas komplizierter als oben vorgeschlagen und das OO-Zeug ist wirklich nützlich, wenn ich eine neue Kategorie als eine Variante einer alten definieren möchte (es kann sogar den Fall behandeln, in dem die alte nicht funktioniert). existiert noch nicht.).)

Obwohl es möglicherweise nicht als eigentliche Programmierung qualifiziert ist, verwende ich es in Papieren und finde es nützlich - die anderen Antworten haben (bisher) eher das Gefühl, die Fähigkeiten von LaTeX zu demonstrieren, als eine vernünftige Lösung für ein praktisches Problem.

Andrew Stacey
quelle
Würde gerne sehen, wie du das machst!
Nate Stemen
1

Ich kenne jemanden, der die Antwort auf ein ACM-Wettbewerbsproblem in LaTeX geschrieben hat.

Bernstein
quelle
Hm ... leider liegt der Code nicht herum und ich habe keinen Kontakt zu der Person, die ihn geschrieben hat. : /
Amber