用途:把英文/韩文 Markdown(提案、IRB 说明信、讲义、参考表等)经 pandoc + xelatex 渲染为 PDF,只负责排版(CJK 字体、表格列宽),不使用 Quarto(其 tbl-colwidths 有 PDF 回归问题)。不适用:带参考文献的稿件、机构 .docx 表单、ICMJE COI 表单、图表或 PPTX。
依赖:需要 Python 3(wrapper 使用);FontTools 可选,用于字体覆盖检查(python3 -m pip install fonttools)。安装命令:macOS 用 brew install pandoc 与 brew install --cask mactex-no-gui;Linux 用 sudo apt-get install pandoc texlive-xetex texlive-lang-cjk fonts-noto-cjk;Windows PowerShell 用 winget install --id JohnMacFarlane.Pandoc 与 winget install --id MiKTeX.MiKTeX(之后在 Git Bash 运行)。Windows 自带 Malgun Gothic,无需下载 CJK 字体。检测依赖:bash scripts/check_deps.sh。
工作流:一、编写带 frontmatter 的 Markdown,需同时设置 mainfont 与 CJKmainfont,否则韩文回退为 Times New Roman;脚本在字段缺失时按操作系统自动选择默认字体,建议 Linux/CI 用 Noto Sans CJK KR、Windows 用 Malgun Gothic。表格数字必须从源 CSV 或分析输出读取,不可转抄;流通 PDF 不应含变更历史、内部版本号或 PI 署名。二、推断列宽:python3 scripts/infer_colwidths.py input.md > input.colwidths.md,按内容计算列宽(CJK 计 2 格)。三、渲染:bash scripts/render_pdf.sh -i input.colwidths.md -o output.pdf,或一步到位 bash scripts/render_pdf.sh -i input.md -o output.pdf --infer-colwidths。frontmatter 优先于 wrapper 默认值,-- 后显式 pandoc 参数可再覆盖。标准 article 类只认 10/11/12pt,其他字号且未设 documentclass 时 wrapper 切换到 KOMA-Script scrartcl 并记录。
三.五、渲染前扫描科学符号与 CJK 字形:python3 scripts/scan_glyph_coverage.py input.md --strict(可加 --font 与 --font-index 做真实 cmap 检查)。render_pdf.sh 会统计 Missing character 警告,有则列出字形并退出 4,PDF 已写出但不完整;--allow-missing-glyphs 可列出并退出 0。扫描不验证 shaping、回退字体、数学字体或最终 PDF 字形。
四、视觉核验:首列标签是否单行、数据列宽度是否足够、韩文是否损坏、科学符号是否缺失、是否暴露版本信息。渲染异常可读 references/known_pitfalls.md 与 references/pandoc_korean_cheatsheet.md。templates/ 提供英文模板及韩文变体。