一个将 Markdown 文档转换为中文 LaTeX (ctexart) 源码的命令行工具。
本项目是一次 Vibe Coding 探索实验——由 AI 辅助完成,从想法到代码的高效转化。项目基于 Rust 语言实现,利用 pulldown-cmark 解析 Markdown AST,并输出可直接编译为 PDF 的 LaTeX 源码。
所谓 "Vibe Coding",是指在 AI 辅助下,开发者更像是在"调教"代码而非传统意义上的编写——用直觉和意图驱动开发,让代码生成紧随思维流动。
- Markdown → LaTeX 转换:支持标题、加粗、斜体、行内代码、代码块、列表等常用语法
- 数学公式支持:原生支持
$...$行内公式和$$...$$块级公式,自动转换为equation*环境 - 公式编号开关:支持
-n/--number-equations参数全局启用公式编号,也可手动编辑.tex文件删除星号添加编号 - 表格支持:支持 Markdown 表格转换为 LaTeX 三线表(使用
booktabs宏包) - 图片支持:支持
和<img>HTML 标签,自动套用 figure 环境 - 链接支持:支持
[text](url)自动转换为\href{}{} - 浮动体控制:支持
-f/--allow-floats参数控制图片和表格是否允许浮动(默认禁止,符合 Markdown 顺序直觉) - 中文优化:自动套用
ctexart模板,中文多级标题使用\chinese{}编号 - 单遍转义:自定义转义算法,避免链式替换导致的二次转义污染
- 块级格式化:代码块和列表环境自动前后空行,提升 LaTeX 源码可读性
- 零运行时依赖:编译为单个可执行文件,无额外依赖
前置要求:
- Rust 1.70+ (通过 rustup 安装)
# 克隆项目
git clone https://github.com/Boranstars/md2tex.git
cd md2tex
# 开发模式运行
cargo run -- your_document.md
# 编译发布版本
cargo build --release
./target/release/md2tex your_document.md从 Release 页面下载对应平台的预编译二进制文件。
# 基本用法:转换 Markdown 文件
md2tex your_document.md
# 指定输出文件
md2tex your_document.md output.tex
# 全局启用公式编号
md2tex your_document.md -n
md2tex your_document.md --number-equations
# 允许图片和表格浮动排版(默认禁止)
md2tex your_document.md -f
md2tex your_document.md --allow-floats
# 查看帮助
md2tex --help# 使用 tectonic(推荐)
tectonic your_document.tex
# 或使用 pdflatex
pdflatex your_document.tex| Markdown | LaTeX 输出 |
|---|---|
# 标题 |
\section{标题} |
## 标题 |
\subsection{标题} |
**加粗** |
\textbf{加粗} |
*斜体* |
\textit{斜体} |
`code` |
\texttt{code} |
```rust ... ``` |
\begin{verbatim}...\end{verbatim} |
- item |
\begin{itemize}\item item\end{itemize} |
$E=mc^2$ |
$E=mc^2$ (行内公式) |
$$E=mc^2$$ |
\begin{equation*}...\end{equation*} (块级公式) |
 |
\begin{figure}[H]\centering...\end{figure} |
[text](url) |
\href{url}{text} |
| col1 | col2 | |
\begin{tabular}...\end{tabular} (三线表) |
- 语言:Rust (stable)
- CLI:clap (derive 模式)
- 解析:pulldown-cmark
- PDF:Tectonic / pdfLaTeX
- 数学公式原生穿透:支持
$...$和$$...$$语法,LaTeX 公式直接透传 - 自动图片渲染:支持
自动转换为\includegraphics{} - 表格支持:解析 Markdown 表格转换为 LaTeX 三线表(
booktabs) - 链接支持:
[text](url)转换为\href{}{} - 浮动体控制:默认禁止浮动,可通过
-f参数开启 - 更多输出格式:支持
ctexbook、article等不同模板 - 配置化:支持 TOML 配置文件自定义模板和行为
MIT License - 详见 LICENSE 文件
欢迎提交 Issue 和 Pull Request!这是一次 Vibe Coding 实验,代码风格和实现可能在探索中不断演进。