Compare commits

...

3 Commits

Author SHA1 Message Date
095e19700e first draft mkparallel.sh 2024-10-02 01:30:22 +02:00
b2c8cffc3d mv conf.sh to verse.conf 2024-10-02 00:34:27 +02:00
f9c5191b7d pdf2book.py works 2024-10-02 00:20:15 +02:00
6 changed files with 209 additions and 33 deletions

View File

@ -12,15 +12,18 @@ This LaTeX code needs a wrapper LaTeX script with
\usepackage{verse, gmverse}
```
in the preamble and some other features.
The path to markdown files, chapter names and other options can be configured in the `conf.sh` file.
The `config.sh` file is read by `mkverse.sh`.
The path to markdown files, chapter names and other options can be configured in the `verse.conf` file.
The `verse.conf file is read by `mkverse.sh`.
---
## mkverse.sh
The `mkverse.sh` script creates a PDF file out of several easy markdown files.
Some options need to be set in `config.sh` file.
`config.sh` might be renamed to `verse.conf`.
Some options need to be set in `vers.conf` file.
A single configuration file can be given to `mkverse.sh` to use instead of `verse.conf`.
```
cp verse.conf quaderno.conf
./mkverse.sh quaderno.conf
---
@ -31,6 +34,7 @@ Some options need to be set in `config.sh` file.
## pdf2book.py
This script takes a pdf and reorders pages for printing signatures.
The number of pages per signature can be varied
Dependency: `pypdf`
```
s=1: 1,2,3,4 -> 04,01.02,03 i=0
08,05.06,07 i=1

109
mkparallel.sh Executable file
View File

@ -0,0 +1,109 @@
#!/bin/bash
# CREATE PDF from markdown files
#
#set -x
set -e
if [ $# -eq 1 ]
then
CONF=$1
else
CONF="parallel.conf"
fi
CONVERTER="md2parallel.sh"
if ! [[ -f $CONF ]] ; then echo "$CONF not found! Exiting ..." && exit ; fi
if ! [[ -f $CONVERTER ]] ; then echo "$CONVERTER not found! Exiting ..." && exit ; fi
if ! [[ -x $CONVERTER ]] ; then echo "$CONVERTER not executable! Exiting ..." && exit ; fi
. $CONF
# SAVE WORKING DIR
WD=$PWD
TMPDIR=$(mktemp -d)
PATH=$PATH:$WD
pushd $TMPDIR > /dev/null
# CONVERT MD TO TEX
for tex in $( echo $INFILES | grep '.md$' )
do
if [[ -f $WD/$tex ]]
then
# create parent dir if necassary
mkdir -p $(dirname $tex)
$CONVERTER $WD/$tex > $( echo $tex | sed "s/.md/.tex/" )
else
if [[ $tex == *.md ]]
then
echo "$WD/$tex does not exist!!!"
fi
fi
done
# CREATE WRAPPER
WRAPPER="""
\documentclass[twoside]{$DOCCLASS}
\usepackage[fontsize=${FONTSIZE}pt]{fontsize}
\usepackage[${PAGESIZE}paper]{geometry}
\usepackage{libertine} % also loads fontspec which is needed for ɔ and ɛ
\usepackage{minitoc} % make mini table of content for each chapter
\usepackage{graphicx} % include graphics
\usepackage{csquotes} % \enquote
\usepackage{reledmac} % needed for repedpar
\usepackage{reledpar} % parallel text
\newcommand{\pagesinclude}[2]{
\begin{pages}
\begin{Leftside}
\beginnumbering
\pstart\input{#1}\pend
\endnumbering
\end{Leftside}
\begin{Rightside}
\beginnumbering
\pstart\input{#2}\pend
\endnumbering
\end{Rightside}
\end{pages}
\Pages
}
\title{$TITLE}
\author{$AUTHOR}
\begin{document}
\maketitle
\tableofcontents
"""
WRAPPER_END="""
\end{document}
"""
echo "$WRAPPER" > $PROJECT.tex
# INCLUDE INDIVIDUAL TEX FILE
first_lang="true"
for input in $INFILES
do
if [[ $input == *.md ]]
then
if [[ $first_lang == "true" ]] ; then
echo '\pagesinclude' "{ $( echo $input | sed 's/.md/.tex/' ) }" >> $PROJECT.tex
first_lang="false"
else
echo "{ $( echo $input | sed 's/.md/.tex/' ) }" >> $PROJECT.tex
fi
else
#is chapter
echo '\chapter' " { $input }" >> $PROJECT.tex
fi
echo '\clearpage' >> $PROJECT.tex
done
echo "$WRAPPER_END" >> $PROJECT.tex
# CREATE PDF
$LATEX_ENGINE $PROJECT.tex 2&> /dev/null
$LATEX_ENGINE $PROJECT.tex 2&> /dev/null
# $LATEX_ENGINE $PROJECT.tex
popd > /dev/null
cp -r $TMPDIR $WD/$PROJECT
echo "File $PROJECT.pdf created at $WD/$PROJECT/"
rm -rf $TMPDIR

25
mkverse.sh Normal file → Executable file
View File

@ -5,12 +5,17 @@
#set -x
set -e
CONF="conf.sh"
if [ $# -eq 1 ]
then
CONF=$1
else
CONF="verse.conf"
fi
TEMPLATE="verse-wrapper-template.tex"
CONVERTER="md2verse.sh"
if ! [[ -f $CONF ]] ; then echo "$CONF not found! Exiting ..." && exit ; fi
if ! [[ -f $TEMPLATE ]] ; then echo "$TEMPLATE not found! Exiting ..." && exit ; fi
if ! [[ -f $CONVERTER ]] ; then echo "$CONVERTER not found! Exiting ..." && exit ; fi
if ! [[ -x $CONVERTER ]] ; then echo "$CONVERTER not executable! Exiting ..." && exit ; fi
@ -19,7 +24,7 @@ if ! [[ -x $CONVERTER ]] ; then echo "$CONVERTER not executable! Exiting ..." &&
WD=$PWD
TMPDIR=$(mktemp -d)
PATH=$PATH:$WD
pushd $TMPDIR
pushd $TMPDIR > /dev/null
# CONVERT MD TO TEX
for tex in $( echo $INFILES | grep '.md$' )
@ -30,7 +35,10 @@ do
mkdir -p $(dirname $tex)
$CONVERTER $WD/$tex > $( echo $tex | sed "s/.md/.tex/" )
else
echo "$WD/$tex does not exist!!!"
if [[ $tex == *.md ]]
then
echo "$WD/$tex does not exist!!!"
fi
fi
done
@ -74,7 +82,12 @@ done
echo "$WRAPPER_END" >> $PROJECT.tex
# CREATE PDF
$LATEX_ENGINE $PROJECT.tex
$LATEX_ENGINE $PROJECT.tex 2&> /dev/null
$LATEX_ENGINE $PROJECT.tex 2&> /dev/null
# $LATEX_ENGINE $PROJECT.tex
cp $PROJECT.pdf $WD
popd
echo "File $PROJECT.pdf created at $WD"
#cp $PROJECT.tex $WD
echo "File $PROJECT.tex created at $WD"
popd > /dev/null
rm -rf $TMPDIR

13
parallel.conf Normal file
View File

@ -0,0 +1,13 @@
LATEX_ENGINE="pdflatex"
DOCCLASS="memoir"
DOCCLASS_EXTRA="twoside"
FONTSIZE="10"
PAGESIZE="a5"
PROJECT="asem"
TITLE="Nsɛm wɔ Twi ne Brɔfo\\\LARGE Texts in Twi and English"
AUTHOR=""
INFILES="""
Anansesem - Ghanaian Folk Tales
testfiles/parallel-ak.md
testfiles/parallel-en.md
"""

View File

@ -1,35 +1,43 @@
#!/usr/bin/env python3
from pypdf import PdfReader
from pypdf import PdfWriter
import argparse
parser = argparse.ArgumentParser(
prog='pdf2book',
description='pdf2book rearranges pages for signature printing ',
epilog='AQOABA')
#parser.add_argument('pdf-file') # positional argument
parser.add_argument('pages', type=int) # positional argument
parser.add_argument('pdf_file') # positional argument
#parser.add_argument('pages', type=int) # positional argument
#parser.add_argument('-s', '--signature') # option that takes a value
parser.add_argument('-v', '--verbose', action='store_true') # on/off flag
parser.add_argument('-s', '--signature',
dest='signature',
type=int,
action='store',
default=1,
default=0,
help='')
args = parser.parse_args()
s=args.signature
if s < 0 :
signature_size=args.signature
if signature_size < 0 :
# print("signature size must be greater than 0!")
print("signature size must be positive integer!")
exit(1)
pages=args.pages
reader = PdfReader(args.pdf_file)
number_of_pages = len(reader.pages)
#page = reader.pages[0]
#text = page.extract_text()
pages=number_of_pages
#print(pages)
lst=[]
def get_reorder(page_number: int, signature_size: int):
panu=page_number
def get_reorder(number_of_pages: int, signature_size: int):
panu=number_of_pages
sisi=signature_size
# s| 1 | 2 | 3 | 4 |
@ -49,23 +57,23 @@ def get_reorder(page_number: int, signature_size: int):
#12 | 12 | 16 | 12 | 16 |
#13 | 16 | 16 | 24 | 16 |
p=page_number
p=number_of_pages
s=signature_size
if s == 0:
s=1
pages_filled= ( int((p-1)/(4*s)) +1 )*4*s
s=int(pages_filled/4)
pages_filled= ( int((p-1)/(4*s)) +1 )*4*s
if signature_size == 0:
signature_size=1
pages_filled= ( int((number_of_pages-1)/(4*signature_size)) +1 )*4*signature_size
signature_size=int(pages_filled/4)
pages_filled= ( int((number_of_pages-1)/(4*signature_size)) +1 )*4*signature_size
signature_count=int( pages_filled/s/4 )
signature_count=int( pages_filled/signature_size/4 )
#print(signature_count)
for i in range(signature_count):
# print("i=",i)
down=(i+1)*4*s
down=(i+1)*4*signature_size
# print("down=",down)
up= (i*4*s)+1
up= (i*4*signature_size)+1
# print("up",up)
for count in range(s):
for count in range(signature_size):
# print("count=",count)
lst.append(down); down -= 1
lst.append(up); up += 1
@ -75,14 +83,34 @@ def get_reorder(page_number: int, signature_size: int):
#print(lst)
#print(len(lst))
return lst
def print_signatures(lst: list,s: int):
if s==0: s=1
def print_signatures(lst: list,signature_size: int):
if signature_size==0: signature_size=1
for i in range( len( lst ) ):
if ( (i+1) % (4*s) == 0 ):
if ( (i+1) % (4*signature_size) == 0 ):
print(lst[i])
elif ( (i+1) % (4) == 0 ):
print(lst[i], end=' ')
else:
print(lst[i],end='.')
lst=get_reorder(args.pages, args.signature)
print_signatures(lst,s)
lst=get_reorder(number_of_pages, signature_size)
print_signatures(lst,signature_size)
# REARRANGING OF PAGES
def rearrange_pages(reader, lst):
writer = PdfWriter()
for page in lst:
# print(page)
if page > len(reader.pages):
writer.add_blank_page(width=reader.pages[0].mediabox.width,height=reader.pages[0].mediabox.height)
else:
writer.add_page(reader.pages[page-1])
return writer
# SAVE FILE TO DISK
writer=rearrange_pages(reader,lst)
outfile=args.pdf_file.split(".pdf")[0]+"_book_s"+str(signature_size)+".pdf"
with open(outfile, "wb") as fp:
writer.write(fp)

View File

@ -10,4 +10,13 @@ Ladainhas
testfiles/verse.md
Corridos
testfiles/verse.md
testfiles/verse.md
testfiles/verse.md
testfiles/verse.md
testfiles/verse.md
testfiles/verse.md
testfiles/verse.md
Corridos
testfiles/verse.md
testfiles/verse.md
"