如何创建“aux”目录来存储pdflatex的辅助文件?

如何创建“aux”目录来存储pdflatex的辅助文件?

目前我使用 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 上也能实现类似的事情。(但不要问我怎么做。)

相关内容