เรื่องวุ่น ๆ เกี่ยวกับสารบัญ


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

กรณีแรกที่ผู้ใช้ควรจะทำความเข้าใจก่อนก็คือเรื่องของหนังสือ (ผู้ที่กำหนดรูปแบบของหนังสือวิทยานิพนธ์ควรจะศึกษาหาความรู้เดินข้ามตึกหรือไปถามอาจารย์ในสาขาเทคโนโลยีการพิมพ์ดู ไม่ใช่นั่งเทียนออกแบบโดยที่ขาดความรู้ความเข้าใจ เราตัวเองเป็นที่ตั้ง) ปกติแล้วรูปแบบที่ออกแบบไว้ใน LaTeX จะเป็นรูปแบบที่พร้อมพิมพ์ (camera ready) และใช้ระบบการเรียงพิมพ์ตามรูปแบบมาตรฐานของการเรียงพิมพ์ในโรงพิมพ์  กล่าวคือการเว้นระยะช่องไฟ ย่อหน้า รูปแบบตัวอักษร จะเหมือนกันหมด (อ่านได้จาก The not so short introduction to LaTeX 2e–มีภาษาไทยแต่ค่อนข้างล้าสมัย)

รูปแบบการใส่เลขหน้าของหนังสือ

รูปแบบการใส่เลขหน้าในหนังสือจะถูกแยกเป็นส่วน ๆ ดังนี้

  1. \frontmatter ซึ่งเราควรจะใส่ไว้หลัง \begin{document} สำหรับหนังสือภาษาอังกฤษแล้ว ตัวเลขหน้าจะถูกเปลี่ยนเป็นเลขโรมัน ส่วนบทจะไม่มีเลขกำกับบท ซึ่งในสารบัญก็จะเป็นไปตามนี้ด้วย สำหรับภาษาไทยนั้นกรณีใช้ \usepackage[thai]{babel} ในส่วนนี้จะถูกกำหนดให้ใช้เลขไทยแบบมีวงเล็บ
    \@ifclassloaded{book}{%
     % redefine page numbering for frontmatter
     % and mainmatter
     \def\ps@headnum{\let\@mkboth\@gobbletwo
     \def\@oddhead{\reset@font\hfil\thepage\hfil}
           \let\@oddfoot\@empty
     \let\@evenhead\@oddhead\let\@evenfoot\@empty}
     \let\@ltxfrontmatter\frontmatter
     \renewcommand\frontmatter{\@ltxfrontmatter
           \pagestyle{headnum}\pagenumbering{thaibracenum}}
     \let\@ltxmainmatter\mainmatter
     \renewcommand\mainmatter{\@ltxmainmatter
           \pagestyle{headings}\pagenumbering{thainum}}
    }{}

    ซึ่งถ้าไม่ชอบก็ทำการเปลี่ยนได้โดยใช้คำสั่ง \renewcommand ในเอกสารตัวจริง หรือ class ไฟล์ที่สร้างใหม่ช่วย  ซึ่งถ้าอ่านรหัสของไฟล์ thai.ldf จะพบว่า เราสามารถเปลี่ยนเป็นอักษรไทยได้โดยเปลี่ยน thaibracenum ไปเป็น thaialph หรือ thaiAlph กรณีแรกสำหรับคนที่ไม่นิยม ‘ฃ’ กับ ‘ฅ’ ส่วนกรณีหลังสำหรับคนที่ยังยอมรับสองตัวนี้อยู่ (ซึ่งจะแปลกอยู่ เพราะเวลาเราทำข้อสอบปรนัย มันเรียง ก ข ค ง )

    และขอย้ำว่าในสารบัญ ส่วนนี้จะไม่มีเลขกำกับ ซึ่งจะรวมไปถึงคำว่า “บทที่” ที่จะใส่ในส่วนต่อไปด้วย

  2. \mainmatter ในส่วนนี้จะเรียงเลขหน้าปกติ โดยใช้เลขอารบิค และเริ่มตั้งแต่เลขหนึ่ง ในส่วนนี้สามารถจะเปลี่ยนตัวเลขเป็นเลขไทย เลขโรมัน หรือเลขภาษาอื่น ๆ ก็ได้ โดยใช้คำสั่ง
    \pagenumbering{ชื่อตัวเลขนั้น}
  3. \appendix หนังสือที่มีภาคผนวก บทที่อยู่หลังส่วนนี้จะมีเรียกชื่อบทด้วยตัวอักษร ในแพ็กเกจ thailatex มีการจัดการส่วนนี้ให้เป็นตัวอักษรไทยเรียบร้อยแล้ว ตัวอย่างรหัสต้นข้างล่างเป็นการตั้งค่าสำหรับคลาส book
    \@ifclassloaded{book}{%
    \renewcommand\appendix{\par
     \setcounter{chapter}{0}%
     \setcounter{section}{0}%
     \gdef\@chapapp{\appendixname}%
     \gdef\thechapter{\@thaialph\c@chapter}}
    }{}
  4. \backmatter คำสั่งนี้ควรจะใส่ไว้ส่วนท้ายของเอกสารก่อนส่วนของบรรณานุกรม และ ดัชนี ซึ่งจะทำการปรับค่าต่าง ๆ ให้เป็นปกตินั่นเอง

การตกแต่งสารบัญ

  1. การใส่ “บทที่” ในสารบัญ กรณีที่ต้องการแก้ไข book.cls (ควรจะเก็บเป็นชื่ออื่น) สามารถทำได้โดยเพิ่มไขรหัสในส่วนที่เห็น
     \def\@chapter[#1]#2{\ifnum \c@secnumdepth >\m@ne
     \if@mainmatter
     \refstepcounter{chapter}%
     \typeout{\@chapapp\space\thechapter.}%
     \addcontentsline{toc}{chapter}%
     {\protect\@chapapp{ }\numberline{\thechapter}#1}%
     \else
     \addcontentsline{toc}{chapter}{#1}%
     \fi
     \else
     \addcontentsline{toc}{chapter}{#1}%
     \fi
     \chaptermark{#1}%
     \addtocontents{lof}{\protect\addvspace{10\p@}}%
     \addtocontents{lot}{\protect\addvspace{10\p@}}%
     \if@twocolumn
     \@topnewpage[\@makechapterhead{#2}]%
     \else
     \@makechapterhead{#2}%
  2. การเพิ่มคำว่า “หน้า” เหนือเลขหน้าในสารบัญ ทำได้ง่าย ๆ นะครับโดยการเปลี่ยนเนื้อหาของคำสั่ง \tableofcontents ดังนี้  ระยะ 14.1 cm นั้นให้แก้ไขเอาเองนะครับ ขึ้นอยู่กับระยะหน้าของแต่ละเอกสาร
    \makeatletter
    \renewcommand\tableofcontents{%
     %\addcontentsline{toc}{chapter}{ÊÒúѭ}%
     \newpage
     \leavevmode
     \begin{center}
     {\bf\large สารบัญ} \vskip 1em
     \end{center}
     \hskip 14.1cm  {\bf  หน้า }
     \vskip 0em
     \@starttoc{toc}
     }
    \makeatother

แพ็กเกจ tocloft

Advertisements

6 comments on “เรื่องวุ่น ๆ เกี่ยวกับสารบัญ

  1. I try to add “บทที่” and ” หน้า” by following your steps posted here but I couldn’t get it to work. I am using xelatex without the bable package. Could you please walk me through on how to make it work? I manage to change ” Table of content” to “สารบัญ” by using the following command

    “\renewcommand{\contentsname}{สารบัญ}”

    Thank you.

  2. “I try to add “บทที่” and ” หน้า” by following your steps posted here but I couldn’t get it to work. I am using xelatex without the babel package. Could you please walk me through on how to make it work?”

    How did you do? Did you change book.cls as I did for “บทที่”?

    To add ” หน้า” in your table of content, you have to put the code before \begin{document}. If it is not work could you clear me what you did and what you get?

  3. Here is the code:

    \documentclass[9pt]{book}
    \usepackage{fontspec}\usepackage{xunicode}
    \usepackage{xltxtra}\defaultfontfeatures{Scale=MatchLowercase}
    \XeTeXlinebreaklocale “th_TH”
    \setmainfont[Scale=1.4]{THNiramitAS}
    \usepackage{amsmath}
    \title{………}
    \author{…….. }

    %%%Then I add your command lines here

    \renewcommand\tableofcontents{%
    %\addcontentsline{toc}{chapter}{ÊÒúѭ}%
    \newpage
    \leavevmode
    \begin{center}
    {\bf\large สารบัญ} \vskip 1em
    \end{center}
    \hskip 14.1cm {\bf หน้า }
    \vskip 0em
    \@starttoc{toc}
    }
    %%%%%%%%%%%%

    \begin{document}
    \maketitle
    \renewcommand{\contentsname}{สารบัญ}
    \tableofcontents
    \renewcommand{\chaptername}{บทที่}
    \chapter{………………………}

    end{document}

    %%%%%%%%%%%

    I can’t get it to run. Your help is appreciated.

    Ae

    • ขอโทษด้วยครับที่รหัสที่เขียนตกไปสองบรรทัด เพิ่ม
      \makeatletter ไว้ก่อน \renewcommand\tableofcontents{ … } แล้วปิดท้ายด้วย \makeatother

      ทั้งนี้เพราะ LaTeX จะไม่สามารถใช้คำสั่งที่ขึ้นต้นด้วย \@ ในเอกสารได้

  4. ทำอย่างไรให้ข้อความบางที่ไม่เว้นมากเกินไป ระหว่างพารากราฟ หรือรูปกับข้อความ

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s