[Numpy-discussion] numpydoc - latex longtables error

Matthew Brett matthew.brett@gmail....
Wed Aug 10 17:17:26 CDT 2011


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.

See you,

Matthew


More information about the NumPy-Discussion mailing list