[Numpy-discussion] numpydoc - latex longtables error

Matthew Brett matthew.brett@gmail....
Mon Aug 15 17:29:08 CDT 2011


Hi,

On Wed, Aug 10, 2011 at 5:17 PM, Matthew Brett <matthew.brett@gmail.com> wrote:
> Hi,
>
> On Wed, Aug 10, 2011 at 5:03 PM,  <josef.pktd@gmail.com> wrote:
>> On Wed, Aug 10, 2011 at 6:17 PM, Matthew Brett <matthew.brett@gmail.com> wrote:
>>> Hi,
>>>
>>> On Wed, Aug 10, 2011 at 12:38 PM, Skipper Seabold <jsseabold@gmail.com> wrote:
>>>> On Wed, Aug 10, 2011 at 3:28 PM, Matthew Brett <matthew.brett@gmail.com> wrote:
>>>>> Hi,
>>>>>
>>>>> I think this one might be for Pauli.
>>>>>
>>>>> I've run into an odd problem that seems to be an interaction of
>>>>> numpydoc and autosummary and large classes.
>>>>>
>>>>> In summary, large classes and numpydoc lead to large tables of class
>>>>> methods, and there seems to be an error in the creation of the large
>>>>> tables in latex.
>>>>>
>>>>> Specifically, if I run 'make latexpdf' with the attached minimal
>>>>> sphinx setup, I get a pdflatex error ending thus:
>>>>>
>>>>> ...
>>>>> l.118 \begin{longtable}{LL}
>>>>>
>>>>> and this is because longtable does not accept LL as an argument, but
>>>>> needs '|l|l|' (bar - el - bar - el - bar).
>>>>>
>>>>> I see in sphinx.writers.latex.py, around line 657, that sphinx knows
>>>>> about this in general, and long tables in standard ReST work fine with
>>>>> the el-bar arguments passed to longtable.
>>>>>
>>>>>        if self.table.colspec:
>>>>>            self.body.append(self.table.colspec)
>>>>>        else:
>>>>>            if self.table.has_problematic:
>>>>>                colwidth = 0.95 / self.table.colcount
>>>>>                colspec = ('p{%.3f\\linewidth}|' % colwidth) * \
>>>>>                          self.table.colcount
>>>>>                self.body.append('{|' + colspec + '}\n')
>>>>>            elif self.table.longtable:
>>>>>                self.body.append('{|' + ('l|' * self.table.colcount) + '}\n')
>>>>>            else:
>>>>>                self.body.append('{|' + ('L|' * self.table.colcount) + '}\n')
>>>>>
>>>>> However, using numpydoc and autosummary (see the conf.py file), what
>>>>> seems to happen is that, when we reach the self.table.colspec test at
>>>>> the beginning of the snippet above, 'self.table.colspec' is defined:
>>>>>
>>>>> In [1]: self.table.colspec
>>>>> Out[1]: '{LL}\n'
>>>>>
>>>>> and thus the LL gets written as the arg to longtable:
>>>>>
>>>>> \begin{longtable}{LL}
>>>>>
>>>>> and the pdf build breaks.
>>>>>
>>>>> I'm using the numpydoc out of the current numpy source tree.
>>>>>
>>>>> At that point I wasn't sure how to proceed with debugging.  Can you
>>>>> give any hints?
>>>>>
>>>>
>>>> It's not a proper fix, but our workaround is to edit the Makefile for
>>>> latex (and latexpdf) to
>>>>
>>>> https://github.com/statsmodels/statsmodels/blob/master/scikits/statsmodels/docs/Makefile#L94
>>>> https://github.com/statsmodels/statsmodels/blob/master/scikits/statsmodels/docs/make.bat#L121
>>>>
>>>> to call the script to replace the longtable arguments
>>>>
>>>> https://github.com/statsmodels/statsmodels/blob/master/scikits/statsmodels/docs/fix_longtable.py
>>>>
>>>> The workaround itself probably isn't optimal, and I'd be happy to hear
>>>> of a proper fix.
>>>
>>> Thanks - yes - I found your workaround in my explorations, I put in a
>>> version in our tree too:
>>>
>>> https://github.com/matthew-brett/nipy/blob/latex_build_fixes/tools/fix_longtable.py
>>>
>>>  - but I agree it seems much better to get to the root cause.
>>
>> When I tried to figure this out, I never found out why the correct
>> sphinx longtable code path never gets reached, or which code
>> (numpydoc, autosummary or sphinx) is filling in the colspec.
>
> No - it looked hard to debug.  I established that it required numpydoc
> and autosummary to be enabled.

It looks like this conversation dried up, so I've moved it to a ticket:

http://projects.scipy.org/numpy/ticket/1935

Best,

Matthew


More information about the NumPy-Discussion mailing list