Latex
-
Wird Latex eigentlich kompiliert? Kann ich mir eigentlich nicht vorstellen. Ist hier nicht ausschließlich ein Parser am Werk?
Danke
lg, freakC++
-
Naja, es ist ein Makroprozessorsystem für TeX (beziehungsweise das Makroprozessorsystem ist schon in TeX enthalten und LaTeX liefert fertige Makros). Diese Makros werden dann aufgelöst in TeX-Befehle. Streng genommen ist das aber die ganze Zeit TeX - Makros würde ich nicht als eigene Sprache ansehen. Also kein Compilierungsvorgang sondern wie du schon sagst ein Makroparsevorgang im TeX-System.
Danach wird das TeX natürlich in andere Sprachen übersetzt, dvi als Zwischenschritt und dann andere Seitenbeschreibungssprachen wie Postscript, pdf oder html. Das ist dann schon Compilierung.
-
SeppJ schrieb:
Das ist dann schon Compilierung.
Entsteht nicht bei der Kompilierung immer eine ausführbare Datei? DAs ist aber bEI Latext doch nicht der Fall? ODer ist ein .pdf eine ausführbare Datei? Eher nicht! Habe ich da was falsch verstandenNe?
lg, freakC++
-
Nein, beim kompilieren wird von einer Sprache in eine andere übersetzt. Ob das jetzt Maschinensprache, Java-Byte-Code oder PDF ist, ist egal.
-
freakC++ schrieb:
Kann ich mir eigentlich nicht vorstellen.
Die Vorstellungskraft ist nicht als das Mass der Dinge zu gebrauchen.
-
Um noch ein bisschen Verwirrung zu stiften. Da benutzt jemand TeX als Programmiersprache für einen Programmierwettbewerb: http://sdh33b.blogspot.com/2008/07/icfp-contest-2008.html
-
SeppJ schrieb:
Das ist dann schon Compilierung.
Würde ich anders sehen. TeX ist ein Interpreter. Das TeX-Script lässt man laufen, und es gibt dabei Layout-Anweisungen in dvi aus. Wenn man das als Compiler bezeichnet ist auch PHP ein Compiler, der PHP-Code in HTML umwandelt...
-
Bashar schrieb:
SeppJ schrieb:
Das ist dann schon Compilierung.
Würde ich anders sehen. TeX ist ein Interpreter. Das TeX-Script lässt man laufen, und es gibt dabei Layout-Anweisungen in dvi aus. Wenn man das als Compiler bezeichnet ist auch PHP ein Compiler, der PHP-Code in HTML umwandelt...
Nun, warum nicht? Wo wäre denn ein entscheidender Unterschied zu einer unstrittig compilierten Sprache wie C? C wird auch Anweisung zu Anweisung durchgegangen und daraus Assembleranweisungen gemacht. Und der ganze Syntaxkram wie Variablendeklarationen und so wird in irgendwelchen internen Datenstrukturen des Compilers gefüttert die dann wiederum eine Auswirkung darauf haben, wie die Assembleranweisungen genau aussehen (und vorherige Befehle haben Auswirkungen uaf das nachfolgende). TeX ist halt deutlich anweisungslastiger, weil fast das gesamte Dokument aus Befehlen besteht die direkt in dvi umgewandelt werden können. Aber es gibt auch Anweisungen die an den TeX-Prozessor selbst gehen und es wird auch nicht jede Anweisung isoliert für sich betrachtet, sondern es spielen auch globale Betrachtungen wie die Länge der Zeile/Seite eine Rolle.
Es ist primitiver und ein ganz anderes Aufgabengebiet, aber ich sehe von der Vorgehensweise her keinen wesentlichen Unterschied.
edit: Über php kann ich nichts sagen, kenne mich nicht gut damit aus.
-
SeppJ schrieb:
Bashar schrieb:
SeppJ schrieb:
Das ist dann schon Compilierung.
Würde ich anders sehen. TeX ist ein Interpreter. Das TeX-Script lässt man laufen, und es gibt dabei Layout-Anweisungen in dvi aus. Wenn man das als Compiler bezeichnet ist auch PHP ein Compiler, der PHP-Code in HTML umwandelt...
Nun, warum nicht? Wo wäre denn ein entscheidender Unterschied zu einer unstrittig compilierten Sprache wie C? C wird auch Anweisung zu Anweisung durchgegangen und daraus Assembleranweisungen gemacht.
Der entscheidende Unterschied ist, was mit dem Programm geschieht, das durch den Code beschrieben wird. In einem Fall wird das Programm selbst ausgeführt, im anderen wird das Programm nur übersetzt, aber nicht ausgeführt.
Bei LaTeX wird das LaTeX-Programm während der Übersetzung ausgeführt: Schleifen, if-Abfragen, usw. werden ausgeführt nach den Semantik-Regeln der Programmiersprache "LaTeX" (bzw. "TeX"). Die Ausgabe des interpretierten LaTeX-Programms ist eine pdf-Datei. Die hat mit dem ursprünglichen LaTeX-Quellcode so viel zu tun wie die Ausgabe von "ls" auf dem Terminal mit dem Quellcode des Programms "ls" zu tun hat.
Bei C wird das C-Programm während der Übersetzung nicht ausgeführt. Es wird nur übersetzt in ein äquivalentes Maschinencode-Programm.
Bei Meta-Programming wie in C++ mit Templates beginnen die Grenzen aber zu verwischen.
-
Und wenn man eine ps-Datei erzeugt, sieht die Sache schon wieder ganz anders aus. Und nur weil etwas zur Kompilezeit ausgefuehrt wird, kann es sich trotzdem um einen Kompiler handeln. Dein Beispiel mit "ls" ist wirklich an den Haaren herbeigezogen.
-
@Christoph: Meiner Meinung nach legst du da zu viel Wert auf dne Begriff ausführen. Ein Compiler übersetzt von einer Hochsprache in eine andere. C ist eine abstrakte Art und Weise ein ausführbares Programm zu beschreiben, der Compiler macht daraus etwas konkret ausführbares (bzw. Assembler als Zwischenschritt) ohne den Code selbst auszuführen. TeX ist eine abstrakte Sprache zur Beschreibung von Textseiten. Der TeXprozessor macht daraus eine konkrete Seitenbeschreibung in dvi. Dabei wird die Seite aber nie konkret erzeugt, sondern nur der Code der nötig wäre die Seite zu erzeugen. In diesem Sinne wird der TeX-Code an keiner Stelle zur Beschreibung einer konkreten Seite benutzt, genauso wie der C Code nie konkret ausgeführt wird.
Der Unterschied, dass der TeX-Code tatsächlich ausgeführt wird und der C-Code nicht kommt daher, dass das eine eben eine Sprache zur Beschreibung von Textseiten ist, das andere eine Sprache zur Beschreibung ausführbarer Programme. In beiden Fällen wird der Code aber nicht direkt zur Erzeugung des Endergebnisses benutzt.