Muss alle Verzeichnisse mit ./ angeben

Alles rund um das System für Windows.


bur
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: Do 22. Apr 2010, 12:24

Muss alle Verzeichnisse mit ./ angeben

Beitrag von bur »

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)

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

Beitrag von KOMA »

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:
pdflatex %1
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:
@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
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.

bur
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: Do 22. Apr 2010, 12:24

Beitrag von bur »

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...
Ansonsten ist es natürlich nicht sinnvoll als Parametern für --output-directory den Namen einer Datei zu verwenden.
Das konnte man etwas schlecht erkennen, der Parameter für --output-directory ist .\, der Rest steht vor dem %1.

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...

bur
Forum-Anfänger
Forum-Anfänger
Beiträge: 10
Registriert: Do 22. Apr 2010, 12:24

Beitrag von bur »

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:
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: 
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.

Antworten