From Newsgroup: comp.text.tex
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 BoundaryraACJK 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 packagerCOs Catalogue entry can be viewed at
https://ctan.org/pkg/xecjk
The packagerCOs 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
--- Synchronet 3.22a-Linux NewsLink 1.2