我怎样才能让Sphinx表适合宽度?

时间:2014-01-09 17:27:57

标签: python-sphinx

考虑这个表,其中pyeval是一个宏,它评估一个表达式并用它的值替换它(所以我可以避免文档中的硬编码值):

======================= ===========================================
Subsytem                Default path
======================= ===========================================
:pyeval:`constants.FOO` :pyeval:`pathutils.DEFAULT_FOO_STORAGE_DIR`
:pyeval:`constants.BAR` :pyeval:`pathutils.DEFAULT_BAR_STORAGE_DIR`
:pyeval:`constants.BAZ` :pyeval:`pathutils.DEFAULT_BAZ_STORAGE_DIR`
======================= ===========================================

使用此HTML呈现:

<table border="1" class="docutils">
  <colgroup>
    <col width="40%">
    <col width="60%">
  </colgroup>
  <thead valign="bottom">
    <tr class="row-odd">
      <th class="head">Subsystem</th>
      <th class="head">Default storage path</th>
    </tr>
  </thead>
  <tbody valign="top">
    <tr class="row-even">
      <td><tt class="docutils literal"><span class="pre">foo</span></tt></td>
      <td><tt class="docutils literal"><span class="pre">/srv/badp/foo-path/</span></tt></td>
    </tr>
    <tr class="row-odd">
      <td><tt class="docutils literal"><span class="pre">bar</span></tt></td>
      <td><tt class="docutils literal"><span class="pre">/srv/badp/bar-path/</span></tt></td>
    </tr>
    <tr class="row-even"><td><tt class="docutils literal">
      <span class="pre">baz</span></tt></td>
      <td><tt class="docutils literal"><span class="pre">/var/run/badp/baz-path/</span></tt></td>
    </tr>
  </tbody>
</table>

由于宏,我必须为Subsytem列提供的宽度仅略小于列Default path获得的宽度,但其列的内容要短得多。由于Sphinx试图“有用”,它会尝试将源文件中宽度的比例传递给HTML页面(注意colgroup标签),结果非常不均匀:

enter image description here

请注意,Chrome(就像Firefox一样)在连字符处“有用”地断开,因为这是一条路径,所以我不会将连字符更改为非断开连字符;人们很可能会复制粘贴这些值。

但是,如果删除colgroup元素,我会得到我想要的表格。

enter image description here

我如何告诉Sphinx请不要对我的桌子不太聪明?

2 个答案:

答案 0 :(得分:4)

我也遇到过这个问题。读取docutils源,看起来colgroup宽度是使用网格表的分隔线中列的短划线数和此处使用的简单表中列的最长列条目中的字符数计算的。

尝试编写自定义指令以生成没有colgroup的表时遇到了似乎是docutils中的错误,因为后续处理生成的元素需要colgroup存在。

我使用的一种技术是使用别名来创建长度与真实文本相近的数据项。例如:

.. |FOO| replace:: :pyeval:`constants.FOO`

这有助但不完美。

使用以下css

禁用colgroup元素的实验
colgroup { display: none; }

在FireFox上工作得很好,但在IE9中隐藏了输入表,所以这显然不是一个可接受的解决方案。

答案 1 :(得分:1)

似乎有用(至少在Firefox中)是重置col宽度:

table.docutils col {
    width: auto;
}