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

ปัญหาของ XeLaTeX กับ MiKTeX

ในช่วงที่ผ่านมา ไม่ได้ยุ่งเกี่ยวอะไรกับ pdfLaTeX มานานมากแล้ว งานส่วนใหญ่หันไปใช้ XeLaTeX หมดแล้ว เพราะความสามารถที่มากกว่า ใช้ฟอนต์ของ OS นั้น ๆ ได้ ใช้งานกับภาษาไทยได้ดี  ช่วงนี้ถ้าใคร Update MiKTeX แล้วหล่ะก็ ก็จะมีปัญหากับแพ็กเกจสองตัวคือ expl3 กับ xpackages  ซึ่งถูกแทนที่ด้วย l3kernel กับ l3packages แต่ตอนนี้ MiKTeX ยังไม่ได้แก้ไข ผู้ใช้จะต้องลงเองนะครับ โดยใช้ตัวจัดการแพ็กเกจของ MiKTeX ครับ ปัญหาก็จะหมดไป

 

การใช้ 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 ผมได้แนวทางแก้ปัญหาจากเว็บไซต์ต่างประเทศหลายที่ในตอนทำ แต่ไม่ได้บันทึกไว้ ต้องขออภัยไว้ด้วยครับ