Scrivere un manuale con Typst | <font color="lime">Guida a Typst</font>

Scrivere un manuale con Typst


Quando abbiamo aperto un nuovo documento di typst, cioè un file con l’estenzione .typ dobbiamo inserire il codice che definisce le istruzioni tipografiche del nostro documento.

Se vogliamo scrivere un manuale più tecnico, sarà più elaborato con intestazioni numerate, copertina e indice generale. Qui vi mostro le impostazioni del documento che ho utilizzato per scrivere la guida Scrivere con Typst, potete decidere di conservare queste impostazioni tipografiche così come sono o quando avete preso confidenza con il programma modificarle secondo i vostri gusti personali.

Quindi ora scriviamo nel documento il seguente codice per impostare tipograficamente il documento. Inseriamo un gruppo di impostazioni tipografiche alla volta.

Inseriamo le impostazioni tipografiche della pagina:

// ──────────────────────────────────────────────────────────────
//  IMPOSTAZIONI PAGINA
// ──────────────────────────────────────────────────────────────
#set page(
  paper: "a4",
  margin: (top: 2.6cm, bottom: 2.6cm, left: 2.6cm, right: 2.6cm),
  numbering: "1",
  number-align: center,
  header: context {
    let pn = counter(page).get().first()
    if pn > 6 {
      set text(size: 10pt, fill: luma(20))
      grid(
        columns: (1fr, auto),
        align(left)[Titolo manuale],
        align(right)[Pag. #pn],
      )
      v(-0.4em)
      line(length: 100%, stroke: 0.4pt + luma(20))
    }
  },
  footer: context {
    let pn = counter(page).get().first()
    if pn > 6 {
      line(length: 100%, stroke: 0.4pt + luma(20))
      v(-0.3em)
    }
  },
)

Inseriamo le impostazioni tipografiche del testo:

// ──────────────────────────────────────────────────────────────
//  IMPOSTAZIONI TESTO
// ──────────────────────────────────────────────────────────────
#set text(
  font: ("Libertinus Serif"),
  size: 12pt,
  lang: "it",
  region: "IT",
  hyphenate: true,
)

#set par(
  justify: true,
  leading: 0.75em,
  spacing: 1.15em,
)

Inseriamo le impostazioni tipografiche per lo stile dei titoli:

// ──────────────────────────────────────────────────────────────
//  STILE TITOLI
// ──────────────────────────────────────────────────────────────

// 1. Questa regola si occupa SOLO di mandare a capo i titoli di livello 1 in modo pulito

#show heading.where(level: 1): it => [
#[] 
#pagebreak(weak: true)
#it.body
]

#show heading.where(level: 1): it => {
  pagebreak(weak: true)
  it
}

// 2. Questa regola si occupa SOLO della grafica verde scuro del capitolo
#show heading.where(level: 1): it => {
  v(0.5em)
  block(
    fill: color.green.darken(65%),
    width: 100%,
    inset: (x: 1.3em, y: 1em),
    radius: 7pt,
  )[
    #set text(fill: white, size: 20pt, weight: "bold", font: ("Libertinus Serif"))
    #set par(justify: false)
    #context {
      let n = counter(heading).get()
      if it.numbering != none {
        numbering(it.numbering, ..n)
        h(0.5em)
      }
    }
    #it.body
  ]
  v(1em)
}

// Livello 2 — Sezione
#show heading.where(level: 2): it => {
  v(1.2em)
  block[
    #set text(size: 18pt, weight: "bold", fill: color.green.darken(65%))
    #set par(justify: false)
    #context {
      let n = counter(heading).get()
      if it.numbering != none {
        numbering(it.numbering, ..n)
        h(0.4em)
      }
    }
    #it.body
    #v(-0.15em)
    #line(length: 100%, stroke: 1.8pt + color.green.darken(65%))
  ]
  v(0.5em)
}

// Livello 3 — Sottosezione
#show heading.where(level: 3): it => {
  v(0.9em)
  block[
    #set text(size: 16pt, weight: "bold", fill: color.green.darken(65%))
    #set par(justify: false)
    #context {
      let n = counter(heading).get()
      if it.numbering != none {
        numbering(it.numbering, ..n)
        h(0.4em)
      }
    }
    #it.body
  ]
  v(0.6em)
}

// Livello 4 — Paragrafo titolato
#show heading.where(level: 4): it => {
  v(0.6em)
  block[
    #set text(size: 11pt, style: "italic", fill: C.grigio)
    #set par(justify: false)
    #it.body
  ]
  v(0.1em)
}

Inseriamo le impostazioni tipografiche per lo stile dei link:

// ──────────────────────────────────────────────────────────────
//  LINK
// ──────────────────────────────────────────────────────────────
#show link: it => {
  set text(fill: blue)
  underline(it)
}

Inseriamo le impostazioni tipografiche per lo stile dei blocchi di codice:

// ──────────────────────────────────────────────────────────────
//  STILE BLOCCHI DI CODICE
// ──────────────────────────────────────────────────────────────
#show raw.where(block: true): it => {
  block(
   fill: luma(220),
    width: 100%,
    inset: (x: 1.3em, y: 1em),
    radius: 6pt,
    stroke: 0.6pt + black,
  )[
    #set text(  font: ("Libertinus Serif"), size: 12pt)
    #set par(justify: false, leading: 0.7em)
    #it
  ]
}

#show raw.where(block: false): it => {
  box(
    fill: luma(220),
    inset: (x: 4pt),
    outset: (y: 2pt),
    radius: 4pt,
    stroke: 0.5pt + black,
  )[
    #set text(  font: ("Libertinus Serif"), size: 12pt)
    #it
  ]
}

Inseriamo le impostazioni tipografiche per lo stile dei blocchi di testo aggiunto:

// ──────────────────────────────────────────────────────────────
//  STILE BLOCCHI DI TESTO AGGIUNTI
// ──────────────────────────────────────────────────────────────

#let line-block = rect.with(fill: luma(240), inset: 1em, stroke: (left: 0.25em))

#let blocco-giallo(corpo) = {
set text(size: 12pt)
block(
fill: rgb("#fef9e7"),
inset: 0.6em,
radius: 6pt,
stroke: 0.5pt + luma(210),
)[#corpo]
}

#let schede(titolo: "Titolo", colore: blue, corpo) = block(
 width: 100%,
 radius: 8pt,
 stroke: 1pt + luma(150),
 clip: true,
 below: 1em,
 )[
 #block(fill: colore, width: 100%, inset: (x: 1em, y: 0.6em))[
 #text(fill: white, weight: "bold")[#titolo]
 ]
 #block(fill: white, width: 100%, inset: (x: 1em, y: 0.9em))[#corpo]
 ]
 
 #let riquadro-colorato(colore, corpo) = block(
  fill: colore.lighten(70%),
  stroke: (left: 4pt + colore),
  inset: (x: 1em, y: 0.8em),
  radius: 4pt,
  width: 100%,
)[#corpo]

Per scrivere il frontespizio con la copertina, il titolo del documento e il sottotitolo del documento inserire il seguente codice:

// ==============================================================
//  FRONTESPIZIO
// ==============================================================
#page(
  margin: 0pt,
  header: none,
  footer: none,
  numbering: none,
)[
  // Sfondo a gradiente
  #place(
    top + left,
    block(
      width: 100%,
      height: 100%,
      fill: color.green.darken(75%),
      ),
    ),
  )

  // Logo / titolo
  #place(
    center + horizon,
    block(width: 88%)[
      #align(center)[
        #v(1fr)


        #v(1.2em)

        // Titolo principale
        #text(
          fill: white,
          size: 58pt,
          weight: "bold",
            font: ("Libertinus Serif"),
        )[Titolo manuale]

        #v(0.4em)

        // Sottotitolo
        #text(fill: rgb("#aed6f1"), size: 24pt,
                font: ("Libertinus Serif"),)[
          Sottotitolo
        ]

        #v(1.8em)

        // Autore
        
        #v(1.5em)
        #text(fill: rgb("#d8e2f2"), size: 14pt,
                font: ("Libertinus Serif"),)[
       #text(fill: white)[Autore]
        ]

        #v(1.8em)

        // Descrizione
        #text(fill: rgb("#d6eaf8"), size: 12.5pt, style: "italic")[]

        #v(2.5em)

        // Badge argomenti
        #let badge(t) = box(
          fill: white.transparentize(82%),
          stroke: 0.7pt + white.transparentize(60%),
          inset: (x: 0.9em, y: 0.4em),
          radius: 4pt,
        )[#text(fill: rgb("#d6eaf8"), size: 8.5pt)[#t]]

        
        #h(0.5em)
        
        #h(0.5em)
        
        #h(0.5em)
        
        #h(0.5em)
        

        #v(1fr)
      ]
    ],
  )

  // Footer frontespizio
  #place(
    bottom + center,
    dy: -1.8cm,
    text(fill: rgb("#aed6f1"), size: 11pt)[
      Scritto ed impaginato interamente utilizzando Typst con il software Typesetter],
  )
]

Ovviamente sostituiremo la scritta «Titolo manuale» con il titolo del nostro documento e la scritta «Sottotitolo» con il sottotitolo del nostro documento. Potete cambiare il colore della copertina se ne preferite un altro.

Per inserire l’indice generale nel documento e la numerazione delle pagine inserire il seguente codice:

// ──────────────────────────────────────────────────────────────
//  NUMERAZIONE PAGINE E INDICE
// ──────────────────────────────────────────────────────────────
#set page(numbering: "1.1.1.")
  #outline(
    title: [Indice],
    depth: 3,
    indent: 2em,
  )

Per inserire la numerazione dei titoli inserire il seguente codice:

// ──────────────────────────────────────────────────────────────
//  NUMERAZIONE TITOLI
// ──────────────────────────────────────────────────────────────
#set heading(numbering: "1.1.1.")

E’ buona abitudine mettere un commento nel documento che identifica l’inizio del documento, prima di scrivere il nostro primo capitolo. Quindi inserire il seguente codice:

// ==============================================================
//  INIZIO DOCUMENTO
// ==============================================================

Ora possiamo iniziare a scrivere il nostro manuale.