LatexMK における ExcelTex の依存関係

LatexMK における ExcelTex の依存関係

私は取得するために取り組んでいますエクセルテックスlatexmkにカスタム依存関係を追加して通信します.latexmkrc

私の理解する限りでは、コンパイル時に各/コマンドexceltexのエントリをファイルに書き込み、スクリプトを使用してファイルから情報を抽出することで機能します。手動ルーチン: 、、、、そしてそれは機能します。したがって、次の依存関係が必要だと思います。\inctabinccellexcltxPerlSpreadsheet::ParseExcel.xlslatexmkexceltexlatexmk

  1. excltexそしてxls:xlsファイルが変更された場合は、exceltexが呼び出されます。
  2. excltexおよびtex: /呼び出しtexを含むファイルが変更されると、が呼び出されます。\inccell\inctabexceltex

私が理解しているように、latexmk1 つの依存関係で複数のファイルを処理できないため、最初に #2 を機能させることに重点を置きました。私は次のことを試しました:

add_cus_dep('excltx', 'tex', 0, 'excel2tex');
    sub excel2tex {
        system("exceltex \"$_[0].tex\"") ;
    }

これにより、latexmk次の出力が生成されます。

For rule 'cusdep excltx tex test', running '&do_cusdep(  )' ...
Latexmk: Possible misconfiguration or bug:
  In trying to apply custom-dependency rule
  to make 'test.tex' from 'test.excltx'
  the function name is blank.

私の意図は、依存関係が をトリガーすることですexceltex file.tex。なぜこれが起こらないのでしょうか? 依存関係を変更して が実行されるようにするにはどうすればよいですかexceltex?

フォローアップ: 上記の依存関係が機能すると仮定すると ( 内の他のすべての依存関係をコメントアウトし.latexmkrc、実行して、緩和された依存関係のコメントを解除すると機能します)、ファイルが変更されたときに を実行するにはlatexmkどうすればよいでしょうか? 私は次のように試しました。latexmkexceltexxls

add_cus_dep('tex', 'xls', 0, 'excel2tex');

そして

add_cus_dep('excltx', 'xls', 0, 'excel2tex'); 

(念のため両方)。完全な再コンパイルを強制すると動作します。通常のコンパイルでは、ドキュメントの内容はtex変更されずにxlsファイルが変更されるため、ファイルlatexmkの変更だけは認識されませんxls

答え1

「設定ミスやバグの可能性」に関する問題は今のところ再現できないため、現時点では質問のその部分は無視できます。質問の残りの部分、つまりファイルがxls変更された場合に実行されるカスタム依存関係を作成する方法について回答します。ファイルに適したテスト済みのコードは次のとおりですlatexmkrc

add_cus_dep('excltx', 'tex', 0, 'excel2tex');
sub excel2tex {
    # First find dependency/ies on .xls files, by parsing the .excltx file,
    my $Hsource = new FileHandle;
    my %xls = ();
    my $source = "$_[0].excltx";
    if (! open $Hsource, "<$source") {
        warn "excel2tex subroutine: Could not read '$source'\n";
        return 1;
    }
    while ( <$Hsource> ) {
        if ( /^\s*;/ ) { next; }
        if ( /^\s*[ct]:[^:]*\:([^!]*)!/ ) { $xls{$1} = 1; }
    }
    close $Hsource;
    foreach (keys %xls) {
        rdb_ensure_file( $rule, $_ );
    }
    return system("exceltex \"$_[0]\"") ;
}

機能は次のとおりです。メインtexファイルは、パッケージを使用しexceltexてスプレッドシートのセルの内容を使用しますxls。これは、セルの仕様を拡張子 のファイルに書き込むことによって行われますexcltx。スクリプトはexceltexこれを読み取り、スプレッドシートからデータを抽出し、メイン ドキュメントの次のコンパイル時に読み取られるファイルに書き込みます。(exceltexパッケージとそのスクリプトは、TeXLive の現在のバージョンの一部です。)

スクリプトを実行することに加えてexceltex、上で定義されたサブルーチンは、excltxファイルも読み取り、使用されているスプレッドシート ファイルの名前を検索します。次に、の内部サブルーチンを使用して、latexmkこれらのファイルをカスタム依存関係のソース ファイル リストに追加します。したがって、他の変更がなくてもスプレッドシート ファイル (または複数のファイル) が変更されると、 はlatexmk再実行を認識しexceltex、必要に応じてメインtexファイルを再コンパイルします。

関連情報