该问题是 #1047 的 follow-up,考虑如下的MWE: ```latex \documentclass{article} \usepackage{xeCJK} \usepackage{pifont} \begin{document} 前前前\ding{73}后后后 前前前 \ding{73}后后后 前前前\ding{73} 后后后 前前前 \ding{73} 后后后 \end{document} ``` <img width="1031" height="671" alt="Image" src="https://github.com/user-attachments/assets/e99d60b3-5e94-4099-871c-052ff8d8bb85" /> 这与 #992 以及其 follow-up 有关....我记得提供了用户接口的....但是有内置支持应该更好,毕竟 `pifont` 也应该算是常用的「符号」...
Activity
github-actions commentedon Aug 4, 2026
📋 需求评审 #1049
pifont符号与相邻中文之间自动产生正常的中西文间距,避免用户手动添加空格,并使\ding的行为与直接输入西文符号一致。主要挑战:
pifont字体切换造成的字符分类冲突和状态泄漏,没有恢复符号命令两侧的间距。xCJKecglue=false/true,避免只修复示例中的一种写法。影响范围:
xeCJK和pifont的文档。pifont兼容补丁。\Pisymbol,从而同时覆盖\ding和其他 Pi 字体符号。现有实验性接口已经能作为临时解决办法:
本地宽度比对显示:设置明显可区分的
CJKecglue=5pt时,当前实现比直接西文符号少 10pt,即左右各缺少 5pt;按上述方式注册\Pisymbol后差值归零。因此增加内置支持的技术路径明确。🔧 技术细节
涉及模块:
xeCJK的第三方宏包兼容层和命令边界回归测试。关键文件:
xeCJK/xeCJK.dtx的 pifont 补丁xeCJK/testfiles/pifont01.lvtexperiment/boundary-register的策略说明建议实现: 在现有
pifont加载钩子中,将Pisymbol以内建stream/default策略注册到命令边界框架;随后扩展pifont01,使用直接西文符号作为基准,覆盖左右边界和四种源码空格组合。技术风险: 较低。需要确认嵌套调用
\ding → \Pisymbol → \Pifont不会重复启动边界捕获,并检查测试结束后捕获栈完全归零。由 codex / gpt-5.6-sol 生成;本流程只分析,不自动修改代码。
Explorer-cc commentedon Aug 4, 2026
为什么要写
\PiSymbol或者\Pifont才可,写\ding就不行....这将导致:
补充一些来自
psfonts.dtx的源码信息:而且「
xeCJK/testfiles/pifont01.lvt」文件的存在似乎意味着测试过但是没增加 built-in 支持?Liam0205 commentedon Aug 4, 2026
这个是机制的限制,暂时不太好解决。
pifont01.lvt是更早引入的测试,和 #992 这一系没啥关系。暂时就不增加 built-in 支持了吧,这个功能最近也还有一些 bug report;看着还没收敛。收敛之前,暂时不增加 built-in support 以免扩大「攻击范围」(笑)。