See: https://groups.google.com/forum/#!msg/sphinx-users/0UW05Inwfac/X8bCZmlLBwAJ This is what I did a few years back. The builders are inconstant when they create events and I haven't been able to figure out how to make it work either.
I have an extension that followed the todo example, which works great when > the output is latex, but for HTML it doesn't work right. The reason for > this seems to be that we are using Sphinx for a modular documentation > project so not all of the files will be included in the output. When using > the latex builder, we get a single doctree when the 'doctree-resolved' > event is called. When using the HTML builder, it gets called once for > every input file. Since I want to only include found items that are in the > final document, I found I can't trust the information I have when > 'doctree-resolved' is emitted since the final document structure isn't > complete. The only time I have found that I can trust that the document > has been assembled is when the 'env-updated' event is emitted, and then I > can browse the document tree like: > > def env_updated(app, env): > relations = env.collect_relations() > included_docs = [] > updated_docs = [] > # Each relation is a list in the following order [parent, prev_doc, > next_doc] > cur_doc = env.config.master_doc > while cur_doc: > included_docs.append(cur_doc) > doctree = env.get_doctree(cur_doc) > cur_doc = relations[cur_doc][2] > > This gives me a nice list of the documents in the order that they will be > in. I can even find all of the elements I want using: > > for docname in included_docs: > doctree = env.get_doctree(docname) > for table in doctree.traverse(my_node_type): > updated_docs.append(docname) > # Add rows to the table here... > return updated_docs > > > At the end of the handling the 'env-updated' event, I return a list of > documents I've modified (in my case, I appended rows to an existing table), > then I return the list of docnames I've modified. However, none of the > rows I've added to the table will show up in the final output. The code to > modify the table is good, it worked just fine in the 'doctree-resolved' > event handler, so I don't think that is the issue. Is there something I > need to do other the returning the list of docnames from the 'env-updated' > event handler to make these changes stick? > On Monday, February 4, 2019 at 3:26:25 AM UTC-8, balv...@boxfish.studio wrote: > > Hi Michael, thank you very much for your reply, > > I am already using wkhtmltopdf to build PDF from HTMLs. Also, I already > tried the singlehtml and indeed works but the problem is that it increases > so much the build time that it makes kind of impossible to work locally to > test. Using singlehtml to build the PDFs means building 1 time for the > documentation and n-times for each desired PDF, which can lead to building > time of hours. That is why I would like to avoid rebuilding the > documentation, simply converting the current build to PDF reduces so much > the time, but as mentioned, getting the *full* (infinite depth) tree from > the built html seems tricky. > > On Saturday, February 2, 2019 at 1:02:54 PM UTC+1, Michael Gielda wrote: >> >> Have you looked at WeasyPrint on a single html build? Don't know how well >> it works for your use case but that's what I would try first. It's in >> Python (yay), and a direct HTML to PDF converter, implementing the CSS Page >> spec (for stuff like headers and footers). >> >> Best regards >> Michael >> > -- You received this message because you are subscribed to the Google Groups "sphinx-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to sphinx-users+unsubscr...@googlegroups.com. To post to this group, send email to sphinx-users@googlegroups.com. Visit this group at https://groups.google.com/group/sphinx-users. For more options, visit https://groups.google.com/d/optout.