首先使用嵌套列 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 比文本线宽长)
我需要创建一个宽 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.
上的 MikTeXSphinx 可以考虑使用 =
但这仅适用于安装了 up-to-date TeX 的用户。也许有更好的方法,但是这个方法在你的示例 1 上对我有用(不需要 ..tabularcolumns::
指令),在 a4 纸上和 Sphinx 1.5.2。 (table 比文本线宽长)