Angenommen, ich habe drei Verzeichnisse src
, aux-dir
, und out-dir
, alle im selben Arbeitsbereichsverzeichnis work
, und einige unabhängige, aber ähnlich formatierte Dateien bleb1.tex
, bleb2.tex
, ... in src
. Ich möchte die Konfiguration so konfigurieren, dass latexmk
einige bleb<i>.tex
in kompiliert werden bleb<i>.pdf
, sodass die Zusatzdateien in ein Unterverzeichnis bleb<i>
von geschrieben werden aux-dir
und die Ausgabedateien (z. B. ) in ein Unterverzeichnis von bleb<i>.pdf
geschrieben werden . Da es viele Dateien geben wird , möchte ich vermeiden, diese Unterverzeichnisse vor dem ersten Kompilieren jedes von ihnen manuell erstellen zu müssen .bleb<i>
out-dir
bleb<i>.tex
bleb<i>.tex
Zu diesem Zweck habe ich eine benutzerdefinierte latexmk
Konfigurationsdatei in definiert work
. Ich weiß, dass in einer Konfigurationsdatei das Ziel der Hilfsdateien und das Ziel der Ausgabedateien über die Variablen $aux_dir
bzw. angegeben werden können $out_dir
, und dass dies latexmk
sogar so praktisch ist, dass die in den Variablen angegebenen Pfade erstellt werden, wenn sie noch nicht vorhanden sind.was ich nicht weiß, ist, wie ich die Unterverzeichnisnamen vom Basisnamen bleb<i>
der Quell-.tex-Datei abhängig machen kann.
Es scheint, als ob auf keine der Platzhaltervariablen %A
, %R
, usw. in der Konfigurationsdatei zugegriffen werden kann, außer durch Überschreiben einer Befehlsvariable (z. B. $latex = "latex %O %S"
). Mein erster Versuch bestand darin, in zu ändern, $latex
um internal mylatex %A
auf den Quelldateinamen zuzugreifen und ihn in $aux_dir
und $out_dir
innerhalb meiner eigenen Subroutine einzufügen. Mein zweiter Versuch bestand darin, und Variablen auf einen Pfad mylatex
zu setzen , der den von angegebenen Dateinamen in einer benutzerdefinierten Subroutine enthält, die beim Hook aufgerufen werden soll. Bei beiden Versuchen erkennt s die Änderungen an und nicht, bevor standardmäßig alle Hilfs- und Ausgabedateien in ausgegeben werden . Die Dokumentation für scheint nicht anzugeben, wie in der Konfigurationsdatei auf andere Weise auf die von latexmk übergebenen Befehlszeilenargumente (insbesondere den Quelldateinamen) zugegriffen werden kann. In meinem dritten Versuch habe ich statt und zu ändern einfach versucht, die entsprechenden und Flags in einem Perl -Aufruf zu ändern, den ich innerhalb der Subroutine aus dem ersten Versuch mache , aber auch hier ignoriert s diese Flags und legt einfach Dateien in ab .$aux_dir
$out_dir
$$Pbase
before_xlatex
latexmk
$aux_dir
$out_dir
work
latexmk
$aux_dir
$out_dir
-aux-directory
-output-directory
system
latex
mylatex
latexmk
work
An diesem Punkt ist mir klar geworden, dass meine ursprünglich geplante Verzeichnisstruktur für work
von Anfang an nicht ideal ist, da es Probleme geben könnte, die beispielsweise mit auftreten könnten. bibtex
Ich habe jedoch genug Zeit damit verbracht, herumzuspielen und zu versuchen, den ursprünglichen Plan zum Laufen zu bringen, sodass ich neugierig bin, ob es möglich ist oder ob ich ein grundlegendes Designprinzip von missverstanden habe latexmk
.
Antwort1
An diesem Punkt wird Ihre Anfrage von latexmk nicht unterstützt. Es wäre möglich, sie zu implementieren; dies würde eine Änderung des Codes erfordern, den latexmk verwendet, bevor es mit der Verarbeitung einer Tex-Datei beginnt. Derzeit
Die Versuche, die Sie unternommen haben, kommen alle zu spät, um das Nötige zu tun. Nachdem die Initialisierung für eine bestimmte .tex-Datei abgeschlossen ist, müssen die Verzeichnisse $aux_out
und festgelegt und latexmk bekannt bleiben.$out_dir