Compare commits
No commits in common. "095e19700e067f2334d1fc36af8cb267193e9bdc" and "54fdc697dcaeb743f3501b66d21d59e83f8aa070" have entirely different histories.
095e19700e
...
54fdc697dc
12
README.md
12
README.md
@ -12,18 +12,15 @@ This LaTeX code needs a wrapper LaTeX script with
|
|||||||
\usepackage{verse, gmverse}
|
\usepackage{verse, gmverse}
|
||||||
```
|
```
|
||||||
in the preamble and some other features.
|
in the preamble and some other features.
|
||||||
The path to markdown files, chapter names and other options can be configured in the `verse.conf` file.
|
The path to markdown files, chapter names and other options can be configured in the `conf.sh` file.
|
||||||
The `verse.conf file is read by `mkverse.sh`.
|
The `config.sh` file is read by `mkverse.sh`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## mkverse.sh
|
## mkverse.sh
|
||||||
The `mkverse.sh` script creates a PDF file out of several easy markdown files.
|
The `mkverse.sh` script creates a PDF file out of several easy markdown files.
|
||||||
Some options need to be set in `vers.conf` file.
|
Some options need to be set in `config.sh` file.
|
||||||
A single configuration file can be given to `mkverse.sh` to use instead of `verse.conf`.
|
`config.sh` might be renamed to `verse.conf`.
|
||||||
```
|
|
||||||
cp verse.conf quaderno.conf
|
|
||||||
./mkverse.sh quaderno.conf
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -34,7 +31,6 @@ cp verse.conf quaderno.conf
|
|||||||
## pdf2book.py
|
## pdf2book.py
|
||||||
This script takes a pdf and reorders pages for printing signatures.
|
This script takes a pdf and reorders pages for printing signatures.
|
||||||
The number of pages per signature can be varied
|
The number of pages per signature can be varied
|
||||||
Dependency: `pypdf`
|
|
||||||
```
|
```
|
||||||
s=1: 1,2,3,4 -> 04,01.02,03 i=0
|
s=1: 1,2,3,4 -> 04,01.02,03 i=0
|
||||||
08,05.06,07 i=1
|
08,05.06,07 i=1
|
||||||
|
@ -10,13 +10,4 @@ Ladainhas
|
|||||||
testfiles/verse.md
|
testfiles/verse.md
|
||||||
Corridos
|
Corridos
|
||||||
testfiles/verse.md
|
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
|
|
||||||
"
|
"
|
109
mkparallel.sh
109
mkparallel.sh
@ -1,109 +0,0 @@
|
|||||||
#!/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
|
|
23
mkverse.sh
Executable file → Normal file
23
mkverse.sh
Executable file → Normal file
@ -5,17 +5,12 @@
|
|||||||
#set -x
|
#set -x
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ $# -eq 1 ]
|
CONF="conf.sh"
|
||||||
then
|
|
||||||
CONF=$1
|
|
||||||
else
|
|
||||||
CONF="verse.conf"
|
|
||||||
fi
|
|
||||||
|
|
||||||
TEMPLATE="verse-wrapper-template.tex"
|
TEMPLATE="verse-wrapper-template.tex"
|
||||||
CONVERTER="md2verse.sh"
|
CONVERTER="md2verse.sh"
|
||||||
|
|
||||||
if ! [[ -f $CONF ]] ; then echo "$CONF not found! Exiting ..." && exit ; fi
|
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 ! [[ -f $CONVERTER ]] ; then echo "$CONVERTER not found! Exiting ..." && exit ; fi
|
||||||
if ! [[ -x $CONVERTER ]] ; then echo "$CONVERTER not executable! Exiting ..." && exit ; fi
|
if ! [[ -x $CONVERTER ]] ; then echo "$CONVERTER not executable! Exiting ..." && exit ; fi
|
||||||
|
|
||||||
@ -24,7 +19,7 @@ if ! [[ -x $CONVERTER ]] ; then echo "$CONVERTER not executable! Exiting ..." &&
|
|||||||
WD=$PWD
|
WD=$PWD
|
||||||
TMPDIR=$(mktemp -d)
|
TMPDIR=$(mktemp -d)
|
||||||
PATH=$PATH:$WD
|
PATH=$PATH:$WD
|
||||||
pushd $TMPDIR > /dev/null
|
pushd $TMPDIR
|
||||||
|
|
||||||
# CONVERT MD TO TEX
|
# CONVERT MD TO TEX
|
||||||
for tex in $( echo $INFILES | grep '.md$' )
|
for tex in $( echo $INFILES | grep '.md$' )
|
||||||
@ -35,11 +30,8 @@ do
|
|||||||
mkdir -p $(dirname $tex)
|
mkdir -p $(dirname $tex)
|
||||||
$CONVERTER $WD/$tex > $( echo $tex | sed "s/.md/.tex/" )
|
$CONVERTER $WD/$tex > $( echo $tex | sed "s/.md/.tex/" )
|
||||||
else
|
else
|
||||||
if [[ $tex == *.md ]]
|
|
||||||
then
|
|
||||||
echo "$WD/$tex does not exist!!!"
|
echo "$WD/$tex does not exist!!!"
|
||||||
fi
|
fi
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
# CREATE WRAPPER
|
# CREATE WRAPPER
|
||||||
@ -82,12 +74,7 @@ done
|
|||||||
echo "$WRAPPER_END" >> $PROJECT.tex
|
echo "$WRAPPER_END" >> $PROJECT.tex
|
||||||
|
|
||||||
# CREATE PDF
|
# CREATE PDF
|
||||||
$LATEX_ENGINE $PROJECT.tex 2&> /dev/null
|
$LATEX_ENGINE $PROJECT.tex
|
||||||
$LATEX_ENGINE $PROJECT.tex 2&> /dev/null
|
|
||||||
# $LATEX_ENGINE $PROJECT.tex
|
|
||||||
cp $PROJECT.pdf $WD
|
cp $PROJECT.pdf $WD
|
||||||
echo "File $PROJECT.pdf created at $WD"
|
popd
|
||||||
#cp $PROJECT.tex $WD
|
|
||||||
echo "File $PROJECT.tex created at $WD"
|
|
||||||
popd > /dev/null
|
|
||||||
rm -rf $TMPDIR
|
rm -rf $TMPDIR
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
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
|
|
||||||
"""
|
|
74
pdf2book.py
74
pdf2book.py
@ -1,43 +1,35 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
from pypdf import PdfReader
|
|
||||||
from pypdf import PdfWriter
|
|
||||||
import argparse
|
import argparse
|
||||||
parser = argparse.ArgumentParser(
|
parser = argparse.ArgumentParser(
|
||||||
prog='pdf2book',
|
prog='pdf2book',
|
||||||
description='pdf2book rearranges pages for signature printing ',
|
description='pdf2book rearranges pages for signature printing ',
|
||||||
epilog='AQOABA')
|
epilog='AQOABA')
|
||||||
|
|
||||||
parser.add_argument('pdf_file') # positional argument
|
#parser.add_argument('pdf-file') # positional argument
|
||||||
#parser.add_argument('pages', type=int) # positional argument
|
parser.add_argument('pages', type=int) # positional argument
|
||||||
#parser.add_argument('-s', '--signature') # option that takes a value
|
#parser.add_argument('-s', '--signature') # option that takes a value
|
||||||
parser.add_argument('-v', '--verbose', action='store_true') # on/off flag
|
parser.add_argument('-v', '--verbose', action='store_true') # on/off flag
|
||||||
parser.add_argument('-s', '--signature',
|
parser.add_argument('-s', '--signature',
|
||||||
dest='signature',
|
dest='signature',
|
||||||
type=int,
|
type=int,
|
||||||
action='store',
|
action='store',
|
||||||
default=0,
|
default=1,
|
||||||
help='')
|
help='')
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
signature_size=args.signature
|
s=args.signature
|
||||||
if signature_size < 0 :
|
if s < 0 :
|
||||||
# print("signature size must be greater than 0!")
|
# print("signature size must be greater than 0!")
|
||||||
print("signature size must be positive integer!")
|
print("signature size must be positive integer!")
|
||||||
exit(1)
|
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)
|
#print(pages)
|
||||||
|
|
||||||
lst=[]
|
lst=[]
|
||||||
|
|
||||||
def get_reorder(number_of_pages: int, signature_size: int):
|
def get_reorder(page_number: int, signature_size: int):
|
||||||
panu=number_of_pages
|
panu=page_number
|
||||||
sisi=signature_size
|
sisi=signature_size
|
||||||
|
|
||||||
# s| 1 | 2 | 3 | 4 |
|
# s| 1 | 2 | 3 | 4 |
|
||||||
@ -57,23 +49,23 @@ def get_reorder(number_of_pages: int, signature_size: int):
|
|||||||
#12 | 12 | 16 | 12 | 16 |
|
#12 | 12 | 16 | 12 | 16 |
|
||||||
#13 | 16 | 16 | 24 | 16 |
|
#13 | 16 | 16 | 24 | 16 |
|
||||||
|
|
||||||
p=number_of_pages
|
p=page_number
|
||||||
s=signature_size
|
s=signature_size
|
||||||
if signature_size == 0:
|
if s == 0:
|
||||||
signature_size=1
|
s=1
|
||||||
pages_filled= ( int((number_of_pages-1)/(4*signature_size)) +1 )*4*signature_size
|
pages_filled= ( int((p-1)/(4*s)) +1 )*4*s
|
||||||
signature_size=int(pages_filled/4)
|
s=int(pages_filled/4)
|
||||||
pages_filled= ( int((number_of_pages-1)/(4*signature_size)) +1 )*4*signature_size
|
pages_filled= ( int((p-1)/(4*s)) +1 )*4*s
|
||||||
|
|
||||||
signature_count=int( pages_filled/signature_size/4 )
|
signature_count=int( pages_filled/s/4 )
|
||||||
#print(signature_count)
|
#print(signature_count)
|
||||||
for i in range(signature_count):
|
for i in range(signature_count):
|
||||||
# print("i=",i)
|
# print("i=",i)
|
||||||
down=(i+1)*4*signature_size
|
down=(i+1)*4*s
|
||||||
# print("down=",down)
|
# print("down=",down)
|
||||||
up= (i*4*signature_size)+1
|
up= (i*4*s)+1
|
||||||
# print("up",up)
|
# print("up",up)
|
||||||
for count in range(signature_size):
|
for count in range(s):
|
||||||
# print("count=",count)
|
# print("count=",count)
|
||||||
lst.append(down); down -= 1
|
lst.append(down); down -= 1
|
||||||
lst.append(up); up += 1
|
lst.append(up); up += 1
|
||||||
@ -83,34 +75,14 @@ def get_reorder(number_of_pages: int, signature_size: int):
|
|||||||
#print(lst)
|
#print(lst)
|
||||||
#print(len(lst))
|
#print(len(lst))
|
||||||
return lst
|
return lst
|
||||||
def print_signatures(lst: list,signature_size: int):
|
def print_signatures(lst: list,s: int):
|
||||||
if signature_size==0: signature_size=1
|
if s==0: s=1
|
||||||
for i in range( len( lst ) ):
|
for i in range( len( lst ) ):
|
||||||
if ( (i+1) % (4*signature_size) == 0 ):
|
if ( (i+1) % (4*s) == 0 ):
|
||||||
print(lst[i])
|
print(lst[i])
|
||||||
elif ( (i+1) % (4) == 0 ):
|
elif ( (i+1) % (4) == 0 ):
|
||||||
print(lst[i], end=' ')
|
print(lst[i], end=' ')
|
||||||
else:
|
else:
|
||||||
print(lst[i],end='.')
|
print(lst[i],end='.')
|
||||||
lst=get_reorder(number_of_pages, signature_size)
|
lst=get_reorder(args.pages, args.signature)
|
||||||
print_signatures(lst,signature_size)
|
print_signatures(lst,s)
|
||||||
|
|
||||||
# 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)
|
|
||||||
|
Loading…
Reference in New Issue
Block a user