使用嵌套列标题在rst中创建一个大表,并获取乳胶渲染以包装标题文本

时间:2016-12-13 22:00:19

标签: python latex python-sphinx restructuredtext

我需要创建一个宽表,就像下面的例子一样,在用乳胶渲染后将覆盖整个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  |
+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+

显示如下:

Header 2 encroaches into 3rd column

我尝试使用.. 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  |
+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+

看起来像这样:

Desired text wrapping behavior for Header 2

非常感谢任何帮助!

2 个答案:

答案 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。 (该表长于文本行宽)

enter image description here