Skip to content

[0605] 修复 stack 结构的 LaTeX 导出为 \substack#3342

Merged
JackYansongLi merged 1 commit into
mainfrom
jl/latex
May 14, 2026
Merged

[0605] 修复 stack 结构的 LaTeX 导出为 \substack#3342
JackYansongLi merged 1 commit into
mainfrom
jl/latex

Conversation

@JackYansongLi
Copy link
Copy Markdown
Contributor

[0605] 修复 stack 结构的 LaTeX 导出为 \substack

相关文档

任务相关的代码文件

  • TeXmacs/progs/convert/latex/tmtex.scm
  • TeXmacs/plugins/latex/progs/convert/latex/tmtex.scm
  • TeXmacs/tests/0605.scm
  • TeXmacs/tests/tex/0605_stack_export.tex
  • TeXmacs/tests/tmu/0605.tmu

如何测试

确定性测试(单元测试)

xmake run 0605

非确定性测试(文档验证)

  1. 打开 Mogan STEM,导入 TeXmacs/tests/tmu/0605.tmu
  2. 导出为 LaTeX,确认公式中的 stack 结构被正确导出为 \substack{... \\ ...}

如何提交

提交前执行以下最少步骤:

xmake run 0605

What

修复 stack 结构在导出 LaTeX 时错误地使用 array 环境的问题,改为正确导出为 \substack{... \\ ...} 格式。

  1. tmtex.scm 中新增 tmtex-stack 函数,将 stack 的表格内容转换为 \substack 参数格式
  2. tmtex-extra-methods% 分发表中注册 stack 的处理函数
  3. 自动添加 mathtools 包依赖(\substack 需要此包)
  4. 添加集成测试 0605.scm 和对应的预期输出文件

Why

\substack 是 LaTeX 中表示多行下标/上标的标准命令(由 mathtools/amsmath 提供),语义上与 TeXmacs 的 stack 结构完全对应。之前导出为 array 环境会导致:

  • 编译结果与原始排版差异较大
  • 不符合数学公式的标准 LaTeX 表达方式
  • 部分期刊投稿系统对 array 嵌套有兼容性问题

How

实现思路:

  1. 参考已有代码中 tmtex-table 的实现,利用 tmtable-parser 解析 stack 的表格结构
  2. 提取每一行的单元格内容,用 tmtex 递归转换每个单元格
  3. \\\\(即 LaTeX 的 \\)作为行分隔符连接各行
  4. 使用 (tex-apply 'substack ...) 生成最终的 LaTeX AST 节点
  5. 调用 (latex-add-extra "mathtools") 确保导出的 LaTeX 文档包含所需的宏包

@JackYansongLi JackYansongLi changed the title [0605] Fix stack LaTeX export to use \substack instead of array environment [0605] 修复 stack 结构的 LaTeX 导出为 \substack May 13, 2026
…onment

- Implement tmtex-stack in tmtex.scm to export stack as \substack{... \\ ...}
- Register stack handler in tmtex-extra-methods% dispatch table
- Auto-add mathtools package dependency
- Add integration test 0605.scm with expected LaTeX output
- xmake run 0605 passes
Copy link
Copy Markdown
Contributor

@MoonL79 MoonL79 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@JackYansongLi JackYansongLi merged commit b5a1892 into main May 14, 2026
2 checks passed
@JackYansongLi JackYansongLi deleted the jl/latex branch May 14, 2026 01:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants