Last Updated or created 2023-07-18
2023-01-11 Updated the script! More functions
I’m using below scripts to generate tunebooks.
These books I can print OR view on a tablet using my DIY bluetooth page turner. ( see other post )
I often work on tunes, add notes, text or write other versions.
So i needed a fast and simple way to re-generate a tunebook. ( hence the date on the title page and in the name, so i know whats the most recent version )
Now i have a separate tunebook for each instrument, with the same looks
What does this script?
- Generates a title page using Latex
- Generates a tune index, with page numbers ( works with multipage tunes )
- Adds bookmarks to the tunes, so you can use the bookmark link in your reader.
- Merges all pdf’s into one.
- Sets title/author
- Generic setup for multiple tunebooks
- Generates ABC pdf and includes these
Todo: embed page numbers on every page?
BASH script:
#!/bin/bash #sudo apt-get install texlive-latex-extra ### REMOVE OLD BOOKMARKS ls *pdf | while read; do rm -f "/tmp/$$.pdf" cp "$REPLY" /tmp/$$.pdf pdftk A=/tmp/$$.pdf cat A1-end output "$REPLY" done ### GENERATE ABC if [ -d abc ] ; then ls abc/*abc | while read abc ; do abcm2ps -x -O - "$abc" | ps2pdf -sPAPERSIZE=a4 - "$(echo $abc | cut -f2 -d/ | sed 's/abc/pdf/g')" ;done fi nrpdf=$(ls *\.pdf | grep -vi index.pdf | grep -vi title.pdf | grep -v ^00 | wc -l) echo "Tune PDFs in directory : $nrpdf" pages=$(( $nrpdf / 126 )) pages=$(( $pages + 1 )) echo "Needed index pages : $pages" # Extra pages : Number 002-999 extrapages=$( ls *pdf | egrep ^00 | wc -l) echo "Extra pages : $extrapages" nr=$(( $extrapages )) echo "Total pages for tunes : $nr" echo "create column page as text" nr=$(( $nr +1 )) echo $nr ls *\.pdf | grep -vi index.pdf | grep -vi title.pdf | grep -v ^00 | sort | while read ; do echo "$nr $REPLY" next=$(exiftool "$REPLY" | awk -F": " '/Page Count/{print $2}') nr=$(( $nr + $next )) done | cut -f1,3- -d" " | cut -f1 -d. | sed s/\ a$//g | sed s/\ b$//g | pr -2 -t > /tmp/col echo "Create Index pdf" vim /tmp/col -c "set printfont=courier:h12" -c":let &printheader = \" \"" -c "hardcopy > 001aIndex.ps | q"; ps2pdf 001aIndex.ps echo "Create title page pdf" pdflatex "000 title.tex" 1>/dev/null tempPDF=`mktemp` echo -n "Add bookmarks : " ls *\.pdf | grep -vi index.pdf | grep -vi title.pdf | grep -v ^00 | sort | while read i ; do bookmarkTitle=$( echo $i | cut -f2- -d" " | rev | cut -f2- -d. | rev) bookmarkInfo="BookmarkBegin\nBookmarkTitle: $bookmarkTitle\nBookmarkLevel: 1\nBookmarkPageNumber: 1" pdftk "$i" update_info_utf8 <(echo -en $bookmarkInfo) output $tempPDF >/dev/null mv $tempPDF "$i" echo -n "." done echo "" set +x #ls *\.pdf | grep ^[A-Z] | sort > /tmp/pdflist name=$(pwd | rev | cut -f2 -d/ | rev) echo $name pdftk *pdf cat output "../${name}_$(date +%Y%m%d).pdf" exiftool -Author="Henri Aanstoot" -Title="$name" "../${name}_$(date +%Y%m%d).pdf"
Needed tex file (named “000 title.tex”)
\documentclass[11pt]{report} \usepackage[T1]{fontenc} \usepackage{anyfontsize} \usepackage[a4paper, total={6in, 8in}]{geometry} \usepackage[T1]{fontenc} \usepackage{tgbonum} \newlength{\drop} \begin{document} \begin{titlepage} \drop=0.1\textheight \centering \vspace*{\baselineskip} \rule{\textwidth}{1.6pt}\vspace*{-\baselineskip}\vspace*{2pt} \rule{\textwidth}{0.4pt}\\[\baselineskip] {\fontsize{50}{60}\selectfont Irish Tunes Test Tunebook} \rule{\textwidth}{0.4pt}\vspace*{-\baselineskip}\vspace{3.2pt} \rule{\textwidth}{1.6pt}\\[\baselineskip] \scshape {\large Tunebook}\par \vspace*{2\baselineskip} {\itshape Henri - Exampletunes\par} \vfill {\scshape generated:} \\ \today \end{titlepage} \end{document}
File naming:
000 title
001 index
002 – 099 xyz (extra pages, not in index)
100 – 999 Tunes (sorting)
000 title.pdf
001aIndex.pdf
002 tuneinfo.pdf
100 The Battle of Aughrim.pdf
101 I was born for sports.pdf
105 Cerlew Jig.pdf
110 Chanters Song.pdf
115 Gander at the Pratie Hole.pdf
120 honeymoon.pdf
125 Kitty Goes a-Milking.pdf
130 Terribus.pdf
Output from the script
./generatebook Tune PDFs in directory : 8 Needed index pages : 1 Extra pages : 1 Total pages for tunes : 3 create column page as text Create Index pdf Create title page pdf Add bookmarks : ........
Needed software:
pdftk, pdflatex, vim, exiftool, texlive-fonts-recommended