แต่งเติมสีสันให้กับ environment

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

ในการสร้างตัวสิ่งแวดล้อม (environment) ตัวอย่าง ดังในรูปนั้น โดยทั่วไปแล้วเราก็จะใช้รูปแบบมาตรฐานที่มีให้กับ LaTeX  และ amsmath ดังนี้

\newtheorem{theorem}{ตัวอย่างที่}[chapter]

ซึ่งแน่นอนครับ การใช้คำสั่งมาตรฐานย่อมได้สิ่งที่เป็นมาตรฐาน (แน่นอนสวยงามในแบบมาตรฐาน) ซึ่งย่อมไม่ถูกใจคนนอกกรอบแน่นอน

ถ้าเราไปเปิดหนังสือมีการออกแบบรูปแบบของหนังสือเป็นอย่างดีนั้น ในส่วนของทฤษฎีบท, ตัวอย่าง ฯลฯ ย่อมจะต้องมีรูปแบบที่ตายตัว มีการตกแต่งที่สวยงาม เปิดไปเจอก็จะรู้ว่าตรงนี้เป็นส่วนของตัวอย่าง  ตอนที่ผมเขียนวิทยานิพนธ์ก็ได้พยายามทำเช่นเดียวกัน โดยใช้แบบจากหนังสือของ Stephen Boyd หนึ่งในบุคคลแม่แบบของใครหลาย ๆ คน (ลอกกันทุกอณู (ถ้าทำได้)) แน่นอนผมไม่ได้ลอก Boyd เพราะผมต้องทำเองให้เหมือนหรือดีกว่า (ฮา) ตอนที่ผมทำนั้นผมใช้วิธีดังนี้ครับ

\newcounter{Examplecount}[chapter]
\setcounter{Examplecount}{0}
\renewcommand\theExamplecount{\arabic{chapter}.\arabic{Examplecount}}
\makeatletter%
\newenvironment{examplex}
{% This is the begin code
    \vspace{-.5em}
    \@tempdima0.0cm
    \def\endbit{}
    \advance\rightskip\@tempdima
    \hangindent\@tempdima
    \ignorespaces
    {\vspace{0.5cm} \begin{flushright}\rule{1\textwidth}{0.5pt}\end{flushright}}
     \vspace{-0.0cm}
         \refstepcounter{Examplecount}
         {  \noindent  \small\textbf{ตัวอย่างที่}
        \thechapter.\arabic{Examplecount}}
        \small
}
{% This is the end code
    \nolinebreak\hspace*{\stretch2}
    \parfillskip-\@tempdima
    \makebox[\@tempdima][r]{\endbit}\par
    \raggedleft$\Box$ \\[-0.5em]
    \hfill\hspace{0.03\textwidth}\rule{1\textwidth}{0.5pt}
}

ขออนุญาตไม่อธิบายนะครับ เพราะนอกจากจะยุ่งยากแล้วเรายังจะไม่ใช้มันอีกด้วย (ผู้สนใจสามารถดูรายละเอียดได้จากคำสั่ง \newenvironment{}{}{}) สำหรับรหัสต้นข้างต้นนั้น มีปัญหาในหลายส่วนครับ เช่นในกรณีของตัวอย่างที่คร่อมสองหน้า บางครั้งเส้นขอบบนและเส้นขอบล่างจะไม่อยู่ในที่ ๆ มันควรจะอยู่ หรือบางครั้งเส้นขอบบนอยู่หน้าหนึ่ง ตัวเนื้อหาอยู่อีกหน้าหนึ่ง

เวลาผ่านไปนาน หลังจากที่ผมทนใช้รหัสต้นของผมอยู่ปีกว่า  ผมก็ได้เริ่มเขียนหนังสือเล่มใหม่ ปัญหาเดิม ๆ กลับมาหลอกหลอนผมอีกครั้งและแก้ยาก ผมเลยใช้วิธีค้นหา แน่นอนผมใช้ทั้ง bing, google และ Stack Exchange ผมก็ได้ผมกับแพ็กเกจ mdframed ซึ่งทำให้งานเหล่านี้ง่ายขึ้นมากทีเดียว สำหรับการทำให้สิ่งแวดล้อมตัวอย่าง มีลักษณะดังรูปข้างต้นนั้นทำดังนี้ครับ

\newtheorem{mdtheorem}{\textbf{ตัวอย่างที่}}[chapter]
\newenvironment{examplex}{%
    \begin{mdframed}%
	[linewidth=1pt, leftline=false, rightline=false,%
	outerlinewidth=2,leftmargin=50,rightmargin=0,%
	innertopmargin=-0.6cm, innerleftmargin=0, innerrightmargin=0%
	 backgroundcolor=white, outerlinecolor=black,%
	 splittopskip=\topskip, skipbelow=\baselineskip,%
	 skipabove=\baselineskip, ntheorem]%
	 \begin{mdtheorem} \small\normalfont}
     {\end{mdtheorem}\end{mdframed}}

ซึ่งการใช้งานก็ง่ายมากครับ อ่านคู่มือเอาเองได้เลย เวลาน้อยไม่ขออธิบายแล้วกัน  เจอกันใหม่คราวหน้าครับ

Advertisements

เรื่องวุ่น ๆ เกี่ยวกับตาราง ตอนที่ 3 multirow with color

ในตอนที่แล้วได้นำเสนอการสร้างตารางที่มีการผสานตารางในแนวตั้งด้วยแพ็กเกจ multirow ไปแล้ว ซึ่งตอนเก่า ๆ ติดตามได้จาก

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

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

 \usepackage[table, svgnames]{xcolor}

เมื่อเลือกแล้วเราก็จะสามารถใส่สีลงในตารางได้อย่างง่ายดาย ส่วนตัวเลือก svgnames นั้นเป็นการใช้ชื่อสีที่ทำไว้แล้ว ซึ่งรายชื่อสีก็ดูได้จากคู่มือของ xcolor ในบทที่ว่าด้วย color by names

Continue reading

เรื่องวุ่น ๆ เกี่ยวกับตาราง ตอนที่ 2

ใครยังไม่ได้อ่านตอนที่หนึ่งก็ไปอ่านได้ที่ เรื่องวุ่น ๆ เกี่ยวกับตาราง ตอนที่ 1 ซึ่งเป็นความรู้เบื้องต้นเกี่ยวกับตาราง ในวันนี้เป็นตอนที่สองของบทความที่คุณสุขุมส่งมา ซึ่งเป็นเรื่องเกียวกับการผสานแนวตั้ง (merge row) ซึ่งจะว่าเป็นเทคนิคเบื้องต้นก็ไม่ถูกนักเพราะว่าจำเป็นต้องใช้แพ็กเกจพิเศษช่วย นั่นคือแพ็กเกจ multirow นั่นเอง

มาดูตัวอย่างกันก่อน

Continue reading

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}

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

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

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

pst-barcode

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

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

Fancy Table with TikZ

ชอบมาก ๆ อีก  การใช้ tikz ทำให้การใช้งาน LaTeX เริ่มมีสีสันขึ้นมามากขึ้น

http://texblog.net/latex-archive/graphics/tikz-table/

fancy tables with TikZ
ภาพจากลิงค์ข้างต้น

ไว้จะมาเขียนรายละเอียดทีหลัง ตอนนี้ยุ่ง

ข่าวอีกข่าวที่น่าสนใจคือ KDE 4.3 for windows ออกได้หลายวันแล้ว ตัว Okular document viewer ของ KDE ใช้งานในการดูเอกสาร pdf ได้ดีและเร็วขึ้นแล้ว

\newenvironment สร้างความงามให้กับหนังสือ

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

newen

Continue reading

Animation with TikZ

ช่วงนี้ต้องใช้ Beamer เยอะ ซึ่งต้องใช้ร่วมกับ TikZ เพื่อทำป้ายกำกับพ่วงลูกศรชี้ไปโน่นไปนี่ พอดีเห็นการทำ presentation แบบที่มันมีวูบ ๆ ที่เขาทำกันในโปรแกรมพวก powerpoint ก็คิดว่าคงยากน่าดูถ้ามาทำบน Beamer ปรากฎว่าไม่ยากอย่างที่คิด

ที่เว็บ texample.com มีตัวอย่างการทำ animation แบบที่เข้าใจง่าย ๆ และผลลัพธ์ที่ได้ก็เป็นดังนี้

Animated set intersection

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

Advanced matrix partitioning (LaTeX)

นาย Raskòlnikov ได้ถามไว้ใน LaTeX Users Group จากเขียนเมตริกซ์ตามในรูปโดยใช้ LaTeX ทำอย่างไร อืมจริง มันซับซ้อนมากเหมือนกัน

https://i1.wp.com/www.lost-prophet.net/storage/genmatrix.jpg

มาเริ่มต้นกับการทำเส้นปะ แบ่งเมตริกซ์ง่าย ๆ กันก่อน ซึ่งสามารถทำได้โดยการใช้ แพ็กเกจ arydshln โดยการสร้างชุดคำสั่งดังนี้ Continue reading

ใช้ 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

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