Compare commits
3 Commits
v0.1.0-lat
...
v0.2.0-lat
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5a63067b93 | ||
|
|
cae0c52b67 | ||
|
|
692be693e9 |
6
Makefile
6
Makefile
@@ -11,13 +11,13 @@ $(OUTDIR):
|
|||||||
mkdir -p $(OUTDIR)
|
mkdir -p $(OUTDIR)
|
||||||
|
|
||||||
$(OUTDIR)/$(MAIN).pdf: $(MAIN).tex songbook-style.sty songs/*.tex | $(OUTDIR)
|
$(OUTDIR)/$(MAIN).pdf: $(MAIN).tex songbook-style.sty songs/*.tex | $(OUTDIR)
|
||||||
TEXINPUTS=.:$(shell pwd): $(ENGINE) $(FLAGS) $(MAIN).tex
|
TEXINPUTS=.:$(shell pwd):$(shell pwd)/$(OUTDIR): $(ENGINE) $(FLAGS) $(MAIN).tex
|
||||||
TEXINPUTS=.:$(shell pwd): $(ENGINE) $(FLAGS) $(MAIN).tex
|
TEXINPUTS=.:$(shell pwd):$(shell pwd)/$(OUTDIR): $(ENGINE) $(FLAGS) $(MAIN).tex
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -f $(OUTDIR)/*.aux $(OUTDIR)/*.log $(OUTDIR)/*.out \
|
rm -f $(OUTDIR)/*.aux $(OUTDIR)/*.log $(OUTDIR)/*.out \
|
||||||
$(OUTDIR)/*.toc $(OUTDIR)/*.fls $(OUTDIR)/*.fdb_latexmk \
|
$(OUTDIR)/*.toc $(OUTDIR)/*.fls $(OUTDIR)/*.fdb_latexmk \
|
||||||
$(OUTDIR)/*.sxd $(OUTDIR)/*.sxc
|
$(OUTDIR)/*.sxd $(OUTDIR)/*.sxc $(OUTDIR)/*.songtoc
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -f $(OUTDIR)/$(MAIN).pdf
|
rm -f $(OUTDIR)/$(MAIN).pdf
|
||||||
|
|||||||
@@ -14,8 +14,13 @@
|
|||||||
\RequirePackage[hidelinks]{hyperref}
|
\RequirePackage[hidelinks]{hyperref}
|
||||||
\RequirePackage{fancyhdr}
|
\RequirePackage{fancyhdr}
|
||||||
\RequirePackage{xcolor}
|
\RequirePackage{xcolor}
|
||||||
|
\RequirePackage{longtable}
|
||||||
|
\RequirePackage{array}
|
||||||
|
\RequirePackage{colortbl}
|
||||||
|
\RequirePackage{rotating}
|
||||||
|
\RequirePackage{graphicx}
|
||||||
|
\RequirePackage{csquotes}
|
||||||
\RequirePackage[minimal]{leadsheets}
|
\RequirePackage[minimal]{leadsheets}
|
||||||
% Pre-mark musicsymbols as loaded to avoid missing musix11 font error
|
|
||||||
\ExplSyntaxOn
|
\ExplSyntaxOn
|
||||||
\cs_new:cpn {leadsheets-library-musicsymbols-loaded} {}
|
\cs_new:cpn {leadsheets-library-musicsymbols-loaded} {}
|
||||||
\ExplSyntaxOff
|
\ExplSyntaxOff
|
||||||
@@ -25,7 +30,11 @@
|
|||||||
\setmainfont{TeX Gyre Heros}
|
\setmainfont{TeX Gyre Heros}
|
||||||
\newfontfamily\frakfont{UnifrakturMaguntia-Book}[Path=fonts/,Extension=.ttf]
|
\newfontfamily\frakfont{UnifrakturMaguntia-Book}[Path=fonts/,Extension=.ttf]
|
||||||
|
|
||||||
% --- Page style: page numbers at bottom-outer, large ---
|
% --- Colors ---
|
||||||
|
\definecolor{tocrowgray}{gray}{0.92}
|
||||||
|
\definecolor{tocheadgray}{gray}{0.75}
|
||||||
|
|
||||||
|
% --- Page style ---
|
||||||
\pagestyle{fancy}
|
\pagestyle{fancy}
|
||||||
\fancyhf{}
|
\fancyhf{}
|
||||||
\fancyfoot[LE]{\large\bfseries\thepage}
|
\fancyfoot[LE]{\large\bfseries\thepage}
|
||||||
@@ -49,12 +58,112 @@
|
|||||||
after-song = \songendsection,
|
after-song = \songendsection,
|
||||||
}
|
}
|
||||||
|
|
||||||
% --- Chord appearance: regular weight, black (matching reference style) ---
|
|
||||||
\setchords{
|
\setchords{
|
||||||
format = \small,
|
format = \small,
|
||||||
}
|
}
|
||||||
|
|
||||||
% --- Command to render metadata at bottom of song ---
|
% ==========================================================================
|
||||||
|
% Song TOC matrix
|
||||||
|
% ==========================================================================
|
||||||
|
|
||||||
|
\newcounter{songnumber}
|
||||||
|
\newcounter{tocrowcount}
|
||||||
|
|
||||||
|
\ExplSyntaxOn
|
||||||
|
\iow_new:N \g__sb_toc_iow
|
||||||
|
\tl_new:N \l__sb_title_tl
|
||||||
|
\tl_new:N \l__sb_mo_tl
|
||||||
|
\tl_new:N \l__sb_pflb_tl
|
||||||
|
\tl_new:N \l__sb_num_tl
|
||||||
|
\tl_new:N \l__sb_songid_tl
|
||||||
|
\bool_new:N \g__sb_toc_opened_bool
|
||||||
|
\seq_new:N \g__sb_written_seq
|
||||||
|
|
||||||
|
% Lazy-open: only truncate the file when first song writes to it
|
||||||
|
% This ensures the TOC reads the PREVIOUS run's data before truncation
|
||||||
|
\cs_new_protected:Npn \__sb_ensure_toc_open:
|
||||||
|
{
|
||||||
|
\bool_if:NF \g__sb_toc_opened_bool
|
||||||
|
{
|
||||||
|
\iow_open:Nn \g__sb_toc_iow { \c_sys_jobname_str .songtoc }
|
||||||
|
\bool_gset_true:N \g__sb_toc_opened_bool
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
\AtEndDocument{
|
||||||
|
\bool_if:NT \g__sb_toc_opened_bool
|
||||||
|
{ \iow_close:N \g__sb_toc_iow }
|
||||||
|
}
|
||||||
|
|
||||||
|
\cs_new_protected:Npn \writesongtoc
|
||||||
|
{
|
||||||
|
% Use leadsheets song ID to skip duplicate calls (measurement pass)
|
||||||
|
\tl_set:NV \l__sb_songid_tl \l_leadsheets_current_song_id_tl
|
||||||
|
\seq_if_in:NVF \g__sb_written_seq \l__sb_songid_tl
|
||||||
|
{
|
||||||
|
\seq_gput_right:NV \g__sb_written_seq \l__sb_songid_tl
|
||||||
|
\__sb_ensure_toc_open:
|
||||||
|
\stepcounter{songnumber}
|
||||||
|
\tl_set:Nx \l__sb_num_tl { \int_use:N \c@songnumber }
|
||||||
|
\tl_set:Nx \l__sb_title_tl { \songproperty{title} }
|
||||||
|
\tl_set:Nx \l__sb_mo_tl { \songproperty{mundorgel} }
|
||||||
|
\tl_set:Nx \l__sb_pflb_tl { \songproperty{pfadfinderliederbuch} }
|
||||||
|
\iow_now:Nx \g__sb_toc_iow
|
||||||
|
{
|
||||||
|
\exp_not:N \songtocrow
|
||||||
|
{ \l__sb_title_tl }
|
||||||
|
{ \l__sb_mo_tl }
|
||||||
|
{ \l__sb_pflb_tl }
|
||||||
|
{ \exp_not:N \pageref { song: \l__sb_num_tl } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
% Label MUST be outside guard: measurement pass label is discarded (inside vbox),
|
||||||
|
% but the real pass label survives and gets written to .aux
|
||||||
|
\tl_set:Nx \l__sb_num_tl { \int_use:N \c@songnumber }
|
||||||
|
\label{song:\tl_use:N \l__sb_num_tl}
|
||||||
|
}
|
||||||
|
\ExplSyntaxOff
|
||||||
|
|
||||||
|
% --- Render one TOC row ---
|
||||||
|
\newcommand{\songtocrow}[4]{%
|
||||||
|
#1 & #2 & #3 & \cellcolor{tocheadgray}\textbf{#4} \\
|
||||||
|
\hline
|
||||||
|
}
|
||||||
|
|
||||||
|
% --- Rotated column header ---
|
||||||
|
\newcommand{\rotheader}[1]{%
|
||||||
|
\begin{turn}{70}\footnotesize\textbf{#1}\end{turn}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% --- Print the song TOC table ---
|
||||||
|
\newcommand{\printsongtoc}{%
|
||||||
|
\thispagestyle{fancy}%
|
||||||
|
{\Large\bfseries Inhaltsverzeichnis\par}%
|
||||||
|
\vspace{5mm}%
|
||||||
|
\footnotesize
|
||||||
|
\rowcolors{2}{tocrowgray}{white}%
|
||||||
|
\begin{longtable}{%
|
||||||
|
>{\raggedright\arraybackslash}p{0.52\textwidth}|%
|
||||||
|
>{\centering\arraybackslash}p{0.10\textwidth}|%
|
||||||
|
>{\centering\arraybackslash}p{0.10\textwidth}|%
|
||||||
|
>{\centering\arraybackslash\columncolor{tocheadgray}}p{0.12\textwidth}%
|
||||||
|
}
|
||||||
|
& \rotheader{MO} & \rotheader{PfLB}
|
||||||
|
& \rotheader{\normalsize Lieder-\newline\normalsize buch} \\
|
||||||
|
\hline
|
||||||
|
\endfirsthead
|
||||||
|
& \rotheader{MO} & \rotheader{PfLB}
|
||||||
|
& \rotheader{\normalsize Lieder-\newline\normalsize buch} \\
|
||||||
|
\hline
|
||||||
|
\endhead
|
||||||
|
\InputIfFileExists{\jobname.songtoc}{}{}%
|
||||||
|
\end{longtable}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% ==========================================================================
|
||||||
|
% Song end section
|
||||||
|
% ==========================================================================
|
||||||
|
|
||||||
\newcommand{\songendsection}{%
|
\newcommand{\songendsection}{%
|
||||||
\vfill
|
\vfill
|
||||||
\ifsongproperty{note}{%
|
\ifsongproperty{note}{%
|
||||||
@@ -74,27 +183,60 @@
|
|||||||
}{}%
|
}{}%
|
||||||
}%
|
}%
|
||||||
\endgroup
|
\endgroup
|
||||||
% Reference book footer
|
|
||||||
\vspace{3mm}%
|
\vspace{3mm}%
|
||||||
\begingroup\footnotesize
|
\begingroup\footnotesize\centering
|
||||||
\noindent
|
\begin{tabular}{ccc}
|
||||||
\makebox[0.18\textwidth][c]{MO}%
|
MO & PfLB & Liederbuch \\
|
||||||
\makebox[0.18\textwidth][c]{PfLB}%
|
\ifsongproperty{mundorgel}{\songproperty{mundorgel}}{} &
|
||||||
\hfill\par\noindent
|
\ifsongproperty{pfadfinderliederbuch}{\songproperty{pfadfinderliederbuch}}{} &
|
||||||
\makebox[0.18\textwidth][c]{%
|
\thepage
|
||||||
\ifsongproperty{mundorgel}{\songproperty{mundorgel}}{}%
|
\end{tabular}\par
|
||||||
}%
|
|
||||||
\makebox[0.18\textwidth][c]{%
|
|
||||||
\ifsongproperty{pfadfinderliederbuch}{\songproperty{pfadfinderliederbuch}}{}%
|
|
||||||
}%
|
|
||||||
\hfill
|
|
||||||
\endgroup
|
\endgroup
|
||||||
\newpage
|
\newpage
|
||||||
}
|
}
|
||||||
|
|
||||||
% --- Song title template: Fraktur title, metadata at bottom ---
|
% ==========================================================================
|
||||||
|
% Song title template
|
||||||
|
% ==========================================================================
|
||||||
|
|
||||||
\definesongtitletemplate{songbook}{%
|
\definesongtitletemplate{songbook}{%
|
||||||
{\LARGE\frakfont\songproperty{title}\par}%
|
{\LARGE\frakfont\songproperty{title}\par}%
|
||||||
\addcontentsline{toc}{section}{\songproperty{title}}%
|
\writesongtoc
|
||||||
\vspace{4mm}%
|
\vspace{4mm}%
|
||||||
}
|
}
|
||||||
|
|
||||||
|
% ==========================================================================
|
||||||
|
% Image placement
|
||||||
|
% ==========================================================================
|
||||||
|
|
||||||
|
% Full-page filler image (centered, scaled to fit, own page)
|
||||||
|
% Usage: \fillerpage{images/drawing.png}
|
||||||
|
\newcommand{\fillerpage}[1]{%
|
||||||
|
\clearpage
|
||||||
|
\thispagestyle{empty}%
|
||||||
|
\vspace*{\fill}%
|
||||||
|
\begin{center}%
|
||||||
|
\includegraphics[width=0.85\textwidth,height=0.85\textheight,keepaspectratio]{#1}%
|
||||||
|
\end{center}%
|
||||||
|
\vspace*{\fill}%
|
||||||
|
\clearpage
|
||||||
|
}
|
||||||
|
|
||||||
|
% Inline image within a page (e.g., at end of a song with remaining space)
|
||||||
|
% Usage: \songimage{images/landscape.png}
|
||||||
|
\newcommand{\songimage}[1]{%
|
||||||
|
\begin{center}%
|
||||||
|
\includegraphics[width=0.8\textwidth,keepaspectratio]{#1}%
|
||||||
|
\end{center}%
|
||||||
|
}
|
||||||
|
|
||||||
|
% Full-page image with no margins (bleeds to edges)
|
||||||
|
% Usage: \fullpageimage{images/cover.png}
|
||||||
|
\newcommand{\fullpageimage}[1]{%
|
||||||
|
\clearpage
|
||||||
|
\thispagestyle{empty}%
|
||||||
|
\newgeometry{margin=0pt}%
|
||||||
|
\noindent\includegraphics[width=\paperwidth,height=\paperheight]{#1}%
|
||||||
|
\restoregeometry
|
||||||
|
\clearpage
|
||||||
|
}
|
||||||
|
|||||||
34
songbook.tex
34
songbook.tex
@@ -17,10 +17,40 @@
|
|||||||
\vfill
|
\vfill
|
||||||
\end{titlepage}
|
\end{titlepage}
|
||||||
|
|
||||||
% --- Table of Contents ---
|
% --- Foreword / Introductory page ---
|
||||||
\tableofcontents
|
\thispagestyle{empty}
|
||||||
|
{\large\bfseries\itshape
|
||||||
|
\enquote{Das Volkslied ist nun einmal da --, daran k\"onnen wir nicht
|
||||||
|
vorbei -- es ergreift uns stark und tief, und die Antwort auf
|
||||||
|
das Warum? bleiben wir schuldig.}
|
||||||
|
\par}
|
||||||
|
\vspace{2mm}
|
||||||
|
\noindent\rule{\textwidth}{0.4pt}
|
||||||
|
\vspace{4mm}
|
||||||
|
|
||||||
|
\small
|
||||||
|
So hei\ss t es im Vorwort des wohl bekanntesten Liederbuchs
|
||||||
|
in der Jugendbewegung, dem \textit{Zupfgeigenhansl}, aus dem Jahr 1913.
|
||||||
|
|
||||||
|
Und auch wir erleben auf Fahrt und Lager immer wieder die Kraft des
|
||||||
|
gemeinsamen Singens. Mit diesem Liederbuch haben wir eine Auswahl
|
||||||
|
an Liedern aus unterschiedlichen Quellen zusammengetragen.
|
||||||
|
|
||||||
|
Singen verbindet uns, macht Freude und ist ein entscheidendes Element
|
||||||
|
unserer Lager und Fahrt.
|
||||||
|
|
||||||
|
\vspace{5mm}
|
||||||
|
Herzlichst Gut Pfad
|
||||||
|
|
||||||
\clearpage
|
\clearpage
|
||||||
|
|
||||||
|
% --- Table of Contents ---
|
||||||
|
\printsongtoc
|
||||||
|
\clearpage
|
||||||
|
|
||||||
|
% --- Filler images can be placed between songs ---
|
||||||
|
% Example: \fillerpage{images/drawing.png}
|
||||||
|
|
||||||
% --- Songs (alphabetical) ---
|
% --- Songs (alphabetical) ---
|
||||||
\input{songs/abend-wird-es-wieder}
|
\input{songs/abend-wird-es-wieder}
|
||||||
\input{songs/auf-auf-zum-froehlichen-jagen}
|
\input{songs/auf-auf-zum-froehlichen-jagen}
|
||||||
|
|||||||
Reference in New Issue
Block a user