Skip to content

Latest commit

 

History

History
23 lines (16 loc) · 1.4 KB

File metadata and controls

23 lines (16 loc) · 1.4 KB

212_6: 修复 PDF 导出时不可见字符导致的渲染问题

如何测试

打开 TeXmacs/tests/tmu/212_6.tmu,导出为 PDF,检查零宽空格等不可见字符不会导致渲染异常。

2026/05/07 重新设计不可见字符的过滤方案

What

  1. pdf_hummus_renderer.cpp 中,针对 ecss10 字体的 glyph_index 0x17 增加直接跳过绘制的逻辑
  2. 移除旧方案中的 pdf_is_invisible_format_codepoint 函数
  3. renderer::draw 接口中的参数名从 ch 统一改为 glyph_index,并新增可选参数 codepoint
  4. unicode_font.cpp 中调用 draw 时传入实际 Unicode 码点
  5. pdf_hummus_renderer.cpp 中暂时不使用 codepoint 进行 Unicode 映射(取消 unicode_val 逻辑),保留为后续准备

Why

旧方案通过检测 Unicode 码点(如 U+200B)来过滤不可见字符,但存在问题。新方案直接在 PDF 渲染层针对已知有问题的字体/字形索引进行过滤,更加精确。

只针对 ecss10 过滤 0x17 的原因是:在其他 TeX 字体中,0x17 用来表示 \nu(希腊字母 nu),是一个合法的可见字符。如果全局过滤 0x17,会导致这些字体中的 \nu 被错误地跳过渲染。因此必须限定在特定字体上。

关键字体映射信息

  • 0x17\nu 的时候 → cmmi 字体
  • 0x17 是 U+200B(零宽空格)的时候 → ecss 字体