Org-mode: Écrire une lettre

Hello.

Un nouveau billet de blog. Cette fois, je voudrais te montrer comment utiliser Org-mode pour écrire une lettre.

Prérequis

Connaissances

Pour comprendre cette article, il faut avoir quelques notions de base d'Org-mode et d'Emacs. Savoir écrire un document Org-mode, avec plusieurs sections et attacher des étiquettes sera suffisant.

Il faut aussi connaitre le format suivant pour les raccourcis clavier:

  • C-i: Correspond à [CTRL] + [i]
  • M-x: Correspond à [Alt] + [x]
  • C-c c: Correspond à [Ctrl] + [c], relâcher, puis [c]
  • C-c C-e: Correspond à [Ctrl] + [c], relâcher, puis [Ctrl] + [e]

Logiciels

Pour écrire des lettres avec Org-mode, il faut:

  • Emacs
  • Org-mode (fourni avec Emacs)
  • TeX Live, dans sa version full
  • La classe LaTeX scrlttr2: Koma-Script ‘letter’ (fourni avec TeX Live full)

Pour l'installation, si tu utilise une distribution GNU/Linux, Emacs et Tex Live sont certainement proposés sur ses dépôts.

Si tu utilise Mac OS ou Windows, je te renvoie aux sites web d'Emacs et de TeX Live.

Org-mode est fourni avec Emacs et Koma-Script ‘letter’ avec TeX Live full.

Préparations

Activation de ox-koma-letter

Pour exporter un document Org-mode vers une lettre, on va utiliser l'exportateur koma-letter, fourni par le paquet Emacs ox-koma-letter. Ce paquet vient avec Org-mode, il n'est pas nécessaire de l'installer.

Pour que les options d'exportation koma soient visibles dans le menu d'exportation d'Org-mode, il faut charger ox-koma-letter.el avant org.el.

Pour ça, on doit seulement ajouter ceci au fichier /.emacs.d/init.el:

(require 'ox-koma-letter)

La fonction Elisp (require) va charger la fonctionnalité ox-koma-letter, si ce n'est pas déjà fait. Il faut ajouter ce chargement avant toute instruction Elisp qui chargerait org. Si tu en as une dans ton /.emacs.d/init.el.

Langue française

Pour que les dates soient traduites en français, je te renvoie à mon précédent billet sur l'exportation PDF et le français.

Une première lettre

On va commencer par créer un document Org-mode et y écrire ceci:

#+TITLE:          Teste de lettre
#+LANGUAGE:       fr
#+AUTHOR:         Fox
#+FROM_ADDRESS:   4 rue de nulle part\\1000 Lausanne
#+TO_ADDRESS:     OCP\\2 chemin des virgules\\1000 Lausanne
#+OPENING:        Madame, Monsieur
#+CLOSING:        Avec mes meilleures salutations
#+DATE:           \today
#+PLACE:          Lausanne
#+LCO:            SN
#+OPTIONS:        


Exemple de lettre écrite avec Org-mode. Exemple de lettre écrite avec
Org-mode. Exemple de lettre écrite avec Org-mode. Exemple de lettre
écrite avec Org-mode. Exemple de lettre écrite avec Org-mode. Exemple
de lettre écrite avec Org-mode. Exemple de lettre écrite avec
Org-mode. Exemple de lettre écrite avec Org-mode. Exemple de lettre
écrite avec Org-mode. Exemple de lettre écrite avec Org-mode. Exemple
de lettre écrite avec Org-mode. Exemple de lettre écrite avec
Org-mode.


Exemple de lettre écrite avec Org-mode. Exemple de lettre écrite avec
Org-mode. Exemple de lettre écrite avec Org-mode. Exemple de lettre
écrite avec Org-mode. Exemple de lettre écrite avec Org-mode. Exemple
de lettre écrite avec Org-mode.

Dans ce document, on peut voir 2 parties: Des mots clés, qui vont configurer l'exportation, et le corps du document, qui sera le corps de la lettre.

Ici, les mots-clés définissent les options suivantes:

  • Le titre (TITLE) de la lettre
  • La langue (LANGUAGE), ici français
  • Le nom de l'auteur, ou autrice, (AUTHOR)
  • L'adresse de la personne qui envoie la lettre (FROM_ADDRESS), avec les caractères \\ pour forcer les retours à la ligne
  • L'adresse de destination (TO_ADDRESS), avec le nom du ou de la destinataire
  • La formule d'ouverture (OPENING) et de fermeture (CLOSING) de la lettre
  • La date (DATE), ici j'utilise la macro LaTeX \today
  • Le lieu (PLACE)
  • Le format de la lettre (LCO), j'en reparle plus loin

Exportation vers un PDF

Pour exporter notre lettre, il faut appeler le raccourcis clavier suivant: C-c C-e k p.

La lettre sera créée au format PDF. Et elle reprendra le nom du document Org-mode.

Si on veut voir le document PDF avec Emacs après l'exportation, on peut aussi appeler ce raccourcis clavier: C-c C-e k o.

Voici à quoi ressemble la lettre d'exemple:

"Image d'une lettre suivant le format suisse, description dans le texte sous l'image"

Dans cette exemple, la lettre suit le format Suisse:

  • Adresse de la personne qui envoie, dans le coin en haut à gauche
  • Adresse de destination en haut à droite, à la bonne hauteur pour les enveloppes à fenêtre
  • Au dessus du titre, à droite: La date et le lieu
  • Le titre, centré
  • La formule d'ouverture
  • Le corps
  • La formule de fermeture
  • Le nom de l'auteur, légèrement décalé vers la droite

On remarque aussi des petites marques, sur le coté gauche, pour aider à plier la lettre. On verre plus loin comment les retirer.

Bonus: Fonctionnement de l'exportation

Le raccourcis clavier C-c C-e va appelle la fonction Emacs (org-export-dispatch). Cette fonction te demande vers quel format tu souhaites exporter. Pour sélectionner an format, il faut écrire une ou plusieurs lettres.

Pour nous aider, (org-export-dispatch) ouvre une fenêtre qui présente les options disponibles. Voici à quoi elle ressemble:

"Capture d'écran de la fenêtre d'aide affichée par org-export-dispatch, listant les formats disponibles"

Quand on choisi Export with KOMA Scrlttr2 (k) puis As PDF file (p), Emacs va:

  • Exporter le document Org-mode vers le format LaTeX, en utilisant un template spécifique
  • Convertir le document LaTeX vers le format PDF en appelant la commande pdflatex

Le template utilisé pour créer le document LaTeX définit:

  • L'utilisation de la classe LaTeX scrlttr2
  • Les différents paquets LaTeX nécessaires
  • Les options utilisées par la classe, tel que le titre, les adresses, le lieu, etc
  • Un bloc document, avec:
    • L'ouverture
    • Le corps
    • La fermeture

Comme l'exportation vers une lettre utilise l'exportation LaTeX et PDF, toutes les options que tu as définies pour ces formats sont appliquées.

Personnalisation de la lettre

Format de la lettre

Il est possible de choisir le format de la lettre, avec le mot clé LCO placé en haut du document Org-mode.

Exemple:

#+TITLE:          Teste de lettre
#+LCO:            DIN

Ce mot clé peut être associé à un des codes suivants:

Code Format
DIN Format standard Allemand DIN 676, feuille A4
DINmtext Même format que DIN, avec plus de texte sur la première page
KakuLL Format Japonnais, feuille A4, adapté aux enveloppes Kaku A4
KOMAold Lettre A4 utilisant l'ancien agencement de la classe scrlettr
NF Format Français, standard NF Z 11-001
NipponEH Format Japonnais, feuille A4, adapté aux enveloppes Chou ou You 3
NipponEL Même format que NipponEH
NipponLH Même format que NipponEH
NipponLL Même format que NipponEH
NipponRL Même format que NipponEH
SN Format Suisse, feuille A4, standard SN 010 130
SNleft Même format que SNleft, mais adresse de destination à gauche
UScommercial9 Format USA, feuille "American letter"
UScommercial9DW Même format que UScommercial9

Il est aussi possible de fournir un format personnalisé.

Pour plus d'informations sur comment utiliser un format personnalisé, ou sur les différences entre les formats Japonnais, je t'invite à lire la documentation officielle de la classe LaTeX scrlttr2.

À noter qu'on peut définir le format par défaut des lettres avec la variable Emacs org-koma-letter-class-option-file. Par exemple, en ajoutant cette ligne de code Elisp dans ~/.emacs.d/init.el:

(setq org-koma-letter-class-option-file "SN")

La chaine de caractère correspond au code du format qu'on souhaite utiliser.

Le mot clé LCO définit en début de document Org-mode prend le pas sur la variable Emacs.

Ajout du téléphone, d'une URL et de l'e-mail

Pour définir un numéro de téléphone, une URL ou un e-mail avec les mots-clés suivants:

  • PHONE_NUMBER: Numéro de téléphone
  • URL: URL vers, par exemple, son site web
  • EMAIL: Adresse E-mail

En plus de ces mots-clés, il faut aussi indiquer qu'on veut les inclure dans la lettre. Pour cela, on utilise le mot-clé OPTIONS comme ceci:

#+OPITONS: phone:t url:t email:t

La lettre t correspond à True, ce qui active l'option. Pour désactiver une option, il faut l'associer à nil.

Retirer les marques de pliage

Pour désactiver les petites marques de pliage, il faut définir l'option foldmarks à nil en utilisant le mot clé OPTIONS.

Par exemple:

#+OPITONS: foldmarks:nil

Sections, pièces jointes, postscriptum, etc

En générale, les sections sont ignorées lors de l'exportation.

À l'exception des sections avec une des étiquettes suivantes:

Étiquette Utilisation
ps Postscriptum
cc Copie-carbone
encl Pièces jointes
after_closing Après la fermeture
after_letter Après la lettre

Si une section a l'étiquette ps, son corps sera ajouté en tant que postscriptum à la lettre.

Si une section a l'étiquette cc, son corps sera ajouté à la fin de la lettre pour indiquer à qui une copie de la lettre sera envoyée. On peut utiliser une liste pour représenter plusieurs personnes.

Si une section a l'étiquette encl, son corps sera ajouté pour indiquer la liste des pièces jointes. Dans le document Org-mode, on peut utiliser une liste ou simplement du texte. Très utile sur une lettre de motivation, pour indiquer qu'on a joint son CV et une copie de ses diplômes.

Si une section a l'étiquette after_closing, son corps sera ajouté après la formule de fermeture de la lettre.

Et si une section a l'étiquette after_letter, son corps sera ajouté après la lettre.

Toutes les options et mots-clés

En plus des mots-clés disponibles pour une exportation au format LaTeX, on peut utiliser des mots-clés spécifiques à notre lettre.

Je t'en ai présenté quelques uns depuis le début de ce billet, mais en voici un résumé avec quelques ajouts (la variable Emacs peut être utilisée pour définir une valeur par défaut):

Mot clés Description Variable Emacs
TITLE Titre de la lettre  
SUBJECT Sujet de la lettre  
AUTHOR Auteur ou autrice de la lettre org-koma-letter-from-sender
FROM_ADDRESS Adresse de l'expéditeur ou expéditrice org-koma-letter-from-address
TO_ADDRESS Adresse de destination  
PLACE Lieu de la lettre org-koma-letter-place
DATE Date de la lettre  
PHONE_NUMBER Numéro de téléphone org-koma-letter-phone
URL Une URL org-koma-letter-url
EMAIL Adresse E-mail org-koma-letter-email
OPENING Formule d'ouverture de la lettre org-koma-letter-opening
CLOSING Formule de fermeture de la lettre org-koma-letter-closing
SIGNATURE Signature de l'expéditeur ou expéditrice org-koma-letter-signature
FROM_LOGO Logo de l'expéditeur ou expéditrice org-koma-letter-from-logo
LOCATION Informations supplémentaires sur expéditeur ou expéditrice org-koma-letter-location
LCO Format de la lettre org-koma-letter-class-option-file

En plus des mots-clés, les options suivantes peuvent être définies avec le mot-clé OPTIONS (la variable Emacs peut être utilisée pour définir une valeur par défaut):

Option Description Valeur par défaut Variable Emacs
phone Ajouter le numéro de téléphone nil org-koma-letter-use-phone
url Ajouter l'URL nil org-koma-letter-use-url
email Ajouter l'E-mail nil org-koma-letter-use-email
foldmarks Ajouter les marques le pliage t org-koma-letter-use-foldmarks
subject Si et où ajouter le sujet sur la lettre t org-koma-letter-subject-format
place Ajouter le lieu, à coté de la date t org-koma-letter-use-place
backaddress Ajouter les marques de pliage nil org-koma-letter-use-backaddress
from-logo Ajouter le logo nil org-koma-letter-use-from-logo
location Ajouter le contenue du mot-clé LOCATION t org-koma-letter-location
after-closing-order Ordre tags placés après la fermeture (after_closing ps encl cc) org-koma-letter-special-tags-after-closing
after-letter-order Ordre tags placés après la lettre (after_letter) org-koma-letter-special-tags-after-letter

Pour l'option subject, les valeurs suivantes sont disponibles:

Valeur Résultat
t Ajouter le sujet, selon l'option par défaut du format
nil Ne pas ajouter le sujet
afteropening Sujet après l'ouverture
beforeopening Sujet avant l'ouverture
centered Sujet centré
left Sujet justifié à gauche
right Sujet justifié à droite
titled Ajouter titre et description au sujet
untitled Ne pas ajouter titre et description au sujet
underlined Sous-ligner le sujet

Plusieurs lettres dans un document Org-mode

Jusque ici, on a vu comment écrire une lettre avec un document Org-mode. Mais il est aussi possible d'avoir plusieurs lettres écrites dans un seul document Org-mode.

Définition des lettres et de leurs paramètres

Pour avoir plusieurs lettre dans un même document Org-mode, il faut créer une section pour chaque lettre. Les mots clés peuvent être définis de 2 façons:

  • En haut du document, comme on l'a vu jusqu'ici
  • Sous forme de propriétés rattachées à la section représentant une lettre

Dans le premier cas, le mot clés sera appliqué pour toutes les lettres du document. Utile pour ne pas devoir se répéter à chaque lettre.

Dans le second cas, il faut préfixer chaque propriété avec "EXPORT_". Les mots-clés définis comme propriétés ne seront appliqués qu'à la section.

Le titre des lettres est définit par le titre de la section. Pour définir le nom du fichier PDF vers lequel chaque lettre est exportée, tu peux utiliser la propriété EXPORT_FILE_NAME.

Enfin, les status (TODO, DONE, etc) et étiquettes placées sur une section ne seront pas exportées. Très utile pour gérer le suivie d'une lettre. Un peu plus loin, j'explique aussi comment ajouter des notes à une lettre sans que celles-ci ne soient exportés.

Exportation

Pour exporter une des lettres, il faut placer le curseur d'écriture sur la section et entrer le raccourcis clavier suivant: C-c C-e C-s k p.

Ceci va aussi appeler l'exportateur de Org-mode, mais en ajoutant C-s on limite l'exportation à la section où se trouve notre curseur.

N'oublie pas la partie C-s, sinon tu exportera tout le document Org-mode comme une seule lettre.

Exemple

Voici une reprise de l'exemple montré plus haut dans ce billet, mais adapté pour former 2 lettres:

* Lettre numéro 1
:PROPERTIES:
:EXPORT_LANGUAGE:       fr
:EXPORT_AUTHOR:         Fox
:EXPORT_FROM_ADDRESS:   4 rue de nulle part\\1000 Lausanne
:EXPORT_TO_ADDRESS:     OCP\\2 chemin des virgules\\1000 Lausanne
:EXPORT_OPENING:        Madame, Monsieur
:EXPORT_CLOSING:        Avec mes meilleures salutations
:EXPORT_DATE:           \today
:EXPORT_PLACE:          Lausanne
:EXPORT_LCO:            SN
:EXPORT_OPTIONS:        
:END:

Exemple de lettre écrite avec Org-mode. Exemple de lettre écrite avec
Org-mode. Exemple de lettre écrite avec Org-mode. Exemple de lettre
écrite avec Org-mode. Exemple de lettre écrite avec Org-mode. Exemple
de lettre écrite avec Org-mode. Exemple de lettre écrite avec
Org-mode. Exemple de lettre écrite avec Org-mode. Exemple de lettre
écrite avec Org-mode. Exemple de lettre écrite avec Org-mode. Exemple
de lettre écrite avec Org-mode. Exemple de lettre écrite avec
Org-mode.


* Lettre numéro 2
:PROPERTIES:
:EXPORT_LANGUAGE:       fr
:EXPORT_AUTHOR:         Fox
:EXPORT_FROM_ADDRESS:   4 rue de nulle part\\1000 Lausanne
:EXPORT_TO_ADDRESS:     OCP\\2 chemin des virgules\\1000 Lausanne
:EXPORT_OPENING:        Madame, Monsieur
:EXPORT_CLOSING:        Avec mes meilleures salutations
:EXPORT_DATE:           \today
:EXPORT_PLACE:          Lausanne
:EXPORT_LCO:            SN
:EXPORT_OPTIONS:        
:END:

Exemple de lettre écrite avec Org-mode. Exemple de lettre écrite avec
Org-mode. Exemple de lettre écrite avec Org-mode. Exemple de lettre
écrite avec Org-mode. Exemple de lettre écrite avec Org-mode. Exemple
de lettre écrite avec Org-mode.

Ajouter des notes sur une lettre

Pour ajouter des notes sur une lettre sans que celles-ci soient exportés, tu peux ajouter une section avec l'étiquette noexport. Elle sera ignorée lors de l'exportation, quel que soit le format.

Aller plus loin

Pour aller plus loin, je te conseil de lire:

Conclusion

Il est très facile et rapide d'écrire une lettre avec Org-mode, mais si nécessaire de nombreuses options sont disponibles pour adapter cette lettre.

La classe LaTeX scrlttr2 est très complète et mériterait que je lise sa documentation de plus près. Notamment la partie sur comment créer son format de lettre.

L'exportateur Org-mode koma-letter est dérivé de l'exportateur LaTeX. Il faudrait que je regarde comment créer son exportateur. Ça pourrait servir pour d'autres classes LaTeX ou même d'autres formats vers lesquels exporter.

Avec l'exportateur Org-mode pour le format LaTeX, il est probablement possible d'avoir le même résultat qu'avec l'exportateur koma-letter. Mais en écrivant sois-même l'en-tête et une partie du corps directement au format LaTeX. Avec l'exportateur koma-letter, on a juste à écrire quelques mots-clés ainsi que le corps sans faire de LaTeX. Et certains paramètres qu'on utilise régulièrement peuvent aussi être définit par des variables Emacs.

Une dernière astuce: Définir des snippets avec Yasnippet, pour créer automatiquement de nouvelles lettres. C'est très pratique.