- ttb: top to bottom
- rtl: right to left
- dual: view double pages at once
For a ttb+rtl language’s book, it’s natural to look from the right page to the left page, i.e. the page numbers are “2,1,4,3,6,5,…”.
How to do that in typst, or perhaps python pdf toolkit is a better choice?
Easiest would probably to use a custom numbering function to flip the even and odd numbers:
#set page(numbering: (first, second) => {
let flipped-first = first - 1 + 2 * calc.rem(first, 2)
// Change "1 / 1" to any numbering you wish
numbering("1 / 1", flipped-first, second)
})
Full code
#set page(width: auto, height: auto, margin: 2em)
#set text(dir: rtl)
#set text(lang: "ar")
#set page(numbering: (first, second) => {
let flipped-first = first - 1 + 2 * calc.rem(first, 2)
numbering("1 / 1", flipped-first, second)
})
#range(6).map(n => "مرحبًا!").join(pagebreak())
1 Like
A
#pagebreak()
B
#pagebreak()
C
#pagebreak()
D
It is not the page number issue, it’s page order issue, i.e.:
- Expected: A1 B2 C3 D4
- Actually: B1 A2 D3 C4
(And from left to right to view the book:
- Expected: B2 A1 D4 C3
- Actually: A2 B1 C4 D3)
I just search out NO rust or typst solution, so python instead:
// odd_even.typ
#set page(height:auto, width:auto, numbering:"1")
A #pagebreak()
B #pagebreak()
C #pagebreak()
D
# even_odd.py
from pypdf import PdfReader, PdfWriter, PageObject
iPDF = PdfReader("odd_even.pdf")
oPDF = PdfWriter()
ans = PageObject()
for page in iPDF.pages:
num = page.page_number
if num % 2 != 0:
oPDF.add_page(page)
oPDF.add_page(ans)
else:
ans = page
oPDF.write("even_odd.pdf")
typst c odd_even.typ
python3 even_odd.py
firefox *.pdf