2009-04-08 17 views
16

Estoy tratando de usar scons para construir un documento de látex. En particular, quiero que scons invoque un programa python que genere un archivo que contenga una tabla que sea \ input {} en el documento principal. Revisé la documentación de scons, pero no tengo claro inmediatamente qué debo hacer.¿Cómo consigo que scon invoque un script externo?

Lo que quiero lograr es esencialmente lo que se obtendría con este makefile:

document.pdf: table.tex 
    pdflatex document.tex 

table.tex: 
    python table_generator.py 

¿Cómo puedo expresar esto en scons?

Respuesta

16

Algo a lo largo de estas líneas debe hacer -

env.Command ('document.tex', '', 'python table_generator.py') 
env.PDF ('document.pdf', 'document.tex') 

Se declara que 'document.tex' se genera mediante una llamada al script en Python, y solicita un documento PDF para ser creado a partir de este generatd 'document.tex' archivo.

Tenga en cuenta que esto es sólo en espíritu. Puede requerir algunos ajustes. En particular, no estoy seguro de qué tipo de semántica querría para la generación de 'document.tex', ¿debería generarse siempre? ¿Solo cuando no existe? Cuando algún otro archivo cambia? (desearía agregar esta dependencia como el segundo argumento para Command() ese caso).

Además, la salida de Command() se puede utilizar como entrada en PDF() si se desea. Para mayor claridad, no hice eso.

4

En este caso simple, la forma más fácil es usar sólo el módulo de subproceso

from subprocess import call 
call("python table_generator.py") 
call("pdflatex document.tex") 

Independientemente de donde en su archivo SConstruct se colocan estas líneas, van a suceder antes de cualquiera de la compilación y del enlace realizado por SCons.

El inconveniente es que estos comandos se ejecutarán cada vez que ejecute SCons, en lugar de solo cuando los archivos hayan cambiado, que es lo que sucedería en su ejemplo Makefile. Entonces, si esos comandos toman mucho tiempo para ejecutarse, esta no sería una buena solución.

Si realmente necesita ejecutar estos comandos solo cuando los archivos han cambiado, consulte la sección del manual de SCons Writing Your Own Builders.

+3

¿Cómo se integra esto con el escáner de látex? ¿Todavía puedo tener PDF (target = 'document.pdf', source = 'document.tex') en SConstruct? – saffsd

Cuestiones relacionadas