summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/xelatex/xecjk
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-11-15 00:12:39 +0000
committerKarl Berry <karl@freefriends.org>2013-11-15 00:12:39 +0000
commit4909c173ce26f3b8abbb198131d4c2846918c8b0 (patch)
tree44a1bbd5326973b999f7d68d86677bb491e1cbb6 /Master/texmf-dist/source/xelatex/xecjk
parentfb4f5722355aa3de14f51566a960bfd81e8f6c1a (diff)
xecjk
git-svn-id: svn://tug.org/texlive/trunk@32149 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/xelatex/xecjk')
-rw-r--r--Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx690
-rw-r--r--Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins4
2 files changed, 491 insertions, 203 deletions
diff --git a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx
index 61cc1e1a36b..a2c2c38fafe 100644
--- a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx
+++ b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.dtx
@@ -90,7 +90,7 @@ CJK scripts fonts (TrueType or OpenType).
\askforoverwritefalse
\preamble
-$Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $
+$Id: xeCJK.dtx 525 2013-11-11 06:32:00Z sobenlee $
$URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
-----------------------------------------------------------------
Author:
@@ -189,7 +189,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
%</!config>
-\GetIdInfo$Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $
+\GetIdInfo$Id: xeCJK.dtx 525 2013-11-11 06:32:00Z sobenlee $
%<*driver|package>
{Typesetting CJK scripts with XeLaTeX}
%</driver|package>
@@ -209,10 +209,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%<fntef> {xeCJKfntef}
%<listings> {xeCJK-listings}
%<xunicode> {xunicode-addon}
- {\ExplFileDate}{3.2.6}{\ExplFileDescription}
+ {\ExplFileDate}{3.2.7}{\ExplFileDescription}
%<*driver>
-\def\xeCJKversion{3.2.6}
-\let\xeCJKdate\ExplFileDate
\let\xeCJKrevnum\ExplFileVersion
\ExplSyntaxOff
%</driver>
@@ -335,7 +333,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%</driver>
% \fi
%
-% \CheckSum{5262}
% \changes{v3.1.0}{2012/11/13}{放弃对 \cs{outer} 宏的特殊处理。}
% \changes{v3.1.1}{2012/12/07}{不再依赖 \pkg{xpatch} 宏包。}
% \changes{v3.2.2}{2013/06/01}{修正某些重音不能正确显示的问题。}
@@ -343,10 +340,12 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \changes{v3.2.4}{2013/07/02}{遵循 \hologo{LaTeX3} 变量需要预先声明的原则。}
% \changes{v3.2.6}{2013/07/29}{\texttt{case} 类函数的用法与 \hologo{LaTeX3} 同步。}
%
+% \CheckSum{5446}
+% \GetFileInfo{\jobname.dtx}
%
% \title{\bfseries\pkg{xeCJK} 宏包}
% \author{\href{http://www.ctex.org}{ctex.org}}
-% \date{\xeCJKdate\qquad\xeCJKversion\thanks{\ctexkitrev{\xeCJKrevnum}.}}
+% \date{\filedate\qquad\fileversion\thanks{\ctexkitrev{\xeCJKrevnum}.}}
% \maketitle
%
% \tableofcontents
@@ -366,8 +365,9 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{enumerate}
%
% \pkg{xeCJK} 使用了 \XeTeX 的一些最新特性,需要 \XeTeX{} |0.9995.0 [2009/06/29]| 以
-% 后的版本。\pkg{xeCJK} 依赖 \hologo{LaTeX3} 项目的宏包套件 \package{l3kernel} 和
-% \package{l3packages}。\pkg{xeCJK} 还需要通过 \package{fontspec} 宏包来调用系统字
+% 后的版本。\pkg{xeCJK} 依赖 \package{everypage} 和 \hologo{LaTeX3} 项目的宏包套件
+% \package{l3kernel} 和 \package{l3packages} 。
+% \pkg{xeCJK} 还需要通过 \package{fontspec} 宏包来调用系统字
% 体。将在 \ref{subsec:opts}~节介绍的功能选项 |indentfirst| 选项需要
% \package{indentfirst} 宏包的支持。\pkg{xeCJK} 会自动根据需要载入这些宏包。
%
@@ -487,7 +487,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% CJKmath = \meta{\TFF}
% \end{syntax}
% 是否支持在数学环境中直接输入 CJK 字符。使用这个选项后,可以直接在数学环境中
-% 输出 CJK 字符。
+% 输出 CJK 字符。\pkg{url} 宏包将一个 URL 放在一个特殊的数学环境中排版,所以如果在
+% \cs{path} 等命令的路径参数中含有汉字,则需要启用这个选项,路径中的汉字才能显示。
% \end{function}
%
% \begin{function}{CJKglue}
@@ -653,6 +654,13 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \cs{xeCJKsetwidth}。
% \end{function}
%
+% \begin{function}[EXP,added=2013-08-22]{PunctBoundWidth}
+% \begin{syntax}
+% PunctBoundWidth = \Arg{length}
+% \end{syntax}
+% 与以上选项类似,但设置的是标点符号出现在行首/尾时的宽度。
+% \end{function}
+%
% \begin{function}{AllowBreakBetweenPuncts}
% \begin{syntax}
% AllowBreakBetweenPuncts = \meta{\TFF}
@@ -988,7 +996,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \cs{xeCJKDeclareSubCJKBlock*} \Arg{block} \Arg{block range}
% \end{syntax}
% 其中 \meta{block range} 是逗号列表,可以是 CJK 字符的 |Unicode| 范围,也可以是单个字符
-% 的 |Unicode|。例如
+% 的 |Unicode|。例如\strut
+% \end{function}
% \begin{verbatim}
% { `中 -> `文 , "3400 -> "4DBF , "5000 -> "7000 , `汉 , `字 , "3500 }
% \end{verbatim}
@@ -1002,8 +1011,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% 就声明了 |SPUA| 和 |Ext-B| 这两个个子分区。同时在 \ref{subsec:fontset} 节介绍的
% CJK 字体设置命令的 \meta{font features} 里新建了 |SPUA| 和 |Ext-B| 这两个选项。
% 新建的这两个选项的使用方法跟 \ref{subsec:fontset} 介绍的 |FallBack| 类似。可以
-% 通过它们来设置字体。\strut
-% \end{function}
+% 通过它们来设置字体。
%
% 例如,可以使用
% \begin{verbatim}
@@ -1067,22 +1075,25 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \pkg{xeCJK} 对标点符号的输出宽度的调整是通过调整其左边或右边的空白宽度来实现的。
% 按照目前的处理方式,对于位于左边的标点符号(如左引号),\pkg{xeCJK} 只能调整它
% 左边的空白;对于位于右边的标点符号(如右引号),\pkg{xeCJK} 只能调整它右边的空
-% 白;对于居中的标点符号,则调整其左右空白,以保证其居中。
+% 白;对于居中的标点符号,则调整其左右空白,以保证其居中。对于标点符号的相关设置,
+% 只能在导言区中进行。
%
% \subsubsection{设置特定标点符号的宽度和间距}
% \label{subsec:punct}
%
% 这里的设置可用于除 |plain| 以外的所有标点处理格式。
%
-% \begin{function}[EXP]{\xeCJKsetwidth}
+% \begin{function}[EXP,updated=2013-08-22]{\xeCJKsetwidth}
% \begin{syntax}
-% \cs{xeCJKsetwidth} \Arg{标点列表} \Arg{length}
+% \cs{xeCJKsetwidth} \Arg{标点列表} \Arg{length}
+% \cs{xeCJKsetwidth*} \Arg{标点列表} \Arg{length}
% \end{syntax}
% \meta{标点列表}可以是单个标点,也可以是多个标点。例如,
% \begin{verbatim}
% \xeCJKsetwidth{。?}{0.7em}
% \end{verbatim}
-% 将设置句号和问号所占的宽度为 |0.7 em|。
+% 将设置句号和问号所占的宽度为 |0.7 em|。带星号的命令,设置标点符号出现在行首/尾
+% 时的宽度。
% \end{function}
%
% \begin{function}[EXP]{\xeCJKsetkern}
@@ -1100,14 +1111,14 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \subsubsection{定义标点符号处理格式}
% \label{subsec:punctstyle}
%
-% \begin{function}[EXP,added=2012-11-10]{\xeCJKDeclarePunctStyle}
+% \begin{function}[EXP,updated=2013-08-22]{\xeCJKDeclarePunctStyle}
% \begin{syntax}
% \cs{xeCJKDeclarePunctStyle} \Arg{style} \Arg{options}
% \end{syntax}
% 定义新的标点符号处理格式,已经存在的同名格式将被覆盖。可以设置的选项将在下面介绍。
% \end{function}
%
-% \begin{function}[EXP,added=2012-11-10]{\xeCJKEditPunctStyle}
+% \begin{function}[EXP,updated=2013-08-22]{\xeCJKEditPunctStyle}
% \begin{syntax}
% \cs{xeCJKEditPunctStyle} \Arg{style} \Arg{options}
% \end{syntax}
@@ -1118,12 +1129,12 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% 型,右边则是相关说明。某些选项之间是互斥的,具有优先级关系。要使下一级的选项有
% 效,则需要先禁用上一级的设置:对于 \meta{boolean} 类型的选项,将其设置为 |false|,
% 对于 \meta{length} 类型的选项,将其设置为 \cs{maxdimen},而对于 \meta{real} 类型
-% 的选项,将其设置为 |0|。
+% 的选项,将其设置为 |nan|。
%
% \begin{optiondesc}
% \PSKeyVal{enabled-global-setting}{boolean}
-% 是否使用 \cs{xeCJKsetup} 的 |PunctWidth| 选项和 \cs{xeCJKsetwidth}、
-% \cs{xeCJKsetkern} 的设置。默认值是 |true|。
+% 是否使用 \cs{xeCJKsetup} 的 |PunctWidth|、|PunctBoundWidth| 选项和
+% \cs{xeCJKsetwidth}、\cs{xeCJKsetkern} 的设置。默认值是 |true|。
% \end{optiondesc}
%
% \begin{optiondesc}
@@ -1151,7 +1162,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \PSKeyVal{fixed-margin-width}{length}
% 设置标点的左/右空白宽度。默认值是 \cs{maxdimen}。
% \PSKeyVal{fixed-margin-ratio}{real}
-% 设置标点的左/右空白宽度与字体中该标点的相应实际边界宽度的比例。默认值是 |1.0|。
+% 设置标点的左/右空白宽度与字体中该标点的相应实际边界宽度的比例。默认值是~|1.0|。
% \PSKeyVal{mixed-margin-width}{length}
% 设置句末标点的左/右空白宽度。默认值是与 |fixed-margin-width| 的值相同。
% \PSKeyVal{mixed-margin-ratio}{real}
@@ -1163,6 +1174,22 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% 默认值是与 |fixed-margin-ratio| 的值相同。
% \end{optiondesc}
%
+% 下面选项设置标点符号出现在行首或者行尾时的宽度或比例。
+%
+% \begin{optiondesc}
+% \PSKeyVal{bound-punct-width}{length}
+% 设置标点符号出现在行首/尾时的宽度。默认值是 \cs{maxdimen}。
+% \PSKeyVal{bound-punct-ratio}{real}
+% 设置标点符号出现在行首/尾时的输出宽度与实际宽度的比例。默认值是 |nan|。
+% \PSKeyVal{bound-margin-width}{length}
+% 设置标点符号出现在行首/尾时的左/右空白宽度。默认值是 \cs{maxdimen}。
+% \PSKeyVal{bound-margin-ratio}{real}
+% 设置标点符号出现在行首/尾时的左/右空白宽度与相应实际边界宽度的比例。默认值是 |0|。
+% \PSKeyVal{enabled-hanging}{boolean}
+% 当以上选项的计算结果得到的宽度小于标点符号的实际边界宽度时,是否允许标点符号
+% 悬挂出页面边界。默认值是 |false|。
+% \end{optiondesc}
+%
% \begin{optiondesc}
% \PSKeyVal{add-min-bound-to-margin}{boolean}
% 是否在以上计算结果的基础上再加上标点的左右实际边界宽度中的最小值。这个选项
@@ -1201,11 +1228,11 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \PSKeyVal{same-align-margin}{length}
% 前后两个标点位于同侧时,它们之间的空白宽度。默认值是 \cs{maxdimen}。
% \PSKeyVal{same-align-ratio}{real}
-% 前后两个标点位于同侧时,它们之间的空白宽度与实际输出宽度的比例。默认值是 |0|。
+% 前后两个标点位于同侧时,它们之间的空白宽度与实际输出宽度的比例。默认值是~|nan|。
% \PSKeyVal{different-align-margin}{length}
% 前后两个标点位于异侧时,它们之间的空白宽度。默认值是 \cs{maxdimen}。
% \PSKeyVal{different-align-ratio}{real}
-% 前后两个标点位于异侧时,它们之间的空白宽度与实际输出宽度的比例。默认值是 |0|。
+% 前后两个标点位于异侧时,它们之间的空白宽度与实际输出宽度的比例。默认值是~|nan|。
% \PSKeyVal{kerning-margin-width}{length}
% 设置前后两个标点之间的空白宽度。默认值是 \cs{maxdimen}。
% \PSKeyVal{kerning-margin-ratio}{real}
@@ -1230,13 +1257,15 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \begin{verbatim}
% \xeCJKDeclarePunctStyle { mine }
% {
-% fixed-punct-ratio = 0 ,
+% fixed-punct-ratio = nan ,
% 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 ,
+% bound-punct-width = 0 em ,
+% enabled-hanging = true ,
% min-bound-to-kerning = true ,
% kerning-margin-minimum = 0.1 em
% }
@@ -1246,9 +1275,9 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \xeCJKsetup{PunctStyle=mine}
% \end{verbatim}
% 在文档中使用这个格式。它的意义是:使用标点符号的实际左右边界中的最小值作为其左/右
-% 空白的宽度,对于句末标点和居中标点,再加上实际边界空白的一半;使用相邻两个标点的
-% 实际边界中的较小值作为它们之间的空白宽度,并且最小的空白宽度是 |0.1 em|。
-% 再例如,使用
+% 空白的宽度,对于句末标点和居中标点,再加上实际边界空白的一半;当标点出现在行首或
+% 行尾时宽度为零,允许悬挂出页面边界;使用相邻两个标点的实际边界中的较小值作为它们
+% 之间的空白宽度,并且最小的空白宽度是 |0.1 em|。再例如,使用
% \begin{verbatim}
% \xeCJKEditPunctStyle { hangmobanjiao } { enabled-global-setting = false }
% \end{verbatim}
@@ -1280,6 +1309,16 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% 前面介绍的 |CheckFullRight| 选项,则不需要再用此命令。
% \end{function}
%
+% \begin{function}[added=2013-11-09]{\xeCJKShipoutHook}
+% \pkg{xeCJK} 在正文中的一些特殊设置(汉字下加点、在 \env{verbatim} 或
+% \env{lstlisting} 环境中分页)可能会影响到 \TeX 的输出例行程序(output routine)
+% 中的内容(比如页眉和页脚)。\cs{xeCJKShipoutHook} 用于恢复正文中的普通设置。
+% \pkg{xeCJK} 已经处理了页眉和页脚的情况,其它的就需要根据情况自行调用。
+% 比如若使用 \pkg{eso-pic} 或者 \pkg{atbegshi} 实现文字水印,并且正文中使用了
+% 以上所列的特殊形式,就需要在命令 \cs{AtBeginShipout} 的参数的最前面使用
+% \cs{xeCJKShipoutHook}。
+% \end{function}
+%
% \section{已知问题和兼容性}
%
% \XeTeX 在配置文件 \file{unicode-letters.tex} 中将所有 CJK 表意文字的 \cs{catcode}
@@ -1419,6 +1458,10 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\RequirePackage { xparse , l3keys2e }
% \end{macrocode}
%
+% \begin{macrocode}
+\RequirePackage { everypage }
+% \end{macrocode}
+%
% \subsection{内部工具}
%
% 分配临时变量。
@@ -1490,6 +1533,29 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{macrocode}
% \end{macro}
%
+% \changes{v3.2.7}{2013/11/09}{使用 \pkg{everypage} 往 \cs{shipout} 盒子里加钩子。}
+%
+% \begin{macro}{\xeCJKShipoutHook}
+% 在 \cs{shipout} 盒子里加钩子,可以影响到页眉页脚。\cs{AtBeginDvi} 将参数保存在
+% 盒子中,而 \pkg{atbegshi} 的 \cs{AtBeginShipout} 在 \cs{shipout} 盒子构建好之后
+% 才起作用,所以它们都影响不到页眉页脚。
+% \begin{macrocode}
+\AddEverypageHook { \xeCJKShipoutHook }
+\NewDocumentCommand \xeCJKShipoutHook { }
+ {
+ \bool_if:NF \l_@@_shipout_hook_bool
+ {
+ \bool_set_true:N \l_@@_shipout_hook_bool
+ \tl_use:N \l_@@_shipout_hook_tl
+ }
+ }
+\cs_new_protected:Npn \@@_add_to_shipout:n #1
+ { \tl_put_right:Nn \l_@@_shipout_hook_tl {#1} }
+\tl_new:N \l_@@_shipout_hook_tl
+\bool_new:N \l_@@_shipout_hook_bool
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[internal]{\xeCJK_reverse:nnn}
% |#1| 为 |#2| 或 |#3|,若 |#1| 和 |#2| 相等,则返回 |#3|,否则返回 |#2|。
% \begin{macrocode}
@@ -1893,7 +1959,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% (Ideographic Variation Selectors)\footnote{\url{http://www.unicode.org/reports/tr37/}}
% 需要 \XeTeX\ |0.9999.0| 以上的版本^^A
% \footnote{\url{http://tug.org/pipermail/xetex/2013-March/024118.html}}和相关字体的支持。
-% \begin{center}\xeCJKsetup{PunctStyle=plain}
+% \begin{center}\xeCJKsetup{PunctStyle=hangmobanjiao}
% \begin{tabular}{cll}
% \toprule
% 类别 & 说明 & 例子 \\ \midrule
@@ -2319,6 +2385,17 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{macro}
%
% \changes{v3.2.3}{2013/06/08}{不再改变 CJK 字符类的 \cs{catcode}。}
+% \changes{v3.2.7}{2013/08/29}{修正 \file{unicode-letters.tex} 中谚文符号
+% \cs{catcode} 不准的问题。}
+% \begin{macrocode}
+\int_set:Nn \l_@@_begin_int { "AC00 }
+\int_set:Nn \l_@@_end_int { "D7A3 }
+\xeCJK_int_until_do:nn { \l_@@_begin_int > \l_@@_end_int }
+ {
+ \char_set_catcode_letter:n { \l_@@_begin_int }
+ \int_incr:N \l_@@_begin_int
+ }
+% \end{macrocode}
%
% \begin{macro}[internal]{\xeCJK_set_char_class:nnn}
% \changes{v3.1.1}{2012/12/05}{在文档中设置字符类别时不重复设置 \cs{catcode}。}
@@ -3046,20 +3123,45 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
}
% \end{macrocode}
%
+% \begin{macro}[internal]{\@@_punct_bound_rule:NN}
+% 用于抹去标点符号的全部左/右空白。
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_punct_bound_rule:NN #1#2
+ {
+ \tex_vrule:D
+ width - \@@_use_punct_dim:nnn { bound } {#1} {#2}
+ depth \c_zero_dim
+ height \c_zero_dim \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[internal]{\@@_punct_rule:NN}
-% 用于抹去标点符号的左/右空白。
+% 用于减少标点符号的左/右空白。
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_punct_rule:NN #1#2
{
\tex_vrule:D
- width - \@@_use_punct_dim:nnn { bound } {#1} {#2}
+ width \@@_use_punct_dim:nnn { rule } {#1} {#2}
depth \c_zero_dim
height \c_zero_dim \scan_stop:
}
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[internal]{\@@_punct_offset:NN}
+% 经过以上 \cs{vrule} 处理后,标点输出边界与实际边界的距离。
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_punct_offset:NN #1#2
+ { \@@_punct_kern:n { - \@@_use_punct_dim:nnn { offset } {#1} {#2} } }
+\cs_new_protected_nopar:Npn \@@_punct_kern:n #1
+ { \tex_kern:D #1 \exp_stop_f: }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[internal]{\@@_punct_glue:NN}
+% \changes{v3.2.7}{2013/08/23}
+% {标点符号左/右空白的伸展值不超过原始边界,收缩值不小于另一侧边界。}
% 根据所选的标点处理方式在标点符号左/右增加的空白。
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_punct_glue:NN #1#2
@@ -3067,7 +3169,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\@@_punct_hskip:n
{
\@@_use_punct_dim:nnn { glue } {#1} {#2}
- minus \dim_eval:n { ( \@@_use_punct_dim:nnn { glue } {#1} {#2} ) / \c_two }
+ plus \@@_use_punct_dim:nnn { plus } {#1} {#2}
+ minus \@@_use_punct_dim:nnn { minus } {#1} {#2}
}
}
\cs_new_eq:NN \@@_punct_hskip:n \skip_horizontal:n
@@ -3078,7 +3181,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% 相邻两个标点之间的间距。
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_punct_kern:NN #1#2
- { \tex_kern:D \@@_use_punct_dim:nnn { kern } {#1} {#2} }
+ { \tex_kern:D \@@_use_punct_dim:nnn { kern } {#1} {#2} \exp_stop_f: }
% \end{macrocode}
% \end{macro}
%
@@ -3095,7 +3198,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{
\@@_punct_if_middle:NTF \g_@@_last_punct_tl
{
- \@@_punct_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
+ \@@_punct_bound_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
\xeCJK_no_break:
\@@_punct_glue:NN \c_@@_left_tl \g_@@_last_punct_tl
}
@@ -3111,7 +3214,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{
\@@_punct_if_middle:NTF \g_@@_last_punct_tl
{
- \@@_punct_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
+ \@@_punct_bound_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
\xeCJK_class_group_end: \xeCJK_no_break:
\@@_punct_glue:NN \c_@@_left_tl \g_@@_last_punct_tl
}
@@ -3127,6 +3230,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\cs_new_protected_nopar:Npn \xeCJK_FullRight_and_CJK:
{
\@@_punct_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
+ \@@_punct_offset:NN \c_@@_right_tl \g_@@_last_punct_tl
\@@_punct_glue:NN \c_@@_right_tl \g_@@_last_punct_tl
\CJKglue
}
@@ -3139,6 +3243,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{
\@@_punct_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
\xeCJK_class_group_end:
+ \@@_punct_offset:NN \c_@@_right_tl \g_@@_last_punct_tl
\@@_punct_glue:NN \c_@@_right_tl \g_@@_last_punct_tl
}
% \end{macrocode}
@@ -3159,7 +3264,10 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\CJKpunctsymbol {#2}
}
\cs_new_protected_nopar:Npn \@@_Default_and_FullLeft_glue:N #1
- { \@@_punct_glue:NN \c_@@_left_tl {#1} }
+ {
+ \@@_punct_glue:NN \c_@@_left_tl {#1}
+ \@@_punct_offset:NN \c_@@_left_tl {#1}
+ }
% \end{macrocode}
% \end{macro}
%
@@ -3174,7 +3282,11 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\CJKpunctsymbol {#1}
}
\cs_new_protected_nopar:Npn \@@_CJK_and_FullLeft_glue:N #1
- { \CJKglue \@@_punct_glue:NN \c_@@_left_tl {#1} }
+ {
+ \CJKglue
+ \@@_punct_glue:NN \c_@@_left_tl {#1}
+ \@@_punct_offset:NN \c_@@_left_tl {#1}
+ }
% \end{macrocode}
% \end{macro}
%
@@ -3184,6 +3296,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{
\xeCJK_get_punct_bounds:NN \c_@@_left_tl {#1}
\@@_Boundary_and_FullLeft_glue:N {#1}
+ \@@_punct_offset:NN \c_@@_left_tl {#1}
\xeCJK_class_group_begin:
\xeCJK_select_font:
\xeCJK_clear_Boundary_and_CJK_toks:
@@ -3229,7 +3342,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{ \box_use_clear:N \l_@@_tmp_box \use_none:n }
{ \box_use_clear:N \l_@@_tmp_box \use:n }
}
- { \c_minus_one } { \use_none:n }
+ { \c_minus_one } { \@@_zero_glue: \use_none:n }
{ \c_eleven }
{
\bool_if:nTF
@@ -3237,7 +3350,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
! ( \skip_if_finite_p:n { \tex_lastskip:D } ) ||
\skip_if_eq_p:nn { \tex_lastskip:D } { 1 sp }
}
- { \use_none:n }
+ { \@@_zero_glue: \use_none:n }
{
\skip_if_eq:nnTF { \tex_lastskip:D } { \labelsep }
{
@@ -3282,8 +3395,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\xeCJK_clear_inter_class_toks:nn {#1} { FullRight }
\xeCJK_clear_Boundary_and_CJK_toks:
\tl_gset:Nx \g_@@_last_punct_tl {#2}
- \@@_punct_if_middle:NT {#2}
- { \@@_punct_rule:NN \c_@@_left_tl {#2} }
\xeCJK_FullRight_symbol:N {#2}
}
% \end{macrocode}
@@ -3299,8 +3410,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\xeCJK_select_font:
\xeCJK_clear_Boundary_and_CJK_toks:
\tl_gset:Nx \g_@@_last_punct_tl {#1}
- \@@_punct_if_middle:NT {#1}
- { \@@_punct_rule:NN \c_@@_left_tl {#1} }
\xeCJK_FullRight_symbol:N {#1}
}
% \end{macrocode}
@@ -3313,8 +3422,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\xeCJK_get_punct_bounds:NN \c_@@_right_tl {#1}
\@@_CJK_and_FullRight_glue:N {#1}
\tl_gset:Nx \g_@@_last_punct_tl {#1}
- \@@_punct_if_middle:NT {#1}
- { \@@_punct_rule:NN \c_@@_left_tl {#1} }
\xeCJK_FullRight_symbol:N {#1}
}
% \end{macrocode}
@@ -3328,9 +3435,13 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\@@_punct_if_long:NTF {#1}
{ \CJKglue }
{
- \xeCJK_no_break:
- \@@_punct_if_middle:NT {#1}
- { \@@_punct_glue:NN \c_@@_right_tl {#1} }
+ \@@_punct_if_middle:NTF {#1}
+ {
+ \xeCJK_no_break:
+ \@@_punct_glue:NN \c_@@_right_tl {#1}
+ \@@_punct_bound_rule:NN \c_@@_left_tl {#1}
+ }
+ { \xeCJK_no_break: }
}
}
\cs_new_eq:NN \@@_Default_and_FullRight_glue:N \@@_CJK_and_FullRight_glue:N
@@ -3392,20 +3503,19 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%
% \changes{v3.2.4}{2013/07/06}
% {使用 \texttt{AllowBreakBetweenPuncts} 时,相应标点符号仍能与边界对齐。}
+% \changes{v3.2.7}{2013/08/23}
+% {处理 \texttt{AllowBreakBetweenPuncts} 与 \pkg{xeCJKfntef} 的兼容问题。}
%
% \begin{macro}[internal]{\@@_punct_breakable_kern:NN}
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_punct_breakable_kern:NN #1#2
{
\@@_punct_rule:NN \c_@@_right_tl #1
- \@@_punct_hskip:n
- {
- \@@_use_punct_dim:nnn { kern } {#1} {#2} +
- \@@_use_punct_dim:nnn { bound } { \c_@@_right_tl } {#1} +
- \@@_use_punct_dim:nnn { bound } { \c_@@_left_tl } {#2}
- }
+ \@@_punct_breakable_kern:n
+ { \@@_use_punct_dim:nnn { break_kern } {#1} {#2} }
\@@_punct_rule:NN \c_@@_left_tl #2
}
+\cs_new_eq:NN \@@_punct_breakable_kern:n \skip_horizontal:n
% \end{macrocode}
% \end{macro}
%
@@ -3467,6 +3577,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{
\xeCJK_get_punct_bounds:NN \c_@@_right_tl \g_@@_last_punct_tl
\@@_punct_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
+ \@@_punct_offset:NN \c_@@_right_tl \g_@@_last_punct_tl
\group_align_safe_begin:
\tl_case:NoTF \l_peek_token
{ \l_@@_no_break_cs_case_tl }
@@ -3608,6 +3719,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%
% \begin{macro}[internal]{\xeCJK_check_single:NNw}
% \changes{v3.1.1}{2012/12/04}{改进定义,减少使用 \texttt{peek} 函数的次数。}
+% \changes{v3.2.7}{2013/08/30}{与 \cs{CJKspace} 兼容。}
% 使用 \cs{group_align_safe_begin:} 和 \cs{group_align_safe_end:} 是为了防止在表格
% 里面报错。
% \begin{macrocode}
@@ -3616,7 +3728,11 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\xeCJK_peek_catcode_ignore_spaces:NTF \c_catcode_letter_token
{
\bool_if:NTF \l_@@_peek_ignore_spaces_bool
- { \@@_check_single_space:NN #1#2 }
+ {
+ \bool_if:NTF \l_@@_reserve_space_bool
+ { \@@_check_single_save:N #1 #2 ~ }
+ { \@@_check_single_space:NN #1#2 }
+ }
{ \@@_check_single_save:N #1 #2 }
}
{
@@ -3951,6 +4067,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%
% \subsection{标点处理}
%
+% \changes{v3.2.7}{2013/08/22}{实现自定义行首/尾标点符号宽度功能。}
+%
% \cs{XeTeXglyphbouds} 可以得到一个字符的左右边距,用于标点压缩。如果它不可用,则
% 在文档中只能使用 |plain| 这一标点格式原样输出标点。
% \begin{macrocode}
@@ -3979,8 +4097,19 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \begin{macro}{\xeCJKsetwidth}
% 手动设置参数中的标点符号的宽度。
% \begin{macrocode}
-\NewDocumentCommand \xeCJKsetwidth { m m }
- { \tl_map_inline:xn {#1} { \tl_gset:cn { g_@@_punct_width/##1/tl } {#2} } }
+\NewDocumentCommand \xeCJKsetwidth { s m m }
+ {
+ \IfBooleanTF {#1}
+ {
+ \tl_map_inline:xn {#2}
+ { \tl_gset:cn { g_@@_punct_bound_width/##1/tl } {#3} }
+ }
+ {
+ \tl_map_inline:xn {#2}
+ { \tl_gset:cn { g_@@_punct_width/##1/tl } {#3} }
+ }
+ }
+\@onlypreamble \xeCJKsetwidth
\cs_generate_variant:Nn \tl_map_inline:nn { x }
% \end{macrocode}
% \end{macro}
@@ -3990,6 +4119,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \begin{macrocode}
\NewDocumentCommand \xeCJKsetkern { m m m }
{ \tl_gset:cn { g_@@_punct/kern/#1/#2/tl } {#3} }
+\@onlypreamble \xeCJKsetkern
% \end{macrocode}
% \end{macro}
%
@@ -4001,7 +4131,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{macro}
%
% \begin{macro}
-% {AllowBreakBetweenPuncts, KaiMingPunct, LongPunct, MiddlePunct,PunctWidth}
+% {AllowBreakBetweenPuncts,KaiMingPunct,LongPunct,
+% MiddlePunct,PunctWidth,PunctBoundWidth}
% 相关选项声明。
% \begin{macrocode}
\keys_define:nn { xeCJK / options }
@@ -4027,7 +4158,10 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
MiddlePunct .code:n = { \@@_set_special_punct:nn { middle } {#1} } ,
MiddlePunct+ .code:n = { \@@_add_special_punct:nn { middle } {#1} } ,
MiddlePunct- .code:n = { \@@_sub_special_punct:nn { middle } {#1} } ,
- PunctWidth .tl_gset:N = \g_@@_punct_width_tl
+ PunctWidth .tl_gset:N = \g_@@_punct_width_tl ,
+ PunctBoundWidth .tl_gset:N = \g_@@_punct_bound_width_tl ,
+ PunctWidth .value_required: ,
+ PunctBoundWidth .value_required:
}
\bool_new:N \l_@@_punct_breakable_bool
% \end{macrocode}
@@ -4095,14 +4229,12 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \begin{macrocode}
\cs_new_nopar:Npn \@@_punct_dim_csname:nn #1#2
{ c__\l_xeCJK_current_font_tl/\l_xeCJK_punct_style_tl/#1/#2/tl }
-\cs_new_nopar:Npn \@@_punct_dim_csname:nnn
- { \@@_punct_dim_csname:nnnn { \l_xeCJK_punct_style_tl } }
-\cs_new_nopar:Npn \@@_punct_dim_csname:nnnn #1#2#3#4
- { c__\l_xeCJK_current_font_tl/#1/#2/#3/#4/tl }
+\cs_new_nopar:Npn \@@_punct_dim_csname:nnn #1#2#3
+ { c__\l_xeCJK_current_font_tl/\l_xeCJK_punct_style_tl/#1/#2/#3/tl }
\cs_new_nopar:Npn \@@_use_punct_dim:nn #1#2
- { \tl_use:c { \@@_punct_dim_csname:nn {#1} {#2} } }
+ { \use:c { \@@_punct_dim_csname:nn {#1} {#2} } }
\cs_new_nopar:Npn \@@_use_punct_dim:nnn #1#2#3
- { \tl_use:c { \@@_punct_dim_csname:nnn {#1} {#2} {#3} } }
+ { \use:c { \@@_punct_dim_csname:nnn {#1} {#2} {#3} } }
\cs_new_protected_nopar:Npn \@@_save_punct_dim:nnn #1#2#3
{ \tl_const:cx { \@@_punct_dim_csname:nn {#1} {#2} } { \dim_eval:n {#3} } }
\cs_new_protected_nopar:Npn \@@_save_punct_dim:nnnn #1#2#3#4
@@ -4113,11 +4245,11 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%
% 定义标点处理模板。
% \begin{macrocode}
-\DeclareObjectType { xeCJK / punctuation } { \c_three }
+\DeclareObjectType { xeCJK / punctuation } { \c_zero }
% \end{macrocode}
%
% \begin{macrocode}
-\DeclareTemplateInterface { xeCJK / punctuation } { basic } { \c_three }
+\DeclareTemplateInterface { xeCJK / punctuation } { basic } { \c_zero }
{
enabled-global-setting : boolean = true ,
fixed-punct-width : length = \c_max_dim ,
@@ -4132,6 +4264,11 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
mixed-margin-ratio : real = \KeyValue { fixed-margin-ratio } ,
middle-margin-width : length = \KeyValue { fixed-margin-width } ,
middle-margin-ratio : real = \KeyValue { fixed-margin-ratio } ,
+ bound-punct-width : length = \c_max_dim ,
+ bound-punct-ratio : real = \c_nan_fp ,
+ bound-margin-width : length = \c_max_dim ,
+ bound-margin-ratio : real = \c_zero_fp ,
+ enabled-hanging : boolean = false ,
add-min-bound-to-margin : boolean = false ,
optimize-margin : boolean = false ,
margin-minimum : length = \c_zero_dim ,
@@ -4141,9 +4278,9 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
kerning-total-ratio : real = 0.75 ,
optimize-kerning : boolean = false ,
same-align-margin : length = \c_max_dim ,
- same-align-ratio : real = \c_zero_fp ,
+ same-align-ratio : real = \c_nan_fp ,
different-align-margin : length = \c_max_dim ,
- different-align-ratio : real = \c_zero_fp ,
+ different-align-ratio : real = \c_nan_fp ,
kerning-margin-width : length = \c_max_dim ,
kerning-margin-ratio : real = \c_one_fp ,
kerning-margin-minimum : length = \c_zero_dim
@@ -4151,7 +4288,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{macrocode}
%
% \begin{macrocode}
-\DeclareTemplateCode { xeCJK / punctuation } { basic } { \c_three }
+\DeclareTemplateCode { xeCJK / punctuation } { basic } { \c_zero }
{
enabled-global-setting = \l_@@_enabled_global_setting_bool ,
fixed-punct-width = \l_@@_fixed_punct_width_dim ,
@@ -4166,6 +4303,11 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
mixed-margin-ratio = \l_@@_mixed_margin_ratio_fp ,
middle-margin-width = \l_@@_middle_margin_width_dim ,
middle-margin-ratio = \l_@@_middle_margin_ratio_fp ,
+ bound-punct-width = \l_@@_bound_punct_width_dim ,
+ bound-punct-ratio = \l_@@_bound_punct_ratio_fp ,
+ bound-margin-width = \l_@@_bound_margin_width_dim ,
+ bound-margin-ratio = \l_@@_bound_margin_ratio_fp ,
+ enabled-hanging = \l_@@_enabled_hanging_bool ,
add-min-bound-to-margin = \l_@@_add_min_bound_to_margin_bool ,
optimize-margin = \l_@@_optimize_margin_bool ,
margin-minimum = \l_@@_margin_minimum_dim ,
@@ -4182,24 +4324,73 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
kerning-margin-ratio = \l_@@_kerning_margin_ratio_fp ,
kerning-margin-minimum = \l_@@_kerning_margin_minimum_dim
}
+ { \AssignTemplateKeys }
+% \end{macrocode}
+%
+% \begin{macro}[internal]{\xeCJK_get_punct_bounds:NN}
+% |#1| 为 \cs{c_@@_left_tl} 或 \cs{c_@@_right_tl},|#2| 为标点符号。
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \xeCJK_get_punct_bounds:NN #1#2
{
- \AssignTemplateKeys
- \tl_if_blank:nTF {#3}
- { \xeCJK_punct_margin_process:NN {#1} {#2} }
- { \xeCJK_punct_kerning_process:NN {#2} {#3} }
+ \tl_if_exist:cF { \@@_punct_dim_csname:nnn { glue } {#1} {#2} }
+ {
+ \tl_if_eq:NNTF \l_xeCJK_punct_style_tl \c_@@_punct_style_plain_tl
+ {
+ \@@_save_punct_dim:nnnn { rule } {#1} {#2} { \c_zero_dim }
+ \@@_save_punct_dim:nnnn { glue } {#1} {#2} { \c_zero_dim }
+ \@@_save_punct_dim:nnnn { plus } {#1} {#2} { \c_zero_dim }
+ \@@_save_punct_dim:nnnn { minus } {#1} {#2} { \c_zero_dim }
+ \@@_save_punct_dim:nnnn { offset } {#1} {#2} { \c_zero_dim }
+ \@@_save_punct_dim:nnnn { bound } \c_@@_left_tl {#2} { \c_zero_dim }
+ \@@_save_punct_dim:nnnn { bound } \c_@@_right_tl {#2} { \c_zero_dim }
+ }
+ {
+ { \xeCJK_select_font: \xeCJK_calc_punct_dimen:f {#2} }
+ \dim_set:Nn \l_@@_bound_dim
+ { \@@_use_punct_dim:nnn { bound } {#1} {#2} }
+ \dim_set:Nn \l_@@_reverse_bound_dim
+ {
+ \@@_use_punct_dim:nnn { bound }
+ { \xeCJK_reverse:nnn {#1} \c_@@_left_tl \c_@@_right_tl }
+ {#2}
+ }
+ \UseInstance { xeCJK / punctuation } { \l_xeCJK_punct_style_tl }
+ \xeCJK_punct_margin_process:NN {#1} {#2}
+ \xeCJK_punct_offset_process:NN {#1} {#2}
+ }
+ }
}
+\dim_new:N \l_@@_bound_dim
+\dim_new:N \l_@@_reverse_bound_dim
% \end{macrocode}
+% \end{macro}
%
-% \begin{macro}[internal]{\xeCJK_punct_margin_process:NN}
+% \begin{macro}[internal]{\xeCJK_get_punct_kerning:NN}
+% 标点挤压。
% \begin{macrocode}
-\cs_new_protected_nopar:Npn \xeCJK_punct_margin_process:NN #1#2
+\cs_new_protected_nopar:Npn \xeCJK_get_punct_kerning:NN #1#2
{
- \dim_set:Nn \l_@@_bound_dim { \@@_use_punct_dim:nnn { bound } {#1} {#2} }
- \dim_set:Nn \l_@@_reverse_bound_dim
+ \tl_if_exist:cF { \@@_punct_dim_csname:nnn { kern } {#1} {#2} }
{
- \@@_use_punct_dim:nnn { bound }
- { \xeCJK_reverse:nnn {#1} \c_@@_left_tl \c_@@_right_tl } {#2}
+ \tl_if_eq:NNTF \l_xeCJK_punct_style_tl \c_@@_punct_style_plain_tl
+ {
+ \@@_save_punct_dim:nnnn { kern } {#1} {#2} { \c_zero_dim }
+ \@@_save_punct_dim:nnnn { break_kern } {#1} {#2} { \c_zero_dim }
+ }
+ {
+ \UseInstance { xeCJK / punctuation } { \l_xeCJK_punct_style_tl }
+ \xeCJK_punct_kerning_process:NN {#1} {#2}
+ }
}
+ }
+\cs_generate_variant:Nn \xeCJK_get_punct_kerning:NN { o }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\xeCJK_punct_margin_process:NN}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \xeCJK_punct_margin_process:NN #1#2
+ {
\dim_set:Nn \l_@@_tmp_dim
{
\bool_if:NTF \l_@@_enabled_global_setting_bool
@@ -4207,7 +4398,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\cs_if_exist_use:cTF { g_@@_punct_width/#2/tl }
{ \use_none:n }
{
- \xeCJK_if_blank_x:nTF \g_@@_punct_width_tl
+ \tl_if_empty:NTF \g_@@_punct_width_tl
{ \use:n }
{ \g_@@_punct_width_tl \use_none:n }
}
@@ -4223,7 +4414,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
}
}
}
- \@@_save_punct_dim:nnnn { glue } {#1} {#2}
+ \dim_set:Nn \l_@@_tmp_dim
{
\dim_max:nn
{ \l_@@_margin_minimum_dim }
@@ -4274,12 +4465,88 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
}
}
}
+ \@@_save_punct_dim:nnnn { glue } {#1} {#2} { \l_@@_tmp_dim }
+ \@@_save_punct_dim:nnnn { plus } {#1} {#2}
+ {
+ \dim_max:nn { \c_zero_dim }
+ {
+ \@@_punct_if_middle:NTF {#2}
+ {
+ ( \@@_use_punct_dim:nn { width } {#2} -
+ \@@_use_punct_dim:nn { dimen } {#2} ) / \c_two
+ - \l_@@_tmp_dim
+ }
+ { \l_@@_bound_dim - \l_@@_tmp_dim }
+ }
+ }
+ \@@_save_punct_dim:nnnn { minus } {#1} {#2}
+ {
+ \dim_max:nn { \c_zero_dim }
+ {
+ \@@_punct_if_middle:NTF {#2}
+ { .5 \l_@@_tmp_dim }
+ { \l_@@_tmp_dim - \l_@@_reverse_bound_dim }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\xeCJK_punct_offset_process:NN}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \xeCJK_punct_offset_process:NN #1#2
+ {
+ \dim_set:Nn \l_@@_tmp_dim
+ {
+ \bool_if:NTF \l_@@_enabled_global_setting_bool
+ {
+ \cs_if_exist_use:cTF { g_@@_punct_bound_width/#2/tl }
+ { \use_none:n }
+ {
+ \tl_if_empty:NTF \g_@@_punct_bound_width_tl
+ { \use:n }
+ { \g_@@_punct_bound_width_tl \use_none:n }
+ }
+ }
+ { \use:n }
+ { \@@_punct_width_or_ratio:nN { bound } {#2} }
+ }
+ \dim_set:Nn \l_@@_tmp_dim
+ {
+ \bool_if:NTF \l_@@_enabled_hanging_bool
+ { \use:n }
+ { \dim_max:nn { \l_@@_margin_minimum_dim } }
+ {
+ \dim_compare:nNnTF \l_@@_tmp_dim < \c_max_dim
+ {
+ \@@_punct_if_middle:NTF {#2}
+ {
+ \l_@@_tmp_dim
+ - ( \@@_use_punct_dim:nnn { glue } {#1} {#2} )
+ - ( \@@_use_punct_dim:nn { dimen } {#2} )
+ }
+ {
+ \l_@@_tmp_dim - \l_@@_reverse_bound_dim
+ - ( \@@_use_punct_dim:nn { dimen } {#2} )
+ }
+ }
+ {
+ \bool_if:NTF \l_@@_optimize_margin_bool
+ { \dim_min:nn { \l_@@_bound_dim } }
+ { \use:n }
+ { \@@_margin_width_or_ratio:n { bound } }
+ }
+ }
+ }
+ \@@_save_punct_dim:nnnn { offset } {#1} {#2} { \l_@@_tmp_dim }
+ \@@_save_punct_dim:nnnn { rule } {#1} {#2}
+ { - \l_@@_bound_dim + \l_@@_tmp_dim }
}
-\dim_new:N \l_@@_bound_dim
-\dim_new:N \l_@@_reverse_bound_dim
% \end{macrocode}
% \end{macro}
%
+% \changes{v3.2.7}{2013/08/25}{标点宽度设置禁用比例选项的值改为 \texttt{nan}。}
+%
% \begin{macro}[internal]{\@@_punct_width_or_ratio:nN}
% \begin{macrocode}
\cs_new_nopar:Npn \@@_punct_width_or_ratio:nN #1#2
@@ -4287,7 +4554,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\dim_compare:nNnTF { \use:c { l_@@_#1_punct_width_dim } } < \c_max_dim
{ \use:c { l_@@_#1_punct_width_dim } }
{
- \fp_compare:nNnTF { \use:c { l_@@_#1_punct_ratio_fp } } = \c_zero_fp
+ \fp_compare:nNnTF { \use:c { l_@@_#1_punct_ratio_fp } } ? \c_zero_fp
{ \c_max_dim }
{
\fp_use:c { l_@@_#1_punct_ratio_fp }
@@ -4318,7 +4585,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \begin{macrocode}
\cs_new_protected_nopar:Npn \xeCJK_punct_kerning_process:NN #1#2
{
- \@@_save_punct_dim:nnnn { kern } {#1} {#2}
+ \dim_set:Nn \l_@@_tmp_dim
{
\bool_if:nTF
{
@@ -4331,8 +4598,24 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{ \@@_calc_kerning_margin:NN {#1} {#2} }
{ \@@_original_kerning_margin:NN {#1} {#2} }
}
- - ( \@@_use_punct_dim:nnn { bound } \c_@@_right_tl {#1} )
- - ( \@@_use_punct_dim:nnn { bound } \c_@@_left_tl {#2} )
+ }
+ \@@_save_punct_dim:nnnn { kern } {#1} {#2}
+ {
+ \l_@@_tmp_dim
+ - ( \@@_use_punct_dim:nnn { bound } \c_@@_right_tl {#1} )
+ - ( \@@_use_punct_dim:nnn { bound } \c_@@_left_tl {#2} )
+ }
+ \@@_punct_if_right:NF {#2}
+ {
+ \@@_punct_if_right:NT {#1}
+ {
+ \@@_save_punct_dim:nnnn { break_kern } {#1} {#2}
+ {
+ \l_@@_tmp_dim
+ - ( \@@_use_punct_dim:nnn { offset } \c_@@_right_tl {#1} )
+ - ( \@@_use_punct_dim:nnn { offset } \c_@@_left_tl {#2} )
+ }
+ }
}
}
% \end{macrocode}
@@ -4373,7 +4656,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\dim_compare:nNnTF \l_@@_kerning_total_width_dim < \c_max_dim
{ \@@_calc_kerning_margin:nNN \l_@@_kerning_total_width_dim }
{
- \fp_compare:nNnTF \l_@@_kerning_total_ratio_fp = \c_zero_fp
+ \fp_compare:nNnTF \l_@@_kerning_total_ratio_fp ? \c_zero_fp
{
\xeCJK_if_same_class:NNTF {#1} {#2}
{ \@@_kerning_width_or_ratio:nNN { same } }
@@ -4403,18 +4686,17 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\cs_new_nopar:Npn \@@_kerning_width_or_ratio:nNN #1#2#3
{
\dim_compare:nNnTF { \use:c { l_@@_#1_align_margin_dim } } < \c_max_dim
- { \use:c { l_@@_#1_align_margin_dim } \use_none:nn }
- {
- \fp_compare:nNnTF { \use:c { l_@@_#1_align_ratio_fp } } = \c_zero_fp
- { \use:n }
- { \fp_use:c { l_@@_#1_align_ratio_fp } \use_ii:nn }
- }
+ { \use:c { l_@@_#1_align_margin_dim } }
{
- \dim_compare:nNnTF \l_@@_kerning_margin_width_dim < \c_max_dim
- { \l_@@_kerning_margin_width_dim \use_none:n }
- { \fp_use:N \l_@@_kerning_margin_ratio_fp \use:n }
+ \fp_compare:nNnTF { \use:c { l_@@_#1_align_ratio_fp } } ? \c_zero_fp
+ {
+ \dim_compare:nNnTF \l_@@_kerning_margin_width_dim < \c_max_dim
+ { \l_@@_kerning_margin_width_dim \use_none:n }
+ { \fp_use:N \l_@@_kerning_margin_ratio_fp \use:n }
+ }
+ { \fp_use:c { l_@@_#1_align_ratio_fp } \use:n }
+ { \etex_dimexpr:D \@@_original_kerning_margin:NN {#2} {#3} \scan_stop: }
}
- { \etex_dimexpr:D \@@_original_kerning_margin:NN {#2} {#3} \scan_stop: }
}
% \end{macrocode}
% \end{macro}
@@ -4459,33 +4741,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\xeCJK_get_punct_bounds:NN}
-% |#1| 为 \cs{c_@@_left_tl} 或 \cs{c_@@_right_tl},|#2| 为标点符号。
-% \begin{macrocode}
-\cs_new_protected_nopar:Npn \xeCJK_get_punct_bounds:NN #1#2
- {
- \tl_if_exist:cF { \@@_punct_dim_csname:nnn { glue } {#1} {#2} }
- {
- \tl_if_eq:NNTF \l_xeCJK_punct_style_tl \c_@@_punct_style_plain_tl
- {
- \@@_save_punct_dim:nnnn { glue } {#1} {#2} { \c_zero_dim }
- \@@_save_punct_dim:nnnn { bound } \c_@@_left_tl {#2} { \c_zero_dim }
- \@@_save_punct_dim:nnnn { bound } \c_@@_right_tl {#2} { \c_zero_dim }
- }
- {
- { \xeCJK_select_font: \xeCJK_calc_punct_dimen:f {#2} }
- \@@_punct_if_long:NTF {#2}
- { \@@_save_punct_dim:nnnn { glue } {#1} {#2} { \c_zero_dim } }
- {
- \UseInstance { xeCJK / punctuation }
- { \l_xeCJK_punct_style_tl } {#1} {#2} { }
- }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}[internal]{\xeCJK_calc_punct_dimen:N}
% 计算标点的左右实际边距和实际尺寸。对于破折号,计算两标点之间的空白,保证它中间
% 不被断开。
@@ -4509,11 +4764,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{
\@@_save_punct_dim:nnnn { kern } {#1} {#1}
{
- \bool_if:nTF
- {
- \str_if_eq_p:nn {#1} { ^^^^2025 } ||
- \str_if_eq_p:nn {#1} { ^^^^2026 }
- }
+ \str_case:nnTF {#1}
+ { { ^^^^2025 } { } { ^^^^2026 } { } }
{ \c_zero_dim }
{ - \l_@@_tmp_dim }
}
@@ -4534,25 +4786,6 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\xeCJK_get_punct_kerning:NN}
-% 标点挤压。
-% \begin{macrocode}
-\cs_new_protected_nopar:Npn \xeCJK_get_punct_kerning:NN #1#2
- {
- \tl_if_exist:cF { \@@_punct_dim_csname:nnn { kern } {#1} {#2} }
- {
- \tl_if_eq:NNTF \l_xeCJK_punct_style_tl \c_@@_punct_style_plain_tl
- { \@@_save_punct_dim:nnnn { kern } {#1} {#2} { \c_zero_dim } }
- {
- \UseInstance { xeCJK / punctuation }
- { \l_xeCJK_punct_style_tl } { } {#1} {#2}
- }
- }
- }
-\cs_generate_variant:Nn \xeCJK_get_punct_kerning:NN { o }
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}{PunctStyle}
% \begin{macrocode}
\keys_define:nn { xeCJK / options }
@@ -5026,7 +5259,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\cs_gset_protected_nopar:cpx { \@@_family_csname:n {#1} }
{
\group_begin:
- \exp_not:n { \cs_set_eq:NN \@@_update_family:n \use_none:nn }
+ \exp_not:n { \cs_set_eq:NN \@@_update_family:nn \use_none:nn }
\exp_not:n { \fontspec_set_family:Nnn \l_@@_fontspec_family_tl }
{ \exp_not:V \l_@@_fontspec_options_clist }
{ \exp_not:V \l_@@_font_name_tl }
@@ -5670,6 +5903,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%
% \begin{macro}[internal]{\xeCJK_set_mathfont:}
% \changes{v3.2.6}{2013/08/01}{设置粗体时先检查对应字体是否存在。}
+% \changes{v3.2.7}{2013/11/09}{将 CJK 字符的数学归类由 $7$ 改为 $0$,解决汉字路径的问题。}
% 当没有设置 CJK 数学字体时,使用 \cs{CJKfamilydefault} 作为数学字体。
% \begin{macrocode}
\cs_new_protected_nopar:Npn \xeCJK_set_mathfont:
@@ -5700,7 +5934,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\clist_map_inline:Nn \l_@@_tmp_clist
{
\@@_set_char_class_aux:Nnw \xeCJK_gset_mathcode:nnnn {##1}
- { \c_seven } { \c_xeCJK_math_fam_int }
+ { \c_zero } { \c_xeCJK_math_fam_int }
}
}
}
@@ -5826,13 +6060,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\cs_set_eq:NN \xeCJK_CJK_and_Boundary:w \@@_verb_boundary:w
}
}
- \tex_output:D \exp_after:wN \exp_after:wN \exp_after:wN
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \xeCJKOffVerbAddon
- \exp_after:wN \use:n
- \tex_the:D \tex_output:D
- }
+ \@@_add_to_shipout:n { \xeCJKOffVerbAddon }
\xeCJKsetup { xCJKecglue = false }
}
\skip_if_eq:nnTF { \l_@@_verb_exspace_skip } { \c_zero_skip }
@@ -6268,6 +6496,24 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%
% \subsection{兼容性修补}
%
+% \begin{macro}[internal]{\@@_update_url_font:,\Url@MathSetup}
+% \changes{v3.2.7}{2013/11/09}{使通过 \cs{UrlFont} 等命令设置的 CJK 字体生效。}
+% 使通过 \cs{urlstyle} 或者 \cs{UrlFont} 设置的路径中使用的 CJK 字体生效。
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_update_url_font:
+ {
+ \group_begin: \xeCJK_select_font: \exp_after:wN \group_end:
+ \exp_after:wN \tex_textfont:D \exp_after:wN \c_xeCJK_math_fam_int
+ \tex_the:D \tex_font:D
+ }
+\@@_after_end_preamble:n
+ {
+ \bool_if:nT { \g_@@_math_bool && \cs_if_exist_p:N \Url@MathSetup }
+ { \tl_put_right:Nn \Url@MathSetup { \@@_update_url_font: } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[internal]{\fontspec_setup_maths:,\mathrm}
% \changes{v3.2.6}{2013/08/02}{为 \cs{mathrm} 减少一个可能的数学字体族。}
% 如果没有设置 \cs{setboldmathrm},即 \cs{g_fontspec_bfmathrm_tl} 为空,那么
@@ -6878,7 +7124,9 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\xeCJK_Boundary_and_Default: \@@_ulem_Boundary_and_Default:
\xeCJK_Boundary_and_NormalSp: \@@_ulem_Boundary_and_NormalSp:
\xeCJK@fix@penalty \@@_ulem_fix_penalty:
+ \@@_punct_kern:n \@@_ulem_punct_kern:n
\@@_punct_hskip:n \@@_ulem_punct_hskip:n
+ \@@_punct_breakable_kern:n \@@_ulem_punct_breakable_kern:n
\@@_CJK_and_Boundary_aux: \@@_ulem_CJK_and_Boundary_aux:
\@@_Default_and_FullLeft_glue:N \@@_ulem_Default_and_FullLeft_glue:N
\@@_Default_and_FullRight_glue:N \@@_ulem_Default_and_FullRight_glue:N
@@ -7042,6 +7290,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\UL@stop
\@@_ulem_skip_punct_begin:
\@@_punct_glue:NN \c_@@_left_tl {#1}
+ \@@_punct_offset:NN \c_@@_left_tl {#1}
\UL@start
}
{ \@@_ulem_Default_and_FullLeft_glue:N #1 }
@@ -7057,7 +7306,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{
\UL@stop
\@@_ulem_skip_punct_begin:
- \int_compare:nNnF \etex_lastnodetype:D = \c_one
+ \int_compare:nNnTF \etex_lastnodetype:D = \c_one
+ { \@@_zero_glue: }
{ \@@_punct_glue:NN \c_@@_left_tl {#1} }
\UL@start
}
@@ -7077,6 +7327,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\@@_ulem_skip_punct_begin:
\@@_ulem_ccglue:
\@@_punct_glue:NN \c_@@_left_tl {#1}
+ \@@_punct_offset:NN \c_@@_left_tl {#1}
\UL@start
\@@_ulem_class_group_begin:
}
@@ -7096,9 +7347,13 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\@@_punct_if_long:NTF {#1}
{ \@@_ulem_ccglue: }
{
- \xeCJK_no_break:
- \@@_punct_if_middle:NT {#1}
- { \@@_punct_glue:NN \c_@@_right_tl {#1} }
+ \@@_punct_if_middle:NTF {#1}
+ {
+ \xeCJK_no_break:
+ \@@_punct_glue:NN \c_@@_right_tl {#1}
+ \@@_punct_bound_rule:NN \c_@@_left_tl {#1}
+ }
+ { \xeCJK_no_break: }
}
\UL@start
}
@@ -7132,7 +7387,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\@@_punct_if_middle:NTF \g_@@_last_punct_tl
{
\xeCJK_get_punct_bounds:NN \c_@@_left_tl \g_@@_last_punct_tl
- \@@_punct_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
+ \@@_punct_bound_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
\xeCJK_class_group_end: \UL@stop \xeCJK_no_break:
\@@_punct_glue:NN \c_@@_left_tl \g_@@_last_punct_tl
}
@@ -7171,6 +7426,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\@@_punct_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
\xeCJK_class_group_end:
\UL@stop
+ \@@_punct_offset:NN \c_@@_right_tl \g_@@_last_punct_tl
\@@_punct_glue:NN \c_@@_right_tl \g_@@_last_punct_tl
\@@_ulem_skip_punct_end:
\UL@start
@@ -7189,6 +7445,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\@@_punct_rule:NN \c_@@_right_tl \g_@@_last_punct_tl
\xeCJK_class_group_end:
\UL@stop
+ \@@_punct_offset:NN \c_@@_right_tl \g_@@_last_punct_tl
\@@_punct_glue:NN \c_@@_right_tl \g_@@_last_punct_tl
\@@_ulem_ccglue:
\@@_ulem_skip_punct_end:
@@ -7211,6 +7468,32 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[internal]{\@@_ulem_punct_kern:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_ulem_punct_kern:n
+ {
+ \xeCJK_if_ulem_patch:TF
+ { \@@_ulem_hskip:n }
+ { \@@_ulem_punct_kern:n }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[internal]{\@@_ulem_punct_breakable_kern:n}
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_ulem_punct_breakable_kern:n #1
+ {
+ \xeCJK_if_ulem_patch:TF
+ {
+ \xeCJK_class_group_end:
+ \UL@stop \@@_ulem_hskip:n {#1} \UL@start
+ \@@_ulem_class_group_begin:
+ }
+ { \@@_ulem_punct_breakable_kern:n {#1} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[internal]{\@@_ulem_glue:n,\@@_ulem_ccglue:,\@@_ulem_hskip:n}
% 在下划线状态下的分别代替 \cs{CJKglue} 等。
% \begin{macrocode}
@@ -7241,14 +7524,14 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
{ \UL@stop \@@_ulem_restore_CJK_and_Boundary: }
\CJK@preUnderdot
\@@_make_under_symbol:n { \CJK@underdotSkip }
- \cs_gset_eq:NN \@@_save_under_dot_CJKsymbol:N \CJKsymbol
+ \cs_gset_eq:NN \@@_save_under_CJKsymbol:N \CJKsymbol
\cs_set_eq:NN \CJKsymbol \@@_under_CJKsymbol:N
- \@@_restore_output_CJKsymbol:
+ \@@_restore_shipout_CJKsymbol:
\bool_if:NT \l_@@_ulem_hook_used_bool { \UL@start }
#1
\bool_if:NT \l_@@_ulem_hook_used_bool { \UL@stop }
- \cs_set_eq:NN \CJKsymbol \@@_save_under_dot_CJKsymbol:N
- \tex_output:D \exp_after:wN { \l_@@_underdot_output_tl }
+ \cs_set_eq:NN \CJKsymbol \@@_save_under_CJKsymbol:N
+ \tl_clear:N \l_@@_fntef_shipout_tl
\CJK@postUnderdot
\bool_if:NT \l_@@_ulem_hook_used_bool
{ \@@_ulem_restore_CJK_and_Boundary: \UL@start }
@@ -7274,9 +7557,10 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\group_begin:
\hbox_set:Nn \CJK@underdotBox {#2}
\@@_make_under_symbol:n {#1}
- \cs_gset_eq:NN \@@_save_under_dot_CJKsymbol:N \CJKsymbol
+ \cs_set_eq:NN \@@_save_under_CJKsymbol:N \CJKsymbol
\cs_set_eq:NN \CJKsymbol \@@_under_CJKsymbol:N
- \@@_restore_output_CJKsymbol:
+ \@@_restore_shipout_CJKsymbol:
+ \tl_clear:N \l_@@_underdot_shipout_tl
#3
\group_end:
\tex_ignorespaces:D
@@ -7284,23 +7568,26 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[internal]{\@@_restore_output_CJKsymbol:}
+% \begin{macro}[internal]{\@@_restore_shipout_CJKsymbol:}
% \changes{v3.2.3}{2013/06/04}{解决 \cs{CJKunderdot} 跨页使用时影响到页眉页脚的问题。}
% \cs{CJKunderdot} 中对 \cs{CJKsymbol} 的修改会影响到页眉和页脚,需要小心处理。
% \begin{macrocode}
-\cs_new_protected:Npn \@@_restore_output_CJKsymbol:
+\cs_new_protected:Npn \@@_restore_shipout_CJKsymbol:
{
- \tl_set:Nx \l_@@_underdot_output_tl
- { \exp_after:wN \exp_not:n \tex_the:D \tex_output:D }
- \tex_output:D \exp_after:wN
+ \tl_set:Nn \l_@@_fntef_shipout_tl
{
- \exp_after:wN \cs_set_eq:NN
- \exp_after:wN \CJKsymbol
- \exp_after:wN \@@_save_under_dot_CJKsymbol:N
- \l_@@_underdot_output_tl
+ \l_@@_underdot_shipout_tl
+ \cs_set_eq:NN \CJKsymbol \@@_save_under_CJKsymbol:N
}
}
-\tl_new:N \l_@@_underdot_output_tl
+\tl_new:N \l_@@_fntef_shipout_tl
+\tl_new:N \l_@@_underdot_shipout_tl
+\tl_set:Nn \l_@@_underdot_shipout_tl
+ {
+ \cs_set_eq:NN \CJKf@global \scan_stop:
+ \int_zero:N \CJK@nest \CJK@postUnderdot
+ }
+\@@_add_to_shipout:n { \l_@@_fntef_shipout_tl }
% \end{macrocode}
% \end{macro}
%
@@ -7314,7 +7601,7 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
\skip_vertical:n {#1}
\hbox_to_zero:n
{
- \tex_kern:D - \box_wd:N \l_@@_tmp_box
+ \tex_kern:D \box_wd:N \l_@@_tmp_box
\tex_hss:D \box_use:N \CJK@underdotBox \tex_hss:D
}
\tex_vss:D
@@ -7327,10 +7614,8 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_under_CJKsymbol:N #1
{
- \@@_save_under_dot_CJKsymbol:N {#1}
- \hbox_overlap_left:n { \box_use:N \g_@@_under_symbol_box }
- { \xeCJK_make_node:n { CJK } }
- \xeCJK_ignore_spaces:w
+ \hbox_overlap_right:n { \box_use:N \g_@@_under_symbol_box }
+ \xeCJK_no_break: \@@_save_under_CJKsymbol:N {#1}
}
% \end{macrocode}
% \end{macro}
@@ -7426,22 +7711,15 @@ $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
% 和页脚的影响。}
% 为使代码行号结果正确,需要在 \cs{lst@numberstyle} 中恢复 \cs{XeTeXinterchartoks}。
% 在 \texttt{listings} 环境中换页时,对 \cs{XeTeXinterchartoks} 的修改会影响到
-% 页眉和页脚,需要在 \cs{output} 中恢复成正常定义。这里使用 \cs{use:n} 是为了在
-% \cs{tex_output:D} 中不增加额外的分组。加入 \cs{tex_noindent:D} 是为了防止汉字
-% 出现在首行的时候可能会产生额外空行。
+% 页眉和页脚,需要在 \cs{shipout} 盒子中恢复成正常定义。加入 \cs{tex_noindent:D}
+% 是为了防止汉字出现在首行的时候可能会产生额外空行。
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_listings_initial_hook:
{
\tex_noindent:D
\bool_gset_false:N \g_@@_listings_IVS_bool
\tl_put_left:Nn \lst@numberstyle { \l_@@_restore_listings_toks_tl }
- \tex_output:D \exp_after:wN \exp_after:wN \exp_after:wN
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \l_@@_restore_listings_toks_tl
- \exp_after:wN \use:n
- \tex_the:D \tex_output:D
- }
+ \@@_add_to_shipout:n { \l_@@_restore_listings_toks_tl }
\lst@ifbreaklines
\cs_set_eq:NN \@@_listings_CJK_toks: \@@_listings_breaklines_toks:
\fi:
@@ -8627,7 +8905,7 @@ x^2+y^2
\begin{document}
-\section{\textsf{xeCJKfntef} 的简单测试文件}
+\section{\textsf{xeCJKfntef} 的\CJKunderdot{简单测试文件}}
\CJKunderline{汉 字}\CJKunderline{加下划线}
\varCJKunderline{汉字}\varCJKunderline{加下划线}
@@ -8673,11 +8951,14 @@ x^2+y^2
%
% \begin{macrocode}
\documentclass{article}
+\usepackage[draft,columns=1,margin=false,headings=false]{typogrid}
\usepackage{xeCJK}
+\usepackage{xeCJKfntef}
\setCJKmainfont{SimSun}
+\xeCJKsetup{AllowBreakBetweenPuncts}
\xeCJKDeclarePunctStyle { mine }
{
- fixed-punct-ratio = 0 ,
+ fixed-punct-ratio = nan ,
fixed-margin-width = 0 pt ,
mixed-margin-width = \maxdimen ,
mixed-margin-ratio = 0.5 ,
@@ -8685,8 +8966,11 @@ x^2+y^2
middle-margin-ratio = 0.5 ,
add-min-bound-to-margin = true ,
min-bound-to-kerning = true ,
- kerning-margin-minimum = 0.1 em
+ kerning-margin-minimum = 0.1 em ,
+ bound-punct-width = 0 em ,
+ enabled-hanging = true
}
+\xeCJKDeclarePunctStyle { JIS } { bound-punct-ratio = .5 }
\begin{document}
\setlength\parindent{2em}
@@ -8694,18 +8978,22 @@ x^2+y^2
\texttt{------ #1 ------}\par\xeCJKsetup{PunctStyle=#1}\showtexts\par}
\newcommand\showtexts{%
+《第一回\quad 甄士隐梦幻识通灵\quad 贾雨村风尘怀闺秀》\\
+《第一回\quad 甄士隐梦幻识通灵\quad 贾雨村风尘怀闺秀》
+
列位看官:你道此书从何而来?说起根由,虽近荒唐,细按则深有趣味。待在下将此来历注明,方使阅者了然不惑。
-原来女娲氏炼石补天之时,于大荒山无稽崖炼成高经十二丈、方经二十四丈顽石三万六千五百零一块。娲皇氏只用了三万六千五百块,只单单剩了一块未用,便弃在此山青埂峰下。谁知此石自经煆炼之后,灵性已通,因见众石俱得补天,独自己无材不堪入选,遂自怨自叹,日夜悲号惭愧。
+\CJKunderline*{原来女娲氏炼石补天之时,于大荒山无稽崖炼成高经十二丈、方经二十四丈顽石三万六千五百零一块。娲皇氏只用了三万六千五百块,只单单剩了一块未用,便弃在此山青埂峰下。谁知此石自经煆炼之后,灵性已通,因见众石俱得补天,独自己无材不堪入选,遂自怨自叹,日夜悲号惭愧。}
一日,正当嗟悼之际,俄见一僧一道远远而来,生得骨格不凡,丰神迥别,说说笑笑,来至峰下,坐于石边,高谈快论:先是说些云山雾海、神仙玄幻之事,后便说到红尘中荣华富贵。此石听了,不觉打动凡心,也想要到人间去享一享这荣华富贵,但自恨粗蠢,不得已,便口吐人言,向那僧道说道:“大师,弟子蠢物,不能见礼了!适闻二位谈那人世间荣耀繁华,心切慕之。弟子质虽粗蠢,性却稍通,况见二师仙形道体,定非凡品,必有补天济世之材,利物济人之德。如蒙发一点慈心,携带弟子得入红尘,在那富贵场中,温柔乡里受享几年,自当永佩洪恩,万劫不忘也!”二仙师听毕,齐憨笑道:“善哉,善哉!那红尘中有却有些乐事,但不能永远依恃;况又有‘美中不足,好事多磨’八个字紧相连属,瞬息间则又乐极悲生,人非物换,究竟是到头一梦,万境归空,倒不如不去的好。”这石凡心已炽,那里听得进这话去,乃复苦求再四。二仙知不可强制,乃叹道:“此亦静极思动,无中生有之数也!既如此,我们便携你去受享受享,只是到不得意时,切莫后悔!”石道:“自然,自然。”那僧又道:“若说你性灵,却又如此质蠢,并更无奇贵之处。如此也只好踮脚而已。也罢!我如今大施佛法,助你助,待劫终之日,复还本质,以了此案。你道好否?”石头听了,感谢不尽。那僧便念咒书符,大展幻术,将一块大石登时变成一块鲜明莹洁的美玉,且又缩成扇坠大小的可佩可拿。那僧托于掌上,笑道:“形体倒也是个宝物了!还只没有实在的好处,须得再镌上数字,使人一见便知是奇物方妙。然后好携你到那昌明隆盛之邦、诗礼簪缨之族、花柳繁华地、温柔富贵乡去安身乐业。”石头听了,喜不能禁,乃问:“不知赐了弟子那哪几件奇处?又不知携了弟子到何地方?望乞明示,使弟子不惑。”那僧笑道:“你且莫问,日后自然明白的。”说着,便袖了这石,同那道人飘然而去,竟不知投奔何方何舍。
\hfill
-——曹雪芹《红楼梦》}
+——曹雪芹《红楼梦》\unskip\unkern}
\showexample{mine}
\showexample{quanjiao}
+\showexample{JIS}
\showexample{banjiao}
\showexample{CCT}
\showexample{kaiming}
diff --git a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins
index 70a8176ed79..ed3e6954415 100644
--- a/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins
+++ b/Master/texmf-dist/source/xelatex/xecjk/xeCJK.ins
@@ -6,7 +6,7 @@
%%
%% xeCJK.dtx (with options: `install')
%%
-%% $Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $
+%% $Id: xeCJK.dtx 525 2013-11-11 06:32:00Z sobenlee $
%% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%% -----------------------------------------------------------------
%% Author:
@@ -37,7 +37,7 @@
\askforoverwritefalse
\preamble
-$Id: xeCJK.dtx 510 2013-08-15 23:20:17Z sobenlee $
+$Id: xeCJK.dtx 525 2013-11-11 06:32:00Z sobenlee $
$URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
-----------------------------------------------------------------
Author: