dependências do exceltex em latexmk

dependências do exceltex em latexmk

Estou trabalhando para conseguirexceltexe latexmkcomunicação adicionando dependências personalizadas ao .latexmkrc.

Pelo que entendi, exceltexfunciona escrevendo uma entrada para cada comando \inctab/ em um arquivo durante a compilação e usando o script para extrair informações do arquivo. A rotina manual: , , , e funciona. Então acredito que preciso das seguintes relações de dependência:inccellexcltxPerlSpreadsheet::ParseExcel.xlslatexmkexceltexlatexmk

  1. excltexe xls: se o xlsarquivo for alterado, exceltexé invocado.
  2. excltexe tex: se o texarquivo com \inccell/ \inctabchamadas for alterado, exceltexserá invocado.

Pelo que entendi, latexmknão lida com vários arquivos em uma dependência, então primeiro me concentrei em fazer o número 2 funcionar. Eu tentei:

add_cus_dep('excltx', 'tex', 0, 'excel2tex');
    sub excel2tex {
        system("exceltex \"$_[0].tex\"") ;
    }

o que faz latexmkgerar a seguinte saída:

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.

Minha intenção é que a dependência seja acionada exceltex file.tex. Por que isso não acontece? Como posso alterar minha dependência para que ela seja executada exceltex?

Acompanhamento: Supondo que a dependência acima funcione (o que acontece depois de comentar todas as outras dependências .latexmkrc, executar latexmke descomentar as dependências pacificadas), como posso latexmkexecutar exceltexquando o xlsarquivo é alterado? Eu tentei com

add_cus_dep('tex', 'xls', 0, 'excel2tex');

e

add_cus_dep('excltx', 'xls', 0, 'excel2tex'); 

(e ambos, para garantir). Funciona se eu forçar uma recompilação completa. Com uma compilação normal, onde o conteúdo do texdocumento permanece intacto, mas o xlsarquivo é alterado, latexmkrecusa-se a notar uma alteração apenas no xlsarquivo.

Responder1

Como a dificuldade sobre uma "Possível configuração incorreta ou bug" não pode ser reproduzida agora, podemos ignorar essa parte da questão por enquanto. Responderei o restante da pergunta, que é como criar uma dependência personalizada que será executada se o xlsarquivo for alterado. Aqui está um código testado adequado para um latexmkrcarquivo:

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]\"") ;
}

O funcionamento é o seguinte: O texarquivo principal utiliza o pacote exceltexpara utilizar o conteúdo das células de uma xlsplanilha. Isso é feito escrevendo uma especificação das células em um arquivo com extensão excltx. O script exceltexlê isso, extrai os dados da(s) planilha(s) e os grava em arquivos que serão lidos durante a próxima compilação do documento principal. (O exceltexpacote, com seu script, faz parte da versão atual do TeXLive.)

Além de executar o exceltexscript, a sub-rotina definida acima também lê o excltxarquivo para encontrar os nomes dos arquivos da planilha utilizados. Em seguida, ele usa uma sub-rotina interna latexmkpara adicionar esses arquivos à lista de arquivos de origem da dependência personalizada. Assim se o arquivo (ou arquivos) da planilha for alterado mesmo sem nenhuma outra alteração, latexmksaberá executar novamente exceltexe depois recompilar o arquivo principal texse necessário.

informação relacionada