On 2013-02-17, Matthew Newville wrote:

> First I should say that I'm really impressed with Sphinx, and thank you
> for providing and supporting it: Wonderful!

> OK, I'd like to see better capabilities for figures in documents, including
>   * auto-numbering and referencing.
>   * multiple parts to a figure (e.g, side-by-side, or in a grid).
>   * good results in both html and latex/pdf.

> So far, I haven't quite found a solution with all these features, and was 
> hoping either for some pointers on how to do this better, or pointers on 
> how to make it so that sphinx can make this easier.

These problems are known issues in the Docutils_ which Sphinx is based on.
See 
http://docutils.sourceforge.net/docs/dev/todo.html#object-numbering-and-object-references
http://permalink.gmane.org/gmane.text.docutils.devel/5966
http://docutils.sourceforge.net/docs/dev/todo.html#configurable-placement-of-figure-and-table-floats

I would prefer a solution on the "Docutils level" very much over a
Sphinx-only extension to reStructuredtext.

A test input file
http://docutils.sourceforge.net/sandbox/latex-variants/tests/figure-reference.txt
With CSS2, figures could be auto-numbered but I don't know of a way to
use this auto-number in a reference. Maybe CSS3 offers support for this?


Workarounds:

> But this doesn't support auto-numbering or references.

> One could put figures in a table::

>     +------------------------+------------------------+
>     |.. _figa:               |.. _figb:               |
>     |                        |                        |
>     |.. figure:: left.png    |.. figure:: right.png   |
>     |   :width: 95 %         |   :width: 95 %         |
>     |   :align: center       |   :align: center       |
>     |                        |                        |
>     |   Caption A here       |   Caption B here       |
>     +------------------------+------------------------+

>     See :num:`Figure #figa` for details.

> But this has two problems: a) it leaves each figure as a separate entity, 
> with it's own label and caption, 

You can use the "table directive" that provides for a caption.
Drawback: the caption gets the "Table" prefix in LaTeX.

> b) it doesn't render correctly in 
> latex / pdf, as it puts each figure environment as a portion of a table 
> (tabulary) environment, which causes errors because the figure environment 
> is not in "Outer par mode". 

Try with the "image" directive instead of "figure".


.. table::
   :class: borderless

    +------------------------+------------------------+
    |.. _figa:               |.. _figb:               |
    |                        |                        |
    |.. image:: left.png     |.. image:: right.png    |
    |   :width: 95 %         |   :width: 95 %         |
    |   :align: center       |   :align: center       |
    |                        |                        |
    |Caption A here          |Caption B here          |
    +------------------------+------------------------+


> I tried many combinations of figure and image directives, but could not 
> find a workable solution.  As it is, I'm left with document tree with 
> dozens of figures that have to be numbered by hand.    

> Is there a way to accomplish all of these features (auto-numbering and 
> referencing of figures, multiple parts to figures, rendering in both html 
> and latex/pdf)?

> If not, is there any chance of adding better support for figures, say with 
> a grid of sub-figures?

While the problem is known, ressources for discussing the right approach
(without backward-compatibility breaks) and developing a solution are
severely limited. Help is welcome.

Günter


-- 
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sphinx-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to