dependencias de exceltex en latexmk

dependencias de exceltex en latexmk

estoy trabajando para conseguirexceltexy latexmkcomunicarse agregando dependencias personalizadas a .latexmkrc.

Hasta donde tengo entendido, exceltexfunciona escribiendo una entrada para cada comando \inctab/ en un archivo durante la compilación y usando el script para extraer información del archivo. La rutina manual: , , , y funciona. Entonces creo que necesito las siguientes relaciones de dependencia:inccellexcltxPerlSpreadsheet::ParseExcel.xlslatexmkexceltexlatexmk

  1. excltexy xls: si xlsse cambia el archivo, exceltexse invoca.
  2. excltexy tex: si el texarchivo con \inccell/ \inctabllamadas cambia, exceltexse invoca.

Según tengo entendido, latexmkno maneja varios archivos en una dependencia, así que primero me concentré en hacer funcionar el n.º 2. Yo he tratado:

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

lo que hace latexmkgenerar el siguiente resultado:

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.

Mi intención es que se dispare la dependencia exceltex file.tex. ¿Por qué no sucede esto? ¿Cómo puedo cambiar mi dependencia para que se ejecute exceltex?

Seguimiento: suponiendo que la dependencia anterior funcione (lo que ocurre después de comentar todas las demás dependencias en .latexmkrc, ejecutar latexmky descomentar las dependencias pacificadas), ¿cómo puedo latexmkejecutar exceltexcuando xlsse cambia el archivo? lo he probado con

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

y

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

(y ambos, por si acaso). Funciona si fuerzo una recompilación completa. Con una compilación normal, donde el contenido del texdocumento no se modifica pero el xlsarchivo se cambia, latexmkse niega a notar un cambio solo en el xlsarchivo.

Respuesta1

Dado que la dificultad sobre "Posible error o configuración incorrecta" no se puede reproducir ahora, podemos ignorar esa parte de la pregunta por el momento. Responderé el resto de la pregunta, que es cómo crear una dependencia personalizada que se ejecutará si el xlsarchivo cambia. Aquí hay un código probado adecuado para un latexmkrcarchivo:

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

El funcionamiento es el siguiente: El texarchivo principal utiliza el paquete exceltexpara utilizar el contenido de las celdas de una xlshoja de cálculo. Para ello, escribe una especificación de las celdas en un archivo con extensión excltx. El script exceltexlee esto, extrae los datos de la hoja de cálculo y los escribe en archivos que se leen durante la siguiente compilación del documento principal. (El exceltexpaquete, con su script, es parte de la versión actual de TeXLive).

Además de ejecutar el exceltexscript, la subrutina definida anteriormente también lee el excltxarchivo para encontrar los nombres de los archivos de hoja de cálculo utilizados. Luego utiliza una subrutina interna para latexmkagregar estos archivos a la lista de archivos fuente de la dependencia personalizada. Por lo tanto, si el archivo (o archivos) de la hoja de cálculo cambia incluso sin ningún otro cambio, latexmksabrá que debe volver a ejecutarlo exceltexy luego recompilar el texarchivo principal si es necesario.

información relacionada