Output externer Programme einbinden? Parameter übergeben?

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


RalfR
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Mi 13. Okt 2010, 19:00

Output externer Programme einbinden? Parameter übergeben?

Beitrag von RalfR »

Hallo zusammen!

Gibt es ein Makro-Paket, mit dem LaTex mit
externen Programmen kommunizieren kann?

Kann ich also z.B. in der LaTex-Datei
etwas in der Art definieren:
\begin{getFromExtern}
\call{IrgendeinWindowsProgramm[param1,param2,param3]}
\end{getFromExtern}



sodass an IrgendeinWindowsProgramm
dier Variablen param1,param2,param3 übergeben werden
und die Ausgabe des Programms zurückkommt und
wie der Output jede anderen LaTex-Commands
(also als Text) verarbeitet wird?

Ich glaube, mit den \read und \write-Befehlen komme
ich da nicht hin.

Danke für Eure Hilfe!

Ralf

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Such mal nach dem sogenannten \write 18 feature oder shellescape. Wobei man die Ausgabe des externen Programms dabei in eine Hilfsdatei umlenken muss, die man anschließend mit \input liest. Neuere TeX-Implementieren haben zum Teil auch noch ein pipe feature, das eng mit dem \write 18 feature verwandt ist und in der Regel mit derselben Option aktiviert wird.

Übrigens verwenden Pakete wie auto-pst-pdf genau diese Möglichkeit. Ein Blick auf solche Pakete kann bei der Realisierung also durchaus nützlich sein.

Das Hauptproblem bei der Geschichte ist übrigens, Aufrufe so zu realiseren, dass sie sowohl unter Windows, als auch Linux und BSD oder OSX funktionieren. Herbert dürfte hier auf goLaTeX zu den Leuten gehören, die die meisten Erfahrungen damit haben.

RalfR
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Mi 13. Okt 2010, 19:00

Beitrag von RalfR »

Danke.
Für den Moment würde es mir reichen,
wenn es unter Windows funktionieren
würde.
Tut es aber nicht:
\documentclass{article}
\begin{document}
\immediate\write18{dir > temp.tex}
\input temp
\end{document}
Fehlermeldung
! I can't find file `temp'.
l.4 \input temp

Please type another input file name: 
\write18 macht also gar nichts, nicht
mal eine Fehlermeldung wird ausgegeben.
Kann ich das irgendwie debuggen?

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Hast Du denn das \write 18 feature eingeschaltet, wie das in der MiKTeX-Anleitung (z. B. auf http://www.miktex.org, aber auch auf Deinem Rechner) erklärt wird? Dort ist übrigens auch die Sache mit der Pipe erklärt - übrigens u. a. genau am Beispiel von "dir".

RalfR
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Mi 13. Okt 2010, 19:00

Beitrag von RalfR »

Danke für den Hinweis u. Link.

Ich habe versucht, das einzuschalten,
Mit
tex --enable-write18 an der Windows-Kommandozeile
beeindruckt das System aber nicht sehr:
ist das denn richtig so?

Der Fehler ist noch der Gleiche.

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

RalfR hat geschrieben: Ich habe versucht, das einzuschalten,
Mit
tex --enable-write18 an der Windows-Kommandozeile
beeindruckt das System aber nicht sehr:
ist das denn richtig so?

Der Fehler ist noch der Gleiche.
Du musst dein Beispiel mit "latex -shell-escape "datei"laufen lassen oder
eben ein TeX-Dokument benutzen. Und wenn latex, dann auch richtig:
\documentclass{article}
\begin{document}
\immediate\write18{dir > temp.tex}
\input{temp}
\end{document}
funktioniert tadellos.

Herbert

RalfR
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Mi 13. Okt 2010, 19:00

Beitrag von RalfR »

Das verstehe ich nicht ganz:
im Moment arbeite ich mit TeXWorks.
Kann ich den dafür nicht mehr benutzen?

TeXWorks ruft anscheinend LaTeXmk an
der Kommandozeile auf.

Für den Aufruf habe ich die Optionen
 --enable-write18
-shell-escape tex
hinzugefügt:
Immer noch das gleiche Problem.

Habe auch an der Kommandolzeile beides ausprobiert:
latex -shell-excape test_write18
Fehler:
latex: invalid command line option

und
latex --enable-write18 test_write18

Da gibt es den Fehler:
!Undefined control sequence
L.4

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

RalfR hat geschrieben:
latex -shell-excape test_write18
Fehler:
latex: invalid command line option
Wundert Dich das? Wenn Du MiKTeX verwendest, solltest Du schon die Optionen verwenden, die in der MiKTeX-Anleitung an der Stelle angegeben sind, auf die mein Link verweist.
RalfR hat geschrieben:
latex --enable-write18 test_write18

Da gibt es den Fehler:
!Undefined control sequence
L.4
Leider hast Du uns den entscheidenden Teil der Fehlemeldung, der angibt, welche control sequence nicht definiert ist, ebenso unterschlagen wie die Angabe wie ganz genau Dein Minimalbeispiel nun aussieht. Daher kann ich Dir nur sagen: In Zeile 4 stimmt etwas nicht. Ich kann nur vermuten: In der von "dir" erzeugten Datei temp.tex steht etwas, womit TeX nichts anfangen kann. Wenn temp.tex keine LaTeX-Syntax hat, dann kann man sie natürlich nicht einfach mit \input laden. Dann muss man die entweder vorverarbeiten oder speziell laden, beispielsweise mit \verbatiminput (siehe Paket verbatim) oder \lstinputlisting (siehe Paket listings).

CrazyHorse
Forum-Guru
Forum-Guru
Beiträge: 252
Registriert: Di 16. Mär 2010, 09:39

Beitrag von CrazyHorse »

RalfR hat geschrieben:Immer noch das gleiche Problem.

Fehler:
latex: invalid command line option
Gibt Windows nicht den Laufwerksbuchstaben mit \C: aus?
dann hast du doch gleich ein Problem beim Einlesen.

Herbert

RalfR
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Mi 13. Okt 2010, 19:00

Beitrag von RalfR »

Welche Option bei MikTex meinst Du?

Ich habe wie gesagt im TeXWorks-Editor
als Argument
--enable-write18
hinzugefügt.

Mein Minimalbeispiel sieht immer noch so aus:
\documentclass{article}
\begin{document}
\immediate\write18{dir > temp.tex}
\input{temp}
\end{document} 
Wenn ich also, um es etwas zu vereinfachen,
nur weiter versuche, im TeXWorks-Editor
den richten Aufruf hinzubekommen,
nehme ich dort NUR
--enable-write18
als Argument hinzu.
Und dann bekomme ich immer noch den
gleichen Fehler wie eingangs beschrieben:
! LaTeX Error: File `temp.tex' not found.

Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)

Enter file name: 
Das Problem ist hier also erstmal, dass
die Datei nicht erzeugt wird.

Meine Frage also: kann ich genauer herausfinden,
warum nicht?

Die Log-Datei ist leer, die Aux-Datei ist leer,
wie finde ich denn überhaupt heraus,
ob write18 abgelehnt wird, oder ob
der dir-Befehl fehlschlägt oder {was
sonst auch immer passieren kann} - passiert?

Antworten