วันเสาร์ที่ 25 มิถุนายน พ.ศ. 2554

การเขียนวิทยานิพนธ์ ม.ข. ด้วย LaTeX - ความเป็นมาและการสร้างคลาส

ความเป็นมา
เรื่องการเขียนวิทยานิพนธ์ ม.ข. ด้วย LaTeX นี่เริ่มเมื่อประมาณปีที่แล้ว คือหลังจากที่ได้ศึกษาเอกสารที่เกี่ยวข้องมาบ้าง (เคยบันทึกไว้ที่นี่) ก็เกิดความอหังการ คิดว่าเราน่าจะทำได้เหมือนกัน จึงคุยกับนักศึกษาปริญญาโทที่อยู่ในความดูแล (คุณอดิเทพ กงจันทร์) ว่ามาช่วยกันทำคลาส LaTeX สำหรับวิทยานิพนธ์กันดีไหม แล้วจะได้ใช้คลาสนี้เขียนวิทยานิพนธ์ส่งเขาไปเลย ไม่ต้องใช้ MS-Word คุณอดิเทพตกลง (เคยคุยกันเล่น ๆ ช่วงใกล้เส้นตายส่งงานว่าคิดถูกหรือคิดผิดก็ไม่รู้ :p)

พวกเราก็เลยร่วมกันพัฒนาคลาสสำหรับวิทยานิพนธ์ ม.ข. นี้ร่วมกันมา โดยเริ่มต้นจากตัวอย่างวิทยานิพนธ์ของ (รอชื่อ - สกุลจริงอยู่) อดีตนักศึกษาระดับบัณฑิตศึกษาของภาควิชาคณิตศาสตร์ คณะวิทยาศาสตร์มหาวิทยาลัยขอนแก่น ซึ่งใช้ LaTeX เขียนวิทยานิพนธ์ภาษาอังกฤษแบบ Hard Code คือไม่ได้สร้างเป็นคลาส และไม่ได้ใช้ภาษาไทย

ก็ช่วยกันทำมาเรื่อย ๆ ตั้งแต่เมื่อราว ๆ เดือนพฤศจิกายน 2553 เป็นต้นมา บัดนี้วิทยานิพนธ์ของคุณอดิเทพก็ส่งไปแล้วโดยใช้คลาสที่ช่วยกันเขียนช่วยกันแก้นี่แหละ แม้ว่าคลาสจะยังไม่สมบูรณ์และยังมีส่วนที่ยังปรับปรุงได้อีกมาก แต่ก็ถือว่าใช้ประโยชน์ได้แล้ว จึงถึงเวลาที่จะนำมาเผยแพร่ให้เป็นประโยชน์และให้ชุมชนช่วยกันพัฒนาต่อไป

ในการนี้ได้รับคำแนะนำจากคุณเทพพิทักษ์ในกิจกรรมโสเหล่ครั้งที่ 12 ของ KKLUG ว่าน่าจะอัพโหลดต้นฉบับไว้ที่โฮสต์ที่ไหนสักที่หนึ่ง เพื่อที่ทุก ๆ คนจะได้ร่วมกันพัฒนาต่อไปได้โดยง่าย จึงได้อัพโหลดต้นฉบับคลาสไว้ที่ sourceforge.net ซึ่งหากผู้อ่านท่านใดสนใจก็ขอให้ดาวน์โหลดต้นฉบับโปรแกรมได้และหากติดปัญหาหรือมีข้อเสนอแนะใด ๆ (น่าจะมีเยอะอยู่เพราะโปรแกรมยังไม่มีตัวอย่างและไม่มีคู่มือ) ก็สามารถติดต่อผู้เขียนได้ที่ห้องทำงานครับ

ในส่วนของบล๊อกก็จะทยอยอธิบายการทำงานของโปรแกรมไปทีละส่วน ๆ เช่นก่อนหน้านี้เคยเขียนไปแล้วหนหนึ่งคือเรื่องการสร้างสารบัญ (เป็นอีกเรื่องหนึ่งที่ได้รับคำแนะนำจากโสเหล่ว่าน่าจะพัฒนาได้อีก)

การสร้างคลาส
เนื่องจากคลาสค่อนข้างใหญ่ มีการกำหนดค่าต่าง ๆ มากมายจึงขอนำมาเสนอทีละส่วน โดยจะนำการสร้างคล้าสจากเล็กไปหาใหญ่ทีละขั้น ๆ เริ่มที่การสร้างส่วนที่จำเป็นสำหรับคลาสเป็นอันดับแรก ส่วนประกอบที่สำคัญของคลาสประกอบด้วย
  • ส่วนหัวที่จำเป็นและการประกาศคลาสที่กำลังสร้างอยู่
  • หากมีคลาสต้นแบบให้ LoadClass ต้นแบบขึ้นมา หากเราไม่เพิ่มหรือแก้ไขการตั้งค่าในส่วนใด ส่วนนั้นก็จะใช้ค่าตั้งจากคลาสต้นแบบ
  • ระบุขนาดกระดาษ
  • ระบุขนาดและแบบอักษร
ซึ่งได้ลงคอมเมนต์ไว้ในโค้ดแล้วว่าส่วนใดเป็นส่วนใดดังนี้
\NeedsTeXFormat{LaTeX2e} % ส่วนหัวที่จำเป็นสำหรับคลาส
\ProvidesPackage{kkuthesis}[2010/11/09 Khon Kaen University Thesis Class] % ชื่อคลาสและรายละเอียด

% ใช้คลาส report เป็นต้นแบบ
\LoadClass[a4paper,oneside,openbib]{report} 

% ใช้ภาษาไทย
\RequirePackage[english,thai]{babel} 
\RequirePackage{thswitch}

% ใช้ตั้งค่าหน้ากระดาษ
\RequirePackage{geometry}

% ใช้เพิ่มรูปภาพ
\RequirePackage{graphicx}

% ตั้งค่าหน้ากระดาษ
\geometry{top=1.5in,bottom=1in,left=1.5in,right=1in,headsep=0.8in}

% ตั้งค่าแบบอักษร อันที่จริงน่าจะใช้ kinnari ได้
% จะใช้แบบอักษรอังศณา จะต้องติดตั้งแบบอักษรอังศณาให้ระบบ LaTeX เสียก่อน 
\def\thairmdefault{angsa}
\usefont{LTH}{angsa}{m}{n}
\fontsize{14pt}{17pt}
\selectfont

เก็บแฟ้มนี้ไว้ในชื่อ kkuthesis.cls เวลาเรียกใช้ก็สามารถเรียกใช้คลาสนี้แทน report ได้ทันที ถึงจุดนี้สิ่งที่เราทำก็มีเพียงการตั้งค่าหน้ากระดาษและแบบอักษรเท่านั้น ในคราวต่อไปจะนำเสนอส่วนที่ใช้สร้างปก ทั้งปกนอกและปกใน ทั้งภาษาไทยและภาษาอังกฤษต่อไป

ไม่มีความคิดเห็น: