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

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

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

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

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

3 ответов


к сожалению, я не думаю, что первый предлагает эту способность... параметры стиля таблицы довольно ограничены. Тем не менее, если вы рендеринг в HTML, вы можете добавить пользовательскую таблицу стилей с правилом css, таким как:

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

а затем добавьте директиву:

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

прямо над вашей таблицей в первом файле. Он неуклюжий, но должен работать.


обновление 2013-2-6: С тех пор мне нужно было сделать это самостоятельно, и придумал более постоянный решение. The cloud_sptheme.доб.table_styling расширение Sphinx добавляет директивы для выравнивания столбцов, классов css для каждого столбца и количество других трюков стиля таблицы. Несмотря на то, что он упакован как часть" облачной " темы Сфинкса, он должен работать с любой темой Сфинкса.


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

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

+--------+---------+
| 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.


мой подход немного 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.

я сложила все в файл сценария, потому что я на 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/