latexmk의 exceltex 종속성

latexmk의 exceltex 종속성

나는 얻기 위해 노력하고 있다엑셀텍스latexmk에 사용자 정의 종속성을 추가하여 통신 합니다 .latexmkrc.

내가 이해하는 한, 컴파일 시 각 / 명령 exceltex에 대한 항목을 파일에 작성 하고 스크립트를 사용하여 파일 에서 정보를 추출하는 방식으로 작동합니다 . 수동 루틴: , , , 그리고 작동합니다. 따라서 저는 다음과 같은 종속 관계가 필요하다고 생각합니다.\inctabinccellexcltxPerlSpreadsheet::ParseExcel.xlslatexmkexceltexlatexmk

  1. excltexxls: xls파일이 변경 되면 exceltex호출됩니다.
  2. excltextex: / 호출이 tex있는 파일이 변경 되면 호출됩니다.\inccell\inctabexceltex

내가 이해한 대로 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실행 하고 주석 처리를 취소한 후) 파일이 변경될 때 어떻게 실행할 수 있습니까? 나는 시도했다latexmklatexmkexceltexxls

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다시 실행하고 다시 컴파일해야 한다는 것을 알게 됩니다 .exceltextex

관련 정보