考虑这个表,其中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
标签),结果非常不均匀:
请注意,Chrome(就像Firefox一样)在连字符处“有用”地断开,因为这是一条路径,所以我不会将连字符更改为非断开连字符;人们很可能会复制粘贴这些值。
但是,如果删除colgroup
元素,我会得到我想要的表格。
我如何告诉Sphinx请不要对我的桌子不太聪明?
答案 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;
}