Подтвердить что ты не робот

Как правильно выравнивать содержимое столбцов в простых таблицах reStructuredText?

Я редактирую документацию для моего проекта, используя Sphinx, который, в свою очередь, использует reStructuredText в качестве языка разметки.

У меня есть простая таблица (в отличие от таблицы сетки), в которой в отчетах самых правых столбцов содержатся номера, которые я хотел бы выровнять по правому краю, но я не мог найти, как это сделать.

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

Я был бы счастлив переключиться на таблицу сетки, если бы это позволило мне решить проблему.

4b9b3361

Ответ 1

К сожалению, я не думаю, что первое предлагает эту способность... варианты стиля стола довольно ограничены. Тем не менее, если вы используете 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 добавляет директивы для выравнивания столбцов, классов столбцов и столбцов для других табличных стилей. Несмотря на то, что он был упакован как часть темы "облачный" Sphinx, он должен работать с любой темой Sphinx.

Ответ 2

Хотя кажется, что ReST фактически не поддерживает выравнивание содержимого, вы можете фактически использовать line-blocks в своей ячейке, чтобы обеспечить сохранение пробелы, чтобы эффективно разместить содержимое вашей ячейки.

Вам нужно будет использовать некоторые символы unicode-whitespace (например, U+2001 - EM QUAD), и им будет предшествовать обычный символ пробела (U+0020), т.е. U+0020U+2001Your String, чтобы остановить анализатор ReST, жалующийся на неверные таблицы и неисчерпаемые ссылки на замещение и т.д.

+--------+---------+
| String | Num     |
+========+=========+
| foo    ||   12.00|   # second cell 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-документов.

Ответ 3

Мой подход немного sed в TeX файле, создаваемом Docutils. Идея состоит в том, чтобы заменить объявление 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.

Я помещаю все в файл script, потому что я нахожусь в 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/