summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty')
-rw-r--r--Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty142
1 files changed, 112 insertions, 30 deletions
diff --git a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
index b5e43f0b26b..b253fe395e9 100644
--- a/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
+++ b/Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty
@@ -6,7 +6,7 @@
%%
%% xeCJK.dtx (with options: `package')
%%
-%% $Id: xeCJK.dtx 525 2013-11-11 06:32:00Z sobenlee $
+%% $Id: xeCJK.dtx 533 2013-12-05 10:52:12Z sobenlee $
%% $URL: https://ctex-kit.googlecode.com/svn/trunk/xeCJK/xeCJK.dtx $
%% -----------------------------------------------------------------
%% Author:
@@ -33,11 +33,11 @@
%%
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
-\GetIdInfo$Id: xeCJK.dtx 525 2013-11-11 06:32:00Z sobenlee $
+\GetIdInfo$Id: xeCJK.dtx 533 2013-12-05 10:52:12Z sobenlee $
{Typesetting CJK scripts with XeLaTeX}
\ProvidesExplPackage
{\ExplFileName}
- {\ExplFileDate}{3.2.7}{\ExplFileDescription}
+ {\ExplFileDate}{3.2.8}{\ExplFileDescription}
\msg_new:nnn { xeCJK } { Require-XeTeX }
{
The~xeCJK~package~requires~XeTeX~to~function.\\\\
@@ -242,8 +242,19 @@
\int_gset_eq:NN \g__xeCJK_spacefactor_int \c_one_thousand
\cs_new_protected_nopar:Npn \xeCJK_glue_to_skip:nN #1#2
{
- \hbox_set:Nn \l__xeCJK_tmp_box { #1 \scan_stop: \exp_after:wN } \exp_after:wN
- \skip_set:Nn \exp_after:wN #2 \exp_after:wN { \skip_use:N \tex_lastskip:D }
+ \group_begin:
+ \hbox_set:Nw \l__xeCJK_tmp_box #1 \scan_stop:
+ \int_compare:nNnTF \etex_lastnodetype:D = \c_eleven
+ {
+ \exp_after:wN \hbox_set_end: \exp_after:wN \group_end: \exp_after:wN
+ \skip_set:Nn \exp_after:wN #2 \exp_after:wN
+ { \skip_use:N \tex_lastskip:D }
+ }
+ {
+ \hbox_set_end: \exp_after:wN \group_end: \exp_after:wN
+ \skip_set:Nn \exp_after:wN #2 \exp_after:wN
+ { \dim_use:N \box_wd:N \l__xeCJK_tmp_box }
+ }
}
\prg_new_conditional:Npnn \xeCJK_if_blank_x:n #1 { p , T , F , TF }
{
@@ -3021,7 +3032,7 @@
\keys_define:nn { xeCJK / options }
{
Verb .choices:nn =
- { true , env , env+ , false }
+ { true , env+ , env , false }
{ \int_set_eq:NN \l__xeCJK_verb_case_int \l_keys_choice_int } ,
Verb .default:n = { env }
}
@@ -3029,18 +3040,15 @@
{
\if_case:w \l__xeCJK_verb_case_int
\or:
- \cs_set_eq:NN \CJKglue \__xeCJK_zero_glue:
- \cs_set_eq:NN \CJKecglue \__xeCJK_zero_glue:
+ \__xeCJK_nobreak_skip_zero:
\or:
\int_compare:nNnTF \etex_currentgrouptype:D = \c_fourteen
{ \xeCJKVerbAddon }
- {
- \cs_set_eq:NN \CJKglue \__xeCJK_zero_glue:
- \cs_set_eq:NN \CJKecglue \__xeCJK_zero_glue:
- }
+ { \__xeCJK_nobreak_skip: }
\or:
- \int_compare:nNnT \etex_currentgrouptype:D = \c_fourteen
+ \int_compare:nNnTF \etex_currentgrouptype:D = \c_fourteen
{ \xeCJKVerbAddon }
+ { \__xeCJK_nobreak_skip_zero: }
\fi:
}
\__xeCJK_after_preamble:n
@@ -3048,19 +3056,95 @@
\cs_set_protected_nopar:Npx \verbatim@font
{ \exp_not:o { \verbatim@font } \__xeCJK_verb_font_hook: }
}
+\cs_new_protected_nopar:Npn \__xeCJK_nobreak_skip_zero:
+ {
+ \__xeCJK_reset_shipout_skip:
+ \cs_set_eq:NN \__xeCJK_shipout_check_for_glue: \xeCJK_check_for_glue:
+ \cs_set_eq:NN \__xeCJK_shipout_boundary:w \xeCJK_CJK_and_Boundary:w
+ \tl_put_right:Nn \l__xeCJK_reset_shipout_skip_hook_tl
+ {
+ \cs_set_eq:NN \xeCJK_check_for_glue: \__xeCJK_shipout_check_for_glue:
+ \cs_set_eq:NN \xeCJK_CJK_and_Boundary:w \__xeCJK_shipout_boundary:w
+ }
+ \xeCJK_cs_clear:N \CJKglue
+ \xeCJK_cs_clear:N \CJKecglue
+ \xeCJK_cs_clear:N \xeCJK_check_for_glue:
+ \cs_set_eq:NN \xeCJK_CJK_and_Boundary:w \xeCJK_class_group_end:
+ \cs_set_eq:NN \__xeCJK_punct_hskip:n \__xeCJK_nobreak_hskip:n
+ \cs_set_eq:NN \__xeCJK_punct_breakable_kern:n \__xeCJK_nobreak_hskip:n
+ }
+\cs_new_protected_nopar:Npn \__xeCJK_nobreak_skip:
+ {
+ \__xeCJK_reset_shipout_skip:
+ \xeCJK_glue_to_skip:nN { \CJKglue } \l__xeCJK_ccglue_skip
+ \skip_if_eq:nnTF { \l__xeCJK_ccglue_skip } { \c_zero_skip }
+ { \xeCJK_cs_clear:N \CJKglue }
+ { \cs_set_eq:NN \CJKglue \__xeCJK_nobreak_ccglue: }
+ \xeCJK_glue_to_skip:nN { \CJKecglue } \l__xeCJK_ecglue_skip
+ \skip_if_eq:nnTF { \l__xeCJK_ecglue_skip } { \c_zero_skip }
+ { \xeCJK_cs_clear:N \CJKecglue }
+ { \cs_set_eq:NN \CJKecglue \__xeCJK_nobreak_ecglue: }
+ \cs_set_eq:NN \__xeCJK_punct_hskip:n \__xeCJK_nobreak_hskip:n
+ \cs_set_eq:NN \__xeCJK_punct_breakable_kern:n \__xeCJK_nobreak_hskip:n
+ }
+\cs_new_protected_nopar:Npn \__xeCJK_nobreak_ccglue:
+ { \xeCJK_no_break: \skip_horizontal:N \l__xeCJK_ccglue_skip }
+\cs_new_protected_nopar:Npn \__xeCJK_nobreak_ecglue:
+ { \xeCJK_no_break: \skip_horizontal:N \l__xeCJK_ecglue_skip }
+\cs_new_protected_nopar:Npn \__xeCJK_nobreak_hskip:n
+ { \xeCJK_no_break: \skip_horizontal:n }
+\cs_new_protected_nopar:Npn \__xeCJK_reset_shipout_skip:
+ {
+ \cs_set_eq:NN \__xeCJK_shipout_CJKglue: \CJKglue
+ \cs_set_eq:NN \__xeCJK_shipout_CJKecglue: \CJKecglue
+ \cs_set_eq:NN \__xeCJK_shipout_punct_hskip:n \__xeCJK_punct_hskip:n
+ \cs_set_eq:NN
+ \__xeCJK_shipout_punct_breakable_kern:n \__xeCJK_punct_breakable_kern:n
+ \tl_set:Nx \l__xeCJK_off_verb_addon_tl
+ {
+ \exp_not:c
+ { bool_set_ \bool_if:NTF \l__xeCJK_xecglue_bool { true } { false } :N }
+ \l__xeCJK_xecglue_bool
+ \exp_not:n
+ {
+ \cs_set_eq:NN \CJKglue \__xeCJK_shipout_CJKglue:
+ \cs_set_eq:NN \CJKecglue \__xeCJK_shipout_CJKecglue:
+ \cs_set_eq:NN \__xeCJK_punct_hskip:n \__xeCJK_shipout_punct_hskip:n
+ \cs_set_eq:NN
+ \__xeCJK_punct_breakable_kern:n \__xeCJK_shipout_punct_breakable_kern:n
+ \l__xeCJK_reset_shipout_skip_hook_tl
+ }
+ }
+ \__xeCJK_add_to_shipout:n { \l__xeCJK_off_verb_addon_tl }
+ \xeCJKsetup { xCJKecglue = false }
+ }
+\tl_new:N \l__xeCJK_reset_shipout_skip_hook_tl
\NewDocumentCommand \xeCJKVerbAddon { }
{
\int_compare:nNnF \etex_currentgrouplevel:D = \c_zero
{
\bool_if:NF \l__xeCJK_listings_env_bool
{
- \__xeCJK_set_verb_exspace:
- \__xeCJK_verb_addon:
+ \dim_compare:nNnTF
+ { \tex_fontdimen:D \c_two \tex_font:D } =
+ { \etex_fontcharwd:D \tex_font:D \c__xeCJK_mono_letter_int }
+ {
+ \__xeCJK_set_verb_exspace:
+ \__xeCJK_verb_addon:
+ }
+ {
+ \int_if_odd:nTF { \l__xeCJK_verb_case_int }
+ { \__xeCJK_nobreak_skip_zero: }
+ { \__xeCJK_nobreak_skip: }
+ }
}
}
}
+\int_const:Nn \c__xeCJK_mono_letter_int { 77 }
\bool_new:N \l__xeCJK_listings_env_bool
-\NewDocumentCommand \xeCJKOffVerbAddon { } { }
+\NewDocumentCommand \xeCJKOffVerbAddon { }
+ { \tl_use:N \l__xeCJK_off_verb_addon_tl }
+\tl_new:N \l__xeCJK_off_verb_addon_tl
\cs_new_protected_nopar:Npn \__xeCJK_verb_addon:
{
\bool_if:NF \l__xeCJK_verb_addon_bool
@@ -3071,10 +3155,10 @@
\__xeCJK_set_char_class_eq:nn { HalfLeft } { Default }
\__xeCJK_set_char_class_eq:nn { HalfRight } { Default }
\__xeCJK_set_char_class_eq:nn { NormalSpace } { Default }
- \cs_set_eq:NN \__xeCJK_verb_CJKglue: \CJKglue
- \cs_set_eq:NN \__xeCJK_verb_CJKecglue: \CJKecglue
- \cs_set_eq:NN \__xeCJK_verb_check_for_glue: \xeCJK_check_for_glue:
- \cs_set_eq:NN \__xeCJK_verb_boundary:w \xeCJK_CJK_and_Boundary:w
+ \cs_set_eq:NN \__xeCJK_shipout_CJKglue: \CJKglue
+ \cs_set_eq:NN \__xeCJK_shipout_CJKecglue: \CJKecglue
+ \cs_set_eq:NN \__xeCJK_shipout_check_for_glue: \xeCJK_check_for_glue:
+ \cs_set_eq:NN \__xeCJK_shipout_boundary:w \xeCJK_CJK_and_Boundary:w
\cs_set_protected_nopar:Npx \xeCJKOffVerbAddon
{
\__xeCJK_reset_char_class:n { FullLeft }
@@ -3087,10 +3171,10 @@
\l__xeCJK_xecglue_bool
\exp_not:n
{
- \cs_set_eq:NN \CJKglue \__xeCJK_verb_CJKglue:
- \cs_set_eq:NN \CJKecglue \__xeCJK_verb_CJKecglue:
- \cs_set_eq:NN \xeCJK_check_for_glue: \__xeCJK_verb_check_for_glue:
- \cs_set_eq:NN \xeCJK_CJK_and_Boundary:w \__xeCJK_verb_boundary:w
+ \cs_set_eq:NN \CJKglue \__xeCJK_shipout_CJKglue:
+ \cs_set_eq:NN \CJKecglue \__xeCJK_shipout_CJKecglue:
+ \cs_set_eq:NN \xeCJK_check_for_glue: \__xeCJK_shipout_check_for_glue:
+ \cs_set_eq:NN \xeCJK_CJK_and_Boundary:w \__xeCJK_shipout_boundary:w
}
}
\__xeCJK_add_to_shipout:n { \xeCJKOffVerbAddon }
@@ -3102,18 +3186,16 @@
\xeCJK_cs_clear:N \CJKecglue
}
{
- \cs_set_eq:NN \CJKglue \__xeCJK_verb_ccglue:
- \cs_set_eq:NN \CJKecglue \__xeCJK_verb_ecglue:
+ \skip_set_eq:NN \l__xeCJK_ccglue_skip \l__xeCJK_verb_exspace_skip
+ \skip_set:Nn \l__xeCJK_ecglue_skip { .5 \l__xeCJK_verb_exspace_skip }
+ \cs_set_eq:NN \CJKglue \__xeCJK_nobreak_ccglue:
+ \cs_set_eq:NN \CJKecglue \__xeCJK_nobreak_ecglue:
}
\cs_set_eq:NN \xeCJK_check_for_glue: \CJKecglue
\cs_set_eq:NN \xeCJK_CJK_and_Boundary:w \__xeCJK_verb_CJK_and_Boundary:w
}
\cs_new_protected_nopar:Npn \__xeCJK_verb_CJK_and_Boundary:w
{ \xeCJK_class_group_end: \CJKecglue }
-\cs_new_protected_nopar:Npn \__xeCJK_verb_ccglue:
- { \xeCJK_no_break: \skip_horizontal:N \l__xeCJK_verb_exspace_skip }
-\cs_new_protected_nopar:Npn \__xeCJK_verb_ecglue:
- { \xeCJK_no_break: \skip_horizontal:n { 0.5 \l__xeCJK_verb_exspace_skip } }
\cs_new_protected_nopar:Npn \__xeCJK_reset_char_class:n #1
{
\int_set:Nn \l__xeCJK_tmp_int { \xeCJK_class_num:n {#1} }