如何在reStructuredText简单表格中右对齐列内容?
我正在为我的一个项目编辑文档,使用的是Sphinx,而Sphinx又使用reStructuredText作为标记语言。
我有一个简单表格(和网格表格相对),右边的那一列是一些数字,我想把这些数字右对齐,但我找不到方法来实现这个。
============ =====================
Event Score variation
============ =====================
Event 1 +100
Event 2 -25
Event 3 -400
============ =====================
如果能通过切换到网格表格来解决这个问题,我会很乐意这么做。
5 个回答
你可以使用居中的指令。我在下面给你举了个例子:
+------+-----------+------------+--------+------+------+
| Type | .. centered:: -payload- | crcL | crcH |
+------+-----------+------------+--------+------+------+
| Type | subType | obj/access | -data- | crcL | crcH |
+------+-----------+------------+--------+------+------+
虽然看起来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文档时对齐是否能保持。
很遗憾,我觉得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主题一起使用。