Beamer and Natbib

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

ปัญหาของ Natbib คือไม่สามารถใช้งานร่วมกับ Beamer ได้ ค้นจาก Google เป็นนานสอง
นานก็ไม่เจอคำตอบ พอเจอคำตอบก็ของจดไว้หน่อยครับ วิธีแก้ง่าย ๆ โดยการเพิ่มบรรทัดนี้

\def\newblock{\hskip .11em plus .33em minus .07em}

เข้าไปหลัง \usepackage{natbib} เท่านั้นเอง

Advertisements

Beamer : Handout Print

เป็นแค่บันทึกช่วยจำธรรมดาครับ ให้ใส่ handout ลงในตัวเลือกของคลาสแล้ว
ใส่บรรทัดต่อไปนี้

\usepackage{pgfpages}
\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm]

ตัวเลข 2 on 1 นั้นก็ชัดเจนครับ จะเปลี่ยนเป็น 4 on 1 ก็ได้  ซึ่งถ้าเป็น 4 on 1
ก็ให้ใส่ตัวเลือก landscape เพิ่มเข้าไปด้วย

\usepackage{pgfpages}
\pgfpagesuselayout{2 on 1}[a4paper,border shrink=5mm,landscape]

เนื่องจากในบางกรณีการยกเลิก overlay จะทำให้เกิดปัญหาสำหรับบางหน้า  วิธีแก้ปัญหาดูได้จาก http://www.tug.org/pipermail/texhax/2008-July/010666.html

\onslide<1| handout:0>\includegraphics{fig}

ซึ่งไอ้ตัว | handout:0 จะไปยกเลิกข้อความหรือรูปนั้น ๆ ออกไปในโหมด handout ข้อควรระวังคือต้องมีช่องว่างหนึ่งช่องว่างหลังเครื่องหมาย | เสมอ

ลองแล้วครับดีมาก ๆ

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 อีกที)

expanding Root สำหรับ Colinux

พอดีวันนี้เกิดยากอัพเกรด Colinux จาก Ubuntu 8.04 ไปเป็น Ubuntu 8.10 ซะหน่อย
แต่ที่ดันไม่พอก็เลยต้องทำการขยายขนาดของฮาร์ดดิสก์ที่ตอนแรกมีอยู่ 3.2 Gb ไม่รู้ลง
อะไรไปมั่งใช้จนเต็ม ลบออกก็ไม่เป็น (ผมเป็นผู้ใช้วินโดวส์) ซึ่งขั้นตอนต่าง ๆ อยู่ใน
Colinux Wiki ซึ่งมีหลายวิธีการมาก ผมเลือกใช้อันนี้

  1. จัดการคัดลองไฟล์ระบบสมมติว่าชื่อ cur_img.2gb ด้วยคำสั่งคัดลอกธรรมดาบน
    command ของวินโดวส์นั่นแหละ ไปเป็นชื่อ old_img.2gb
  2. สร้างไฟล์ระบบใหม่ให้มีพื้นที่เยอะ ๆ ในที่นี้ผมสร้างให้มี 8 Gb ด้วยคำสั่ง
    fsutil file createnew new_img.8gb 8589934592
    ซึ่งจะได้คำตอบเป็น-ถ้าสร้างไฟล์ที่ C:\colinux
    The file C:\coLinux\new_img.8gb has been created
  3. แก้ไขไฟล์ config โดยเพิ่มดิกส์ต่าง ๆ เข้าไปcobd0=”c:\coLinux\cur_img.2gb”
    cobd3=”c:\coLinux\old_img.2gb”
    cobd4=”c:\coLinux\new_img.8gb”
  4. รัน Colinux
  5. ตรวจไฟล์ระบบ
    # e2fsck /dev/cobd3
    e2fsck 1.40-WIP (14-Nov-2006)
    /dev/cobd3: clean, 70328/262144 files, 519377/524288 blocks
  6. คัดลอกไฟล์ระบบเก่าไปยังไฟล์ระบบใหม่
    # dd if=/dev/cobd3 of=/dev/cobd4
    4194304+0 records in
    4194304+0 records out
    2147483648 bytes (2.1 GB) copied, 484.017 seconds, 4.4 MB/s
  7. ตรวจสอบไฟล์ระบบใหม่
    # e2fsck -f /dev/cobd4
    e2fsck 1.40-WIP (14-Nov-2006)
    Pass 1: Checking inodes, blocks, and sizes
    Pass 2: Checking directory structure
    Pass 3: Checking directory connectivity
    Pass 4: Checking reference counts
    Pass 5: Checking group summary information
    /dev/cobd4: 70328/262144 files (3.9% non-contiguous), 519377/524288 blocks
  8. ปรับขนาดไฟล์ระบบใหม่ให้ใช้พื้นที่ทั้งหมด
    # resize2fs -p /dev/cobd4
    resize2fs 1.40-WIP (14-Nov-2006)
    Resizing the filesystem on /dev/cobd4 to 1048576 (4k) blocks.
    Begin pass 1 (max = 16)
    Extending the inode table     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    The filesystem on /dev/cobd4 is now 1048576 blocks long.
  9. ตรวจสอบไฟล์ระบบใหม่อีกครั้ง
    # e2fsck /dev/cobd4
    e2fsck 1.40-WIP (14-Nov-2006)
    /dev/cobd4: clean, 70328/524288 files, 527605/1048576 blocks
  10. คราวนี้ก็ shutdown ระบบแล้วแก้ไฟล์ config ให้เรียกใช้ไฟล์ระบบใหม่
    cobd0="c:\Program Files\coLinux\new_img.8gb"
  11. รับ colinux อีกรอบแล้วลองตรวจพื้นที่ดิกส์
    # df
    Filesystem           1K-blocks      Used Available Use% Mounted on
    /dev/cobd0             4128448   2044612   1958008  52% /

เป็นอันเสร็จพิธี ส่วนการ upgrade Ubuntu นั้นไปดูที่เว็บ Ubuntu เอาเองง่าย ๆ

ใช้ Python ใน LaTeX

จริง ๆ แล้ว TeX นั้นเป็นภาษาโปรแกรมมิ่งที่สามารถทำอะไรก็ได้เหมือนภาษาโปรแกรมมิ่งทั่วไป
มีคนเขียนเป็นโปรแกรมแก้ปัญหา Sudoku ด้วย แต่ด้วยความซับซ้อนของตัวภาษาก็เลยทำให้
น้อยคนที่จะใช้ภาษานี้ในการเขียนโปรแกรมอย่างจริง ๆ

สำหรับคนที่ต้องการจะใช้ Python ช่วยในการเขียนโปรแกรมเพื่อเพิ่มประสิทธิภาพให้ LaTeX
นั้นสามารถทำได้ง่าย ๆ โดยใช้ python.sty จาก TeXample.net แต่สำหรับผู้ใช้บน windows
จำเป็นต้องดัดแปลงรหัสต้นนิดหน่อย ดูในความเห็นที่ 3-4 นะครับ อันที่สามเป็นผมเอง

แต่เท่าที่ดูในตัวอย่างที่สอง รู้สึกว่าจะไม่มีประโยชน์ เพราะถ้าเราสร้างกราฟด้วย PyX แล้วค่อย
เอามาใส่ทีหลังก็ไม่ได้ยุ่งยากอะไร การทำเช่นนี้จะทำให้การคอมไพล์ LaTeX ช้าลงโดยไม่มี
ประโยชน์ การประยุกต์ใช้งานเบื้องต้นเท่าที่เห็นได้ชัด ๆ คือ การเพิ่มความสามารถทางภาษา
ให้กับ LaTeX โดยอาจจะทำให้การใช้เงื่อนไขง่ายขึ้น หรือเพิ่มการวนลูป ทำการคำนวณง่าย ๆ
เหล่านี้เป็นต้น

อย่างไรก็ตาม รู้ไว้ก็ไม่เสียหลายครับ ใครที่ต้องการจะใส่รหัส Python ลงรหัสของ LaTeX
เน้นบนวินโดวส์นะครับ (ผมจะเน้นใช้เฉพาะวินโดวส์) ก็ทำดังนี้นะครับ

  1. คุณอาจจะแก้รหัสบางส่วนของ python.sty ก็ได้ดูในความเห็นที่สามในลิงค์ข้างต้น
  2. คุณจำเป็นต้องลงโปรแกรมที่เรียกว่า Unxutils ซึ่งวิธีลงก็ง่ายแสนง่าย คือแตกไฟล์
    ใส่ไว้ในโฟลเดอร์ที่ต้องการเช่น c:\unxutils จากนั้นก็ไปเพิ่ม path ให้กับวินโดวส์
    ทำไม่เป็นใช่ไหม ก็ง่าย ๆ ครับ
    Control Panel -> System -> Advance -> Environment Variables
    แล้วก็ไปที่ System Variables เลือกแก้ไขตัวแปร path โดยเพิ่ม
    ;c:\unxutils\bin\;c:\unxutils\usr\local\wbin\
  3. แค่นี้ก็เสร็จครับ

ขั้นต่อมาคุณต้องลง Python ก็เลือกเอาเวอร์ชัน 2.6 นั่นแหละ คราวนี้ติดตั้งแบบ Yes ไป
จนจบได้ จากนั้นคุณก็เพิ่ม path ให้ระบบโดยเพิ่ม ;c\python26\ เข้าไป

ยัง ยังไม่จบ ต้องลง PyX ด้วย ก็ง่าย ๆ ครับ ไปโหลด PyX-0.10.tar.gz มา ให้แตกไฟล์
ด้วย 7-zip โดยแตกไฟล์ไว้ที่ C:\Python26\Lib\pyx\ ก็เป็นอันเสร็จพิธีลองใช้ได้เลย

%& -shell-escape
\documentclass{article}
\usepackage{graphicx}
\usepackage{python}
\begin{document}

\begin{figure}
\centering
\begin{python}
#
from pyx import *

g = graph.graphxy(width=8)
g.plot(graph.data.function("y(x)=sin(x)/x", min=-15, max=15))
g.writePDFfile("function")
print r'\includegraphics{function}'
\end{python}
\caption{$y(x)=\frac{\sin(x)}{x}$}
\end{figure}

\end{document}

ก็จะได้เอกสาร pdf ดังนี้

Hello world!

รูปจาก texample.net

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