Ich hoffe das ist das richtige Unterforum.
Ich rufe pdflatex über eine Batch-Datei auf:
..\miktex\bin\pdflatex --output-directory .\ .\%1
Dadurch wird die PDF-Datei direkt im aktuellen Verzeichnis mit der .tex-Datei erstellt.
Allerdings muss ich jetzt bei jeder Dateiangabe den Pfad mit angeben. Z. B. \include{./test.tex}
Außerdem findet pdflatex die .aux-Dateien nicht mehr, --aux-directory .\ als Parameter habe ich probiert, das bringt nichts.
Wie kann ich das ganze sauber hinkriegen?
Was ich möchte ist dass ich einfach in dem Ordner in dem sich die .tex-Dateien befinden eine Batch mit der zu kompilierenden Datei als Parameter aufrufe und dann im gleichen Ordner die .pdf-Datei erstellt wird.
(ich weiß, das geht mit einer IDE komfortabler, aber ich kann hier auf der Arbeit nichts installieren)
Muss alle Verzeichnisse mit ./ angeben
Wenn Du bereits im Verzeichnis bist, musst Du einfach nur pdflatex mit dem Namen der gewünschten Datei aufrufen, da die Ausgabe immer in dem Verzeichnis erfolgt, in dem Du gerade bist:
Dabei sollte sich das Verzeichnis mit pdflatex und den ganzen anderen MiKTeX-Binaries unbedingt in PATH befinden.
Wenn Du sonst nichts in den Batch machst, ist es allerdings witzlos dafür ein Batch zu schreiben. Dann kannst Du pdflatex auch einfach direkt aufrufen.
Ansonsten ist es natürlich nicht sinnvoll als Parametern für --output-directory den Namen einer Datei zu verwenden. Das sollte ggf. eher der Pfad der Datei ohne den Dateinamen selbst sein. Man kann in dem Fall aber auch einfach in das entsprechende Verzeichnis wechseln. Ich glaube die BATCH-Syntax dafür wäre:
Aber verlass Dich besser nicht darauf. Es ist Jahre her, dass ich BATCHs programmiert habe. Die Hilfe zu CMD und FOR geben ggf. mehr dazu her, wie man das mit der Ermittlung von Laufwerk, Verzeichnis und Dateinamen richtig macht. Mit XSET statt SET geht das AFAIK auch direkt, also ohne FOR-Umweg.
Vermutlich wäre das ein guter Zeitpunkt zur PowerShell zu wechseln oder sich etwas wie MinSYS (einschließlich bash) zu besorgen.
pdflatex %1
Wenn Du sonst nichts in den Batch machst, ist es allerdings witzlos dafür ein Batch zu schreiben. Dann kannst Du pdflatex auch einfach direkt aufrufen.
Ansonsten ist es natürlich nicht sinnvoll als Parametern für --output-directory den Namen einer Datei zu verwenden. Das sollte ggf. eher der Pfad der Datei ohne den Dateinamen selbst sein. Man kann in dem Fall aber auch einfach in das entsprechende Verzeichnis wechseln. Ich glaube die BATCH-Syntax dafür wäre:
@REM In das Verzeichnis der übergebenen Datei wechseln @REM und dort dann pdflatex für diese Datei aufrufen set filepath="%1" for %%f in (%%filepath) do set drivename=%%~df for %%f in (%%filepath) do set dirname=%%~dpf for %%f in (%%filepath) do set filename=%%~nxf %%drivename: cd %%dirname pdflatex %%filename
Vermutlich wäre das ein guter Zeitpunkt zur PowerShell zu wechseln oder sich etwas wie MinSYS (einschließlich bash) zu besorgen.
goLaTeX-Knigge (mit Minimalbeispiel und »So stellst Du Deine Frage richtig«)
Wie kann ich Code in meinem Beitrag hervorheben?
Wie hänge ich ein Bild an meine Frage?
KOMA-Script
Wie kann ich Code in meinem Beitrag hervorheben?
Wie hänge ich ein Bild an meine Frage?
KOMA-Script
Der Grund für die Batch-Datei ist, dass ich nicht den ganzen Pfad zur pdflatex.exe angeben will - Umgebungsvariablen werden leider nach dem Abmelden vom System zurückgesetzt...
Denn seltsamerweise funktionierte folgendes nicht:
..\miktex\bin\pdflatex test.tex
Er sucht dann die test.tex im Verzeichnis von pdflatex. Daher fügt die bat automatisch das .\ vor den Dateinamen.
Ist vermutlich vom Betriebssystem verursacht, pdflatex sieht wenn man es so aufruft anscheinend sein eigenes Verzeichnis als das aktuelle an und sucht daher dort nach der .tex Datei und will auch dort die Ausgabe machen.
Eine Möglichkeit wäre vermutlich in der Batch einfach den PATH zu definieren und dann ganz normal mit pdflatex %1 aufrufen.
Kann das aber erst Montag wieder testen...
Das konnte man etwas schlecht erkennen, der Parameter für --output-directory ist .\, der Rest steht vor dem %1.Ansonsten ist es natürlich nicht sinnvoll als Parametern für --output-directory den Namen einer Datei zu verwenden.
Denn seltsamerweise funktionierte folgendes nicht:
..\miktex\bin\pdflatex test.tex
Er sucht dann die test.tex im Verzeichnis von pdflatex. Daher fügt die bat automatisch das .\ vor den Dateinamen.
Ist vermutlich vom Betriebssystem verursacht, pdflatex sieht wenn man es so aufruft anscheinend sein eigenes Verzeichnis als das aktuelle an und sucht daher dort nach der .tex Datei und will auch dort die Ausgabe machen.
Eine Möglichkeit wäre vermutlich in der Batch einfach den PATH zu definieren und dann ganz normal mit pdflatex %1 aufrufen.
Kann das aber erst Montag wieder testen...
Ich habe das Problem mit dem Pfad jetzt so gelöst, dass ich beim Aufruf der Eingabeaufforderung den Pfad automatisch setze.
Das klappt auch soweit, dass ich dann aus dem Verzeichnis das die .tex Dateien enthält pdflatex starten kann.
Allerdings findet er die .tex-Datei dann nicht:
Starte ich mit pdflatex .\main.tex klappt es. Er findet dann allerdings wieder die .aux nicht... und --aux-directory .\ bringt ebenfalls nichts.
Kann es sein, dass das Problem irgendwie darin liegt, dass es sich um ein UNC/Netzlaufwerk handelt? Hat allerdings einen festen Laufwerksbuchstaben zugewiesen.
Das klappt auch soweit, dass ich dann aus dem Verzeichnis das die .tex Dateien enthält pdflatex starten kann.
Allerdings findet er die .tex-Datei dann nicht:
Tex-Datei-Verzeichnis> pdflatex main.tex This is pdfTeX, Version 3.1415926-1.40.10 (MiKTeX 2.8) entering extended mode ! I can't find file `main.tex'. <*> main.tex Please type another input file name:
Kann es sein, dass das Problem irgendwie darin liegt, dass es sich um ein UNC/Netzlaufwerk handelt? Hat allerdings einen festen Laufwerksbuchstaben zugewiesen.