Showing posts with label latex. Show all posts
Showing posts with label latex. Show all posts

10 August 2012

LaTeX (5) -- เพิ่มระยะห่างระหว่างบรรทัดของ Equation

ปกติเวลาพิมพ์สมการใน LaTeX ผมมักจะใช้ align environment ที่มากับ amsmath เพราะดูเหมือนจะจัดบรรทัดได้สวยพอดี แต่ก็จะมีปัญหาบ้างเวลาที่จะต้องพิมพ์สมการที่เป็นเศษส่วนหลายๆ บรรทัดติดกัน เพราะระยะระหว่างบรรทัดจะน้อยเกินไป ดูอึดอัดชอบกล ลองปรึกษา Google ดู ก็ไปเจอว่ามีวิธีเปลี่ยนระยะระหว่างบรรทัด โดยเปลี่ยนค่าของ \jot ทำให้ได้ระยะที่ห่างขึ้นอึดอัดน้อยลง

\documentclass[12pt]{article}

\usepackage[margin=1in,a4paper]{geometry}
\usepackage{amsmath,amssymb}

\begin{document}

\begingroup
\addtolength{\jot}{5mm}
\begin{align}
 \textit{CPU time} 
 &= \textit{CPU clock cycles}\times\textit{Clock cycle time}\\
 &= \frac{\textit{CPU clock cycles}}{\textit{Clock rate}}\\
 &= \frac{\textit{Instruction count}\times\textit{CPI}}{\textit{Clock rate}}\\
 &= \frac{\sum_{i=1}^{n}(\textit{Inst count}_i\times\textit{CPI}_i)}
 {\textit{Clock rate}}
\end{align}
\endgroup

\begin{align}
 \textit{CPU time} 
 &= \textit{CPU clock cycles}\times\textit{Clock cycle time}\\
 &= \frac{\textit{CPU clock cycles}}{\textit{Clock rate}}\\
 &= \frac{\textit{Instruction count}\times\textit{CPI}}{\textit{Clock rate}}\\
 &= \frac{\sum_{i=1}^{n}(\textit{Inst count}_i\times\textit{CPI}_i)}
 {\textit{Clock rate}}
\end{align}

\end{document}

จะได้ผลตามรูปข้างล่าง จะเห็นว่าระยะห่างดูดีขึ้น ไม่อึดอัด




คำสั่ง \begingroup และ \endgroup ใช้กำหนดให้การเพิ่มระยะ มีผลเฉพาะในส่วนนี้เท่านั้น ไม่กระทบกับส่วนอื่นของเอกสาร

ที่มา: http://tex.stackexchange.com/questions/14679/amsmath-align-environment-row-spacing

10 May 2012

คำสั่งและ Package ของ LaTeX ที่ใช้บ่อย (3) -- Tabular

Tabular เป็น environment มาตรฐานของ LaTeX สำหรับวาดตารางในเอกสาร วิธีใช้งานก็ไม่ยาก คือกำหนดรูปแบบการจัดข้อความในแต่ละคอลัมน์ไว้ แล้วก็เขียนเนื้อหาไปที่ละแถว รูปแบบของคอลัมน์แบบมาตรฐานที่เราใช้ได้คือ l คือ ชิดซ้าย, r คือ ชิดขวา, c คือ กึ่งกลาง, p{length} เมื่อต้องการ ตัวอย่างเช่น

\documentclass[12pt]{article}
\begin{document}
 \begin{tabular}{|c|c|c|}
  \hline
  Hello & Hello & Hello \\
  \hline
  Hello & Hello & Hello \\
  \hline
  Hello & Hello & Hello \\
  \hline
 \end{tabular}
\end{document}


รวมคอลัมน์เข้าด้วยกัน

\multicolumn ใช้สำหรับรวมเซลล์หลายคอลัมน์เข้าเป็นเซลล์เดียว สามารถระบุการจัดตัวอักษรได้ด้วย รูปแบบคำสั่งคือ\multicolumn{#cells}{format}{content} โดย #cells คือจำนวนเซลล์ที่เราต้องการรวมเข้าด้วยกัน, format คือรูปแบบการจัดตัวอักษรชิดซ้าย กลาง หรือขวา และ content คือเนื้อหาของเซลล์ที่รวมกันแล้ว บางครั้งคำสั่ง \multicolumn นี้ก็ใช้สำหรับเปลี่ยนแบบรูปแบบการจัดตัวอักษรโดยไม่จำเป็นต้องรวมเซลล์ก็ได้ ตัวอย่างการใช้งาน

\documentclass[12pt]{article}
\begin{document}
 \begin{tabular}{|c|c|c|}
  \hline
  Hello & Hello & Hello \\
  \hline
  \multicolumn{2}{|c|}{Hello} & Hello \\
  \hline
  \multicolumn{3}{|c|}{Hello} \\
  \hline
 \end{tabular}
\end{document}


ลากเส้น

\hline ใช้สำหรับลากเส้นแนวนอน คั่นระหว่างแถว โดยคำสั่งนี้จะต้องใช้หลังจากเครื่องหมาย \\ ที่ระบุว่าหมดแถวแล้ว ถ้าต้องการขีดเส้นเฉพาะบางคอลัมน์ จะใช้คำสั่ง \cline{col1-col2} โดย LaTeX เริ่มนับคอลัมน์จากคอลัมน์ที่ 1 คำสั่ง \cline นี่จะใช้หลายๆ ครั้งในแถวเดียวกันได้ เพื่อให้เราสามารถขีดเส้นหลายช่วงได้ ตัวอย่างการใช้งาน

\documentclass[12pt]{article}

\begin{document}
 \begin{tabular}{|c|c|c|c|}
  \hline
  Hello & Hello & Hello & Hello \\
  \cline{1-2}
  Hello & Hello & Hello & Hello \\
  \cline{1-1}\cline{3-3}
  Hello & Hello & Hello & Hello \\
  \hline
 \end{tabular}
\end{document}


ยืดแถวให้สูงขึ้น

\arraystretch เป็นตัวกำหนดค่าสำหรับความสูงของแถว แต่ LaTeX จะกำหนดความสูงให้อัตโนมัติอยู่แล้ว การเปลี่ยนค่า \arraystretch จะกำหนดความสูงให้มากขึ้นหรือน้อยลง เป็นจำนวนเท่าของความสูงมาตรฐาน จะใช้คำสั่ง \renewcommand ในการเปลี่ยนแปลงค่านี้ เช่น การใช้คำสั่ง \renewcommand{\arraystretch}{1.5} ก่อนเริ่มตาราง จะทำให้ความสูงของแถวในตารางเป็นหนึ่งเท่าครึ่งของความสูงมาตรฐาน ตัวอย่างการใช้งาน

\documentclass[12pt]{article}

\begin{document}
 \begin{tabular}{|c|c|c|}
  \hline
  Hello & Hello & Hello \\
  \hline
  Hello & Hello & Hello \\
  \hline
  Hello & Hello & Hello \\
  \hline
 \end{tabular}
 
 \vspace{5mm}

 {\renewcommand{\arraystretch}{2.0}
 \begin{tabular}{|c|c|c|}
  \hline
  Hello & Hello & Hello \\
  \hline
  Hello & Hello & Hello \\
  \hline
  Hello & Hello & Hello \\
  \hline
 \end{tabular}}
\end{document}


เปลี่ยนระยะห่างขอบเซลล์

LaTeX กำหนดให้มีระยะห่างระหว่างเส้นแบ่งเซลล์กับเนื้อหาในเซลล์ไว้ขนาดหนึ่ง ซึ่งเราสามารถเปลี่ยนระยะห่างนี้ได้โดยใส่รูปแบบ @{} ระหว่างรูปแบบของแต่ละเซลล์ เช่น \begin{tabular}{|@{}l|r@{\hspace{1cm}} จะได้ตารางที่มีคอลัมน์แรกจัดข้อความเริ่มชิดเส้นขอบซ้ายของคอลัมน์โดยไม่มีช่องว่าง ส่วนคอลัมน์ที่
2 จัดข้อความชิดขวา แต่ห่าง 1cm จากเส้นขอบขวาของคอลัมน์ หลักการทำงานของ @{} ก็คือ คำสั่งที่ใช้กำหนดช่องว่างระหว่างคอลัมน์ จะถูกแทนที่ด้วยคำสั่งใดๆ ก็ตามที่อยู่ใน {} เราจึงกำหนดระยะห่างได้ตามต้องการ หรือจะใส่เครื่องหมายอะไรลงไปแทนก็ได้

\documentclass[12pt]{article}

\begin{document}
 \begin{tabular}{|@{}l|c|r@{\hspace{1cm}}|}
  \hline
  Hello & Hello & Hello \\
  \hline
  Hello & Hello & Hello \\
  \hline
  Hello & Hello & Hello \\
  \hline
 \end{tabular}
\end{document}


วันนี้พอแค่นี้ก่อนดีกว่า เอาไว้ว่างๆ ค่อยเขียนใหม่

03 May 2012

คำสั่งและ Package ของ LaTeX ที่ใช้บ่อย (2)

Verbatim

ผมชอบใช้ package fancyvrb เวลาแทรก source code ลงในเอกสาร เพราะสามารถกำหนดรูปแบบได้ต่างๆ ได้ง่าย เช่น สามารถทำกรอบรอบรูป สามารถกำหนดหมายเลขบรรทัดได้



fancyvrb ใช้คำสั่ง \fvset สำหรับระบุรูปแบบของเนื้อหา ในตัวอย่าง frame=single คือกำหนดให้มีเส้นกรอบเป็นเส้นเดี่ยว numbers=left ให้แสดงเลขบรรทัดทางซ้าย tabsize=2 กำหนดขนาดของ tab เป็น 2 ตัวอักษร เสร็จแล้วเวลาจะแทรก code ก็ใช้ Verbatim environment ตามปกติ ส่วน gobble=1 หมายถึง ไม่ให้นับตัวอักษร 1 ตัวทางซ้ายของทุกบรรทัดเป็นส่วนหนึ่งของเนื้อหา ทำให้เราสามารถจัด indentation ของ LaTeX ได้ตามใจ ในกรณีตัวอักษรตัวแรกทางซ้ายจะไม่แสดงในเอกสารผลลัพธ์

ความสามารถอีกอย่างหนึ่งที่ผมชอบมากๆ ของ fancyvrb คือ สามารถดึงข้อความจาก source file ภายนอกมาใช้งานได้ด้วย ทำให้สะดวกในการทำเอกสารที่มี source code ที่ยังมีการแก้ไขอยู่ เช่น



คำสั่ง \VerbatimInput{hello.c} กำหนดให้เอาเนื้อหาของ hello.c มาแสดงใน Verbatim environment คำสั่งนี้ช่วยทำให้สะดวกในการจัดการเอกสาร เพราะเราสามารถแก้ไข source code และตรวจสอบ source code นั้นได้ตลอดเวลา แค่คอมไพล์ LaTeX ใหม่ เอกสารก็จะถูกต้องสวยงาม ไม่มีปัญหาว่าลืมเอา source code ที่แก้ไขแล้วมาแปะใหม่หรือยัง

จุดอ่อนของ fancyvrb มีอยู่ที่เดียวคือ ไม่มี syntax highlight แต่ผมไม่ได้สนใจมาก ถ้าจะให้มี syntax highlight คงต้องไปใช้ package อื่น เช่น listings ซึ่งผมไม่ค่อยรู้สึกว่ามันสวยเท่าไหร่

02 May 2012

คำสั่งและ Package ของ LaTeX ที่ใช้บ่อย (1)

วันนี้มาเขียนรวมคำสั่งและ package ที่ใช้เองบ่อยๆ ไว้ดีกว่า เอาไปหาเองได้ง่ายๆ

กำหนดขนาดกระดาษและระยะขอบ

ผมชอบใช้ geometry สำหรับกำหนดระยะขอบกระดาษ
\usepackage[hmargin=2in,vmargin=1in,a4paper]{geometry}
hmargin เอาไว้กำหนดระยะขอบซ้ายขวา ส่วน vmargin ใช้กำหนดระยะขอบบนล่างของกระดาษ

หัวท้ายกระดาษ

ผมใช้ fancyhdr สำหรับระบุหัวท้ายกระดาษ
\usepackage{fancyhdr}
\pagestyle{fancy}
\lhead{ITS336/ITS451 Artificial Intelligence}
\chead{}
\rhead{Academic Year 2011}
\lfoot{}
\cfoot{}
\rfoot{SIIT, Thammasat University}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
วิธีใช้ก็ไม่ยาก \[lcr]head ใช้ระบุหัวกระดาษซ้าย กลาง ขวา ตามลำดับ ส่วน \[lcr]foot ใช้ระบุท้ายกระดาษ ส่วน \headrulewidth และ \footrulewidth ใช้ระบุให้มีเส้นคั่นระหว่างส่วนหัวท้ายกับเนื้อหาหลัก ถ้าไม่อยากให้มีก็กำหนดให้เป็น 0pt

กำหนดเลขหน้า

คำสั่ง \thepage เป็น counter สำหรับระบุเลขหน้าปัจจุบัน เช่น เราจะระบุเลขหน้าไว้กลางท้ายกระดาษด้วยคำสั่ง
\cfoot{\thepage}
ถ้าต้องการกำหนดเลขหน้าให้เป็นค่าอื่น ไม่เริ่มจากศูนย์ก็ใช้
\setcounter{page}{100}

วันนี้เอาแค่นี้ก่อนละกัน ยังไม่เรื่องฟอนท์อีก

21 April 2012

Ubuntu + XeTeX + THSarabunNew

เนื่องจากช่วงนี้จะต้องเตรียมเอกสารบางอย่างเป็นภาษาไทย และอยากใช้ LaTeX สำหรับทำเอกสาร ไม่อยากใช้โปรแกรม word processor ไม่ว่าตระกูลไหน รุ่นไหนก็ตาม วันนี้เลยลองใช้ XeTeX บน Ubuntu 11.10 เนื่องจาก XeTeX อนุญาตให้เราเอาฟอนท์ที่ติดตั้งไว้กับระบบปฏิบัติการมาใช้งานได้เลย ไม่จำเป็นต้องเตรียมอะไรให้ยุ่งยาก แถม XeTeX ยังเรียกใช้ ICU สำหรับตัดคำภาษาไทยให้อยู่แล้วด้วย

สิ่งที่ต้องเตรียม

  1. ฟอนต์สารบรรณ ดาวน์โหลดได้จาก http://www.f0nt.com/release/th-sarabun-new/ 
  2. Ubuntu ผมใช้รุ่น 11.10 อยู่ แต่อีกไม่กี่วันคงเปลี่ยนไปใช้ 12.04 ซึ่งก็คงใช้ได้เหมือนกัน
  3. TeXLive ที่มี XeTeX ผมติดตั้งด้วยคำสั่ง
    $ sudo apt-get install texlive-latex-recommended texlive-xetex


ขั้นตอน

  1. ติดตั้งฟอนต์สารบรรณ ให้ Ubuntu รู้จักก่อน โดย copy ไฟล์ ttf ที่ได้มา ไปไว้ที่ /usr/share/fonts/truetype จะสร้าง subfolder ในนั้นก็ได้ เสร็จแล้วก็สั่ง update ข้อมูลฟอนต์
    $ fc-cache -fv
  2. เตรียมไฟล์เอกสารตามตัวอย่าง
    \documentclass[12pt]{article}
    \usepackage{fontspec}
    \usepackage{xunicode}
    \usepackage{xltxtra}

    \XeTeXlinebreaklocale “th”
    \XeTeXlinebreakskip = 0pt plus 1pt
    \defaultfontfeatures{Scale=1.4}

    \setmainfont{TH Sarabun New}

    \begin{document}

    \section{ทดสอบหัวข้อ}
    ทดสอบภาษาไทยทดสอบภาษาไทยทดสอบภาษาไทย ทดสอบภาษาไทยทดสอบภาษาไทยทดสอบภาษาไทย ทดสอบภาษาไทยทดสอบภาษาไทยทดสอบภาษาไทย ทดสอบภาษาไทยทดสอบภาษาไทยทดสอบภาษาไทย ทดสอบภาษาไทยทดสอบภาษาไทยทดสอบภาษาไทย \textbf{ทดสอบภาษาไทย}ทดสอบภาษาไทย\textit{ทดสอบภาษาไทย} Test ฟุ้งฟุ้งฟุ้งฟุ้ง ฟุ้งฟุ้งฟุ้งฟุ้ง ฟุ้งฟุ้งฟุ้งฟุ้ง ฟุ้งฟุ้งฟุ้งฟุ้ง ฟุ้งฟุ้งฟุ้งฟุ้ง ฟุ้งฟุ้งฟุ้งฟุ้ง
    \end{document}
  3. สร้าง PDF จากไฟล์ LaTeX ที่เตรียม ก็จะได้ผลตามรูป


อ้างอิง

ทดสอบ MikTeX 2.9 + ฟอนต์ TH SarabunPSK

21 December 2011

\newcommand กับ Optional Argument

\newcommand ใน LaTeX เป็นคำสั่งสำหรับนิยามคำสั่งใหม่ โดยกำหนดให้เป็น macro ของคำสั่งเก่าผสมกัน อย่างเช่น เวลาผมจะเขียนตัวอย่างในเอกสารการสอน ผมจะใช้ \paragraph{Example} เสมอ แทนที่ผมจะพิมพ์แบบนี้ทุกครั้ง ผมก็นิยามคำสั่งขึ้นมาได้ โดยใช้
\newcommand{\example}{\paragraph{Example}}
ทำให้ได้คำสั่ง \example เอาไว้ใช้ได้ทุกครั้ง พิมพ์สั้นกว่าเดิม แล้วจะเปลี่ยนลักษณะรูปแบบก็ทำได้ง่าย ทีนี้คำสั่ง \newcommand ยอมให้เรากำหนด argument ได้ด้วย อย่างเช่น
\newcommand{\mypages}[1]{There are #1 pages in this note.}
เวลาใช้คำสั่ง \mypages{10} ก็จะได้ข้อความ "There are 10 pages in this note." ออกมา LaTeX ยอมให้เรากำหนด argument ได้ถึง 9 อัน แล้วเราก็สามารถระบุให้ argument อันแรกสุดเป็น optional argument ได้ด้วย โดยเราสามารถกำหนดค่า default ของ argument แรกได้เอง เช่น
\newcommand{\mypages}[2][note]{There are #2 pages in this #1.}
ถ้าเรียกใช้ด้วย \mypages{10} ก็จะได้ผลเหมือนเดิม แต่เราสามารถเรียกใช้โดยกำหนดค่าของ optional argument ได้ด้วย เช่น \mypages[examination]{10} ก็จะได้ผลเป็น "There are 10 pages in this examination."

27 October 2006

Presentation

ช่วงนี้ปิดเทอม มีเวลาว่างเยอะขึ้น จึงเป็นโอกาสอันดีที่จะเตรียมการสอนสำหรับเทอมหน้าไว้ก่อน เพราะเปิดเทอมแล้วจะมีเวลาเตรียมน้อยลง ยิ่งเตรียมแบบอาทิตย์ต่ออาทิตย์ ก็จะไม่ได้เอกสารหรือสไลด์ประกอบการสอนที่ดีนัก ที่นี้ก่อนจะเตรียมการสอนก็ไปลองหาดูก่อนว่าจะใช้โปรแกรมอะไรทำสไลด์ดี ปัญหาที่สำคัญที่ทำให้ไม่ชอบใช้โปรแกรมสร้าง Presentation สำเร็จรูปอย่าง MS Powerpoint หรือ Apple Keynote ก็คือ สไลด์สำหรับการสอนวิชาทางคอมพิวเตอร์นั้น จะต้องมีสมการคณิตศาสตร์อยู่ที่เป็นจำนวนมาก ซึ่งโปรแกรมส่วนใหญ่จะไม่ได้สนับสนุนอย่างเต็มที่ เช่น จะต้องใช้โปรแกรมต่างหากในการพิมพ์สมการ (MS Office เตรียมมาให้แล้ว ส่วน Keynote ก็ต้องใช้โปรแกรมสร้างสมการจาก LaTeX เช่น LaTeXiT) เสร็จแล้วค่อยตัดเข้ามาแปะในสไลด์อีกที แถมบางครั้งก็ต้องเว้นที่ไว้ เพื่อให้แปะสมการลงในข้อความได้พอดี แต่ก็ยังมีปัญหาอยู่ เช่น ถ้าเปลี่ยนขนาดสไลด์ก็ต้องมาขยับพวกสมการใหม่หมด ทำให้เสียเวลาและแรงงานมาก

เทอมที่ผ่านมาก็เลยเปลี่ยนมาใช้ LaTeX (beamer -- คนเยอรมันมักจะใช้คำนี้เรียก projector ได้ยินครั้งแรกเล่นเอางง) ทำสไลด์ประกอบการสอนซึ่งทำให้ทำงานง่ายขึ้นเยอะ เพราะสามารถแทรกสมการเข้าไปในข้อความได้เลย สมการที่ได้ก็หน้าตาดีกว่า Equation Editor ที่มากับ MS Office เยอะ แต่จุดอ่อนของ beamer ก็คือ ปรับแต่งหน้าตาสไลด์ยาก หรือถ้าต้องการใส่อะไรแปลกๆ ลงไป ก็ต้องเสียเวลาไปหา package อื่นๆ ของ LaTeX มาลงเพิ่ม คราวนี้เปิดเทอมใหม่ก็เลยคิดจะหาวิธีการทำสไลด์แบบใหม่

อันแรกที่เจอคือ ConTeXt ซึ่งเป็น macro สำหรับ TeX เช่นเดียวกับ LaTeX แต่ต่างตรงที่ ConTeXt เน้นที่ความสะดวกในการปรับแต่งเอกสาร คือ ไม่ได้แยกส่วนจัดการหน้าตาเอกสารออกเป็น style file แบบ LaTeX แถมยังมีคำสั่งพื้่นฐานเพื่อปรับแต่งทุกๆ ส่วนได้ง่าย ทำให้เหมาะกับการเขียนเอกสารที่ไม่ได้มีรูปแบบที่กำหนดไว้แล้วเหมือน LaTeX ผู้ใช้สามารถเปลี่ยนแปลงหน้าตาได้ไม่ยาก ฉะนั้นเราจึงสามารถปรับ ConTeXt ให้เหมาะสำหรับสร้างสไลด์ได้ไม่ยากมากนัก แต่ข้อเสียของ ConTeXt คือยังมีกลุ่มผู้ใช้น้อย เอกสารหรือเว็บที่เกี่ยวข้องก็ยังไม่เยอะ และปัญหาหลักก็คือคำสั่งคล้ายกับ LaTeX เยอะเกินไป ทำให้สับสนง่าย โดยเฉพาะเวลาที่ยังไม่ชิน บวกกับการที่ ConTeXt ไม่ได้มี package ที่ออกแบบมาเพื่อการทำสไลด์โดยเฉพาะ ทำให้ขาดฟีเจอร์หลายๆ อย่าง สุดท้ายเลยตัดสินใจที่จะยังไม่ใช้

ต่อมาก็เริ่มหันมาทาง html เพิ่งไปเจอว่ามีคนทำ stylesheet และ javascript สำหรับการนำเสนองานโดยเฉพาะชื่อ S5 เท่าที่ดูก็น่าสนใจ แต่ติดปัญหาเดิมคือสมการคณิตศาสตร์ ถึงแม้ว่าตอนนี้ firefox/mozilla จะสนับสนุน mathml แล้ว แต่ภาษามันดูยุ่งยากชอบกล แถมยังมี bug อยู่บางกับเวอร์ชันบน Mac

สุดท้ายกลับไปตายรัง ขอใช้ beamer ต่อไปอีกเทอมหนึ่งก่อนละกัน