31

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

我有一个简单的表格(而不是grid table),其中最右边的列报告包含我想右对齐的数字,但我找不到如何实现这一点。

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

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

4

5 回答 5

20

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

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

然后添加指令:

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

在第一个文件中您的表格正上方。它很笨重,但它应该可以工作。


2013 年2 月 6 日更新:从那以后我需要自己完成这项工作,并提出了一个更永久的解决方案。cloud_sptheme.ext.table_styling Sphinx 扩展添加了用于执行列对齐、每列 css 类以及许多其他表格样式技巧的指令。尽管被打包为“云”Sphinx 主题的一部分,但它应该适用于任何 Sphinx 主题。

于 2011-09-08T16:26:50.763 回答
7

虽然看起来 ReST 实际上并不支持单元格内容对齐,但您实际上可以在单元格中使用行块来强制保留空白以有效地填充单元格的内容。

您必须使用一些unicode-whitespace字符(例如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 文档时对齐是否仍然存在。

于 2012-01-03T08:51:37.040 回答
2

我的方法有点像Docutilssed生成的 TeX 文件。这个想法是用适合您需要的东西替换声明。table

Docutils 产生类似的东西:

\begin{longtable*}[c]{p{0.086\DUtablewidth}p{0.290\DUtablewidth}}

想象一下,您想右对齐第二列。您可能希望将其替换为:

\begin{longtable*}[c]{lr}

但是你失去了控制单元格宽度的能力。我们需要在这里声明 2 \newcolumntype,一个用于右对齐(x),一个用于左对齐(y):

\newcolumntype{x}[1]{% 
>{\raggedleft\hspace{0pt}}p{#1}}% 
\newcolumntype{y}[1]{% 
>{\raggedright\hspace{0pt}}p{#1}}% 

并在表声明中使用它们:

\begin{longtable*}[c]{y{7.5cm}x{2cm}}

\\换行符也必须替换为\tabularnewline.

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

底线

在 OSX/BSD 上:

sed -E -f fix_table.sed < source.tex > destination.tex

fix_table.sed

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/

这有点苛刻,但没有真正适用于 RestructuredText 级别的解决方法。

http://en.wikibooks.org/wiki/LaTeX/Tables

http://texblog.org/2008/05/07/fwd-equal-cell-width-right-and-centre-aligned-content/

于 2012-02-19T21:49:56.843 回答
2

您可以使用 centered 指令。我在下面包含了一个示例:

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

这是 HTML 中的样子

于 2021-03-19T16:27:26.567 回答
0

从 Docutils 0.13(2016 年末)开始,该table指令支持一个align选项。


.. table::
   :align: right

   ======== ==== ==== ==== ==== ==== ==== ==== ==== ==== 
   4 \\ 9    0    1    2    3    4    5    6    7    8  
   ======== ==== ==== ==== ==== ==== ==== ==== ==== ==== 
   0         0   28   20   12    4   32   24   16    8  
   -------- ---- ---- ---- ---- ---- ---- ---- ---- ---- 
   1         9    1   29   21   13    5   33   25   17  
   -------- ---- ---- ---- ---- ---- ---- ---- ---- ---- 
   2        18   10    2   30   22   14    6   34   26  
   -------- ---- ---- ---- ---- ---- ---- ---- ---- ---- 
   3        27   19   11    3   31   23   15    7   35  
   ======== ==== ==== ==== ==== ==== ==== ==== ==== ==== 

您的样式表将需要支持.align-right该类

于 2022-01-09T00:22:15.320 回答