Python 如何右对齐StructuredText简单表中的列内容?

Python 如何右对齐StructuredText简单表中的列内容?,python,alignment,python-sphinx,restructuredtext,tabular,Python,Alignment,Python Sphinx,Restructuredtext,Tabular,我正在为我的一个项目编辑文档,该项目使用的是标记语言 我有一个简单的表(与网格表相反),其中最右边的列报告包含我希望右对齐的数字,但我找不到如何实现这一点 ============ ===================== Event Score variation ============ ===================== Event 1 +100 Event 2

我正在为我的一个项目编辑文档,该项目使用的是标记语言

我有一个简单的表(与网格表相反),其中最右边的列报告包含我希望右对齐的数字,但我找不到如何实现这一点

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

如果这能让我解决问题,我很乐意切换到网格表。

遗憾的是,我不认为rst提供了这种能力。。。表格样式选项相当有限。也就是说,如果要呈现为HTML,可以添加带有css规则的自定义样式表,例如:

table.right-align-right-col td:last-child {
    text-align: right
}
然后添加指令:

.. rst-class:: right-align-right-col
就在rst文件中表格的正上方。它很笨重,但应该能用



更新2013-2-6:我需要自己完成这项工作,并提出了一个更持久的解决方案。Sphinx扩展添加了用于执行列对齐、每列css类以及其他一些表格样式技巧的指令。尽管被打包为“云”Sphinx主题的一部分,但它应该与任何Sphinx主题一起使用。

尽管ReST似乎并不支持单元格内容对齐,但实际上您可以在单元格内使用它来强制保留空白,以有效填充单元格内容

您必须使用一些字符(例如,
U+2001-EM QUAD
)并在它们前面加上一个普通空格字符(
U+0020
),即,
U+0020U+2001Your String
来停止其余解析器对格式错误的表和未终止的替换引用等的抱怨

+--------+---------+
| 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|
+--------+---------+
+--------+---------+
|字符串| Num|
+========+=========+
|福| |  12.00 |#第二个单元格的内容实际上是| 12.00
+--------+---------+
|巴| |   3.01|
+--------+---------+
|巴兹| |   4.99|
+--------+---------+
|||  15.99|
+--------+---------+
|库克斯| |  33.49|
+--------+---------+
|福| |  20.00|
+--------+---------+
|巴| | 100.00|
+--------+---------+

像上面这样的表看起来有点笨拙,维护起来也有点笨拙,但是这种方法完成了任务。不用说,您还需要编辑和生成UTF-8输出。虽然
rst2html.py
很好地处理了这个问题,但我不确定
sphinx
如何处理这个问题,如果可以,在生成非HTML文档时是否保持对齐

我的方法是对Docutils生成的TeX文件执行一点sed。 我们的想法是用适合您需要的东西替换
声明

文档生成类似的内容:

\begin{longtable*}[c]{p{0.086\DUtablewidth}p{0.290\DUtablewidth}}
假设您要右对齐第二列。您可能要将其替换为:

\begin{longtable*}[c]{lr}
但是你失去了控制细胞宽度的能力。这里我们需要声明2个
\newcolumntype
,一个用于右对齐(x),一个用于左对齐(y):

并在表声明中使用它们:

\begin{longtable*}[c]{y{7.5cm}x{2cm}}
\\
换行符也必须替换为
\tablernewline

我将所有内容都放在一个脚本文件中,因为我在OSX上,并且sed的版本不支持使用
\n
替换换行符(在
Makefile
中时,这很糟糕)

底线 在OSX/BSD上:

sed -E -f fix_table.sed < source.tex > destination.tex
这有点苛刻,但在StructuredText级别没有真正有效的解决方法


您可以使用居中指令。我在下面举了一个例子:

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

reStructuredText不支持任何内容的正确对齐。我想,你必须手工设计它的样式。问得好+1@mac您使用什么Python版本?您的文件中有哪些列:第二列总是数字?第一列总是字母开头?第一列和第二列之间有什么样的分隔(几个空格?空格的最小数量是多少?制表符?给定的宽度?…)@eyquem-Mmm。。。从这些问题来看,我猜你误解了我。。。但是这里的答案是:2.7.1+i取决于什么.RST文件和文件中的什么表取决于几个空格1。克里斯·莫甘说:“Mac RealStudioDt原文不支持你想要的特征,我认为你必须考虑在创建之后对每个文件进行特殊的处理,借助于内置字符串的方法或正则表达式(如果需要)。但我不了解这个问题的可能性是相当现实的。您的意思是您希望右对齐应编码为某种特殊标记或其他StructuredText文档类型的功能吗?谢谢Eli。我最终选择了一个主题(agogo),它的表格很难看,所以-虽然我会努力改进,但我也会使用你的片段。谢谢你的建议。:)我觉得它在概念上很有趣,但我相信在不可见的非空格相关的地方维护文档实际上是非常困难的……谢谢。就我自己而言,我使用的是GNU/Linux,但为了清楚而有用的解释,+1:)在没有
-E
修饰符的GNU/Linux上应该可以工作。您可以在Sed中使用
\n
,而不是真正的换行符。
s/\\begin{longtable\*}.*/\\newcolumntype{x}[1]{% \
>{\\raggedleft\\hspace{0pt}}p{#1}}% \
\\newcolumntype{y}[1]{% \
>{\\raggedright\\hspace{0pt}}p{#1}}% \
\\begin{longtable*}[c]{y{7.5cm}x{2cm}}/
s/\\\\/\\tabularnewline/
+------+-----------+------------+--------+------+------+
| Type |  .. centered:: -payload-        | crcL | crcH |
+------+-----------+------------+--------+------+------+
| Type | subType   | obj/access | -data- | crcL | crcH |
+------+-----------+------------+--------+------+------+