Skip to content

使用l3doc+xeCJK或ctxdoc下\meta左右间距不相同? #1046

Description

@Explorer-cc

该 issue 是 #1045 的一个子问题,注意到在某些版本的 xecjk 文档中:

Image

参数 meta 的左右间距并不对称。

考虑如下的三个测试MWE:

\documentclass{l3doc}
\begin{document}

Left\meta{name}Right

Left \meta{name}Right

Left\meta{name} Right

Left \meta{name} Right

\end{document}
Image

正常。

\documentclass{l3doc}
\usepackage{xeCJK}
\begin{document}

Left\meta{name}Right

Left \meta{name}Right

Left\meta{name} Right

Left \meta{name} Right

左\meta{name}右

左 \meta{name}右

左\meta{name} 右

左 \meta{name} 右

\end{document}
Image

个人感觉是不太正常的。同时 ctxdoc换了个字体,似乎加剧了这种不正常。

    \listfiles
    \documentclass{ctxdoc}
    \begin{document}

    Left\meta{name}Right

    Left \meta{name}Right

    Left\meta{name} Right

    Left \meta{name} Right

    左\meta{name}右

    左 \meta{name}右

    左\meta{name} 右

    左 \meta{name} 右

    \end{document}
Image

这里只提供第三个例子的\listfiles:

 *File List*
  ctxdoc.cls    2026/07/13 ctex documentation (CTEX)
   l3doc.cls    2026-06-18 L3 Experimental documentation class
    calc.sty    2025/03/01 v4.3b Infix arithmetic (KKT,FJ)
 article.cls    2025/01/22 v1.4n Standard LaTeX document class
  size10.clo    2025/01/22 v1.4n Standard LaTeX file (size option)
     doc.sty    2026-03-13 v3.0r Standard LaTeX documentation package V3 (FMi)
multicol.sty    2025/10/21 v2.0b multicolumn formatting (FMi)
   array.sty    2026/02/24 v2.7b Tabular extension package (FMi)
alphalph.sty    2019/12/09 v2.6 Convert numbers to letters (HO)
infwarerr.sty    2019/12/03 v1.5 Providing info/warning/error messages (HO)
 intcalc.sty    2019/12/15 v1.3 Expandable calculations with integers (HO)
 amsmath.sty    2026/05/19 v2.18d AMS math features
 amstext.sty    2024/11/17 v2.01 AMS text
  amsgen.sty    1999/11/30 v2.0 generic functions
  amsbsy.sty    1999/11/29 v1.2d Bold Symbols
  amsopn.sty    2022/04/08 v2.04 operator names
 amssymb.sty    2013/01/14 v3.01 AMS font symbols
amsfonts.sty    2013/01/14 v3.01 Basic AMSFonts support
booktabs.sty    2020/01/12 v1.61803398 Publication quality tables
   color.sty    1999/02/16
   color.cfg    2016/01/02 v1.6 sample color configuration
   xetex.def    2025/11/01 v5.0p Graphics/color driver for xetex
mathcolor.ltx
colortbl.sty    2026/05/01 v1.0l Color table columns (DPC)
  hologo.sty    2026-04-02 v1.17 A logo collection with bookmark support (HO)
 ltxcmds.sty    2023-12-04 v1.26 LaTeX kernel commands for general use (HO)
kvsetkeys.sty    2022-10-05 v1.19 Key value parser (HO)
kvdefinekeys.sty    2019-12-19 v1.6 Define keys (HO)
pdftexcmds.sty    2020-06-27 v0.33 Utility functions of pdfTeX for LuaTeX (HO)
   iftex.sty    2024/12/12 v1.0g TeX engine tests
kvoptions.sty    2022-06-15 v3.15 Key value format for package options (HO)
  keyval.sty    2026-05-17 v1.15 key=value parser (DPC)
enumitem.sty    2025/02/06 v3.11 Customized lists
  pifont.sty    2020/03/25 PSNFSS-v9.3 Pi font support (SPQR) 
    upzd.fd    2001/06/04 font definitions for U/pzd.
    upsy.fd    2001/06/04 font definitions for U/psy.
textcomp.sty    2024/04/24 v2.1b Standard LaTeX package
   trace.sty    2021/04/18 v1.1f trace LaTeX code
csquotes.sty    2026-05-19 v5.2p context-sensitive quotations (JAW)
etoolbox.sty    2025/10/02 v2.5m e-TeX tools for LaTeX (JAW)
csquotes.def    2026-05-19 v5.2p csquotes generic definitions (JAW)
csquotes.cfg    
fancyvrb.sty    2026/04/16 4.6a verbatim text (tvz,hv)
underscore.sty    2006/09/13
underscore-ltx.sty    2023/09/20 LaTeX firstaid to make underscore protected 
verbatim.sty    2024-01-22 v1.5x LaTeX2e package for verbatim enhancements
  hypdoc.sty    2023-10-26 v1.19 Hyper extensions for doc.sty (HO)
atveryend-ltx.sty    2020/08/19 v1.0a Emulation of the original atveryend packa
ge
with kernel methods
hyperref.sty    2026-06-17 v7.01r Hypertext links for LaTeX
pdfescape.sty    2019/12/09 v1.15 Implements pdfTeX's escape features (HO)
 hycolor.sty    2020-01-27 v1.10 Color options for hyperref/bookmark (HO)
 nameref.sty    2026-01-29 v2.58 Cross-referencing by name of section
refcount.sty    2019/12/15 v3.6 Data extraction from label references (HO)
gettitlestring.sty    2019/12/15 v1.6 Cleanup title references (HO)
stringenc.sty    2019/11/29 v1.12 Convert strings between diff. encodings (HO)
  pd1enc.def    2026-06-17 v7.01r Hyperref: PDFDocEncoding definition (HO)
   puenc.def    2026-06-17 v7.01r Hyperref: PDF Unicode definition (HO)
     url.sty    2013/09/16  ver 3.4  Verb mode for urls, etc.
  bitset.sty    2019/12/09 v1.3 Handle bit-vector datatype (HO)
bigintcalc.sty    2019/12/15 v1.5 Expandable calculations on big integers (HO)
  hxetex.def    2026-06-17 v7.01r Hyperref driver for XeTeX
rerunfilecheck.sty    2025-06-21 v1.11 Rerun checks for auxiliary files (HO)
uniquecounter.sty    2019/12/15 v1.4 Provide unlimited unique counter (HO)
    ctex.sty    2026/07/14 v2.6.4 Chinese adapter in LaTeX (CTEX)
   expl3.sty    2026-06-18 L3 programming layer (loader) 
l3backend-xetex.def    2026-02-18 L3 backend support: XeTeX
ctexhook.sty    2026/07/13 v2.6.4 Document and package hooks (CTEX)
ctexpatch.sty    2026/07/13 v2.6.4 Patching commands (CTEX)
  fix-cm.sty    2020/11/24 v1.1t fixes to LaTeX
  ts1enc.def    2001/06/05 v3.0e (jk/car/fm) Standard LaTeX file
ctexopts.cfg    2026/07/13 v2.6.4 Option configuration file (CTEX)
ctex-engine-xetex.def    2026/07/15 v2.6.4 XeLaTeX adapter (CTEX)
   xeCJK.sty    2026/07/22 v3.10.4 Typesetting CJK scripts with XeLaTeX
xtemplate.sty    2025-10-09 L3 Experimental prototype document functions
fontspec.sty    2025/09/29 v2.9g Font selection for XeLaTeX and LuaLaTeX
  xparse.sty    2025-10-09 L3 Experimental document command parser
fontspec-xetex.sty    2025/09/29 v2.9g Font selection for XeLaTeX and LuaLaTeX
 fontenc.sty    2025/07/18 v2.1d Standard LaTeX package
fontspec.cfg
   xeCJK.cfg    2026/07/22 v3.10.4 Configuration file for xeCJK package
zhnumber.sty    2022/07/14 v3.0 Typesetting numbers with Chinese glyphs
zhnumber-utf8.cfg    2022/07/14 v3.0 Chinese numerals with UTF8 encoding
ctex-heading-article.def    2026/07/14 v2.6.4 Heading modification for article 
(CTEX)
ctex-scheme-chinese-article.def    2026/07/13 v2.6.4 Chinese scheme for article
 (CTEX)
ctex-name-utf8.cfg    2026/07/13 v2.6.4 Caption with encoding UTF-8 (CTEX)
ctex-c5size.clo    2026/07/14 v2.6.4 c5size option (CTEX)
ctex-fontset-windows.def    2026/07/22 v2.6.4 Windows fonts definition (CTEX)
    ctex.cfg
multitoc.sty    2024/06/13 v2.02 MultiToc Package
  ifthen.sty    2024/03/16 v1.1e Standard LaTeX ifthen package (DPC)
geometry.sty    2026/03/07 v6.0 Page Geometry
  ifvtex.sty    2019/10/25 v1.7 ifvtex legacy package. Use iftex instead.
tabularx.sty    2023/12/11 v2.12a `tabularx' package (DPC)
makecell.sty    2009/08/03 V0.1e Managing of Tab Column Heads and Cells
threeparttable.sty    2003/06/13  v 3.0
 siunitx.sty    2026-05-15 v3.5.5 A comprehensive (SI) units package
translations.sty    2022/02/05 v1.12 internationalization of LaTeX2e packages (
CN)
unicode-math.sty    2023/08/13 v0.8r Unicode maths in XeLaTeX and LuaLaTeX
unicode-math-xetex.sty    2023/08/13 v0.8r Unicode maths in XeLaTeX and LuaLaTe
X
l3keys2e.sty    2025-10-09 LaTeX2e option processing using LaTeX3 keys
  xcolor.sty    2024/09/29 v3.02 LaTeX color extensions (UK)
   color.cfg    2016/01/02 v1.6 sample color configuration
mathcolor.ltx
 caption.sty    2023/08/05 v3.6o Customizing captions (AR)
caption3.sty    2023/07/31 v2.4d caption3 kernel (AR)
fancyvrb-ex.sty    2026/04/16
    hbaw.sty    1998/03/19
zref-base.sty    2026-03-07 v2.37 Module base for zref (HO)
etexcmds.sty    2019/12/15 v1.7 Avoid name clashes with e-TeX commands (HO)
 auxhook.sty    2019-12-17 v1.6 Hooks for auxiliary files (HO)
translations-basic-dictionary-english.trsl    (english translation file `transl
ations-basic-dictionary')
    umsa.fd    2013/01/14 v3.01 AMS symbols A
    umsb.fd    2013/01/14 v3.01 AMS symbols B
 ***********

Activity

  1. changed the title [-]ctxdoc下`\meta`左右间距不相同?[/-] [+]使用`l3doc`+`xeCJK`或`ctxdoc`下`\meta`左右间距不相同?[/+] on Aug 4, 2026
  2. github-actions commented on Aug 4, 2026

    @github-actions
    Contributor

    🐛 Bug 分析 #1046

    项目 结果
    根因 当前实现会按源码空格和字符类别分别处理 \meta 两侧;未发现左右使用不同间距的代码路径。截图中的不对称更像是数学尖括号、斜体字形边界及字体变化造成的视觉差异。
    严重程度 🟢 low
    适合后续自动实现 ❌ 否

    📋 详细分析

    复现结论:

    • xeCJK 当前把 \meta 的完整输出作为固定 Default 首尾的 stream 处理,左右边界经过同一套恢复算法,没有单独偏置某一侧。
    • 参数外加的 \hbox 只隔离尖括号与参数内容之间不应出现的 CJKecglue,不会给西文参数单独增加左右空白。
    • Issue 中四种写法本来就对应四种不同的源码空格组合;视觉距离还包含 \langle、\rangle 和斜体字母各自不同的字形边界,不能仅凭像素观感判定 glue 不相等。ctxdoc 更换字体后,这种视觉差异可能更明显。

    代码定位:

    本地在题述提交上运行 codedoc-meta-ecglue01、doc-meta-ecglue01 和 command-boundary01,全部通过;其中统一边界矩阵执行了 1668 项检查,失败数为 0。

    如果要把视觉差异认定为缺陷,还需要给出可计算的期望,例如明确比较左右节点列表或指定字形轮廓之间的目标距离。仅按截图做“光学校正”会涉及字体相关策略,并非范围明确的小修复。


    由 codex / gpt-5.6-sol 生成;本流程只分析,不自动修改代码。

  3. Explorer-cc commented on Aug 4, 2026

    @Explorer-cc
    ContributorAuthor

    同时 ctxdoc换了个字体,似乎加剧了这种不正常

    默认是 「LMMathSymbols10-Regular」

    Image

    使用了 xecjk 之后是「CMSY 10」

    Image

    使用了ctxdoc之后是「TeXGyrePagellaMath-Regular-Identity-H」

    Image
  4. Liam0205 commented on Aug 4, 2026

    @Liam0205
    Contributor

    根因 当前实现会按源码空格和字符类别分别处理 \meta 两侧;未发现左右使用不同间距的代码路径。截图中的不对称更像是数学尖括号、斜体字形边界及字体变化造成的视觉差异。

    这个听起来是在推脱责任,不太合理。

  5. added theissue type on Aug 4, 2026
  6. added 2 commits that reference this issue on Aug 5, 2026
  7. Explorer-cc commented on Aug 5, 2026

    @Explorer-cc
    ContributorAuthor

    根因 当前实现会按源码空格和字符类别分别处理 \meta 两侧;未发现左右使用不同间距的代码路径。截图中的不对称更像是数学尖括号、斜体字形边界及字体变化造成的视觉差异。

    这个听起来是在推脱责任,不太合理。

    提供另一个可供对比的例子:

    \documentclass{l3doc}
    % \usepackage{xeCJK}
    \usepackage{luatexja-fontspec}
    \setmainjfont{FandolSong-Regular.otf}
    
    \begin{document}
    
    Left\meta{name}Right
    
    Left \meta{name}Right
    
    Left\meta{name} Right
    
    Left \meta{name} Right
    
    左\meta{name}右
    
    左 \meta{name}右
    
    左\meta{name} 右
    
    左 \meta{name} 右
    
    \end{document}

    当然,编译需要 lualatex:

    Image

    虽然他们的行为不完全对称,但是似乎是刻意为之。

  8. Liam0205 commented on Aug 5, 2026

    @Liam0205
    Contributor

    @Explorer-cc LuaTeX-ja 是这样的。对于 ec 之间的空格,LuaTeX-ja 的处理思想和 xeCJK 不同。这部分谈不上优劣,只要有自己的逻辑且行为能自洽就可以。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions