2013-06-29 1 views
0

J'essaie d'obtenir un contrôle programmatique (Emacs Lisp) plus fin sur un ensemble de tables exportées depuis le mode Org d'Emacs vers HTML. [Cette tâche fait partie d'une approche alternative à celle prise par la communauté ErgoEmacs où SVG est utilisé pour convertir des fichiers texte en un fichier PNG qui illustre des dispositions ergonomiques alternatives pour l'utilisation d'Emacs.] En résumé, les tableaux sont une abstraction d'un Apple BlueTooth Clavier où chaque table Mode Emacs/Org représente une rangée de touches du clavier, il y a donc six tables avec 12 à 14 touches (colonnes) par ligne.Granularité fine (CSS) sur les cellules de tableau HTML exportées via le mode Emacs/Org

Emacs, dans le tampon org-mode, mon abstraction est rendu parfaitement en utilisant le mode org meta ligne pour spécifier la taille de chaque colonne: |/| <c12> | <c7> | <c7> | ...

La sortie générée Org mode Emacs est à la fois précis et puissant . Lors de l'exportation en HTML, en utilisant CSS, le mieux que j'ai pu faire (Org Mode est la version 7, btw) est de fixer la largeur de chaque cellule à une valeur identique qui donne un rendu grossièrement inexact. J'essaie de trouver un moyen (en utilisant CSS ou autre chose qui préserve le rendu du tampon Emacs) d'attribuer des largeurs de cellules individuelles ou des largeurs de colonnes individuelles pour le HTML exporté.

Suggestions?

Répondre

0

Je suppose que vous pourriez (tenter d'atteindre) votre objectif en ajoutant une ligne # + ATTR_HTML devant votre table. Là, vous devez insérer les spécifications CSS. Est-ce que je me trompe?

+0

Vous ne vous trompez pas si vous savez que cet attribut particulier peut être écrit pour dire quelque chose comme la colonne 1 est la largeur 9em, les colonnes 2 à 14 sont la largeur 7em, etc Je ne vois pas comment le faire depuis ATTR_HTML entité. – pajato0

1

Si les éléments suggérés ne suffisent pas, vous pouvez utiliser la propriété :custom_id: special-table pour l'affecter à la table en question, puis placer les définitions CSS dans une classe #special-table { ... }.

Mais, en réalité, org-mode crée déjà des identifiants (il les dérive des numéros de section), de sorte que vous pouvez toujours accéder à la table qui vous intéresse via quelque chose comme la règle #section-id table:nth-child(x) { ... }.

Si vous souhaitez générer des règles CSS dynamiquement, alors un moyen de le faire serait d'avoir un bloc de code org-babel qui restitue les résultats en utilisant :results html sur ce bloc. par exemple, quelque chose comme ça fonctionnerait:

#+NAME: insert-css 
#+BEGIN_SRC emacs-lisp :exports none :var nth-child=1 
    (print 
    (format 
    "<style type=\"text/css\"> 
     #section table:nth-child(%s) { color: orange } 
     </style>" nth-child)) 
#+END_SRC 

#+CALL: insert-css(nth-child=3) :results html 

The code above produces this output: 
# <style type="text/css"> 
#  #section table:nth-child(3) { color: orange } 
# </style> 

Cependant, il y a un inconvénient mineur de l'approche plus tard: même si tous les navigateurs comprennent <style> balises dans le corps du document HTML, techniquement, ce n'est pas valide pour le mettre Là. Bien sûr, si vous étiez super-pédant, vous pourriez avoir une fonction JavaScript en insérant CSS au moment de l'exécution à un emplacement plus approprié, mais je pense que ce serait une surcharge pour la tâche.

+0

Cette approche a un certain potentiel puisqu'elle exploite l'identifiant de section, ce à quoi j'aurais dû penser. Je pense que la bonne chose à faire est d'avoir le code elisp générer le fichier CSS externe. Cela vaut la peine d'enquêter. – pajato0

Questions connexes