WinEDT Tricks (LaTeX help and {})

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

เวลาใช้งาน WinEDT นะครับ แพ็กเกจที่ควรจะติดตั้งสำหรับ MiKTeX ก็คือ latex2e-help-texinfo ตัวนี้สำคัญมาก (ติดตั้งผ่าน MiKTeX Pacakage Manager)
เพราะเวลาเราจำวิธีใช้คำสั่งไม่ได้ ก็กด Ctr-F1 ถ้ามีแพ็กเกจนี้ติดตั้งอยู่ WinEDT ก็
จะเรียก Help ขึ้นมาให้เราใช้ ถึงแม้ระบบจะไม่ดีนัก แต่ก็ช่วยเหลือเวลา offline ได้
รวดเร็วดี

สำหรับผู้ใช้ WinEDT อาจจะไม่ชอบใจที่บรรณาธิกรณ์ด้วยนี้ไม่มีระบบ Auto -complete ซึ่งผู้สร้างโปรแกรมยืนยันว่าไม่ชอบ แต่ได้ใส่วิธีการที่ผมชอบมากกว่าและ
ยืดหยุ่นกว่าคือ การใช้ {{ กับ }} ตัวหลังเนี่ยพึ่งรู้เมื่อกี้นี้เอง หลงใช้ตัวแรกอยู่ตั้งนาน
ระบบนี้ดีกว่าเพราะว่าขึ้นอยู่กับผู้ใช้ไม่ใช้ไม่ใช่โปรแกรม เช่น

\begin{xxxx} \end{{ ผลที่ได้คือ

\begin{xxxx} \end{xxxx} สุดยอดไปเลย แต่

\begin{xxxx}} ผลที่ได้คือ

\begin{xxxx}

*

\end{xxxx}

โดยที่ cursor จะอยู่ที่ * เริ่มต้นพิมพ์ได้เลย

เรื่องนี้เตือนใจได้มากทีเดียว เพราะโปรแกรมพวกนี้ส่วนใหญ่ใครเขาอ่านคู่มือกัน
ผมอ่านบ้างบางที โปรผมยังบอกเลยว่า “บ้าหรือเปล่า ต้องอ่านด้วยเหรอ” จริง ๆ ไม่
ต้องอ่านหรอกครับ แต่ถ้าอยากใช้โปรแกรมให้มีประสิทธิภาพก็ต้องอ่าน

Partitioned Matrix

ใครเคยสร้างเมตริกซ์แบบนี้

\left[\begin{array}{c|c} A & B \\ \hline C & D \end{array}\right]

จะเห็นได้ว่าการเอาแนวทางของ array มาใช้และดัดแปลงนิดหน่อย มันไม่ยาก
เลย แต่ถ้าสังเกตดี ๆ จะพบว่าตัวอักษร C และ D ใต้เส้นนั้นมันชิดกันเกินไป ไม่
สวย วิธีแก้ก็ให้นำคำสั่ง \rule มาช่วยดังนี้ครับ

\left[\begin{array}{c|c}
A     &     B  \\ \hline

\rule[13pt]{0pt}{0pt} C   &   D

\end{array}\right]

\left[\begin{array}{c|c} A & B \\ \hline \rule[13pt]{0pt}{0pt}C & D \end{array}\right]

จะเห็นความแตกต่างได้ทันทีนะครับ ตัวเลข 13pt นั้นก็ขึ้นอยู่กับขนาดตัวอักษร หรือ
ขึ้นกับความพอใจของผู้ใช้นะครับ

ปัญหาเรื่อง bibtex และ two column equation

ปัจจุบันประชุมวิชาการในต่างประเทศเริ่มเข้มงวดกับแบบฟอร์มของเอกสารมากขึ้น
โดยความเข้าใจส่วนตัวคิดว่าคงเพราะต้องการทำงานแบบอัตโนมัติให้มากขึ้น ด้วย
ความที่เอกสารแบบ pdf นั้นเราสามารถตรวจสอบรายละเอียดคุณลักษณะของ
เอกสารได้ทั้งหมด ดังนั้นการตรวจสอบจึงเข้มงวดตั้งแต่เริ่มต้น ลองไปดูที่ Paper Plaza ดูก็ได้ครับ เรื่องนี้ได้สร้างความปวดเศียรเวียนเกล้าให้ผู้คนมากมายทีเดียวฃ
ตัวผมเองนั้นมีปัญหาน้อยเพราะมีความชำนาญพอเอาตัวรอดได้ อีกอย่างคุ้นเคย
กับเครื่องมือที่เป็นมาตรฐานอยู่แล้ว วันนี้เพื่อนร่วมงานเอาปัญหายาก ๆ เกี่ยวกับ
สองเรื่องตามหัวเรื่องมาถาม (ปกติควรจะเป็นหน้าที่ของผู้จัดประชุมวิชาการที่ควร
จะจัดหาไฟล์รูปแบบ สำหรับ \LaTeX ไว้ให้ผู้เขียน ซึ่งต้องประกอบด้วย
.cls สำหรับเอกสาร .bst สำหรับ bibtex) ซึ่งปัญหามีดังนี้ครับ

ผู้จัดประชุมวิชาการต้องการให้อ้างอิงเอกสารในรูปแบบนี้ (Name, 1998) ซึ่งปกติ
ถ้าใครใช้ harvard.sty มันก็จะเป็นแบบนี้อยู่แล้ว แต่ผู้จัดดันสร้างไฟล์รูปแบบไว้
ให้ผู้เขียนใช้ และไฟล์รูปแบบดังกล่าวดันเก่าแก่และไม่สอดคล้องกับ harvard.sty
เวอร์ชันปัจจุบัน วิธีการที่ใช้แก้ไขตอนนั้นก็คือ ใช้ natbib.sty แล้วใช้คำสั่ง \citep
และ \citet แทนที่จะเป็น \cite แบบปกติ ทีนี้เจ้าไฟล์รูปแบบเจ้ากรรมดันไปกำหนด
วงเล็บให้เป็นวงเล็บก้ามปู [ ] ซะอีก แก้อย่างไรก็ไม่หาย บรรณาธิการของประชุม
วิชาการบอกว่าให้แก้ไขไฟล์รูปแบบเอาเอง (บ้าเหรอ) ผมจึงต้องไปพึ่งคู่มือของ
natbib.sty ซึ่งทำไว้ค่อนข้างดีทีเดียว natbib.pdf และพบว่ามีวิธีแก้ไขโดยกำหนด
Citation Punctuation เองโดยใช้คำสั่ง \bibpunct คือถ้าต้องการให้เป็นวงเล็บ
แบบปกติก็ใช้

\bibpunct[;]{(}{)}{,}{a}{}{;} เพื่อเปลี่ยนรูปแบบเป็น (Jone et al. 1990) แทน
ที่จะเป็น [Jone et al. 1990]

ปัญหาที่สองคือการใส่สมการแบบยาว ๆ ที่คร่อมสองคอลัมน์ในเอกสารแบบสอง
คอลัมน์ จริง ๆ แล้วปัญหานี้แก้ง่าย ๆ ด้วยการใช้ \begin{figure*} \end{figure*}
คร่อมสมการ เพื่อบอก \LaTeX ให้ใช้คอลัมน์เดี่ยวสำหรับรูปหรือตาราง
ปัญหาคือเนื่องจากสมการมีขนาดใหญ่ ดังนั้นสมการนี้จะถูกจัดให้วางไว้ที่ส่วนบน
ของหน้าถัดไปเสมอ เวรกรรมจริง ๆ บรรณาธิการก็ไม่ยอมให้ผ่านนะสิครับทีนี้ ร้อน
ถึงผมอีกที่ต้องหาทางแก้ไข โดยคราวนี้ต้องไปศึกษาวิชามารจาก IEEEtran_
HOWTO.pdf
ซึ่งได้อธิบายวิธีการแก้ไขไว้อย่างพิศดารทีเดียว โดยเขาเรียกปัญหา
นี้ว่า Double Column Equation รายละเอียดไปดูเอาเองจากเอกสารที่ว่า โดย
คร่าว ๆ คือ คุณต้องใส่สมการนั้นไว้หน้าก่อนหน้าหนึ่งหน้า เช่น ถ้าต้องการใส่ไว้ที่
หน้า 6 ในรหัสต้นของคุณก็ต้องใส่สมการไว้ที่หน้า 5 ตามลำดับหน้าของผลลัพธ์
การทำเช่นนี้จะทำให้ลำดับตัวเลขของสมการเพี้ยนไป วิธีแก้ก็ต้องเก็บค่าตัวเลข
ของสมการไว้ที่ตัวแปรใดตัวแปรหนึ่งไว้ก่อน เช่น

\newcounter{mytempeqncnt} สร้างตัวแปรมาเก็บค่า counter
ก่อนเขียนสมการก็ต้องเก็บค่า counter ของสมการ ด้วยคำสั่ง
\setcounter{mytempeqncnt}{\value{equation}}
และก็เซ็ตตัวเอง counter ปัจจุบันให้ล่วงหน้าไป เช่นถ้าสมการของเราต้อง
การตัวเลขอ้างอิงสองตัว 6-7 เราก็เซ็ทตัวนับให้เป็นห้าด้วยคำสั่ง
\setcounter{equation}{5}
เมื่อจบสมการเราก็แก้ตัวนับกลับไปเป็นตัวเดิมด้วยคำสั่ง
\setcounter{equation}{\value{mztempeqncnt}}
ทีนี้ไปดูที่ผลลัพธ์ เลขสมการมันจะเหลื่อมกันอยู่ ก็ให้ไปที่ก่อนหน้าสมการที่เลข
มันเหลื่อมกันแล้วใช้คำสั่ง
\addtocounter{equation}{2}
ก็เป็นอันจบเรื่อง

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

Multicolumns page

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

ถ้าถามเซียนว่าโจทย์อย่างนี้แก้อย่างไร ก็คงตอบง่าย ๆ ว่าใช้ minipage ซึ่งง่ายจะ
ตาย

\begin{minipage}[l]{0.5\textwidth}

bla bla

\end{minipage}
\begin{minipage}[l]{0.5\textwidth}
bla bla
\end{minipage}

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

\begin{multicols}{x}

bla bla

\end{multicols}

ตัวเลข x เป็นจำนวนคอลัมน์ที่ต้องการ ซึ่งมีได้มากถึง 10

และผมพึ่งรู้เหมือนกันว่าแพ็กเกจ multicol นั้นมาพร้อมกับกลุ่มเครื่องมือที่มีชื่อว่า
tools ซึ่งทีมพัฒนา $latex \LaTeX 3$ ได้รวบรวมไว้ ยังมีแพ็กเกจดี ๆ อีกมากมาย
ในนั้น ไว้จะมาเล่าให้ฟังทีหลังครับ  

พัก

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

สิ่งหนึ่งที่ค่อนข้างจะผิดหวังเอามาก ๆ ก็คือเอกสารระดับลึกของ \LaTeX
นั้นไม่ฟรี โอกาสที่ผู้ใช้ระดับสูงจะพัฒนาแพ็กเกจขึ้นมาจึงทำได้ยากพอสมควร และ
การแกะรหัสของแพ็กเกจก็ไม่ใช่เรื่องที่สนุกนัก เพราะบางคนใช้ผสมกันระหว่าง
\LaTeX2.09 กับ 2e ทำความเข้าใจได้ยากจริง ๆ

Adobe Reader 8.1 ออกแล้ว

Adobe Readerไม่รู้ว่าแก้ปัญหาอะไรบ้าง แต่รู้ว่าเร็วขึ้น ใครชอบใช้ก็ลองเอาเองแล้วกัน พึ่งลงเมื่อกี้นี้
เอง

thailatex.freeforums.org

คิดว่าคนใช้ \LaTeX ในประเทศไทยเยอะพอสมควร ผมได้สมัครสมาชิก
feeforums.org ไว้เพื่อเป็นทางเลือกในการฝากคำถาม ตอบคำตอบสำหรับ \LaTeX
ดังนั้นถ้ามีคำถามที่ต้องการคำตอบ เราไปแลกเปลี่ยนกันที่นั้นก็ดีนะครับ

http://thailatex.freeforums.org/

ไว้ผมจะปรับปรุงเรื่อย ๆ อนึ่งเราเคยมี yahoo group แล้วแต่ตอนนี้ที่นั่นเน่ามาก นี่คง
เป็นอีกความพยายามสร้างกลุ่มผู้ใช้ \LaTeX ในประเทศไทยครับ