Latexmk 中的 exceltex 依賴項

Latexmk 中的 exceltex 依賴項

我正在努力獲得艾克斯泰克斯latexmk透過向.latexmkrc.

據我了解,工作原理是在編譯時將每個/命令exceltex的條目寫入文件,然後使用腳本從文件中提取資訊。手動例程:、、、 有效。所以我相信我需要以下依賴關係:\inctabinccellexcltxPerlSpreadsheet::ParseExcel.xlslatexmkexceltexlatexmk

  1. excltexxls:如果xls檔案發生更改,exceltex則調用。
  2. excltextex:如果tex帶有\inccell/\inctab調用的檔案發生更改,exceltex則調用。

據我所知,latexmk它不能處理一個依賴項中的多個文件,所以我首先專注於讓#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?我嘗試過exceltexxls

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

相關內容