diff options
author | Karl Berry <karl@freefriends.org> | 2013-12-06 22:15:10 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-12-06 22:15:10 +0000 |
commit | 3f2352dc162c0f22e60cc8a6f3deb29fb61da4da (patch) | |
tree | 2b3550af491f1d81efd2d67a3579cd8bdfd13cd8 /Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | |
parent | 8c3bc9ab96e351e1189f16dacc40c2dcc678b70a (diff) |
xecjk (6dec13)
git-svn-id: svn://tug.org/texlive/trunk@32345 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty')
-rw-r--r-- | Master/texmf-dist/tex/xelatex/xecjk/xeCJK.sty | 142 |
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} } |