Skills lovstudio:any2docx
install
source · Clone the upstream repo
git clone https://github.com/lovstudio/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/lovstudio/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/any2docx" ~/.claude/skills/lovstudio-skills-lovstudio-any2docx && rm -rf "$T"
manifest:
skills/any2docx/SKILL.mdsource content
any2docx — Markdown to Professional DOCX
This skill converts any Markdown file into a professionally styled Word document using Python's python-docx library. It shares the same theme palette as any2pdf and handles all CJK/Latin edge cases correctly.
When to Use
- User wants to convert
→.md
(Word).docx - User needs an editable document (not PDF)
- Document contains CJK characters mixed with Latin text
- Document has fenced code blocks, markdown tables, or lists
- User wants a cover page, table of contents, or watermark in their DOCX
Quick Start
python lovstudio-any2docx/scripts/md2docx.py \ --input report.md \ --output report.docx \ --title "My Report" \ --author "Author Name" \ --theme warm-academic
All parameters except
--input are optional — sensible defaults are applied.
Pre-Conversion Options (MANDATORY)
IMPORTANT: You MUST use the
tool to ask these questions BEFORE
running the conversion. Do NOT list options as plain text — use the tool so the user
gets a proper interactive prompt. Ask all options in a SINGLE AskUserQuestion
call.AskUserQuestion
Use
AskUserQuestion with the following template:
开始转 Word!先帮你确认几个选项 👇 ━━━ 📐 设计风格 ━━━ a) 暖学术 — 陶土色调,温润典雅,适合人文/社科报告 b) 经典论文 — 棕色调,灵感源自 LaTeX classicthesis,适合学术论文 c) Tufte — 极简留白,深红点缀,适合数据叙事/技术写作 d) 期刊蓝 — 藏蓝严谨,灵感源自 IEEE,适合正式发表风格 e) 精装书 — 咖啡色调,书卷气,适合长篇专著/技术书 f) 中国红 — 朱红配暖纸,适合中文正式报告/白皮书 g) 水墨 — 纯灰黑,素雅克制,适合文学/设计类内容 h) GitHub — 蓝白极简,程序员熟悉的风格 i) Nord 冰霜 — 蓝灰北欧风,清爽现代 j) 海洋 — 青绿色调,清新自然 k) 投资报告 — 楷体+深红,专业严谨,适合投资/尽调报告 ━━━ 💧 水印 ━━━ 1) 不加 2) 自定义文字(如 "DRAFT"、"内部资料") 示例回复:"a, 水印:仅供内部参考" 直接说人话就行,不用记编号 😄
Mapping User Choices to CLI Args
| Choice | CLI arg |
|---|---|
| Design style a-k | with value from table below |
| Watermark text | |
Theme Name Mapping
| Choice | value |
|---|---|
| a) 暖学术 | |
| b) 经典论文 | |
| c) Tufte | |
| d) 期刊蓝 | |
| e) 精装书 | |
| f) 中国红 | |
| g) 水墨 | |
| h) GitHub | |
| i) Nord | |
| j) 海洋 | |
| k) 投资报告 | |
Architecture
Markdown → Strip frontmatter → Preprocess (split merged headings) → Parse (code-fence-aware) → python-docx Document → .docx
Key components:
- CJK font switching:
detects CJK runs and assigns Songti SC / SimSun / Noto CJK_split_mixed() - Inline markdown:
handles bold, italic,_parse_inline()
, linkscode - Images: Local paths (relative to .md) and remote URLs — auto-downloaded and embedded via
add_picture() - Code blocks: Shaded paragraph with monospace font and border
- Tables: Header row with accent background, alternating row shading
- Watermark: VML-based diagonal watermark in header (Word-native)
- TOC: Field code with static fallback entries;
triggers auto-refresh on openupdateFields=true - YAML frontmatter: Automatically stripped (won't leak
etc. into output)status: draft - Adaptive cover title: Font size scales down for long titles (36pt → 22pt)
Configuration Reference
| Argument | Default | Description |
|---|---|---|
| (required) | Path to markdown file |
| | Output DOCX path |
| From first H1 | Document title for cover page |
| | Subtitle text |
| | Author name |
| Today | Date string |
| | Version string for cover |
| | Watermark text (empty = none) |
| | Color theme name |
| | Generate cover page |
| | Generate table of contents |
| | Report title in page header |
| author | Brand/author in footer |
| | Stats on cover |
| | Second stats line |
| | Edition line on cover |
| | Max lines per code block |
Dependencies
pip install python-docx --break-system-packages