ห่างหายการเขียนบล็อกไปนาน ในที่สุดก็กลับมาอีกครั้ง คราวนี้มาแนววิชาการนิดๆ กีคหน่อยๆ เกี่ยวกับเครื่องมือที่ใช้ในการเขียนเปเปอร์ ซึ่งก็คือ LaTeX นั่นเอง บล็อกนี้จะไม่เกริ่นถึงการติดตั้งละ ทึกทักเอาเองว่ามีอยู่ในเครื่องแล้ว ใช้เป็นระดับนึงแล้ว แต่ถ้าเป็นผู้เริ่มต้นใหม่เลยและมีความสนใจอยากลองติดตั้งก็ลองอ่านบล็อกเก่าดูได้ครับ ในบล็อกนี้จะกล่าวถึงการใช้ LaTeX เขียนเปเปอร์สำหรับประชุมวิชาการที่ IEEE เป็นผู้ดูแลเป็นหลัก โดยการอ้างอิงในบล็อกนี้จะมีตัวช่วยคือ BibTeX และ Mendeley อย่างไรก็ตามสำหรับเราแล้วการเขียนเปเปอร์วิชาการนี่มันยากจริงๆ ยากจนรู้สึกพ่ายแพ้ขณะเขียน ย่ิงเป็นพวกกลัวโดนจับผิด จะอ้างแต่ละทีก็ลำบากจิตลำบากใจยิ่งนัก เพราะงั้นในบล็อกนี้เราจะไม่พูดถึงเทคนิคการเขียนเปเปอร์อย่างไรให้ดีแม้แต่น้อย ว่ากันแต่เรื่องเครื่องมือล้วนๆ วิชาการส่งไปทางนู้น @titipata เพราะทางนี้ไม่ค่อยสันทัดเท่าไหร่ฮะ
เช่นเคยเรายังคงใช้ Atom เขียน LaTeX อยู่เหมือนบล็อกเก่าที่แปะไว้ข้างบนแต่สำหรับโปรแกรมเปิด pdf นั้นได้ย้ายมาใช้ Skim แทนแล้ว (ถ้าใครอยู่บนวินโดว์ก็น่าจะใช้ Adobe Reader ได้นะ) เนื่องมาจากแพคเกจที่ใช้เปิด pdf ในอะตอมนั้นทำงานค่อนข้างช้าเมื่อเปเปอร์เริ่มมีความเยอะ ส่วนแพคเกจอะตอมอื่นๆ ที่ต้องติดตั้งเพิ่มจากบล็อกเก่าก็จะมี latexer ที่ช่วยได้มากเวลาเราจะอ้างถึงเปเปอร์ที่อยู่ในไฟล์ BibTeX
เตรียมความพร้อม
ถึงบรรทัดนี้ก็สมมติว่าพร้อมเขียนละ แต่เพื่อความลื่นไหลในการอ่านเราจะดาวน์โหลดและติดตั้งสิ่งที่จำเป็นให้ครบซะก่อนที่จะไปต่อ ทั้งแพคเกจบน LaTeX รวมไปถึงโปรแกรมจัดการสื่ออ้างอิง
LaTeX template
สำคัญมากอันนี้ เพราะเราจะไม่เขียนเองทั้งหมดแน่นอน ทาง IEEE ก็เตรียมไว้ให้อย่างเพียบพร้อมที่หน้าเว็บนี้ หรือถ้าอยากกดตรงๆ เลยก็จิ้มข้างล่าง
ซึ่งเค้าก็มีเปเปอร์วิธีใช้งานมาให้ด้วย (รูปที่ใช้เปิดบล็อกนี้ที่เห็นข้างบนนั่นแหละ) เขียนไว้ค่อนข้างละเอียด บล็อกนี้จริงๆ แล้วก็สรุปสิ่งที่(คิดว่า)จำเป็นมาจากคอมเมนต์ในเทมเพลตกับเปเปอร์นี้แหละ ถ้าใครสงสัยตรงไหนเพิ่มเติมก็ลองตามไปอ่านที่ต้นทางดูได้ครับ
LaTeX packages
แพคเกจที่เราต้องเพิ่มมาเองจะมีหลักๆ ก็คือ breakurl
, hyperref
, multirow
และ booktabs
แต่ถ้าใครลง LaTeX ตัวเต็มเราก็ไม่แน่ใจเหมือนกันว่าจะต้องลงมั้ย ยังไงก็ลองลงดูก่อนได้ ถ้ามี Tex Live Utility ก็ใช้ตามสะดวก หรือถ้าไม่มีก็รันคำสั่งเอาก็ได้
sudo tlmgr install <package name>
Reference Manager
ที่มีอยู่ก็หลายเจ้ามาก ที่คุ้นๆ หูกันก็อาจจะเป็น Endnote ที่มีความผูกพันธ์อย่างเหนียวแน่นกับ MS Word แต่ก็่อย่างที่เกริ่นไว้ว่าบล็อกนี้จะใช้ Mendeley อะเนาะ เพราะงั้นก็ติดตั้งเลยดีกว่า (ไปหน้าดาวน์โหลด) หรือถ้าใครใช้อย่างอื่นอยู่แล้วที่สามารถคัดลอกข้อมูลผู้แต่งออกมาเป็น BibTeX entry ได้ก็ใช้อันนั้นเลยก็ได้ครับ
เริ่มสำรวจไฟล์เทมเพลต
ทีนี้เรามาแตกไฟล์ที่โหลดมาเมื่อกี้จะพบว่ามีอยู่สองโฟลเดอร์ซึ่งก็คือ IEEEtran กับ IEEEtranBST2 โดยภายในแต่ละโฟลเดอร์ก็จะมีไฟล์เต็มไปหมด แต่ไฟล์ที่เราจะใช้กันในตอนนี้มีเท่านี้
IEEEtran
- IEEEtran.cls
- bare_conf.tex
IEEEtranBST2
- IEEEabrv.bib
- IEEEexample.bib
- IEEEfull.bib
- IEEEtran.bst
- IEEEtranS.bst
โดยที่ไฟล์หลักที่เราจะทำการแก้ไขคือ bare_conf.tex นั่นเอง ก่อนจะเริ่มทุกสิ่งก็ให้สร้างโฟลเดอร์สำหรับโปรเจคขึ้นมาแล้วก็ copy ไฟล์ที่จะใช้ไปรวมกันไว้ จากนั้นก็เปลี่ยนชื่อ bare_conf.tex ซะหน่อย บล็อกนี้เปลี่ยนเป็น my_conf_paper.tex ตอนนี้เราก็จะมีโฟลเดอร์สำหรับเปเปอร์นี้พร้อมทั้งไฟล์ที่ต้องใช้หน้าตาแบบนี้
ลองคอมไพล์ครั้งแรก
มาถึงจุดนี้เราก็จะมาลองคอมไพล์กันดูว่าหน้าตาเทมเพลตของเปเปอร์นี้จะออกมาเป็นยังไง เวลาคอมไพล์ก็ใช้แพคเกจ latex
บนอะตอมนี่แหละ ปุ่มลัดคือ ctrl
+alt
+b
เมื่อคอมไพล์เสร็จโปรแกรมที่ใช้ในการเรียกไฟล์ตามที่ตั้งค่าไว้ในแพคเกจ latex
จะถูกเรียกขึ้นมา เนื่องจากบล็อกนี้คงไม่เขียนอะไรเยอะเลยตั้งค่าให้ใช้ pdf-view
เพื่อแสดงในอะตอมไปเลยละกัน
NOTE หลังจากใช้ pdf-view
ไปสักพักก็พบความช้าอย่างคาดไม่ถึง เลยกลับไปใช้ Skim เหมือนเดิม..
ไฟล์ที่ได้ออกมาก็จะหน้าตาโล้นๆ ประมาณนี้
ลองสังเกตในโฟลเดอร์ดูจะพบว่ามีไฟล์แปลกๆ ขึ้นมาหลายอันเช่น .log
.aux
เป็นต้น ซึ่งพวกนี้เป็นไฟล์จำเป็นในกระบวนการคอมไพล์ เราสามารถลบได้ด้วยปุ่มลัด ctrl
+alt
+c
การใช้คลาส IEEEtran
ในที่สุดก็ได้เข้าเรื่องซะที ขออภัยที่เกริ่นเยอะไปหน่อย มาถึงตรงนี้การเขียนก็ไม่ใช่เรื่องยากอีกต่อไป จริงๆ ก็แค่เลื่อนๆ หาสิ่งที่เราต้องการแก้ ส่วนมากก็จะเป็น \section{}
กับ \subsection{}
แล้วก็เพิ่มลดอะไรไปตามสะดวก เดี๋ยว LaTeX จะจัดการจัดหน้าและเว้นช่องไฟตัวอักษรให้อย่างสวยงามเอง เนื่องจากมันง่ายขนาดนี้ บล็อกนี้ก็เลยจะมาพูดถึงสิ่งที่มันไม่ได้โชว์หรือเปิดใช้มาตั้งแต่ต้นกัน โดยจะเริ่มไล่ไปตามคอมเมนต์ในไฟล์ my_conf_paper.tex ตั้งแต่บรรทัดที่ 66-67 เป็นต้นไป
Citation packages
บรรทัดที่ 95 จะเจอ \usepackage{cite}
อยู่ ก็จัดการ uncomment โลด จริงๆ แล้วเหมือน cite เป็น built-in module แต่เค้าใส่มาให้ก็เปิดซะหน่อย
% *** CITATION PACKAGES ***
%
\usepackage{cite}
% cite.sty was written by Donald Arseneau
Graphics related packages
บรรทัดที่ 116-154 อันนี้สำคัญมาก เพราะเป็นแพคเกจที่ช่วยในการจัดการไฟล์รูปภาพต่างๆ ที่เราจะเอาใส่เข้ามาในเปเปอร์ เปิดใช้งานก็ uncomment เช่นเคย
\ifCLASSINFOpdf
\usepackage[pdftex]{graphicx}
% declare the path(s) where your graphic files are
\graphicspath{{../pdf/}{../jpeg/}{images/}}
% and their extensions so you won't have to specify these with
% every instance of \includegraphics
\DeclareGraphicsExtensions{.pdf,.jpeg,.png,.jpg}
\else
ตรงนี้จะมีส่วนช่วยให้ชีวิตสะดวกนิดนึงคือ \graphicspath{}
ที่จะให้กำหนดที่ที่เราจะเก็บไฟล์รูปภาพไว้ ในที่นี้ให้เราไปสร้างโฟลเดอร์เพิ่มในโฟลเดอร์โปรเจคเช่น images แล้วก็เติม path เข้าไปเป็น \graphicspath{{../pdf/}{../jpeg/}{images/}}
อีกอย่างที่ชีวิตจะสะดวกขึ้นก็คือ \DeclareGraphicsExtensions{.pdf,.jpeg,.png,.jpg}
ที่ประกาศฟอร์แมตภาพที่รองรับ เวลาใส่รูปก็ไม่ต้องใส่นามสกุลเลยถ้ามันอยู่ในนี้ ในที่นี้ให้เพิ่ม .jpg
เข้าไปหน่อย ถึงแม้มันจะเหมือน .jpeg
แต่มันเรียกแทนกันไม่ได้
URL breaking & Table formatter packages
อันนี้ไม่มีละต้องเพิ่มมาเอง ในที่นี้เราเพิ่มไปที่บรรทัด 301 ตามนี้
% *** URL BREAKING PACKAGES ***
\usepackage{url}
\usepackage{breakurl}
\usepackage[breaklinks]{hyperref}
% break line both / and -
\def\UrlBreaks{\do\/\do-}
% *** TABLE FORMATTER PACKAGES ***
% Use to format table in case multirow needed
\usepackage{multirow}
\usepackage{booktabs}
ซึ่งแพคเกจกลุ่มแรกใช้ในการจัดลิงค์ที่ใส่ไว้ใน References ให้สวยงามยิ่งขึ้น โดยการตัดขึ้นบรรทัดใหม่เมื่อเจอ /
และ -
หรือใครจะเพิ่ม _
ก็ตามสะดวก ขึ้นอยู่กับว่า References ที่เราอ้างนั้นมันมีลิงค์ที่มีสัญลักษณ์พวกนี้มากน้อยแค่ไหน ส่วนกลุ่มหลังช่วยในการวาดตารางบน LaTeX ให้ดูสวยงามขึ้นในระดับนึง
การใส่สมการ
การใส่สมการเป็นหนึ่งในจุดแข็งของ LaTeX เนื่องจากมันเรนเดอร์ออกมาได้สวยมาก และเราไม่ต้องไปจัดอะไรมันให้เหนื่อยใจ นอกจากนี้เรายังสามารถ label สมการเพื่อที่จะอ้างถึงได้อีกด้วย สำหรับข้อมูลเพิ่มเติมเช่นสัญลักษณ์ต่างๆ หรือการเขียนพวกเศษส่วนตัวห้อยตัวยก ก็แนะนำเว็บนี้จาก Sharelatex ไว้ให้ไปอ่านกัน
การเขียนสมการใน LaTeX เขียนได้สองแบบหลักๆ คือแบบสร้าง environment ซึ่งมันจะนับจำนวนสมการทั้งหมดแล้วแสดงเลขกำกับสมการให้อัตโนมัติ กับอีกแบบก็คือไม่สร้าง ยกตัวอย่างด้วยการเขียนจริงเลยละกัน
% start from line 528
\section{Equation}
This section shows how we can write the equation in LaTeX. The
$y = mx + c$ is supposed to be in-line equation. Notice that we
use \$ sign to open in-line equation. We can also write full
line equation using \$\$ like this $$E = mc^2$$. Again, notice
that there is no equation number here. To write the equation
with its labelled number we do as follows:
\begin{equation}
\label{velo1}
S = ut + \frac{1}{2} at^2
\end{equation}
\begin{equation}
\label{velo2}
v = u + at
\end{equation}
\begin{equation}
\label{velo3}
v^2 = u^2 + 2aS
\end{equation}
Now that if we want to refer to the equation we can use
\emph{ref} command like equation \ref{velo1}, \ref{velo2} and
\ref{velo3} are the equations in classic Physics.
ตรงนี้ถ้าใครลงแพคเกจ latexer
บนอะตอมจะเห็นว่าตอนพิมพ์ \ref{}
แล้วรอสักวิสองวิมันจะขึ้น autocomplete มาให้แบบนี้
และนี่คือผลการเรนเดอร์โค้ดก้อนนั้น
Floats
ใน LaTeX เราจะเรียกพวกรูปและตารางว่า floats ซึ่งก็ตามชื่อ มันจะลอยๆ อยู่ ซึ่งเค้าก็ใส่ตัวอย่างการใช้งานและข้อควรปฏิบัติมาให้ในบรรทัด 434-526 ส่วนที่ควรรู้คือ
Note that the IEEE does not put floats in the very first column - or typically anywhere on the first page for that matter. Also, in-text middle (“here”) positioning is typically not used, but it is allowed and encouraged for Computer Society conferences (but not Computer Society journals). Most IEEE journals/conferences use top floats exclusively.
แปลไทยก็คือเปเปอร์ IEEE จะไม่ให้ใส่รูปไว้ในหน้าแรก และส่วนมากจะไม่ให้รูปลอยเท้งเต้งอยู่กลางหน้า (ยกเว้น Computer Society conferences) โดยปกติแล้วเค้าจะให้อยู่ชิดบนเป็นหลัก เช่นเคย ลองใส่รูปด้วยการเขียนจริงกันเลย
% start from line 550
\section{Floats}
Here is a float demo. We can put the figure in LaTeX like this.
Note that the \emph{label} command must come after \emph{caption}
command. To refer to this image, IEEEtran provides macro
\emph{figurename} so we refer to \figurename{\ref{pluto}} like
this. For table we refer to it manually, for example you can see
multiplication results in Table \ref{demo_table}.
\begin{figure}[!t]
\centering
\includegraphics[width=0.9\linewidth]{pluto}
\caption{The image of Pluto}
\label{pluto}
\end{figure}
\begin{table}[!t]
\caption{Multiplication table}
\label{demo_table}
\centering
\begin{tabular}{*{5}{c}}
\toprule
\multirow{2}{*}{Factor} & \multicolumn{2}{c}{Odd} & \multicolumn{2}{c}{Even}\\
\cmidrule(lr){2-3}
\cmidrule(lr){4-5}
& 1 & 3 & 2 & 4 \\
\midrule
1 & 1 & 3 & 2 & 4 \\
\cmidrule{1-5}
2 & 2 & 6 & 4 & 8 \\
\cmidrule{1-5}
3 & 3 & 9 & 6 & 12 \\
\bottomrule
\end{tabular}
\end{table}
เรนเดอร์มาหน้าตาจะเป็นแบบนี้
จากตัวอย่างโค้ดข้างบนไม่ว่าจะเป็นรูปหรือตารางเราจะใช้ตัวเลือก [!t]
ในการประกาศสร้างเสมอ ตัวเลือกตรงนี้ก็ตามที่ได้ยกมาให้ดูก่อนหน้านี้คือโดยส่วนใหญ่ IEEE จะไม่ให้ floats ลอยเคว้งอยู่กลางหน้า ([!h]
) แต่จะให้ชิดขอบบนของหน้าเสมอ ในส่วนของรูปภาพจะสังเกตได้ว่า label จะต้องตามหลังคำสั่ง caption เสมอ และเวลาเราอ้างถึงมันก็ให้ใช้มาโครที่ IEEE เตรียมไว้ให้ซึ่งก็คือ \figurename{}
แล้วค่อย \ref{}
ไปที่รูป มันก็จะเรนเดอร์เป็น Fig. N
ให้เลย ส่วนของตารางนั้นเราเลือกใช้แพคเกจ booktabs
เพราะมันเรนเดอร์ออกมาได้สวยกว่าปกติ โดยเฉพาะถ้าตารางเราไม่จำเป็นต้องมีเส้นในแนวตั้ง booktabs
ประกอบด้วยเส้นสี่แบบคือ \toprule
, \midrule
, \cmidrule{}
และ \bottomtule
หน้าที่ก็ตามชื่อเลย ส่วน \cmidrule{}
จะพิเศษหน่อยคือต้องกำหนดคอลัมน์ที่จะขีดด้วย และถ้าจะให้เส้นในแถวเดียวกันขาดกลางได้ก็ต้องกำหนดคอลัมน์พร้อมทั้งใช้ตัวเลือก (lr)
ด้วย ส่วนแพคเกจ multirow
ก็ใช้เพื่อช่วยในการรวมมากกว่าหนึ่งแถวเข้าด้วยกัน นอกจากนี้เรายังสามารถทำให้ floats ทั้งหลายนี้มีความกว้างเท่าหน้ากระดาษได้ด้วยการประกาศ *
เช่น \begin{table*}[!t]
หรือ \begin{figure*}[!t]
อันนี้จะมีประโยชน์มากในกรณีที่รูปหรือตารางมันกว้างมากจนบีบให้อยู่ในคอลัมน์เดียวไม่ได้
เริ่มรู้สึกว่าถ้ายัดทั้งหมดลงในบล็อกเดียวมันจะแออัดเกินไป ไม่คิดว่าจะยาวขนาดนี้ ขอจบพาร์ทแรกไว้ที่ตรงนี้ก่อนดีกว่า แล้วพาร์ทต่อไปจะเกี่ยวกับการอ้างอิงล้วนๆ ส่วนของบล็อกนี้ถ้ามีข้อสงสัยอะไรตรงไหนก็ลอง pm มาถามได้ฮะ
อัพเดท บล็อกตอนต่อเขียนเสร็จแล้ว ตามไปได้ที่นี่เลย บันทึกการใช้คลาส IEEEtran ตอนที่ 2
ปล. หลังจากใช้ pdf-view
ไปสักพักก็พบว่ามันยังช้าอยู่เหมือนเดิม จะเขียนน้อยก็ยังช้า เลยใช้ Skim เหมือนเดิมแล้วจ้า