PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Beim Kompilieren externes Programm ausführen



alexraasch
13-03-2010, 14:17
Hallo liebes Forum,

gibt es eine Möglichkeit, in LaTeX ein externes Programm auszuführen und die Ausgabe desselben während des Kompilierens einzubinden? Ich stelle mir das so vor:



\documentclass{article}

\begin{document}
\begin{extern}{C:\Programme\Test.exe}
... Befehle und Daten, die an Test.exe übergeben werden ...
\end{extern}
\end{document}


Es soll also Test.exe ausgerufen werden, mit dem was zwischen \begin{extern} und \end{extern} steht. Test.exe erzeugt gültigen LaTeX-Code, der anstelle des extern-Blocks eingefügt werden soll. Also alles in einem Rutsch.

Man könnte damit bequem z.B. R oder GNUplot einbinden, ohne separate Dateien zu brauchen, die extra verarbeitet werden müssen. Genauso dot, sketch etc. Oder man könnte sich Java-Programme oder Skripte anfertigen, die bestimmte Aufgaben übernehmen.

u_fischer
13-03-2010, 15:18
\immediate\write18{...}

auto-pst-pdf z.B. benutzt.

Du musst pdflatex mit der Option --shell-escape oder --enable-write18 aufrufen.

localghost
13-03-2010, 15:38
Für Gnuplot existiert das Paket gnuplottex (http://ctan.org/pkg/gnuplottex).


MfG
Thorsten

alexraasch
13-03-2010, 21:46
\immediate\write18{...}
Aha, und wie benutze ich das? Bezogen auf mein Beispiel oben?


Für Gnuplot existiert das Paket gnuplottex.
Ja, das ist klar, dass man jeweils Pakete braucht, die LaTeX-Code ausgeben. Für GNUplot und R gibt es ja auch TikZ-Ausgabe-Pakete.

rais
14-03-2010, 09:49
Moin moin,


gibt es eine Möglichkeit, in LaTeX ein externes Programm auszuführen und die Ausgabe desselben während des Kompilierens einzubinden?
die meisten Ansätze dafür arbeiten mit einer (oder mehreren) Zwischendateien, etwa


\documentclass{article}
\newcommand*\tempfile{\jobname-foo.bar}
\newcommand*\kpsewhich[1]{%
\InputIfFileExists{\tempfile}{}{%
\typeout{Datei `\tempfile' gibt's noch nich...}%
\write18{kpsewhich #1 > \tempfile}%
}
}
\begin{document}
\kpsewhich{article.cls}
\end{document}

mit (pdf)latex --shell-escape bzw. (pdf)latex --enable-write18 aufgerufen, testet zunächst, ob \tempfile vorhanden ist: wenn ja, wird diese Datei eingebunden, wenn nicht, wird über \write18 der Befehl ausgelöst, der diese Datei erstellen soll ... und spätestens beim zweiten LaTeX-Lauf dann auch zur Verfügung steht.:rolleyes:
Es mag hierbei von Vorteil sein, daß das externe Programm nur dann ausgeführt zu werden braucht, wenn besagte \tempfile noch nicht existiert.
OTOH versteht LaTeX auch Pipes. So Dein Test.exe über stdout dessen Ausgabe erzeugt und Dein Betriebssystem sowas unterstützt, ginge auch


\documentclass{article}
\newcommand*\kpsewhich[1]{\input{|"kpsewhich #1"}}
\begin{document}
\kpsewhich{article.cls}
\end{document}

mit (pdf)latex --shell-escape bzw. (pdf)latex --enable-pipe(s) aufzurufen -- das kommt dann auch ohne zusätzliche Datei aus.;)

Der `kpsewhich' ist hier stellvertretend für Dein `Test.exe', was ich nicht hab und bei mir eh nicht laufen würde, selbst wenn ich's hätte ... andererseits ich mir ziemlich sicher bin, daß auch bei Dir ein ausführbares `kpsewhich[.exe]' vorhanden ist.

MfG

alexraasch
14-03-2010, 14:07
Vielen Dank für die Antwort. Ich werd das mal ausprobieren. Pipes gibt es bei meinem Betriebssystem.

localghost
14-03-2010, 14:40
[...] Ja, das ist klar, dass man jeweils Pakete braucht, die LaTeX-Code ausgeben. Für GNUplot und R gibt es ja auch TikZ-Ausgabe-Pakete.
Aber gnuplottex (http://ctan.org/pkg/gnuplottex) arbeitet gerade anders herum. Es übergibt Scripte an Gnuplot, startet es und bindet die entstandenen Diagramme abhängig vom gewählten Terminal gegebenenfalls grafisch ein.