Install
openclaw skills install @samonysh/elegantbook-latexConverts Markdown into an ElegantBook LaTeX book project and PDF. Invoke when user asks to typeset Markdown as a Chinese LaTeX book with diagrams.
openclaw skills install @samonysh/elegantbook-latexBilingual note: This English edition mirrors
SKILL.zh-CN.md. For the authoritative Chinese version, seeSKILL.zh-CN.md.
本技能用于把用户提供的 Markdown 文档与 ElegantLaTeX/ElegantBook 最新中文模板文件一并交给大模型直接阅读、理解和重写,由大模型新写符合 ElegantBook 风格的 LaTeX 源文件,而不是依赖机械转换器逐行转换。生成过程中需优化表格样式,将 Mermaid 与 PlantUML 图表转换为 SVG 后插入,生成完整 LaTeX 书籍项目,并使用本机 TeX Live 编译为 PDF。遇到编译问题时,需要主动定位、修复并重新编译,直到产出可打开的 PDF 或清晰报告阻塞原因。
| Behaviour | Default | Rationale |
|---|---|---|
| Network access | OFF | Only fetch remote resources when user explicitly approves. |
| Host toolchain install | OFF / fail-closed | Never auto-run pip install, npm install -g, apt install, etc. Report missing deps and wait for manual confirmation. |
LaTeX -shell-escape | OFF | Disabled by default; only enabled when user consents AND environment is sandboxed AND content is trusted. |
Core principles:
-shell-escape on untrusted input.| 行为 | 默认值 | 说明 |
|---|---|---|
| 网络访问 | 关闭 | 仅在用户明确同意后访问网络资源。 |
| 主机工具链安装 | 关闭 / 失败即止 | 不会自动运行 pip install、npm install -g、apt install 等。缺失依赖时报告给用户并等待手动确认。 |
LaTeX -shell-escape | 关闭 | 默认不启用 -shell-escape;仅在用户明确同意、沙箱/容器化环境、受信内容三者同时满足时才可开启。 |
核心原则:
-shell-escape。本技能接受多种输入格式:
| 输入类型 | 说明 |
|---|---|
| Markdown / TXT 文件 | 最常见输入,直接处理。 |
| JSON 结构化数据 | 包含 title、chapters[]、content 字段时作为结构化大纲处理。 |
| 直接 LLM 上下文 | 当用户以对话方式提供内容时,自动从上下文提取大纲与正文。 |
| URL / 仓库地址 | 仅在用户明确同意后抓取远程内容。 |
当用户提出以下任一需求时调用本技能:
用户通常会提供以下一种或多种输入:
.md Markdown 文件;如果缺少关键信息,应采用合理默认值,不要因小问题中断:
xelatex 或 latexmk -xelatex;main.tex、章节文件、图片资源、编译脚本、最终 PDF。最终应交付:
https://github.com/ElegantLaTeX/ElegantBook 最新模板;booktabs / tabularx / longtable / threeparttable 等样式;开始处理前,检查以下命令是否可用:
xelatex --version
latexmk --version
bibtex --version
根据图表类型检查:
node --version
npm --version
mmdc --version
java -version
plantuml -version
如果缺少 Mermaid CLI,报告给用户并等待手动安装。不要自动运行 npm install -g。可提供以下命令供用户手动执行:
npm install -g @mermaid-js/mermaid-cli
缺失时可提供替代方案:保留 Mermaid 源代码块、生成占位图或要求用户安装依赖。
如果缺少 PlantUML,优先检查系统是否已有 plantuml.jar、plantuml 命令或 Java 环境。不要盲目假设环境完整;缺失时应说明并尽可能提供替代方案,例如保留源代码块、生成占位图或要求用户安装依赖。
不要自动运行 tlmgr install、apt install 或任何其他包管理器命令。
⚠️ 本节涉及网络访问。默认 OFF,仅在用户明确同意后执行。
优先使用本地已有的模板文件。如需从 GitHub 获取,必须固定到 release tag(不得使用 master/main):
git clone --branch <TAG> --depth 1 https://github.com/ElegantLaTeX/ElegantBook.git ElegantBook-template
如仓库已存在,不得执行 git pull(可能拉取未审核的上游变更)。如需更新,应删除旧目录后重新 clone 指定 tag。
注意事项:
.tex、elegantbook.cls、README / README-cn、示例章节等关键文件,理解其命令、选项、封面、章节、定理环境、提示盒、列表、代码和表格写法;本技能的核心要求是:大模型直接读取 Markdown 与 ElegantBook 模板文件后,重新创作新的 LaTeX 源文件。
必须遵守:
main.tex 与章节 .tex 的正文结构、叙述、表格、图注和排版应由大模型综合模板风格后新写;figure 环境、caption、label 与必要说明;推荐直写流程:
main.tex,再按章节新写 chapters/chapter-XX.tex;解析 Markdown 的目的不是机械转码,而是帮助大模型建立内容地图、资源清单和重写计划。识别以下 Markdown 元素:
#、##、### 标题层级;```mermaid;```plantuml 或 @startuml ... @enduml;;将 Markdown 改写为更适合中文书籍的表达,并直接写成新的 LaTeX 源码:
# 标题、管道表格、裸代码围栏等,除非它们位于代码示例中;# → \chapter{};## → \section{};### → \subsection{};#### → \subsubsection{};如果 Markdown 只有一个一级标题,可将其作为书名,后续二级标题提升为章。
推荐生成如下结构:
book-project/
main.tex
chapters/
chapter-01.tex
chapter-02.tex
figures/
diagram-001.svg
diagram-001.pdf 或 diagram-001.png(必要时)
tables/
可选:复杂表格片段
assets/
原始图片与其他资源
build.ps1
README-build.md(仅在用户需要或项目复杂时创建)
main.pdf
如 SVG 不能被当前 LaTeX 编译链直接插入,应使用 inkscape、rsvg-convert 或其他工具转换为 PDF,再在 LaTeX 中插入 PDF,同时保留 SVG 原文件。
主文件必须由大模型在阅读最新模板后重新编写。可以参考模板的结构、命令和风格,但不要简单复制示例正文,也不要将 Markdown 机械替换进模板占位符。主文件应基于 ElegantBook 最新中文模板改造,至少包含:
\documentclass[cn,11pt,chinese]{elegantbook}
\title{书名}
\subtitle{副标题}
\author{作者}
\institute{机构}
\date{\today}
\version{1.0}
\extrainfo{本文档由 Markdown 内容整理并基于 ElegantBook 模板排版生成。}
\cover{cover.jpg} % 如无封面可删除或使用模板默认
\logo{logo.png} % 如无 logo 可删除或使用模板默认
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{longtable}
\usepackage{threeparttable}
\usepackage{array}
\usepackage{makecell}
\usepackage{multirow}
\usepackage{graphicx}
\usepackage{svg}
\usepackage{float}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{listings}
\usepackage{xcolor}
\usepackage{hyperref}
\begin{document}
\maketitle
\frontmatter
\tableofcontents
\mainmatter
\input{chapters/chapter-01}
\end{document}
应根据实际 ElegantBook 最新模板调整选项,不要机械套用旧版本语法。若模板包与 TeX Live 中已安装版本不一致,优先使用项目内随模板提供的 .cls 或相关文件。
Markdown 表格不要简单转换为普通竖线表格,也不要逐列照搬成不可读源码。应由大模型理解表格语义后重新设计 LaTeX 表格,优先使用专业排版:
使用 booktabs:
\begin{table}[htbp]
\centering
\caption{表格标题}
\label{tab:example}
\begin{tabular}{lll}
\toprule
列一 & 列二 & 列三 \\
\midrule
内容 & 内容 & 内容 \\
\bottomrule
\end{tabular}
\end{table}
使用 tabularx:
\begin{table}[htbp]
\centering
\caption{宽表格标题}
\label{tab:wide-example}
\begin{tabularx}{\textwidth}{lXX}
\toprule
项目 & 说明 & 备注 \\
\midrule
A & 较长说明文本 & 备注文本 \\
\bottomrule
\end{tabularx}
\end{table}
当行数较多时使用 longtable:
\begin{longtable}{lll}
\caption{跨页表格标题}\label{tab:long-example}\\
\toprule
列一 & 列二 & 列三 \\
\midrule
\endfirsthead
\toprule
列一 & 列二 & 列三 \\
\midrule
\endhead
内容 & 内容 & 内容 \\
\bottomrule
\end{longtable}
tab:chapter-keyword-001;X 或 p{} 控制换行;threeparttable。将以下代码块保存为独立 .mmd 文件:
```mermaid
graph TD
A --> B
```
使用 Mermaid CLI:
mmdc -i 'figures\diagram-001.mmd' -o 'figures\diagram-001.svg' -b transparent
如果需要更稳定的中文字体,可配置 Puppeteer / Mermaid theme CSS,确保图中文字显示正常。
优先尝试:
\begin{figure}[htbp]
\centering
\includesvg[width=0.9\textwidth]{figures/diagram-001.svg}
\caption{图表标题}
\label{fig:diagram-001}
\end{figure}
如果 svg 包依赖 shell escape 或 Inkscape 不可用,应转换为 PDF:
inkscape 'figures\diagram-001.svg' --export-type=pdf --export-filename='figures\diagram-001.pdf'
然后插入:
\includegraphics[width=0.9\textwidth]{figures/diagram-001.pdf}
识别以下形式:
```plantuml
@startuml
Alice -> Bob: Hello
@enduml
```
以及普通代码块或文本中的 @startuml 到 @enduml。
如果系统有 plantuml 命令:
plantuml -tsvg 'figures\diagram-002.puml'
如果使用 jar:
java -jar 'plantuml.jar' -tsvg 'figures\diagram-002.puml'
同 Mermaid,优先保留 SVG,必要时转换为 PDF 插入。
ElegantBook 模板对封面图片有明确尺寸要求。生成或修改 ElegantBook 项目时,封面必须按以下规则处理:
1280×1024。不得只依赖 LaTeX 自动缩放;必须在图片文件层面完成裁剪和缩放。\cover{} 并使用模板默认标题页。figures/cover-original.* 或 figures/cover-pixabay-original.jpg;裁剪后的主封面保存为 figures/cover.png。main.tex 必须设置 \cover{figures/cover.png}。metadata/image-sources.md 或等价文件,包含:来源页面 URL、作者/平台、许可证、访问日期、裁剪方式、最终尺寸。figures/cover.png 的实际像素为 1280×1024。推荐 Python 裁剪逻辑:先按 5:4 比例中心裁剪,再 resize 到 1280×1024。若主体会被中心裁剪切掉,应进行人工裁剪或调整裁剪窗口。
assets/ 或 figures/;caption 和 label;普通代码块使用 listings 或 minted。默认优先 listings,因为 minted 依赖 Python Pygments 与 shell escape。
示例:
\begin{lstlisting}[language=Python,caption={示例代码},label={lst:example}]
print("hello")
\end{lstlisting}
如果用户明确要求高亮效果且环境支持,可使用 minted,并在编译命令中添加 -shell-escape。
⚠️ -shell-escape 默认关闭。仅在用户明确同意且环境沙箱化时才启用。
默认(安全)编译:
latexmk -xelatex -interaction=nonstopmode -file-line-error main.tex
如果没有 latexmk,使用多轮 xelatex:
xelatex -interaction=nonstopmode -file-line-error main.tex
xelatex -interaction=nonstopmode -file-line-error main.tex
如果有参考文献:
xelatex -interaction=nonstopmode -file-line-error main.tex
bibtex main
xelatex -interaction=nonstopmode -file-line-error main.tex
xelatex -interaction=nonstopmode -file-line-error main.tex
遇到错误时必须读取 .log 文件并定位根因,不要只看终端最后几行。
症状:
Unicode character ... not set up for use with LaTeX
处理:
xelatex;症状:找不到 SimSun、Fandol、Source Han 等字体。
处理:
处理顺序:
\includegraphics 插入 PDF/PNG;\includesvg 需要 -shell-escape,但默认关闭;优先使用 PDF 转换方式。处理:
tabularx;p{} 或 X;pdflscape;\resizebox{\textwidth}{!}{...}。必须转义普通文本中的:
# $ % & _ { } ~ ^ \
但不要破坏 LaTeX 命令、数学环境和代码块。
处理:
tlmgr install;交付前执行:
可用命令检查 PDF:
Get-Item main.pdf
如可用,也可用 pdfinfo main.pdf 检查页数。
node_modules、临时日志、调试脚本污染到最终目录,除非用户明确需要;完成后简洁说明:
已生成 ElegantBook LaTeX 书籍项目并编译为 PDF:
- [查看 PDF](computer://.../main.pdf)
- [查看 LaTeX 主文件](computer://.../main.tex)
已处理 Mermaid / PlantUML 图表转换和表格排版优化。
如果有无法自动解决的问题:
项目已生成,但 PDF 编译被以下问题阻塞:...
我已完成的修复:...
建议下一步:...
npm install -g、tlmgr install、apt install 等包管理器命令;-shell-escape;