estoy trabajando para conseguirexceltexy latexmk
comunicarse agregando dependencias personalizadas a .latexmkrc
.
Hasta donde tengo entendido, exceltex
funciona 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:inccell
excltx
Perl
Spreadsheet::ParseExcel
.xls
latexmk
exceltex
latexmk
excltex
yxls
: sixls
se cambia el archivo,exceltex
se invoca.excltex
ytex
: si eltex
archivo con\inccell
/\inctab
llamadas cambia,exceltex
se invoca.
Según tengo entendido, latexmk
no 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 latexmk
generar 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 latexmk
y descomentar las dependencias pacificadas), ¿cómo puedo latexmk
ejecutar exceltex
cuando xls
se 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 tex
documento no se modifica pero el xls
archivo se cambia, latexmk
se niega a notar un cambio solo en el xls
archivo.
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 xls
archivo cambia. Aquí hay un código probado adecuado para un latexmkrc
archivo:
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 tex
archivo principal utiliza el paquete exceltex
para utilizar el contenido de las celdas de una xls
hoja de cálculo. Para ello, escribe una especificación de las celdas en un archivo con extensión excltx
. El script exceltex
lee 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 exceltex
paquete, con su script, es parte de la versión actual de TeXLive).
Además de ejecutar el exceltex
script, la subrutina definida anteriormente también lee el excltx
archivo para encontrar los nombres de los archivos de hoja de cálculo utilizados. Luego utiliza una subrutina interna para latexmk
agregar 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, latexmk
sabrá que debe volver a ejecutarlo exceltex
y luego recompilar el tex
archivo principal si es necesario.