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