Org-mode: Petites astuces vol 1

"Logo d'Org-mode, une licorne verte"
Figure 1 : Logo d'Org-mode

Aujourd'hui, je voudrais présenter quelques petites astuces pour Org-mode.

Ce sont de petites fonctionnalités dont j'ai peu entendu parler, mais que j'aimerais mettre en avant.

Caractères spéciaux

Certains caractère spéciaux ne sont pas facile à écrire au clavier. Comme l'alphabet grecque ou les symboles mathématique.

Org-mode propose une solution simple: Écrire le caractère spécial en toute lettre et le préfixer avec le caractère \.

Par exemple, je peux écrire \Omega pour représenter la lettre grecques Ω.

Un tel mot est appelé une entité.

Lors de l'exportation vers HTML, ou LaTeX/PDF, l'entité sera convertie vers sa version HTML, ou LaTeX, si nécessaire.

Par exemple, \Omega restera \Omega en LaTeX mais deviendra Ω si convertit en HTML.

Pour obtenir la liste des entités connus par Org-mode, on peut utiliser la commande org-entities-help. La liste complète des entités sera affichée dans une nouvelle fenêtre, avec leur équivalent LaTeX, HTML et UTF-8.

Il est aussi possible de définir de nouvelles entités, avec la variable Emacs nommée org-entities-user. Les détails sur cette variable sont accessible depuis Emacs, avec le raccourcis clavier C-h v suivit de org-entities-user.

Source: Manuel Org-mode, section 12.4 Special Symbols

Aperçu des entités, exposants et indices

Dans un buffer Org-mode, la commande org-toggle-pretty-entitties affiche un aperçu des entités. Chaque entité sera remplacée par sa version UTF-8. L'aperçu s'applique aussi aux exposants et indices.

Il s'agit uniquement d'un aperçu visuel: Le texte d'origine n'est pas modifié, seulement sont affichage.

La commande est aussi accessible avec le raccourcis C-c C-x \. Et elle peut être activée par défaut en mettant la variable org-pretty-entities à t.

Sources:

Exemples et code source

Numérotation des lignes

Il est possible de numéroter les lignes des blocs d'exemple et de code source. En ajoutant le paramètre de bloc -n, la numérotation sera visible sur la version exportée du document Org-mode.

Par exemple:

#+begin_src python -n
  print("Petit exemple sur plusieurs lignes")
  a = 2
  b = 3
  a + b
#+end_src

Optionnellement, on peut définir la valeur de la première ligne en l'écrivant après le -n. Par exemple, -n 10 et le bloc commencera à numéroter les lignes à partir de 10.

Un bloc peut aussi continuer la numérotation du bloc précédent avec le paramètre +n. Associé à un chiffre, on définit un saut dans la numérotation des lignes.

Par exemple, si le précédent bloc numérote sa dernière ligne 17 et que le bloc actuel à le paramètre +n 20, alors sa première ligne sera numérotée 37.

Source: Manuel Org-mode, section 12.6 Literal Examoles

Références

Dans les blocs d'exemples et de code source, on peut placer des labels. Ensuite, dans un texte, on peut créer un lien vers un label pour y faire référence.

Pour ajouter un label, on commence par éditer un bloc avec la commande org-edit-special (raccourcis C-c '). Ensuite, on place le curseur d'écriture sur la ligne où on veut insérer le label et on enregistrer un nouveau lien avec la commande org-store-link. Emacs demandera un nom pour ce nouveau label.

Le label sera visible dans le bloc, avec la syntaxe (ref:label_name), où label_name sera le nom donné au label. Ce label sera ignoré lors de l'exécution ou l'extraction du bloc. Mais il sera préservé sur le document exporté.

Ensuite, pour faire référence à ce label depuis le texte, on appelle la commande org-insert-link (raccourcis C-c C-l) et on choisit le dernier lien enregistré.

Exemple:

#+begin_src python
  #!/usr/bin/env python


  def main(): (main)
      pass


  if __name__ == '__main__':
      main()
#+end_src

Voir la fonction (main)

Une fois exporté, par exemple vers HTML ou PDF, le lien aura comme description le nom du label. Si le bloc à le paramètre -r, alors le lien dans le texte aura pour description le numéro de ligne où se trouve le label. Et le label ne sera plus visible sur l'exportation.

Si la syntaxe des labels entre en conflit avec le langage du bloc de code source, et que Org-mode n'arrive plus à faire la différence entre le code et les labels : On peut modifier la syntaxe des labels avec le paramètre de bloc -l. Exemple ~l "<%s>. %s représente le nom du label.-

Source: Manuel Org-mode, section 12.6 Literal Examples

Consulter des flux RSS depuis Org-mode

On peut importer un ou plusieurs flux RSS dans un document Org-mode. Chaque entrée d'un flux deviendra une note Org-mode.

Pour configurer les flux à convertir, on édite la variable org-feed-alist. C'est une liste, dont chaque élément représente un flux. Chaque flux est lui-même représenté par une liste de 4 éléments minimum:

(Nom URL Fichier Section)

  1. Nom: Le nom du flux
  2. URL: URL du flux
  3. Fichier: Fichier Org-mode vers lequel importer le flux
  4. Section: Dans quel section du fichier importer le flux

On peut définir plus de paramètres, comme un filtre, des fonctions à exécuter dans certains cas, choisir un analyseur de flux Atom, etc. Pour plus d'information, je t'invite à regarder la doc-string de la variable org-feed-alist, avec le raccourcis C-h v.

Après avoir définit un ou plusieurs flux, leur importation ou mise à jour peut se fait de deux façon:

  • Commande org-feed-update-all: Met à jour tous les flux
  • Commande org-feed-update: Demande quel flux mettre à jour

Pour ouvrir le fichier Org-mode d'un flux importé, on peut utiliser la commande org-feed-goto-inbox.

Source: Manuel Org-mode, section 10.3 RSS Feeds

Définir la classe HTML d'une section

Pour chaque section Org-mode, la propriété HTML_CONTAINER_CLASS sert à définir la classe HTML de la section. Le section entière, y compris les sections enfants, sera placée dans un conteneur ayant pour classe la valeur donnée à la propriété.

Très pratique si on veut définir des règles CSS spécifiques à une ou plusieurs sections. Par exemple, si sûr une page les sections représentent des livres et qu'on souhaite une mise en page particulière.

Pour attribuer une classe à un titre uniquement, on utilise la propriété HTML_HEADLINE_CLASS. Et pour définir l'identifiant du titre, on utilise CUSTOM_ID.

Source: Manuel Org-mode, section 13.9.13 CSS support

Afficher les étiquettes sur l'exportation

Par défaut, les étiquettes attachées à une section sont préservées lors de l'exportation d'un document Org-mode.

Pour les désactiver, on utilise l'option tags dans le buffer Org-mode qu'on exporte.

Par exemple:

#+options: tags:nil

Trois valeurs sont possibles:

  • t: Étiquettes visible sur les titres de section et la table des matières
  • not-in-toc: Étiquettes visible uniquement sur les titres de section, pas dans la table des matières
  • nil: Aucune étiquette préservée

Il est aussi possible de définir ce paramètre pour toutes les exportations, avec la variable org-export-with-tags.

Source: Manuel Org-mode, section 13.2 Export Settings

Afficher les propriétés sur l'exportation

Comme avec les étiquettes, on peut afficher les propriétés de section sur la version exporté d'un document Org-mode.

L'option prop sert à contrôler cette affichage. Associé à la valeur t, toutes les propriétés sont préservées. On peut aussi choisir quel propriété garder, en associant une liste respectant le format ("propriété 1" "propriété 2").

Par exemple, sur un document où chaque section est un livre et qu'on veut garder le nom de l'auteurice et le numéro de volume:

#+options: prop("Auteurice" "Volume")

On peut ainsi faire le tri entre les propriétés utiles aux lecteurices, et celles servant à la mise en page.

Il est possible de définir ce paramètre pour toutes les exportations, avec la variable org-export-with-properties.

Source: Manuel Org-mode, section 13.2 Export Settings

Table des matières en début de chapitre

Pour insérer une table des matières en début de chapitre, on écrit simplement ceci au début du chapitre en question:

#+TOC: headlines local

Pour contrôler la "profondeur" de la table des matières, ajouter un chiffre après le paramètre headlines. Il indiquera jusqu'à combien de niveau la table descendra.

La table des matière propose encore plus d'options, je t'invite à lire sa page de manuel.

Source: Manuel Org-mode, section 13.3 Table of Contents

Image utilisée

  • Logo d'Org-mode: Par Christophe Bataillon, licence "GNU Free Documentation License version 1.3 or later"

Mot de la fin

Voilà les quelques astuces que je voulais partager.

Ce billet de blog est un peut long, et passe vite d'un sujet à l'autre. Mais le séparer par sujet aurait donné des billets trop court pour certains. Et m'aurait incité à plus documenter d'autres fonctionnalités. Ce que la documentation fait déjà très bien.