私は取得するために取り組んでいますエクセルテックスlatexmk
にカスタム依存関係を追加して通信します.latexmkrc
。
私の理解する限りでは、コンパイル時に各/コマンドexceltex
のエントリをファイルに書き込み、スクリプトを使用してファイルから情報を抽出することで機能します。手動ルーチン: 、、、、そしてそれは機能します。したがって、次の依存関係が必要だと思います。\inctab
inccell
excltx
Perl
Spreadsheet::ParseExcel
.xls
latexmk
exceltex
latexmk
excltex
そしてxls
:xls
ファイルが変更された場合は、exceltex
が呼び出されます。excltex
およびtex
: /呼び出しtex
を含むファイルが変更されると、が呼び出されます。\inccell
\inctab
exceltex
私が理解しているように、latexmk
1 つの依存関係で複数のファイルを処理できないため、最初に #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
どうすればよいでしょうか? 私は次のように試しました。latexmk
exceltex
xls
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
ファイルを再コンパイルします。