Org-mode: Petites astuces vol 1
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
.
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.
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.-
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)
- Nom: Le nom du flux
- URL: URL du flux
- Fichier: Fichier Org-mode vers lequel importer le flux
- 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
.
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
.
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èresnot-in-toc
: Étiquettes visible uniquement sur les titres de section, pas dans la table des matièresnil
: 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
.
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
.
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.
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.