Exceltex-Abhängigkeiten in Latexmk

Exceltex-Abhängigkeiten in Latexmk

Ich arbeite daran,exceltexund latexmkKommunikation durch Hinzufügen benutzerdefinierter Abhängigkeiten zu .latexmkrc.

Soweit ich es verstehe, exceltexfunktioniert es, indem beim Kompilieren ein Eintrag für jeden \inctab/ inccell-Befehl in eine excltxDatei geschrieben wird und das PerlSkript verwendet wird Spreadsheet::ParseExcel, um Informationen aus der .xlsDatei zu extrahieren. Die manuelle Routine: latexmk, exceltex, latexmk, und es funktioniert. Ich glaube also, dass ich die folgenden Abhängigkeitsbeziehungen brauche:

  1. excltexund : wird aufgerufen , xlswenn die xlsDatei geändert wird .exceltex
  2. excltexund tex: wenn sich die texDatei mit \inccell/ \inctabcalls ändert, exceltexwird aufgerufen.

So wie ich es verstanden habe, latexmkkönnen mehrere Dateien in einer Abhängigkeit nicht verarbeitet werden, also habe ich mich zunächst darauf konzentriert, Nr. 2 zum Laufen zu bringen. Ich habe Folgendes versucht:

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

wodurch latexmkdie folgende Ausgabe generiert wird:

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.

Meine Absicht ist, dass die Abhängigkeit ausgelöst wird exceltex file.tex. Warum passiert das nicht? Wie kann ich meine Abhängigkeit so ändern, dass sie ausgeführt wird exceltex?

Folgefrage: Angenommen, die obige Abhängigkeit funktioniert (was sie tut, nachdem alle anderen Abhängigkeiten in auskommentiert wurden .latexmkrc, die befriedeten Abhängigkeiten ausgeführt latexmkund die Auskommentierung aufgehoben wurden), wie kann ich latexmksie ausführen lassen exceltex, wenn die xlsDatei geändert wird? Ich habe es mit versucht

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

Und

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

(und beides, um sicherzugehen). Es funktioniert, wenn ich eine vollständige Neukompilierung erzwinge. Bei einer normalen Kompilierung, bei der der Inhalt des texDokuments unberührt bleibt, aber die xlsDatei geändert wird, latexmkwird eine Änderung nur in der Datei nicht bemerkt xls.

Antwort1

Da das Problem mit einer „möglichen Fehlkonfiguration oder einem Fehler“ derzeit nicht reproduziert werden kann, können wir diesen Teil der Frage vorerst ignorieren. Ich werde den Rest der Frage beantworten, nämlich wie man eine benutzerdefinierte Abhängigkeit erstellt, die ausgeführt wird, wenn sich die xlsDatei ändert. Hier ist ein geeigneter getesteter Code für eine latexmkrcDatei:

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

Die Funktionsweise ist wie folgt: Die Hauptdatei texverwendet das Paket, exceltexum den Inhalt von Zellen in einer xlsTabellenkalkulation zu verwenden. Dies geschieht, indem eine Spezifikation der Zellen in eine Datei mit der Erweiterung geschrieben wird excltx. Das Skript exceltexliest diese, extrahiert die Daten aus der/den Tabellenkalkulation(en) und schreibt sie in Dateien, die bei der nächsten Kompilierung des Hauptdokuments gelesen werden. (Das exceltexPaket mit seinem Skript ist Teil der aktuellen Version von TeXLive.)

Zusätzlich zur Ausführung des exceltexSkripts liest die oben definierte Subroutine auch die excltxDatei, um die Namen der verwendeten Tabellenkalkulationsdateien zu finden. Anschließend verwendet sie eine interne Subroutine, um latexmkdiese Dateien zur Quelldateiliste der benutzerdefinierten Abhängigkeit hinzuzufügen. Wenn sich also die Tabellenkalkulationsdatei (oder -dateien) ändert, auch wenn keine anderen Änderungen vorgenommen wurden, latexmkweiß , dass exceltexdie Hauptdatei erneut ausgeführt und dann texbei Bedarf neu kompiliert werden muss.

verwandte Informationen