วันพฤหัสบดีที่ 3 มิถุนายน พ.ศ. 2553

ใช้ Latex เขียนหนังสือราชการ

ผมใช้ Latex มานาน แต่ก็มีความเชี่ยวชาญ Latex เพียงระดับธรรมดา คืออ่านคู่มือออก ใช้งานได้ แต่ไม่เก่งกาจถึงขนาดออกแบบเอกสารเองได้ ใช้เป็นเพียงคลาสหรือแพคเกจที่มีคนออกแบบไว้ให้แล้วเท่านั้น ดังนั้นปัจจุบันจึงใช้ Latex เขียนเพียงเอกสารประกอบการสอนโดยใช้แพคเกจ Beamer ช่วย (และใช้สไตล์และธีมสำเร็จรูปที่มากับแพคเกจ)

แต่ผมก็หงุดหงิดกับการใช้ Open Office ในการเขียนหนังสือราชการเพราะเราใช้ Open Office ไม่คล่อง ควบคุมตำแหน่งจำพวกกั้นหน้า แท็ป ย่อหน้า ไม่ใคร่จะได้

ก็นึกได้ว่าเคยเห็นแพคเกจหนึ่งในรายชื่อแพคเกจของ Synaptic คือ fig2sty ซึ่งมีคำอธิบายว่าเป็นโปรแกรมช่วยออกแบบเอกสารสำหรับ Latex ด้วย xfig จึงลองอ่าน man page ดู พบว่าใช้งานง่าย จึงทดลองใช้ fig2sty ช่วยออกแบบหนังสือราชการดู

การใช้งาน fig2sty มีหลักการง่าย ๆ ก็คือ
  1. สร้าง Layout ของเอกสารด้วย xfig โดยสร้างเป็นแฟ้มรูปภาพ fig โดยตำแหน่งต่าง ๆ ระบุด้วยกรอบสี่เหลี่ยม
  2. ในแทรกแท็กข้อความ (อ่านความหมายของพารามิเตอร์ข้อความจาก man page) เช่นชื่อ type ของข้อความในตำแหน่งนั้น ๆ
  3. เรียกใช้คำสั่ง > fig2sty yourlayout.fig ท่านจะได้แฟ้ม yourlayout.sty มา
  4. เขียนแฟ้ม tex โดยเรียกใช้แฟ้ม sty ในแฟ้มนี้
  5. เรียกใช้คำสั่งของ Latex ตามขั้นตอนปกติ
สร้าง Layout ด้วย xfig และแท็กต่าง ๆ


การเรียกใช้แฟ้ม sty จากแฟ้ม tex

\documentclass{article}
\usepackage[thai]{babel}
\usepackage{figtosty} <----- เรียกใช้แพคเกจนี้
\usepackage{yourlayout} <--- เรียกใช้ yourlayout แล้วแต่ว่าตั้งชื่อไว้ว่าอย่างไร

\begin{document}
\begin{officialmemo}
\begin{figframe}{header}  <--- ชื่อแท็กตาม Layout ที่ออกแบบ

\begin{center} 
{\Large {\bf บันทึกข้อความ}} <--- หัวกระดาษ
\end{center} 
\end{figframe} 

\begin{figframe}{headtag} <--- ชื่อแท็กตาม Layput ที่ออกแบบ
\noindent {\bf ส่วนราชการ} คณะ... ภาควิชา... \\ 
ที่ ศธ xxxx.x.x/xxxx \\            \
{\bf เรื่อง} ขอความอนุเคราะห์      |
\\ {\bf เรียน} หัวหน้าฝ่าย         |
\\ \indent {\bf โทร} xxxxx, xxxxx  >--- รูปแบบส่วนหัวของหนังสือราชการที่ผมใช้
\\ วันที่ 2 มิถุนายน 2553\\        |
\\                                 |
\\                                 /
\end{figframe} 

\begin{figframe}{body} 
\indent เนื่องด้วยอะไรสักอย่าง...  <--- เนื้อความ

\hspace*{8cm}ด้วยความนับถือ \\     <--- คำลงท้ายหนังสือ
\\ 
\\ 
\hspace*{9cm}อาจารย์นั่งฟัง ตั้งใจสอน 
\\ 
\hspace*{9cm}อาจารย์ประจำภาควิชาฯ 
\end{figframe} 
\end{officialmemo} 
\end{document}

ในโค้ด Latex ผมละส่วนที่เกี่ยวกับการจัดกั้นหน้า กั้นหลังไว้ เนื่องจากไม่แน่ใจว่าหากไปทดลองที่เครื่องอื่นแล้วจะได้ผลแน่นอนเหมือนกันหรือไม่

ผลลัพธ์ที่ทดลองได้
ปัญหาที่พบ
หากไม่ตั้งค่ากั้นหน้า กั้นหลัง และออฟเซ็ตต่าง ๆ เอกสารจะกินขวา ผมแก้โดย preemble นี้

\pagestyle{empty}
\setlength{\hoffset}{0pt}
\setlength{\marginparwidth}{0pt}
\setlength{\oddsidemargin}{0pt}
\setlength{\textwidth}{17cm}

\setlength{\voffset}{0pt}
\setlength{\topmargin}{0pt}
\setlength{\headheight}{0pt}
\setlength{\headsep}{0pt}


ปัญหาถัดมาคือตัวหนังสือที่คอลัมน์ซ้ายกับคอลัมน์ขวาของส่วนหัว (เรื่อง เรียน ฯลฯ) ไม่ตรงบรรทัดกัน ผมแก้แบบถึก ๆ โดยเติมแท็ก offset ลงในกรอบขวา ค่อย ๆ ปรับจนตรงกัน

ปัญหาสุดท้าย คือส่วนคำลงท้าย เราควบคุมตำแหน่งได้แน่นอนก็จริง แต่ถ้ามีการเปลี่ยนแปลงข้อความ ก็จะต้องมาตั้งค่าตรงนี้กันใหม่อีก ผมยังแก้ไม่ได้ แต่คิดว่าน่าจะใช้คำสั่ง box ของ Latex ช่วยได้ เอาไว้ลองแล้วจะมารายงานผลต่อไปครับ

เรื่องตลกที่สุดของงานนี้ก็คือ แฟนผมมาเห็นเข้าว่าผมกำลังทำอะไรอยู่ พออธิบายให้ฟัง เธอก็แซวว่า
"ถ้าเป็นเรานะ เราคงใช้ Latex ทำในสิ่งที่ Word ทำไม่ได้ ถ้าทำแค่นี้เราใช้ Word เร็วกว่า"
คิดไปคิดมา เออนะ มันก็จริงของเขา แต่เอาเถอะ ผมว่าผมทำ Layout ไว้อย่างนี้ สบายกว่าที่จะไปหงุดหงิดกับกั้นหน้ากั้นหลังอะไรนั่นของ Open Office อยู่บ้างหรอก