1仕組みと動作原理
階層化設計:エンジンはすべて外部の minimax-skills:minimax-docx(サードパーティ製マーケットプレイスプラグイン)に委ねられ、本スキル自体はエンジンコードを持たず、「試行錯誤で得られた運用ノウハウ+自作ジェネレーター」のみで構成されます。
Thin incremental layer over **`minimax-skills:minimax-docx`**. Not a document engine.
中国語の公的文書生成は同梱の C# ジェネレーターで実現:Program.cs(約260行の OpenXML + Markdig)が Markdown を AST にパースし、ECMA-376 に準拠して docx を構築します。
var mdText = File.ReadAllText(args[0]); var pipeline = new MarkdownPipelineBuilder().UsePipeTables().Build(); var docAst = Markdown.Parse(mdText, pipeline);
機械的に判定可能な配置ルール:LineBreakInline を含む段落(甲/乙の情報ブロック、署名欄)は強制的に左揃えとし、その他の本文は両端揃えとします。これを目視ではなくインラインツリー構造で判定します。
The rule is machine-checkable, so do not eyeball it: if the markdown paragraph's inline tree contains a `LineBreakInline`, left-align that paragraph; otherwise justify it.
リスト番号の正確性は OpenXML のセマンティクスに依存:独立した各リストは個別の NumId + LevelOverride(StartOverrideNumberingValue=1) を取得します。同一の NumId を再利用すると、第3条のリストが4から継続して番号付けされてしまいます。
Each independent markdown list must get its **own** `NumId` plus a `LevelOverride` carrying `StartOverrideNumberingValue = 1`. Reuse one `NumId` across clauses and clause 3's list silently continues from 4.
CJK フォントはデュアルスロット(RunFonts の Ascii/HighAnsi/EastAsia)が必須であり、中国語の太字は黒体(HeiTi)に切り替えます(宋体(SimSun)には真の太字ウェイトがなく、合成太字では文字が潰れるため)。フォントサイズは OpenXML の半ポイント単位を使用します。
A run must set `RunFonts { Ascii, HighAnsi, EastAsia }`. Setting only the Latin slots leaves Chinese characters to Word's fallback
必須の視覚検証チェーン:生成 → XSD validate(minimax CLI) → LibreOffice ヘッドレスで PDF 変換 → pdftoppm で PNG 出力 → ページごとの Read。qlmanage によるサムネイル確認は明示的に禁止されています(ISSUE-008)。
**Banned: `qlmanage` thumbnails as visual proof.** macOS Quick Look renders with a different engine than Word and will happily show a clean-looking page for a document whose info blocks are stretched apart.
ドキュメントルーティングテーブルにより、Word/WPS 原稿→PDF、Markdown→PDF をそれぞれ word-to-pdf.md および pdf-creator へ誘導し、正本となる Word 原稿を Markdown 経由で往復(ラウンドトリップ)させることを明示的に禁止しています。
| Existing Word/WPS → repaired layout / selected excerpt → PDF | Keep the Word source; follow `references/word-to-pdf.md` and `references/verification_protocol.md` |
2コア機能
3外部依存関係
| Kind | Dependency / Endpoint |
|---|---|
| cli | dotnet SDK / dotnet run |
| package | DocumentFormat.OpenXml 3.2.0 + Markdig 1.3.2(NuGet) |
| cli | minimax-docx 引擎 CLI(第三方市场插件 minimax-skills,XSD 校验) |
| cli | LibreOffice soffice --headless(验证转 PDF) |
| cli | poppler pdftoppm(PDF→PNG) |
| cli | Microsoft Word.app(可选,macOS 兼容模式复核) |
4推奨統制措置と判定根拠
- scripts/: ローカルスクリプトまたはコマンドの実行: dotnet run(同梱の Program.cs をローカルでコンパイル・実行)
- 网络端点: 外部ネットワークアクセスの宣言: 初回 dotnet run 時に NuGet 経由で DocumentFormat.OpenXml/Markdig をリストア(SKILL/README に約20秒と明記)
- 本地工作目录: ファイルの読み書きと成果物の出力: ユーザー指定の out.docx の生成・上書き(SKILL では ~$ ロックファイルの事前確認を注意喚起)、ドキュメント近傍の _docxgen/ へのジェネレーターコピー、/tmp/docx への検証成果物の書き込み
5二重目の独立検証
- [ok] 零引擎代码、能力在 minimax-docx — SKILL.md 自述 'This skill contains zero engine code';本仓 grep minimax-docx 仅命中路径引用,引擎目录不在仓库内——外置关系属实。
- [unlocatable] minimax-docx validate CLI 行为 — CLI 位于宿主 ~/.claude/plugins/marketplaces/minimax-skills/…,不在本 pin 源码内,其 XSD 校验具体行为无法在此核验;SKILL 自身亦承认依赖其安装。
- [ok] 自研生成器 Program.cs — File.ReadAllText+Markdown.Parse+OpenXML 组装流程与 csproj 依赖(OpenXml 3.2.0/Markdig 1.3.2/net10.0)属实;对齐/NumId/字体双槽注释在源码中可定位。
- [ok] qlmanage 禁令与 ISSUE-008 叙事 — SKILL.md Banned 段与 known_issues.md ISSUE-008 记录一致;verification_protocol.md 亦重申。
- [ok] ISSUE-012 真 Word 兼容模式案例 — known_issues.md 含根因(元素顺序/缺 tblGrid 等)与 'LibreOffice 全绿、真 Word 兼容模式' 的复现记录;verification_protocol Step 3a 强制 Word 复核。
- [ok] NuGet 首次还原需网络 — SKILL.md quick start 注明 '(first run restores DocumentFormat.OpenXml + Markdig, ~20s)';scripts/README 依赖表 'NuGet reachable' 行一致。
- [ok] 无凭证/无外发代码 — Program.cs/README/引用文件 token 扫描:无 env 密钥、无 requests/urllib、无 curl;网络仅 NuGet 还原。
- [ok] 元数据 — GitHub API:MIT / 1385 stars / pushed 2026-09-09T12:33:29Z;本地 HEAD==pin d5c4678。
6結論
31fc8fead4571a90…