打开 TeXmacs/tests/tmu/212_6.tmu,导出为 PDF,检查零宽空格等不可见字符不会导致渲染异常。
- 在
pdf_hummus_renderer.cpp中,针对ecss10字体的glyph_index 0x17增加直接跳过绘制的逻辑 - 移除旧方案中的
pdf_is_invisible_format_codepoint函数 - 将
renderer::draw接口中的参数名从ch统一改为glyph_index,并新增可选参数codepoint - 在
unicode_font.cpp中调用draw时传入实际 Unicode 码点 - 在
pdf_hummus_renderer.cpp中暂时不使用codepoint进行 Unicode 映射(取消unicode_val逻辑),保留为后续准备
旧方案通过检测 Unicode 码点(如 U+200B)来过滤不可见字符,但存在问题。新方案直接在 PDF 渲染层针对已知有问题的字体/字形索引进行过滤,更加精确。
只针对 ecss10 过滤 0x17 的原因是:在其他 TeX 字体中,0x17 用来表示 \nu(希腊字母 nu),是一个合法的可见字符。如果全局过滤 0x17,会导致这些字体中的 \nu 被错误地跳过渲染。因此必须限定在特定字体上。
0x17是\nu的时候 → cmmi 字体0x17是 U+200B(零宽空格)的时候 → ecss 字体