XeTeX กับภาษาไทย

บทความนี้เป็นของคุณจักรีเช่นเดิมครับ น่าสนใจทีเดียว  ดังนี้เลยครับ

ในการใช้ MikTeX 2.9(XeLaTeX) + ฟอนต์ TH SarabunPSK บนเครื่องที่ admin ไม่อนุญาตให้ติดตั้งฟอนต์เพิ่มในระบบ

เลยหาวิธีใหม่
1. ดาวน์โหลดฟอนต์ TH SarabunPSK(หรือฟอนต์อื่น ๆ) ที่ต้องการใช้งานแล้วสำเนาไฟล์ ttf ไปไว้ที่โฟลด์เดอร์ที่ต้องการ
2. ใช้คำสั่ง

\setmainfont[Path=E:/myFonts/THsarabun/]{THSarabun.ttf}

โดยที่ “E:/myFonts/THsarabun/” เป็นโฟลด์เดอร์ที่จัดเก็บฟอนต์

หรือถ้าเก็บฟอนต์ไว้ที่เดียวกับไฟล์ต้นฉบับ

\setmainfont{THSarabun.ttf}

ด้วยเทคนิคนี้ทำให้ เราสามารถจะฝากฟอนต์ไว้ที่ flash drive หรือที่ dropbox (ตามลิงค์จะเป็น Referral ของผม) แล้วนำไปใช้ที่เครื่องไหน ๆ ก็ได้ครับ

Partition Matrices in LaTeX

เคยจำเป็นต้องเขียนสมการแบบนี้ไหมครับ

จริง ๆ ทำได้ไม่ยากโดยใช้แพ็กเกจ pmat ผมรู้จักแพ็กเกจนี้มานานมากแล้ว แต่ไม่ใช้เพราะว่ามันไม่ใช่แพ็กเกจมาตรฐาน นอกจากนั้นมันมีปัญหากับ pdftex เรื่องคำสั่ง \cr ทำให้ตอนนั้นเลยใช้ไปโดยปริยาย ต้องหันไปใช้แพ็กเกจอื่นเช่น arydshln ดูเรื่อง Advanced matrix partitioning (LaTeX) ซึ่งก็มีปัญหามากพอสมควร วันนี้เห็นวิทยานิพนธ์เพื่อนใช้แพ็กเกจ pmat ก็เลยนึกสนุกลองใช้อีกครั้ง ปรากฏว่าใช้ได้แบบไม่มีปัญหา ก็เลยมาแนะนำกันครับ ในการติดตั้ง เนื่องจากแพ็กเกจนี้ไม่มีบน MiKTeX ทำให้ต้องโหลดและติดตั้งเอาเอง วิธีการก็ง่าย ๆ ไปที่โฟลเดอร์ที่ติดตั้ง MiKTeX แล้วไปต่อที่ tex\latex\ จากนั้นก็สร้างโฟลเดอร์ pmat ทำการคัดลอกไฟล์ pmat.sty ไปไว้ จากนั้นก็ทำการปรับปรุงฐานข้อมูลของ MiKTeX หนึ่งหรือสองครั้งตามชอบใช้ จะใช้ GUI ก็สะดวกดี ก็เป็นอันเสร็จพิธีใช้ได้ทันที ลองดูตัวอย่างง่าย ๆ ต่อไปนี้

\documentclass{report}
\usepackage{pmat}
\begin{document}
\[
    \begin{pmat}[{.|}]
        a_{11} & a_{12} & b_{11} \cr
        a_{21} & a_{22} & b_{21} \cr\-
        c_{11} & c_{12} & d_{11} \cr
    \end{pmat}
\]
\end{document}

ผลที่ได้ก็จะเป็นดังนี้

ก็หวังว่าจะได้ประโยชน์กันนะครับ

Chapter หรือ Section ที่มี สัญลักษณ์คณิตศาสตร์

Chapter หรือ Section ที่มี สัญลักษณ์คณิตศาสตร์ ในกรณีที่ใช้ Hyperref จะมีคำเตือนจาก LaTeX นะครับ มีคำเตือนมาก ๆ ก็ไม่ดี วิธีแก้ก็คือให้ครอบสมการด้วย \texorpdfstring{$สัญญลักษณ์คณิตศาสตร์$}{} คำเตือนก็จะหายไปครับ

A quick way fo looking up colours in LaTeX – WinEDT

อ่านบทความเรื่อง A quick way of looking up colors in LaTeX ของ Sivaram แล้วลองเขียนดูว่า WinEDT users ต้องทำอย่างไร ซึ่งผมค่อนข้างแน่ใจว่าหลาย ๆ คนไม่รู้วิธีการนี้

การใช้สีใน LaTeX ส่วนมากแล้วจะทำเวลาวาดรูปหรือสไลด์เพื่อนำเสนอผลงาน อย่างเช่นบน Beamer ซึ่งในแพ็กเกจ xcolor ที่เรียกใช้โดย beamer นั้นได้เตรียมจำนวนสีสำเร็จรูปไว้ให้พอสมควรอยู่แล้ว ซึ่งผมจะกำหนดให้ beamer รู้จักชื่อสีดังนี้

\documentclass[xcolor=dvipsnames,xcolor=svgnames]{beamer}

เวลาเรียกใช้สีก็แค่ใช้ชื่อสีตามที่กำหนดไว้เช่น LightGoldenrod ก็จะได้สีตาที่กำหนดไว้ ปัญหาคือเราจะรู้ได้อย่างไรว่าสีไหนเป็นสีไหน วิธีการเบื้องต้นก็คือเข้า google แล้วพิมพ์ xcolor manual แล้วก็ไปดูที่บท colors by name แค่นี้ก็เห็นสีเยอะแยะไปหมด สำหรับคนที่ไม่ได้มีเน็ตเร็วอะไร ไปที่ WinEDT แล้วก็เปิดเอกสารว่าง ๆ แล้วพิมพ์ \usepackage{xcolor} จากนั้นก็ดับเบิ้ลคลิ๊กที่ \usepackage ตัว WinEDT ก็จะเรียกคู่มือที่มีอยู่ในเครื่องเราให้อัตโนมัติ ไม่ต้องโหลดจากเน็ตให้เสียเวลา

ข้อเสียอันหนึ่งของการดูชื่อสีจากคู่มือ คือมันไม่ได้ไล่เฉดให้ ทำให้ผู้ใช้ที่คำนึงถือความถูกต้องของสีแล้วอาจจะไม่ชอบ ก็ใช้วิธีของคุณ Sivaram เอา คือใช้ GNU emacs เพื่อใช้ในการดูเฉดสีและชื่อ แต่การเรียนรูปวิธีการใช้ GNU emacs อาจจะกินเวลาข้ามวันก็ได้

colorslist

รูปเฉดสีที่ได้จาก GNU emacs โดยพิมพ์ M-x list-colors-display

ผมไม่แนะนำให้ผู้ใช้ทั่วไปใช้ AuxTeX นะครับ มันยุ่งยากเหมือนใช้ Vim นั่นแหละ (เคยบ้าใช้อยู่พักนึง) แต่ถ้าคุ้นเคยกับ GNU emacs ดีอยู่แล้วก็น่าใช้ทีเดียว

ใครอยากสร้าง Barcode แบบต่าง ๆ เชิญทางนี้เลย

pst-barcode

ตอนนี้ได้เพิ่มการสร้าง barcode แบบต่าง ๆ ให้ครบถ้วนยิ่งขึ้น  ดีจริง ๆ

barcodetestรูปข้างบนคือตัวอย่างบาร์โค้ดสองมิติ โดยใส่ข้อมูลบางอย่างเอาไว้ อย่างรู้ก็ลองเอาโปรแกรมที่สามารถอ่านบาร์โค้ดสองมิติแบบนี้อ่านดูนะครับ

Side by Side Pictures

เวลาต้องการจัดภาพแบบเป็นตารางนั้นจำเป็นมาก ๆ สำหรับรูปภาพที่มีความเกี่ยวเนื่องกัน
ซึ่งเรื่องอย่างนี้ผู้ใช้ LaTeX มาพอสมควรก็จะรู้ว่ามีแพ็คเกจชื่อ subfig (ใช้แทน subfigure)
ตัวอย่างที่หนึ่งของการใช้ subfig คือการวางรูปข้าง ๆ กัน

\begin{figure}
\centering
\subfloat{\includegraphics{figure1}}
\qquad
\subfloat{\includegraphics{figure1}}
\caption{test xfig}
\end{figure}

ซึ่งผลลัพธ์ที่ได้ก็เป็นไปตามรูปข้างล่างsubfig1

แต่ปกติแล้วไม่มีใครใช้วิธีนี้หรอกครับ เพราะว่าเวลาอธิบายต้องบอกว่ารูปทางซ้ายคืออะไร
รูปทางขวาคืออะไร คนอ่านอาจจะงงอีกว่าจริง ๆ คือต้องหันหน้าเข้าหรือหันหน้าออกจาก
หนังสือ วิธีที่นิยมกว่าคือใส่ตัวอักษรกำกับ

\begin{figure}
\centering
\subfloat[ ]{\includegraphics{figure1}}
\qquad
\subfloat[ ]{\includegraphics{figure1}}
\caption{test xfig}
\end{figure}

ซึ่งก็เหมือนวิธีแรกเพียงแต่ใส่วงเล็บก้ามปูหลังคำสั่ง \subfloat เท่านั้น จะได้รูปดังนี้

subfig2

ถ้าอยากได้ตัวอักษรกำกับภาพเป็นตัวอักษรไทยก็ใช้ \usepackage[thai]{babel} คู่กับ
\renewcommand{\thesubfigure}{\thaialph{subfigure}} ซึ่งใส่ไว้ตรงไหนก็ได้
แต่ถ้าต้องการเปลี่ยนตั้งแต่เริ่มต้นเอกสารก็วางไว้ก่อน \begin{document} จะได้ผล
ตามรูปข้างล่าง

subfig3

ถ้าต้องการใส่คำอธิบายแยกย่อยลงไปในแต่ละภาพก็เพิ่มอีกนิดนึงครับ

\begin{figure}
\centering
\subfloat[รูปซ้าย]{\includegraphics{figure1}}
\qquad
\subfloat[รูปขวา]{\includegraphics{figure1}}
\caption{test xfig}
\end{figure}

ซึ่งจะได้ผลดังนี้

subfig4

ยังมีรูปแบบการใช้อีกคือกรณีที่ต้องการให้คำอธิบายในสารบัญรูปสั้นกว่าคำอธิบายที่รูป
จริง ๆ ก็ทำได้โดย \subfloat[สารบัญรูป][ที่รูปภาพ]{\includegraphics{figur1}} ซึ่ง
คำในวงเล็บแรกจะไปปรากฎในสารบัญรูป ส่วนคำในวงเล็บที่สองจะอยู่ที่รูป

เรื่องต่อมาที่สำคัญคือการอ้างอิงข้าม (cross reference) ปกติถ้าเราใส่ \label{xxx} ที่
caption ของรูปหลัก เวลาเราอ้างอิงก็จะได้เลขอ้างอิงของรูปหลัก ถ้าเอาง่ายเราก็ใส่ (ก)
ดังนี้ \ref{xxx}(ก) ซึ่งก็ง่ายดี แต่ไม่ใช่หลักของการอ้างอิงข้ามของ LaTeX ปกติแล้วถ้า
เราเปลี่ยนแปลงลำดับของรูป หรือตำแหน่งในเอกสาร เลขอ้างอิงพวกนี้ต้องเปลี่ยนตามด้วย
สำหรับกรณีนี้ทำได้โดย

\subfloat[รูปที่ 1\label{subfig:xxx}]{\includegraphics{figure1}}

ซึ่งจะเห็นว่าเราใส่ \label เข้าไปในวงเล็บก้ามปู ทีนี้เวลาอ้างอิงก็ทำได้โดยการใ้ช้คำสั่ง
\subref{subfig:xxx} แทนที่จะใช้คำสั่ง \ref เฉย (ตรงนี้ถ้าไม่เข้าใจให้ถามเพิ่มเติม
นะครับ)

เป็นอันว่าเรื่องราวของ subfig จบเพียงเท่านี้ ส่วนกรณีที่่ต้องการวางรูปที่ไม่เกี่ยวข้อง
กันข้าง ๆ กัน แล้วมีคำอธิบายใต้รูปแยกกันนั้นไม่แนะนำให้ใช้ (การทำนั้นทำได้โดย
การใส่ minipage ใน figure อีกที)

XFig and PDFLaTeX

ถ้าคุณใช้ Xfig ที่มากับ Ubuntu ที่ติดตั้งผ่าน CoLinux (ดู Windows, coLinux, Xfig)  ส่วนวิธีการ
ปรับค่า Xfig ก็ดูจาก LaTeX and Xfig

ในเวอร์ชัน 3.2.5 คุณสามารถใช้งานกับ PDFLaTeX ได้ไม่มีปัญหา ทำตามเว็บนี้
Xfig and PDFLaTeX  หลัก ๆ ก็คือต้อง export โดยใช้ตัวเลือก Combined PDF/LaTeX format
ส่วนในไฟล์ LaTeX ต้องมีตัวเลือก

\usepackage[pdftex]{graphicx,color}

อาจจะใช้ xcolor กรณีต้องการสีที่มากกว่า พอคุณต้องการใส่รูปก็

\begin{figure}[!htb]
\resizebox{3cm}{!}{\input d:/foo.pdftex_t} % ตั้งขนาด 3 cm
\end{figure}

เป็ฯอันเสร็จพิธี

Defining the Color of Lines for Plotting

ผู้ใช้ MATLAB จะมีความรู้สึกร่วมกันอยู่อย่างหนึ่งคือ คู่มือไม่ดี วันนี้เพื่อนมาถามปัญหาที่ค้างคาใจ
อยู่นาน ซึ่งปัญาคือ

ต้องการพล็อตกราฟ โดยพล็อตกราฟทีละสิบข้อมูล โดยในแต่ละข้อมูลจะต้องมีสีต่างกัน

ไม่เคยทำนะครับ อย่างเก่งผมก็แค่พล็อตทีละสองหรือสามข้อมูลแล้วให้ MATLAB กำหนดสีให้เอง
ซึ่งจะใช้วิธีถึก ๆ ดังนี้

plot(x,y1,x,y2)

MATLAB ก็จะเลือกสีให้ ถ้าข้อมูลเพิ่มเป็นซักสามสิบหล่ะ คือมี y1 ถึง y10 ไอ้การทำแบบข้างบนนั้น
มันไม่ได้ซะแล้ว ที่สำคัญสีที่ให้โดยอัตโนมัตินั้นมีแค่ 8 สีเอง ซึ่งหนึ่งในนั้นเป็นสีขาว

เรามาเริ่มต้นทำความเข้าใจว่าเราจะพล็อตข้อมูล y1 ถึง y10 ในคราวเดียวได้อย่างไรก่อน วิธีการก็
ทำการสร้างเมตริกซ์ของข้อมูลที่จะพล็อต ตัวอย่างเช่น

x = 0:pi/20:4*pi;
A = ones(length(x),10);   % กำหนดขนาดของเมตริกซ์เพื่อเพิ่มความเร็วในการคำนวณ
for i = 1:10
A(:,i) = sin(x-i/5)’;      % เก็บข้อมูลเป็นเวกเตอร์ในคอลัมน์ของเมตริกซ์ A
end

plot(x,A);

ผลที่ได้จะเห็นได้อย่างชัดเจนว่าเริ่มมีสีซ้ำกัน ทางแก้ก็คือกำหนดสีให้ MATLAB ใหม่ดังนี้

C = zeros(10,3);

for i = 1:10
C(i,1) = 0.1*i;
end
set(gcf,’DefaultAxesColorOrder’,C);

แล้วก็ตามด้วยคำสั่งในการพล็อตกราฟข้างต้น

ผลลัพธ์ที่ได้จะเป็นดังข้างบน

และแน่นอนเราหาทางกลับไม่เจอหรอก ต้องพลิกคู่มืออีกหลายตลบแล้วก็ลองผิดลองถูก จริง ๆ ก็แค่

reset(gcf); หรือ set(gcf,’default’);

ทุกอย่างก็จะกลับไปเหมือนเดิม

หมายเหตุ: ทุกอย่างเอามาจากคู่มือของ MATLAB ทั้งหมด

ผนวก graph papers กับ documents

ใน LaTeX นั้นเราสามารถสร้างกระดาษกราฟผนวกเข้าไปกับเอกสารได้ไม่ยากนัก โดยใช้คำสั่ง

\setlength{\unitlength}{dem}
\begin{picture}(x_dimen,y_dimem)(x_offset,y_offset)
\graphpaper[num](x,y)(lx,ly)
\end{picture}

ซึ่งมากับแพ็กเกจ graphpap

เช่นถ้าต้องการสร้างกราฟสูง 5cm ยาว 5cm และวาดเส้นทุก ๆ 5mm ก็ใช้คำสั่ง

\setlength{\unitlength}{1mm}
\begin{picture}(100,100)
\graphpaper[5](0,0)(50,50)
\end{picture}

graph

ก็จะได้กระดาษกราฟตามต้องการ (รูปที่เห็นใหญ่กว่ารูปจริง)

Two languages in one document

หลายคนเมื่อใช้แพ็กเกจ thailatex

\usepackage[english, thai]{babel}

จะด้วยเหตุผลใด ๆ ก็ตาม บางครั้งเราต้องการแสดงผลเป็นสองภาษาเช่นในหน้าบทคัดย่อ กับ
หน้า Abstract เป็นต้น

ถ้าใครเคยลองก็จะพบว่าลำดับของการใส่ภาษานั้นมีความสำคัญ เช่น ถ้าเราใส่ thai ไว้ข้างหลัง
english ทุกอย่างก็จะเป็นภาษาไทย ทุกอย่างในที่นี้คือเวลาใส่ caption ที่รูปภาพก็จะได้คำว่า
รูปที่ 1: แทนที่จะเป็น Figure 1: ปกติแล้วปัญหานี้ไม่ใช่ปัญหาเพราะไม่มีใครจะทำแบบนี้คือ
เอกสารเดียวแต่มีสองรูปแบบ แต่บางครั้งมันจำเป็นดังที่ได้กล่าวมาแล้วข้างต้น

ร่ายมาซะยาว วิธีแก้ปัญหานี้ง่ายมากครับ ให้ใช้คำสั่ง

\selectlanguage{xxxx}

เลือกภาษาที่คุณต้องการ แค่นั้นทุกอย่างก็จะเป็นไปตามที่คุณปรารถณา