我需要创建一个宽表,就像下面的例子一样,在用乳胶渲染后将覆盖整个pdf页面。
我遇到的问题是列标题文本没有换行以适应列的宽度。
+----------+--------------------------------+------------------------+----------+----------+----------+----------+----------+
| Header 1 | Long Header 2 that should wrap | Common column Header 3 | Header 4 | Header 5 | Header 6 | Header 7 | Header 8 |
| | +-----------+------------+ | | | | |
| | | Header 3a | Header 3b | | | | | |
+==========+================================+===========+============+==========+==========+==========+==========+==========+
| Value 1 | Value 2 does actually wrap | Value 3a | Value 3b | Value 4 | Value 5 | Value 6 | Value 7 | Value 8 |
+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+
显示如下:
我尝试使用.. tabularcolumns:: |p{0.1 \textwidth|...
指令调整列宽,但似乎没有解决侵入标题文本问题。
如果我删除“Common column Header 3”(下面的第二个例子),我得到了所需的包装头文本行为,所以我猜我在做那个部分有问题:
+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+
| Header 1 | Long Header 2 that should wrap | Header 3a | Header 3b | Header 4 | Header 5 | Header 6 | Header 7 | Header 8 |
| | | | | | | | | |
| | | | | | | | | |
+==========+================================+===========+============+==========+==========+==========+==========+==========+
| Value 1 | Value 2 does actually wrap | Value 3a | Value 3b | Value 4 | Value 5 | Value 6 | Value 7 | Value 8 |
+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+
看起来像这样:
非常感谢任何帮助!
答案 0 :(得分:5)
这不是一个完美的解决方案,但您应该能够使用换行符|
(管道和2个空格)手动强制文本到下一行,如下所示:
+---------------------------
| | Header | | Header |
| | 1 | | 2 |
+==============+===========+
| value 1 | value 2 |
+--------------+-----------+
答案 1 :(得分:3)
此问题与使用LaTeX multirow
包的方式有关。 Sphinx产生了这种标记:
...&\multirow{2}{*}{\relax \sphinxstylethead{\relax
Long Header 2 that should wrap
\unskip}\relax \unskip}\relax &...
但是multirow
文档说明*
表示使用the text parameter’s natural width
但我不知道,但这可能不适合使用tabulary
呈现表格。另一种方法是指出一个明确的宽度,Sphinx一般无法猜测:但是,如果存在..tabularcolumns
,它可能会有,因为它会获得信息。
multirow
是旧套餐,但最近在2016年9月更新为v2.0
,为此参数引入了新的可能性=
表示应该使用设置
\multirow
条目的列的指定宽度。
我尝试手动插入=
而非*
并修复了您的第一个示例。由于Sphinx LaTeX作家似乎总是将\multirow
与{*}
一起使用,我可以提出这个黑客行为。放入conf.py
latex_elements = {
'preamble': r'\let\oldmultirow\multirow\def\multirow#1#2{\oldmultirow{#1}{=}}',
}
并确保您使用全面更新的TeX安装,因为您需要multirow 2.0。这意味着您需要最新的TeXLive 2016或Windows上的MikTeX,这是最新的。
Sphinx可能会考虑使用=
,但这仅适用于具有此类最新TeX安装的用户。也许有更好的方法,但是这个方法对你来说对你的例子1(不需要..tabularcolumns::
指令),a4论文和Sphinx 1.5.2。 (该表长于文本行宽)