Skip to content

Commit 7012563

Browse files
authored
formalettre:0.2.0 (#3096)
1 parent d15883f commit 7012563

File tree

6 files changed

+807
-0
lines changed

6 files changed

+807
-0
lines changed
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
BSD 3-Clause License
2+
3+
Copyright (c) 2024, Brendan Chabannes <brendan.chabannes@wyrm.fr>
4+
2025, Tanguy Ortolo <tanguy+typst@ortolo.eu>
5+
6+
Redistribution and use in source and binary forms, with or without
7+
modification, are permitted provided that the following conditions are met:
8+
9+
1. Redistributions of source code must retain the above copyright notice, this
10+
list of conditions and the following disclaimer.
11+
12+
2. Redistributions in binary form must reproduce the above copyright notice,
13+
this list of conditions and the following disclaimer in the documentation
14+
and/or other materials provided with the distribution.
15+
16+
3. Neither the name of the copyright holder nor the names of its
17+
contributors may be used to endorse or promote products derived from
18+
this software without specific prior written permission.
19+
20+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
# Formalettre : writing french letters with typst
2+
3+
4+
5+
Un template destiné à écrire des lettres selon une typographie francophone, et inspiré du package LaTeX [lettre](https://ctan.org/pkg/lettre).
6+
7+
Pour utiliser le template, il est possible de recopier le fichier exemple.
8+
9+
10+
11+
## Documentation des variables
12+
13+
14+
15+
### Expéditeur
16+
17+
- `expediteur.nom` : nom complet l'expéditeur·ice, **requis**.
18+
- `expediteur.adresse` : addresse, sans la commune, sous forme de contenu ou de liste s'il y a plusieurs lignes, **requis**.
19+
- `expediteur.commune` : code postal et commune de l'expéditeur·ice, **requis**.
20+
- `expediteur.pays` : pays de l'expéditeur⋅ice, *facultatif*.
21+
- `expediteur.telephone` : le numéro de téléphone fourni sera cliquable. *Chaîne de caractères*, *facultatif*.
22+
- `expediteur.email` : l'email fourni sera affiché en police mono et cliquable. *Chaîne de caractères*, *facultatif*.
23+
- `expediteur.signature` : précise le nom à afficher en signature de fin de lettre. Par défaut, cela reprend le prénom et le nom, *facultatif*.
24+
- `expediteur.image_signature` : peut être rempli avec un contenu de type `image("signature.png")` pour intégrer l'image d'une signature numérisée. *Facultatif*
25+
26+
### Destinataire
27+
28+
- `destinataire.nom` : nom ou titre du ou de la destinataire, **requis**.
29+
- `destinataire.adresse` : adresse, sans la commune, sous forme de contenu ou de liste s'il y a aucune ou plusieurs lignes, **requis**.
30+
- `destinataire.commune` : code postal et commune du ou de la destinataire, **requis**.
31+
- `destinataire.pays` : pays du ou de la destinataire, *facultatif*.
32+
33+
### Intermédiaire
34+
35+
Dans le cas d'une lettre transmise par voie hiérarchique, on peut spécifier
36+
l'intermédiaire, qui sera indiqué par la mention « s/c de » (sous couvert de)
37+
dans l'en-tête de la lettre, et qui apparaîtra comme destinaitaire sur
38+
l'enveloppe, si on en imprime une.
39+
40+
- `intermediaire.nom` : nom ou titre de l'intermédiaire, **requis**.
41+
- `intermediaire.adresse` : adresse, sans la commune, sous forme de contenu ou de liste s'il y a plusieurs lignes, **requis** en cas de génération d'enveloppe.
42+
- `intermediaire.commune` : code postal et commune de l'intermédiaire, **requis** en cas de génération d'enveloppe.
43+
- `intermediaire.pays` : pays de l'intermédiaire, *facultatif*.
44+
45+
### Lettre
46+
47+
- `objet` : l'objet du courrier, *facultatif*.
48+
- `date` : date à indiquer sous forme libre, **requis**.
49+
- `lieu` : lieu de rédaction, **requis**.
50+
- `envoi` : informations d'envoi, par exemple « Recommandé avec accusé de réception numéro XXXXXXXX », *facultatif*.
51+
- `ref` : référence du courrier, *facultatif*.
52+
- `vref` : votre référence (référence utilisée par le destinataire), *facultatif*.
53+
- `nref` : notre référence (référence utilisée par l'expéditeur), *facultatif*.
54+
- `appel` : formule d'appel, autrement dit formule initiale, désactivée par défaut. *Facultatif*.
55+
- `salutation` : formule de salutation, autrement dit formule finale, désactivée par défaut. *Facultatif*.
56+
- `ps` : permet de préciser un post-scriptum (ou plusieurs), *facultatif*.
57+
- `pj` : permet d'indiquer la présence de pièces jointes. Il est possible d'en faire une liste, par exemple :
58+
59+
```typc
60+
pj: [
61+
+ Dossier n°1
62+
+ Dossier n° 2
63+
+ Attestation
64+
]
65+
```
66+
67+
- `cc` : permet d'indiquer les destinataires additionnels de cette lettre, sous la forme d'une liste, *facultatif*.
68+
- `marges` : indiquer deux dimensions pour ajouter des marges supplémentaires à gauche et à droite du corps de la lettre: `(1cm, 1cm)` par défaut, *facultatif*.
69+
- `marque_pliage` : `false` par défaut, mettre à `true` pour imprimer une petite ligne indiquant où plier la page pour la mettre dans une enveloppe DL ou C5/6. *Facultatif*.
70+
- `enveloppe` : permet de générer une page à imprimer sur une enveloppe de la taille indiquée, qui peut être une chaîne contenant le nom d'un format courant (`c4`, `c5`, `c6`, `c56` ou `dl`) ou une spécification manuelle sous la forme `(<longueur>, <largeur>)`. *Facultatif*.
71+
- `affranchissement` : fournir une chaîne (code d'affranchissement) ou un contenu tel que `image("timbre.png")` pour imprimer un affranchissement dans la zone idoine de l'enveloppe. *Facultatif*.
72+
- `capitalisation` : indiquer un niveau de capitalisation des adresses, *facultatif* :
73+
- 0 (défaut) : ne pas modifier les adresses fournies,
74+
- 1 : mettre en petites majuscules les communes et pays,
75+
- 1.5 : mettre en majuscules les communes et pays,
76+
- 2 : mettre en petites majuscules les adresses, communes et pays,
77+
- 2.5 : mettre en majuscules les adresses, communes et pays,
78+
- 3 : mettre en petites majuscules l'ensemble des blocs d'adresses (noms, adresses, communes et pays),
79+
- 3.5 : mettre en majuscules l'ensemble des blocs d'adresses (noms, adresses, communes et pays).
80+
81+
Le texte de la lettre proprement dite se situe après la configuration de la lettre.
82+
83+
À la fin de la lettre, il est possible de décommenter les deux dernières lignes pour ajouter une image en guise de signature. Veillez dans ce cas à positionner la varibale `expediteur.signature` à `true`.
84+
85+
86+
## Notes
87+
88+
### Signature
89+
90+
Par défaut, le prénom et le nom de l'expéditeur sont repris pour la signature, mais on peut indiquer spécifiquement ce qu'on veut en renseignant l'option `signature`, par exemple pour signer avec son seul prénom.
91+
92+
L'option `signature` permet également de préciser plusieurs signataires, sous la forme d'une liste :
93+
94+
```typc
95+
expediteur: (
96+
…,
97+
signature: ([Pierre], [Paul], [Jacques]),
98+
)
99+
```
100+
101+
Dans le cas ordinaire d'un signataire unique, on peut également inclure une image de signature numérisée avec l'option `image_signature`. Celle-ci prend un contenu libre, ce qui suffit à inclure simplement une image à sa taille naturelle `image("signature.png")` ou au besoin de régler sa taille et de l'espacer :
102+
103+
```typc
104+
expediteur: (
105+
…,
106+
image_signature: pad(
107+
top: 10mm, bottom: 5mm,
108+
image("signature.png", height: 3cm)
109+
),
110+
)
111+
```
112+
113+
### Post-scriptum
114+
115+
On peut préciser un post-scriptum, sous forme de texte ou de contenu :
116+
117+
```typc
118+
ps: [Au fait, j'ai pris la liberté de prendre rendez-vous pour nous deux samedi prochain.]
119+
```
120+
121+
On peut également définir plusieurs post-scriptums en fournissant une liste. Ils apparaîtront sous le nom de « P.-S. », « P.-P.-S. », etc., donc n'en abusez pas :
122+
123+
```typc
124+
ps: (
125+
"Au fait, …",
126+
"N'oubliez pas non plus que…",
127+
)
128+
```
129+
130+
Enfin, si vous souhaitez libeller différemment les post-scriptums, vous pouvez les fournir sous forme de dictionnaire :
131+
132+
```typc
133+
ps: (
134+
"PS": "Au fait…",
135+
"PS2" : "N"oubliez pas non plus que…",
136+
)
137+
```
138+
139+
### Pièces jointes
140+
141+
Vous pouvez préciser les pièces jointes sous forme de contenu libre :
142+
143+
```typc
144+
pj: [
145+
+ Dossier n°1
146+
+ Dossier n° 2
147+
+ Attestation
148+
]
149+
```
150+
151+
Vous pouvez également fournir une liste, auquel cas elles seront indiquées sous forme de liste verticale sans marqueur :
152+
153+
```typc
154+
ps: ("Dossier n°1", "Dossier n°2", "Attestation")
155+
```
156+
157+
### Affranchissement
158+
159+
Les services postaux de plusieurs pays proposent des services en ligne d'affranchissement à domicile. Il s'agit :
160+
161+
* soit de codes d'affranchissement à écrire sur l'enveloppe ;
162+
* soit de timbres à imprimer.
163+
164+
Le premier cas est le plus facile à intégrer sur une enveloppe générée par formalettre, en précisant :
165+
166+
```typc
167+
affranchissement: "<code d'affranchissement>",
168+
```
169+
170+
Dans le second cas, les timbres à imprimer ne sont malheureusement pas fournis sous forme d'image individuelle, mais dans un document PDF à imprimer sur feuille A4, sur planche d'étiquette ou sur feuille A4. Pour l'intégrer à l'enveloppe générée par formalettre, vous devez alors en extraire une image correspondant au timbre seul, puis remplir ainsi les paramètres de formalettre :
171+
172+
```typc
173+
affranchissement: image("timbre.png"),
174+
```

0 commit comments

Comments
 (0)