CTAN Comprehensive TeX Archive Network

CTAN update: xecjk

Datum: 26. Juli 2026 07:40:25 MESZ
Liam Huang submitted an update to the xecjk package. Version: 3.10.4 License: lppl1.3c Summary description: Typeset CJK in XeLaTeX Announcement text:
This release introduces a unified command-boundary capture/register framework that replaces numerous ad-hoc mechanisms for handling inter-character spacing around boxes, color changes, hyperlinks, and third-party commands. It also fixes several boundary and glue-handling bugs. NEW FEATURES - New command-boundary capture/register framework that determines the visible head/tail character class of boxes, opaque node streams, and commands with no visible output, and restores inter-character boundaries accordingly (#992). - New experimental `experiment/boundary-register` interface allowing expert users to register custom commands into the unified command-boundary framework (#1010). - New dedicated inline-math boundary class that separately handles end-of-formula spacing and post-formula source spaces in argument contexts, enabling registered commands to restore left/right boundaries with correct direct-formula source-space semantics (#1002). - New `\@@_glue_check_expire_stale:` routine: when the top-level recovery chain finds an empty node list, it clears stale pending state, preventing `\g_@@_glue_check_pending_bool` from surviving across `\hbox`/`\setbox` boundaries (#996). - `siunitx` compatibility: `\unit`, `\qty`, `\num` and v2 legacy names `\si`, `\SI` are registered as fixed Default head/tail stream captures, fixing space loss at unit-command boundaries in CJK context (#1000). BUG FIXES - Fixed range parsing of default endpoints in `\@@_check_num_range:nnNN`. - Boundary-to-CJK source-space check now uses the same `\@@_skip_if_interword:N` test as the Default direction; explicit glue whose natural width differs from the current inter-word space is no longer replaced by `\CJKglue` (#996). - box/wrapped-box capture now rebuilds boundaries as Default head/tail when a box has emitted visible content (non-zero width, non-zero height or depth, with a terminal char/rule/math/kern node) but no character class was observed. Math and `\vrule` etc. that do not trigger interchar transitions are no longer misidentified as "no visible output" (#998). - Default marker replay now synchronises `\spacefactor` with the outer list; post-transparent processing also relocates the marker together with its candidate glue, fixing right-boundary spacing when `xCJKecglue` is enabled and a trailing uppercase letter or `\null` inside a box obscures the boundary suffix (#1003). - Invisible nodes separating a real space from a marker in a normal stream now cause the marker to expire (direct-formula semantics) and preserve the original ordering of intermediate glue and nodes (#1002). - Fixed nested `ulem`/xeCJKfntef underline commands: only the outermost invocation now starts a stream capture, preventing per-nesting state leakage on the capture stack (#992). DOCUMENTATION - Clarified that `xCJKecglue` also controls source spaces adjacent to inline math (#1002). - Documented in the user manual that TeX cannot distinguish source spaces from certain explicit glue, and provided a zero-width `\kern` workaround (#992). - Added Boundary→CJK direction note: certain explicit glue may also be replaced by `CJKglue` (#996). INTERNAL CHANGES - Allowed the Boundary-to-Default recovery path to tentatively remove trailing source inter-word glue that has no infinite-order stretch but does have shrink; if a CJK marker is found beneath, it is replaced by `\CJKecglue`, completing symmetric command-boundary handling with the Default-to-CJK direction (#992). - Command-boundary framework now manages `xeCJKfntef`, box commands, and color commands; removed the legacy fallback that guessed hlist/whatsit categories via a global tl. The glue branch now only accepts immediately adjacent xeCJK markers (#992). - Removed the dedicated color pending boolean; color push/pop and box output are now handled by transparent/wrapped-box capture (#992). - Wrapped the kernel-private `\@imakebox` and `\@iframebox` `[#1][#2]#3` signatures to register `\makebox`/`\framebox`; this wrapper must be updated if the kernel changes that signature (#992). - Migrated link-annotation entry saving and tail-anchor replay to unified stream capture, restoring boundaries on both sides according to the link's actual visible head/tail class (#992). - Registered `\set@color` and `\reset@color` as transparent captures; removed the dedicated color push/pop marker save/replay branch (#992). - Registered `l3color` color push/pop entries as transparent captures; removed the corresponding dedicated marker protection branch (#992). - Migrated `\HD@target` to unified transparent capture, restoring marker and source-space state on both sides (#992). - Wrapped `\Url@z`'s full formatting phase in a fixed Default head/tail stream capture; removed the #880 dedicated drain (#992). - Migrated `\verb` from the entry drain (which assumed Western output) to unified stream capture, restoring boundaries according to verbatim's actual head/tail class (#992). - Registered `\eqref` as fixed Default head/tail and `\cs` as fixed Default head-only stream captures; codedoc/doc meta internal adapters now directly wrap a fixed Default stream, removing the dedicated drain and covering all its public call sites (#992). - Registered kernel `\@setref` (or `hyperref`-saved `\real@setref`) as auto stream capture, replacing the #991 dedicated saved-node/replay patch with the unified framework. - Changed `\blx@pagetracker` from a one-way state drain to transparent capture, making write whatsits transparent to the actual visible boundaries on both sides (#992). - Integrated xeCJKfntef underline commands, native `ulem` entries (e.g. `\uline`), `\xeCJKfntefon`, and standalone symbol commands into stream capture; internal pending is now published through the framework's unified helper; removed fntef-specific tail-state restoration and pending setup (#992). - Measurement-time box isolation for decorative symbols now uses the framework's nestable pause zones, simultaneously saving and restoring marker and pending state (#992). - Connected `\lstinline`'s delimiter, active-character, and brace scanning paths to auto stream capture, making all four source-space combinations around color switches consistent with direct input (#992). Source code: https://github.com/CTeX-org/ctex-kit Issue tracker: https://github.com/CTeX-org/ctex-kit/issues
The package’s Catalogue entry can be viewed at https://ctan.org/pkg/xecjk The package’s files themselves can be inspected at https://mirrors.ctan.org/macros/xetex/latex/xecjk/
Thanks for the upload. For the CTAN Team Petra Rübe-Pugliese
CTAN is run entirely by volunteers and supported by TeX user groups. Please join a user group or donate to one, see https://ctan.org/lugs

xecjk – Typeset CJK in

xeCJK is a package for typesetting documents in Chinese, Japanese or Korean with . It provides CJK-specific automatic glue between CJK and non-CJK characters, full control over CJK punctuation compression, separate font families for CJK and Latin scripts, and a number of fine-grained typographic refinements for the CJK script.

Paketxecjk
Version3.10.4
Copyright2007–2010 Wenchang Sun
2009–2022 Leo Liu
2012–2022 Qing Lee
2026 Liam Huang
BetreuerLiam Huang
Qing Lee
Leo Liu
Jiang Jiang (inaktiv)
Wenchang Sun (inaktiv)

Ankündigungen

mehr

Gästebuch Seiten-Struktur Impressum Autor kontaktieren