% This is the file MULEenc.sty of the CJK package % providing an interface to `cjk-enc.el' (a special Emacs mode) % % created by Werner Lemberg % % Version 4.8.5 (16-Oct-2021) % Copyright (C) 1994-2021 Werner Lemberg % % This program is free software; you can redistribute it and/or modify % it under the terms of the GNU General Public License as published by % the Free Software Foundation; either version 2 of the License, or % (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program in doc/COPYING; if not, write to the Free % Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, % MA 02110-1301 USA \makeatletter \endlinechar \m@ne \def\fileversion{4.8.5} \def\filedate{2021/10/16} \ProvidesPackage{MULEenc}[\filedate\space\fileversion] \NeedsTeXFormat{LaTeX2e}[1998/06/01] % to allow Latin encodings in verbatim environments we activate the % character ^^7f and define it as a multiplex character which executes % its first argument; it will also be used as a delimiter. \catcode "7F \active \def^^7f{ \ifx\protect \@typeset@protect \expandafter\mule@arg \else \noexpand ^^7f \fi} \def\mule@arg#1^^7f#2^^7f{ \mule@@arg #2^^7f#1^^7f#2^^7f} \def\mule@@arg#1^^7f{ \mule@ifbslash #1^^7f \expandafter\mule@@@arg \else \expandafter\mule@exec \fi} \def\mule@@@arg#1^^7f#2^^7f{ \csname mule@\string #1\endcsname{#2}} % the pseudo-if \mule@ifbslash tests whether its argument contains a % backslash with a character category code (this happens in verbatim % environments). We need to change the catcode of `\' locally to % achieve that. % % \mule@exec then swallows this backslash so we can call \csname (twice). % % All these weird constructions assure that we do not lose kerning between % characters---only macro expansion is allowed! \let\mule@@@ \@empty {\catcode`\|=\z@ \catcode`\\=12\relax |gdef|mule@ifbslash#1^^7f{ |mule@@ifbslash #1\^^7f} |gdef|mule@@ifbslash#1\#2^^7f{ |expandafter|expandafter|expandafter|ifx |expandafter|csname |string #2mule@@@|endcsname |@empty} |gdef|mule@exec#1^^7f\#2^^7f{ |expandafter|csname mule@#1|expandafter |endcsname |csname #2|endcsname} } % here come the definitions for the macros cjk-enc.el emits. % first some \let's to avoid problems in tabbing environments. \AtBeginDocument{ \let\mule@acute \' \let\mule@grave \` \let\mule@macron \= \let\mule@hacek \v} % and now the missing definitions for cjk-enc.el to represent Latin % encodings. % these definitions may be overridden with \ProvideTextCommandDefault % commands. \def\textonequarter{\ensuremath{\frac14}} \def\textonehalf{\ensuremath{\frac12}} \def\textthreequarters{\ensuremath{\frac34}} % LaTeX defines the following macros as \math... instead of \text..., % but we want that all commands work in text mode. \def\textonesuperior{\ensuremath{{^1}}} \def\texttwosuperior{\ensuremath{{^2}}} \def\textthreesuperior{\ensuremath{{^3}}} % the next macros are text versions of the corresponding math macros. \def\textlnot{\ensuremath{\lnot}} \def\textpm{\ensuremath{\pm}} \def\textmu{\ensuremath{\mu}} \def\texttimes{\ensuremath{\times}} \def\textdiv{\ensuremath{\div}} % this macro is not in the LaTeX 2e base package \def\textcommercialat{\char64} % the following macro is not defined in standard LaTeX2e. % % JIS X 0201: 0x7E \textoverscore (U+203E) % to make the multiplex macro work with \uppercase and \lowercase too, % numbers are used as parameters in the ^^7f macro. \def\mule@def#1{\expandafter\def\csname mule@\string #1\endcsname} % accents \mule@def{8}{\"} \mule@def{15}{\mule@macron} \mule@def{20}{\mule@acute} \mule@def{24}{\c} \mule@def{32}{\mule@grave} \mule@def{33}{\^} \mule@def{34}{\~} \mule@def{48}{\k} \mule@def{49}{\u} \mule@def{51}{\mule@hacek} \mule@def{52}{\.} \mule@def{53}{\r} \mule@def{55}{\H} % Vietnamese hook (\h; only defined in T5 encoding) and dot below accent \mule@def{71}{\d} \mule@def{73}{\h} % symbols \mule@def{1}{\textexclamdown} \mule@def{2}{\textcent} \mule@def{3}{\textsterling} \mule@def{4}{\textcurrency} \mule@def{5}{\textyen} \mule@def{6}{\textbrokenbar} \mule@def{7}{\S} \mule@def{9}{\copyright} \mule@def{10}{\textordfeminine} \mule@def{11}{\guillemotleft} \mule@def{12}{\textlnot} \mule@def{14}{\textregistered} \mule@def{16}{\textdegree} \mule@def{17}{\textpm} \mule@def{18}{\texttwosuperior} \mule@def{19}{\textthreesuperior} \mule@def{21}{\textmu} \mule@def{22}{\P} \mule@def{23}{\textperiodcentered} \mule@def{25}{\textonesuperior} \mule@def{26}{\textordmasculine} \mule@def{27}{\guillemotright} \mule@def{28}{\textonequarter} \mule@def{29}{\textonehalf} \mule@def{30}{\textthreequarters} \mule@def{31}{\textquestiondown} \mule@def{36}{\textcommercialat} \mule@def{37}{\textquotedbl} \mule@def{38}{\texttimes} \mule@def{39}{\textdollar} \mule@def{40}{\textquoteright} \mule@def{41}{\textless} \mule@def{42}{\textgreater} \mule@def{43}{\textasciicircum} \mule@def{44}{\textunderscore} \mule@def{45}{\textdiv} \mule@def{46}{\textquoteleft} \mule@def{47}{\textbraceleft} \mule@def{50}{\textbar} \mule@def{54}{\textbraceright} \mule@def{56}{\textoverscore} \mule@def{99}{\nobreakspace} \mule@def{35}{\textnumero} % Cyrillic Number Sign % letters \let\TEXTMALTESEH \textmalteseH \def\I{I} % uppercase form of \i \let\TEXTTSTROKE \textTstroke \mule@def{59}{\textkra} % commands \mule@def{0}{\@firstofone} % for commands as arguments which exist % in both uppercase and lowercase forms % like \AA and \aa \mule@def{64}{\CJKspace\@gobble} \mule@def{65}{\CJKnospace\@gobble} \mule@def{66}{\CJKenc{JIS}\@gobble} \mule@def{67}{\CJKenc{GB}\@gobble} \mule@def{68}{\CJKenc{Bg5}\@gobble} \mule@def{69}{\CJKenc{KS}\@gobble} \mule@def{70}{\CJKenc{SJIS}\@gobble} % in previous versions we have used ^^a0 for calling \CJKchar, but to % support GBK and Big 5+ encodings which both need this slot we use the % ^^7f interface also. \mule@def{72}{\mule@@@@arg} \def\mule@@@@arg#1^^7f#2^^7f#3^^7f{ \uppercase{\CJKchar[#1]{#2}{#3}}} % Thai support. We need the many \bgroup and \egroup commands to make it % work with ulem.sty. \mule@def{57}{\bgroup\fontencoding{C90}\selectfont \bgroup\bgroup\@gobble} % begin Thai \mule@def{58}{\egroup \egroup\egroup\@gobble} % end Thai \mule@def{60}{\mule@char} % Thai diacritic \mule@def{61}{\Thaibreak\@gobble} % Thai word break \mule@def{62}{\nobreak\Thaiglue\nobreak\mule@char} % Thai base character \mule@def{63}{\mule@ignorespaces} % Thai EOL \def\mule@char#1{\char #1 } \def\mule@ignorespaces#1{\ignorespaces} \newcommand{\Thaiglue}{\hskip \z@ \@plus .03\baselineskip} \newcommand{\Thaibreak}{\hskip \z@} \newcommand{\Thaispace}{\mule@def{63}{}} \newcommand{\Thainospace}{\mule@def{63}{\mule@ignorespaces}} % preprocessed mode now uses the ^^7f interface for CJK characters also % to make it coexist with normal mode. % % the \@gobble macro is used to swallow the first element in \CJK@; % this is either \CJK@disableMakeUppercase or \relax if not needed. \def\mule@@def#1{ \expandafter\def\csname mule@\string #1\endcsname##1{ \expandafter\expandafter\expandafter\@gobble \csname CJK@\number `#1\endcsname{##1} \CJK@ignorespaces}} \mule@@def{^^81} \mule@@def{^^82} \mule@@def{^^83} \mule@@def{^^84} \mule@@def{^^85} \mule@@def{^^86} \mule@@def{^^87} \mule@@def{^^88} \mule@@def{^^89} \mule@@def{^^8a} \mule@@def{^^8b} \mule@@def{^^8c} \mule@@def{^^8d} \mule@@def{^^8e} \mule@@def{^^8f} \mule@@def{^^90} \mule@@def{^^91} \mule@@def{^^92} \mule@@def{^^93} \mule@@def{^^94} \mule@@def{^^95} \mule@@def{^^96} \mule@@def{^^97} \mule@@def{^^98} \mule@@def{^^99} \mule@@def{^^9a} \mule@@def{^^9b} \mule@@def{^^9c} \mule@@def{^^9d} \mule@@def{^^9e} \mule@@def{^^9f} \mule@@def{^^a0} \mule@@def{^^a1} \mule@@def{^^a2} \mule@@def{^^a3} \mule@@def{^^a4} \mule@@def{^^a5} \mule@@def{^^a6} \mule@@def{^^a7} \mule@@def{^^a8} \mule@@def{^^a9} \mule@@def{^^aa} \mule@@def{^^ab} \mule@@def{^^ac} \mule@@def{^^ad} \mule@@def{^^ae} \mule@@def{^^af} \mule@@def{^^b0} \mule@@def{^^b1} \mule@@def{^^b2} \mule@@def{^^b3} \mule@@def{^^b4} \mule@@def{^^b5} \mule@@def{^^b6} \mule@@def{^^b7} \mule@@def{^^b8} \mule@@def{^^b9} \mule@@def{^^ba} \mule@@def{^^bb} \mule@@def{^^bc} \mule@@def{^^bd} \mule@@def{^^be} \mule@@def{^^bf} \mule@@def{^^c0} \mule@@def{^^c1} \mule@@def{^^c2} \mule@@def{^^c3} \mule@@def{^^c4} \mule@@def{^^c5} \mule@@def{^^c6} \mule@@def{^^c7} \mule@@def{^^c8} \mule@@def{^^c9} \mule@@def{^^ca} \mule@@def{^^cb} \mule@@def{^^cc} \mule@@def{^^cd} \mule@@def{^^ce} \mule@@def{^^cf} \mule@@def{^^d0} \mule@@def{^^d1} \mule@@def{^^d2} \mule@@def{^^d3} \mule@@def{^^d4} \mule@@def{^^d5} \mule@@def{^^d6} \mule@@def{^^d7} \mule@@def{^^d8} \mule@@def{^^d9} \mule@@def{^^da} \mule@@def{^^db} \mule@@def{^^dc} \mule@@def{^^dd} \mule@@def{^^de} \mule@@def{^^df} \mule@@def{^^e0} \mule@@def{^^e1} \mule@@def{^^e2} \mule@@def{^^e3} \mule@@def{^^e4} \mule@@def{^^e5} \mule@@def{^^e6} \mule@@def{^^e7} \mule@@def{^^e8} \mule@@def{^^e9} \mule@@def{^^ea} \mule@@def{^^eb} \mule@@def{^^ec} \mule@@def{^^ed} \mule@@def{^^ee} \mule@@def{^^ef} \mule@@def{^^f0} \mule@@def{^^f1} \mule@@def{^^f2} \mule@@def{^^f3} \mule@@def{^^f4} \mule@@def{^^f5} \mule@@def{^^f6} \mule@@def{^^f7} \mule@@def{^^f8} \mule@@def{^^f9} \mule@@def{^^fa} \mule@@def{^^fb} \mule@@def{^^fc} \mule@@def{^^fd} \mule@@def{^^fe} % if the `verbatim' package is loaded it is possible to improve the output % automatically, namely, to avoid breaking of overfull lines in a % verbatim environment. The following command will install a hook to % suppress insertion of glue between Thai glyphs. CJK.sty will extend % it for CJK glyphs. % \def\mule@verbatim{ \addto@hook{\every@verbatim}{ \renewcommand{\Thaiglue}{} \mule@def{61}{}}} \ifx\CJK@verbatim \@undefined \def\CJK@verbatim{} \fi \def\CJKverbatim{ \mule@verbatim \CJK@verbatim} % here comes our special include command which will load .cjk % instead of .tex \def\CJKinclude#1{ \relax \ifnum\@auxout = \@partaux \@latex@error{\string\CJKinclude\space cannot be nested} \@eha \else \CJK@include#1 % \fi } \def\CJK@include#1 { \clearpage \if@filesw \immediate\write\@mainaux{\string\@input{#1.aux}} \fi \@tempswatrue \if@partsw \@tempswafalse \edef\reserved@b{#1} \@for\reserved@a:=\@partlist\do {\ifx\reserved@a \reserved@b \@tempswatrue \fi } \fi \if@tempswa \let\@auxout\@partaux \if@filesw \immediate\openout\@partaux #1.aux \immediate\write\@partaux{\relax} \fi \@input@{#1.cjk} \clearpage \@writeckpt{#1} \if@filesw \immediate\closeout\@partaux \fi \else \deadcycles\z@ \@nameuse{cp@#1} \fi \let\@auxout\@mainaux } % the same for the bibliography \def\CJKbibliography#1{ \if@filesw \immediate\write\@auxout{\string\bibdata{#1-cjk}}% \fi \@input@{\jobname.bbl} } % here our special input command -- cjk-enc.el will scan files included with % \CJKinput, but not with \input. % % We only want the syntax form of \input with braces around the parameter. % If no file name extension is given, `cjk' is used. \def\CJKinput#1{ \filename@parse{#1} \ifx\filename@ext \relax \def\filename@ext{cjk} \fi \InputIfFileExists{\filename@area\filename@base.\filename@ext} {} {\edef\reserved@a{ \noexpand\@missingfileerror {\filename@area\filename@base} {\filename@ext}} \reserved@a}} \endlinechar `\^^M \makeatother \endinput