如何在reStructuredText简单表格中右对齐列内容?

35 投票
5 回答
20024 浏览
提问于 2025-04-17 01:47

我正在为我的一个项目编辑文档,使用的是Sphinx,而Sphinx又使用reStructuredText作为标记语言。

我有一个简单表格(和网格表格相对),右边的那一列是一些数字,我想把这些数字右对齐,但我找不到方法来实现这个。

============  =====================
Event               Score variation
============  =====================
Event 1                        +100
Event 2                         -25
Event 3                        -400
============  =====================

如果能通过切换到网格表格来解决这个问题,我会很乐意这么做。

5 个回答

4

你可以使用居中的指令。我在下面给你举了个例子:

+------+-----------+------------+--------+------+------+
| Type |  .. centered:: -payload-        | crcL | crcH |
+------+-----------+------------+--------+------+------+
| Type | subType   | obj/access | -data- | crcL | crcH |
+------+-----------+------------+--------+------+------+

这是在HTML中看起来的样子

6

虽然看起来ReST(重构文本)并不支持单元格内容的对齐,但其实你可以在单元格内使用行块来保持空格,从而有效地填充单元格的内容。

你需要使用一些unicode空格字符(比如 U+2001 - EM QUAD),并且在它们前面加一个普通的空格字符(U+0020),也就是说,你要写成 U+0020U+2001Your String,这样可以避免ReST解析器对格式不正确的表格和未结束的替换引用等问题发出警告。

+--------+---------+
| String | Num     |
+========+=========+
| foo    ||   12.00|   # second cell's content is actually |<U+0020><U+2001>12.00
+--------+---------+
| bar    ||    3.01|
+--------+---------+
| baz    ||    4.99|
+--------+---------+
| moo    ||   15.99|
+--------+---------+
| quux   ||   33.49|
+--------+---------+
| foo    ||   20.00|
+--------+---------+
| bar    ||  100.00|
+--------+---------+

像上面这样的表格看起来有点别扭,而且维护起来也比较麻烦,不过这个方法确实能解决问题。顺便提一下,你需要编辑和生成UTF-8格式的输出。虽然 rst2html.py 对此处理得不错,但我不太确定 sphinx 是怎么处理的,以及在生成非HTML文档时对齐是否能保持。

20

很遗憾,我觉得rst不支持这个功能……表格的样式选项非常有限。不过,如果你是要转换成HTML格式的话,可以添加一个自定义的样式表,并使用这样的css规则:

table.right-align-right-col td:last-child {
    text-align: right
}

然后在rst文件中你的表格上方添加这个指令:

.. rst-class:: right-align-right-col

虽然这个方法有点麻烦,但应该能奏效。


更新于2013-2-6:我后来也需要实现这个功能,于是找到了一个更永久的解决方案。这个cloud_sptheme.ext.table_styling的Sphinx扩展提供了一些指令,可以用来对齐列、为每列添加css类,以及其他一些表格样式的小技巧。虽然它是作为“cloud” Sphinx主题的一部分,但应该可以和任何Sphinx主题一起使用。

撰写回答