diff options
author | Karl Berry <karl@freefriends.org> | 2009-07-20 00:40:16 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-07-20 00:40:16 +0000 |
commit | 05ce59d3f94be6128b7840f17ce476c614356551 (patch) | |
tree | 4be64fa7c50a698a552dbbd826cc488e729c0e51 /Master/texmf-dist/tex/xelatex | |
parent | befa55daf259a7f10fdcfe9bc77813d9d0c46abe (diff) |
new xelatex package xecjk (5jul09)
git-svn-id: svn://tug.org/texlive/trunk@14329 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | 931 |
1 files changed, 931 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty new file mode 100644 index 00000000000..6ad85be95c9 --- /dev/null +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty @@ -0,0 +1,931 @@ +%% +%% This is file `xeCJK.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xeCJK.dtx (with options: `xeCJK') +%% +%% Version 2.3.0 (30-June-2009) +%% +%% Copyright (C) Wenchang Sun <sunwch@hotmail.com> +%% +%% This file 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. +%% +\def\fileversion{2.3.0} +\def\filedate{2009/06/30} +\ProvidesPackage{xeCJK}[\filedate\space\fileversion] +\RequirePackage{ifxetex} +\RequireXeTeX +\expandafter\def\csname ver@CJK.sty\endcsname{2020/01/01} +\RequirePackage{fontspec} + +\newif\ifxeCJK@SlantFont@ +\xeCJK@SlantFont@false + +\newif\ifxeCJK@BoldFont@ +\xeCJK@BoldFont@false + +\newif\ifxeCJK@num +\xeCJK@numfalse + +\newif\ifxeCJK@indisplay +\xeCJK@indisplayfalse + +\newif\ifxeCJK@addspaces +\xeCJK@addspacesfalse + +\newif\ifxeCJK@checksingle +\xeCJK@checksinglefalse + +\DeclareOption{boldfont}{\xeCJK@BoldFont@true} +\DeclareOption{BoldFont}{\ExecuteOptions{boldfont}} +\DeclareOption{slantfont}{\xeCJK@SlantFont@true} +\DeclareOption{SlantFont}{\ExecuteOptions{slantfont}} +\DeclareOption{CJKnumber}{\xeCJK@numtrue} +\DeclareOption{CJKnormalspaces}{\xeCJK@addspacesfalse} +\DeclareOption{CJKaddspaces}{\xeCJK@addspacestrue} +\DeclareOption{CJKtextspaces}{} +\DeclareOption{CJKmathspaces}{} +\DeclareOption{CJKsetspaces}{} +\DeclareOption{CJKnospaces}{} +\DeclareOption{CJKchecksingle}{\xeCJK@checksingletrue} +\ExecuteOptions{CJKaddspaces}\relax +\ProcessOptions\relax +\endlinechar \m@ne +\XeTeXinterchartokenstate=1\relax + +\def\xeCJKsetcharclass#1#2#3{ + \@tempcnta=#1 + \loop + \XeTeXcharclass \@tempcnta #3\relax + \catcode\@tempcnta=11\relax + \advance\@tempcnta 1\relax + \ifnum\the\@tempcnta<#2 \repeat + \xeCJK@setpunctcharclass} + +\def\xeCJK@prePunct#1#2{\xeCJK@setPunct{2}{#1}{#2}} +\def\xeCJK@postPunct#1#2{\xeCJK@setPunct{3}{#1}{#2}} + +\def\xeCJK@setPunct#1#2#3{ + \def\xeCJK@class{#1} + \@tempcnta "#2\relax + \multiply\@tempcnta 256\relax + \xeCJK@setPunct@#3,,} + +\def\xeCJK@setPunct@#1,{ + \edef\xeCJK@temp{#1}% + \ifx\xeCJK@temp\@empty + \else + \@tempcntb "#1\relax + \advance\@tempcntb\@tempcnta\relax + \XeTeXcharclass \@tempcntb=\xeCJK@class\relax + \def\xeCJK@temp{\xeCJK@setPunct@} + \fi + \xeCJK@temp} + +\def\xeCJK@setpunctcharclass{ + \xeCJK@prePunct{20}{18,1C} + \xeCJK@postPunct{20}{19,1D,14,26} + \xeCJK@postPunct{25}{00} + \xeCJK@prePunct{30}{08,0A,0C,0E,10,12,14,16,18,1A,1D,1F,36} + + \xeCJK@postPunct{30}{01,02,05,06,09,0B,0D,0F,11,15,17,19,1B,1E, + 41,43,45,47,49,63,83,85,87,8E, + 9B,9C,9D,9E,A1,A3,A5,A7,A9,C3,E3,E5,E7,EE,F5,F6,FB,FC,FD,FE} + \xeCJK@prePunct {FE}{59,5B,5D,5F,60,69,6B} + \xeCJK@postPunct{FE}{50,51,52,54,55,56,57,5A,5C,5E,6A} + \xeCJK@prePunct {FF}{03,04,08,20,3B,5B,E0,E1,E5,E6} + \xeCJK@postPunct{FF}{01,05,09,0C,0E,1A,1B,1F,3D,5D, + 61,63,64,65,67,68,69,6A,6B,6C,6D,6E,6F,70,9E,9F} + + \xeCJK@setPunct{4}{0}{28,2D,5B,60,7B} + \xeCJK@setPunct{5}{0}{21,22,25,27,29,2C,2E,3A,3B,3F,5D,7D}} + +\xeCJKsetcharclass{"2000}{"FFFF}{1} + +\XeTeXinterchartoks 0 255 {\xeCJK@@cclv} +\XeTeXinterchartoks 0 1 {\xeCJK@@i\xeCJK@char} +\XeTeXinterchartoks 4 1 {\xeCJK@char} +\XeTeXinterchartoks 5 1 {\xeCJK@v@i\xeCJK@char} +\XeTeXinterchartoks 255 1 {\xeCJK@checksingle} + +\XeTeXinterchartoks 0 2 {\xeCJK@prepunctchar} +\XeTeXinterchartoks 4 2 {\xeCJK@prepunctchar} +\XeTeXinterchartoks 5 2 {\xeCJK@prepunctchar} +\XeTeXinterchartoks 255 2 {\xeCJK@prepunctchar} + +\XeTeXinterchartoks 0 3 {\xeCJK@postpunctchar} +\XeTeXinterchartoks 4 3 {\xeCJK@postpunctchar} +\XeTeXinterchartoks 5 3 {\xeCJK@postpunctchar} +\XeTeXinterchartoks 255 3 {\xeCJK@postpunctchar} + +\XeTeXinterchartoks 255 0 {\xeCJK@cclv@} +\XeTeXinterchartoks 255 4 {\xeCJK@cclv@iv} + +\def\CJKglue{\hskip \z@ \@plus .08\baselineskip} +\def\CJK@nobreakglue{\nobreak\CJKglue\nobreak} + +\edef\xeCJK@CJKkern{\kern -1sp\kern 1sp} +\edef\xeCJK@prepunctkern{\kern -2sp\kern 2sp} +\edef\xeCJK@postpunctkern{\kern -3sp\kern 3sp} +\edef\xeCJK@zerokern{\kern -4sp\kern 4sp} + +\newif\if@xeCJK@inmath +\@xeCJK@inmathfalse + +\newif\if@xeCJK +\def\xeCJK@ignorespaces{ + \futurelet\xeCJK@nexttoken\xeCJK@checknext} + +\def\xeCJK@n@checknext{ + \ifx\xeCJK@nexttoken\@sptoken + \expandafter\xeCJK@@checknext + \fi} + +{ + \def\:{\xeCJK@@checknext} + \global\expandafter\def\: {\futurelet\@let@token\xeCJK@@@checknext} +} + +\def\CJK@stop{\CJK@stop} + +\def\xeCJK@@@checknext{ + \ifcat L\noexpand\@let@token + \else + \let\xeCJK@nexttoken\relax + \CJKecglue + \fi} + +\long\def\xeCJK@gobble#1\CJK@stop{} + + +\def\xeCJK@notchecksingle{ + \xeCJK@cclv@i + \xeCJK@char} + +\def\xeCJK@z@checksingle#1{ + \def\xeCJK@setcurrentchar@i{ + \xeCJK@cclv@i + \xeCJK@char{#1}} + \def\xeCJK@setcurrentnobreakchar@i{ + \xeCJK@char{#1}} + \futurelet\@let@token\xeCJK@@checksingle} + +\def\xeCJK@@checksingle{ + \expandafter\futurelet + \expandafter\xeCJK@tempb + \expandafter\xeCJK@gobble\meaning\@let@token\CJK@stop + \if t\xeCJK@tempb + \expandafter\xeCJK@@@checksingle + \else + \expandafter\xeCJK@setcurrentchar@i + \fi} + +\def\xeCJK@@@checksingle#1{ + \def\xeCJK@setcurrentchar@ii{ + \xeCJK@setcurrentchar@i #1} + \def\xeCJK@setcurrentnobreakchar@ii{ + \xeCJK@setcurrentnobreakchar@i #1} + \futurelet\@let@token\xeCJK@@@@checksingle} + +\def\xeCJK@@@@checksingle{ + \ifx\@let@token\@sptoken + \expandafter\xeCJK@checkpar + \else + \expandafter\xeCJK@setcurrentchar@ii + \fi} + +\def\xeCJK@checkpar{ + \@ifnextchar\par{\xeCJK@setcurrentnobreakchar@ii}{\xeCJK@setcurrentchar@ii}} + +\def\xeCJK@doaftermath{ + \futurelet\xeCJK@nexttoken\xeCJK@aftermath} + +\def\xeCJK@z@cclv{\futurelet\xeCJK@nexttoken\xeCJK@zz@cclv} + +\def\xeCJK@zz@cclv{ + \ifx\xeCJK@nexttoken\@sptoken + \expandafter\xeCJK@zzz@cclv + \else + {\xeCJK@zerokern} + \fi} + +{ + \def\:{\xeCJK@zzz@cclv} + \global\expandafter\def\: {\futurelet\@let@token\xeCJK@zzzz@cclv} +} + +\def\xeCJK@zzzz@cclv{ + \ifcat L\noexpand\@let@token + \expandafter\xeCJK@zzzzz@cclv + \else + \xeCJK@space + \fi} + +\def\xeCJK@zzzzz@cclv#1{ + \ifnum`#1>"FF\relax + \CJKecglue + \else + \xeCJK@space + \fi + #1} + +\def\xeCJK@space{ } + +\def\xeCJK@z@checknext{ + \ifx\xeCJK@nexttoken\@sptoken + \expandafter\xeCJK@@checknext + \else + \ifx $\xeCJK@nexttoken + \CJKecglue + \fi + \fi} + +\def\CJKaddspaces{ + \let\xeCJK@@cclv\xeCJK@z@cclv + \let\CJKecglue\CJK@ecglue + \let\xeCJK@@i\CJKecglue + \let\xeCJK@v@i\CJKecglue + + \def\xeCJK@cclv@{ + \ifnum\lastkern=1\relax + \CJKecglue + \fi} + \let\xeCJK@cclv@iv\xeCJK@cclv@ + + \def\xeCJK@cclv@i{{ + \ifcase\lastkern + \hskip 0pt + \or %1 + \CJKglue + \or %2 + \xeCJK@ULspecials + \or %3 + \xeCJK@ULspecials + \or %4 + \CJKecglue + \fi}} + + \everymath{\ifxeCJK@indisplay\else\aftergroup\xeCJK@doaftermath\fi} + \everydisplay{\xeCJK@indisplaytrue} + \let\xeCJK@checknext\xeCJK@z@checknext + \let\xeCJK@aftermath\xeCJK@zz@cclv} + +\def\CJKnormalspaces{ + \let\xeCJK@@cclv\relax + \let\xeCJK@@i\relax + \let\xeCJK@v@i\relax + \let\xeCJK@checknext\xeCJK@n@checknext + \def\CJKecglue{ } + + \def\xeCJK@cclv@{ + \ifodd\lastkern + \xeCJK@@glue + \fi} + \let\xeCJK@cclv@iv\xeCJK@cclv@ + + \def\xeCJK@cclv@i{{ + \ifcase\lastkern + \hskip 0pt + \or %1 + \CJKglue + \or %2 + \xeCJK@ULspecials + \or %3 + \xeCJK@ULspecials + \fi}} + + \def\xeCJK@@glue{ + \ifx\xeCJK@nexttoken\@sptoken + { } + \fi + \let\xeCJK@nexttoken\relax} + \everymath{} + \everydisplay{}} + +\def\xeCJK@setspacemode{ + \ifxeCJK@addspaces + \CJKaddspaces + \else + \CJKnormalspaces + \fi + \ifxeCJK@checksingle + \let\xeCJK@checksingle\xeCJK@z@checksingle + \else + \let\xeCJK@checksingle\xeCJK@notchecksingle + \fi} + +\def\CJK@ecglue{ } + +\def\xeCJKsetecglue#1{ + \ifxeCJK@addspaces + \def\CJK@ecglue{#1} + \let\CJKecglue\CJK@ecglue + \let\xeCJK@@i\CJKecglue + \let\xeCJK@v@i\CJKecglue + \fi} +\let\CJKsetecglue\xeCJKsetecglue +\CJKaddspaces + +\AtBeginDocument{ + \xeCJK@setspacemode + \ifcsname UL@hook\endcsname + \addto@hook\UL@hook{ + \let\xeCJK@unskip\xeCJK@UL@unskip + \let\xeCJK@ULspecials\xeCJK@UL@punctgroup} + \fi} +\DeclareRobustCommand{\xeCJK@char}[1]{ + {\XeTeXinterchartokenstate=0 + \CJKsymbol{#1} + \xeCJK@CJKkern} + \xeCJK@ignorespaces} +\DeclareRobustCommand{\xeCJK@prepunctchar}[1]{ + {\xeCJK@punctrule{#1}{l} + \@xeCJKfalse + \ifnum\lastkern>1\relax + \ifnum\lastkern<4\relax + \unkern + \unkern + \ifnum\xeCJK@punctstyle>0\relax + \@xeCJKtrue + \fi + \fi + \fi + \if@xeCJK + \xeCJK@unskip + \xeCJK@setkern{\@xeCJK@lastpunct}{#1} + \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern\@xeCJK@lastpunct#1\endcsname + \xeCJKpunctnobreak + \else + \xeCJK@ULspecials + \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @lglue@#1\endcsname + plus 0.1em minus 0.1 em + \fi + + \global\edef\@xeCJK@lastpunct{#1} + \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @lrule@#1\endcsname depth \z@ height \z@ + + \XeTeXinterchartokenstate=0 + \CJKpunctsymbol{#1} + + \nobreak + \gdef\xeCJK@lastcharclass{2} + \xeCJK@prepunctkern} + \ignorespaces} +\DeclareRobustCommand{\xeCJK@postpunctchar}[1]{ + {\xeCJK@punctrule{#1}{r} + \@xeCJKfalse + \ifnum\lastkern>1\relax + \ifnum\lastkern<4\relax + \unkern + \unkern + \@xeCJKtrue + \fi + \fi + \if@xeCJK + \xeCJK@unskip + \xeCJK@setkern{\@xeCJK@lastpunct}{#1} + \kern \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @kern\@xeCJK@lastpunct#1\endcsname + \nobreak + \else + \xeCJK@ULspecials + \ifcsname xeCJK@specialpunct#1\endcsname + \CJKglue % breakable + \else + \nobreak + \fi + \fi + \global\edef\@xeCJK@lastpunct{#1} + + \XeTeXinterchartokenstate=0 + \CJKpunctsymbol{#1} + + \vrule width \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @rrule@#1\endcsname depth \z@ height \z@ + + \hskip \csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@#1\endcsname + plus 0.1em minus 0.1 em + + \gdef\xeCJK@lastcharclass{3} + \xeCJK@postpunctkern} + \xeCJK@ignorespaces} + +\let\xeCJK@unskip\unskip +\def\xeCJK@UL@unskip{ + \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @rglue@\@xeCJK@lastpunct\endcsname + \hskip -\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @rglue@\@xeCJK@lastpunct\endcsname\relax + \fi} +\def\xeCJKallowbreakbetweenpuncts{ + \def\xeCJKpunctnobreak{ + \ifnum\xeCJK@lastcharclass=3 + \hskip 0pt + \fi}} + +\def\xeCJKnobreakbetweenpuncts{ + \let\xeCJKpunctnobreak\nobreak} +\xeCJKnobreakbetweenpuncts +\newcount\xeCJK@cnta +\newcount\xeCJK@cntb +\newcount\xeCJK@cntc +\newcount\xeCJK@cntd +\newcount\xeCJK@cnte +\newdimen\xeCJK@dima +\newif\ifxeCJK@dokerning + +\def\xeCJK@punctrule#1#2{ + \ifcsname xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname + \global\edef\xeCJK@bboxname{ + \csname xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname} + \else + \xeCJK@getbboxname + \global\expandafter\edef\csname + xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname{\xeCJK@bboxname} + \fi + \ifcsname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname + \else + {\xeCJK@setfont + \xeCJK@setpunctbounds{#1}} + \fi + \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2rule@#1\endcsname + \else + \xeCJK@dokerningtrue + \ifnum\xeCJK@punctstyle=\xeCJK@ps@plain\relax + \xeCJK@dokerningfalse + \else + \ifcsname xeCJK@specialpunct#1\endcsname + \xeCJK@dokerningfalse + \else + \ifcsname xeCJK@\xeCJK@bboxname @#2space@#1\endcsname + \else + \typeout{....Something is wrong with ...xeCJK@\xeCJK@bboxname @#2space@.....} + \xeCJK@dokerningfalse + \fi + \fi + \fi + \ifxeCJK@dokerning + \xeCJK@cnta=\csname xeCJK@\xeCJK@bboxname @#2space@#1\endcsname\relax + \xeCJK@cntc=\xeCJK@cnta + \ifcase\xeCJK@punctstyle + % hangmobanjiao + \or % quanjiao + \or % banjiao + \advance\xeCJK@cntc -50\relax + \or % kaiming + \ifcsname xeCJK@kaiming#1\endcsname + \else + \advance\xeCJK@cntc -50\relax + \fi + \or %CCT + \advance\xeCJK@cntc -20\relax + \fi + \xeCJK@cntd=\xeCJK@cntc + \ifnum\xeCJK@cntc<0\relax + \xeCJK@cntc=0\relax + \fi + \else + \xeCJK@cnta=0\relax + \xeCJK@cntc=0\relax + \xeCJK@cntd=0\relax + \fi + \xeCJK@numtodim{\xeCJK@cnta} + \global\expandafter\edef\csname + xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2rule@#1\endcsname{ + -\xeCJK@temp em} + \xeCJK@numtodim{\xeCJK@cntc} + \global\expandafter\edef\csname + xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2glue@#1\endcsname{ + \xeCJK@temp em} + \global\expandafter\edef\csname + xeCJK\xeCJK@punctstyle\xeCJK@bboxname @#2oglue@#1\endcsname{ + \the\xeCJK@cntd} + \fi} + +\def\xeCJK@numtodim#1{ + \xeCJK@cnte=#1\relax + \ifnum\the\xeCJK@cnte<100\relax + \def\xeCJK@temp{0} + \else + \advance\xeCJK@cnte -100\relax + \def\xeCJK@temp{1} + \fi + \ifnum\the\xeCJK@cnte<10 + \edef\xeCJK@temp{\xeCJK@temp.0\the\xeCJK@cnte} + \else + \edef\xeCJK@temp{\xeCJK@temp.\the\xeCJK@cnte} + \fi} + +\def\xeCJK@getbboxname{ + {\csname xeCJK@font@\xeCJK@family\endcsname + \get@external@font + \global\let\xeCJK@tempx\external@font} + \expandafter\xeCJK@@getbboxname\xeCJK@tempx\relax + \global\expandafter\edef\csname + xeCJK@bbox\xeCJK@family/\f@series/\f@shape\endcsname{\xeCJK@bboxname}} + +\def\xeCJK@@getbboxname"#1/#2"#3\relax{ + \edef\xeCJK@temp{\zap@space #1 \@empty} + \edef\xeCJK@temp{\lowercase{\gdef\noexpand\xeCJK@bboxname{\xeCJK@temp}}} + \xeCJK@temp} + +\expandafter\def\csname xeCJK@kaiming。\endcsname{} +\expandafter\def\csname xeCJK@kaiming?\endcsname{} +\expandafter\def\csname xeCJK@kaiming!\endcsname{} +\expandafter\def\csname xeCJK@specialpunct—\endcsname{}% U+2014 +\expandafter\def\csname xeCJK@specialpunct─\endcsname{}% U+2500 +\expandafter\def\csname xeCJK@specialpunct…\endcsname{} +\def\xeCJK@setkern#1#2{ + \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname + \else + \xeCJK@cnta=0\relax + \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @roglue@#1\endcsname + \advance\xeCJK@cnta\csname + xeCJK\xeCJK@punctstyle\xeCJK@bboxname @roglue@#1\endcsname + \fi + \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @loglue@#2\endcsname + \advance\xeCJK@cnta\csname xeCJK\xeCJK@punctstyle\xeCJK@bboxname + @loglue@#2\endcsname + \fi + \relax + \ifcase\xeCJK@punctstyle + % hangmobanjiao + \or % quanjiao + \advance\xeCJK@cnta -50\relax + \or % banjiao + \or % kaiming + \ifcsname xeCJK@kaiming#1\endcsname + \ifcsname xeCJK\xeCJK@punctstyle\xeCJK@bboxname @roglue@#2\endcsname + \advance\xeCJK@cnta -50\relax + \fi + \fi + \fi + \ifnum\xeCJK@cnta<0\relax + \xeCJK@cnta=0\relax + \fi + \xeCJK@numtodim{\xeCJK@cnta} + \global\expandafter\edef\csname + xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{ + \xeCJK@temp em} + \fi} + +\def\xeCJKsetkern#1#2#3{ + \xeCJK@getbboxname + \global\expandafter\edef\csname + xeCJK\xeCJK@punctstyle\xeCJK@bboxname @kern#1#2\endcsname{#3}} + +\def\punctstyle#1{ + \ifcsname xeCJK@ps@#1\endcsname + \edef\xeCJK@punctstyle{\csname xeCJK@ps@#1\endcsname} + \ifnum\xeCJK@punctstyle=\xeCJK@ps@plain\relax + \xeCJKallowbreakbetweenpuncts + \fi + \else + \typeout{Warning: Punctstyle #1\space is not defined.} + \fi} + +\def\xeCJK@ps@hangmobanjiao{0} +\def\xeCJK@ps@marginkerning{0} +\def\xeCJK@ps@quanjiao{1} +\def\xeCJK@ps@fullwidth{1} +\def\xeCJK@ps@banjiao{2} +\def\xeCJK@ps@halfwidth{2} +\def\xeCJK@ps@kaiming{3} +\def\xeCJK@ps@mixedwidth{3} +\def\xeCJK@ps@CCT{4} +\def\xeCJK@ps@plain{5} +\punctstyle{quanjiao} + +\let\@afterindentfalse\relax + +\def\xeCJKplainchr{\punctstyle{plain}} + +\def\xeCJK@sidespace{10} + +\def\xeCJK@getglyphbounds#1{ + \xeCJK@cnta=\number\XeTeXglyphbounds #1 \xeCJK@gid + \xeCJK@dima 1em\relax + \xeCJK@cntb=\number\xeCJK@dima + \multiply\xeCJK@cnta 100\relax + \divide\xeCJK@cnta\xeCJK@cntb + \advance\xeCJK@cnta -15\relax + \edef\xeCJK@temp{\the\xeCJK@cnta} + \ifnum\xeCJK@temp<0\relax + \def\xeCJK@temp{0} + \fi} + +\def\xeCJK@setpunctbounds#1{ + \edef\xeCJK@gid{\the\XeTeXcharglyph`#1} + \xeCJK@getglyphbounds{1} + \expandafter\xdef\csname xeCJK@\xeCJK@bboxname @lspace@#1\endcsname{ + \xeCJK@temp} + \xeCJK@getglyphbounds{3} + \expandafter\xdef\csname xeCJK@\xeCJK@bboxname @rspace@#1\endcsname{ + \xeCJK@temp} + \ifcsname xeCJK@specialpunct#1\endcsname + \ifx#1… + \else + \xeCJK@cnta=\number\XeTeXglyphbounds 1 \xeCJK@gid + \advance\xeCJK@cnta\number\XeTeXglyphbounds 3 \xeCJK@gid + \advance\xeCJK@cnta 1000\relax + \divide\xeCJK@cnta 6554\relax + \ifnum\xeCJK@cnta>9 + \edef\xeCJK@temp{-0.\the\xeCJK@cnta em} + \else + \ifnum\xeCJK@cnta>1 + \edef\xeCJK@temp{-0.0\the\xeCJK@cnta em} + \else + \edef\xeCJK@temp{-0.01 em} + \fi + \fi + \xeCJK@cnta=0 + \loop + \global\expandafter\edef\csname xeCJK\the\xeCJK@cnta\xeCJK@bboxname + @kern#1#1\endcsname{\xeCJK@temp} + \advance \xeCJK@cnta 1\relax + \ifnum\xeCJK@cnta<6\repeat + \fi + \fi} + +\def\CJKsymbol#1{{\xeCJK@setfont #1}} +\def\CJKpunctsymbol#1{{\xeCJK@setfont #1}} +\def\xeCJK@setfont{ + \ifcsname\xeCJK@family/\f@series/\f@shape/\f@size\endcsname + \csname\xeCJK@family/\f@series/\f@shape/\f@size\endcsname + \else + \csname xeCJK@font@\xeCJK@family\endcsname + \get@external@font + \expandafter\global\expandafter\font + \csname\xeCJK@family/\f@series/\f@shape/\f@size\endcsname=\external@font + \fi} + +\def\setCJKmainfont{ + \xeCJK@newfontfamily{rm}} + +\let\setCJKromanfont\setCJKmainfont + +\def\setCJKsansfont{ + \xeCJK@newfontfamily{sf}} + +\def\setCJKmonofont{ + \xeCJK@newfontfamily{tt}} + +\def\setCJKfamilyfont#1{ + \xeCJK@newfontfamily{#1}} + +\DeclareRobustCommand\rmfamily + {\not@math@alphabet\rmfamily\mathrm + \fontfamily\rmdefault\CJKfamily{rm}\selectfont} + +\DeclareRobustCommand\sffamily + {\not@math@alphabet\sffamily\mathsf + \fontfamily\sfdefault\CJKfamily{sf}\selectfont} + +\DeclareRobustCommand\ttfamily + {\not@math@alphabet\ttfamily\mathtt + \fontfamily\ttdefault\CJKfamily{tt}\selectfont} + +\newcommand*\xeCJK@newfontfamily[1]{ + \@ifnextchar[ + {\xeCJK@newfontfamily@{#1}} + {\xeCJK@newfontfamily@{#1}[]}} + +\def\xeCJK@newfontfamily@#1[#2]#3{ + % + % Get user defined options + \def\xeCJK@temp{#2} + \expandafter + \xeCJK@getBoldFont\xeCJK@temp BoldFont={}{}\relax + \expandafter + \xeCJK@getBoldItalicFont\xeCJK@temp BoldItalicFont={}{}\relax + \expandafter + \xeCJK@getItalicFont\xeCJK@temp ItalicFont={}{}\relax + + \expandafter + \xeCJK@getBoldItalicFeatures\xeCJK@temp BoldItalicFeatures={}{}\relax + \expandafter + \xeCJK@getBoldFeatures\xeCJK@temp BoldFeatures={}{}\relax + \expandafter + \xeCJK@getItalicFeatures\xeCJK@temp ItalicFeatures={}{}\relax + + \expandafter + \xeCJK@getRawFeature\xeCJK@BoldFeatures RawFeature={}{}\relax + \edef\xeCJK@Bold@RawFeature{\xeCJK@tempRawFeature} + + \expandafter + \xeCJK@getRawFeature\xeCJK@BoldItalicFeatures RawFeature={}{}\relax + \edef\xeCJK@BoldItalic@RawFeature{\xeCJK@tempRawFeature} + + \expandafter + \xeCJK@getRawFeature\xeCJK@ItalicFeatures RawFeature={}{}\relax + \edef\xeCJK@Italic@RawFeature{\xeCJK@tempRawFeature} + + \edef\xeCJK@Features{} + + \ifxeCJK@BoldFont@ + \ifx\xeCJK@BoldFont\@empty + + \ifx\xeCJK@Bold@RawFeature\@empty + \def\xeCJK@Bold@RawFeature{ + embolden=\xeCJK@emboldenfactor} + \else + \edef\xeCJK@Bold@RawFeature{ + embolden=\xeCJK@emboldenfactor, + \xeCJK@Bold@RawFeature} + \fi + + \ifx\xeCJK@BoldFeatures\@empty + \edef\xeCJK@Features{ + BoldFeatures={ + RawFeature={\xeCJK@Bold@RawFeature}}} + \else + \edef\xeCJK@Features{ + BoldFeatures={ + \xeCJK@BoldFeatures, + RawFeature={\xeCJK@Bold@RawFeature}}} + \fi + + \ifx\xeCJK@BoldItalic@RawFeature\@empty + \def\xeCJK@BoldItalic@RawFeature{ + embolden=\xeCJK@emboldenfactor} + \else + \edef\xeCJK@BoldItalic@RawFeature{ + embolden=\xeCJK@emboldenfactor, + \xeCJK@BoldItalic@RawFeature} + \fi + \fi + \fi + + \ifxeCJK@SlantFont@ + \ifx\xeCJK@ItalicFont\@empty + + \ifx\xeCJK@Italic@RawFeature\@empty + \edef\xeCJK@Italic@RawFeature{ + slant=\xeCJK@slantfactor} + \else + \edef\xeCJK@Italic@RawFeature{ + slant=\xeCJK@slantfactor, + \xeCJK@Italic@RawFeature} + \fi + + \ifx\xeCJK@ItalicFeatures\@empty + \edef\xeCJK@ItalicFeatures{ + RawFeature={\xeCJK@Italic@RawFeature}} + \else + \edef\xeCJK@ItalicFeatures{ + \xeCJK@ItalicFeatures, + RawFeature={\xeCJK@Italic@RawFeature}} + \fi + + \ifx\xeCJK@BoldItalic@RawFeature\@empty + \edef\xeCJK@BoldItalic@RawFeature{ + slant=\xeCJK@slantfactor} + \else + \edef\xeCJK@BoldItalic@RawFeature{ + slant=\xeCJK@slantfactor, + \xeCJK@BoldItalic@RawFeature} + \fi + + \ifx\xeCJK@BoldItalicFeatures\@empty + \edef\xeCJK@BoldItalicFeatures{ + RawFeature={\xeCJK@BoldItalic@RawFeature}} + \else + \edef\xeCJK@BoldItalicFeatures{ + \xeCJK@BoldItalicFeatures, + RawFeature={\xeCJK@BoldItalic@RawFeature}} + \fi + + \ifx\xeCJK@Features\@empty + \edef\xeCJK@Features{ + ItalicFeatures={\xeCJK@ItalicFeatures}, + BoldItalicFeatures={\xeCJK@BoldItalicFeatures}} + \else + \edef\xeCJK@Features{ + \xeCJK@Features, + ItalicFeatures={\xeCJK@ItalicFeatures}, + BoldItalicFeatures={\xeCJK@BoldItalicFeatures}} + \fi + \fi + \fi + + \edef\xeCJK@temp{#2} + \ifx\xeCJK@temp\@empty + \else + \edef\xeCJK@temp{,#2} + \fi + + \ifx\xeCJK@Features\@empty + \else + \edef\xeCJK@Features{,\xeCJK@Features} + \fi + + \edef\xeCJK@Features{ + [BoldFont={#3}, + ItalicFont={#3}, + BoldItalicFont={#3}% The first three parameters can be overridden by + % user defined parameters in #2 + \xeCJK@temp\xeCJK@Features]} + + \expandafter + \newfontfamily@i\csname xeCJK@font@#1\expandafter\endcsname + \xeCJK@Features + {#3}} + +\def\xeCJK@setmacro@getkey#1{ + \expandafter\def\csname xeCJK@get#1\endcsname ##1#1=##2##3\relax{ + \expandafter\edef\csname xeCJK@#1\endcsname{##2} + \edef\xeCJK@temp{##1##3}}} + +\xeCJK@setmacro@getkey{BoldFont} +\xeCJK@setmacro@getkey{ItalicFont} +\xeCJK@setmacro@getkey{BoldItalicFont} +\xeCJK@setmacro@getkey{ItalicFeatures} +\xeCJK@setmacro@getkey{BoldFeatures} +\xeCJK@setmacro@getkey{BoldItalicFeatures} + +\def\xeCJK@getRawFeature#1RawFeature=#2#3\relax{ + \edef\xeCJK@tempRawFeature{#2}} + +\define@key[zf]{preparse}{ItalicFeatures}{ + \edef\zf@it@feat{,#1} + \edef\zf@family@long{\zf@family@long itfeat:#1}} + + +\def\xeCJK@font@rm{} + +\DeclareRobustCommand\CJKfamily[1]{ + \ifcsname xeCJK@font@#1\endcsname + \def\xeCJK@family{#1} + \else + \ifcsname xeCJK@#1@warned\endcsname + \else + \PackageWarning{xeCJK}{ + Unknown CJK family `#1' is ignored.^^J + Use \string\setCJKfamilyfont \space to define a CJK family.} + \expandafter\gdef\csname xeCJK@#1@warned\endcsname{} + \fi + \fi} +\CJKfamily{rm} + +\def\xeCJKsetslantfactor#1{\edef\xeCJK@slantfactor{#1}} +\def\xeCJKsetemboldenfactor#1{\edef\xeCJK@emboldenfactor{#1}} + +\xeCJKsetslantfactor{0.17} +\xeCJKsetemboldenfactor{4} +\@ifundefined{UL@hskip}{\let\UL@hskip\relax}{} + +\let\xeCJK@ULspecials\relax + +\def\xeCJK@UL@punctgroup{ + \ifx\hskip\UL@hskip + \egroup + \UL@stop + \UL@start + \bgroup + \fi} + +\ifxeCJK@num + \edef\CJK@UnicodeEnc{UTF8} + \def\CJKaddEncHook#1#2{\expandafter\def\csname xeCJK@enc@#1\endcsname{#2}} + \def\Unicode#1#2{\@tempcnta #1\relax + \multiply\@tempcnta 256\relax + \advance\@tempcnta #2\relax + \char\@tempcnta} + \RequirePackage{CJKnumb} + \csname xeCJK@enc@UTF8\endcsname + \def\CJK@tenthousand{万} +\fi + +\def\CJK@ifundefined#1{ + \ifx #1\@undefined + \expandafter\@firstoftwo + \else + \expandafter\@secondoftwo + \fi +} + +\newcommand{\xeCJKcaption}[2][]{ + \edef\xeCJK@temp{#1} + \ifx\xeCJK@temp\@empty + \else + \XeTeXdefaultencoding "#1" + \fi + \makeatletter + \input{#2.cpx} + \makeatother + \XeTeXdefaultencoding "UTF-8"} + +\def\CJKlanguage#1{} +\endlinechar `\^^M +\catcode "FEFF=9\relax +\endinput +%% +%% End of file `xeCJK.sty'. |