xeCJK 宏包

Similar documents
xeCJK 宏包

xeCJK 宏包

xpinyin 宏包

xeCJK 宏包

xeCJK 宏包

Visualize CMap


ptex-ng ptex-ng ptex OpenType UTF-8 ptex-ng JIS X 4051 ptex ASCII ptex TEX Users Group ptex-ng 2012 LuaTEX Common TEX Y&Y TEX ptex

lnag_ch_v2.01.doc

fduthesis: 复旦大学论文模板

第 3 章 数 据 在 计 算 机 中 的 表 示 43 在 进 位 计 数 制 中 有 数 码 数 位 ( 位 置 ) 基 数 和 位 权 等 用 语 数 码 是 在 一 个 计 数 制 中 用 来 表 示 数 值 的 符 号 ; 数 位 是 指 数 码 在 一 个 数 中 所 处 的 位 置 ;

嘉義市政府暨附(所)屬機關電話禮貌測試實施要點

序 文 藝 社 (Society of Chinese Literature) 在 去 年 暑 假 開 始 籌 措 成 立, 二 零 一 三 年 九 月 正 式 展 開 所 有 活 動 文 藝 社 成 立 的 目 的 旨 在 讓 學 生 學 習 欣 賞 歷 代 名 篇 名 作, 其 中 以 古 典

第47回東海・北陸地区連合校長会教育研究愛知大会

好 樂 迪 股 份 有 限 公 北 大 分 公 臺 中 市 大 里 區 中 興 路 2 段 446 之 5 號 1 至 3 及 446 之 7 號 茗 園 歌 唱 視 聽 臺 中 市 大 里 區 永 隆 里 永 隆 八 街 178 號

標準 BIG 中文字型碼表 A 0 9 B C D E F 一 乙 丁 七 乃 九 了 二 人 儿 入 八 几 刀 刁 力 匕 十 卜 又 三 下 丈 上 丫 丸 凡 久 么 也 乞 于 亡 兀 刃 勺 千 叉 口 土 士 夕 大 女 子 孑 孓 寸 小 尢 尸 山 川 工 己 已 巳 巾 干 廾

目錄

2

<4D F736F F D20D6D0CEC4B7A88C57B454CABF8C57CEBBD593CEC4D28EB9A0>

第 7 章 下 一 代 网 际 协 议 IPv6 141 足 的 措 施 只 能 是 权 宜 之 计 (3) 路 由 表 膨 胀 早 期 IPv4 的 地 址 结 构 也 造 成 了 路 由 表 的 容 量 过 大 IPv4 地 址 早 期 为 网 络 号 + 主 机 号 结 构, 后 来 引 入

CTeX 宏集手册

jsj0.nps

REPORT ID: SS-220D COMPILED BY: HONG KONG HOUSING SOCIETY 香港房屋協會 PROJECT:THS2018 HONG KONG HOUSING SOCIETY 香港房屋協會 T-HOME TRANSITIONAL RENTAL HOUSING S

(08) (08)

WCA Regulations and Guidelines

!"!"# # $!""%& ()*+, - ". - "/!%,0 -.! $ " $ # $ $ $ 1 %%&0/! 2(3!""% "/%,.4 "/" -." "" - 5/" - "045 /"""" # # 999$ 6:8$ :;<$ =>

第一章

! " # $ % & (( %) "*+,- &.(/-) & ( 0 & 1! % " % # % & & $ % "/()%!"# (( (02-03 /(((.1/.2( 4 //). /$0 3)0%. /1/%-2 (( ) / ((0 // "*+,- &.(/-) & ( 0 & 1

Ps22Pdf


:;< =;< >!?%(, (-+ *$5(1 *$%* *#%0$#34 65&# *--.20$ $-.#+-317 A$#, 4%, 5* 54! >! B-3 0$5)/3#( * %* $-.# 5( *$#53 B3## *5.#7

研討會大綱/成果

coverage2.ppt

Microsoft Word - 01.DOC

1 2 / 3 1 A (2-1) (2-2) A4 6 A4 7 A4 8 A4 9 A ( () 4 A4, A4 7 ) 1 (2-1) (2-2) ()

彩圖 6 彩圖 7 彩圖 8 3

4 / ( / / 5 / / ( / 6 ( / / / 3 ( 4 ( ( 2

3!)4 +!*5")+,*" "!7 *"954#!767 ()9)"4 %7*"!76 #67:)+")5, "5 * 6*,;7 58 "%5 %77<4& =5%7>76 : 7 "5 4);,)8)+*," %7*<7,),; 58 "!7 +!*5")+,*" 67,:76


ebook37-4

民 國 105 年 大 專 程 度 義 務 役 預 備 軍 官 預 備 士 官 考 選 簡 章 目 錄 壹 考 選 依 據 1 貳 考 ( 甄 ) 選 對 象 1 參 資 格 規 定 1 肆 員 額 及 專 長 類 別 2 伍 報 名 及 選 填 志 願 日 期 方 式 3 陸 選 填 官 科 (

E170C2.PDF

目 录 1 正 文 乊 前 目 癿 本 文 内 容 声 明 字 符 编 码 相 兰 癿 背 景 知 识 拉 丁 字 母 什 么 是 字 符 编 码 字 符 编 码 标 准... 8

SIK) 者, 需 實 施 1 年 以 上, 經 體 格 檢 查 無 後 遺 症 者 5. 身 體 任 何 部 分 有 刺 青 紋 身 穿 耳 洞 者, 不 得 報 考, 各 項 檢 查 結 果 須 符 合 體 位 區 分 標 準 常 備 役 體 位 二 在 校 軍 訓 成 績 總 平 均 70 分

!!!!"#$ " " %& ( " # " " " " " "$%%& " $%% " "!!

Contents 1 Typing Simplified Chinese in LATEXOn Mac Way One: Using XeLaTeX Way Two: Copy localtexmf from instal

980105

) E F EF F F = = FE = F = F 5 E O E F O O O O O O O O O EFO E F 6 8cm 3cm 5cm cm 3cm 5cm cm 7 5% x + 3 x =

第六章 中国中等收入者调查的三个发现

1-1 2

4.进度控制(网络计划)0.ppt

<4D F736F F D C4EAA1B6B1CFD2B5C2DBCEC4D6B8B5BCCAD6B2E1A1B7A3A8B3F5B8E5A3A92E646F63>


!!""# $ %#" & $$ % $()! *% $!*% +,-. / 0 %%"#" 0 $%1 0 * $! $#)2 "

diagbox Package (v2.2): Making Table Heads with Diagonal Lines

Contents 1 Typing Simplified Chinese in LATEXOn Mac Way One: Using XeLaTeX Way Two: Copy localtexmf from instal

!" #$%#&#! () *+, -.!" #$%#/# $!" /$12 0!" 3 4 $$255 % 67 8 $ %% #! " # $9&$

Ctpu


<4D F736F F D BBF9D3DAB9FABCCAB6E0D3EFD6D6D3F2C3FBCCE5CFB5B5C4D6D0CEC4D3F2C3FBB5C4B1E0C2EBB4A6C0EDBCBCCAF5D2AAC7F32E646F63>

1 2

穨怎樣用電腦打出一分物理試題.PDF


FY.DOC

《中国小百科全书(5):技术科学》


pair path pair path numeric sind cosd pair color beginfig(0) u := 2cm ; pair a ; draw ( 0u, 0u ) -- ( u, u ) ; draw ( u, 0u ) -- ( 0u, 1u ) ;

, 7, Windows,,,, : ,,,, ;,, ( CIP) /,,. : ;, ( 21 ) ISBN : -. TP CIP ( 2005) 1

,,,, :,,,,, ( ), ( ), ( ), ( ),,, ( CIP ) /. :, ( 21 ) ISBN F CIP ( 2005 ) : ( 17, ) :

(CIP) /. :, 2004 ISBN ,. U CIP (2004) (1 : ) : * : : :

XeTeX about:fonts

#!$ %" & ( &)*+,((&-,./ )01,+2 ( /., )>2/ 80;2 +&,($ J &( > =.>? =0+ 9, *,0*., 0= )>2/ 2> &02($ J &( > A.;, % 9 > )>* 0= &2 9, )&11.,

「全國紡織技術論文競賽」投稿須知

0B80:Tamil 泰米尔语 0C00:Telugu 泰卢固语 0C80:Kannada 埃纳德语 0D00:Malayalam 马拉雅拉姆语 0D80:Sinhala 锡兰语 0E00:Thai 泰国语 0E80:Lao 老挝语 0F00:Tibetan 西藏语 1000:Myanmar 玛雅语

谚语阐因

山东轻工业学院

Fuzzy Highlight.ppt

馬偕醫學院 學生事務工作簡報

Fuzzy GP

Cover-CsG.65Cs

农银人寿发[2013]102号-4 农银寰宇至尊高端医疗保险条款

Microsoft Word - AP1515V02

Microsoft Word - LD5515_5V1.5A-DB-01 Demo Board Manual

科学计算的语言-FORTRAN95

!!"#$ " # " " " " " "$%%& " $%% " "!!

#$% 7 = 8++!7 3" %0 3 & ("!8 (" ) * *+! * =!!8 * =!!6! A 6, #" ((A - B (0A - B 6 00A - A - +! -.! *! %-(07 - / % " ( " * %-(0 0 /! 6 =! 6 : 7 2 *! 8.

Panasonic ( ) : : Microsoft Windows / Pentium / Intel : ( PCC ) PCC Panasonic Communications Co., Ltd

ebook 132-2

CTeX 宏集手册

公開徵求廠商提供「採購專業人員訓練計畫企劃書」公告

untitled

untitled

ebook 165-5

!"# $%& ()) *+,+)-./01!"# $%& ()) *+,+)-./01!"#! "#$ 2!"# ):; 2!B! 2 "B # $ 2 %4 C C 2 &4 %D?<?4 6<5 2 (9D =6

小学7

zt

5-1 nav css 5-2


Microsoft Word 碩專手冊封面.doc

头部

Transcription:

xecjk ctex.org 2012/12/13 3.1.1 1 1 2 2 3 2 3.1............. 2 3.2......... 5 3.2.1 XƎTEX... 7 3.3 CJK....... 8 3.4 CJK....... 9 3.5......... 9 3.5.1.......... 9 3.5.2.. 9 3.6............... 11 4 11 5 xecjk 12 5.1.......... 12 5.2............. 12 5.3............. 16 5.4.......... 17 5.5.......... 20 5.6.......... 23 5.7...... 32 5.8.......... 33 5.9 CJK........ 37 5.10............. 38 5.11............. 48 5.12 CJK...... 50 5.13............. 57 5.14.......... 62 5.15..... 63 5.16 xecjk......... 65 5.17 xecjk....... 66 5.18........... 68 5.19 xecjkfntef............ 72 5.20 xecjk.cfg............ 78 79 79 1 xecjk XƎL A TEX CJK 1. CJK 2. CJK (a z, A Z) 3. CCT 4. xecjk XƎTEX XƎTEX 0.9995.0 [2009/06/29] xecjk L A TEX3 l3kernel l3packages xecjk fontspec 3.1 CJKnumber CJK CJKnumb indentfirst indentfirst xecjk xecjk 2009 5 ctex-kit 1 2 ctex-kit rev382. 1 leoliu.pku@gmail.com 2 sobenlee@gmail.com 1

2 L A TEX xecjk \usepackage{xecjk} xecjk CJK xecjk \documentclass{article} \usepackage{xecjk} \setcjkmainfont{simsun} \begin{document} \LaTeX \end{document} SimSun UTF-8 XƎL A TEX xecjk CJK ctex xecjk ctex xecjk \xecjksetup 3.1 \setcjkmainfont xecjk 3.2 example 3 3.1 xecjk key = var \xecjksetup xecjk fontspec xecjk xecjk fontspec \xecjksetup \xecjksetup { key 1 = var 1, key 2 = var 2,...} key 1, key 2 val 1, val 2 \usepackage[punctstyle=kaiming]{xecjk} \usepackage{xecjk}... \xecjksetup{punctstyle=kaiming} CJK xecjk LocalConfig New: 2012-11-22 LocalConfig = { true false name } xecjk- name.cfg name true xecjk.cfg false xecjk CJK xecjk- name.cfg TDS TEXLive xecjk- name.cfg texlive/texmf-local/tex/xelatex/xecjk mktexlsr TEX 2

CJKnumber indentfirst Updated: 2012-11-22 CJKnumber = true false CJKnumb xecjk CJKnumb indentfirst = true false indentfirst xecjk LocalConfig CJKnumber indentfirst xecjk \xecjksetup xecjkactive CJKspace CJKmath CJKglue CJKecglue xcjkecglue CheckSingle Updated: 2012-12-06 PlainEquation New: 2012-12-06 NewLineCS NewLineCS+ NewLineCS- xecjkactive = true false / / XƎTEX CJKspace = true false xecjk CJK CJKmath = true false CJK CJK CJKglue = {\hskip 0pt plus 0.08\baselineskip} CJK glue xecjk glue CJKecglue = { glue } CJK CJK glue glue xecjk CJK xecjk xcjkecglue = { true false glue } xecjk CJK CJKecglue CJK CheckSingle = true false CJK CJK PlainEquation = true false $$...$$ CheckSingle \[...\] NewLineCS = { \par \[ } CheckSingle xecjk New: 2012-12-04 EnvCS EnvCS+ EnvCS- New: 2012-12-04 EnvCS = { \begin \end } L A TEX CheckSingle xecjk 3

InlineEnv InlineEnv+ InlineEnv- Updated: 2012-12-06 InlineEnv = { env 1, env 2, env 3,...} CheckSingle xecjk CJK L A TEX \begin{...} \end{...} L A TEX CheckSingle AutoFallBack AutoFakeBold AutoFakeSlant EmboldenFactor SlantFactor AutoFallBack = true false 3.2 AutoFakeBold = { true false } AutoFakeSlant = { true false } EmboldenFactor = { 4 } SlantFactor = { 0.167 } 0.999 0.999 PunctStyle Updated: 2012-11-10 PunctStyle = { quanjiao banjiao kaiming hangmobanjiao CCT plain... } xecjk quanjiao 1.5 banjiao kaiming hangmobanjiao CCT CCT plain 3.5.2 \xecjkdeclarepunctstyle KaiMingPunct KaiMingPunct+ KaiMingPunct- LongPunct LongPunct+ LongPunct- MiddlePunct MiddlePunct+ MiddlePunct- PunctWidth KaiMingPunct = { } kaiming KaiMingPunct + - LongPunct = { } MiddlePunct = { } CJK xecjk PunctWidth = { length } xecjk length em pt plain CJK 3.5.1 \xecjksetwidth 4

AllowBreakBetweenPuncts CheckFullRight New: 2012-12-02 NoBreakCS NoBreakCS+ NoBreakCS- New: 2012-12-02 AllowBreakBetweenPuncts = true false xecjk CJK CJK CheckFullRight = true false NoBreakCS = { \footnote \footnotemark \nobreak } xecjk CheckFullRight 3.6 \xecjknobreak 3.2 \setcjkmainfont AutoFakeBold AutoFakeSlant \setcjksansfont \setcjkmonofont \setcjkfamilyfont \CJKfamily Updated: 2012-10-27 \newcjkfontfamily \setcjkmainfont [ font features ] { font name } CJK \rmfamily \textrm fontspec font features font name 3.2.1 fontspec xecjk AutoFakeBold AutoFakeSlant AutoFakeBold = { true false } AutoFakeSlant = { true false } \setcjksansfont [ font features ] { font name } CJK \sffamily \textsf \setcjkmonofont [ font features ] { font name } CJK \ttfamily \texttt \setcjkfamilyfont { family } [ font features ] { font name } CJK family \CJKfamily { family } \CJKfamily+ { family } \CJKfamily- { family } CJK family \CJKfamily CJK \CJKfamily+ \CJKfamily- CJK \CJKfamily+ \CJKfamily- CJK \newcjkfontfamily [ family ] \ font-switch [ font features ] { font name } CJK family \ font-switch CJK family family font-switch \newcjkfontfamily \setcjkfamilyfont \CJKfamily \newcjkfontfamily[song]\songti{simsun} \setcjkfamilyfont{song}{simsun} \newcommand\songti{\cjkfamily{song}} 5

\CJKfontspec \CJKfontspec [ font features ] { font name } CJK \defaultcjkfontfeatures \defaultcjkfontfeatures { font features } CJK \defaultcjkfontfeatures{scale=0.962216} CJK 0.962216 xecjk \defaultcjkfontfeatures{script=cjk} \addcjkfontfeatures \addcjkfontfeatures { font features } CJK \addcjkfontfeatures{scale=1.1} CJK 1.1 \CJKrmdefault \rmfamily CJK rm \rmdefault \CJKsfdefault \sffamily CJK sf \sfdefault \CJKttdefault \ttfamily CJK tt \ttdefault \CJKfamilydefault \normalfont CJK \CJKrmdefault \familydefault xecjk \CJKfamilydefault \renewcommand\familydefault{\sfdefault} CJK \setcjkmathfont \setcjkfallbackfamilyfont \setcjkmathfont [ font features ] { font name } CJK CJKmath \setcjkmathfont CJK \CJKfamilydefault CJK \setcjkfallbackfamilyfont { family } [ font features ] { font name } CJK family \setcjkmainfont{simsun} \setcjkfallbackfamilyfont{\cjkrmdefault}{simsun-extb} SimSun-ExtB SimSun FallBack FallBack = {[ font features ]{ font name }} xecjk font features FallBack \setcjkmainfont[fallback=simsun-extb]{simsun} FallBack \setcjkmainfont[fallback,autofakebold,scale=.97]{simsun-extb} \setcjkfallbackfamilyfont{\cjkrmdefault}[autofakebold,scale=.97]{simsun-extb} 6

\setcjkfallbackfamilyfont \setcjkfallbackfamilyfont { family } [ common font features ] { {[ font features 1 ] { font name 1 }}, {[ font features 2 ] { font name 2 }},... } \setcjkfallbackfamilyfont \setcjkmainfont[autofakebold,autofakeslant]{kaiti_gb2312} \setcjkfallbackfamilyfont{\cjkrmdefault}[autofakeslant] { [BoldFont=SimHei]{SimSun}, [AutoFakeBold] {SimSun-ExtB} } SimSun KaiTi_GB2312 SimSun-ExtB SimSun 3.2.1 XƎTEX fontspec XƎTEX XƎTEX fontconfig fc-list Windows Linux Console fc-list > fontlist.txt fontlist.txt fc-list Windows Times New Roman:style=cursiva,kurzíva,kursiv,Π ά ια,italic, Kursivoitu,Italique,Dőlt,Corsivo,Cursief,kursywa,Itálico,Курсив, İtalik,Poševno,nghiêng,Etzana Times New Roman:style=Negreta cursiva,tučné kurzíva,fed kursiv, Fett Kursiv,Έντονα Π ά ια,bold Italic,Negrita Cursiva, Lihavoitu Kursivoi,Gras Italique,Félkövér dőlt,grassetto Corsivo, Vet Cursief,Halvfet Kursiv,Pogrubiona kursywa,negrito Itálico, Полужирный Курсив,Tučná kurzíva,fet Kursiv,Kalın İtalik, Krepko poševno,nghiêng đậm,lodi etzana Times New Roman:style=Negreta,tučné,fed,Fett,Έντονα,Bold,Negrita, Lihavoitu,Gras,Félkövér,Grassetto,Vet,Halvfet,Pogrubiona,Negrito, Полужирный,Fet,Kalın,Krepko,đậm,Lodia Times New Roman:style=Normal,obyčejné,Standard,Κανονικά,Regular, Normaali,Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno, thường,arrunta,simsun:style=regular,simhei:style=normal,obyčejné,standard,κανονικά,regular,normaali, Normál,Normale,Standaard,Normalny,Обычный,Normálne,Navadno,Arrunta fontspec xecjk \setmainfont{times New Roman} \setcjkmainfont{simsun} % \setcjkmainfont{ } fc-list fc-list -f "%{family}\n" :lang=zh > zhfont.txt zhfont.txt 3 Windows 3 Windows 7

Arial Unicode MS FangSong, KaiTi, Microsoft YaHei, MingLiU, NSimSun, PMingLiU, SimHei, SimSun, :lang=zh zh ja ko fontspec xecjk Windows \setcjkmainfont{simsun.ttc} fontspec xecjk 3.3 CJK CJK CJK xecjk CJK CJK CJK \xecjkdeclaresubcjkblock \xecjkdeclaresubcjkblock { block } { block range } \xecjkdeclaresubcjkblock* { block } { block range } block range CJK Unicode Unicode { ` -> `, "3400 -> "4DBF, "5000 -> "7000, `, `, "3500 } block range Unicode CJK \xecjkdeclaresubcjkblock{spua}{ "E400 -> "E4DA, "E500 -> "E5E8, "E600 -> "E6CE } \xecjkdeclaresubcjkblock{ext-b}{ "20000 -> "2A6DF } SPUA Ext-B 3.2 CJK font features SPUA Ext-B 3.2 FallBack \setcjkmainfont[spua=sunmanpua,ext-b=simsun-extb]{simsun} SimSun SPUA SunmanPUA Ext-B SimSun-ExtB \xecjkdeclaresubcjkblock CJK CJK block \CJKfamilydefault block CJK block CJK CJK block block =* CJK \xecjkcancelsubcjkblock \xecjkrestoresubcjkblock \xecjkcancelsubcjkblock { block1,block2,... } \xecjkcancelsubcjkblock* { block1,block2,... } CJK \xecjkrestoresubcjkblock { block1,block2,... } \xecjkrestoresubcjkblock* { block1,block2,... } CJK 8

3.4 CJK \xecjkdeclarecharclass \xecjkdeclarecharclass { class } { class range } \xecjkdeclarecharclass* { class } { class range } class range 3.3 block range class 5.4 xecjk Unicode CJK \xecjkresetcharclass \xecjkresetpunctclass \normalspacedchars \xecjkresetcharclass xecjk \xecjkresetpunctclass \normalspacedchars { char list } char list / 3.5 xecjk xecjk xecjk 3.5.1 plain \xecjksetwidth \xecjksetwidth { } { length } \xecjksetwidth{ }{0.7em} 0.7 em \xecjksetkern \xecjksetkern { } { } { length } xecjk CJK \xecjksetkern{ }{ }{0.3em} 0.3 em 3.5.2 \xecjkdeclarepunctstyle New: 2012-11-10 \xecjkdeclarepunctstyle { style } { options } \xecjkeditpunctstyle New: 2012-11-10 \xecjkeditpunctstyle { style } { options } boolean false length \maxdimen real 0 9

enabled-global-setting boolean \xecjksetup PunctWidth \xecjksetwidth \xecjksetkern true fixed-punct-width length \maxdimen fixed-punct-ratio real 1.0 mixed-punct-width length \xecjksetup KaiMingPunct fixed-punct-width mixed-punct-width real fixed-punct-ratio middle-punct-width length \xecjksetup MiddlePunct fixed-punct-width middle-punct-width real fixed-punct-ratio xecjk / / fixed-margin-width length / \maxdimen fixed-margin-ratio real / 1.0 mixed-margin-width length / fixed-margin-width mixed-margin-ratio real / fixed-margin-ratio middle-margin-width length fixed-margin-width middle-margin-ratio real fixed-margin-ratio add-min-bound-to-margin boolean false optimize-margin boolean / true fixed-punct-width / false margin-minimum length / 0 pt enabled-kerning boolean false true min-bound-to-kerning boolean false kerning-total-width length xecjk \maxdimen kerning-total-ratio real 0.75 same-align-margin length \maxdimen same-align-ratio real 0 different-align-margin length \maxdimen different-align-ratio real 0 kerning-margin-width length \maxdimen kerning-margin-ratio real 1.0 optimize-kerning boolean min-bound-to-kerning true false kerning-margin-minimum length 0 pt xecjk quanjiao 10

\xecjkdeclarepunctstyle { mine } { fixed-punct-ratio = 0, fixed-margin-width = 0 pt, mixed-margin-width = \maxdimen, mixed-margin-ratio = 0.5, middle-margin-width = \maxdimen, middle-margin-ratio = 0.5, add-min-bound-to-margin = true, min-bound-to-kerning = true, kerning-margin-minimum = 0.1 em } mine \xecjksetup{punctstyle=mine} / 0.1 em \xecjkeditpunctstyle { hangmobanjiao } { enabled-global-setting = false } \xecjksetkern hangmobanjiao 3.6 \xecjkverbaddon New: 2012-11-19 \xecjkverbaddon CJK (verbatim) \xecjkverbaddon \xecjkverbaddon xecjk fancyvrb formatcom \xecjkverbaddon \xecjknobreak New: 2012-12-03 \xecjknobreak\footnote{ } \xecjknobreak CheckFullRight 4 xecjk CJK \CJKfamily \CJKsymbol \CJKglue xecjk CJK xecjk CJK xecjk xecjkfntef CJKfntef XƎL A TEX CJKfntef CJKfntef.sty 3.x xecjk L A TEX3 L A TEX3 \outer peek \outer xecjk CJK \outer! Forbidden control sequence found while scanning use of \use_i:nn cprotect \cprotect \outer\long\def\cprotect{\icprotect} \icprotect \cprotect cprotect xecjk \let\cprotect\icprotect 11

\cprotect \cprotect \outer \relax xecjk XƎTEX \XeTeXinterchartoks polyglossia xecjk xltxtra realscripts \dim_max:nn \dim_min:nn expl3 realscripts expl3 xecjk xltxtra xltxtra XƎL A TEX Logo hologo xecjk 5 xecjk 1 *package 2 @@=xecjk 5.1 xecjk XƎTEX 3 \msg_new:nnn { xecjk } { Require-XeTeX } 4 { 5 The~xeCJK~package~requires~XeTeX~to~function.\\\\ 6 You~must~change~your~typesetting~engine~to~"xelatex" \\ 7 instead~of~plain~"latex"~or~"pdflatex"~or~"lualatex".\\ 8 Loading~xeCJK~will~abort! 9 } 10 \xetex_if_engine:f { \msg_critical:nn { xecjk } { Require-XeTeX } } expl3 11 \msg_new:nnn { xecjk } { l3-too-old } 12 { 13 Support~package~'#1'~too~old. \\\\ 14 Please~update~an~up~to~date~version~of~the~bundles\\\\ 15 'l3kernel'~and~'l3packages'\\\\ 16 using~your~tex~package~manager~or~from~ctan.\\ 17 \str_if_eq:nnt {#1} { expl3 } { Loading~xeCJK~will~abort! } 18 } 19 \@ifpackagelater { expl3 } { 2012/11/10 } { } 20 { \msg_critical:nnn { xecjk } { l3-too-old } { expl3 } } xtemplate \KeyValue Bug 21 \RequirePackage { xtemplate } 22 \@ifpackagelater { xtemplate } { 2012/11/10 } { } 23 { \msg_error:nnn { xecjk } { l3-too-old } { xtemplate } } 24 \RequirePackage { xparse, l3keys2e } 5.2 25 \tl_new:n \l xecjk_tmpa_tl 26 \tl_new:n \l xecjk_tmpb_tl 27 \int_new:n \l xecjk_tmpa_int 28 \int_new:n \l xecjk_tmpb_int 29 \int_new:n \l xecjk_tmpc_int 30 \box_new:n \l xecjk_tmp_box 31 \dim_new:n \l xecjk_tmp_dim 32 \skip_new:n \l xecjk_tmp_skip 33 \prop_new:n \l xecjk_tmp_prop 34 \clist_new:n \l xecjk_tmpa_clist 35 \clist_new:n \l xecjk_tmpb_clist 12

\ xecjk_msg_new:nn \ xecjk_error:n \ xecjk_error:nx \ xecjk_warning:nx \ xecjk_info:nx \ xecjk_info:nxx 36 \cs_new_protected_nopar:npn \ xecjk_msg_new:nn { \msg_new:nnn { xecjk } } 37 \cs_new_protected_nopar:npn \ xecjk_error:n { \msg_error:nn { xecjk } } 38 \cs_new_protected_nopar:npn \ xecjk_error:nx { \msg_error:nnx { xecjk } } 39 \cs_new_protected_nopar:npn \ xecjk_warning:n { \msg_warning:nn { xecjk } } 40 \cs_new_protected_nopar:npn \ xecjk_warning:nx { \msg_warning:nnx { xecjk } } 41 \cs_new_protected_nopar:npn \ xecjk_warning:nxx { \msg_warning:nnxx { xecjk } } 42 \cs_new_protected_nopar:npn \ xecjk_info:nx { \msg_info:nnx { xecjk } } 43 \cs_new_protected_nopar:npn \ xecjk_info:nxx { \msg_info:nnxx { xecjk } } (End definition for \ xecjk_msg_new:nn and others.) \xecjk_allow_break: \xecjk_no_break: 44 \cs_new_protected_nopar:npn \xecjk_allow_break: { \tex_penalty:d \c_zero } 45 \cs_new_protected_nopar:npn \xecjk_no_break: { \tex_penalty:d \c_ten_thousand } (End definition for \xecjk_allow_break: and \xecjk_no_break:) \xecjk_if_package_loaded_p:n \xecjk_if_package_loaded:ntf \ xecjk_at_end_preamble:n \ xecjk_after_preamble:n \ xecjk_after_end_preamble:n \xecjk_reverse:nnn 46 \prg_new_conditional:npnn \xecjk_if_package_loaded:n #1 { p, T, F, TF } 47 { 48 \tl_if_exist:ctf { ver@ #1. \c xecjk_package_ext_tl } 49 { \prg_return_true: } { \prg_return_false: } 50 } 51 \tl_const:nx \c xecjk_package_ext_tl { \@pkgextension } (End definition for \xecjk_if_package_loaded:n) \document 52 \tl_new:n \g xecjk_at_end_preamble_hook_tl 53 \tl_new:n \g xecjk_after_preamble_hook_tl 54 \tl_new:n \g xecjk_after_end_preamble_hook_tl 55 \cs_new_protected:npn \ xecjk_at_end_preamble:n #1 56 { \tl_gput_right:nn \g xecjk_at_end_preamble_hook_tl {#1} } 57 \cs_new_protected:npn \ xecjk_after_preamble:n #1 58 { \tl_gput_right:nn \g xecjk_after_preamble_hook_tl {#1} } 59 \cs_new_protected:npn \ xecjk_after_end_preamble:n #1 60 { \tl_gput_right:nn \g xecjk_after_end_preamble_hook_tl {#1} } 61 \xecjk_if_package_loaded:ntf { etoolbox } 62 { 63 \AtEndPreamble { \g xecjk_at_end_preamble_hook_tl } 64 \AfterPreamble { \g xecjk_after_preamble_hook_tl } 65 \AfterEndPreamble { \g xecjk_after_end_preamble_hook_tl } 66 } 67 { 68 \AtBeginDocument { \g xecjk_after_preamble_hook_tl } 69 \cs_new_protected_nopar:npn \ xecjk_document_left_hook: 70 { \group_end: \g xecjk_at_end_preamble_hook_tl \group_begin: } 71 \cs_new_protected_nopar:npn \ xecjk_document_right_hook: 72 { \scan_stop: \g xecjk_after_end_preamble_hook_tl \tex_ignorespaces:d } 73 \cs_gset_nopar:npx \document 74 { 75 \ xecjk_document_left_hook: 76 \exp_not:o { \document } 77 \ xecjk_document_right_hook: 78 } 79 } (End definition for \ xecjk_at_end_preamble:n, \ xecjk_after_preamble:n, and \ xecjk_after_end_preamble:n) #1 #2 #3 #1 #2 #3 #2 80 \cs_new_nopar:npn \xecjk_reverse:nnn #1#2#3 81 { \str_if_eq_x:nntf {#1} {#2} {#3} {#2} } (End definition for \xecjk_reverse:nnn) 13

\xecjk_tl_remove_outer_braces:n \xecjk_tl_remove_outer_braces:n \xecjk_cs_clear:n \xecjk_cs_gclear:n \xecjk_swap_cs:nn \xecjk_font_gset_to_current:c \xecjk_glyph_if_exist_p:n \xecjk_glyph_if_exist:ntf \c_xecjk_space_skip_tl #1 82 \cs_new_protected_nopar:npn \xecjk_tl_remove_outer_braces:n #1 83 { \tl_set:nx #1 { \exp_args:nv \xecjk_tl_remove_outer_braces:n #1 } } 84 \cs_new:npn \xecjk_tl_remove_outer_braces:n #1 85 { \ xecjk_tl_remove_outer_braces:w #1 \q_stop } 86 \cs_new:npn \ xecjk_tl_remove_outer_braces:w #1 \q_stop 87 { 88 \bool_if:ntf { \tl_if_single_p:n {#1} && \tl_if_head_is_group_p:n {#1} } 89 { \ xecjk_tl_remove_outer_braces:w #1 \q_stop } 90 { \tl_trim_spaces:n {#1} } 91 } (End definition for \xecjk_tl_remove_outer_braces:n and \xecjk_tl_remove_outer_braces:n) 92 \cs_new_eq:nn \xecjk_cs_clear:n \tl_clear:n 93 \cs_new_eq:nn \xecjk_cs_gclear:n \tl_gclear:n (End definition for \xecjk_cs_clear:n and \xecjk_cs_gclear:n) #1 #2 94 \cs_new_protected:npn \xecjk_swap_cs:nn #1#2 95 { 96 \cs_set_eq:nn \ xecjk_swap_cs_aux:w #1 97 \cs_set_eq:nn #1 #2 98 \cs_set_eq:nn #2 \ xecjk_swap_cs_aux:w 99 \cs_undefine:n \ xecjk_swap_cs_aux:w 100 } (End definition for \xecjk_swap_cs:nn) #1 101 \cs_new_protected_nopar:npn \xecjk_font_gset_to_current:c #1 102 { 103 \exp_after:wn \cs_gset_eq:nn 104 \cs:w #1 \exp_after:wn \cs_end: \tex_the:d \tex_font:d 105 } (End definition for \xecjk_font_gset_to_current:c) #1 fontspec \scan_- stop: 106 \prg_new_conditional:npnn \xecjk_glyph_if_exist:n #1 { p, T, F, TF } 107 { 108 \etex_iffontchar:d \tex_font:d `#1 \exp_stop_f: 109 \prg_return_true: \else: \prg_return_false: \fi: 110 } (End definition for \xecjk_glyph_if_exist:n) glue \xspaceskip \spacefactor 111 \tl_const:nn \c_xecjk_space_skip_tl 112 { 113 \skip_if_eq:nntf \tex_spaceskip:d \c_zero_skip 114 { 115 \tex_fontdimen:d \c_two \tex_font:d 116 plus \tex_fontdimen:d \c_three \tex_font:d 117 minus \tex_fontdimen:d \c_four \tex_font:d 118 } 119 { \tex_spaceskip:d } 120 } (End definition for \c_xecjk_space_skip_tl) 14

\xecjk_glue_to_skip:nn \xecjk_if_blank_x_p:n \xecjk_if_blank_x:ntf \xecjk_int_until_do:nn \ xecjk_int_until_do:wn \xecjk_peek_catcode_ignore_spaces:ntf glue 121 \cs_new_protected_nopar:npn \xecjk_glue_to_skip:nn #1#2 122 { 123 \hbox_set:nn \l xecjk_tmp_box { #1 \scan_stop: \exp_after:wn } \exp_after:wn 124 \skip_set:nn \exp_after:wn #2 \exp_after:wn { \skip_use:n \tex_lastskip:d } 125 } (End definition for \xecjk_glue_to_skip:nn) 126 \prg_new_conditional:npnn \xecjk_if_blank_x:n #1 { p, T, F, TF } 127 { 128 \if_case:w \pdftex_strcmp:d { } {#1} \exp_stop_f: 129 \prg_return_true: 130 \else: 131 \if_case:w \pdftex_strcmp:d { ~ } {#1} \exp_stop_f: 132 \prg_return_true: \else: \prg_return_false: \fi: 133 \fi: 134 } (End definition for \xecjk_if_blank_x:n) \int_until_do:nnnn 135 \cs_new_protected:npn \xecjk_int_until_do:nn #1#2 136 { \ xecjk_int_until_do:wn \use_none:n { \reverse_if:n \if_int_compare:w #1#2 } } 137 \cs_new_protected:npn \ xecjk_int_until_do:wn \use_none:n #1 138 { #1 \exp_after:wn \ xecjk_int_until_do:wn \fi: \use_none:n {#1} } (End definition for \xecjk_int_until_do:nn and \ xecjk_int_until_do:wn) \l xecjk_peek_ignore_spaces_bool 139 \cs_new_protected:npn \xecjk_peek_catcode_ignore_spaces:ntf #1#2#3 140 { 141 \cs_set_eq:nn \l peek_search_token #1 \scan_stop: 142 \tl_set:nn \ xecjk_peek_catcode_true:w { \group_align_safe_end: #2 } 143 \tl_set:nn \ xecjk_peek_catcode_false:w { \group_align_safe_end: #3 } 144 \bool_set_false:n \l xecjk_peek_ignore_spaces_bool 145 \group_align_safe_begin: 146 \peek_after:nw \ xecjk_peek_catcode_ignore_spaces_branches:w 147 } 148 \cs_new_protected_nopar:npn \ xecjk_peek_catcode_ignore_spaces_branches:w 149 { 150 \if_meaning:w \l_peek_token \c_space_token 151 \bool_set_true:n \l xecjk_peek_ignore_spaces_bool 152 \exp_after:wn \peek_after:nw 153 \exp_after:wn \ xecjk_peek_catcode_ignore_spaces_branches:w 154 \tex_romannumeral:d 0 155 \else: 156 \if_catcode:w 157 \exp_not:n \l_peek_token \exp_not:n \l peek_search_token 158 \exp_after:wn \exp_after:wn 159 \exp_after:wn \ xecjk_peek_catcode_true:w 160 \else: 161 \exp_after:wn \exp_after:wn 162 \exp_after:wn \ xecjk_peek_catcode_false:w 163 \fi: 164 \fi: 165 } 166 \bool_new:n \l xecjk_peek_ignore_spaces_bool (End definition for \xecjk_peek_catcode_ignore_spaces:ntf) 15

\xecjk_peek_after_ignore_spaces:nw \xecjk_token_value_class:n \xecjk_if_same_class_p:nn \xecjk_if_same_class:nntf \@ifnextchar \futurenonspacelet 167 \cs_new_protected:npn \xecjk_peek_after_ignore_spaces:nw #1 168 { 169 \tl_set:nn \ xecjk_peek_after_do:w { \group_align_safe_end: #1 } 170 \group_align_safe_begin: 171 \peek_after:nw \ xecjk_peek_ignore_spaces_branches:w 172 } 173 \cs_new_protected_nopar:npn \ xecjk_peek_ignore_spaces_branches:w 174 { 175 \if_meaning:w \l_peek_token \c_space_token 176 \exp_after:wn \peek_after:nw 177 \exp_after:wn \ xecjk_peek_ignore_spaces_branches:w 178 \tex_romannumeral:d 0 179 \else: 180 \exp_after:wn \ xecjk_peek_after_do:w 181 \fi: 182 } (End definition for \xecjk_peek_after_ignore_spaces:nw) #1 XƎTEX #1 \catcode 11 12 183 \cs_new_nopar:npn \xecjk_token_value_class:n #1 184 { \XeTeXcharclass \xecjk_token_value_charcode:n #1 } 185 \cs_new_nopar:npn \xecjk_token_value_charcode:n #1 186 { \exp_after:wn \ xecjk_token_value_charcode:w \token_to_meaning:n #1 \q_stop } 187 \cs_new_nopar:npn \ xecjk_token_value_charcode:w #1 ~ #2 ~ #3 \q_stop { `#3 } (End definition for \xecjk_token_value_class:n) 188 \prg_new_conditional:npnn \xecjk_if_same_class:nn #1#2 { p, T, F, TF } 189 { 190 \if_int_compare:w 191 \xecjk_token_value_class:n #1 = \xecjk_token_value_class:n #2 \exp_stop_f: 192 \prg_return_true: \else: \prg_return_false: \fi: 193 } (End definition for \xecjk_if_same_class:nn) 5.3 xecjkactive XƎTEX 194 \keys_define:nn { xecjk / options } 195 { 196 xecjkactive.choice:, 197 xecjkactive / true.code:n = { \makexecjkactive }, 198 xecjkactive / false.code:n = { \makexecjkinactive }, 199 xecjkactive.default:n = { true } 200 } (End definition for xecjkactive This function is documented on page 3.) \makexecjkactive \makexecjkinactive 201 \NewDocumentCommand \makexecjkactive { } { \XeTeXinterchartokenstate = \c_one } 202 \NewDocumentCommand \makexecjkinactive { } { \XeTeXinterchartokenstate = \c_zero } (End definition for \makexecjkactive and \makexecjkinactive) BOM 203 \char_set_catcode_ignore:n { "FEFF } 16

5.4 \g xecjk_class_seq \g xecjk_new_class_seq \xecjk_new_class:n \xecjk_save_class:nn \ xecjk_class_csname:n xecjk 204 \seq_new:n \g xecjk_class_seq 205 \seq_new:n \g xecjk_new_class_seq (End definition for \g xecjk_class_seq and \g xecjk_new_class_seq) #1 206 \cs_new_protected_nopar:npn \xecjk_new_class:n #1 207 { 208 \int_if_exist:ctf { \ xecjk_class_csname:n {#1} } 209 { \ xecjk_error:nx { class-already-defined } {#1} } 210 { 211 \exp_args:nc \newxetexintercharclass { \ xecjk_class_csname:n {#1} } 212 \clist_new:c { g xecjk_#1_range_clist } 213 \seq_gput_right:nn \g xecjk_class_seq {#1} 214 \seq_gput_right:nv \g xecjk_new_class_seq { \ xecjk_class_csname:n {#1} } 215 } 216 } (End definition for \xecjk_new_class:n) XƎTEX #1 #2 217 \cs_new_protected_nopar:npn \xecjk_save_class:nn #1#2 218 { 219 \int_if_exist:ctf { \ xecjk_class_csname:n {#1} } 220 { \ xecjk_error:nx { class-already-defined } {#1} } 221 { 222 \int_const:cn { \ xecjk_class_csname:n {#1} } {#2} 223 \clist_new:c { g xecjk_#1_range_clist } 224 \seq_gput_right:nn \g xecjk_class_seq {#1} 225 } 226 } (End definition for \xecjk_save_class:nn) 227 \cs_new_nopar:npn \ xecjk_class_csname:n #1 { c xecjk_#1_class_int } 228 \cs_new_eq:cn { \ xecjk_class_csname:n { Others } } \l xecjk_tmpa_int 229 \ xecjk_msg_new:nn { class-already-defined } 230 { 231 XeTeX~character~class~`#1'~has~been~already~defined.\\\\ 232 Please~take~another~name. \\ 233 } (End definition for \ xecjk_class_csname:n) xecjk Default CJK FullLeft FullRight Boundary XƎTEX xecjk HalfLeft HalfRight NormalSpace Default abc123 CJK CJK FullLeft FullRight HalfLeft ( [ { HalfRight,.? ) ] } NormalSpace / Boundary Default CJK FullLeft FullRight Boundary XƎTEX 234 \xecjk_save_class:nn { Default } { \c_zero } 235 \xecjk_save_class:nn { CJK } { \c_one } 236 \xecjk_save_class:nn { FullLeft } { \c_two } 237 \xecjk_save_class:nn { FullRight } { \c_three } 238 \xecjk_save_class:nn { Boundary } { \c_two_hundred_fifty_five } 17

(End definition for Default and others.) HalfLeft HalfRight NormalSpace / 239 \xecjk_new_class:n { HalfLeft } 240 \xecjk_new_class:n { HalfRight } 241 \xecjk_new_class:n { NormalSpace } (End definition for HalfLeft, HalfRight, and NormalSpace) \c xecjk_halfleft_chars_clist \c xecjk_halfright_chars_clist \c xecjk_normalspace_chars_clist \c xecjk_fullleft_chars_clist \c xecjk_fullright_chars_clist \c xecjk_cjk_chars_clist xecjk 242 \clist_const:nn \c xecjk_halfleft_chars_clist 243 { "28, "2D, "5B, "60, "7B } 244 \clist_const:nn \c xecjk_halfright_chars_clist 245 { "21, "22, "25, "27, "29, "2C, "2E, "3A, "3B, "3F, "5D, "7D } 246 \clist_const:nn \c xecjk_normalspace_chars_clist { "2F } 247 \clist_const:nn \c xecjk_fullleft_chars_clist 248 { 249 "2018, "201C, "2116, "3008, "300A, "300C, "300E, "3010, "3012, 250 "3014, "3016, "3018, "301A, "301D, "3036, "E76C, "FE59, "FE5B, 251 "FE5D, "FE5F, "FE60, "FE69, "FE6B, "FF03, "FF04, "FF08, "FF20, 252 "FF3B, "FF5B, "FFE0, "FFE1, "FFE5, "FFE6 253 } 254 \clist_const:nn \c xecjk_fullright_chars_clist 255 { 256 "00B7, "2019, "201D, "2014, "2015, "2025, "2026, "2030, "2500, 257 "3001, "3002, "3005, "3006, "3009, "300B, "300D, "300F, "3011, 258 "3015, "3017, "3019, "301B, "301E, "301F, "3041, "3043, "3045, 259 "3047, "3049, "3063, "3083, "3085, "3087, "308E, "309B, "309C, 260 "309D, "309E, "30A1, "30A3, "30A5, "30A7, "30A9, "30C3, "30E3, 261 "30E5, "30E7, "30EE, "30F5, "30F6, "30FB, "30FC, "30FD, "30FE, 262 "FE50, "FE51, "FE52, "FE54, "FE55, "FE56, "FE57, "FE5A, "FE5C, 263 "FE5E, "FE6A, "FF01, "FF05, "FF09, "FF0C, "FF0E, "FF1A, "FF1B, 264 "FF1F, "FF3D, "FF5D, "FF61, "FF63, "FF64, "FF65, "FF67, "FF68, 265 "FF69, "FF6A, "FF6B, "FF6C, "FF6D, "FF6E, "FF6F, "FF70, "FF9E, 266 "FF9F 267 } 268 \clist_const:nn \c xecjk_cjk_chars_clist 269 { Hangul Jamo 270 "1100 -> "11FF, CJK Radicals Supplement 271 "2E80 -> "2EFF, Kangxi Radicals 272 "2F00 -> "2FDF, Ideographic Description Characters 273 "2FF0 -> "2FFF, CJK Symbols and Punctuation 274 "3000 -> "303F, Hiragana 275 "3040 -> "309F, Katakana 276 "30A0 -> "30FF, Bopomofo 277 "3100 -> "312F, 18

Hangul Compatibility Jamo 278 "3130 -> "318F, Kanbun 279 "3190 -> "319F, Bopomofo Extended 280 "31A0 -> "31BF, CJK Strokes 281 "31C0 -> "31EF, Katakana Phonetic Extensions 282 "31F0 -> "31FF, Enclosed CJK Letters and Months 283 "3200 -> "32FF, CJK Compatibility 284 "3300 -> "33FF, CJK Unified Ideographs Extension-A A 285 "3400 -> "4DBF, Yijing Hexagrams Symbols 286 "4DC0 -> "4DFF, CJK Unified Ideographs 287 "4E00 -> "9FFF, Yi Syllables 288 "A000 -> "A48F, Yi Radicals 289 "A490 -> "A4CF, Hangul Jamo Extended-A A 290 "A960 -> "A97F, Hangul Syllables 291 "AC00 -> "D7AF, Kana Supplement 292 "B000 -> "B0FF, Hangul Jamo Extended-B B 293 "D7B0 -> "D7FF, CJK Compatibility Ideographs 294 "F900 -> "FAFF, CJK Compatibility Forms 295 "FE30 -> "FE4F, Halfwidth and Fullwidth Forms 296 "FF00 -> "FFEF, 19

CJK Unified Ideographs Extension-B B 297 "20000 -> "2A6DF, CJK Unified Ideographs Extension-C C 298 "2A700 -> "2B73F, CJK Unified Ideographs Extension-D D 299 "2B740 -> "2B81F, CJK Compatibility Ideographs Supplement 300 "2F800 -> "2FA1F 301 } (End definition for \c xecjk_halfleft_chars_clist and others.) 5.5 \g xecjk_base_class_seq \g xecjk_non_cjk_class_seq \g xecjk_cjk_class_seq \g xecjk_cjk_class_prop \xecjk_class_num:n \xecjkdeclarecharclass \xecjk_declare_char_class:nn \ xecjk_set_char_class_aux:nnw 302 \seq_new:n \g xecjk_base_class_seq 303 \seq_gset_eq:nn \g xecjk_base_class_seq \g xecjk_class_seq 304 \seq_new:n \g xecjk_non_cjk_class_seq 305 \seq_gset_from_clist:nn \g xecjk_non_cjk_class_seq 306 { Default, HalfLeft, HalfRight, NormalSpace, Boundary } 307 \seq_new:n \g xecjk_cjk_class_seq 308 \prop_new:n \g xecjk_cjk_class_prop 309 \cs_new_protected_nopar:npn \ xecjk_save_cjk_class:n #1 310 { 311 \seq_gput_right:nn \g xecjk_cjk_class_seq {#1} 312 \prop_gput:nvn \g xecjk_cjk_class_prop { \ xecjk_class_csname:n {#1} } {#1} 313 \tl_gput_right:nx \g xecjk_check_single_cjk_case_tl 314 { { \exp_not:c { \ xecjk_class_csname:n {#1} } } { \exp_not:n \use_ii:nn } } 315 } 316 \tl_new:n \g xecjk_check_single_cjk_case_tl 317 \cs_generate_variant:nn \prop_gput:nnn { Nvn } 318 \clist_map_function:nn { CJK, FullLeft, FullRight } \ xecjk_save_cjk_class:n (End definition for \g xecjk_base_class_seq and others.) #1 319 \cs_new_nopar:npn \xecjk_class_num:n #1 { \use:c { \ xecjk_class_csname:n {#1} } } (End definition for \xecjk_class_num:n) 320 \NewDocumentCommand \xecjkdeclarecharclass { s > { \TrimSpaces } m m } 321 { 322 \xecjk_declare_char_class:nx {#2} {#3} 323 \IfBooleanT {#1} { \xecjkresetpunctclass } 324 } (End definition for \xecjkdeclarecharclass This function is documented on page 9.) #1 #2 Unicode "1100 -> "11FF 325 \cs_new_protected_nopar:npn \xecjk_declare_char_class:nn #1#2 326 { 327 \clist_set:nn \l xecjk_tmpa_clist {#2} 328 \clist_gconcat:ccn 329 { g xecjk_#1_range_clist } { g xecjk_#1_range_clist } \l xecjk_tmpa_clist 330 \clist_map_inline:nn \l xecjk_tmpa_clist 331 { 332 \str_if_eq:nnf {##1} { -> } 333 { 20

334 \ xecjk_set_char_class_aux:nnw \xecjk_set_char_class:nnn {##1} 335 { \xecjk_class_num:n {#1} } 336 } 337 } 338 } 339 \NewDocumentCommand \ xecjk_set_char_class_aux:nnw 340 { m > { \SplitArgument { 1 } { -> } } m } { #1 #2 } 341 \cs_generate_variant:nn \clist_gconcat:nnn { cc } 342 \cs_generate_variant:nn \xecjk_declare_char_class:nn { nx, nv } (End definition for \xecjk_declare_char_class:nn and \ xecjk_set_char_class_aux:nnw) \ xecjk_set_char_class_catcode:nnn \ xecjk_set_char_class:nnn \ xecjk_check_num_range:nnnn CJK \catcode 12 XƎTEX unicode-letters. tex CJK \catcode 11 CheckSingle CheckSingle \catcode \XeTeXcharclass \l_peek_token \XeTeXcharclass \catcode 343 \cs_new_protected_nopar:npn \ xecjk_set_char_class_catcode:nnn #1#2#3 344 { 345 \ xecjk_check_num_range:nnnn {#1} {#2} \l xecjk_tmpa_int \l xecjk_tmpb_int 346 \int_set:nn \l xecjk_tmpc_int {#3} 347 \int_compare:nnntf 348 { \use:c { \ xecjk_class_csname:n { CJK } } } = \l xecjk_tmpc_int 349 { \cs_set_eq:nn \ xecjk_set_char_catcode:n \char_set_catcode_other:n } 350 { \cs_set_eq:nn \ xecjk_set_char_catcode:n \use_none:n } 351 \xecjk_int_until_do:nn { \l xecjk_tmpa_int > \l xecjk_tmpb_int } 352 { 353 \ xecjk_set_char_catcode:n { \l xecjk_tmpa_int } 354 \XeTeXcharclass \l xecjk_tmpa_int = \l xecjk_tmpc_int 355 \int_incr:n \l xecjk_tmpa_int 356 } 357 } (End definition for \ xecjk_set_char_class_catcode:nnn) \catcode 358 \cs_new_protected_nopar:npn \ xecjk_set_char_class:nnn #1#2#3 359 { 360 \ xecjk_check_num_range:nnnn {#1} {#2} \l xecjk_tmpa_int \l xecjk_tmpb_int 361 \int_set:nn \l xecjk_tmpc_int {#3} 362 \xecjk_int_until_do:nn { \l xecjk_tmpa_int > \l xecjk_tmpb_int } 363 { 364 \XeTeXcharclass \l xecjk_tmpa_int = \l xecjk_tmpc_int 365 \int_incr:n \l xecjk_tmpa_int 366 } 367 } (End definition for \ xecjk_set_char_class:nnn) 368 \cs_new_protected_nopar:npn \ xecjk_check_num_range:nnnn #1#2#3#4 369 { 370 \bool_if:ntf { \xecjk_if_blank_x_p:n {#1} \xecjk_if_blank_x_p:n {#2} } 371 { 372 \int_set:nn #3 { \xecjk_if_blank_x:ntf {#1} {#2} {#1} } 373 \int_set_eq:nn #3 #4 374 } 375 { 376 \int_set:nn #3 { \int_min:nn {#1} { \IfNoValueTF {#2} {#1} {#2} } } 377 \int_set:nn #4 { \int_max:nn {#1} { \IfNoValueTF {#2} {#1} {#2} } } 378 } 379 } (End definition for \ xecjk_check_num_range:nnnn) 21

\xecjk_set_char_class:nnn \ xecjk_set_char_class_eq:nn \normalspacedchars \xecjkresetpunctclass \xecjkresetcharclass \xecjk_inter_class_toks:nnn \xecjk_get_inter_class_toks:nn \xecjk_clear_inter_class_toks:nn #1 #2 Unicode #3 CJK \catcode 380 \cs_new_eq:nn \xecjk_set_char_class:nnn \ xecjk_set_char_class_catcode:nnn 381 \AtEndOfPackage 382 { \cs_set_eq:nn \xecjk_set_char_class:nnn \ xecjk_set_char_class:nnn } (End definition for \xecjk_set_char_class:nnn) #1 #2 #1 383 \cs_new_protected_nopar:npn \ xecjk_set_char_class_eq:nn #1#2 384 { 385 \int_set:nn \l xecjk_tmpa_int { \xecjk_class_num:n {#2} } 386 \clist_map_inline:cn { c xecjk_#1_chars_clist } 387 { \XeTeXcharclass ##1 = \l xecjk_tmpa_int } 388 } (End definition for \ xecjk_set_char_class_eq:nn) 389 \NewDocumentCommand \normalspacedchars { m } 390 { 391 \tl_map_inline:nn {#1} 392 { \XeTeXcharclass `##1 = \xecjk_class_num:n { NormalSpace } } 393 } (End definition for \normalspacedchars This function is documented on page 9.) 394 \NewDocumentCommand \xecjkresetpunctclass { } 395 { 396 \xecjk_declare_char_class:nv { HalfLeft } \c xecjk_halfleft_chars_clist 397 \xecjk_declare_char_class:nv { HalfRight } \c xecjk_halfright_chars_clist 398 \xecjk_declare_char_class:nv { FullLeft } \c xecjk_fullleft_chars_clist 399 \xecjk_declare_char_class:nv { FullRight } \c xecjk_fullright_chars_clist 400 } (End definition for \xecjkresetpunctclass This function is documented on page 9.) xecjk 401 \NewDocumentCommand \xecjkresetcharclass { } 402 { 403 \xecjk_declare_char_class:nv { CJK } \c xecjk_cjk_chars_clist 404 \xecjk_declare_char_class:nv { NormalSpace } \c xecjk_normalspace_chars_clist 405 \xecjkresetpunctclass 406 } (End definition for \xecjkresetcharclass This function is documented on page 9.) 407 \xecjkresetcharclass 408 \cs_new_protected_nopar:npn \xecjk_inter_class_toks:nnn #1#2#3 409 { \XeTeXinterchartoks \xecjk_class_num:n {#1} ~ \xecjk_class_num:n {#2} = {#3} } 410 \cs_generate_variant:nn \xecjk_inter_class_toks:nnn { nnc, nnv, nnx } (End definition for \xecjk_inter_class_toks:nnn) 411 \cs_new_nopar:npn \xecjk_get_inter_class_toks:nn #1#2 412 { \tex_the:d \XeTeXinterchartoks \xecjk_class_num:n {#1} ~ \xecjk_class_num:n {#2} } (End definition for \xecjk_get_inter_class_toks:nn) 413 \cs_new_protected_nopar:npn \xecjk_clear_inter_class_toks:nn #1#2 414 { \xecjk_inter_class_toks:nnn {#1} {#2} { \prg_do_nothing: } } (End definition for \xecjk_clear_inter_class_toks:nn) 22

\xecjk_pre_inter_class_toks:nnn \xecjk_app_inter_class_toks:nnn \xecjk_copy_inter_class_toks:nnnn \xecjk_replace_inter_class_toks:nnnn \xecjk_clear_boundary_and_cjk_toks: 415 \cs_new_protected_nopar:npn \xecjk_pre_inter_class_toks:nnn #1#2#3 416 { 417 \xecjk_inter_class_toks:nnx {#1} {#2} 418 { \exp_not:n {#3} \xecjk_get_inter_class_toks:nn {#1} {#2} } 419 } 420 \cs_generate_variant:nn \xecjk_pre_inter_class_toks:nnn { nnx } (End definition for \xecjk_pre_inter_class_toks:nnn) 421 \cs_new_protected_nopar:npn \xecjk_app_inter_class_toks:nnn #1#2#3 422 { 423 \xecjk_inter_class_toks:nnx {#1} {#2} 424 { \xecjk_get_inter_class_toks:nn {#1} {#2} \exp_not:n {#3} } 425 } 426 \cs_generate_variant:nn \xecjk_app_inter_class_toks:nnn { nnc, nnx } (End definition for \xecjk_app_inter_class_toks:nnn) #3 #4 #1 #2 427 \cs_new_protected_nopar:npn \xecjk_copy_inter_class_toks:nnnn #1#2#3#4 428 { 429 \xecjk_inter_class_toks:nnx {#1} {#2} 430 { \xecjk_get_inter_class_toks:nn {#3} {#4} } 431 } (End definition for \xecjk_copy_inter_class_toks:nnnn) #1 #2 #3 #4 432 \cs_new_protected_nopar:npn \xecjk_replace_inter_class_toks:nnnn #1#2#3#4 433 { 434 \tl_set:nx \l xecjk_tmpa_tl { \xecjk_get_inter_class_toks:nn {#1} {#2} } 435 \tl_replace_all:nnn \l xecjk_tmpa_tl {#3} {#4} 436 \xecjk_inter_class_toks:nnx {#1} {#2} { \exp_not:v \l xecjk_tmpa_tl } 437 } (End definition for \xecjk_replace_inter_class_toks:nnnn) CJK 438 \cs_new_protected_nopar:npn \xecjk_clear_boundary_and_cjk_toks: 439 { \seq_map_function:nn \g xecjk_cjk_class_seq \ xecjk_clear_boundary_and_cjk_toks:n } 440 \cs_new_protected_nopar:npn \ xecjk_clear_boundary_and_cjk_toks:n #1 441 { \xecjk_clear_inter_class_toks:nn { Boundary } {#1} } (End definition for \xecjk_clear_boundary_and_cjk_toks:) 5.6 Default CJK FullL FullR HalfL HalfR Normal Bound Default CJK FullLeft FullRight HalfLeft HalfRight NormalSpace Boundary \xecjk_class_group_begin: \xecjk_class_group_end: 442 \cs_new_eq:nn \xecjk_class_group_begin: \c_group_begin_token 443 \cs_new_eq:nn \xecjk_class_group_end: \c_group_end_token 23

(End definition for \xecjk_class_group_begin: and \xecjk_class_group_end:) 444 \clist_map_inline:nn { Default, HalfLeft, HalfRight, NormalSpace } 445 { 446 \xecjk_inter_class_toks:nnn {#1} { CJK } 447 { 448 \xecjk_class_group_begin: 449 \xecjk_select_font: 450 \xecjk_clear_inter_class_toks:nn {#1} { CJK } 451 \xecjk_clear_boundary_and_cjk_toks: 452 \CJKsymbol 453 } 454 \xecjk_inter_class_toks:nnn { CJK } {#1} { \xecjk_class_group_end: } 455 } 456 \clist_map_inline:nn { Default, HalfLeft, NormalSpace } 457 { 458 \xecjk_inter_class_toks:nnn { Boundary } {#1} 459 { 460 \bool_if:ntf 461 { 462 \l xecjk_xecglue_bool && 463 \skip_if_eq_p:nn \tex_lastskip:d \c_xecjk_space_skip_tl 464 } 465 { 466 \tex_unskip:d 467 \bool_if:ntf 468 { 469 \xecjk_if_last_node_p:n { CJK } 470 \xecjk_if_last_node_p:n { CJK-space } 471 } 472 { \CJKecglue } { ~ } 473 } 474 { 475 \xecjk_if_last_node:ntf { CJK } { \CJKecglue } 476 { \xecjk_if_last_node:nt { CJK-space } { \ xecjk_space_or_xecglue: } } 477 } 478 } 479 \str_if_eq:nnf {#1} { NormalSpace } 480 { \xecjk_app_inter_class_toks:nnn { CJK } {#1} { \CJKecglue } } 481 } 482 \clist_map_inline:nn { Default, HalfRight, NormalSpace } 483 { 484 \xecjk_inter_class_toks:nnn {#1} { Boundary } 485 { 486 \peek_meaning_remove:ntf \tex_italiccorrection:d 487 { \tex_italiccorrection:d { \xecjk_make_node:n { default } } } 488 { 489 \token_if_space:ntf \l_peek_token 490 { { \xecjk_make_node:n { default-space } } } 491 { { \xecjk_make_node:n { default } } } 492 } 493 } 494 \str_if_eq:nnf {#1} { NormalSpace } 495 { \xecjk_pre_inter_class_toks:nnn {#1} { CJK } { \CJKecglue } } 496 } 497 \xecjk_inter_class_toks:nnn { Boundary } { CJK } 498 { 499 \xecjk_check_for_glue: 500 \xecjk_class_group_begin: 501 \xecjk_clear_boundary_and_cjk_toks: 502 \xecjk_select_font: 503 \CJKsymbol 24

504 } \xecjk_check_for_glue: 505 \cs_new_protected_nopar:npn \xecjk_check_for_glue: 506 { 507 \bool_if:ntf 508 { \xecjk_if_last_node_p:n { CJK } \xecjk_if_last_node_p:n { CJK-space } } 509 { \CJKglue } 510 { 511 \bool_if:ntf 512 { 513 \xecjk_if_last_node_p:n { default } 514 \int_compare_p:nnn \etex_lastnodetype:d = \c_ten 515 } 516 { \CJKecglue } 517 { 518 \bool_if:nt 519 { 520 \l xecjk_xecglue_bool && 521 ( \skip_if_eq_p:nn \tex_lastskip:d \c_xecjk_space_skip_tl 522 \skip_if_eq_p:nn \tex_lastskip:d \l xecjk_ecglue_skip ) 523 } 524 { 525 \tex_unskip:d 526 \bool_if:ntf 527 { 528 \xecjk_if_last_node_p:n { default-space } 529 \int_compare_p:nnn \etex_lastnodetype:d = \c_ten 530 \xecjk_if_last_node_p:n { default } 531 } 532 { \CJKecglue } 533 { 534 \bool_if:ntf 535 { 536 \xecjk_if_last_node_p:n { CJK } 537 \xecjk_if_last_node_p:n { CJK-space } 538 } 539 { \bool_if:ntf \l xecjk_reserve_space_bool { ~ } { \CJKglue } } 540 { ~ } 541 } 542 } 543 } 544 } 545 } (End definition for \xecjk_check_for_glue:) \xecjk_if_last_node_p:n \xecjk_if_last_node:ntf 546 \prg_new_conditional:npnn \xecjk_if_last_node:n #1 { p, T, F, TF } 547 { 548 \if_dim:w \use:c { c xecjk_#1_node_dim } = \tex_lastkern:d 549 \prg_return_true: \else: \prg_return_false: \fi: 550 } (End definition for \xecjk_if_last_node:n) \xecjk_def_node:nn \xecjk_make_node:n kern 551 \cs_new_protected_nopar:npn \xecjk_def_node:nn #1#2 552 { 553 \dim_if_exist:ctf { c xecjk_#1_node_dim } 554 { \dim_gset:cn } { \dim_const:cn } 555 { c xecjk_#1_node_dim } {#2} 556 } 557 \cs_new_protected_nopar:npn \xecjk_make_node:n #1 25

558 { 559 \tex_kern:d - \use:c { c xecjk_#1_node_dim } 560 \tex_kern:d \use:c { c xecjk_#1_node_dim } 561 } 562 \xecjk_def_node:nn { CJK } { 11 sp } 563 \xecjk_def_node:nn { CJK-space } { 12 sp } 564 \xecjk_def_node:nn { default } { 13 sp } 565 \xecjk_def_node:nn { default-space } { 14 sp } (End definition for \xecjk_def_node:nn and \xecjk_make_node:n) CJKglue CJKecglue xcjkecglue CJKspace CJK glue 566 \keys_define:nn { xecjk / options } 567 { 568 CJKglue.code:n = 569 { 570 \cs_set_protected_nopar:npn \CJKglue {#1} 571 \xecjk_glue_to_skip:nn {#1} \l xecjk_ccglue_skip 572 } 573 } 574 \skip_new:n \l xecjk_ccglue_skip (End definition for CJKglue This function is documented on page 3.) CJK 575 \keys_define:nn { xecjk / options } 576 { 577 CJKecglue.code:n = 578 { 579 \cs_set_protected_nopar:npn \CJKecglue {#1} 580 \xecjk_glue_to_skip:nn {#1} \l xecjk_ecglue_skip 581 }, 582 xcjkecglue.choice:, 583 xcjkecglue / true.code:n = 584 { 585 \bool_set_true:n \l xecjk_xecglue_bool 586 \cs_set_eq:nn \ xecjk_space_or_xecglue: \CJKecglue 587 }, 588 xcjkecglue / false.code:n = 589 { 590 \bool_set_false:n \l xecjk_xecglue_bool 591 \cs_set_eq:nn \ xecjk_space_or_xecglue: \c_space_tl 592 }, 593 xcjkecglue / unknown.code:n = 594 { 595 \bool_set_true:n \l xecjk_xecglue_bool 596 \cs_set_protected_nopar:npn \CJKecglue {#1} 597 \xecjk_glue_to_skip:nn {#1} \l xecjk_ecglue_skip 598 \cs_set_eq:nn \ xecjk_space_or_xecglue: \CJKecglue 599 }, 600 xcjkecglue.default:n = { true } 601 } 602 \skip_new:n \l xecjk_ecglue_skip 603 \bool_new:n \l xecjk_xecglue_bool (End definition for CJKecglue and xcjkecglue These functions are documented on page 3.) CJK 604 \keys_define:nn { xecjk / options } 605 { 606 CJKspace.bool_set:N = \l xecjk_reserve_space_bool, 607 space.meta:n = { CJKspace = true }, 608 nospace.meta:n = { CJKspace = false } 609 } 26

(End definition for CJKspace This function is documented on page 3.) 610 \xecjk_inter_class_toks:nnn { CJK } { Boundary } 611 { 612 \xecjk_class_group_end: 613 { \xecjk_make_node:n { CJK } } 614 \xecjk_ignore_spaces:w 615 } \xecjk_ignore_spaces:w \xecjk_cjk_and_cjk:n \xecjk_fullright_and_boundary: 616 \cs_new_protected_nopar:npn \xecjk_ignore_spaces:w 617 { 618 \xecjk_peek_catcode_ignore_spaces:ntf \c_math_toggle_token 619 { 620 \bool_if:ntf \l xecjk_peek_ignore_spaces_bool 621 { \ xecjk_space_or_xecglue: } { \CJKecglue } 622 } 623 { 624 \bool_if:ntf \l xecjk_peek_ignore_spaces_bool 625 { 626 \tex_unkern:d \tex_unkern:d 627 { \xecjk_make_node:n { CJK-space } } 628 \bool_if:nt 629 { 630 \token_if_macro_p:n \l_peek_token 631 ( \l xecjk_reserve_space_bool && 632 \token_if_other_p:n \l_peek_token ) 633 } 634 { \ xecjk_space_or_xecglue: } 635 } 636 { \cs_if_exist:nf \l_peek_token \exp_not:n } 637 } 638 } (End definition for \xecjk_ignore_spaces:w) 639 \xecjk_inter_class_toks:nnn { CJK } { CJK } { \xecjk_cjk_and_cjk:n } 640 \cs_new_protected_nopar:npn \xecjk_cjk_and_cjk:n #1 { \CJKglue \CJKsymbol {#1} } (End definition for \xecjk_cjk_and_cjk:n) 641 \xecjk_inter_class_toks:nnn { FullLeft } { CJK } 642 { \xecjk_fullleft_and_cjk: \CJKsymbol } 643 \xecjk_inter_class_toks:nnn { FullRight } { CJK } 644 { \xecjk_fullright_and_cjk: \CJKsymbol } 645 \seq_map_inline:nn \g xecjk_non_cjk_class_seq 646 { 647 \clist_map_inline:nn { FullLeft, FullRight } 648 { 649 \xecjk_inter_class_toks:nnx {#1} {##1} 650 { \exp_not:c { xecjk_default_and_##1:nn } {#1} } 651 \xecjk_inter_class_toks:nnc {##1} {#1} { xecjk_##1_and_default: } 652 } 653 } 654 \xecjk_inter_class_toks:nnn { Boundary } { FullLeft } 655 { \xecjk_boundary_and_fullleft:n } 656 \xecjk_inter_class_toks:nnn { Boundary } { FullRight } 657 { \xecjk_boundary_and_fullright:n } 658 \xecjk_app_inter_class_toks:nnn { FullLeft } { Boundary } { \tex_ignorespaces:d } 659 \xecjk_inter_class_toks:nnn { FullRight } { Boundary } 660 { \xecjk_fullright_and_boundary: } (End definition for \xecjk_fullright_and_boundary:) 27

\xecjk_fullright_and_boundary: \ xecjk_punct_rule:nn \ xecjk_punct_glue:nn \ xecjk_punct_kern:nn \g xecjk_last_punct_tl \xecjk_fullleft_and_cjk: \xecjk_fullleft_and_default: 661 \cs_new_protected_nopar:npn \xecjk_fullright_and_boundary: 662 { \xecjk_fullright_and_default: \tex_ignorespaces:d } (End definition for \xecjk_fullright_and_boundary:) 663 \clist_map_inline:nn { CJK, FullLeft, FullRight } 664 { 665 \clist_map_inline:nn { FullLeft, FullRight } 666 { \xecjk_inter_class_toks:nnc {#1} {##1} { xecjk_#1_and_##1:n } } 667 } / 668 \cs_new_protected_nopar:npn \ xecjk_punct_rule:nn #1#2 669 { 670 \tex_vrule:d 671 width - \ xecjk_use_punct_dim:nnn { bound } {#1} {#2} 672 depth \c_zero_dim 673 height \c_zero_dim \scan_stop: 674 } (End definition for \ xecjk_punct_rule:nn) / 675 \cs_new_protected_nopar:npn \ xecjk_punct_glue:nn #1#2 676 { 677 \ xecjk_punct_hskip:n 678 { 679 \ xecjk_use_punct_dim:nnn { glue } {#1} {#2} 680 minus \dim_eval:n { ( \ xecjk_use_punct_dim:nnn { glue } {#1} {#2} ) / \c_two } 681 } 682 } 683 \cs_new_eq:nn \ xecjk_punct_hskip:n \skip_horizontal:n (End definition for \ xecjk_punct_glue:nn) 684 \cs_new_protected_nopar:npn \ xecjk_punct_kern:nn #1#2 685 { \tex_kern:d \ xecjk_use_punct_dim:nnn { kern } {#1} {#2} } (End definition for \ xecjk_punct_kern:nn) 686 \tl_new:n \g xecjk_last_punct_tl (End definition for \g xecjk_last_punct_tl) 687 \cs_new_protected_nopar:npn \xecjk_fullleft_and_cjk: 688 { 689 \ xecjk_punct_if_middle:ntf \g xecjk_last_punct_tl 690 { 691 \ xecjk_punct_rule:nn \c xecjk_right_tl \g xecjk_last_punct_tl 692 \xecjk_no_break: 693 \ xecjk_punct_glue:nn \c xecjk_left_tl \g xecjk_last_punct_tl 694 } 695 { \xecjk_no_break: } 696 } (End definition for \xecjk_fullleft_and_cjk:) 697 \cs_new_protected_nopar:npn \xecjk_fullleft_and_default: 698 { 699 \ xecjk_punct_if_middle:ntf \g xecjk_last_punct_tl 700 { 701 \ xecjk_punct_rule:nn \c xecjk_right_tl \g xecjk_last_punct_tl 702 \xecjk_class_group_end: \xecjk_no_break: 28

703 \ xecjk_punct_glue:nn \c xecjk_left_tl \g xecjk_last_punct_tl 704 } 705 { \xecjk_class_group_end: \xecjk_no_break: } 706 } (End definition for \xecjk_fullleft_and_default:) \xecjk_fullright_and_cjk: \xecjk_fullright_and_default: \xecjk_default_and_fullleft:nn \xecjk_cjk_and_fullleft:n \xecjk_boundary_and_fullleft:n 707 \cs_new_protected_nopar:npn \xecjk_fullright_and_cjk: 708 { 709 \ xecjk_punct_rule:nn \c xecjk_right_tl \g xecjk_last_punct_tl 710 \ xecjk_punct_glue:nn \c xecjk_right_tl \g xecjk_last_punct_tl 711 \CJKglue 712 } (End definition for \xecjk_fullright_and_cjk:) 713 \cs_new_protected_nopar:npn \xecjk_fullright_and_default: 714 { 715 \ xecjk_punct_rule:nn \c xecjk_right_tl \g xecjk_last_punct_tl 716 \xecjk_class_group_end: 717 \ xecjk_punct_glue:nn \c xecjk_right_tl \g xecjk_last_punct_tl 718 } (End definition for \xecjk_fullright_and_default:) 719 \cs_new_protected_nopar:npn \xecjk_default_and_fullleft:nn #1#2 720 { 721 \xecjk_get_punct_bounds:nn \c xecjk_left_tl {#2} 722 \ xecjk_default_and_fullleft_glue:n {#2} 723 \xecjk_class_group_begin: 724 \xecjk_select_font: 725 \xecjk_clear_inter_class_toks:nn {#1} { FullLeft } 726 \xecjk_clear_boundary_and_cjk_toks: 727 \tl_gset:nx \g xecjk_last_punct_tl {#2} 728 \ xecjk_punct_rule:nn \c xecjk_left_tl {#2} 729 \CJKpunctsymbol {#2} 730 } 731 \cs_new_protected_nopar:npn \ xecjk_default_and_fullleft_glue:n #1 732 { \ xecjk_punct_glue:nn \c xecjk_left_tl {#1} } (End definition for \xecjk_default_and_fullleft:nn) 733 \cs_new_protected_nopar:npn \xecjk_cjk_and_fullleft:n #1 734 { 735 \xecjk_get_punct_bounds:nn \c xecjk_left_tl {#1} 736 \ xecjk_cjk_and_fullleft_glue:n {#1} 737 \tl_gset:nx \g xecjk_last_punct_tl {#1} 738 \ xecjk_punct_rule:nn \c xecjk_left_tl {#1} 739 \CJKpunctsymbol {#1} 740 } 741 \cs_new_protected_nopar:npn \ xecjk_cjk_and_fullleft_glue:n #1 742 { \CJKglue \ xecjk_punct_glue:nn \c xecjk_left_tl {#1} } (End definition for \xecjk_cjk_and_fullleft:n) 743 \cs_new_protected_nopar:npn \xecjk_boundary_and_fullleft:n #1 744 { 745 \xecjk_get_punct_bounds:nn \c xecjk_left_tl {#1} 746 \ xecjk_boundary_and_fullleft_glue:n {#1} 747 \xecjk_class_group_begin: 748 \xecjk_select_font: 749 \xecjk_clear_boundary_and_cjk_toks: 29

750 \tl_gset:nx \g xecjk_last_punct_tl {#1} 751 \ xecjk_punct_rule:nn \c xecjk_left_tl {#1} 752 \CJKpunctsymbol {#1} 753 } 754 \cs_new_protected_nopar:npn \ xecjk_boundary_and_fullleft_glue:n #1 755 { 756 \int_compare:nnnf \etex_lastnodetype:d = \c_one 757 { \ xecjk_punct_glue:nn \c xecjk_left_tl {#1} } 758 } (End definition for \xecjk_boundary_and_fullleft:n) \xecjk_default_and_fullright:nn \xecjk_boundary_and_fullright:n \xecjk_cjk_and_fullright:n 759 \cs_new_protected_nopar:npn \xecjk_default_and_fullright:nn #1#2 760 { 761 \xecjk_get_punct_bounds:nn \c xecjk_right_tl {#2} 762 \ xecjk_default_and_fullright_glue:n {#2} 763 \xecjk_class_group_begin: 764 \xecjk_select_font: 765 \xecjk_clear_inter_class_toks:nn {#1} { FullRight } 766 \xecjk_clear_boundary_and_cjk_toks: 767 \tl_gset:nx \g xecjk_last_punct_tl {#2} 768 \ xecjk_punct_if_middle:nt {#2} 769 { \ xecjk_punct_rule:nn \c xecjk_left_tl {#2} } 770 \xecjk_fullright_symbol:n {#2} 771 } (End definition for \xecjk_default_and_fullright:nn) 772 \cs_new_protected_nopar:npn \xecjk_boundary_and_fullright:n #1 773 { 774 \xecjk_get_punct_bounds:nn \c xecjk_right_tl {#1} 775 \ xecjk_default_and_fullright_glue:n {#1} 776 \xecjk_class_group_begin: 777 \xecjk_select_font: 778 \xecjk_clear_boundary_and_cjk_toks: 779 \tl_gset:nx \g xecjk_last_punct_tl {#1} 780 \ xecjk_punct_if_middle:nt {#1} 781 { \ xecjk_punct_rule:nn \c xecjk_left_tl {#1} } 782 \xecjk_fullright_symbol:n {#1} 783 } (End definition for \xecjk_boundary_and_fullright:n) 784 \cs_new_protected_nopar:npn \xecjk_cjk_and_fullright:n #1 785 { 786 \xecjk_get_punct_bounds:nn \c xecjk_right_tl {#1} 787 \ xecjk_cjk_and_fullright_glue:n {#1} 788 \tl_gset:nx \g xecjk_last_punct_tl {#1} 789 \ xecjk_punct_if_middle:nt {#1} 790 { \ xecjk_punct_rule:nn \c xecjk_left_tl {#1} } 791 \xecjk_fullright_symbol:n {#1} 792 } (End definition for \xecjk_cjk_and_fullright:n) \ xecjk_cjk_and_fullright_glue:n \ xecjk_default_and_fullright_glue:n 793 \cs_new_protected_nopar:npn \ xecjk_cjk_and_fullright_glue:n #1 794 { 795 \ xecjk_punct_if_long:ntf {#1} 796 { \CJKglue } 797 { 798 \ xecjk_punct_if_middle:ntf {#1} 799 { \xecjk_no_break: \ xecjk_punct_glue:nn \c xecjk_right_tl {#1} } 30

800 { \xecjk_no_break: } 801 } 802 } 803 \cs_new_eq:nn \ xecjk_default_and_fullright_glue:n \ xecjk_cjk_and_fullright_glue:n (End definition for \ xecjk_cjk_and_fullright_glue:n and \ xecjk_default_and_fullright_glue:n) \xecjk_fullleft_and_fullleft:n \xecjk_fullleft_and_fullright:n \xecjk_fullright_and_fullleft:n \xecjk_fullright_and_fullright:n 804 \cs_new_protected_nopar:npn \xecjk_fullleft_and_fullleft:n #1 805 { 806 \xecjk_no_break: 807 \xecjk_get_punct_bounds:nn \c xecjk_left_tl {#1} 808 \xecjk_get_punct_kerning:on \g xecjk_last_punct_tl {#1} 809 \ xecjk_punct_kern:nn \g xecjk_last_punct_tl {#1} 810 \tl_gset:nx \g xecjk_last_punct_tl {#1} 811 \CJKpunctsymbol {#1} 812 } (End definition for \xecjk_fullleft_and_fullleft:n) 813 \cs_new_protected_nopar:npn \xecjk_fullleft_and_fullright:n #1 814 { 815 \xecjk_no_break: 816 \xecjk_get_punct_bounds:nn \c xecjk_right_tl {#1} 817 \xecjk_get_punct_kerning:on \g xecjk_last_punct_tl {#1} 818 \ xecjk_punct_kern:nn \g xecjk_last_punct_tl {#1} 819 \tl_gset:nx \g xecjk_last_punct_tl {#1} 820 \xecjk_no_break: 821 \xecjk_fullright_symbol:n {#1} 822 } (End definition for \xecjk_fullleft_and_fullright:n) 823 \cs_new_protected_nopar:npn \xecjk_fullright_and_fullleft:n #1 824 { 825 \xecjk_get_punct_bounds:nn \c xecjk_left_tl {#1} 826 \xecjk_get_punct_kerning:on \g xecjk_last_punct_tl {#1} 827 \ xecjk_punct_kern:nn \g xecjk_last_punct_tl {#1} 828 \tl_gset:nx \g xecjk_last_punct_tl {#1} 829 \ xecjk_punct_break: 830 \CJKpunctsymbol {#1} 831 } (End definition for \xecjk_fullright_and_fullleft:n) 832 \cs_new_protected_nopar:npn \xecjk_fullright_and_fullright:n #1 833 { 834 \xecjk_get_punct_bounds:nn \c xecjk_right_tl {#1} 835 \xecjk_get_punct_kerning:on \g xecjk_last_punct_tl {#1} 836 \ xecjk_punct_kern:nn \g xecjk_last_punct_tl {#1} 837 \tl_gset:nx \g xecjk_last_punct_tl {#1} 838 \xecjk_no_break: 839 \xecjk_fullright_symbol:n {#1} 840 } (End definition for \xecjk_fullright_and_fullright:n) 31