我正在努力獲得艾克斯泰克斯並latexmk
透過向.latexmkrc
.
據我了解,工作原理是在編譯時將每個/命令exceltex
的條目寫入文件,然後使用腳本從文件中提取資訊。手動例程:、、、 有效。所以我相信我需要以下依賴關係:\inctab
inccell
excltx
Perl
Spreadsheet::ParseExcel
.xls
latexmk
exceltex
latexmk
excltex
和xls
:如果xls
檔案發生更改,exceltex
則調用。excltex
和tex
:如果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
?我嘗試過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