From: Dave K. <dku...@re...> - 2006-03-30 17:10:53
|
On Tue, Mar 28, 2006 at 08:19:52AM +1000, Ben Finney wrote: > Howdy all, > > reStructuredText is wonderful; a simple, unambiguous, unobtrusive > markup that gives a lot of expressive power. > > Conversion to XHTML or XML is simple. Conversion to PDF isn't so great. > > That's because (La)TeX is *not* simple, nor unobtrusive. It refuses to > work as a simple pipeline. It sprays files I don't care about all over > the directory. It requires running multiple times to get a single > result. It fails to deal with the Unicode character set cleanly. And > so on. > > Now, if I want to fix the problems with (La)TeX, I should go to a > group dealing with that topic. They will instruct me on how to fix the > documents and run the programs in different ways. > > But I'm not writing the stuff; I'm just trying to deal with it as an > intermediary document format. I don't care about (La)TeX, except as > part of a pipeline from reST to PDF. And that part of the pipeline is > too awkward; I don't want to increase my knowledge of it. > > What alternatives are there? Can I render from reST to PDF via some > other, more reliable route, avoiding (La)TeX and all its annoyances? > I do not know about other (non-LaTeX) routes, but ... I've written a Python script that processes reST files in a set of directories. It uses pdflatex, which is available on Linux. The script does other things, too, which you are not interested in. But, the part you may be interested in follows. As you can see, it does the clean-up of those work files for you. Of course, what we really need is some kind of rst2pdf. Here are the relavent parts of the script:: import os from docutils.core import publish_file PdfCommandTmpl = 'pdflatex %s.tex' o o o settings_overrides = { 'generator': 1, #'stylesheet_path': stylesheetPath, 'source_url': baseName, } publish_file(source_path='%s' % sourceName, destination_path='%s' % texName, writer_name='latex', settings_overrides=settings_overrides) latex_to_pdf(path, baseName) o o o def latex_to_pdf(directory, baseName): """Convert a LaTeX file (produced by Docutils) to PDF. Note that we need to change current directory to the directory containing the LaTeX file because pdflatex does not provide a command line flag to specify the output directory. """ cur_dir = os.getcwd() os.chdir(directory) name, ext = os.path.splitext(baseName) command = PdfCommandTmpl % (name, ) os.popen(command, 'r').read() os.remove('%s.tex' % (name, )) os.remove('%s.out' % (name, )) os.remove('%s.log' % (name, )) os.remove('%s.aux' % (name, )) os.chdir(cur_dir) Hope this helps. If you want the whole script, let me know and I will send it. It also does things like packaging the source and generated docs into .zip and .tar.gz archives. Dave -- Dave Kuhlman http://www.rexx.com/~dkuhlman |
From: Martin B. <bl...@fu...> - 2006-03-31 03:24:48
|
On 3/30/06, Dave Kuhlman <dku...@re...> wrote: > On Tue, Mar 28, 2006 at 08:19:52AM +1000, Ben Finney wrote: > > Howdy all, > > > > reStructuredText is wonderful; a simple, unambiguous, unobtrusive > > markup that gives a lot of expressive power. > > > > Conversion to XHTML or XML is simple. Conversion to PDF isn't so great. > > > > That's because (La)TeX is *not* simple, nor unobtrusive. It refuses to > > work as a simple pipeline. It sprays files I don't care about all over > > the directory. It requires running multiple times to get a single > > result. It fails to deal with the Unicode character set cleanly. And > > so on. > > > > Now, if I want to fix the problems with (La)TeX, I should go to a > > group dealing with that topic. They will instruct me on how to fix the > > documents and run the programs in different ways. > > > > But I'm not writing the stuff; I'm just trying to deal with it as an > > intermediary document format. I don't care about (La)TeX, except as > > part of a pipeline from reST to PDF. And that part of the pipeline is > > too awkward; I don't want to increase my knowledge of it. > > > > What alternatives are there? Can I render from reST to PDF via some > > other, more reliable route, avoiding (La)TeX and all its annoyances? > > > > I do not know about other (non-LaTeX) routes, but ... > > I've written a Python script that processes reST files in a set of > directories. It uses pdflatex, which is available on Linux. The > script does other things, too, which you are not interested in. > But, the part you may be interested in follows. As you can see, > it does the clean-up of those work files for you. > > Of course, what we really need is some kind of rst2pdf. > > Here are the relavent parts of the script:: > > import os > from docutils.core import publish_file > > PdfCommandTmpl =3D 'pdflatex %s.tex' > > o > o > o > settings_overrides =3D { > 'generator': 1, > #'stylesheet_path': stylesheetPath, > 'source_url': baseName, > } > publish_file(source_path=3D'%s' % sourceName, > destination_path=3D'%s' % texName, > writer_name=3D'latex', > settings_overrides=3Dsettings_overrides) > latex_to_pdf(path, baseName) > o > o > o > > def latex_to_pdf(directory, baseName): > """Convert a LaTeX file (produced by Docutils) to PDF. > > Note that we need to change current directory to the directory > containing the LaTeX file because pdflatex does not provide > a command line flag to specify the output directory. > """ > cur_dir =3D os.getcwd() > os.chdir(directory) > name, ext =3D os.path.splitext(baseName) > command =3D PdfCommandTmpl % (name, ) > os.popen(command, 'r').read() > os.remove('%s.tex' % (name, )) > os.remove('%s.out' % (name, )) > os.remove('%s.log' % (name, )) > os.remove('%s.aux' % (name, )) > os.chdir(cur_dir) BTW, you could do much simpler by using the subprocess.call() with option cwd=3Ddirectory. Also, there are sometimes other files to be cleaned up. Another way to implement this IMO would be to get the list of files before this runs and to remove the new files with the same prefix that appear within the timespan the command is running. (Assuming that no other process runs and creates files at the same time, it should be mostly safe). |