• CTAN update: xecjk

    From CTAN Announcements via ctan-ann@erik@ctan.org to ctan-ann on Fri Jun 26 21:24:42 2026
    From Newsgroup: comp.text.tex

    Liam Huang submitted an update to the

    xecjk

    package.

    Version: 3.10.0
    License: lppl1.3c

    Summary description: Support for CJK documents in XeLaTeX

    Announcement text: --------------------------------------------------------------------------------
    xeCJK v3.10.0 is a major release focused on Chinese inter-character spacing (CJKglue/CJKecglue) correctness across whatsit-bearing contexts, with broad fixes and a few breaking changes. Highlights:

    NEW FEATURES
    * New \xeCJKchar command bypassing interchar handling, replacing the
    earlier \char redefinition that broke xint and other packages
    (resolves #407, #800).
    * New experiment/halfright-prebreakpenalty option (#811).
    * New experiment/punct-measure-fix option for paragraph-mode
    punctuation-compensation glue eaten by \unskip.
    * New NoBreakLongPunct character property forbidding line breaks
    before long punctuation such as ellipses.
    * Document fonts unified to Noto Serif CJK; xunicode-symbols.tex now
    uses a five-level per-character font fallback chain
    (FreeSerif -> Noto Sans Symbols 2 -> Symbola -> Segoe UI Symbol ->
    DejaVu Sans) for #878.
    * Unicode data resynchronised through Unicode 17.0 (with 15.0 / 15.1
    catch-up).

    BUG FIXES (CJKglue / CJKecglue / boundary recovery)
    * \textcolor and other color whatsit nodes no longer drop CJKecglue
    on either side (#807, #809, #810, #831, #832).
    * \textcolor wrapping ulem-family underline commands no longer
    corrupts CJK inter-character spacing (#830).
    * Spurious inter-word glue after explicit "}", \mbox and \textcolor
    is suppressed (#831).
    * hyperref link annotations preserve CJKecglue across the
    \Hy@BeginAnnot whatsit (#809, #810).
    * xeCJKfntef commands no longer leave a stray space on their right
    side; font-state and \g_@@_last_node_tl are now saved across the
    hbox (#465, #826).
    * hypdoc \HD@target hbox and url \Url@FormatString math entry no
    longer shadow boundary markers (#873, #880).
    * \lstinline now preserves the character code of catcode-6 tokens
    beyond '#' (e.g. when \catcode`\&=6) (#879).
    * Trailing space after a CJK character before a macro is no longer
    emitted as glue prematurely.
    * xCJKecglue option and \xeCJKnobreak handling corrected.

    BREAKING CHANGES
    * \newCJKfontfamily now defines its font-switching command locally
    instead of globally (#751/PR #773).
    * Removed compatibility shims for LaTeX2e versions older than
    2020/10/01 (#746).
    * Minimum LaTeX3 (expl3) version raised to 2025/10/09.


    DEPRECATED
    * \xeCJKsetcharclass is deprecated.

    Full ChangeLog (per \changes{v3.10.0} entries) is available in the package documentation. Source and issue tracker:
    https://github.com/CTeX-org/ctex-kit --------------------------------------------------------------------------------

    This package is located at
    https://mirrors.ctan.org/macros/xetex/latex/xecjk

    More information is at
    https://ctan.org/pkg/xecjk


    --------------------------------------------------------------------------------

    Thanks for the upload.

    For the CTAN Team
    Erik Braun


    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
  • From CTAN Announcements@manfred@ctan.org to ctan-ann on Fri Jul 3 16:54:53 2026
    From Newsgroup: comp.text.tex

    Liam Huang submitted an update to the

    xecjk

    package.

    Version: 3.10.1
    License: lppl1.3c

    Summary description: Support for CJK documents in XeLaTeX

    Announcement text: --------------------------------------------------------------------------------
    This release fixes three bugs related to spurious or missing CJKecglue spacing.

    BUG FIXES

    - Patch LaTeX's `\verb` to drain the cached CJKecglue before entering verbatim content, fixing lost inter-character spacing between CJK text and `\verb` (or `shortvrb` short-hand) (#910).
    - Patch `l3doc`'s `\__codedoc_meta:n` to wrap its argument in `\hbox:n`, fixing a spurious CJKecglue appearing before the first character inside `\meta` (#920).
    - Patch `biblatex`'s `\blx@pagetracker` to clear `\g_@@_last_node_tl`, fixing a spurious CJKecglue appearing before the first character of a Chinese bibliography entry (#931).

    Source code: https://github.com/CTeX-org/ctex-kit
    Issue tracker: https://github.com/CTeX-org/ctex-kit/issues --------------------------------------------------------------------------------

    This package is located at
    https://mirrors.ctan.org/macros/xetex/latex/xecjk

    More information is at
    https://ctan.org/pkg/xecjk


    --------------------------------------------------------------------------------

    Thanks for the upload.

    For the CTAN Team
    Manfred Lotz


    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
  • From CTAN Announcements@manfred@ctan.org to ctan-ann on Mon Jul 13 07:07:35 2026
    From Newsgroup: comp.text.tex

    Liam Huang submitted an update to the

    xecjk

    package.

    Version: 3.10.2
    License: lppl1.3c

    Summary description: Support for CJK documents in XeLaTeX

    Announcement text: --------------------------------------------------------------------------------
    This release introduces new options for em-dash (ta|ueyoA+) ligature handling and Latin punctuation switching, improves line-breaking and spacing around long punctuation marks, and fixes two `CJKecglue`-related bugs.

    NEW FEATURES

    - Add `PoZheHao` character class to support font-level em-dash ligatures (#382).
    - Add `PoZheHaoLigature` option to enable font-level em-dash ligature support (#382).
    - Add `LatinPunct` option, allowing shared CJK/Latin curly quotes, middle dots, and ellipses to be switched to their Latin punctuation counterparts (#389, #431).

    IMPROVEMENTS

    - Check kinsoku (line-breaking prohibition) rules on both sides of a break point between long punctuation and other punctuation: an opening punctuation mark must not hang at the end of a line, and a closing punctuation mark or `NoBreakLongPunct` must not appear at the start of a line (#456).
    - Treat `PoZheHao`-class characters as fullwidth closing punctuation (#382).
    - Change the compression amount between em-dashes to a multi-way maximum, ensuring that two consecutive `U+2014` do not exceed two Chinese character widths in total (#382).
    - Add a new check to coordinate blank compensation for em-dashes occupying two character widths (#382).
    - When ligature is not enabled, add one full blank on each side of an em-dash to ensure consecutive em-dashes occupy two character widths (#382).
    - Restore `PoZheHaoLigature` settings after reset (#382).
    - Restore `LatinPunct` settings after reset (#389).

    BUG FIXES

    - Use `\setlanguage` to actively flush a language whatsit when closing a `\verb` group, fixing the doubled `CJKecglue` issue when a source-code space appears to the right of `\verb` (#919).
    - Patch `\meta` from the `doc` package to wrap argument content in `\hbox:n`, fixing the spurious `CJKecglue` before the first character inside `\meta` (#951).

    DOCUMENTATION

    - Enable `Language` and `PoZheHaoLigature` for the documentation font, so em-dashes are rendered as fullwidth ligature glyphs (#382).
    - Switch the documentation monospaced font to Zhuque Fangsong and the italic font to LXGW WenKai GB Lite (#908).

    Source code: https://github.com/CTeX-org/ctex-kit
    Issue tracker: https://github.com/CTeX-org/ctex-kit/issues --------------------------------------------------------------------------------

    This package is located at
    https://mirrors.ctan.org/macros/xetex/latex/xecjk

    More information is at
    https://ctan.org/pkg/xecjk


    --------------------------------------------------------------------------------

    Thanks for the upload.

    For the CTAN Team
    Manfred Lotz


    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
  • From CTAN Announcements via ctan-ann@erik@ctan.org to ctan-ann on Sun Jul 19 12:56:01 2026
    From Newsgroup: comp.text.tex

    Liam Huang submitted an update to the

    xecjk

    package.

    Version: 3.10.3
    License: lppl1.3c

    Summary description: Support for CJK documents in XeLaTeX

    Announcement text: --------------------------------------------------------------------------------

    This release adds new CJK typesetting features, improves punctuation formatting and text decoration alignment, and fixes a bug.

    NEW FEATURES

    - Add `enabled-left-right-kerning` punctuation format option (#975).
    - Classify Korean Jamo into L/V/T categories: preserve shaping within syllables and restore `\CJKglue` between adjacent syllables (#158).
    - Add `CJStarter` class with optional strict line-start prohibition, keeping normal CJK spacing for small kana (#165).
    - Add `CJLineBreak` option to provide optional strict line-start prohibition for Japanese small kana (#165).

    IMPROVEMENTS

    - Enable adjacent punctuation boundary optimization in full-width format, preserving natural whitespace between a left punctuation mark
    followed by a right punctuation mark (#975).
    - Change the width of kaiming-style sentence-ending period from `0.8em` to full-width (#975).
    - Use `\cleaders` to center underlines relative to the body text, avoiding horizontal offset when the starting position changes (#531).
    - Use `\xleaders` to align wavy lines relative to the body text while maintaining continuous inter-character connections (#967).
    - Use `\cleaders` to center double underlines relative to the body text (#967). - Use `\cleaders` to center strikethrough lines relative to the body text (#967).
    - Use `\cleaders` to center diagonal strikethrough lines relative to the body text (#967).
    - Use `\cleaders` to center custom lines relative to the body text (#967).

    BUG FIXES

    - Detect math nodes in URLs before `\Hy@EndAnnot` ends at top level, and place a trusted Western boundary marker after the link-end whatsit,
    fixing loss of `CJKecglue` on the right side of `\url` (#972).

    Source code: https://github.com/CTeX-org/ctex-kit
    Issue tracker: https://github.com/CTeX-org/ctex-kit/issues

    --------------------------------------------------------------------------------

    This package is located at
    https://mirrors.ctan.org/macros/xetex/latex/xecjk

    More information is at
    https://ctan.org/pkg/xecjk


    --------------------------------------------------------------------------------

    Thanks for the upload.

    For the CTAN Team
    Erik Braun


    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
  • From CTAN Announcements@petra@ctan.org to ctan-ann on Sun Jul 26 09:40:25 2026
    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
  • From CTAN Announcements via ctan-ann@erik@ctan.org to ctan-ann on Sun Aug 9 10:37:39 2026
    From Newsgroup: comp.text.tex

    Liam Huang submitted an update to the

    xecjk

    package.

    Version: 3.10.5
    License: lppl1.3c

    Summary description: Typeset CJK in XeLaTeX

    Announcement text: --------------------------------------------------------------------------------

    This release fixes several bugs related to CJK glue handling, brace-group consumption, hyperlink anchors, and underline/strikethrough decorations, and adds a new transparent wrapper variant for brace-delimited argument forwarding.

    BUG FIXES

    - `\CJKecglue` inserted at source-space positions now uses a portable code path,
    preventing its shrink component from being frozen inside the fixed-width segment
    boxes produced by `ulem` (#1037).
    - Before boundary detection, category-code-4 `&` in the parameter copy is replaced with `\scan_stop:`, fixing compilation errors when commands like `\colorbox` receive arguments containing `&` inside `\halign` (#1043).
    - `\sbox` now uses a dedicated adapter: prefixes such as `\global` must immediately precede `\setbox`, but assignments placed in the `cmd/sbox/before` hook consumed the prefix, causing `\global\sbox` to silently degrade to a local
    assignment (#1029).
    - Only the single triggering left brace is now absorbed instead of swallowing the entire group and re-emitting it, fixing the `Improper alphabetic constant` error when `$BCfJ8(J\\` appears in `tabular` (#1038).
    - Inline anchor outputs `\hyper@anchor`, `\Hy@raisedlink`, and `\__hyp_target_raise:n` are registered as transparent captures so that `\hypertarget`, `\phantomsection`, `\MakeLinkTarget`, unnumbered heading anchors, and manually wrapped anchors no longer mask the actual boundaries on either side; the path via `\hyper@anchorstart` (e.g. `\pdfbookmark`) is not yet
    covered (#1047).
    - The stream capture for `l3doc` is moved from the internal `\__codedoc_meta:n`
    up to the public `\meta`, so that `\CJKecglue` on both sides is evaluated using
    the font metrics outside the command (#1046).
    - Period-style decorations now save end-of-segment state per nesting level, preventing an inner command from overwriting the right end of an outer one (#1012).
    - Body text now always enters `ulem` arguments as literal tokens: only "math followed by a trailing source space" is reformatted, and reformatting first assembles then expands once, preventing `\CJKecglue` to the right of Latin words
    from being trapped in a fixed-width decoration segment box and losing its shrink
    component (#1026).
    - The user manual now explains that a nested segment inside line-style commands
    cannot break across lines, distinguishes line-style from symbol-style commands,
    and provides alternative approaches; a regression guard for the `\UL@onin` path
    is added using "ability to line-break" as the observable (#1057).
    - Wavy underlines and diagonal strikethroughs now use a quarter-em drawing unit
    that scales with font size and ordinary `\leaders`; the minus-sign variant insets by half a period at each end to prevent adjacent commands from merging (#1012).
    - Decoration content is wrapped in an empty `ActualText` marker, and LaTeX tagging is suspended during decoration box construction, preventing glyphs used
    by wavy underlines and diagonal strikethroughs from appearing in PDF text extraction results (#1017).

    NEW FEATURES

    - A new transparent wrapper variant is added that forwards arguments delimited by braces, for use by target functions that consume their argument as `\hbox:n`
    content (#1047).

    Source code: https://github.com/CTeX-org/ctex-kit
    Issue tracker: https://github.com/CTeX-org/ctex-kit/issues

    --------------------------------------------------------------------------------

    This package is located at
    https://mirrors.ctan.org/macros/xetex/latex/xecjk

    More information is at
    https://ctan.org/pkg/xecjk


    --------------------------------------------------------------------------------

    Thanks for the upload.

    For the CTAN Team
    Erik Braun


    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