LaTeXmk 和 MusiXTeX。或者:向 LaTeXmk 工作流程添加命令

LaTeXmk 和 MusiXTeX。或者:向 LaTeXmk 工作流程添加命令

我正在使用 LaTeX 编写歌曲集MusiXTeX为了使其正常工作,我需要按如下方式编译文档:

pdflatex songbook
musixflx songbook
pdflatex songbook

有没有办法拉特克斯添加musixflx到其工作流程中?如果是这样,那么使用VimTeX,它使用 LaTeXmk。

LaTeXmk 有类似的选项-bibtex,但它没有专门用于 MusiXTeX 的选项,而且我在手册中没有看到是否可以向工作流程添加任意命令。

答案1

这是该文件的适当插入内容latexmkrc

$pdflatex = 'internal musixlatex %R %O %S';
push @generated_exts,"mx2";
push @generated_exts,"mx1";

sub musixlatex {
   my $root = shift;
   # Define root filename for the mx1 and mx2 files
   # Note that $aux_dir1 includes directory separator
   #      and it equals $out_dir1 if only the out_dir is set.
   my $mx = "$aux_dir1$root";
   my @args = @_;
   if ( $pass{$rule} <= 1 ) { 
      print "======= FIRST PASS: Deleting '$mx.mx2' =======\n";
      unlink "$mx.mx2"; 
      print "====   Generating '$mx.mx1' then '$mx.mx2' ===\n";
      my $ret = system( "pdflatex @args" );
      if ($ret) { return $ret; }
      $ret = system( "musixflx $mx" );
      if ($ret) { return $ret; }
   }
   return system( "pdflatex @args" );
}

最主要的是第一次.mx2运行前需要删除文件,然后运行生成新文件,再运行一次。 pdflatexmusixflxmx2pdflatex

但有时需要两次以上的传递pdflatex来解决交叉引用等问题。因此,我使用了一个内部变量的技巧,以便只在第一遍传递时latexmk使用;这样可以将运行的次数保持在最低限度。musixflxpdflatex

相关内容