[Python-checkins] r62689 - in doctools/trunk: doc/markup/misc.rst sphinx/latexwriter.py sphinx/texinputs/sphinx.sty
georg.brandl
python-checkins at python.org
Sun May 4 09:43:10 CEST 2008
Author: georg.brandl
Date: Sun May 4 09:43:09 2008
New Revision: 62689
Log:
Fix handling of Verbatim within tables.
Modified:
doctools/trunk/doc/markup/misc.rst
doctools/trunk/sphinx/latexwriter.py
doctools/trunk/sphinx/texinputs/sphinx.sty
Modified: doctools/trunk/doc/markup/misc.rst
==============================================================================
--- doctools/trunk/doc/markup/misc.rst (original)
+++ doctools/trunk/doc/markup/misc.rst Sun May 4 09:43:09 2008
@@ -78,3 +78,12 @@
By default, Sphinx uses a table layout with ``L`` for every column.
.. versionadded:: 0.2.1
+
+.. 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 :dir:`tabularcolumns` directive to get finer control
+ over such tables.
Modified: doctools/trunk/sphinx/latexwriter.py
==============================================================================
--- doctools/trunk/sphinx/latexwriter.py (original)
+++ doctools/trunk/sphinx/latexwriter.py Sun May 4 09:43:09 2008
@@ -76,7 +76,9 @@
def __init__(self):
self.col = 0
self.colcount = 0
+ self.colspec = None
self.had_head = False
+ self.has_verbatim = False
class Desc(object):
@@ -385,10 +387,32 @@
if self.table:
raise NotImplementedError('Nested tables are not supported.')
self.table = Table()
- self.body.append('\n\\begin{tabulary}{\\textwidth}')
+ self.tablebody = []
+ # Redirect body output until table is finished.
+ self._body = self.body
+ self.body = self.tablebody
def depart_table(self, node):
- self.body.append('\\end{tabulary}\n\n')
+ self.body = self._body
+ if self.table.has_verbatim:
+ self.body.append('\n\\begin{tabular}')
+ else:
+ self.body.append('\n\\begin{tabulary}{\\textwidth}')
+ if self.table.colspec:
+ self.body.append(self.table.colspec)
+ else:
+ if self.table.has_verbatim:
+ colwidth = 0.95 / self.table.colcount
+ colspec = ('p{%.3f\\textwidth}|' % colwidth) * self.table.colcount
+ self.body.append('{|' + colspec + '}\n')
+ else:
+ self.body.append('{|' + ('L|' * self.table.colcount) + '}\n')
+ self.body.extend(self.tablebody)
+ if self.table.has_verbatim:
+ self.body.append('\\end{tabular}\n\n')
+ else:
+ self.body.append('\\end{tabulary}\n\n')
self.table = None
+ self.tablebody = None
def visit_colspec(self, node):
self.table.colcount += 1
@@ -402,9 +426,7 @@
def visit_thead(self, node):
if self.next_table_colspec:
- self.body.append('{%s}\n' % self.next_table_colspec)
- else:
- self.body.append('{|' + ('L|' * self.table.colcount) + '}\n')
+ self.table.colspec = '{%s}\n' % self.next_table_colspec
self.next_table_colspec = None
self.body.append('\\hline\n')
self.table.had_head = True
@@ -727,10 +749,16 @@
hlcode = self.highlighter.highlight_block(code, lang, linenos)
# workaround for Unicode issue
hlcode = hlcode.replace(u'€', u'@texteuro[]')
+ # must use original Verbatim environment and "tabular" environment
+ if self.table:
+ hlcode = hlcode.replace('\\begin{Verbatim}',
+ '\\begin{OriginalVerbatim}')
+ self.table.has_verbatim = True
# get consistent trailer
hlcode = hlcode.rstrip()[:-14] # strip \end{Verbatim}
hlcode = hlcode.rstrip() + '\n'
- self.body.append('\n' + hlcode + '\\end{Verbatim}\n')
+ self.body.append('\n' + hlcode + '\\end{%sVerbatim}\n' %
+ (self.table and 'Original' or ''))
self.verbatim = None
visit_doctest_block = visit_literal_block
depart_doctest_block = depart_literal_block
Modified: doctools/trunk/sphinx/texinputs/sphinx.sty
==============================================================================
--- doctools/trunk/sphinx/texinputs/sphinx.sty (original)
+++ doctools/trunk/sphinx/texinputs/sphinx.sty Sun May 4 09:43:09 2008
@@ -154,9 +154,9 @@
\newcommand{\py at modulebadkey}{{--just-some-junk--}}
% Redefine the Verbatim environment to allow border and background colors.
-%
-\let\py at OldVerbatim=\Verbatim
-\let\py at OldEndVerbatim=\endVerbatim
+% The original environment is still used for verbatims within tables.
+\let\OriginalVerbatim=\Verbatim
+\let\endOriginalVerbatim=\endVerbatim
% Play with vpsace to be able to keep the indentation.
\newlength\distancetoright
@@ -188,10 +188,10 @@
}%
\item\MakeFramed {\FrameRestore}%
\small%
- \py at OldVerbatim[#1]%
+ \OriginalVerbatim[#1]%
}
\renewcommand{\endVerbatim}{%
- \py at OldEndVerbatim%
+ \endOriginalVerbatim%
\endMakeFramed%
\endlist%
}
More information about the Python-checkins
mailing list