Pergunta

Eu estou tentando usar scons para construir um documento latex. Em particular, eu quero começar scons para invocar um programa python que gera um arquivo contendo uma tabela que é \ input {} no documento principal. Eu olhei sobre a documentação scons mas não é imediatamente claro para mim o que eu preciso fazer.

O que quero alcançar é essencialmente o que você deseja obter com este makefile:

document.pdf:  table.tex
    pdflatex document.tex

table.tex:
    python table_generator.py

Como posso expressar isso em scons?

Foi útil?

Solução

Algo ao longo destas linhas deve fazer -

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

Ele declara que 'document.tex' é gerado chamando o script Python, e solicita um documento PDF a ser criado a partir deste arquivo 'document.tex' generatd.

Note que este é apenas em espírito. Ela pode exigir alguns ajustes. Em particular, eu não estou certo que tipo de semântica que se quer para a geração de 'document.tex' - ela deve ser gerado de cada vez? Só quando ela não existe? Quando algumas outras mudanças de arquivo? (Você gostaria de adicionar essa dependência como o segundo argumento para Command () nesse caso).

Além disso, a saída de comando () pode ser utilizado como entrada para PDF () se desejado. Para maior clareza, eu não fiz isso.

Outras dicas

Neste caso simples, a maneira mais fácil é usar apenas o módulo subprocesso

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

Independentemente de onde no seu arquivo SConstruct estas linhas são colocados, eles vão acontecer antes de qualquer compilação e vinculação realizada por SCons.

A desvantagem é que esses comandos será executado toda vez que você executar SCons, ao invés de somente quando os arquivos foram alterados, que é o que aconteceria no seu exemplo Makefile. Então, se os comandos levar um longo tempo para ser executado, isso não seria uma boa solução.

Se você realmente precisa apenas executar esses comandos quando os arquivos foram alterados, olhar para a seção do manual SCons escrevendo seus próprios Builders .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top