Orgmode - En-tête vertical

Sep 12 2020

est-il possible de créer également un en-tête vertical avec le mode organisation?

Quelque chose comme ça (champs de couleur cyan):

Vous pouvez créer un en-tête horizontal comme celui-ci:

| Header  | Header  | Header  | Header  | Header  |
|---------+---------+---------+---------+---------|
| Content | Content | Content | Content | Content |

mais je veux aussi un en-tête vertical:

| Header | Header  | Header  | Header  | Header  |
|--------+---------+---------+---------+---------|
| Header | Content | Content | Content | Content |
| Header | Content | Content | Content | Content |

La raison en est que je souhaite l'exporter au format HTML.

Le HTML ressemblera à ceci:

<table border="2" cellpadding="6" cellspacing="0" frame="hsides" rules="groups">
        <colgroup>
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
        </colgroup>
        <thead>
            <tr>
                <th class="org-right" scope="col">.</th>
                <th class="org-right" scope="col">1</th>
                <th class="org-right" scope="col">2</th>
                <th class="org-right" scope="col">3</th>
                <th class="org-right" scope="col">4</th>
                <th class="org-right" scope="col">5</th>
                <th class="org-right" scope="col">6</th>
                <th class="org-right" scope="col">7</th>
                <th class="org-right" scope="col">8</th>
                <th class="org-right" scope="col">9</th>
                <th class="org-right" scope="col">10</th>
                <th class="org-right" scope="col">11</th>
                <th class="org-right" scope="col">12</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="org-right">1</td>
                <td class="org-right">1</td>
                <td class="org-right">2</td>
                <td class="org-right">3</td>
                <td class="org-right">4</td>
                <td class="org-right">5</td>
                <td class="org-right">6</td>
                <td class="org-right">7</td>
                <td class="org-right">8</td>
                <td class="org-right">9</td>
                <td class="org-right">10</td>
                <td class="org-right">11</td>
                <td class="org-right">12</td>
            </tr>
        </tbody>
    </table>

s'il prend en charge l'en-tête vertical, cela devrait ressembler à ceci:

<table border="2" cellpadding="6" cellspacing="0" frame="hsides" rules="groups">
        <colgroup>
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
            <col class="org-right">
        </colgroup>
        <thead>
            <tr>
                <th class="org-right" scope="col">.</th>
                <th class="org-right" scope="col">1</th>
                <th class="org-right" scope="col">2</th>
                <th class="org-right" scope="col">3</th>
                <th class="org-right" scope="col">4</th>
                <th class="org-right" scope="col">5</th>
                <th class="org-right" scope="col">6</th>
                <th class="org-right" scope="col">7</th>
                <th class="org-right" scope="col">8</th>
                <th class="org-right" scope="col">9</th>
                <th class="org-right" scope="col">10</th>
                <th class="org-right" scope="col">11</th>
                <th class="org-right" scope="col">12</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th class="org-right">1</th>
                <td class="org-right">1</td>
                <td class="org-right">2</td>
                <td class="org-right">3</td>
                <td class="org-right">4</td>
                <td class="org-right">5</td>
                <td class="org-right">6</td>
                <td class="org-right">7</td>
                <td class="org-right">8</td>
                <td class="org-right">9</td>
                <td class="org-right">10</td>
                <td class="org-right">11</td>
                <td class="org-right">12</td>
            </tr>
        </tbody>
    </table>

Notez l' thélément sur le deuxième bloc de code au lieu d'un tdélément sur le tbody. Je sais que je peux le faire avec JavaScript, mais je veux savoir si je org-modepeux déjà le supporter, ce qui faciliterait beaucoup les choses.

Réponses

NickD Sep 12 2020 at 04:46

Pour faire de la première colonne une colonne "en-tête", il suffit de

(setq org-html-table-use-header-tags-for-first-column t)

soit globalement, soit en tant que variable de fichier local :

# Local Variables:
# org-html-table-use-header-tags-for-first-column: t
# End:

AFAIK, vous ne pouvez pas le spécifier par table.

Par example:

* Multiplication table

  #+ATTR_HTML: :border 3 :rules all :frame border
  |  . |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |   9 |  10 |
  |----+----+----+----+----+----+----+----+----+-----+-----|
  |  1 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |   9 |  10 |
  |  2 |  2 |  4 |  6 |  8 | 10 | 12 | 14 | 16 |  18 |  20 |
  |  3 |  3 |  6 |  9 | 12 | 15 | 18 | 21 | 24 |  27 |  30 |
  |  4 |  4 |  8 | 12 | 16 | 20 | 24 | 28 | 32 |  36 |  40 |
  |  5 |  5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 |  45 |  50 |
  |  6 |  6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 |  54 |  60 |
  |  7 |  7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 |  63 |  70 |
  |  8 |  8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 |  72 |  80 |
  |  9 |  9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 |  81 |  90 |
  | 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 |  90 | 100 |
  #+TBLFM: @2$2..@>$> = @1$0 * @0$1


* Local variables                                      :noexport:
# Local Variables:
# org-html-table-use-header-tags-for-first-column: t
# End:

sera exporté au format HTML exactement comme vous le montrez (à l'exception des couleurs).

Voir la section Tables en exportation HTML du manuel pour d'autres variables, mais méfiez-vous de la #+ATTR_HTMLsyntaxe: c'est comme je l'ai montré ci-dessus pour les versions récentes du mode Org, mais le manuel montre l'ancienne syntaxe:

 #+ATTR_HTML: border="2" rules="all" frame="border"

que vous devrez peut-être encore utiliser, selon votre version. Je vais ouvrir un bug sur la doc.


[ANCIENNE RÉPONSE: ce qui suit ne répond pas à la question mais il pourrait être suffisamment intéressant de laisser ici.]

Si vous voulez dire quelque chose comme ça:



* Multiplication table


  |  . |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |   9 |  10 |  11 |  12 |
  |  1 |  1 |  2 |  3 |  4 |  5 |  6 |  7 |  8 |   9 |  10 |  11 |  12 |
  |  2 |  2 |  4 |  6 |  8 | 10 | 12 | 14 | 16 |  18 |  20 |  22 |  24 |
  |  3 |  3 |  6 |  9 | 12 | 15 | 18 | 21 | 24 |  27 |  30 |  33 |  36 |
  |  4 |  4 |  8 | 12 | 16 | 20 | 24 | 28 | 32 |  36 |  40 |  44 |  48 |
  |  5 |  5 | 10 | 15 | 20 | 25 | 30 | 35 | 40 |  45 |  50 |  55 |  60 |
  |  6 |  6 | 12 | 18 | 24 | 30 | 36 | 42 | 48 |  54 |  60 |  66 |  72 |
  |  7 |  7 | 14 | 21 | 28 | 35 | 42 | 49 | 56 |  63 |  70 |  77 |  84 |
  |  8 |  8 | 16 | 24 | 32 | 40 | 48 | 56 | 64 |  72 |  80 |  88 |  96 |
  |  9 |  9 | 18 | 27 | 36 | 45 | 54 | 63 | 72 |  81 |  90 |  99 | 108 |
  | 10 | 10 | 20 | 30 | 40 | 50 | 60 | 70 | 80 |  90 | 100 | 110 | 120 |
  | 11 | 11 | 22 | 33 | 44 | 55 | 66 | 77 | 88 |  99 | 110 | 121 | 132 |
  | 12 | 12 | 24 | 36 | 48 | 60 | 72 | 84 | 96 | 108 | 120 | 132 | 144 |
  #+TBLFM: @2$2..@>$> = @1$0 * @0$1

la réponse est un OUI catégorique.

J'ai créé le tableau avec l'ensemble d'instructions suivant:

  • M-x org-create-table RET 1x13 RET: cela crée une table à une seule colonne avec 13 lignes.
  • Tapez .dans la première ligne, 1dans la deuxième ligne, puis continuez à taper S-<Enter>pour remplir le reste des lignes.
  • M-x org-table-transpose-table-at-point RET pour en faire une table à une seule ligne.
  • Appuyez sur TABpour créer la deuxième ligne et passer à la première colonne de celle-ci.
  • Tapez 1la première colonne de la deuxième ligne, puis continuez à taper S-<Enter>pour remplir le reste de cette colonne.

Vous avez maintenant la première colonne et la première ligne, remplies avec ce que vous affichez dans votre tableau. Maintenant, ajoutez une formule de tableau sous le tableau comme indiqué ci-dessus et appuyez sur C-c C-c: le reste du tableau se remplit (vous devez activer Calc au préalable: tapez M-x calc RET qpour le faire).

La formule du tableau dit: remplissez toutes les autres cellules du tableau (lignes 2 en dernier et colonnes 2 en dernier) avec le produit des nombres que vous trouvez dans (ligne 1, colonne actuelle) et (ligne actuelle, colonne 1).