summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xelatex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2009-07-20 00:40:16 +0000
committerKarl Berry <karl@freefriends.org>2009-07-20 00:40:16 +0000
commit05ce59d3f94be6128b7840f17ce476c614356551 (patch)
tree4be64fa7c50a698a552dbbd826cc488e729c0e51 /Master/texmf-dist/tex/xelatex
parentbefa55daf259a7f10fdcfe9bc77813d9d0c46abe (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.sty931
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'.