Comment aligner à droite le contenu des colonnes dans les tables simples reStructuredText?

J'édite la documentation d'un de mes projets en utilisant Sphinx , qui à son tour utilise reStructuredText comme langage de balisage.

J'ai une table simple (par opposition à table de grille ) dans laquelle les rapports de colonne les plus à droite contiennent des nombres que je voudrais aligner à droite, mais je n'ai pas trouvé comment y parvenir.

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

Je serais heureux de passer à une table de grille si cela me permettait de résoudre le problème.

24
demandé sur Brian Tompsett - 汤莱恩 2011-09-08 16:43:40

3 réponses

Malheureusement, je ne pense pas que rst offre cette capacité... les options de style de table sont plutôt limitées. Cela dit, si vous effectuez un rendu en HTML, vous pouvez ajouter une feuille de style personnalisée avec une règle css telle que:

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

, puis ajoutez la directive:

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

Juste au-dessus de votre table dans le premier fichier. C'est maladroit, mais il devrait fonctionner.


mise à jour 2013-2-6: j'ai depuis eu besoin d'accomplir cela moi-même, et j'ai trouvé une solution plus permanente. Le cloud_sptheme.ext.table_styling L'extension Sphinx ajoute des directives pour l'alignement des colonnes, les classes CSS par colonne et le nombre d'autres astuces de style de table. Bien qu'il soit emballé dans le cadre du thème Sphinx" cloud", il devrait fonctionner avec n'importe quel thème Sphinx.

16
répondu Eli Collins 2013-10-08 22:44:13

Bien qu'il semble que ReST ne supporte pas réellement l'alignement du contenu de la cellule, vous pouvez réellement utiliser line-blocks dans votre cellule pour appliquer la préservation des espaces pour pad efficacement le contenu de votre cellule.

Vous devrez utiliser certains des caractèresunicode-whitespace (par exemple U+2001 - EM QUAD) et les faire précéder d'un caractère d'espace normal (U+0020) c'est-à-dire {[3] } pour arrêter l'analyseur ReST se plaignant de tables malformées et de références de substitution non terminées, etc.

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

Les Tables comme celles ci-dessus commencent à paraître un peu gênantes et sont difficiles à maintenir, mais l'approche fait le travail. Il va également sans dire, vous devrez à la fois éditer et générer une sortie UTF-8. Alors que rst2html.py traite bien cela, je ne sais pas comment sphinx traite cela et si c'est possible, si l'alignement reste lors de la génération de documents non-HTML.

5
répondu shalomb 2012-01-03 08:51:37

Mon approche est un peu de sed sur le fichier TeX généré par Docutils. L'idée est de remplacer la déclaration table par quelque chose qui correspond à vos besoins.

Docutils produisent quelque chose comme ça:

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

Imaginez que vous voulez aligner à droite la deuxième colonne.Vous pouvez remplacer ceci par:

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

Mais vous perdez la capacité de contrôler la largeur des cellules. Ce dont nous avons besoin ici est de déclarer 2 \newcolumntype, un pour l'alignement droit (x ) et un pour l'alignement à gauche (y):

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

Et les utiliser dans la déclaration de la table:

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

La nouvelle ligne \\ doit également être remplacée par un \tabularnewline.

Je mets tout dans un fichier de script parce que je suis sur OSX et la version de sed expédiée ne supporte pas la substitution de nouvelle ligne avec \n (cela craint quand vous êtes dans un Makefile).

La ligne de fond

Sur OSX / BSD:

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

Avec 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/

Ceci est un peu dur mais il n'y a pas de solution de contournement qui fonctionne vraiment au niveau RestructuredText.

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

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

2
répondu Stan 2012-02-19 21:49:56