Archive

Posts Tagged ‘sed’

เพิ่มเลขหน้าให้ PDF

May 21st, 2009

การใช้ LaTeX ทำสไลด์สำหรับใช้สอนหนังสือ จะมีความลำบากนิดหน่อยในการเตรียม handout สำหรับแจกนักศึกษา (จริงๆ แล้ว ไม่ค่อยอยากแจกเท่าไหร่ พอมีสไลด์ครบแล้ว ส่วนใหญ่ก็จะคุยกันเยอะ) ถ้าใช้ Beamer ก็จะมีแพคเกจ pgfpages มาให้ใช้สำหรับพิมพ์สไลด์หลายๆ หน้ารวมกันในหน้าเดียวอยู่แล้ว แต่ผมชอบใช้โปรแกรม pdfnup ที่มาพร้อมกับแพคเกจ pdfjam บน Ubuntu มากกว่า วิธีใช้ก็ง่ายๆ เช่น

$ pdfnup --nup 2x2 --frame true myslides.pdf

จะได้ผลลัพธ์เป็นไฟล์ PDF ชื่อ myslides-2×2.pdf วางสไลด์สี่หน้าต่อหนึ่งแผ่น แบบ 2 คูณ 2

ทีนี้ทุกเทอมก็ใช้อย่างนี้มาตลอด มาเทอมนี้อยากให้มีเลขหน้าเพิ่มเข้าไปด้วย จะได้เรียงลำดับหน้าต่างๆ ได้ไม่ยาก (ปกติร้านถ่ายเอกสารจะใช้มือเขียนเลขหน้าให้) วิธีที่ง่ายที่สุดก็คือไปหา Adobe Acrobat ตัวจริงมา จะมีฟังก์ชันให้ใส่เลขหน้าโดยอัตโนมัติ แต่เนื่องจากเราไม่อยากเสียตังค์ ก็เลยมานั่งดูโปรแกรม pdfnup ว่าจริงๆ เป็นสคริปต์ที่สร้างไฟล์สำหรับ pdfLaTeX ที่ใช้แพคเกจ pdfpages เพื่อเอาหน้าหลายๆ หน้ามาเรียงไว้ในหน้าเดียวกัน ซึ่งจะเรียงแบบหนึ่งหน้าต่อหนึ่งหน้าก็ได้ เลยลองเล่นดู ใช้แพคเกจ fancyhdr ของ LaTeX มาช่วยกำหนดตำแหน่งเลขหน้า สุดท้ายได้ไฟล์สำหรับใส่เลขหน้าอัตโนมัติมา

\documentclass{article}
 
\usepackage[final]{pdfpages}
\usepackage[paper=a4paper,landscape,tmargin=2cm,bmargin=2.3cm,lmargin=2.5cm,rmargin=1.5cm]{geometry}
\usepackage{fancyhdr}
 
\setcounter{page}{..PAGE..}
\pagestyle{fancy}
\lhead{My Course}
\cfoot{}
\rfoot{{\LARGE\thepage}}
\renewcommand {\headrulewidth}{0pt}
\renewcommand {\footrulewidth}{0pt}
 
\begin{document}
	\includepdfset{pages=-,pagecommand=\thispagestyle{fancy}}
	\includepdf[fitpaper=true,scale=1]{..FILE..}
\end{document}

และเพื่อให้เกิดความสะดวกในการทำงาน ก็เลยไปเขียนสคริปต์มาอีกอันหนึ่ง ใช้ sed แก้ไข ..PAGE.. และ ..FILE.. ใน LaTeX ให้เป็นเลขหน้าเริ่มต้น และชื่อไฟล์ PDF ที่ต้องการ

#!/bin/sh
 
filename=$1
pagenumber=$2
newname=${1%.pdf}-p.tex
sed -e "s/\.\.FILE\.\./"$filename"/g" -e "s/\.\.PAGE\.\./"$pagenumber"/g" < page.tex > $newname
 
pdflatex $newname
pdflatex $newname
rm $newname
rm ${newname%tex}log

สุดท้ายจะได้โปรแกรมง่ายๆ สำหรับเติมเลขหน้าได้ตามต้องการ ส่วนที่ผมยังงงๆ อยู่ก็คือ ไม่เข้าใจว่าทำไมฟอนท์ใน LaTeX มันมีขนาดเล็กกว่าปกติ เลยต้องกำหนดให้ใช้ \LARGE สำหรับเลขหน้า คิดว่าอาจจะมีปัญหาอะไรบางอย่างเกี่ยวกับขนาดกระดาษ หรืออะไรซักอย่าง เลยแก้แบบง่ายๆ ไปก่อน ขี้เกียจไปค้นดูละเอียดๆ ส่วนคนอื่นถ้าจะเอาไปใช้ ก็สามารถปรับแต่งตำแหน่งๆ หรือระยะขอบกระดาษได้โดยแก้ที่ geometry ครับ

latex, linux , , , ,