Universe

Highly customizable student songbook template that provides a macro system and a semantic format to describe songs, including metadata, lyrics, refrains, and various annotations. The goal is to simplify songbook creation while maintaining high typographic quality.

✨ Features

  • Semantic Song Definition: Write songs using high-level, readable commands like #header, #bis, and custom footnotes.
  • Metadata Blocks: Specify song metadata like melody (air), lyrics author (paroles), and comments using a structured format.
  • Line Duplication: Automatically duplicate lines with #bis() and control the repetition count (#bis(n:3)).
  • Formatted Refrains: Define language-specific refrains (=== fr., === nl) and support custom-styled chorus sections.
  • Rich Text Formatting: Supports bold (*bold*), italics (_italic_), strikethrough (#strike[...]), underline (#underline[...]), and footnotes (#note[...]).
  • Multiline Bis: Repeat entire blocks of lines using #bis()[...] with multiple lines.
  • Comment Annotations: Provide context and background to each song using the #header.commentaire field.
  • Refrain Sections: Clearly separate verses from refrains with dedicated syntax (=== fr., === Refrain custom, etc).

📄 Example

Here is a sample song using the Codex Woltiensis format:

== Song of Demonstration
#header(
  air: air(author: "Traditional")[The Drunken Sailor],
  paroles: paroles(date: "1850")[Anonymous],
  commentaire: com()[This song demonstrates all features of the Codex Woltiensis template in English, including repeats, formatting, footnotes, and structured metadata.]
)

What shall we do with a drunken sailor \
What shall we do with a drunken sailor \
What shall we do with a drunken sailor #bis() \
Early in the morning? \

Put him in the longboat till he's sober #bis(n:3) \
Put him in the scuppers with a hosepipe on him #bis(n:4) \
Shave his belly with a rusty razor #bis(n:69) \

=== fr.
_This is the chorus section \
Repeated after each verse \
May include footnotes #note()[Footnotes are useful for contextual notes] \
May be marked as en (English), nl (Dutch), fr (French), or custom._

This shows repeated multiline blocks \
#bis()[
Haul him up and let him dangle\
Haul him up and let him dangle\
Let the bosun give a warning\
]

=== nl

This stanza tests text formatting \
*Bold Text* \
_Italic Text_ \
#strike[Strikethrough Text] \
#underline[Underlined Text]

=== Custom Refrain