나는 얻기 위해 노력하고 있다엑셀텍스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