Category Archives: เทคนิค

ความลับสวรรค์

เนื่องจากไม่ค่อยมีเวลาเขียน โพสนี้เป็นการรวบรวมข้อมูลเล็ก ๆ น้อย ๆ สำหรับจดไว้กันลืมครับ lmodern ต้องลงเอง มันไม่ลงให้อัตโนมัติ สำหรับ MiKTeX นั้น XeLaTeX ต้องใช้ -enable-write18 แทนที่จะเป็น --shell-escape สำหรับหนังสือภาษาไทย ที่มีตัวภาษาอังกฤษ และสมการคณิตศาสตร์ปน ให้ใช้ตัวเลือก no-math \usepackage[no-math]{fontspec}เข้าไปเจอความลับสวรรค์จาก page Thai Students Love LaTeX เพื่อสั่งให้ LaTeX ไม่ใช้ฟอนต์ไทยกับสมการคณิตศาสตร์ ใน beamer ในสมการคณิตศาสตร์ ที่มี $\hat{f}$ เวลาแสดงผลจะเพี้ยน ป้อนกันได้ด้วย \usefonttheme{professionalfonts} แค่นี้ก่อนนะครับ

การแก้ปัญหาฟอนต์ Helvetica ในเอกสารที่สร้างจาก LaTeX แล้วมีปัญหากับ IEEE PDF eXpress

ถ้าใครเขียนบทความวิจัยเพื่อไปตีพิมพ์ในประชุมวิชาการระดับนานาชาติ สิ่งหนึ่งที่ควรจะดูก็คือเรื่องบทความวิจัยของเรามันจะไปอยู่ในฐานข้อมูลหรือไม่ หนึ่งในฐานข้อมูลยอดนิยมก็คือ IEEE Explore นั่นเอง เงินที่เสียเพิ่มขึ้นก็แลกเอาว่าจะให้บทความเราหายไปหรือคงอยู่ ผมได้รับการตอบรับให้ตีพิมพ์ในประชุมวิชาการระดับนานาชาติ ซึ่งต้องจ่ายเงินแล้ว upload บทความตัวสุดท้ายของเราขึ้นไปให้คณะผู้จัดงานได้รวบรวมไปตีพิมพ์ ปกติผมสร้างเอกสารจาก XeLaTeX ได้ตัว pdf มา ก็ upload ได้ไม่มีปัญหา แต่ก็มีเรื่องจนได้ เนื่องจากรูปกราฟของบทความผมที่สร้างขึ้นจากโปรแกรมคำนวณยอดนิยม ดังมีค่าเริ่มต้นของฟอนต์ต่าง ๆ เป็น Helvetica ซึ่งแน่นอนไม่มีบน windows ก็ประเมินไม่ผ่านตามระเบียบ แก้ยังไงน่ะเหรอครับ ก็ง่าย ๆ กลับเข้าไปแก้ที่รูปภาพที่มีอยู่รวม ๆ ประมาณ 20 รูป แต่ละรูปก็แก้ประมาณ 4-5 จุด ทำไปหนึ่งรูป

underscore !

เป็นเรื่องที่ user เก่า(และแก่ด้วย) อย่างผมถึงกับต้องตีอกชกหัวตัวเอง ตกม้าตายเอาง่าย ๆ เรื่องมีอยู่ว่า ผมเข้าใจเอาเองมาตลอดว่าใน LaTeX เขียน underscore '_' ได้เฉพาะใน math mode และจะหมายถึงการใส่ตัวห้อย (subscript) ปัญหาของผมที่เจอบ่อย ๆ ก็คือเวลาที่ผมต้องการจะเขียนชื่อไฟล์ที่มีตัว underscore นี้ ผมมักใช้ท่าพิเศษ เช่นใช้คำสั่ง \verb หรือ \url ซึ่งสามารถใช้งานได้ปกติ แต่ไม่ใช่ท่ามาตรฐาน ออกจะเป็นขบวนท่านอกด่านไปซักหน่อย วันนี้ต้องเขียนเอกสารอธิบายไฟล์ โดยต้องอ้างชื่อไฟล์หลายไฟล์ และบางชื่อไฟล์ต้องไปอยู่ในหลายสถานที่ ๆ ไม่ค่อยจะได้อยู่ เช่น ใน \caption เป็นต้น และนั่นคือที่มาของปัญหาเพราะขบวนท่า

Plot2SVG MATLAB and Inkscape

หลายคงคงรู้ว่าเวลาเอารูปจาก MATLAB ไปใส่ในเอกสาร LaTeX นั้น ฟอนต์ที่อยู่ในกราฟนั้นจะไม่เหมือนกับเอกสาร ปัญหานี้จะว่าใหญ่ก็ไม่เชิง จะว่าเล็กก็ไม่เชิง ขึ้นอยู่กับมุมมองของแต่ละคน แน่นอนสำหรับผมนั้นแค่เอารูปแบบ pdf หรือ eps ไปใช้ในเอกสารแล้วภาพไม่แตก พิมพ์ออกมาสวยงามกว่าชาวบ้านเขาก็พอแล้ว แต่ปรากฏว่าปัญหานี้ใหญ่พอสมควรสำหรับคนเยอรมันที่ผมทำงานด้วย จริง ๆ มีวิธีแก้ไขหลายวิธีปัญหานี้ได้พูดกันอย่างกว้างขวางที่ What is the best way to include Matlab graphics รวมถึงวิธีแก้ไขด้วยครับ  วิธีที่ดีที่สุดให้ดูคำตอบของคุณ Shuhao Cao ที่มีรูปเยอะ ๆ ซึ่งคุณ Shuhao Cao ได้แสดงปัญหาของการใช้ matlab2tikz ซึ่งมีผู้นิยมใช้กันมาก

การสร้างกรอบรอบกระดาษ ด้วย XeLaTeX

ช่วงนี้เริ่มจะเปิดภาคการศึกษา ปกติจะทำเอกสารการบ้านสำหรับนักศึกษา ซึ่งทุกครั้งจะใช้โปรแกรมสำนักงานสำหรับจัดทำเอกสารสร้างงานการบ้าน แต่ตอนนี้เห็นว่ามาลองใช้งาน XeLaTeX เลยอยากจะลองสร้างด้วย XeLaTeX แต่จริง ๆ แล้วก็เคยอยากทำมานานแล้วแต่ไม่สำเร็จ เพิ่งสำเร็จเลยนำมาลองให้เพื่อน ๆ ลองทดสอบกันครับ การตบแต่งกรอบกระดาษก็จะใช้คำสั่ง \AddToShipoutPicture{} เพื่อกำหนดส่วนที่จะแสดงทุกหน้า และภายในใช้คำสั่ง \framebox สร้างกรอบสี่เหลี่ยมใหญ่ แล้ววางชิ้นส่วนอื่น ๆ ด้วยคำสั่ง \put ไม่ว่าจะเป็นเส้นที่ใช้คำสั่ง \line หรือ \rule ก็ได้ การกำหนดขอบกระดาษ กำหนดให้สอดคล้องกับโครงกรอบที่เราวาดด้วยแพ็กเก็จ geometry ใช้แพ็กเก็จ lastpage เพื่อให้แสดงค่าเลขหน้าสุดท้าย ใช้คำสั่ง \fontsize{14pt}{16pt}\selectfont ในการกำหนดขนาดของฟอนต์ครับ [crayon-5951bb8d1c1de210422569/]   รูปผลการรันอัพรูปไม่ได้ครับแต่โหลดตัวอย่างได้ที่

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

ปัญหา มีเหตุจากผมใช้งานโปรแกรม Office แล้วมีปัญหาบางประการในการจัดเลขหน้าและส่วนหัวและส่วนท้าย และจากขนาดของไฟล์ที่ใหญ่มาก ทำให้การทำงานของโปรแกรมไม่เสถียร โปรแกรมจะค้างบ่อย ๆ เมือแก้ไขเอกสารจะค่อยข้างเสียเวลาและเสียอารมณ์เป็นอย่างยิ่ง แนวทางแก้ ทำการสร้างเอกสารใหม่ด้วยโปรแกรม Office ที่ไม่มีส่วนหัวและท้ายกระดาษ และตั้งค่าขอบกระดาษเป็น 25 มม ทั้งหมด แล้วทำการส่งออกเป็นเอกสาร pdf ที่ไม่มีเลขหน้า ใช้งาน pdfLaTeX โดนการเรียกแพกเกจ pdfpages ร่วมกับ fancy header สร้างส่วน header และ footer ให้กับเอกสาร pdf หลังจากนั้นถึงใช้งาน LaTeX ในการแทรกส่วนหัวและท้ายกระดาษ พอจะแก้ปัญหาชั่วคราวไปก่อน ได้รหัสคำสั่งดังแสดงครับ แพกเกจ babel

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

เป็นเรื่องใหม่ที่พึ่งรู้ว่ามันเป็นปัญหา สืบเนื่องจากการใช้คำสั่ง addcontentsline{toc}{chapter}{bibname} เพื่อเพิ่มรายชื่อบทลงในสารบัญนั้น ซึ่งโดยปกติจะใช้สั่งให้มีรายชื่อของสารบัญตาราง สารบัญรูป และอื่น ๆ ลงในสารบัญ และสิ่งที่ผมพึ่งรู้ก็คือคำสั่งนี้จะแสดงเลขหน้าผิดเสมอ แก้อย่างไรก็ไม่สำเร็จ ค้นไปค้นมาเลยได้ความรู้จาก Patrick Jöckel's ดังนี้ ในการเพิ่มรายชื่อบทที่สร้างขึ้นเองลงในหน้าสารบัญ จำพวกกิจกรรมประกาศ บทคัดย่อ ฯลฯ การใช้คำสั่ง [crayon-5951bb8d2a475675587755/] นั้นจะต้องทำหลังคำสั่ง chapter ของบทนั้น ๆ กรณีต้องการเพิ่มรายการของสารบัญให้มี สารบัญ สารบัญตาราง สารบัญรูป และเอกสารอ้างอิง สามารถทำได้โดยใช้แพ็กเกจ tocnatbibind ซึ่งจะทำให้เลขหน้าเป็นไปตามจริง ซึ่งได้ลองกับแพ็กเกจ ThaiLaTeX แล้วไม่มีปัญหาแต่อย่างใดครับ สำหรับวิธีการใช้แพ็กเกจนี้ก็ง่าย ๆ ครับ แค่เรียกใช้แพ็กเกจดังกล่าวก็พอ

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

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

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

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

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

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

Equation numbering with alphabet

ในบางครั้งในการเขียนสมการเราก็ต้องการจัดกลุ่มของสมการเช่น 1a 1b ... 1e แทนที่จะเรียงแบบ 1 2 ... 5 ซึ่งแบบแรกจะสามารถสื่อสารได้ดีกว่าว่าเป็นสมการเรื่องเดียวกัน ปกติก็ไม่เคยใช้หรือคิดจะใช้นะครับ พอดีเห็นคำค้นเรื่องนี้ก็เลยสนใจ พอค้น google ก็มีคนแนะนำว่าใน package amsmath นั้นมีชุดคำสั่งนี้ให้อยู่แล้ว แถมยังบอกหน้าให้เสร็จสรรพว่าหน้า 10 พอเข้าไปก็ลองทำตามที่คู่มือบอก ปรากฏว่าไม่ได้ ก็ไม่ยากครับไปค้น google อีกรอบได้วิธีทำที่ละเอียดกว่าที่ wikibooks ซึ่งมีวิธีการดังนี้นะครับ [crayon-5951bb8d64992037766688/] ไปลองดูรายละเอียดกันเองนะครับ ไม่ยากอะไร ถ้าต้องการ 1ก 2ข ... ก็ต้องลงแพ็กเกจภาษาไทยก่อนแล้วก็ทำตามนี้นะครับ [crayon-5951bb8d649a2243021868/] โดยการแปลงตัวเลขให้เป็นภาษาไทย โดยใช้คำสั่ง thaialph{equation}