Compare commits
3 Commits
54fdc697dc
...
095e19700e
Author | SHA1 | Date | |
---|---|---|---|
095e19700e | |||
b2c8cffc3d | |||
f9c5191b7d |
12
README.md
12
README.md
@ -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
109
mkparallel.sh
Executable 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
25
mkverse.sh
Normal file → Executable 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
13
parallel.conf
Normal 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
|
||||
"""
|
74
pdf2book.py
74
pdf2book.py
@ -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)
|
||||
|
@ -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
|
||||
"
|
Loading…
Reference in New Issue
Block a user