Как правильно выравнивать содержимое столбцов в простых таблицах reStructuredText?
Я редактирую документацию для моего проекта, используя Sphinx, который, в свою очередь, использует reStructuredText в качестве языка разметки.
У меня есть простая таблица (в отличие от таблицы сетки), в которой в отчетах самых правых столбцов содержатся номера, которые я хотел бы выровнять по правому краю, но я не мог найти, как это сделать.
============ =====================
Event Score variation
============ =====================
Event 1 +100
Event 2 -25
Event 3 -400
============ =====================
Я был бы счастлив переключиться на таблицу сетки, если бы это позволило мне решить проблему.
Ответы
Ответ 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/