From 5bed059ee6199aca34f267e3b0d97ea59bb32ac4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 20 May 2012 23:58:58 +0000 Subject: xecjk (18may12) git-svn-id: svn://tug.org/texlive/trunk@26516 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/xelatex/xecjk/README | 8 +- Master/texmf-dist/doc/xelatex/xecjk/README.txt | 8 +- .../doc/xelatex/xecjk/example-autofake.tex | 11 +- .../doc/xelatex/xecjk/example-fallback.tex | 11 +- .../doc/xelatex/xecjk/example-subCJKblock.tex | 11 +- Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf | Bin 435091 -> 482848 bytes Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx | 399 ++++++++++++++++----- Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins | 22 +- Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | 90 ++--- 9 files changed, 407 insertions(+), 153 deletions(-) diff --git a/Master/texmf-dist/doc/xelatex/xecjk/README b/Master/texmf-dist/doc/xelatex/xecjk/README index 50228abf752..e0f5d1182cc 100644 --- a/Master/texmf-dist/doc/xelatex/xecjk/README +++ b/Master/texmf-dist/doc/xelatex/xecjk/README @@ -14,7 +14,9 @@ may observe http://code.google.com/p/ctex-kit/updates/list -- Sun Wenchang -- Leo Liu -- Qing Lee + Author: + Wenchang Sun + Current Maintainers: + Leo Liu + Qing Lee diff --git a/Master/texmf-dist/doc/xelatex/xecjk/README.txt b/Master/texmf-dist/doc/xelatex/xecjk/README.txt index 50228abf752..e0f5d1182cc 100644 --- a/Master/texmf-dist/doc/xelatex/xecjk/README.txt +++ b/Master/texmf-dist/doc/xelatex/xecjk/README.txt @@ -14,7 +14,9 @@ may observe http://code.google.com/p/ctex-kit/updates/list -- Sun Wenchang -- Leo Liu -- Qing Lee + Author: + Wenchang Sun + Current Maintainers: + Leo Liu + Qing Lee diff --git a/Master/texmf-dist/doc/xelatex/xecjk/example-autofake.tex b/Master/texmf-dist/doc/xelatex/xecjk/example-autofake.tex index beaaf0ec024..818b8eb9e0f 100644 --- a/Master/texmf-dist/doc/xelatex/xecjk/example-autofake.tex +++ b/Master/texmf-dist/doc/xelatex/xecjk/example-autofake.tex @@ -6,11 +6,14 @@ %% %% xeCJK.dtx (with options: `ex-autofake') %% -%% Version 3.0.4 (06-May-2012) +%% Version 3.0.5 (19-May-2012) %% ----------------------------------------------------------------- -%% Author: Wenchang Sun -%% Maintainer: Leo Liu -%% Qing Lee +%% Author: +%% Wenchang Sun +%% Current Maintainers: +%% Leo Liu +%% Qing Lee +%% %% Copyright (C) 2007--2012 Wenchang Sun %% %% This file may be distributed and/or modified under the diff --git a/Master/texmf-dist/doc/xelatex/xecjk/example-fallback.tex b/Master/texmf-dist/doc/xelatex/xecjk/example-fallback.tex index bf5f8fd3e23..cfd88fd9c64 100644 --- a/Master/texmf-dist/doc/xelatex/xecjk/example-fallback.tex +++ b/Master/texmf-dist/doc/xelatex/xecjk/example-fallback.tex @@ -6,11 +6,14 @@ %% %% xeCJK.dtx (with options: `ex-fallback') %% -%% Version 3.0.4 (06-May-2012) +%% Version 3.0.5 (19-May-2012) %% ----------------------------------------------------------------- -%% Author: Wenchang Sun -%% Maintainer: Leo Liu -%% Qing Lee +%% Author: +%% Wenchang Sun +%% Current Maintainers: +%% Leo Liu +%% Qing Lee +%% %% Copyright (C) 2007--2012 Wenchang Sun %% %% This file may be distributed and/or modified under the diff --git a/Master/texmf-dist/doc/xelatex/xecjk/example-subCJKblock.tex b/Master/texmf-dist/doc/xelatex/xecjk/example-subCJKblock.tex index 6f8a445d604..df2d9f5d3c2 100644 --- a/Master/texmf-dist/doc/xelatex/xecjk/example-subCJKblock.tex +++ b/Master/texmf-dist/doc/xelatex/xecjk/example-subCJKblock.tex @@ -6,11 +6,14 @@ %% %% xeCJK.dtx (with options: `ex-block') %% -%% Version 3.0.4 (06-May-2012) +%% Version 3.0.5 (19-May-2012) %% ----------------------------------------------------------------- -%% Author: Wenchang Sun -%% Maintainer: Leo Liu -%% Qing Lee +%% Author: +%% Wenchang Sun +%% Current Maintainers: +%% Leo Liu +%% Qing Lee +%% %% Copyright (C) 2007--2012 Wenchang Sun %% %% This file may be distributed and/or modified under the diff --git a/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf b/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf index fcb099c8dc9..a61f3f51bff 100644 Binary files a/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf and b/Master/texmf-dist/doc/xelatex/xecjk/xeCJK.pdf differ diff --git a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx index 02c37f43c4b..62314d105a4 100644 --- a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx +++ b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx @@ -21,9 +21,11 @@ may observe http://code.google.com/p/ctex-kit/updates/list -- Sun Wenchang -- Leo Liu -- Qing Lee + Author: + Wenchang Sun + Current Maintainers: + Leo Liu + Qing Lee % %<*internal> @@ -38,11 +40,14 @@ may observe \keepsilent \preamble - Version 3.0.4 (06-May-2012) + Version 3.0.5 (19-May-2012) ----------------------------------------------------------------- - Author: Wenchang Sun - Maintainer: Leo Liu - Qing Lee + Author: + Wenchang Sun + Current Maintainers: + Leo Liu + Qing Lee + Copyright (C) 2007--2012 Wenchang Sun This file may be distributed and/or modified under the @@ -82,7 +87,9 @@ may observe \documentclass{l3doc} \hypersetup{pdfstartview=FitH} \usepackage{xeCJK} +\fvset{formatcom=\CJKfixedspacing} \usepackage{metalogo} +\linespread{1.1} \setlist{nosep} \setmainfont[Ligatures=TeX]{TeX Gyre Pagella} \setmonofont{Inconsolata} @@ -110,6 +117,7 @@ may observe \let\defaultvar\textbf \def\argbrace#1{\char`\{#1\char`\}} \@addtoreset{CodelineNo}{section} +\def\tokslink#1{\hyperlink{#1}{\ding{51}}} \makeatother \begin{document} \DocInput{\jobname.dtx} @@ -123,13 +131,14 @@ may observe % \author{\texttt{ctex.org}\thanks{\url{http://www.ctex.org}}} % \date{\filedate\qquad\fileversion} % \maketitle +% +% \tableofcontents % % \begin{documentation} % % \section{简介} % -% \pkg{xeCJK} 是一个 \XeLaTeX 宏包,用于排版 CJK 文字,包括字体选择和标点控制 -% 等。主要特点: +% \pkg{xeCJK} 是一个 \XeLaTeX 宏包,用于排版中日韩(CJK)文字。主要功能: % \begin{enumerate} % \item 分别设置 CJK 和英文字体; % \item 自动忽略 CJK 文字间的空格而保留其它空格,允许在非标点汉字和英文 @@ -138,25 +147,56 @@ may observe % \item 自动调整中英文间空白。 % \end{enumerate} % -% \pkg{xeCJK} 的原始作者是孙文昌,目前由 -% \texttt{ctex-kit} \footnote{\url{http://code.google.com/p/ctex-kit/}}项目组 -% 维护,主要维护者是刘海洋\footnote{\nolinkurl{leoliu.pku@gmail.com}} 和 -% 李清\footnote{\nolinkurl{sobenlee@gmail.com}}。 -% -% \section{使用方法} -% % \pkg{xeCJK} 使用了 \XeTeX 的一些最新特性,需要 \XeTeX{} |0.9995.0 [2009/06/29]| 以 -% 后的版本。\pkg{xeCJK} 还依赖 \pkg{fontspec}% -% \footnote{\url{http://mirrors.ctan.org/macros/latex/contrib/fontspec}}宏包来调用系统字体。 +% 后的版本。\pkg{xeCJK} 的依赖 \LaTeX~3 项目的 \pkg{expl3} 宏包,并依赖 +% \pkg{fontspec}\footnote{\url{http://mirrors.ctan.org/macros/latex/contrib/fontspec}} +% 宏包来调用系统字体。个别兼容性功能需要 \pkg{CJK} 宏包的支持。 % -% \pkg{xeCJK} 提供了将在 \ref{sec:xeCJK-opt} 节介绍的一些 \meta{key}|=|\meta{var} 形式的 -% 宏包选项,你可以在调用宏包的时候直接设置这些选项,也可以在调用宏包之后使用 |\xeCJKsetup| 来 -% 设置这些选项。 +% \pkg{xeCJK} 的原始作者是孙文昌,2009 年 5 月起宏包被收入 +% \texttt{ctex-kit}\footnote{\url{http://code.google.com/p/ctex-kit/}}项目进行 +% 维护,目前主要维护者是刘海洋\footnote{\nolinkurl{leoliu.pku@gmail.com}} 和 +% 李清\footnote{\nolinkurl{sobenlee@gmail.com}}。 % -% 有些选项或命令后面带有 \hypertarget{expstar}{\hyperlink{expstar}{$\star$}} 号,这表示这 -% 个选项或命令只能在导言区中使用,而 \hypertarget{rexpstar}{\hyperlink{rexpstar}{\ding{73}}} -% 号则表示这个选项或命令只能在导言区使用,并且只影响随后定义的 CJK 字体。其余不带特殊标记的 -% 选项或命令,如果没有特别说明,可以在导言区或正文中使用。 +% \section{基本用法} +% +% 与其他 \LaTeX{} 宏包一样,引入 \pkg{xeCJK} 宏包只要在导言区使用 +% \begin{verbatim} +% \usepackage{xeCJK} +% \end{verbatim} +% 在引入 \pkg{xeCJK} 宏包之后,只要设置 CJK 文字的字体,就可以在文档中使用中日 +% 韩文字了。 +% +% 可以在各种文档类中使用 \pkg{xeCJK} 宏包,最简单的示例是: +% \begin{verbatim} +% \documentclass{article} +% \usepackage{xeCJK} +% \setCJKmainfont{SimSun} +% +% \begin{document} +% 中文 \LaTeX 示例。 +% \end{document} +% \end{verbatim} +% 上述示例设置了中文字体 SimSun(宋体)。运行此示例要求系统安装了设置的字体, +% 源文件用 UTF-8 编码保存,使用 \XeLaTeX{} 编译。 +% +% \pkg{xeCJK} 只提供了字体和标点控制等基本 CJK 语言支持。对于中文文档,可以使 +% 用更为高层的 \pkg{ctex} 宏包或文档类,它将自动调用 \pkg{xeCJK} 并设置好中文 +% 字体,同时提供了进一步的本地化支持。详细内容参看 \pkg{ctex} 宏包\footnote{% +% \url{http://mirrors.ctan.org/language/chinese/ctex/}}的说明。 +% +% \pkg{xeCJK} 提供了大量选项,可以在宏包调用时作为宏包选项或用 |\xeCJKsetup| +% 命令进行设置,详见 \ref{subsec:opts}~节。除了 |\setCJKmainfont| 命令, +% \pkg{xeCJK} 还提供了许多其他命令设置和选择中文字体,详见 +% \ref{subsec:fontset}~节。其他更详细的功能也都将在下面详细说明。 +% +% \section{用户手册} +% +% \subsection{宏包选项} +% \label{subsec:opts} +% +% \pkg{xeCJK} 以 \meta{key}|=|\meta{var} 的形式提供宏包选项,你可以在调用宏包 +% 的时候直接设置这些选项,也可以在调用宏包之后使用 |\xeCJKsetup| 来设置这些选 +% 项。 % % \begin{function}{\xeCJKsetup} % \begin{syntax} @@ -175,7 +215,10 @@ may observe % \end{verbatim} % \end{function} % -% \subsection{宏包选项}\label{sec:xeCJK-opt} +% 有些选项或命令后面带有 \hypertarget{expstar}{\hyperlink{expstar}{$\star$}} 号,这表示这 +% 个选项或命令只能在导言区中使用,而 \hypertarget{rexpstar}{\hyperlink{rexpstar}{\ding{73}}} +% 号则表示这个选项或命令只能在导言区使用,并且只影响随后定义的 CJK 字体。其余不带特殊标记的 +% 选项或命令,如果没有特别说明,可以在导言区或正文中使用。 % % 下列选项使用加粗的形式来表示 \pkg{xeCJK} 的默认设置。 % @@ -230,7 +273,7 @@ may observe % % \begin{function}{CJKecglue} % \begin{syntax} -% CJKecglue = \argbrace{\ } +% CJKecglue = \Arg{glue} % \end{syntax} % 设置 CJK 文字与西文、CJK 文字与行内数学公式之间的间距,默认值是一个空格。使用这个 % 选项设置的 |glue| 最好也要用一定的弹性。请注意,这里设置的 |glue| 只影响 @@ -256,7 +299,7 @@ may observe % % \begin{function}{InlineEnv,InlineEnv+,InlineEnv-} % \begin{syntax} -% CheckSingle = \argbrace{env1, env2, env3, ...} +% InlineEnv = \argbrace{env1, env2, env3, ...} % \end{syntax} % 在使用 |CheckSingle| 选项的时候,\pkg{xeCJK} 会将 CJK 文字后接着的 \LaTeX 环境的 % 开始 |\begin{...}| 和结束 |\end{...}| 视为断行的地方,如果有某些特殊 @@ -268,7 +311,7 @@ may observe % AutoFallBack = \meta{\TFF} % \end{syntax} % 当文档中有个别生僻字时,可以使用这个选项,自动使用预先设置好的后备字体来输出这些生僻 -% 字。后备字体的设置方法将在 \ref{sec:xeCJK-font} 节中介绍。 +% 字。后备字体的设置方法将在 \ref{subsec:fontset} 节中介绍。 % \end{function} % % \begin{function}[rEXP]{AutoFakeBold} @@ -349,7 +392,7 @@ may observe % 省设置不满意,可以通过这一选项来改变它。为了使得标点所占的宽度能够适应字体大小的变化, % 这里设置的 |dimen| 的单位最好用 |em| 等相对距离单位,而不建议使用诸如 |pt| 之类的 % 绝对距离单位。这里的设置对除了 |plain| 以外的所有标点处理格式都有效。同时,这里的 -% 设置对所有的 CJK 标点都生效,如果只要设置部分标点,请使用 \ref{sec:xeCJK-ps} 节的 +% 设置对所有的 CJK 标点都生效,如果只要设置部分标点,请使用 \ref{subsec:punct} 节的 % |\xeCJKsetwidth|。 % \end{function} % @@ -361,15 +404,19 @@ may observe % 这一选项改变这一设置。 % \end{function} % -% \subsection{CJK 字体族声明方式}\label{sec:xeCJK-font} +% \subsection{字体设置与选择} +% \label{subsec:fontset} % % \begin{function}[EXP]{\setCJKmainfont} % \begin{syntax} % \cs{setCJKmainfont} \oarg{font features} \Arg{font name} % \end{syntax} -% 设置正文罗马族的 CJK 字体,最后两个参数的意义请参考 \pkg{fontspec} 宏包。影响 -% |\rmfamily| 和 |\textrm| 的字体。需要说明的是 \pkg{xeCJK} 修改了 -% |AutoFakeBold| 和 |AutoFakeSlant| 选项,以便配合全局伪粗体和伪斜体的设定。 +% 设置正文罗马族的 CJK 字体,影响 |\rmfamily| 和 |\textrm| 的字体。后面两个 +% 参数继承自 \pkg{fontspec} 宏包, \meta{font features} 表示字体属性选项, +% \meta{font name} 是字体名。字体名可以是字体族名,也可以是字体的文件名,查 +% 找字体名见 \ref{subsubsec:fontsearch}~节;可用的字体属性选项参见 +% \pkg{fontspec} 宏包的文档。需要说明的是 \pkg{xeCJK} 修改了 |AutoFakeBold| +% 和 |AutoFakeSlant| 选项,以便配合全局伪粗体和伪斜体的设定。 % \end{function} % % \begin{function}{AutoFakeBold,AutoFakeSlant} @@ -566,8 +613,83 @@ may observe % 之后,就设置了 |SimSun| 是 |KaiTi_GB2312| 的备用字体,而 |SimSun-ExtB| 是 % |SimSun| 的备用字体。 % \end{function} -% -% \subsection{CJK 分区字体设置}\label{sec:xeCJK-block} +% +% \subsubsection{\texorpdfstring{\XeTeX}{XeTeX} 的字体名查找} +% \label{subsubsec:fontsearch} +% +% 由于在 \pkg{fontspec} 宏包文档中缺少关于如何查看 \XeTeX{} 可用字体名的说明, +% 这里略作说明。 +% +% \XeTeX{} 通常使用 fontconfig 库查找和调用字体,因此,可以用 |fc-list| 命令显 +% 示可用的字体。在命令行(Windows 的“命令提示符”,Linux 的 Console)下运行以 +% 下命令: +% \begin{verbatim} +% fc-list > fontlist.txt +% \end{verbatim} +% 可以将系统中所有安装的字体列表存入 \file{fontlist.txt} 文件中(可能很长)。 +% +% |fc-list| 命令列出的信息很多,而且在安装字体较多的 Windows 系统上的输出将非 +% 常庞大,如其中可能包含: +% \begin{verbatim}[formatcom=\fontspec{CMU Typewriter Text}\CJKfixedspacing] +% 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 +% \end{verbatim} +% 在 \pkg{fontspec} 或 \pkg{xeCJK} 中使用的字体族名是上面列表中冒号前的部分。 +% 例如可以使用 +% \begin{verbatim} +% \setmainfont{Times New Roman} +% \setCJKmainfont{SimSun} % 或者 \setCJKmainfont{宋体} +% \end{verbatim} +% 来设置字体。 +% +% 为了方便起见,|fc-list| 命令也可以加上各种选项控制输出格式,例如如果只要列出 +% 所有的中文字体的字体族名,可以用命令: +% \begin{verbatim} +% fc-list -f "%{family}\n" :lang=zh > zhfont.txt +% \end{verbatim} +% 这样就把字体列表保存在文件 \file{zhfont.txt} 中\footnote{由于汉字编码原因, +% Windows 下总需要把字体列表输出的文件中防止乱码。}。这样列出的字体列表就比较 +% 简明易用,如 Windows 下预装的中文字体: +% \begin{verbatim} +% Arial Unicode MS +% FangSong,仿宋 +% KaiTi,楷体 +% Microsoft YaHei,微软雅黑 +% MingLiU,細明體 +% NSimSun,新宋体 +% PMingLiU,新細明體 +% SimHei,黑体 +% SimSun,宋体 +% \end{verbatim} +% 要列出日文和韩文的字体,可以把 |:lang=zh| 选项中的 |zh| 改成 |ja| 或 |ko|。 +% +% \pkg{fontspec} 和 \pkg{xeCJK} 也可以使用字体的文件名访问字体。例如 Windows +% 下的宋体也可以使用命令: +% \begin{verbatim} +% \setCJKmainfont{simsun.ttc} +% \end{verbatim} +% 来设置。设置字体文件名的相关选项和语法在 \pkg{fontspec} 宏包手册中叙述甚详, +% 这里不再赘述。有个别字体名不规范的中文字体,\pkg{xeCJK} 宏包可能无法正确地通 +% 过字体名访问,那么也可以使用这种方式设置。 +% +% \subsection{CJK 分区字体设置} +% \label{subsec:block} % % 众所周知,CJK 文字数量极其庞大,单一的字体不可能涵盖所有的 CJK 文字。\pkg{xeCJK} 可 % 以在同一 CJK 字体族下,自动使用不同的字体输出 CJK 字符范围内不同区块里的文字。首先要 @@ -582,14 +704,16 @@ may observe % \begin{verbatim} % { `中 -> `文 , "3400 -> "4DBF , "5000 -> "7000 , `汉 , `字 , "3500 } % \end{verbatim} -% 的形式。使用 +% 的形式。需要注意的是,这里设置的 \meta{block range} 除非确实需要(例如某些特殊字体使用 +% 了 |Unicode| 中的私人使用区的情况),否则不要超出源代码中预设的 +% \hyperlink{CJKcharclass}{CJK 文字范围}。使用 % \begin{verbatim} % \xeCJKDeclareSubCJKBlock{SPUA}{ "E400 -> "E4DA , "E500 -> "E5E8 , "E600 -> "E6CE } % \xeCJKDeclareSubCJKBlock{Ext-B}{ "20000 -> "2A6DF } % \end{verbatim} -% 就声明了 |SPUA| 和 |Ext-B| 这两个个子分区。同时在 \ref{sec:xeCJK-font} 节介绍的 +% 就声明了 |SPUA| 和 |Ext-B| 这两个个子分区。同时在 \ref{subsec:fontset} 节介绍的 % CJK 字体设置命令的 \meta{font features} 里新建了 |SPUA| 和 |Ext-B| 这两个选项。 -% 新建的这两个选项的使用方法跟 \ref{sec:xeCJK-font} 介绍的 |FallBack| 类似。可以 +% 新建的这两个选项的使用方法跟 \ref{subsec:fontset} 介绍的 |FallBack| 类似。可以 % 通过它们来设置字体。例如,使用 % \begin{verbatim} % \setCJKmainfont[SPUA=SunmanPUA,Ext-B=SimSun-ExtB]{SimSun} @@ -623,7 +747,7 @@ may observe % \begin{syntax} % \cs{xeCJKDeclareCharClass} \Arg{class} \Arg{class range} % \end{syntax} -% \meta{class range} 的格式和 \ref{sec:xeCJK-block} 节的 \meta{block range} 相同。 +% \meta{class range} 的格式和 \ref{subsec:block} 节的 \meta{block range} 相同。 % \meta{class} 的有效值见源代码(第 \ref{sec:xeCJK-class-set} 节)。\pkg{xeCJK} 已 % 经支持 |Unicode| 中所有 CJK 文字和标点。一般来说,不要轻易改变字符类别。 % \end{function} @@ -643,7 +767,8 @@ may observe % 在 \meta{char list} 中出现的字符两端不自动添加空格,默认设置是 |/|。 % \end{function} % -% \subsection{设置标点宽度和间距}\label{sec:xeCJK-ps} +% \subsection{设置标点宽度和间距} +% \label{subsec:punct} % % 这里的设置对除了 |plain| 以外的所有标点处理格式都有效。 % @@ -669,7 +794,16 @@ may observe % \end{verbatim} % \end{function} % -% \section{兼容性} +% \section{已知问题和兼容性} +% +% 新版本的 \pkg{xeCJK} 完全使用 \LaTeX3 的语法来编写,受限于目前 |expl3| 宏包的相关 +% 工具的实现方式,在 CJK 文字后面使用 |\outer| 宏时会出现类似 +% \begin{verbatim} +% ! Forbidden control sequence found while scanning use of \token_if_eq_meaning:NNTF +% \end{verbatim} +% 的错误,在 |\outer| 宏前面加上 |\relax| 可以暂时避免这个错误。目前已知的有 \pkg{cprotect} +% 宏包提供的 |\cprotect|,这时你也可以暂时用 |\icprotect| 代替 |\cprotect|。 +% \footnote{\url{http://code.google.com/p/ctex-kit/issues/detail?id=87}} % % 为了与 \pkg{CJKnumb} 和 \pkg{CJKulem} 宏包兼容,\pkg{xeCJK} 使用并重新定义了 % \pkg{CJK} 宏包的部分宏命令,如 |\CJKfamily|、|\CJKsymbol| 和 |\CJKpunctsymbol| 等。 @@ -679,8 +813,10 @@ may observe % 可以在 \pkg{xeCJK} 之后载入 \pkg{CJKfntef} 宏包,以实现汉字加点等。 % % \pkg{xeCJK} 依赖 \XeTeX 的 |\XeTeXinterchartoks| 机制,与使用相同机制的宏包(例如 -% \pkg{polyglossia})会存在大小不一的冲突。 +% \pkg{polyglossia})会存在大小不一的冲突。\pkg{xeCJK} 虽然为此作了一些处理,但与它们 +% 共同使用时应该小心。 % +% \clearpage % %\end{documentation} % @@ -696,7 +832,7 @@ may observe % \begin{macrocode} \RequirePackage{xparse} \RequirePackage{l3keys2e} -\ProvidesExplPackage {xeCJK} {2012/05/06} {3.0.4} +\ProvidesExplPackage {xeCJK} {2012/05/19} {3.0.5} {package for typesetting CJK scripts with XeLaTeX} % \end{macrocode} % @@ -704,13 +840,14 @@ may observe % {\xeCJK_msg_new:nn ,\xeCJK_error:n,\xeCJK_error:nx, % \xeCJK_warning:nx,\xeCJK_info:nx,\xeCJK_info:nxx} % \begin{macrocode} -\cs_new_nopar:Npn \xeCJK_msg_new:nn { \msg_new:nnn { xeCJK } } -\cs_new_nopar:Npn \xeCJK_error:n { \msg_error:nn { xeCJK } } -\cs_new_nopar:Npn \xeCJK_error:nx { \msg_error:nnx { xeCJK } } -\cs_new_nopar:Npn \xeCJK_warning:n { \msg_warning:nn { xeCJK } } -\cs_new_nopar:Npn \xeCJK_warning:nx { \msg_warning:nnx { xeCJK } } -\cs_new_nopar:Npn \xeCJK_info:nx { \msg_info:nnx { xeCJK } } -\cs_new_nopar:Npn \xeCJK_info:nxx { \msg_info:nnxx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_msg_new:nn { \msg_new:nnn { xeCJK } } +\cs_new_nopar:Npn \xeCJK_error:n { \msg_error:nn { xeCJK } } +\cs_new_nopar:Npn \xeCJK_error:nx { \msg_error:nnx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_warning:n { \msg_warning:nn { xeCJK } } +\cs_new_nopar:Npn \xeCJK_warning:nx { \msg_warning:nnx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_warning:nxx { \msg_warning:nnxx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_info:nx { \msg_info:nnx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_info:nxx { \msg_info:nnxx { xeCJK } } % \end{macrocode} % \end{macro} % @@ -803,7 +940,7 @@ may observe % \begin{macrocode} \cs_new_nopar:Nn \xeCJK_new_class:n { - \exp_after:wN \newXeTeXintercharclass \cs:w xeCJK_#1_class\cs_end: + \exp_args:Nc \newXeTeXintercharclass { xeCJK_#1_class } \clist_gclear_new:c { g_xeCJK_#1_range_clist } \seq_gput_right:Nv \g_xeCJK_class_seq { xeCJK_#1_class } } @@ -846,7 +983,7 @@ may observe % \begin{macro}[internal]{\xeCJK_class_num:n} % |#1| 为字符类别名称,用于取得字符类别对应的编号。 % \begin{macrocode} -\cs_new_nopar:Nn \xeCJK_class_num:n { \use:c { xeCJK_#1_class } } +\cs_new_nopar:Nn \xeCJK_class_num:n { \tl_use:c { xeCJK_#1_class } } % \end{macrocode} % \end{macro} % @@ -1169,9 +1306,7 @@ may observe % 取出相邻类别之间的内容。 % \begin{macrocode} \cs_new_nopar:Nn \xeCJK_get_inter_class_toks:nn - { - \tex_the:D \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} - } + { \tex_the:D \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} } % \end{macrocode} % \end{macro} % @@ -1202,6 +1337,82 @@ may observe % % \subsection{字符输出规则} % +% \hspace*{-.8\marginparwidth} +% \begin{tabular}{l*8c} +% \toprule +% & |Default| & |CJK| & |FullLeft| & |FullRight| & |HalfLeft| +% & |HalfRight| & |NormalSpace| & |Boundary| \\ \midrule +% |Default| +% & +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & +% & +% & +% & \tokslink{def-bound}\\ +% |CJK| +% & \tokslink{def-cjk} +% & \tokslink{cjk-cjk} +% & \tokslink{cjk-fl-fr} +% & \tokslink{cjk-fl-fr} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{cjk-bound}\\ +% |FullLeft| +% & \tokslink{def-cjk} +% & \tokslink{fl-fr-bound-cjk} +% & \tokslink{cjk-fl-fr} +% & \tokslink{cjk-fl-fr} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{fl-fr-bound-cjk}\\ +% |FullRight| +% & \tokslink{def-cjk} +% & \tokslink{fl-fr-bound-cjk} +% & \tokslink{cjk-fl-fr} +% & \tokslink{cjk-fl-fr} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{fl-fr-bound-cjk}\\ +% |HalfLeft| +% & +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} \\ +% |HalfRight| +% & +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & +% & +% & +% & \tokslink{def-bound} \\ +% |NormalSpace| +% & +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & \tokslink{def-cjk} +% & +% & +% & +% & \tokslink{def-bound}\\ +% |Boundary| +% & \tokslink{bound-def} +% & \tokslink{bound-cjk} +% & \tokslink{fl-fr-bound-cjk} +% & \tokslink{fl-fr-bound-cjk} +% & \tokslink{bound-def} +% & +% & \tokslink{bound-def}\\ +% \bottomrule +% \end{tabular} +% +% \hypertarget{def-cjk}{} % \begin{macrocode} \clist_map_inline:nn { Default, HalfLeft, HalfRight, NormalSpace } { @@ -1214,21 +1425,15 @@ may observe \xeCJK_clear_inter_class_toks:nn {#1} {##1} \xeCJK_clear_CJK_toks: } + \xeCJK_inter_class_toks:nnn {##1} {#1} { \c_group_end_token } } \xeCJK_app_inter_class_toks:nnn {#1} { CJK } { \CJKsymbol } \clist_map_inline:nn { FullLeft, FullRight } { \xeCJK_app_inter_class_toks:nnc {#1} {##1} { xeCJK_CJK_and_##1:N } } - \xeCJK_inter_class_toks:nnn { CJK } {#1} { \c_group_end_token } - \xeCJK_inter_class_toks:nnn { FullLeft } {#1} { \nobreak \c_group_end_token } - \xeCJK_inter_class_toks:nnn { FullRight } {#1} - { \xeCJK_after_FullRight: \c_group_end_token } } % \end{macrocode} % -% \begin{macrocode} -\xeCJK_pre_inter_class_toks:nnn { Default } { CJK } { \CJKecglue } -% \end{macrocode} -% +% \hypertarget{bound-def}{} % \begin{macrocode} \clist_map_inline:nn { Default, HalfLeft, NormalSpace } { @@ -1242,6 +1447,7 @@ may observe } % \end{macrocode} % +% \hypertarget{def-bound}{} % \begin{macrocode} \clist_map_inline:nn { Default, HalfRight, NormalSpace } { @@ -1250,9 +1456,12 @@ may observe \peek_catcode:NTF \c_space_token { { \xeCJK_default_space_kern: } } { { \xeCJK_default_kern: } } } + \str_if_eq:xxF {#1} { NormalSpace } + { \xeCJK_pre_inter_class_toks:nnn {#1} { CJK } { \CJKecglue } } } % \end{macrocode} % +% \hypertarget{bound-cjk}{} % \begin{macrocode} \xeCJK_inter_class_toks:nnn { Boundary } { CJK } { \xeCJK_Boundary_and_CJK: } % \end{macrocode} @@ -1282,8 +1491,7 @@ may observe { \l_xeCJK_xecglue_bool && \int_compare_p:nNn \etex_lastnodetype:D = \c_eleven && - ( \int_compare_p:nNn - \tex_lastskip:D = { \tex_fontdimen:D \c_two \tex_font:D } || + ( \skip_if_eq_p:nn \tex_lastskip:D \l_xeCJK_space_glue_tl || \int_compare_p:nNn \tex_lastskip:D = \l_xeCJK_ecglue_dim ) } { @@ -1316,9 +1524,16 @@ may observe \xeCJK_select_font: \CJKsymbol } +\tl_set:Nn \l_xeCJK_space_glue_tl + { + \tex_fontdimen:D \c_two \tex_font:D + \@plus \tex_fontdimen:D \c_three \tex_font:D + \@minus \tex_fontdimen:D \c_four \tex_font:D + } % \end{macrocode} % \end{macro} % +% \hypertarget{cjk-bound}{} % \begin{macrocode} \xeCJK_inter_class_toks:nnn { CJK } { Boundary } { @@ -1326,6 +1541,10 @@ may observe { \xeCJK_CJK_kern: } \xeCJK_ignorespaces: } +% \end{macrocode} +% +% \hypertarget{cjk-cjk}{} +% \begin{macrocode} \xeCJK_inter_class_toks:nnn { CJK } { CJK } { \xeCJK_CJK_and_CJK:N } % \end{macrocode} % @@ -1335,6 +1554,7 @@ may observe % \end{macrocode} % \end{macro} % +% \hypertarget{fl-fr-bound-cjk}{} % \begin{macrocode} \clist_map_inline:nn { FullLeft, FullRight } { @@ -1346,19 +1566,31 @@ may observe \use:c { xeCJK_CJK_and_#1:N } } \xeCJK_inter_class_toks:nnn {#1} { CJK } { \CJKsymbol } - \xeCJK_inter_class_toks:nnn {#1} { Boundary } - { \c_group_end_token \tex_ignorespaces:D } - \clist_map_inline:nn { CJK, Boundary } + \xeCJK_inter_class_toks:nnn {#1} { Boundary } { \c_group_end_token \tex_ignorespaces:D } + } +% \end{macrocode} +% +% \begin{macrocode} +\clist_map_inline:Nn \g_xeCJK_base_class_clist + { + \bool_if:nF + { \str_if_eq_p:xx {#1} { FullLeft } || \str_if_eq_p:xx {#1} { FullRight } } { - \exp_args:Nnnx \xeCJK_pre_inter_class_toks:nnn {#1} {##1} - { - \str_if_eq:xxTF {#1} { FullLeft } - { \exp_not:N \nobreak } { \exp_not:N \xeCJK_after_FullRight: } - } + \xeCJK_pre_inter_class_toks:nnn { FullLeft } {#1} { \nobreak } + \xeCJK_pre_inter_class_toks:nnn { FullRight } {#1} { \xeCJK_after_FullRight: } } } % \end{macrocode} % +% \hypertarget{cjk-fl-fr}{} +% \begin{macrocode} +\clist_map_inline:nn { CJK, FullLeft, FullRight } + { + \clist_map_inline:nn { FullLeft, FullRight } + { \xeCJK_inter_class_toks:nnc {#1} {##1} { xeCJK_#1_and_##1:N } } + } +% \end{macrocode} +% % \begin{macro}[internal]{\xeCJK_punct_rule:n} % 用于抹去标点符号的左/右空白。 % \begin{macrocode} @@ -1423,14 +1655,6 @@ may observe % \end{macrocode} % \end{macro} % -% \begin{macrocode} -\clist_map_inline:nn { CJK, FullLeft, FullRight } - { - \clist_map_inline:nn { FullLeft, FullRight } - { \xeCJK_inter_class_toks:nnc {#1} {##1} { xeCJK_#1_and_##1:N } } - } -% \end{macrocode} -% % \begin{macro}[internal]{\xeCJK_CJK_and_FullLeft:N} % \begin{macrocode} \cs_new_nopar:Nn \xeCJK_CJK_and_FullLeft:N @@ -2121,8 +2345,7 @@ may observe { \l_xeCJK_punct_coor_tl/bound/\str_if_eq:xxTF {#1} lrl/#2 } \dim_set:Nn \l_tmpc_dim { - \tl_if_exist:cTF { g_xeCJK_punct_width/#2 } - { \tl_use:c { g_xeCJK_punct_width/#2 } } + \cs_if_exist_use:cF { g_xeCJK_punct_width/#2 } { \tl_if_blank:xTF \g_xeCJK_punct_width_tl { \c_zero_dim } @@ -2610,7 +2833,7 @@ may observe { \exp_args:No \tl_if_head_group:nT #1 { - \exp_after:wN \tl_set:Nn \exp_after:wN #1 #1 + \exp_last_unbraced:NNo \tl_set:Nn #1 #1 \xeCJK_gobble_brace:N #1 } } @@ -2732,6 +2955,8 @@ may observe \tl_set:Nx \l_xeCJK_family_tl {#1} \clist_set:Nx \l_xeCJK_fontoptions_clist {#2} \tl_set:Nx \l_xeCJK_fontname_tl {#3} + \prop_gpop:NVNT \g_xeCJK_family_name_prop \l_xeCJK_family_tl \l_tmpa_tl + { \xeCJK_warning:nxx { CJKfamily-redef } \l_xeCJK_family_tl \l_tmpa_tl } \keys_set_known:nxN { xeCJK / features } { \g_xeCJK_default_features_clist, #2 } \l_xeCJK_pass_features_clist \xeCJK_parse_features: @@ -2755,6 +2980,7 @@ may observe \group_end: } \cs_generate_variant:Nn \xeCJK_set_family:nnn { ncc } +\xeCJK_msg_new:nn { CJKfamily-redef } { Redefining~CJKfamily~`#1'~(#2). } % \end{macrocode} % \end{macro} % @@ -2776,6 +3002,7 @@ may observe % \end{macro} % % \begin{macrocode} +\cs_generate_variant:Nn \prop_gpop:NnNT { NV } \cs_generate_variant:Nn \prop_put:Nnn { Nxx } \cs_generate_variant:Nn \prop_get:Nn { NV } \cs_generate_variant:Nn \prop_get:NnNF { Nx } @@ -3435,7 +3662,7 @@ may observe { CJKnumber .bool_set:N = \g_xeCJK_number_bool , indentfirst .bool_set:N = \g_xeCJK_indent_bool , - normalindentfirst .meta:n = { indentfirst = true } , + normalindentfirst .meta:n = { indentfirst = false } , quiet .code:n = { \msg_redirect_module:nnn { xeCJK } { warning } { info } diff --git a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins index d791e0e4ca5..a4b3f02d63f 100644 --- a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins +++ b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins @@ -6,11 +6,14 @@ %% %% xeCJK.dtx (with options: `batchfile') %% -%% Version 3.0.4 (06-May-2012) +%% Version 3.0.5 (19-May-2012) %% ----------------------------------------------------------------- -%% Author: Wenchang Sun -%% Maintainer: Leo Liu -%% Qing Lee +%% Author: +%% Wenchang Sun +%% Current Maintainers: +%% Leo Liu +%% Qing Lee +%% %% Copyright (C) 2007--2012 Wenchang Sun %% %% This file may be distributed and/or modified under the @@ -29,11 +32,14 @@ \keepsilent \preamble - Version 3.0.4 (06-May-2012) + Version 3.0.5 (19-May-2012) ----------------------------------------------------------------- - Author: Wenchang Sun - Maintainer: Leo Liu - Qing Lee + Author: + Wenchang Sun + Current Maintainers: + Leo Liu + Qing Lee + Copyright (C) 2007--2012 Wenchang Sun This file may be distributed and/or modified under the diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty index 6ee01e7a082..adf0c16231d 100644 --- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty +++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty @@ -6,11 +6,14 @@ %% %% xeCJK.dtx (with options: `package') %% -%% Version 3.0.4 (06-May-2012) +%% Version 3.0.5 (19-May-2012) %% ----------------------------------------------------------------- -%% Author: Wenchang Sun -%% Maintainer: Leo Liu -%% Qing Lee +%% Author: +%% Wenchang Sun +%% Current Maintainers: +%% Leo Liu +%% Qing Lee +%% %% Copyright (C) 2007--2012 Wenchang Sun %% %% This file may be distributed and/or modified under the @@ -27,15 +30,16 @@ %% \RequirePackage{xparse} \RequirePackage{l3keys2e} -\ProvidesExplPackage {xeCJK} {2012/05/06} {3.0.4} +\ProvidesExplPackage {xeCJK} {2012/05/19} {3.0.5} {package for typesetting CJK scripts with XeLaTeX} -\cs_new_nopar:Npn \xeCJK_msg_new:nn { \msg_new:nnn { xeCJK } } -\cs_new_nopar:Npn \xeCJK_error:n { \msg_error:nn { xeCJK } } -\cs_new_nopar:Npn \xeCJK_error:nx { \msg_error:nnx { xeCJK } } -\cs_new_nopar:Npn \xeCJK_warning:n { \msg_warning:nn { xeCJK } } -\cs_new_nopar:Npn \xeCJK_warning:nx { \msg_warning:nnx { xeCJK } } -\cs_new_nopar:Npn \xeCJK_info:nx { \msg_info:nnx { xeCJK } } -\cs_new_nopar:Npn \xeCJK_info:nxx { \msg_info:nnxx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_msg_new:nn { \msg_new:nnn { xeCJK } } +\cs_new_nopar:Npn \xeCJK_error:n { \msg_error:nn { xeCJK } } +\cs_new_nopar:Npn \xeCJK_error:nx { \msg_error:nnx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_warning:n { \msg_warning:nn { xeCJK } } +\cs_new_nopar:Npn \xeCJK_warning:nx { \msg_warning:nnx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_warning:nxx { \msg_warning:nnxx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_info:nx { \msg_info:nnx { xeCJK } } +\cs_new_nopar:Npn \xeCJK_info:nxx { \msg_info:nnxx { xeCJK } } \msg_new:nnn {xeCJK} { Require-XeTeX } { The~xeCJK~package~requires~XeTeX~to~function.\\\\ @@ -70,7 +74,7 @@ \int_const:Nn \xeCJK_Boundary_class { 255 } \cs_new_nopar:Nn \xeCJK_new_class:n { - \exp_after:wN \newXeTeXintercharclass \cs:w xeCJK_#1_class\cs_end: + \exp_args:Nc \newXeTeXintercharclass { xeCJK_#1_class } \clist_gclear_new:c { g_xeCJK_#1_range_clist } \seq_gput_right:Nv \g_xeCJK_class_seq { xeCJK_#1_class } } @@ -94,7 +98,7 @@ } \cs_generate_variant:Nn \prop_gput:Nnn { Nvx } \clist_map_inline:nn { CJK, FullLeft, FullRight } { \xeCJK_save_CJK_class:n {#1} } -\cs_new_nopar:Nn \xeCJK_class_num:n { \use:c { xeCJK_#1_class } } +\cs_new_nopar:Nn \xeCJK_class_num:n { \tl_use:c { xeCJK_#1_class } } \prg_set_conditional:Nnn \tl_if_blank:x { p , T , F , TF } { \if_int_compare:w \pdftex_strcmp:D { \c_empty_tl } {#1} = \c_zero @@ -245,9 +249,7 @@ } \cs_generate_variant:Nn \xeCJK_app_inter_class_toks:nnn { nnc } \cs_new_nopar:Nn \xeCJK_get_inter_class_toks:nn - { - \tex_the:D \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} - } + { \tex_the:D \XeTeXinterchartoks \xeCJK_class_num:n {#1} \xeCJK_class_num:n {#2} } \cs_new_nopar:Nn \xeCJK_copy_inter_class_toks:nnnn { \use:x @@ -272,16 +274,12 @@ \xeCJK_clear_inter_class_toks:nn {#1} {##1} \xeCJK_clear_CJK_toks: } + \xeCJK_inter_class_toks:nnn {##1} {#1} { \c_group_end_token } } \xeCJK_app_inter_class_toks:nnn {#1} { CJK } { \CJKsymbol } \clist_map_inline:nn { FullLeft, FullRight } { \xeCJK_app_inter_class_toks:nnc {#1} {##1} { xeCJK_CJK_and_##1:N } } - \xeCJK_inter_class_toks:nnn { CJK } {#1} { \c_group_end_token } - \xeCJK_inter_class_toks:nnn { FullLeft } {#1} { \nobreak \c_group_end_token } - \xeCJK_inter_class_toks:nnn { FullRight } {#1} - { \xeCJK_after_FullRight: \c_group_end_token } } -\xeCJK_pre_inter_class_toks:nnn { Default } { CJK } { \CJKecglue } \clist_map_inline:nn { Default, HalfLeft, NormalSpace } { \xeCJK_inter_class_toks:nnn { Boundary } {#1} @@ -299,6 +297,8 @@ \peek_catcode:NTF \c_space_token { { \xeCJK_default_space_kern: } } { { \xeCJK_default_kern: } } } + \str_if_eq:xxF {#1} { NormalSpace } + { \xeCJK_pre_inter_class_toks:nnn {#1} { CJK } { \CJKecglue } } } \xeCJK_inter_class_toks:nnn { Boundary } { CJK } { \xeCJK_Boundary_and_CJK: } \cs_new_nopar:Nn \xeCJK_Boundary_and_CJK: @@ -324,8 +324,7 @@ { \l_xeCJK_xecglue_bool && \int_compare_p:nNn \etex_lastnodetype:D = \c_eleven && - ( \int_compare_p:nNn - \tex_lastskip:D = { \tex_fontdimen:D \c_two \tex_font:D } || + ( \skip_if_eq_p:nn \tex_lastskip:D \l_xeCJK_space_glue_tl || \int_compare_p:nNn \tex_lastskip:D = \l_xeCJK_ecglue_dim ) } { @@ -358,6 +357,12 @@ \xeCJK_select_font: \CJKsymbol } +\tl_set:Nn \l_xeCJK_space_glue_tl + { + \tex_fontdimen:D \c_two \tex_font:D + \@plus \tex_fontdimen:D \c_three \tex_font:D + \@minus \tex_fontdimen:D \c_four \tex_font:D + } \xeCJK_inter_class_toks:nnn { CJK } { Boundary } { \c_group_end_token @@ -376,17 +381,22 @@ \use:c { xeCJK_CJK_and_#1:N } } \xeCJK_inter_class_toks:nnn {#1} { CJK } { \CJKsymbol } - \xeCJK_inter_class_toks:nnn {#1} { Boundary } - { \c_group_end_token \tex_ignorespaces:D } - \clist_map_inline:nn { CJK, Boundary } + \xeCJK_inter_class_toks:nnn {#1} { Boundary } { \c_group_end_token \tex_ignorespaces:D } + } +\clist_map_inline:Nn \g_xeCJK_base_class_clist + { + \bool_if:nF + { \str_if_eq_p:xx {#1} { FullLeft } || \str_if_eq_p:xx {#1} { FullRight } } { - \exp_args:Nnnx \xeCJK_pre_inter_class_toks:nnn {#1} {##1} - { - \str_if_eq:xxTF {#1} { FullLeft } - { \exp_not:N \nobreak } { \exp_not:N \xeCJK_after_FullRight: } - } + \xeCJK_pre_inter_class_toks:nnn { FullLeft } {#1} { \nobreak } + \xeCJK_pre_inter_class_toks:nnn { FullRight } {#1} { \xeCJK_after_FullRight: } } } +\clist_map_inline:nn { CJK, FullLeft, FullRight } + { + \clist_map_inline:nn { FullLeft, FullRight } + { \xeCJK_inter_class_toks:nnc {#1} {##1} { xeCJK_#1_and_##1:N } } + } \cs_new_nopar:Nn \xeCJK_punct_rule:n { \tex_vrule:D @@ -418,11 +428,6 @@ \xeCJK_punct_rule:n { r/\l_xeCJK_lastpunct_tl } \xeCJK_punct_glue:n { r/\l_xeCJK_lastpunct_tl } } -\clist_map_inline:nn { CJK, FullLeft, FullRight } - { - \clist_map_inline:nn { FullLeft, FullRight } - { \xeCJK_inter_class_toks:nnc {#1} {##1} { xeCJK_#1_and_##1:N } } - } \cs_new_nopar:Nn \xeCJK_CJK_and_FullLeft:N { \xeCJK_get_punct_bounds:nN { l } {#1} @@ -922,8 +927,7 @@ { \l_xeCJK_punct_coor_tl/bound/\str_if_eq:xxTF {#1} lrl/#2 } \dim_set:Nn \l_tmpc_dim { - \tl_if_exist:cTF { g_xeCJK_punct_width/#2 } - { \tl_use:c { g_xeCJK_punct_width/#2 } } + \cs_if_exist_use:cF { g_xeCJK_punct_width/#2 } { \tl_if_blank:xTF \g_xeCJK_punct_width_tl { \c_zero_dim } @@ -1310,7 +1314,7 @@ { \exp_args:No \tl_if_head_group:nT #1 { - \exp_after:wN \tl_set:Nn \exp_after:wN #1 #1 + \exp_last_unbraced:NNo \tl_set:Nn #1 #1 \xeCJK_gobble_brace:N #1 } } @@ -1398,6 +1402,8 @@ \tl_set:Nx \l_xeCJK_family_tl {#1} \clist_set:Nx \l_xeCJK_fontoptions_clist {#2} \tl_set:Nx \l_xeCJK_fontname_tl {#3} + \prop_gpop:NVNT \g_xeCJK_family_name_prop \l_xeCJK_family_tl \l_tmpa_tl + { \xeCJK_warning:nxx { CJKfamily-redef } \l_xeCJK_family_tl \l_tmpa_tl } \keys_set_known:nxN { xeCJK / features } { \g_xeCJK_default_features_clist, #2 } \l_xeCJK_pass_features_clist \xeCJK_parse_features: @@ -1421,6 +1427,7 @@ \group_end: } \cs_generate_variant:Nn \xeCJK_set_family:nnn { ncc } +\xeCJK_msg_new:nn { CJKfamily-redef } { Redefining~CJKfamily~`#1'~(#2). } \cs_new_nopar:Nn \xeCJK_add_font:nn { \prop_put:Nxx \l_xeCJK_add_font_prop @@ -1433,6 +1440,7 @@ } \cs_generate_variant:Nn \xeCJK_add_font:nn { nx, nc, nV, nv } \cs_generate_variant:Nn \xeCJK_add_font_if_new:nn { nx, nc, nV, nv } +\cs_generate_variant:Nn \prop_gpop:NnNT { NV } \cs_generate_variant:Nn \prop_put:Nnn { Nxx } \cs_generate_variant:Nn \prop_get:Nn { NV } \cs_generate_variant:Nn \prop_get:NnNF { Nx } @@ -1910,7 +1918,7 @@ { CJKnumber .bool_set:N = \g_xeCJK_number_bool , indentfirst .bool_set:N = \g_xeCJK_indent_bool , - normalindentfirst .meta:n = { indentfirst = true } , + normalindentfirst .meta:n = { indentfirst = false } , quiet .code:n = { \msg_redirect_module:nnn { xeCJK } { warning } { info } -- cgit v1.2.3