2009-04-08 35 views
16

Tôi đang cố gắng sử dụng scons để tạo một tài liệu latex. Đặc biệt, tôi muốn lấy các scons để gọi một chương trình python tạo ra một tệp có chứa một bảng là \ input {} vào tài liệu chính. Tôi đã xem qua tài liệu về scons nhưng không rõ ràng với tôi về những gì tôi cần làm.Làm thế nào để tôi nhận được scons để gọi một kịch bản bên ngoài?

Những gì tôi muốn đạt được về cơ bản là những gì bạn sẽ nhận được với makefile này:

document.pdf: table.tex 
    pdflatex document.tex 

table.tex: 
    python table_generator.py 

Làm thế nào tôi có thể bày tỏ này trong scons?

Trả lời

16

cái gì đó dọc những dòng này nên làm -

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

Nó tuyên bố rằng 'document.tex' được tạo ra bằng cách gọi script Python, và yêu cầu một tài liệu PDF được tạo ra từ generatd này 'document.tex' tập tin.

Lưu ý rằng đây chỉ là tinh thần. Nó có thể yêu cầu một số tinh chỉnh. Đặc biệt, tôi không chắc chắn về loại ngữ nghĩa bạn muốn cho thế hệ 'document.tex' - nó có nên được tạo ra mỗi lần không? Chỉ khi nó không tồn tại? Khi một số tệp khác thay đổi? (bạn sẽ muốn thêm phụ thuộc này làm đối số thứ hai cho Command() trường hợp đó).

Ngoài ra, đầu ra của Lệnh() có thể được sử dụng làm đầu vào thành PDF() nếu muốn. Để rõ ràng, tôi không làm thế.

4

Trong trường hợp đơn giản này, cách đơn giản nhất là chỉ cần sử dụng các mô-đun subprocess

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

Bất kể nơi trong tập tin SConstruct bạn những dòng này được đặt, họ sẽ xảy ra trước khi bất kỳ biên dịch và liên kết được thực hiện bởi SCons.

Nhược điểm là các lệnh này sẽ được thực thi mỗi khi bạn chạy SCons, thay vì chỉ khi các tệp đã thay đổi, đó là những gì sẽ xảy ra trong ví dụ Makefile của bạn. Vì vậy, nếu các lệnh đó mất nhiều thời gian để chạy, đây sẽ không phải là một giải pháp tốt.

Nếu bạn thực sự chỉ cần chạy các lệnh này khi các tệp đã thay đổi, hãy xem phần hướng dẫn sử dụng SCons Writing Your Own Builders.

+3

Làm thế nào điều này tích hợp với máy quét latex? Tôi vẫn có thể có PDF (target = 'document.pdf', source = 'document.tex') trong SConstruct? – saffsd

Các vấn đề liên quan