首先使用嵌套列 header 创建一个大的 table 并让乳胶渲染来包裹 header 文本

Creating a large table in rst with nested column headers and getting the latex rendering to wrap the header text

我需要创建一个宽 table,如下例所示,它会在 latex 中呈现后跨越整个 pdf 页面。

我遇到的问题是 header 列的文本没有换行以适应列的宽度。

+----------+--------------------------------+------------------------+----------+----------+----------+----------+----------+
| 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|... 指令调整列宽,但它似乎没有解决侵入性 header 文本问题。

如果我删除 "Common column Header 3"(下面的第二个示例),我会得到所需的换行 header 文本行为,所以我猜我在这部分做错了什么:

+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+
| 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  |
+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+

看起来像这样:

如有任何帮助,我们将不胜感激!

这不是一个完美的解决方案,但您应该能够使用换行符 |(竖线和 2 个空格)手动将文本强制到下一行,如下所示:

+---------------------------
| |  Header    | |  Header |
| |  1         | |  2      |
+==============+===========+
|  value 1     | value 2   |
+--------------+-----------+

这个问题与 LaTeX multirow 包的使用方式有关。 Sphinx 产生这种 mark-up:

   ...&\multirow{2}{*}{\relax \sphinxstylethead{\relax 
   Long Header 2 that should wrap
   \unskip}\relax \unskip}\relax &...

但是 multirow 文档说 * 指示使用 the text parameter’s natural width 我不知道,但也许这与 tabulary 渲染效果不一致table。另一种方法是指示一个显式宽度,Sphinx 通常无法猜测:但是在存在 ..tabularcolumns 的情况下它可能会这样做,因为它会获得信息。

multirow 是旧包,但最近在 2016 年 9 月更新为 v2.0,这为该参数 = 引入了新的可能性

to indicate that the specified width of the column in which the \multirow entry is set should be used.

我尝试手动插入 = 而不是 *,它修复了您的第一个示例。由于 Sphinx LaTeX 作者似乎总是将 \multirow{*} 一起使用,我可以提出这个 hack。输入你的 conf.py

latex_elements = {
    'preamble': r'\let\oldmultirow\multirow\def\multirow#1#2{\oldmultirow{#1}{=}}',
 }

并确保您使用的是完全更新的 TeX 安装,因为您需要 multirow 2.0。这意味着您需要 TeXLive 2016 up-to-date 或 Windows、up-to-date.

上的 MikTeX

Sphinx 可以考虑使用 = 但这仅适用于安装了 up-to-date TeX 的用户。也许有更好的方法,但是这个方法在你的示例 1 上对我有用(不需要 ..tabularcolumns:: 指令),在 a4 纸上和 Sphinx 1.5.2。 (table 比文本线宽长)