Допустим, у меня есть три каталога src
, aux-dir
, и out-dir
, все в одном каталоге рабочей области work
, и несколько независимых, но одинаково отформатированных файлов bleb1.tex
, bleb2.tex
, ... , находящихся в src
. Я хотел бы настроить latexmk
компиляцию некоторых из них bleb<i>.tex
в bleb<i>.pdf
таким образом, чтобы вспомогательные файлы записывались в подкаталог bleb<i>
, aux-dir
а выходные файлы (например bleb<i>.pdf
) записывались в подкаталог bleb<i>
. out-dir
Поскольку файлов будет много bleb<i>.tex
, я хотел бы избежать необходимости вручную создавать эти подкаталоги перед первой компиляцией каждого bleb<i>.tex
.
Я определил пользовательский latexmk
файл конфигурации в work
этом направлении. Я знаю, что в файле конфигурации назначение aux-файлов и назначение выходных файлов можно указать с помощью переменных $aux_dir
и $out_dir
, соответственно, и это latexmk
даже так удобно, как создавать пути, указанные в переменных, если они еще не существуют. Однако,Чего я не знаю, так это как сделать так, чтобы имена подкаталогов зависели от базового имени bleb<i>
исходного .tex-файла.
Похоже, что ни одна из переменных-заполнителей %A
, %R
и т. д. не доступна в файле конфигурации, кроме как путем перезаписи командной переменной (например, $latex = "latex %O %S"
). Моей первой попыткой было изменить $latex
на , internal mylatex %A
чтобы получить доступ к имени исходного файла и вставить его в $aux_dir
мою $out_dir
собственную mylatex
подпрограмму. Моей второй попыткой было попытаться установить переменные $aux_dir
и $out_dir
на путь, содержащий имя файла, заданное $$Pbase
в пользовательской подпрограмме, которая будет вызвана на before_xlatex
хуке. Для обеих этих попыток latexmk
не улавливает изменения в $aux_dir
и $out_dir
перед тем, как по умолчанию вырвать все вспомогательные и выходные файлы в work
. Документация по , latexmk
похоже, не указывает, как получить доступ в файле конфигурации к аргументам командной строки (в частности, к имени исходного файла), переданным latexmk, каким-либо другим способом. В моей третьей попытке вместо изменения $aux_dir
и $out_dir
я просто попытался изменить соответствующие флаги -aux-directory
и -output-directory
в вызове Perl, system
который я делаю latex
внутри mylatex
подпрограммы с первой попытки, но, опять же, latexmk
игнорирует эти флаги и просто выгружает файлы в work
.
На этом этапе я понял, что изначально запланированная мной структура каталогов для work
не идеальна из-за возможных проблем, которые могут возникнуть, скажем, с bibtex
, но я потратил достаточно времени, пытаясь заставить первоначальный план работать, и мне стало любопытно, возможно ли это или я неправильно понял какой-то фундаментальный принцип проектирования latexmk
.
решение1
На данный момент то, что вы запрашиваете, не поддерживается latexmk. Это можно было бы реализовать; это повлекло бы за собой изменение кода, который latexmk использует перед тем, как начать обрабатывать tex-файл. В настоящее время
Попытки, которые вы сделали, слишком запоздали, чтобы сделать то, что нужно. После инициализации для данного файла .tex каталоги $aux_out
и $out_dir
должны оставаться фиксированными и известными latexmk.