目前我使用 TexStudio,其命令pdflatex -synctex=1 -interaction=nonstopmode -output-directory=./aux/ "paper".tex
可以很好地编译并将所有辅助文件放在 aux 目录中。
但是,每次我都需要在放置 .tex 文件的目录中手动创建一个 aux 目录才能使其工作,否则 TexStudio 将返回错误:
Process started: pdflatex -synctex=1 -interaction=nonstopmode -output-directory=./aux/ "paper".tex
Process exited with error(s)
我的问题是,如何才能自动创建我的 aux 目录,最好通过我的 pdflatex 命令?另外,作为第二个问题,我可以将我创建的 pdf 从这个 aux 目录自动复制到当前目录(aux 目录的父目录)吗?
答案1
我.latexmkrc
在项目文件夹中使用它,然后从命令行进行编译。这是我的 latexmkrc 文件的样子:
如果不存在,此解决方案将创建临时文件夹和构建文件夹,您可以根据每个项目获取这些文件夹。(通过使用项目文件夹中的 .latexmkrc 文件)
ensure_path('TEXINPUTS', './some/paths//'); # "//" searches recursively
$clean_ext = 'aux, fdb_latexmk, fls, out, xdv'; # files to clean
#$pdflatex = ""; # add your chain here.
$pdf_mode = [..]; # see latexmk documentation for your os
$pdf_update_method = [..]; # see latexmk documentation for your viewer.
$pdf_previewer = 'start "some/pdf/viewer" %O %S'; # If you use the -pvc switch
sub latex_fix_aux {
my @move_exts = ('dvi', 'fls', 'pdf', 'ps', 'synctex.gz' );
my $auxD = '';
my $outD = '';
foreach (@_) {
if ( /^-{1,2}aux-directory=(.*)$/ ) {
$auxD = $1;
}
elsif ( /^-{1,2}output-directory=(.*)$/ ) {
$outD = $1;
}
}
if ( $outD eq '' ) { $outD = '.'; }
if ( $auxD eq '' ) { $auxD = $outD; }
my @args_act = ();
my $set_outD = 0;
foreach (@_) {
if ( /^-{1,2}(aux|output)-directory=.*$/ ) {
if ( ! $set_outD ) {
push @args_act, "-output-directory=$auxD";
$set_outD = 1;
}
}
else {
push @args_act, $_;
}
}
my $outD1 = $outD;
my $auxD1 = $auxD;
foreach ( $auxD1, $outD1 ) {
if ( ($_ ne '') && ! m([\\/\:]$) ) {
$_ .= '/';
}
while ( s[^\.\/][] ) {}
}
print "Running: '@args_act'\n";
my $ret = system @args_act;
if ($auxD ne $outD) {
print "Move @move_exts files from '$auxD' to '$outD'\n";
foreach my $ext (@move_exts) {
copy "$auxD1$root_filename.$ext", "$outD1$root_filename.$ext";
unlink "$auxD1$root_filename.$ext";
}
}
return $ret;
}
$out_dir = '.build/'; # pdf and fls etc. goes here.
$aux_dir = '.temp/'; # other aux files goes here
然后我通常像这样以实时模式运行 latexmk:
latexmk -pvc -jobname=projectName
这将以实时模式启动 latexmk(保存时连续编译)并且文件将被命名为 projectName.pdf 等。
答案2
假设您处于 *nix 环境中......
如果你不想使用类似的东西latexmk
,你可以创建一个简单的shell脚本,例如,~/bin/mypdflatex.sh
它可以简单到:
#!/bin/bash
filename="$1"
[[ -d ./aux ]] || mkdir ./aux
pdflatex -synctex=1 -interaction=nonstopmode -output-directory=./aux/ "$filename"
使其可执行:
chmod a+x ~/bin/mypdflatex.sh
然后在 TeXStudio 的选项 > 配置 TeXStudio > 命令 > pdfLaTeX 下输入:
/path/to/bin/mypdflatex.sh %.tex
很有可能在 Windows 上也能实现类似的事情。(但不要问我怎么做。)