#565: In the LaTeX builder, not only literal blocks require different table handling, but also quite a few other list-like block elements.

This commit is contained in:
Georg Brandl 2011-01-03 20:48:11 +01:00
parent a4036ae6ad
commit 6964bdffb9
3 changed files with 35 additions and 11 deletions

View File

@ -1,6 +1,9 @@
Release 1.0.6 (in development)
==============================
* #565: In the LaTeX builder, not only literal blocks require different
table handling, but also quite a few other list-like block elements.
* #515: Fix tracebacks in the viewcode extension for Python objects
that do not have a valid signature.

View File

@ -124,9 +124,10 @@ following directive exists:
.. warning::
Tables that contain literal blocks cannot be set with ``tabulary``. They are
therefore set with the standard LaTeX ``tabular`` environment. Also, the
verbatim environment used for literal blocks only works in ``p{width}``
columns, which means that by default, Sphinx generates such column specs for
such tables. Use the :rst:dir:`tabularcolumns` directive to get finer control
over such tables.
Tables that contain block-level elements such as object descriptions, literal
blocks, blockquotes or any kind of lists cannot be set with ``tabulary``.
They are therefore set with the standard LaTeX ``tabular`` environment.
Also, the verbatim environment used for literal blocks only works in
``p{width}`` columns, which means that by default, Sphinx generates such
column specs for such tables. Use the :rst:dir:`tabularcolumns` directive to
get finer control over such tables.

View File

@ -113,7 +113,7 @@ class Table(object):
self.colspec = None
self.rowcount = 0
self.had_head = False
self.has_verbatim = False
self.has_problematic = False
self.caption = None
self.longtable = False
@ -482,6 +482,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_desc(self, node):
self.body.append('\n\n\\begin{fulllineitems}\n')
if self.table:
self.table.has_problematic = True
def depart_desc(self, node):
self.body.append('\n\\end{fulllineitems}\n\n')
@ -615,14 +617,14 @@ class LaTeXTranslator(nodes.NodeVisitor):
u'\\capstart\\caption{%s}\n' % self.table.caption)
if self.table.longtable:
self.body.append('\n\\begin{longtable}')
elif self.table.has_verbatim:
elif self.table.has_problematic:
self.body.append('\n\\begin{tabular}')
else:
self.body.append('\n\\begin{tabulary}{\\linewidth}')
if self.table.colspec:
self.body.append(self.table.colspec)
else:
if self.table.has_verbatim:
if self.table.has_problematic:
colwidth = 0.95 / self.table.colcount
colspec = ('p{%.3f\\linewidth}|' % colwidth) * \
self.table.colcount
@ -657,7 +659,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.body.extend(self.tablebody)
if self.table.longtable:
self.body.append('\\end{longtable}\n\n')
elif self.table.has_verbatim:
elif self.table.has_problematic:
self.body.append('\\end{tabular}\n\n')
else:
self.body.append('\\end{tabulary}\n\n')
@ -725,6 +727,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_bullet_list(self, node):
if not self.compact_list:
self.body.append('\\begin{itemize}\n' )
if self.table:
self.table.has_problematic = True
def depart_bullet_list(self, node):
if not self.compact_list:
self.body.append('\\end{itemize}\n' )
@ -733,6 +737,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.body.append('\\begin{enumerate}\n' )
if 'start' in node:
self.body.append('\\setcounter{enumi}{%d}\n' % (node['start'] - 1))
if self.table:
self.table.has_problematic = True
def depart_enumerated_list(self, node):
self.body.append('\\end{enumerate}\n' )
@ -745,6 +751,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_definition_list(self, node):
self.body.append('\\begin{description}\n')
if self.table:
self.table.has_problematic = True
def depart_definition_list(self, node):
self.body.append('\\end{description}\n')
@ -774,6 +782,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_field_list(self, node):
self.body.append('\\begin{quote}\\begin{description}\n')
if self.table:
self.table.has_problematic = True
def depart_field_list(self, node):
self.body.append('\\end{description}\\end{quote}\n')
@ -795,6 +805,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_centered(self, node):
self.body.append('\n\\begin{center}')
if self.table:
self.table.has_problematic = True
def depart_centered(self, node):
self.body.append('\n\\end{center}')
@ -804,6 +816,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
self.compact_list += 1
self.body.append('\\begin{itemize}\\setlength{\\itemsep}{0pt}'
'\\setlength{\\parskip}{0pt}\n')
if self.table:
self.table.has_problematic = True
def depart_hlist(self, node):
self.compact_list -= 1
self.body.append('\\end{itemize}\n')
@ -1220,7 +1234,7 @@ class LaTeXTranslator(nodes.NodeVisitor):
if self.table:
hlcode = hlcode.replace('\\begin{Verbatim}',
'\\begin{OriginalVerbatim}')
self.table.has_verbatim = True
self.table.has_problematic = True
# get consistent trailer
hlcode = hlcode.rstrip()[:-14] # strip \end{Verbatim}
hlcode = hlcode.rstrip() + '\n'
@ -1241,6 +1255,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
'\\begin{DUlineblock}{\\DUlineblockindent}\n')
else:
self.body.append('\n\\begin{DUlineblock}{0em}\n')
if self.table:
self.table.has_problematic = True
def depart_line_block(self, node):
self.body.append('\\end{DUlineblock}\n')
@ -1256,6 +1272,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
done = 1
if not done:
self.body.append('\\begin{quote}\n')
if self.table:
self.table.has_problematic = True
def depart_block_quote(self, node):
done = 0
if len(node.children) == 1:
@ -1292,6 +1310,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
def visit_option_list(self, node):
self.body.append('\\begin{optionlist}{3cm}\n')
if self.table:
self.table.has_problematic = True
def depart_option_list(self, node):
self.body.append('\\end{optionlist}\n')