Universe

A library to write song lyrics with chord diagrams in Typst. This library uses CeTZ (aka typst-canvas) to generate the diagrams.

Table of Contents

Usage

chordx has two implementations, one using CeTZ and another using native functions.

The native functions work the same way as the main implementation, in a future it will replace the main implementation, for now you can use both.

// Using main implementation
#let graph-chord = new-graph-chords()
#let single-chord = new-single-chords(style: "italic", weight: "semibold")

// Using native implementation
#let graph-chord = new-graph-chords-native()
#let single-chord = new-single-chords-native(style: "italic", weight: "semibold")

Typst Packages

Typst added an experimental package repository and you can import chordx as follows:

#import "@preview/chordx:0.1.0": *

Local Packages

If the package hasn’t been released yet, or if you just want to use it from this repository, you can use local-packages

You can read the documentation about typst local-packages and learn about the path folders used in differents operating systems (Linux / MacOS / Windows).

In Linux you can do:

$ git clone https://github.com/ljgago/typst-chords ~/.local/share/typst/packages/local/chordx-0.1.0

And import the lib in your file:

#import "@local/chordx:0.1.0": *

Documentation

With chordx you can use 2 functions new-graph-chords and new-single-chords. These functions returns other functions (a closure) with a preset setting.

Function: new-graph-chords

// Chord with diagram
// Return a function with these settings
#let guitar-chord = new-graph-chords(
  strings: number,
  font: string,
)
  • strings: number of strings of the instrument (columns of the grid), default: 6, Optional
  • font: text font name, default: “Linux Libertine”, Optional

The returned function from new-graph-chords has the following parameters:

// Generates a chord diagram
#guitar-chord(
  frets: number,
  fret-number: number or none,
  capos: array(array) or array(dictionary),
  fingers: array,
  notes,
  chord-name
)
  • frets: number of frets (rows of the grid), default: 5, Optional

  • fret-number: shows the fret position, default: none, Optional

  • capos: adds one o many capos on the graph, default: (), Optional

      // array(array) or array(dictionary)
      ((
        fret: number,
        start: number,  // the first string
        end: number     // the last string
      ),)
    
    • fret: number of the fret position relative to grid, Required
    • start: number of the first string, Required
    • end: number of the last string, Required
  • fingers: shows the finger numbers, default: (), (0: without finger, number: one finger), Optional

  • notes: shows the notes on the graph (“x”: mute note, “n”: without note, 0: air note, number: one note), Required

  • chord-name: shows the chord name, Required

Examples:

#import "@preview/chordx:0.1.0": *

#let guitar-chord = new-graph-chords()
#let ukulele-chord = new-graph-chords(strings: 4)

// Guitar B chord
#guitar-chord(
  capos: ((fret: 2, start: 1, end: 5),), // capos: ((2, 1, 5),)
  fingers: (0, 1, 2, 3, 4, 1),
  ("x", "n", 4, 4, 4, "n")
)[B]

// Ukulele B chord
#ukulele-chord(
  capos: ((2, 1, 2),), // capos: ((fret: 2, start: 1, end: 2),)
  fingers: (3, 2, 1, 1),
  (4, 3, "n", "n")
)[B]

Graph Chord

Function: new-single-chords

// A single chord (without diagram)
// Return a function with these settings
#let chord = new-single-chords(
  style: "italic",
  weight: "semibold",
  ...
)

The chord without diagram is used to write the chord over a word. All parameters of new-single-chords are the same of text of typst.

The returned function from new-single-chords has the following parameters:

#chord(
  body,
  chord-name,
  body-char-pos
)
  • body: is the word or words where the chord goes, Required
  • chord-name: displays the chord name over the selected words in the body, Required
  • body-char-pos: positions the chord over a specific character in the body, [] or [0]: chord centered above the body, [number]: chord above character in body, Required

Examples:

#import "@preview/chordx:0.1.0": *

#let chord = new-single-chords(style: "italic", weight: "semibold")

#chord[Jingle][G][2] bells, jingle bells, jingle #chord[all][C][2] the #chord[way!][G][2] \
#chord[Oh][C][] what fun it #chord[is][G][] to ride \
In a #chord[one-horse][A7][2] open #chord[sleigh,][D7][3] hey!

Single Chord

License

MIT License