зависимости exceltex в latexmk

зависимости exceltex в latexmk

Я работаю над тем, чтобы получитьexceltexи latexmkвзаимодействие путем добавления пользовательских зависимостей в .latexmkrc.

Насколько я понимаю, exceltexработает путем записи записи для каждой команды \inctab/ в файл при компиляции и использования скрипта для извлечения информации из файла. Ручная процедура: , , , и это работает. Поэтому я считаю, что мне нужны следующие отношения зависимости:inccellexcltxPerlSpreadsheet::ParseExcel.xlslatexmkexceltexlatexmk

  1. excltexи xls: если xlsфайл изменен, exceltexвызывается.
  2. 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файл, если это необходимо.

Связанный контент