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.commentairefield. - 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