web-dev-qa-db-ja.com

reStructuredTextシンプルテーブルの列コンテンツを右揃えにする方法は?

Sphinx を使用して私のプロジェクトのドキュメントを編集しています。次に、マークアップ言語として reStructuredText を使用しています。

私は単純なテーブルグリッドテーブルとは対照的に)を持っています右端の列のレポートには、右揃えにしたい数値が含まれていますが、それを実現する方法が見つかりませんでした。

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

問題を解決できるのであれば、グリッドテーブルに切り替えていただければ幸いです。

28
mac

残念ながら、rstがその機能を提供するとは思いません...テーブルのスタイリングオプションはかなり制限されています。そうは言っても、HTMLにレンダリングする場合は、次のようなcssルールを使用してカスタムスタイルシートを追加できます。

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

次に、ディレクティブを追加します。

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

最初のファイルのテーブルのすぐ上。不格好ですが、動作するはずです。


update 2013-2-6:それ以来、私はこれを自分で達成する必要があり、より永続的な解決策を考え出しました。 cloud_sptheme.ext.table_styling Sphinx拡張機能は、列の配置、列ごとのcssクラス、およびその他のテーブルスタイリングのトリックを実行するためのディレクティブを追加します。 「クラウド」Sphinxテーマの一部としてパッケージ化されていますが、どのSphinxテーマでも機能するはずです。

16
Eli Collins

ReSTは実際にはセルのコンテンツの配置をサポートしていないように見えますが、実際にはセル内で line-blocks を使用して空白の保存を強制し、セルのコンテンツを効果的に埋めることができます。

nicode-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ドキュメントを生成するときに配置が維持されるかどうかはわかりません。

5
shalomb

私のアプローチは、Docutilsによって生成されたTeXファイルのsedのビットです。アイデアは、table宣言をニーズに合ったものに置き換えることです。

Docutilsはそのようなものを生成します:

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

2番目の列を右揃えにしたいとします。これを次のように置き換えることができます。

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

ただし、セルの幅を制御する機能は失われます。ここで必要なのは、2 \newcolumntypeを宣言することです。1つは右揃え(x)用、もう1つは左揃え(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での改行置換をサポートしていません(これは、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/

2
Stan