วันเสาร์ที่ 14 สิงหาคม พ.ศ. 2553

การเขียนบันทึกข้อความ (หนังสือราชการภายใน) โดยใช้ Latex

จากเดิมที่เคยทดลองใช้ fig2sty ไปเมื่อคราวก่อน พบว่าอาจเป็นปัญหาสำหรับคนที่ไม่ได้ใช้ xfig เป็นปรกติ (และอันที่จริง ก็ยังทำในส่วนของการลงนามไม่เสร็จด้วย) นอกจากนี้ ด้วยความที่ยังไม่เข้าใจระบบ margin ของเอกสารก็ทำให้ต้องทำ hardcode ในส่วนของการจัดตำแหน่งด้วย ซึ่งไม่น่าจะเป็นวิธีที่ดีเท่าไร

หลังจากได้อ่านเอกสารเกี่ยวกับการเขียน Latex Class ไปเมื่อคราวที่แล้ว เมื่อย้อนกลับมาดูปัญหาเดิม คือการเขียนบันทึกข้อความ (หนังสือภายใน) ก็พบว่าสามารถใช้ความรู้นั้นมาดัดแปลงได้ และแนวทางการแก้ปัญหาก็จะเป็นกรณีทั่วไปมากกว่า โดยเฉพาะไม่ต้องมีการลง hardcode ในเรื่องของตำแหน่งข้อความ (มากนัก)

สิ่งที่ต้องใช้ก็มี
  • การกำหนดตำแหน่งของส่วนหัวของบันทึกข้อความ ทำได้โดยคำสั่ง \parbox
  • การรับค่าต่าง ๆ เช่น เรื่อง เรียน ฯลฯ จากบันทึกข้อความมาสร้างส่วนหัว ทำได้โดยการสร้างคำสั่งใหม่
  • การใส่ภาพครุฑลงในเอกสาร ทำได้โดยใช้แพคเกจ graphicx
  • หากไม่ได้กำหนดไว้เป็นอย่างอื่น ให้ใช้ค่าปริยายของคลาส article ทั้งหมด
ทำให้ได้แฟ้มคลาสดังต่อไปนี้
%----------------------------------------
% officialmemoth.cls
% Official Internal Memo
% 2010-Aug-14 Kittiphong Meesawat ktphong (at) elec.kku.ac.th

% --- Class structure: identification part
% ---
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{officialmemoth}[2010/08/14 version 0.1 Official Internal Memo]

% Package ที่เรียกใช้งาน
\LoadClass[12pt,a4paper]{article}
\RequirePackage[left=25mm,right=25mm,top=25mm,bottom=25mm]{geometry}
\RequirePackage{graphicx}

% ตั้งค่า ย่อหน้า (Indent) ค่าขึ้นย่อหน้าใหม่ (Indentskip) และไม่ให้มีเลขหน้า (pagestyle)
\setlength{\parindent}{3em}
\setlength{\parskip}{1.5em}
\pagestyle{empty}

% คำสั่งเพื่อรับค่าต่าง ๆ ของบันทึกข้อความ
\newcommand*{\officeunit}[1]{\def\@officeunit{#1}}
\newcommand*{\unitid}[1]{\def\@unitid{#1}}
\newcommand*{\telephonenum}[1]{\def\@telephonenum{#1}}
\newcommand*{\memoreg}[1]{\def\@memoreg{#1}}
\newcommand*{\letterto}[1]{\def\@letterto{#1}}

% คำสั่ง \openning เพื่อสร้างส่วนหัวของบันทึกข้อความ
% ตำแหน่งต่าง ๆ เปลี่ยนแปลงได้ ถ้าทราบว่ามีข้อกำหนดตายตัวไว้อย่างไร
\newcommand{\openning}{%
\noindent \parbox{0.2\textwidth}{\raggedright{\includegraphics[width=20mm]{Tra-Khrut.eps}}} \hfill {\Large\bf บันทึกข้อความ} \hfill \parbox{0.2\textwidth}{\qquad}
\begin{tabular}{@{}ll}
{\bfส่วนราชการ} \@officeunit & {\bf โทร.} \@telephonenum \\
{\bfที่} \@unitid / \@memoreg & \@date \\
{\bfเรื่อง} \@title & \\
{\bfเรียน} \@letterto &
\end{tabular} % เว้นหนึ่งบรรทัดข้างล่างนี้ห้ามลบ

}

% คำสั่ง \undersigned เพื่อสร้างที่สำหรับเซ็นชื่อของผู้เขียนบันทึกข้อความ
% ตำแหน่งต่าง ๆ เปลี่ยนแปลงได้ ถ้าทราบว่ามีข้อกำหนดตายตัวไว้อย่างไร
\newcommand{\undersigned}{%
\vskip 3em
\parbox{0.3\textwidth}{\qquad}\parbox{0.7\textwidth}{\centering \@author}
}
%----------------------------------------  

เวลาใช้งานในแฟ้มเอกสาร Latex ก็เรียกใช้ class officialmemoth ดังนี้
%----------------------------------------  
\documentclass[12pt,a4paper]{officialmemoth}
\usepackage[thai]{babel}
\usepackage{thswitch}
% ใช้แบบอักษรกินรี ซึ่งเชื่อว่าคล้าย อังศณา มากที่สุด (ทำไมต้องเป็นอังศณาด้วยนะ?)
\usefont{LTH}{kinnari}{m}{n}

% ชื่อเรื่องหนังสือ
% ชื่อหน่วยงาน
% รหัสหน่วยงาน
% หมายเลขโทรศัพท์หน่วยงาน
\title{ทดสอบบันทึกข้อความ}
\officeunit{คณะวิศวกรรมศาสตร์ ภาควิชาวิศวกรรมไฟฟ้า}
\unitid{{\bf ศธ} 0514.4.1.4}
\telephonenum{12142 -- 44 ต่อ 712}

% เลขส่งหนังสือ (ปรกติมักเว้นว่างไว้ นอกเสียจากเราจะทราบเลขแน่นอน)
% วันที่ออกหนังสือ
\memoreg{}
\date{วันที่ 14 สิงหาคม 2553}

% ผู้รับหนังสือ และ
% ผู้เขียนหนังสือ (พร้อมตำแหน่ง โดยขึ้นบรรทัดใหม่ ถ้ามี)
\letterto{หัวหน้าภาควิชาวิศวกรรมไฟฟ้า}
\author{นายกิตติพงษ์ มีสวาสดิ์ \\ อาจารย์ประจำภาควิชาวิศวกรรมไฟฟ้า}

\begin{document}
% คำสั่ง \openning จะทำการสร้างส่วนหัวของบันทึกข้อความขึ้นมา
\openning
ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า

ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า ทดสอบหัวกระดาษ ทดสอบหัวกระดาษ ทดสอบย่อหน้าและหัวกระดาษ ทดสอบหัวกระดาษและย่อหน้า ทดสอบย่อหน้า

% คำสั่ง \undersigned จะทำการเขียนชื่อผู้เขียนบันทึก และตำแหน่ง (ถ้ามี)
\undersigned
\end{document}
%----------------------------------------  

และผลที่ได้จะมีหน้าตาแบบนี้ 

สิ่งที่ยังเป็นปัญหาอยู่ มีอยู่ 2 - 3 ประการด้วยกันคือ
  1. ผมไม่ทราบว่าตำแหน่งต่าง ๆ ในส่วนหัวของบันทึกข้อความ มีระบุไว้แน่นอนชัดเจนหรือไม่ เท่าที่เห็นใช้ Word Processor เขียนกัน ก็ใช้ Tab กะ ๆ เอา ตอนนี้เลยใช้ tabular environment ซึ่งทำให้ "วันที่" กับ "โทร." นั้นตรงกัน ถ้าไม่มีข้อเสนอแนะเป็นอย่างอื่น ก็จะคงไว้อย่างนี้
  2. ผมไม่ทราบว่าตำแหน่งของการลงชื่อท้ายบันทึกข้อความ มีระบุไว้แน่นอนชัดเจนหรือไม่ เท่าที่เห็นใช้ Word Processor เขียนกัน ก็ใช้ Tab กะ ๆ เอา ตอนนี้เลยใช้ parbox ช่วยกันพื้นที่ไว้ ถ้าไม่มีข้อเสนอแนะเป็นอย่างอื่น ก็จะคงไว้อย่างนี้
  3. รูปครุฑที่ใช้ เป็นรูปจาก wikipedia ซึ่งมีข้อความอธิบายว่า กฏหมายกำหนดไว้ว่า ตราครุฑ เป็นผลงานอันไม่มีลิขสิทธิ์ เนื่องจากเป็นส่วนประกอบของ ระเบียบ ข้อบังคับ คำสั่ง ฯลฯ ของราชการ แต่ถ้าผมทราบว่าใครเป็นผู้สร้างรูปนี้ขึ้นมาก็คงจะดีกว่านี้
  4. ในระบบของผม (ใช้ debain/lenny) อยู่ ไม่สามารถใช้ latex กับ UTF8 ได้ ดังนั้นแฟ้มทั้งหมดที่สร้างขึ้นนี้ จึงเป็น TIS-620 ทั้งหมด แต่สำหรับท่านที่ต้องการนำไปใช้ หากคัดลอกจากเว็บ ก็สามารถใช้ UTF8 ได้ทันทีโดยเติม \usepackage[utf8]{inputenc} ไว้ที่ส่วน preemble ของเอกสาร ก็น่าจะได้
  5. ในระบบของผม ไม่สามารถใช้คำสั่ง \includegraphics กับ GIF ต้นฉบับได้ (ยังหาสาเหตุไม่ได้) จึงต้องแปลง GIF เป็น EPS แทน ซึ่งการทำเช่นนี้มีจุดอ่อนคือ อาจใช้กับ pdflatex ซึ่งเป็นเครื่องมือหลักของ latex ในวินโดว์ ไม่ได้
  6. คนบางคนในหน่วยราชการบางหน่วย อาจไม่เข้าใจเรื่องแบบอักษร ทำให้ยึดติดอยู่กับแบบอักษรตระกูล Angsana หรือ Browallia หรืออื่น ๆ อันเป็นผลงานที่มีลิขสิทธิ์และมีราคา ไม่มีใช้ในระบบโอเพนซอร์ส และไม่ยอมรับแบบอักษรที่ทางรัฐบาลเป็นผู้สนับสนุนให้สร้างเอง เช่น กินรี นรสีห์ และอื่น ๆ ถ้าเป็นเช่นนี้ก็ช่วยไม่ได้จริง ๆ คงต้องทำใจอย่างเดียว
หลังจากนี้จะรอรับคำชี้แนะเพื่อแก้ไขและปรับปรุงสัก 1 - 2 สัปดาห์ เมื่อแก้ไขและปรับปรุงแล้วจะนำแฟ้มเอกสารต่าง ๆ มาเผยแพร่ต่อไปครับ

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