A waiting for package “tcolorbox”

เวลาทำงานเอกสาร สิ่งที่อยากทำมาก ๆ คือการสร้างกรอบให้กับส่วนที่เราต้องการแบบนี้

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

อยู่ดี ๆ ฟ้าก็ส่งท่าน  Prof. Dr.rer.nat. Dr.-Ing. Thomas F. Sturm (ไม่ต้องตกใจนะครับ คนชาติตะวันตกการเรียน Dr. หลาย ๆ ใบนั้น ไม่ใช่เรื่องแปลก แต่คนเยอรมันนั้น จบอะไรก็ต้องใส่สาขาด้วย แสดงให้เห็นกันไปเลยว่าเชี่ยวชาญด้านไหน ไม่ใช่ว่ามีดีกรีด็อกเตอร์แล้วจะเก่งไปซะทุกเรื่อง และจริง ๆ มีดีอะไรก็บอกให้โลกรู้ไปซะ ไม่ต้องมาปกปิดทำลับ ๆ ล่อ ๆ ) ท่านโปรเฟสเซอร์ได้สละเวลาที่ไม่ค่อยจะมีนั้น สร้างแพ็กเกจ tcolorbox ไว้ให้ผมได้เอาไว้ใช้ (ฮา)  น่าเสียดายที่คู่มือเป็นภาษาเยอรมัน แต่ถ้าชำนาญคำสั่งต่าง ๆ ของ LaTeX พอสมควรก็ไม่าน่าจะยากครับ

สำหรับการสร้างผลลัพธ์ให้ได้อย่างรูปที่เห็นนั้น สามารถทำได้ดังรหัสต้นต่อไปนี้ครับ

\documentclass[xcolor=dvipsnames,xcolor=svgnames]{report}
\usepackage[svgnames,dvipsname]{xcolor}
\usepackage[listings,theorems]{tcolorbox}
\usepackage{listings}
\tcbuselibrary{listings}

% กำหนดค่าตัวเลือกให้ listings 
\lstset{%
    language=MATLAB,
    basicstyle=\ttfamily,
    keywordstyle=\color{Black},
    identifierstyle=,
    commentstyle=\color{Green},
    stringstyle=\ttfamily\color{DarkViolet},
    showstringspaces=false,
    numbers=left,
    xleftmargin=.3in,
    xrightmargin=.3in,
    framexleftmargin=0.2cm,
    framexrightmargin=0.2cm,
    float=h,
    aboveskip=1cm,
    belowskip=1cm
}%

\begin{document}

% การเรียกใช้คำสั่งของ tcolorbox เพื่อพิมพ์ listings
\begin{tcblisting}{colback=yellow!5,colframe=yellow!50!black,listing only,
    title= This is a MATLAB example}
    clc; clear all;
    s = tf('s');
    sys = 1/(s+5);
    bode(sys); 
\end{tcblisting}

\end{document}

โดยส่วนต่าง ๆ ที่จำเป็นคือ ไฟล์ tcolorbox.sty, tcblistings.code.tex  ไฟล์เหล่านี้ยังไม่ได้อยู่บน MikTeX (ตอนนี้) ดังนั้นจะต้องโหลดเอามาไว้ในโฟลเดอร์ที่ต้องการเอง  การเรียกใช้เบื้องต้นก็ต้องปรับแต่งตัว listing ให้ได้ตามชอบใจก่อน แล้วก็เรียกพิมพ์ listing โดยใช้สิ่งแวดล้อม tcblisting  จุดสำคัญที่ต้องคำนึงถึงคือตัวเลือก listing only ตัวนี้ถ้าไม่ใส่ รหัสต่าง ๆ ที่เราพิมพ์ลงไปนั้นก็จะไปปรากฏบนเอกสารด้วย (เยี่ยมมาก)

เอาไปลองใช้ดูนะครับ ได้ผลดีอย่างไรก็บอกกล่าวมาด้วยแล้วกัน

Advertisements

แต่งเติมสีสันให้กับ 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}}

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

การใช้ pdfpages ร่วมกับ fancy header สร้างส่วน header+footer ให้กับเอกสาร pdf

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

แนวทางแก้

  1. ทำการสร้างเอกสารใหม่ด้วยโปรแกรม Office ที่ไม่มีส่วนหัวและท้ายกระดาษ และตั้งค่าขอบกระดาษเป็น 25 มม ทั้งหมด แล้วทำการส่งออกเป็นเอกสาร pdf ที่ไม่มีเลขหน้า
  2. ใช้งาน pdfLaTeX โดนการเรียกแพกเกจ pdfpages ร่วมกับ fancy header สร้างส่วน header และ footer ให้กับเอกสาร pdf หลังจากนั้นถึงใช้งาน LaTeX ในการแทรกส่วนหัวและท้ายกระดาษ พอจะแก้ปัญหาชั่วคราวไปก่อน ได้รหัสคำสั่งดังแสดงครับ
  3. แพกเกจ babel คงต้องมีไว้เพื่อให้แสดงภาษาไทยได้ และแพกเกจ color เอาไว้ควบคุมสีครับ
\documentclass[11pt,twoside,a4paper]{book}

\usepackage[english,thai]{babel}  %% for pdflatex with thai
\usepackage[margin=20mm,top=25mm]{geometry} %% ต้องกำหนดระยะขอบ

\usepackage[final]{pdfpages}
\usepackage{fancyhdr}
\usepackage{color}

\pagestyle{fancy}
\fancyhead{}
\fancyfoot{}
\fancyhead[LE]{\colorbox{lightgray} {\color{white}{การออกแบบโครงสร้างคอนกรีตเสริมเหล็ก}}}
\fancyhead[RO]{บทที่ 2 การวิเคราะห์และออกแบบโครงสร้าง}
\fancyfoot[LE]{จักรี ติยะวงศ์สุวรรณ}
\fancyfoot[RO]{\today} %% วันที่ทำการสร้างเอกสาร

\fancyfoot[C]{\thepage} %% เลขหน้า

\renewcommand{\headrulewidth}{0.4pt} %% ไม่อยากได้เส้นก็ 0.0pt
\renewcommand{\footrulewidth}{0.4pt}

\begin{document}

\setcounter{page}{7}  %% ตั้งเลขหน้าเริ่มต้น ในกรณีที่เอกสารแยกเป็น บท ๆ

\includepdf[pages=1,fitpaper=true]{StructuralAnalysis.pdf} 
%% หน้าแรกไม่ต้องมีส่วน Header แทรกก่อนแผ่นเดียว

\includepdfset{pages=2-,fitpaper=true , pagecommand={\thispagestyle{fancy}}}
\includepdf{StructuralAnalysis.pdf}

\end{document}

ถ้า กลุ่มคนไทยผู้ใช้ $$\LaTeX$$ มีปัญหาคล้าย ๆ กันจะได้มีแนวทางในการจัดทำเอกสารด้วย LaTeX ผมได้แนวทางแก้ปัญหาจากเว็บไซต์ต่างประเทศหลายที่ในตอนทำ แต่ไม่ได้บันทึกไว้ ต้องขออภัยไว้ด้วยครับ

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

เป็นเรื่องฝากจากคุณ จักรี ครับ คุณจักรีแนะนำการใช้งาน MikTeX 2.9+XeTeX กับฟอนต์มาตรฐาน ซึ่งฟอนต์เหล่านี้นอกจากสวยแล้ว ยังสามารถใช้ได้ฟรีโดยไม่มีข้อผูกมัด โดยสามารถดาว์นโหลดได้จาก ฟอนต์.คอม และผมเข้าใจว่าในอนาคตฟอนต์เหล่านี้จะกลายเป็นมาตรฐานแทนฟอนต์ Angsana New ที่มีให้ใช้เฉพาะ Windows เท่านั้นครับ (ในทางกฏหมาย)

นอกจากฟอนต์จะฟรีแล้ว ฟอนต์เหล่านี้ยังเข้ากับมาตรฐานใหม่ ๆ แล้ว การใช้งานกัน XeTeX เท่าที่เห็นคือ

  1. การเว้นบรรทัดถูกต้องทันที
  2. การตัดคำดีขึ้นอย่างเห็นได้ชัด
  3. ตัวหนา ตัวเอียง สามารถใช้ร่วมกับคำสั่งของ LaTeX ได้ทันที

วิธีการใช้งานตามที่คุณจักรีแนะนำมา ก็สามารถใช้ร่วมกับบรรณาธิกรณ์อย่าง TeXMaker ได้ทันทีครับ ดังนี้

% ------ Test MikTeX 2.9 + ฟอนต์  TH SarabunPSK
\documentclass[11pt,a4paper]{article}
\usepackage{xltxtra} 

\XeTeXlinebreaklocale "th"
\XeTeXlinebreakskip = 0pt plus 1pt   %

\setmainfont{TH SarabunPSK}
\title{ครม.สั่งหน่วยงานราชการ ใช้ 13 ฟอนต์ไทย  }
\author{ใครก็ไม่รู้}

\begin{document}
\maketitle
\section{ครม.เห็นชอบให้ทุกส่วนราชการโละฟอนต์ต่างชาติ บังคับใช้ 13 ฟอนต์ไทยในงานราชการ
 ระบุป้องกันละเมิดลิขสิทธิ์}
นายวัชระ กรรณิการ์ รองโฆษกประจำสำนักนายกรัฐมนตรี เปิดเผยว่า ที่ประชุม ครม.เห็นชอบให้หน่วย
งานภาครัฐทุกหน่วยดำเนินการติดตั้งฟอนต์สารบรรณและฟอนต์ อื่น ๆ ทั้งหมด จำนวน 13 ฟอนต์ ของ
สำนักงานส่งเสริมอุตสาหกรรมซอฟต์แวร์แห่งชาติ (สอซช.) หรือ SIPA และกรมทรัพย์สินทางปัญญา
เพิ่มเข้าไปในระบบปฏิบัติการ Thai OS (Thai Operating System) และใช้ฟอนต์ดังกล่าวแทน
ฟอนต์เดิม ตามที่กระทรวงเทคโนโลยีสารสนเทศและการสื่อสารเสนอ โดยให้ติดตั้งและใช้งานให้แล้วเสร็จ
ก่อนวันที่ 5 ธันวาคม 2553

ทั้งนี้ สืบเนื่องจาก ปัจจุบันส่วนราชการจำนวนมากมีการใช้ฟอนต์ที่หลากหลาย ไม่มีมาตรฐานในเอกสาร
ทางราชการ อีกทั้งยังมีหน่วยงานราชการหลายแห่งใช้มาตรฐานฟอนต์ของบริษัทเอกชนที่ผูกขาด ลิขสิทธิ์
เช่น Angsana อาจมีปัญหาเรื่องการฟ้องร้องละเมิดลิขสิทธิ์ได้ด้วยเหตุดังกล่าว จึงได้มีการพัฒนาและมี
การประกวดแข่งขันฟอนต์ ซึ่งเป็นการส่งเสริมให้เกิดการใช้ Open Source Software ที่เป็นซอฟต์แวร์
เสรีให้ส่วนราชการไทยประกาศมาตรฐานเอกสารดิจิตัลและรูปแบบ ของฟอนต์ที่ไม่ขึ้นกับระบบปฏิบัติการ
และลิขสิทธิ์ของบริษัทใด ๆ เพื่อความภาคภูมิใจในความเป็นชาติและเอกลักษณ์ของความเป็นชาติไทย
ซึ่งในขณะนี้มีฟอนต์ที่ส่วนราชการไทยสามารถเป็นเจ้าของและพร้อม
แจกจ่ายให้ กับผู้ประสงค์จะใช้งานรวม 13 ฟอนต์ ดังนี้
\end{document}

ลองใช้ดูกันนะครับ ได้ไม่ได้อย่างไรแจ้งมาด้วย

VirtualBox and Windows 7

ตั้งแต่เปลี่ยนมาใช้ Windows 7  64 bit ก็ต้องจำใช้ Linux ผ่าน cygwin ซึ่งไม่ค่อยดีนัก ครั้งจะรอ colinux 64 bit ก็ไม่ทันใจ และคาดว่าอีกนานคงจะเสร็จ จริง ๆแล้วมีคนแนะนำให้ใช้ VirtualBox นานแล้ว ติดตรงที่รู้สึกไม่ดีกับโปรแกรมนี้สมัยแรก ๆ คราวนี้ได้เวลาทดสอบ ด้วยเหตุผลว่าเครื่องเร็วขึ้น มีหน่วยความจำมหาศาล 4 GB และหลาย ๆ อย่างพร้อมสำหรับ Windows 7 Professional แล้ว  ครั้งนี้ก็เลยใช้ใจที่ตั้งมั่นทดลองซักหน่อย  ขั้นตอนที่ยุ่งยากที่สุดเห็นจะเป็นการโหลดไฟล์ Ubuntu 10.10 ขนาดใหญ่ยักษ์ 600 กว่าเมกกะไบต์นั่นเอง ดังนั้นใครเน็ตช้าก็ควรจะโหลดเก็บไว้แล้วแจกจ่ายเพื่อน ๆ ด้วย

การติดตั้ง VirtualBox ก็ไม่มีอะไรนอกจากตอบคำถามในการติดตั้ง ทางที่ดีก็ควรจะอ่านด้วย และที่สำคัญควรเลือกไดรฟ์ให้ถูกต้อง ไม่งั้นเอะอะก็ C แล้วจะมาเสียใจภายหลัง

เมื่อติดตั้งเสร็จเรียบร้อยแล้ว ก็ให้ตั้งค่า Guest OS ให้ถูกต้อง ในที่นี้คือ Ubuntu 32 bit (ผมลง 64 bit ไม่ได้) จากนั้นก็ให้ตั้งค่า Storage ให้เพิ่มตัว iso ไฟล์ของ Ubuntu ที่โหลดมา ซึ่งตรงไปตรงมา ดังรูปข้างล่าง

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

Continue reading

Microsoft Academic Search

เรื่องนี้ไม่เกี่ยวกับ LaTeX เท่าไหร่ แต่เกี่ยวกับนักวิจัย การเป็นนักวิจัยนั้น สิ่งที่เลี่ยงไม่ได้ก็คือเรื่องของการตีพิมพ์ผลงานวิจัย เว็บ Microsoft Academic search คงจะเป็นอาวุธหนึ่งของ Microsoft สำหรับผูกตัวบริษัทติดกับนักวิจัยทั้งหลายแหล่ ผมเข้าไปพบโดยบังเอิญด้วยการค้นชื่อตัวเองด้วย Bing แล้วมันก็โยงผมมาที่เว็บแห่งนี้

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

รูปข้างบนเป็นของเล่นของนักวิจัยที่ทำงานเกี่ยวกับคณิตศาสตร์บ้าง ไม่มากก็น้อยชอบเล่นกัน นั่นคือการหาความสัมพันธ์กับ Paul Erdös ซึ่งความสัมพันธ์นี้คือตัวเลขของความไกลกับ Erdös ในเชิงของผู้วิจัยร่วม ตัวเลขไม่ได้สำคัญนัก (เพราะใครแก่กว่าก็ได้เปรียบ) แต่ที่สำคัญคือการพิสูจน์ว่าตัวเลขนั้นเป็นจริง ลองมาดูการเชื่อมโยงของผมกับ Erdös ดูครับ ว่าไกลขนาดไหน

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

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

รูปบ้างบนคือการแสดงจำนวนการตีพิมและการอ้างอิงผลงานในแต่ละปีของมหาวิทยาลัยในไทยแห่งหนึ่ง ที่นับเฉพาะจำนวนข้อมูลที่บรรจุในฐานข้อมูล

ใครเป็นนักวิจัยก็ลองไปใช้ดูนะครับ

การดึงข้อมูลจากกราฟใน Matlab

ใช้ Matlab แล้วเคยประสบปัญหาแบบนี้ไหมครับ

“ต้องการพล็อตกราฟใหม่ให้เหมือนรูปเก่า แต่หา m-file ไม่เจอ”

และมีปัญหาต่อเนื่องมา

“มีรูปสองรูปที่พล็อตไว้แล้วต้องการเปรียบเทียบบนแกนเดียวกัน แต่ข้อมูลที่พล็อตไว้ค่าบนแกน x ไม่เหมือนกัน”

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

โม้ซะเยอะ ถ้าเรามีกราฟ Matlab ในมือ แล้วทำ m-file ที่ใช้งานหาย หรือหาไม่เจอ แล้วต้องการนำข้อมูลจากกราฟที่พล็อตไปพล็อตเปรียบเทียบกับข้อมูลอื่น ในคู่มือ Matlab นั้นมีวิธีการ(ซ่อน)อยู่ในคู่มือ ซึ่งน้อยคนนักที่จะหาเจอ ผมเจอวิธีการนี้ตั้งแต่ปี 2007 ได้จดบันทึกเอาไว้ วันนี้เอามาเขียนใหม่แล้วกันครับ

ให้เลือกกราฟที่เราต้องการ จากนั้นให้ใช้คำสั่ง findobj เพื่อสร้างตัวแปรวัตถุของกราฟนั้น ๆ จากนั้นก็ดึงข้อมูลในแกน x และ y มาใช้ได้เลย ตามคำสั่งข้างล่าง

pts=findobj(gca,'type','line');
x = get(pts,'XData');
y = get(pts,'YData');

ในกรณีมีข้อมูลมากกว่าหนึ่งชุด เราสามารถกำหนดเลขดัชนีสำหรับข้อมูลในกราฟได้ดังนี้

y1 = get(pts(1),'YData');
y2 = get(pts(2),'YData');

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

การเพิ่ม List of Figures กับ List of Tables ลงในสารบัญ

เป็นเรื่องใหม่ที่พึ่งรู้ว่ามันเป็นปัญหา สืบเนื่องจากการใช้คำสั่ง \addcontentsline{toc}{chapter}{\bibname} เพื่อเพิ่มรายชื่อบทลงในสารบัญนั้น ซึ่งโดยปกติจะใช้สั่งให้มีรายชื่อของสารบัญตาราง สารบัญรูป และอื่น ๆ ลงในสารบัญ และสิ่งที่ผมพึ่งรู้ก็คือคำสั่งนี้จะแสดงเลขหน้าผิดเสมอ แก้อย่างไรก็ไม่สำเร็จ ค้นไปค้นมาเลยได้ความรู้จาก Patrick Jöckel’s ดังนี้

  1. ในการเพิ่มรายชื่อบทที่สร้างขึ้นเองลงในหน้าสารบัญ จำพวกกิจกรรมประกาศ บทคัดย่อ ฯลฯ การใช้คำสั่ง
    \addcontentsline{toc}{chapter}{ชื่อบท}

    นั้นจะต้องทำหลังคำสั่ง \chapter ของบทนั้น ๆ

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

สุดท้ายหวังว่าจะเป็นประโยชน์แก่คนที่กำลังเขียน Thesis ด้วย LaTeX แล้วโดนท้วงติงเรื่องเลขหน้าผิดครับ

เรื่องวุ่น ๆ เกี่ยวกับตาราง ตอนที่ 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