% \iffalse meta-comment % % Copyright (C) 1999 National Electronics and Computer Technology Center % (NECTEC), Thailand. All rights reserved. % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2005/12/01 or later. % % This work has the LPPL maintenance status "maintained". % % The Current Maintainer of this work is Theppitak Karoonboonyanan. % % This work consists of the files thai.dtx and thai.ins % and the derived file thai.ldf. % % \fi % \CheckSum{272} % \iffalse % Tell the \LaTeX\ system who we are and write an entry on the % transcript. %<*dtx> \ProvidesFile{thai.dtx} % %\ProvidesLanguage{thai} %\fi %\ProvidesFile{thai.dtx} [2013/03/31 v1.8 Thai support from the babel system] %\iffalse %% File `thai.dtx' %% Thai Language Definition File %% Copyright (C) 1999 - 2013 %% by Surapant Meknavin, %% Theppitak Karoonboonyanan (thep at linux.thai.net), %% Chanop Silpa-Anan (chanop at debian.org), %% Poonlap Veerathanabutr (poonlap at linux.thai.net) %% Thai Linux Working Group %% http://linux.thai.net/ %% %% Please report errors to: Theppitak Karoonboonyanan %% (thep at linux.thai.net) %% %% This file is part of the babel system, it provides the source %% code for the Thai language definition file. The original version %% was written by Surapant Meknavin. %% %% It is currently maintained by Theppitak Karoonboonyanan %% (thep at linux.thai.net), Chanop Silpa-Anan (chanop at debian.org) %% and Poonlap Veerathanabutr (poonlap at linux.thai.net). % %<*filedriver> \documentclass{ltxdoc} \newcommand*\TeXhax{\TeX hax} \newcommand*\babel{\textsf{babel}} \newcommand*\langvar{$\langle \it lang \rangle$} \newcommand*\note[1]{} \newcommand*\Lopt[1]{\textsf{#1}} \newcommand*\file[1]{\texttt{#1}} \begin{document} \DocInput{thai.dtx} \end{document} % %\fi % \GetFileInfo{thai.dtx} % % \changes{thai-1.0d}{2000/05/09}{Theppitak Karoonboonyanan: % Encoding changed from TIS to LTH, according to TeX convention. % Let `norasi' be Thai roman font, `dbttx' Thai sans serif. % Correct some Thai translations.} % \changes{thai-1.0d}{2001/12/04}{Theppitak Karoonboonyanan: % Add checks for \cs{thechapter} existence before redefining % digits as Thai. % Move thaitoday definitions into thainumber and remove % thainumber option. % Use \cs{ifcase} instead of nested \cs{if} in \cs{thaitranslate}. % Fix wrong encoding in heading for book style (as suggested by Chanop).} % \changes{thai-1.0d}{2001/12/04}{Chanop Silpa-Anan: % Add thainumber and thaitoday option} % \changes{thai-1.0d}{2002/01/16}{Theppitak Karoonboonyanan: % Fix extra spaces appearing in \cs{selectlanguage\{thai\}} % (as suggested by C. Visavakul)} % \changes{thai-1.0d}{2003/01/07}{Poonlap Veerathanabutr: % Change `dbttx' to `dbtt'} % \changes{thai-1.0d}{2003/02/26}{Theppitak Karoonboonyanan: % Run Thai number in part, subsubsection, paragraph, % subparagraph also} % \changes{thai-1.0d}{2003/06/02}{Chanop Silpa-Anan: % Use `garuda' for default Thai sans serif since % `dbtt' is still slightly buggy} % \changes{thai-1.0d}{2003/08/10}{Theppitak Karoonboonyanan: % Fix translation of \cs{prefacename}. % Redefine \cs{frontmatter} and \cs{mainmatter} for book class % so thainumber option applies to the page numbering styles. % (Experimental:) Add initialization of Thai character codes % to fix the \cs{MakeUppercase} and \cs{MakeLowercase} problem % also comment out the old workarounds.} % \changes{thai-1.0d}{2004/02/02}{Poonlap Veerathanabutr: % Fix \cs{lccode} and \cs{uccode}} % \changes{thai-1.0d}{2004/02/28}{Theppitak Karoonboonyanan: % Always use Thai alphabets for appendix (as suggested by K. chakkree01)} % \changes{thai-1.0d}{2004/03/04}{Theppitak Karoonboonyanan: % Use `pmono' as default Thai ttfamily} % \changes{thai-1.0d}{2004/03/06}{Theppitak Karoonboonyanan: % Use `garuda' instead of `dbtt' as default Thai sffamily} % \changes{thai-1.0d}{2004/03/18}{Theppitak Karoonboonyanan: % Move \cs{frontmatter} and \cs{mainmatter} redefinition back under % `thainumber' option (wrongly moved along with previous % appendix fix)} % \changes{thai-1.0d}{2004/04/08}{Theppitak Karoonboonyanan: % Borrow code from previous encoding fix to inhibit capitalizing % chapters \& sections in book headers. (proposed by P'Joy)} % \changes{thai-1.0d}{2004/11/15}{Theppitak Karoonboonyanan: % `pmono' is now `ttype'} % \changes{thai-1.1}{2006/07/05}{Theppitak Karoonboonyanan: % Create `thai.dtx' for documenting and generating `thai.ldf'. % Remove unnecessary workarounds for inhibition of capitalization % of headers, as the catcodes already do the job. % Also remove the mysterious redefinitions of figure and table counters.} % \changes{thai-1.2}{2009/07/27}{Theppitak Karoonboonyanan: % Re-encode Thai messages with unicode symbolic names, instead of explicit % TIS-620 bytes. Adjust documentation to cover UTF-8 support. Make % \cs{ttypist} the default typewriter font instead of \cs{ttype}. % Drop the obsolete \cs{\backslash{}thai} command.} % \changes{thai-1.3}{2011/03/17}{Theppitak Karoonboonyanan: % Add \cs{\backslash{}textpali} macro for typesetting Pali text with % descender-less Yo Ying and Tho Than. Update translation for % \cs{\backslash{}refname}} % \changes{thai-1.4}{2011/10/18}{Theppitak Karoonboonyanan: % Remove font-specific macros} % \changes{thai-1.4a}{2011/11/23}{Theppitak Karoonboonyanan: % Revise documentation} % \changes{thai-1.4b}{2011/12/16}{Theppitak Karoonboonyanan: % Remove extra space in \cs{\backslash{}wbr}. Word spacing is considered % suboptimal.} % \changes{thai-1.4c}{2011/12/19}{Theppitak Karoonboonyanan: % Revise documentation} % \changes{thai-1.4d}{2012/02/10}{Theppitak Karoonboonyanan: % Revise documentation. Add documentation for Thai line stretching.} % \changes{thai-1.5}{2013/01/29}{Theppitak Karoonboonyanan: % Add space stretching support.} % \changes{thai-1.6}{2013/03/12}{Theppitak Karoonboonyanan: % Fix crash on \cs{\backslash{}renewcommand} when \cs{thainumber} option % is used with section-less document classes, such as letter.} % \changes{thai-1.7}{2013/03/13}{Theppitak Karoonboonyanan: % Limit the scope of emergency stretch within Thai language by using % \cs{\backslash{}extrasthai} and \cs{\backslash{}noextrasthai}.} % \changes{thai-1.8}{2013/03/31}{Pruet Boonma: % Add \Lopt{thaiindentfirst} option to force indentation on section's % first paragraph.} % % \section{The Thai language} % % The file \file{\filename}\footnote{The file described in this section has % version number \fileversion\ and was last revised on \filedate. The % original author was Surapant Meknavin, and it was composed into % \file{\filename} and maintained by Theppitak Karoonboonyanan % (\texttt{thep@linux.thai.net}).} % defines language-specific macros for Thai language. % % \subsection{Input encoding} % % Thai documents supported by this language definition can be encoded in % either TIS-620 (ISO/IEC 8859-11) or UTF-8 with the aids of the % \texttt{inputenc} package. % % \DescribeMacro{\thaitext} % \DescribeMacro{\latintext} % The commands |\thaitext| and |\latintext| can be used to switch to Thai % or Latin fonts. These are declarations. % % \DescribeMacro{\textthai} % \DescribeMacro{\textlatin} % The commands |\textthai| and |\textlatin| both take one text argument % which is then typeset using the requested language settings. % % \DescribeMacro{\textpali} % The command |\textpali| takes one text argument which is then typeset % using Thai font, with special shapes for certain characters, such as % descender-less Yo Ying and Tho Than, as required by usual Pali-Sanskrit % transliteration. % % \subsection{Word breaks} % % Thai is written continuously without word delimitors. The word boundary % analysis is considered too complicated for rule-based approaches. % Most available good-quality word analysis tools employ special matching % algorithms against pre-defined dictionaries. Some even use % statistics-based contextual analysis to resolve ambiguities. Therefore, % no good hyphenation pattern is found to be comparable with those tools % yet. % % \DescribeMacro{\wbr} % What provided here for the word boundary problem is the |\wbr| command % for separating words. It delimits words without taking physical space, % so that the \TeX\ typesetter still wraps lines at word boundary like % when it typesets English text. % % Therefore, one can preprocess their Thai document using Thai word analysis % tools which automatically insert the |\wbr| commands between words, such % as: % \begin{itemize} % \item \emph{cttex} by Vuthichai Ampornaramveth % \item \emph{swath} by Phaisarn Charoenpornsawat, now maintained by Thai % Linux Working Group, which can be downloaded from:\\ % \texttt{ftp://linux.thai.net/pub/thailinux/software/swath} % % To compile \emph{swath}, you need \emph{libdatrie} as the % dependency, which is provided under the \emph{libthai} project:\\ % \texttt{ftp://linux.thai.net/pub/thailinux/software/libthai} % \end{itemize} % % \subsection{Thai paragraph} % \label{thai-paragraph} % Generally speaking, Thai paragraph uses the same rule as in English. % However, there are some differences, such as how to start the paragraph % in a new chapter or section. % % \DescribeEnv{thaiindentfirst} % As suggested by English writing guideline, the first paragraph in each % section shall not be indented. However, for Thai language, indenting the % first paragraph is more popular and widely suggested. The option % \Lopt{thaiindentfirst} can be used to control this behavior. % % \subsection{Thai numbering} % \label{thai-numbering} % % Some certain Thai documents use Thai digits instead of Arabic. % And Thai alphabetic numbering is also commonly used for appendices. % This file provides a number of numbering styles that can be applied % to \LaTeX\ |\pagenumbering| command: % % \begin{itemize} % \item |\thainum| for plain Thai digits % \item |\thaibracenum| for Thai digits in parentheses % \item |\thaialph| for Thai alphabetic numbering, using a reduced set % (with three alphabets skipped: Kho Khuat, Kho Khon and Kho Rakhang) % \item |\thaiAlph| for Thai alphabetic numbering, using the full set % (with full alphabet set, plus two semi-vowels, Ru and Lu, in the % order defined in Thai official dictionary) % \end{itemize} % % \DescribeEnv{thainumber} % The above numbering styles can be automatically chosen using the % \Lopt{thainumber} option. When this option is supplied to the \babel{} % package, Thai numberings will be applied to pages, sections, % enumerations, dates, etc. % % \StopEventually{} % % \subsection{Thai language definition} % % The macro |\LdfInit| takes care of preventing file from being % loaded more than once, checking the category code of the % \texttt{@} sign, etc. % \begin{macrocode} %<*code> \LdfInit\CurrentOption{captions\CurrentOption} % \end{macrocode} % % When this file is read as an option, i.e. by the |\usepackage{babel}| % command, \texttt{thai} will be an `unknown' language, in which % case we have to make it known. So, we check for the existence of % |\l@thai| to see whether we have to do something here. % % \begin{macrocode} \ifx\l@thai\@undefined \@nopatterns{thai} \adddialect\l@thai0\fi % \end{macrocode} % % \subsubsection{Thai character encoding} % % In this language definition, we support TIS-620, the national standard % 8-bit character encoding, and Unicode by means of \texttt{inputenc} % package. % % The encoding has been described in terms of TIS-620 as \texttt{LTH} in % the \file{lthenc.def} file. So, we require it. % % \begin{macrocode} \InputIfFileExists{lthenc.def}% {\message{Loading the definitions for the Thai font encoding}}% {% \errhelp{I can't find the lthenc.def file for the Thai fonts}% \errmessage{Since I do not know what the LTH encoding means^^J I can't typeset Thai.^^J I stop here, while you get a suitable lthenc.def file}\@@end } % \end{macrocode} % % The next step consists of defining commands to switch to the Thai % language, for users to switch back and forth between languages. % % \begin{macro}{\thaitext} % We define |\thaitext| as a declarative switch to Thai font encoding. % \begin{macrocode} \DeclareRobustCommand{\thaitext}{% \fontencoding{LTH}\selectfont% \def\encodingdefault{LTH}} % \end{macrocode} % \end{macro} % % \begin{macro}{\textthai} % This command takes one text argument which is then typeset using Thai font % encoding. % \begin{macrocode} \DeclareRobustCommand{\textthai}[1]{{\thaitext #1}} % \end{macrocode} % \end{macro} % % \subsubsection{Pali-Sanskrit Transliteration} % % Thai script can also be used for writing Pali and Sanskrit. Additional % conventions are applied when doing so: (a) Yo Ying and Tho Than must be % written without descender; (b) Phinthu is used for marking cluster; % (c) Nikhahit is used as a Pali-Sanskrit consonant. % % (b) is inherently applicable as combining character. So is (c), with % an exception for the case in which it is combined over upper vowel % (namely, Sara I), where it must be shifted to higher position. Nikhahit % shifting is implemented in the ligkern rules with the extra glyph % provision in the fonts. % % What is left here is (a). Yo Ying and Tho Than must be converted to % their descender-less variants. The |\textpali| macro is defined % for this purpose. Note that |\wbr| commands which are normally inserted % by automatic tools are ignored here, as most of such tools are not % designed for Pali/Sanskrit. Besides, Pali/Sanskrit is already space % delimited. % % \begin{macro}{\textpali} % This command converts all Yo Ying and Tho Than in its argument to % their descender-less variations. % \begin{macrocode} \DeclareRobustCommand{\textpali}[1]{% \begingroup \def\thaiYoYing{\textYoYingPali{}}% \def\thaiThoThan{\textThoThanPali{}}% \def\wbr{}% \scantokens\expandafter{#1}\relax \endgroup } % \end{macrocode} % \end{macro} % % \subsubsection{Hyphenation} % % We define |\thaihyphenmins| macro for hyphenation parameters. This is % one of the five macros required by \babel{}. % % \begin{macro}{\thaihyphenmins} % This macro is used to store the correct values of the hyphenation % parameters |\lefthyphenmin| and |\righthyphenmin|. They are set to 11. % \changes{thai-1.1}{2006/07/02}{Theppitak Karoonboonyanan: % Now use \cs{providehyphenmins} to provide a default value} % \begin{macrocode} \providehyphenmins{thai}{11} % \end{macrocode} % \end{macro} % % \subsubsection{Captions translation} % % We define |\captionsthai| macro for translations of strings. This is % one of the five macros required by \babel{}. % % \begin{macro}{\captionsthai} % The macro |\captionsthai| defines all strings used in the four % standard documentclasses provided with \LaTeX. % \begin{macrocode} \addto\captionsthai{% \def\prefacename{\thaiKhoKhwai\thaiSaraAm\thaiNoNu\thaiSaraAm}% \def\refname{\thaiSaraE\thaiOAng\thaiKoKai\thaiSoSua\thaiSaraAa\thaiRoRua% \thaiOAng\thaiMaiTho\thaiSaraAa\thaiNgoNgu% \thaiOAng\thaiSaraI\thaiNgoNgu}% \def\abstractname{\thaiBoBaimai\thaiThoThahan% \thaiKhoKhwai\thaiMaiHanakat\thaiDoDek% \thaiYoYak\thaiMaiEk\thaiOAng}% \def\bibname{\thaiBoBaimai\thaiRoRua\thaiRoRua\thaiNoNen\thaiSaraAa% \thaiNoNu\thaiSaraU\thaiKoKai\thaiRoRua\thaiMoMa}% \def\chaptername{\thaiBoBaimai\thaiThoThahan% \thaiThoThahan\thaiSaraIi\thaiMaiEk}% \def\appendixname{\thaiPhoSamphao\thaiSaraAa\thaiKhoKhwai% \thaiPhoPhung\thaiNoNu\thaiWoWaen\thaiKoKai}% \def\contentsname{\thaiSoSua\thaiSaraAa\thaiRoRua% \thaiBoBaimai\thaiMaiHanakat\thaiYoYing}% \def\listfigurename{\thaiSoSua\thaiSaraAa\thaiRoRua% \thaiBoBaimai\thaiMaiHanakat\thaiYoYing% \thaiRoRua\thaiSaraUu\thaiPoPla}% \def\listtablename{\thaiSoSua\thaiSaraAa\thaiRoRua% \thaiBoBaimai\thaiMaiHanakat\thaiYoYing% \thaiToTao\thaiSaraAa\thaiRoRua\thaiSaraAa\thaiNgoNgu}% \def\indexname{\thaiDoDek\thaiRoRua\thaiRoRua\thaiChoChang% \thaiNoNu\thaiSaraIi}% \def\figurename{\thaiRoRua\thaiSaraUu\thaiPoPla% \thaiThoThahan\thaiSaraIi\thaiMaiEk}% \def\tablename{\thaiToTao\thaiSaraAa\thaiRoRua\thaiSaraAa\thaiNgoNgu% \thaiThoThahan\thaiSaraIi\thaiMaiEk}% \def\partname{\thaiPhoSamphao\thaiSaraAa\thaiKhoKhwai}% \def\enclname{\thaiSoSua\thaiSaraI\thaiMaiEk\thaiNgoNgu% \thaiThoThahan\thaiSaraIi\thaiMaiEk% \thaiSaraAe\thaiNoNu\thaiBoBaimai% \thaiMoMa\thaiSaraAa% \thaiDoDek\thaiMaiTho\thaiWoWaen\thaiYoYak}% \def\ccname{\thaiSoSua\thaiSaraAm\thaiSaraE\thaiNoNu\thaiSaraAa% \thaiThoThung\thaiSaraUe\thaiNgoNgu}% \def\headtoname{\thaiSaraE\thaiRoRua\thaiSaraIi\thaiYoYak\thaiNoNu}% \def\pagename{\thaiHoHip\thaiNoNu\thaiMaiTho\thaiSaraAa}% \def\seename{\thaiDoDek\thaiSaraUu}% \def\alsoname{\thaiDoDek\thaiSaraUu% \thaiSaraE\thaiPhoPhan\thaiSaraI\thaiMaiEk\thaiMoMa% \thaiSaraE\thaiToTao\thaiSaraI\thaiMoMa}% \def\proofname{\thaiPhoPhan\thaiSaraI% \thaiSoSua\thaiSaraUu\thaiChoChan\thaiNoNu\thaiThanthakhat}% } % \end{macrocode} % \end{macro} % % \subsubsection{Date} % % Here we define |\datethai| macro for Thai date format. This is % one of the five macros required by \babel{}. % % First, let's define the months in Thai. % % \begin{macrocode} \def\th@month{% \ifcase\month\or \thaiMoMa\thaiKoKai\thaiRoRua\thaiSaraAa\thaiKhoKhwai\thaiMoMa \or \thaiKoKai\thaiSaraU\thaiMoMa\thaiPhoSamphao\thaiSaraAa% \thaiPhoPhan\thaiMaiHanakat\thaiNoNu\thaiThoThong\thaiThanthakhat \or \thaiMoMa\thaiSaraIi\thaiNoNu\thaiSaraAa\thaiKhoKhwai\thaiMoMa \or \thaiSaraE\thaiMoMa\thaiSoRusi\thaiSaraAa\thaiYoYak\thaiNoNu \or \thaiPhoPhan\thaiRu\thaiSoRusi\thaiPhoSamphao\thaiSaraAa% \thaiKhoKhwai\thaiMoMa \or \thaiMoMa\thaiSaraI\thaiThoThung\thaiSaraU\thaiNoNu\thaiSaraAa% \thaiYoYak\thaiNoNu \or \thaiKoKai\thaiRoRua\thaiKoKai\thaiDoChada\thaiSaraAa% \thaiKhoKhwai\thaiMoMa \or \thaiSoSua\thaiSaraI\thaiNgoNgu\thaiHoHip\thaiSaraAa% \thaiKhoKhwai\thaiMoMa \or \thaiKoKai\thaiMaiHanakat\thaiNoNu\thaiYoYak\thaiSaraAa% \thaiYoYak\thaiNoNu \or \thaiToTao\thaiSaraU\thaiLoLing\thaiSaraAa\thaiKhoKhwai\thaiMoMa \or \thaiPhoPhan\thaiRu\thaiSoSala\thaiChoChan\thaiSaraI\thaiKoKai\thaiSaraAa% \thaiYoYak\thaiNoNu \or \thaiThoThong\thaiMaiHanakat\thaiNoNu\thaiWoWaen\thaiSaraAa% \thaiKhoKhwai\thaiMoMa \fi} % \end{macrocode} % % Thai official calendar uses Buddhist Era, the era whose start is marked % by Buddha's entry into Parinirvana. In original form, it is a lunar % calendar. But in Thai contemporary calendar, it is synchronized to % Gregorian calendar, with offset of 543 years back. % % \begin{macrocode} \newcount\th@year \th@year=\year \advance\th@year by 543 % \end{macrocode} % % Then, we come to the |\datethai| macro. % % \begin{macro}{\datethai} % Thai date format is in the day-month-year order, using Buddhist Era. % \begin{macrocode} \def\datethai{% \def\today{\number\day \space \th@month\space % \thaiPhoPhan.\thaiSoSala.~\number\th@year}} % \end{macrocode} % \end{macro} % % \subsubsection{Extra definitions for language switching} % % Then, the last two macros required by \babel{} are |\extrasthai| and % |\noextrasthai| containing extra definitions needed for Thai language % upon switching to and out of it, respectively. % % \begin{macrocode} \addto\extrasthai{\thaitext} \addto\noextrasthai{\latintext} % \end{macrocode} % % \subsection{Word break support} % % As Thai script is written continuously without word delimitors, we define % |\wbr| command to mark word boundaries without taking space, so that % \TeX typesetter can wrap Thai lines at proper positions. % % \begin{macrocode} \def\wbr{\hskip0pt\relax} % \end{macrocode} % % \subsection{Space stretching} % % Since ordinary Thai text contains fewer spaces than English, % the \TeX{} justification is stressed with fewer places to stretch % to make the line reach the right margin. This usually ends up with % overfull lines when \TeX{} decides to include the next word to fill % the space, instead of trying to manipulate spacing with appropriate % amount of text. Possible solutions to this problem include: % \begin{itemize} % \item \emph{Use letter spacing.} This is a common practice in Thai % publishing. However, \TeX{} does not allow this, probably not to % shag sheep.\footnote{\emph{``Men who would letterspace blackletter % would shag sheep'' --- Frederick Goudy.}} % \item \emph{Allow stretching between words.} This used to be a simple % hack in an old version of this module, until it was finally % dropped in version 1.4b, as it was considered suboptimal. % \item \emph{Allow more space stretching.} This can be more acceptable, % compared to the ragged right margin. And it is what we do here. % \end{itemize} % % \begin{macrocode} \addto\extrasthai{% \edef\th@restoreemstretch{\emergencystretch=\the\emergencystretch} \setlength{\emergencystretch}{0.6em}} \addto\noextrasthai{\th@restoreemstretch} % \end{macrocode} % % \subsection{Line spacing} % % Due to multi-level combining character stacking, Thai text lines % can occupy more vertical space than English. To prevent overlapping, % \TeX{} allocates more height for lines with combining characters % but not for those without. This can cause irregular line spacing. % To avoid this problem, we need to stretch the line spacing. % % \begin{macrocode} \renewcommand{\baselinestretch}{1.2} % \end{macrocode} % % \subsection{Paragraph} % This section provides Thai paragarph formating style as described in % \S\ref{thai-paragraph}. % % \subsubsection{\Lopt{thaiindentfirst} option} % % If \Lopt{thaiindentfirst} is supplied in the |\usepackage| command, the % first Thai paragraph in each section will be indented. The other % paragraphs will behave as default. % % \begin{macrocode} \DeclareOption{thaiindentfirst} {% % \end{macrocode} % % When switching to Thai language, point |\@afterindentfalse| to % |\@afterindentrue|, so that \LaTeX\ will never indent the first % paragraph. % % \begin{macrocode} \addto\extrasthai{% \let\th@afterindentfalse\@afterindentfalse \let\@afterindentfalse\@afterindenttrue \@afterindenttrue } % \end{macrocode} % % When switching out of Thai language, point |\@afterindentfalse| % back to its original function. % % \begin{macrocode} \addto\noextrasthai{% \let\@afterindentfalse\th@afterindentfalse } } % \end{macrocode} % % \subsection{Thai numbering support} % % This section provides Thai numbering styles as described in % \S\ref{thai-numbering}: |\thainum|, |\thaibracenum|, |\thaialph| and % |\thaiAlph|. % % First, we define a macro for translating decimal digits into Thai digits. % % \begin{macro}{\thaitranslate} % The |\thaitranslate| macro determines decimal digits in the argument and % convert them to Thai digit one by one, until the `|@|' terminator is found. % \begin{macrocode} \def\thaitranslate#1{\ifx @#1% \else\ifcase#1 \thaizero \or \thaione \or \thaitwo \or \thaithree \or \thaifour \or \thaifive \or \thaisix \or \thaiseven \or \thaieight \or \thainine \else\fi \expandafter\thaitranslate \fi } % \end{macrocode} % \end{macro} % % \begin{macro}{\thainum} % The |\thainum| macro is to be used as a numbering style in \LaTeX\ % |\pagenumbering| command. % % It takes a counter name and converts its value into Thai digits. % In details, it prepends the counter name with `|c@|' to access the counter % value, then calls |\@thainum| to convert it into Thai digits. % % The |\@thainum| macro converts a number into Thai digits. It expands the % argument into a number, terminates it with `|@|', and calls % |\thaitranslate| to convert it into Thai digits. % % \begin{macrocode} \def\@thainum#1{\expandafter\thaitranslate\number#1@} \def\thainum#1{\expandafter\@thainum\csname c@#1\endcsname} % \end{macrocode} % \end{macro} % % \begin{macro}{\thaibracenum} % Similar to |\thainum|, the |\thaibracenum| macro is to be used as a % numbering style in \LaTeX\ |\pagenumbering| command. % % It provides Thai digits numbering, surrounded by parentheses. % % \begin{macrocode} \def\@thaibracenum#1{(\expandafter\thaitranslate\number#1@)} \def\thaibracenum#1{\expandafter\@thaibracenum\csname c@#1\endcsname} % \end{macrocode} % \end{macro} % % Now come to Thai alphabetic numbering, beginning with the reduced set. % % \begin{macro}{\thaialph} % The |\thaialph| macro is to be used as a numbering style in \LaTeX\ % |\pagenumbering| command. % % It converts a number not greater than 41 into Thai alphabet in the % corresponding order in the reduced set. In this set, 3 characters % are skipped: Kho Khuat, Kho Khon and Kho Rakhang. % % \begin{macrocode} \def\thaialph#1{\expandafter\@thaialph\csname c@#1\endcsname} \def\@thaialph#1{% \ifcase#1\or \thaiKoKai\or \thaiKhoKhai\or \thaiKhoKhwai\or \thaiNgoNgu\or \thaiChoChan\or \thaiChoChing\or \thaiChoChang\or \thaiSoSo\or \thaiChoChoe\or \thaiYoYing\or \thaiDoChada\or \thaiToPatak\or \thaiThoThan\or \thaiThoNangmontho\or \thaiThoPhuthao\or \thaiNoNen\or \thaiDoDek\or \thaiToTao\or \thaiThoThung\or \thaiThoThahan\or \thaiThoThong\or \thaiNoNu\or \thaiBoBaimai\or \thaiPoPla\or \thaiPhoPhung\or \thaiFoFa\or \thaiPhoPhan\or \thaiFoFan\or \thaiPhoSamphao\or \thaiMoMa\or \thaiYoYak\or \thaiRoRua\or \thaiLoLing\or \thaiWoWaen\or \thaiSoSala\or \thaiSoRusi\or \thaiSoSua\or \thaiHoHip\or \thaiLoChula\or \thaiOAng\or \thaiHoNokhuk\else\@ctrerr\fi} % \end{macrocode} % \end{macro} % % \begin{macro}{\thaiAlph} % Similar to |\thaialph|, the |\thaiAlph| macro provides Thai alphabetic % numbering with full alphabet set in the order defined in Thai official % dictionary. So, it supports up to 44 entries. % % \begin{macrocode} \def\thaiAlph#1{\expandafter\@thaiAlph\csname c@#1\endcsname} \def\@thaiAlph#1{% \ifcase#1\or \thaiKoKai\or \thaiKhoKhai\or \thaiKhoKhuat\or \thaiKhoKhwai\or \thaiKhoKhon\or \thaiKhoRakhang\or \thaiNgoNgu\or \thaiChoChan\or \thaiChoChing\or \thaiChoChang\or \thaiSoSo\or \thaiChoChoe\or \thaiYoYing\or \thaiDoChada\or \thaiToPatak\or \thaiThoThan\or \thaiThoNangmontho\or \thaiThoPhuthao\or \thaiNoNen\or \thaiDoDek\or \thaiToTao\or \thaiThoThung\or \thaiThoThahan\or \thaiThoThong\or \thaiNoNu\or \thaiBoBaimai\or \thaiPoPla\or \thaiPhoPhung\or \thaiFoFa\or \thaiPhoPhan\or \thaiFoFan\or \thaiPhoSamphao\or \thaiMoMa\or \thaiYoYak\or \thaiRoRua\or \thaiLoLing\or \thaiWoWaen\or \thaiSoSala\or \thaiSoRusi\or \thaiSoSua\or \thaiHoHip\or \thaiLoChula\or \thaiOAng\or \thaiHoNokhuk\else\@ctrerr\fi} % \end{macrocode} % \end{macro} % % \subsubsection{\Lopt{thainumber} option} % % Not all Thai documents use Thai digits. So, we support this as an % option. If \Lopt{thainumber} option is supplied in the |\usepackage| % command, Thai digits will be used in all numberings. % % \begin{macrocode} \DeclareOption{thainumber}{ % \end{macrocode} % % We need to use the `|@|' character in macro implementations. So, make it % a normal charactor. % % \begin{macrocode} \catcode`\@=11 % \end{macrocode} % % Since |\renewcommand| will fail if the renewed command does not exist, % and we are redefining counters independently on the document class % being used, we had better check for the counters' existence before % redefining them. To do so, we define a helper macro for this. % % \begin{macrocode} \def\@overridecommand#1#2{\ifdefined#1\renewcommand{#1}{#2}\fi} % \end{macrocode} % % Then, set default page numbering to |thainum|, and redefine counters % to |thainum|. % % \begin{macrocode} \pagenumbering{thainum} \@overridecommand\theenumi{\@thainum\c@enumi} \@overridecommand\theenumii{\@thaialph\c@enumii} %\@overridecommand\theenumiii{\@roman\c@enumiii} %\@overridecommand\theenumiv{\@Alph\c@enumiv} \@ifundefined{thechapter}% {\@overridecommand\thesection{\@thainum\c@section}% \@overridecommand\thesubsection{\thesection.\@thainum\c@subsection}% \@overridecommand\thesubsubsection{\thesubsection.\@thainum\c@subsubsection}% \@overridecommand\theparagraph {\thesubsubsection.\@thainum\c@paragraph}% \@overridecommand\thesubparagraph {\theparagraph.\@thainum\c@subparagraph}% \@overridecommand\theequation{\@thainum\c@equation}% \@overridecommand\thetable{\@thainum\c@table}% \@overridecommand\thefigure{\@thainum\c@figure}}% {\@overridecommand\thepart{\@thainum\c@part}% \@overridecommand\thechapter{\@thainum\c@chapter}% \@overridecommand\thesection{\thechapter.\@thainum\c@section}% \@overridecommand\thesubsection{\thesection.\@thainum\c@subsection}% \@overridecommand\thesubsubsection{\thesubsection.\@thainum\c@subsubsection}% \@overridecommand\theparagraph {\thesubsubsection.\@thainum\c@paragraph}% \@overridecommand\thesubparagraph {\theparagraph.\@thainum\c@subparagraph}% \@overridecommand\theequation% {\ifnum \c@chapter>\z@ \thechapter.\fi \@thainum\c@equation}% \@overridecommand \thetable% {\ifnum \c@chapter>\z@ \thechapter.\fi \@thainum\c@table}% \@overridecommand \thefigure% {\ifnum \c@chapter>\z@ \thechapter.\fi \@thainum\c@figure}} \@overridecommand\thefootnote{\@thainum\c@footnote} % \end{macrocode} % % For theorems, we support all custom theorem counters at once by % redefining |\@thmcounter| macro. % % \begin{macrocode} \def\@thmcounter#1{\noexpand\thainum{#1}} % \end{macrocode} % % In book class, page numberings for frontmatter and mainmatter are % different. So, redefine them. % % \begin{macrocode} \@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}} }{} % \end{macrocode} % % Redefine Thai date using Thai digits. % % \begin{macrocode} \def\datethai{% \def\today{\@thainum\day\space \th@month\space % \thaiPhoPhan.\thaiSoSala.~\@thainum\th@year} } % \end{macrocode} % % And finish declaration of \Lopt{thainumber} option % % \begin{macrocode} \relax } % \end{macrocode} % % Always use thaialph as counter for appendix % % \begin{macrocode} \@ifclassloaded{book}{% \renewcommand\appendix{\par \setcounter{chapter}{0}% \setcounter{section}{0}% \gdef\@chapapp{\appendixname}% \gdef\thechapter{\@thaialph\c@chapter}} }{} \@ifclassloaded{report}{% \renewcommand\appendix{\par \setcounter{chapter}{0}% \setcounter{section}{0}% \gdef\@chapapp{\appendixname}% \gdef\thechapter{\@thaialph\c@chapter}} }{} \@ifclassloaded{article}{% \renewcommand\appendix{\par \setcounter{section}{0}% \setcounter{subsection}{0}% \gdef\thesection{\@thaialph\c@section}} }{} % \end{macrocode} % % \subsection{Miscellaneous} % % Initialize character codes for Thai % % \begin{macrocode} \catcode`\^^a1=11 \lccode`\^^a1=`\^^a1 \uccode`\^^a1=`\^^a1 \catcode`\^^a2=11 \lccode`\^^a2=`\^^a2 \uccode`\^^a2=`\^^a2 \catcode`\^^a3=11 \lccode`\^^a3=`\^^a3 \uccode`\^^a3=`\^^a3 \catcode`\^^a4=11 \lccode`\^^a4=`\^^a4 \uccode`\^^a4=`\^^a4 \catcode`\^^a5=11 \lccode`\^^a5=`\^^a5 \uccode`\^^a5=`\^^a5 \catcode`\^^a6=11 \lccode`\^^a6=`\^^a6 \uccode`\^^a6=`\^^a6 \catcode`\^^a7=11 \lccode`\^^a7=`\^^a7 \uccode`\^^a7=`\^^a7 \catcode`\^^a8=11 \lccode`\^^a8=`\^^a8 \uccode`\^^a8=`\^^a8 \catcode`\^^a9=11 \lccode`\^^a9=`\^^a9 \uccode`\^^a9=`\^^a9 \catcode`\^^aa=11 \lccode`\^^aa=`\^^aa \uccode`\^^aa=`\^^aa \catcode`\^^ab=11 \lccode`\^^ab=`\^^ab \uccode`\^^ab=`\^^ab \catcode`\^^ac=11 \lccode`\^^ac=`\^^ac \uccode`\^^ac=`\^^ac \catcode`\^^ad=11 \lccode`\^^ad=`\^^ad \uccode`\^^ad=`\^^ad \catcode`\^^ae=11 \lccode`\^^ae=`\^^ae \uccode`\^^ae=`\^^ae \catcode`\^^af=11 \lccode`\^^af=`\^^af \uccode`\^^af=`\^^af \catcode`\^^b0=11 \lccode`\^^b0=`\^^b0 \uccode`\^^b0=`\^^b0 \catcode`\^^b1=11 \lccode`\^^b1=`\^^b1 \uccode`\^^b1=`\^^b1 \catcode`\^^b2=11 \lccode`\^^b2=`\^^b2 \uccode`\^^b2=`\^^b2 \catcode`\^^b3=11 \lccode`\^^b3=`\^^b3 \uccode`\^^b3=`\^^b3 \catcode`\^^b4=11 \lccode`\^^b4=`\^^b4 \uccode`\^^b4=`\^^b4 \catcode`\^^b5=11 \lccode`\^^b5=`\^^b5 \uccode`\^^b5=`\^^b5 \catcode`\^^b6=11 \lccode`\^^b6=`\^^b6 \uccode`\^^b6=`\^^b6 \catcode`\^^b7=11 \lccode`\^^b7=`\^^b7 \uccode`\^^b7=`\^^b7 \catcode`\^^b8=11 \lccode`\^^b8=`\^^b8 \uccode`\^^b8=`\^^b8 \catcode`\^^b9=11 \lccode`\^^b9=`\^^b9 \uccode`\^^b9=`\^^b9 \catcode`\^^ba=11 \lccode`\^^ba=`\^^ba \uccode`\^^ba=`\^^ba \catcode`\^^bb=11 \lccode`\^^bb=`\^^bb \uccode`\^^bb=`\^^bb \catcode`\^^bc=11 \lccode`\^^bc=`\^^bc \uccode`\^^bc=`\^^bc \catcode`\^^bd=11 \lccode`\^^bd=`\^^bd \uccode`\^^bd=`\^^bd \catcode`\^^be=11 \lccode`\^^be=`\^^be \uccode`\^^be=`\^^be \catcode`\^^bf=11 \lccode`\^^bf=`\^^bf \uccode`\^^bf=`\^^bf \catcode`\^^c0=11 \lccode`\^^c0=`\^^c0 \uccode`\^^c0=`\^^c0 \catcode`\^^c1=11 \lccode`\^^c1=`\^^c1 \uccode`\^^c1=`\^^c1 \catcode`\^^c2=11 \lccode`\^^c2=`\^^c2 \uccode`\^^c2=`\^^c2 \catcode`\^^c3=11 \lccode`\^^c3=`\^^c3 \uccode`\^^c3=`\^^c3 \catcode`\^^c4=11 \lccode`\^^c4=`\^^c4 \uccode`\^^c4=`\^^c4 \catcode`\^^c5=11 \lccode`\^^c5=`\^^c5 \uccode`\^^c5=`\^^c5 \catcode`\^^c6=11 \lccode`\^^c6=`\^^c6 \uccode`\^^c6=`\^^c6 \catcode`\^^c7=11 \lccode`\^^c7=`\^^c7 \uccode`\^^c7=`\^^c7 \catcode`\^^c8=11 \lccode`\^^c8=`\^^c8 \uccode`\^^c8=`\^^c8 \catcode`\^^c9=11 \lccode`\^^c9=`\^^c9 \uccode`\^^c9=`\^^c9 \catcode`\^^ca=11 \lccode`\^^ca=`\^^ca \uccode`\^^ca=`\^^ca \catcode`\^^cb=11 \lccode`\^^cb=`\^^cb \uccode`\^^cb=`\^^cb \catcode`\^^cc=11 \lccode`\^^cc=`\^^cc \uccode`\^^cc=`\^^cc \catcode`\^^cd=11 \lccode`\^^cd=`\^^cd \uccode`\^^cd=`\^^cd \catcode`\^^ce=11 \lccode`\^^ce=`\^^ce \uccode`\^^ce=`\^^ce \catcode`\^^cf=11 \lccode`\^^cf=`\^^cf \uccode`\^^cf=`\^^cf \catcode`\^^d0=11 \lccode`\^^d0=`\^^d0 \uccode`\^^d0=`\^^d0 \catcode`\^^d1=11 \lccode`\^^d1=`\^^d1 \uccode`\^^d1=`\^^d1 \catcode`\^^d2=11 \lccode`\^^d2=`\^^d2 \uccode`\^^d2=`\^^d2 \catcode`\^^d3=11 \lccode`\^^d3=`\^^d3 \uccode`\^^d3=`\^^d3 \catcode`\^^d4=11 \lccode`\^^d4=`\^^d4 \uccode`\^^d4=`\^^d4 \catcode`\^^d5=11 \lccode`\^^d5=`\^^d5 \uccode`\^^d5=`\^^d5 \catcode`\^^d6=11 \lccode`\^^d6=`\^^d6 \uccode`\^^d6=`\^^d6 \catcode`\^^d7=11 \lccode`\^^d7=`\^^d7 \uccode`\^^d7=`\^^d7 \catcode`\^^d8=11 \lccode`\^^d8=`\^^d8 \uccode`\^^d8=`\^^d8 \catcode`\^^d9=11 \lccode`\^^d9=`\^^d9 \uccode`\^^d9=`\^^d9 \catcode`\^^da=11 \lccode`\^^da=`\^^da \uccode`\^^da=`\^^da \catcode`\^^df=12 \lccode`\^^df=`\^^df \uccode`\^^df=`\^^df \catcode`\^^e0=11 \lccode`\^^e0=`\^^e0 \uccode`\^^e0=`\^^e0 \catcode`\^^e1=11 \lccode`\^^e1=`\^^e1 \uccode`\^^e1=`\^^e1 \catcode`\^^e2=11 \lccode`\^^e2=`\^^e2 \uccode`\^^e2=`\^^e2 \catcode`\^^e3=11 \lccode`\^^e3=`\^^e3 \uccode`\^^e3=`\^^e3 \catcode`\^^e4=11 \lccode`\^^e4=`\^^e4 \uccode`\^^e4=`\^^e4 \catcode`\^^e5=11 \lccode`\^^e5=`\^^e5 \uccode`\^^e5=`\^^e5 \catcode`\^^e6=11 \lccode`\^^e6=`\^^e6 \uccode`\^^e6=`\^^e6 \catcode`\^^e7=11 \lccode`\^^e7=`\^^e7 \uccode`\^^e7=`\^^e7 \catcode`\^^e8=11 \lccode`\^^e8=`\^^e8 \uccode`\^^e8=`\^^e8 \catcode`\^^e9=11 \lccode`\^^e9=`\^^e9 \uccode`\^^e9=`\^^e9 \catcode`\^^ea=11 \lccode`\^^ea=`\^^ea \uccode`\^^ea=`\^^ea \catcode`\^^eb=11 \lccode`\^^eb=`\^^eb \uccode`\^^eb=`\^^eb \catcode`\^^ec=11 \lccode`\^^ec=`\^^ec \uccode`\^^ec=`\^^ec \catcode`\^^ed=11 \lccode`\^^ed=`\^^ed \uccode`\^^ed=`\^^ed \catcode`\^^ee=11 \lccode`\^^ee=`\^^ee \uccode`\^^ee=`\^^ee \catcode`\^^ef=12 \lccode`\^^ef=`\^^ef \uccode`\^^ef=`\^^ef \catcode`\^^f0=12 \lccode`\^^f0=`\^^f0 \uccode`\^^f0=`\^^f0 \catcode`\^^f1=12 \lccode`\^^f1=`\^^f1 \uccode`\^^f1=`\^^f1 \catcode`\^^f2=12 \lccode`\^^f2=`\^^f2 \uccode`\^^f2=`\^^f2 \catcode`\^^f3=12 \lccode`\^^f3=`\^^f3 \uccode`\^^f3=`\^^f3 \catcode`\^^f4=12 \lccode`\^^f4=`\^^f4 \uccode`\^^f4=`\^^f4 \catcode`\^^f5=12 \lccode`\^^f5=`\^^f5 \uccode`\^^f5=`\^^f5 \catcode`\^^f6=12 \lccode`\^^f6=`\^^f6 \uccode`\^^f6=`\^^f6 \catcode`\^^f7=12 \lccode`\^^f7=`\^^f7 \uccode`\^^f7=`\^^f7 \catcode`\^^f8=12 \lccode`\^^f8=`\^^f8 \uccode`\^^f8=`\^^f8 \catcode`\^^f9=12 \lccode`\^^f9=`\^^f9 \uccode`\^^f9=`\^^f9 \catcode`\^^fa=12 \lccode`\^^fa=`\^^fa \uccode`\^^fa=`\^^fa \catcode`\^^fb=12 \lccode`\^^fb=`\^^fb \uccode`\^^fb=`\^^fb \ldf@finish{\CurrentOption} % % \end{macrocode} % %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} %% \endinput