Seite 1 von 1
Lange Dateinamen
Verfasst: Do 7. Nov 2013, 20:40
von tome28
Hallo,
ich bin gerade dabei ein VBNET Programm zu schreiben, aus dem ich "pdflatex.exe" heraus aufrufe (via Process.Start()).
Mein Ziel ist es, eine Art "Template.tex" nach Platzhaltern zu durchsuchen und mit entsprechenden Inhalten zu ersetzen. Ist das getan kopiere ich die neue .tex Datei in ein spezielles Verzeichnis, in dem ich anschließend auch mit Hilfe von Latex kompilieren möchte.
Soweit funktioniert das auch. Allerdings bekomme ich von Latex die Meldung "!Undefined control sequence" mit dem, von mir angegebenen, Verzeichnis. Ich vermute mal, dass Latex Probleme mit dem Verzeichnisnamen hat.
Weiß jemand wie ich das Problem beheben kann?
Vielen Dank im voraus
lg Torsten
Verfasst: Fr 8. Nov 2013, 08:28
von Johannes_B
Momentan kann das keiner wissen, denn wir wissen nicht, was du tust. Vor deinem Verzeichnisnamen steht scheinbar ein Backslash. Warum ist der dort?
Versuch bitte ein
Minimalbeispiel zu erstellen, damit wir dein Problem nachvollziehen können.
Verfasst: Fr 8. Nov 2013, 09:08
von Besserwisser
Übrigens würde ich statt nach irgendwelchen Platzhaltern zu suchen und diese zu ersetzen schlicht mit Befehlen arbeiten, also beispielsweise:
\documentclass{article}
\providecommand*{\BeispielA}{???BeispielA wurde nicht gesetzt!!!}
\begin{document}
Das ist \BeispielA.
\end{document}
Diese Datei "TemplateA.tex" legt man dann im Suchpfad von LaTeX ab. Für die "ausgefüllte" Datei benötigt man dann nur
\newcommand*{\BeispielA}{erste Beispiel}
\input{TemplateA.tex}
Da "TemplateA.tex" im Suchpfad von LaTeX liegt (ggf. kann man auch die Umgebungsvariable TEXINPUTS entsprechend setzen) benötigt man in der Datei mit den ausgefüllten Feldern keinerlei Pfadangaben. Vor dem Aufruf von pdflatex wechselt man am besten in das Verzeichnis der erzeugten "ausgefüllten" Datei. Dann werden auch alle Hilfs- und Logdateien dort erzeugt.
Verfasst: Fr 8. Nov 2013, 19:43
von tome28
Hallo nochmal,
ich kann leider die notwendige Hardcopy nicht hochladen
Vor meinem Verzeichnisnamen steht kein Backslash. Aber nochmal langsam. Ich hoffe, der Code ist verständlich.
Dim information As New ProcessStartInfo
information.FileName = "C:\MiKTeX\miktex\bin\pdflatex.exe"
information.Arguments = "D:\Factory Acceptance Tests\relayboard\13059.tex"
Process.Start(information)
Mit diesen vier Zeilen starte ich Latex. Wie gesagt, der Aufruf funktioniert auch soweit. Es öffnet sich das Commandwindow von Windows. Mir ist aber eben noch aufgefallen, dass die Ausgabe "! I can't find file D:Acceptance" angezeigt wird. Soll heißen, Latex hat offensichtlich ein Problem mit meiner Parameterübergabe. Ich denke mal es kommt mit den Backslashes oder den Leerzeichen nicht klar.
lg Torsten
Verfasst: Fr 8. Nov 2013, 19:46
von Johannes_B
Also ich sehe da ganz viele Backslashes. Benutze Forwardslashes / als Verzeichnistrenner!
Ich habe deinen Code oben markiert, hier siehst du schon, dass die Backslash magic machen. Diese leiten in LaTeX nämlich Befehle/Kontrollsequenzen ein.
Übrigens sind Uploads momentan leider nicht möglich.
Verfasst: Fr 8. Nov 2013, 21:09
von tome28
Das hatte ich schon versucht. Ich habe die Backslashes im Argument durch Slashes ersetzt. Hat leider nichts gebracht.
Irgendwie muss es aber funktionieren, denn Programme wie "Eclipse" können das ja auch. Ich habe aber aus den Ausgabeinformationen von "Eclipse" auch keine Idee ziehen können.
lg Torsten
Verfasst: Fr 8. Nov 2013, 21:26
von u_fischer
Neben den falschen Backslashes hast du auch ein Leerzeichen im Verzeichnisnamen. D.h du brauchst zusätzliche Quotes.
Verfasst: Fr 8. Nov 2013, 22:47
von dknof
Hallo Torsten,
ich hatte auch ein VBA-Skript mit Aufruf von LaTeX erstellt (siehe
http://www.golatex.de/serienbrief-ueber ... t9780.html).
Mein Aufruf von LaTeX erfolgt dabei mit
Dim objShell
Set objShell = CreateObject("WScript.Shell")
objShell.CurrentDirectory = ActiveWorkbook.Path
objShell.Run "pdflatex '" & Ausgabe & ".tex'", 0 ' 0: versteckt, 1: im Vordergrund
Der Dateiname (mit Leerzeichen) wird dabei noch in einfache Anführungszeichen gesetzt, also zum Beispiel
objShell.Run "pdflatex 'Beispiel 1.tex'"
Gruß
Diether
Verfasst: Sa 9. Nov 2013, 07:23
von tome28
G' Morgen und vielen Dank für die vielen Tipps. Ich habe alle Vorschläge durchprobiert und keiner wollte funktionieren
Ich gehe daher jetzt den Umweg, das Arbeitsverzeichnis zu wechseln. So kann ich die zu kompilierende Datei ohne zusätzliche Verzeichnisangabe in den Parametern angeben. Ist umständlich, aber es funktioniert.
Vielen Dank nochmal an alle
lg Torsten
Verfasst: Sa 9. Nov 2013, 11:56
von u_fischer
tome28 hat geschrieben:
Ich gehe daher jetzt den Umweg, das Arbeitsverzeichnis zu wechseln. So kann ich die zu kompilierende Datei ohne zusätzliche Verzeichnisangabe in den Parametern angeben. Ist umständlich, aber es funktioniert.
Das ist sowieso der sinnvolle Weg. pdflatex vom einem anderen Verzeichnis aus zu starten wird nicht empfohlen und kann zu vielen Schwierigkeiten führen, weil input-Dateien und Bilder usw immer vom relativ zum Verzeichnis, in dem du pdflatex aus startest, gesucht werden. Und die Ausgabedateien würden dort auch landen.