commit 02f2447509d5d67eb47b0965bdf7a6902db4ecc1
parent 69bc8acfd78841f996b0c92ed07805c59fb7f95e
Author: Chris Bracken <chris@bracken.jp>
Date: Fri, 27 Mar 2026 19:45:29 +0900
Add letter_en.typst template
Diffstat:
| A | letter_en.typst | | | 114 | ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
1 file changed, 114 insertions(+), 0 deletions(-)
diff --git a/letter_en.typst b/letter_en.typst
@@ -0,0 +1,114 @@
+// --------------------------------------------------------
+// Template Definition
+// --------------------------------------------------------
+#let letter(
+ sender: none,
+ sender-address: none,
+ date: none,
+ recipient: none,
+ opening: none,
+ closing: none,
+ body
+) = {
+ // Configure paper and margins.
+ set page(
+ paper: "a4",
+ margin: (top: 3cm, bottom: 1.5cm, left: 3.5cm, right: 3.5cm),
+ )
+
+ // Configure font and alignment.
+ set text(font: "STIX Two Text", size: 11pt, lang: "en")
+ set par(justify: false)
+
+ // Emulate LaTeX's default letter paragraph spacing (\parskip).
+ set par(spacing: 1.2em)
+
+ // Sender's return address.
+ if sender-address != none {
+ align(right, sender-address)
+ v(1em)
+ }
+
+ // Date.
+ if date != none {
+ date
+ v(1em)
+ }
+
+ // Recipient name and address.
+ if recipient != none {
+ recipient
+ v(2em)
+ }
+
+ // Body of the letter.
+ if opening != none {
+ opening
+ v(1.2em)
+ }
+
+ body
+
+ if closing != none {
+ v(1.2em)
+ closing
+
+ v(4em)
+ sender
+ }
+}
+
+// --------------------------------------------------------
+// Document Implementation
+// --------------------------------------------------------
+#show: letter.with(
+ sender: "Firstname Lastname",
+ sender-address: [
+ Firstname Lastname \
+ 3-38 Akasaka 7-chome \
+ Minato-ku, Tokyo, \
+ 107-8503, Japan \
+ +81~03-1234-5678
+ ],
+ date: [28~October 2023],
+ recipient: [
+ Firstname Lastname \
+ Organisation Name \
+ 123 Av OtherStreet \
+ Montréal, Québec, \
+ H1A~3R2, Canada
+ ],
+ opening: [Dear Sir or Madam,],
+ closing: [Yours sincerely,]
+)
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam fermentum
+lacinia odio, quis tincidunt neque suscipit ut. Donec neque nisl, volutpat
+sed posuere eget, congue et odio. Donec eu neque tortor. Pellentesque
+lacinia, arcu vitae molestie euismod, lectus est sodales nisi, id vehicula
+nisl massa vel felis. In hac habitasse platea dictumst. Aliquam dui erat,
+bibendum et posuere eget, placerat sit amet ipsum. Phasellus congue, est ac
+cursus tempor, tellus nibh rhoncus arcu, sit amet scelerisque magna turpis
+nec turpis. Sed lacinia orci ac nunc convallis feugiat. Sed molestie, nisl et
+scelerisque consequat, elit quam pellentesque sem, eu pharetra mi elit quis
+libero. Mauris porta urna in orci sagittis fermentum. Aenean nec elit id
+ligula venenatis ornare. Nam urna neque, aliquet in sollicitudin sed,
+molestie ut tellus.
+
+Vivamus consectetur, mauris sit amet pharetra pharetra, tortor ante dignissim
+purus, vitae pellentesque ante lorem eu magna. Morbi at leo leo. Class aptent
+taciti sociosqu ad litora torquent per conubia nostra, per inceptos
+himenaeos. Sed feugiat volutpat risus, a ullamcorper magna dictum quis. Nam
+dictum enim et lectus consectetur consectetur. Vestibulum vitae eros vel elit
+venenatis ornare ac sed felis. Nunc et laoreet libero. Cras ut fermentum dui.
+
+Thank you for your time and consideration. I look forward to your reply.
+
+// --------------------------------------------------------
+// Postscripts and Enclosures
+// --------------------------------------------------------
+// #v(2em)
+// *P.S.* Something or other I neglected to mention earlier.
+
+// #v(1em)
+// *Encl:* Passport application