1. 手机Kimi导出文档的真实困境:从复制粘贴到LaTeX编译
手机Kimi导出文档这件事,说小也小,说大能让人在交付前一刻崩溃。Kimi 的长文本能力确实能帮你把一份技术方案从零写到八成,但真正卡住流程的,往往不是生成质量,而是「最后一公里」——你在手机屏幕上看到的工整表格、层级列表、LaTeX 公式,一旦离开 App,就变成了一堆需要手工修复的源码碎片。
我试过最原始的方式:全选复制,粘贴到备忘录,再同步到电脑。结果表格塌成竖线,公式变成\[ \]包裹的裸文本,代码缩进全乱。截图更不可行,因为交付物需要可编辑、可检索、可编译。后来我把流程拆成两段:手机端只负责把 Kimi 对话导出为干净的 Markdown 文件,电脑端用 Pandoc 把 Markdown 转成 LaTeX 并编译成 PDF。中间需要一个稳定的 API 通道来处理格式清洗和公式校验,TaoToken 的统一 Key 正好补上这一环。
这套流程适合三类人:需要移动办公的 AI 产品经理,经常在通勤路上用 Kimi 写 PRD 或技术方案;需要把 AI 生成内容整理成学术文档的研究者,公式和引用不能丢;以及习惯用 Markdown 做单一事实来源的开发者,最终交付物是 LaTeX 排版的 PDF 或 Word。核心检索词就三个:Kimi 导出、Markdown 转 LaTeX、Pandoc 配置。下面从环境准备开始,一步步把链路跑通。
2. TaoToken 前置:统一 Key 与 API 通道准备
TaoToken 在这条链路里的角色是「格式清洗与公式校验的 API 通道」。手机端 Kimi 导出的 Markdown 往往带有对话残留,比如「好的,以下是……」「希望对你有帮助」这类前后缀,以及不规范的 LaTeX 分隔符。手工清理费时且容易漏,用脚本调用模型做一次结构化清洗更可靠。TaoToken 提供统一的 API Key,兼容常见的 OpenAI 风格接口,你不需要在多个平台之间切换密钥。
先到官网注册并创建 API Key。地址是https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=,注册后在控制台生成 Key。控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_content=console&utm_campaign=rewrite。API Key 管理页面:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite。
API 基础地址是https://taotoken.net/api,注意这个地址不加 UTM 参数,直接用于代码里的base_url。如果你后续要做长期编码或 Agent 任务,可以了解 Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite。接入文档在https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite,里面有各语言 SDK 的调用示例。
注意:API Key 只保存在本地环境变量或配置文件中,不要硬编码进脚本后提交到公开仓库。手机端导出的 Markdown 文件里也不要粘贴 Key。
拿到 Key 后,先验证通道是否可用。用 curl 发一个最小请求:
export TAOTOKEN_API_KEY="你的Key" curl -s https://taotoken.net/api/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "只回复 OK"}], "max_tokens": 10 }'返回 JSON 里choices[0].message.content包含OK就说明通道正常。这一步不涉及任何网络代理工具,直接走标准 HTTPS 请求。
3. 可复制配置:Pandoc 与 config.toml 骨架
Pandoc 的安装按平台来。macOS 用brew install pandoc,Ubuntu/Debian 用sudo apt install pandoc,Windows 用winget install --id JohnMacFarlane.Pandoc。LaTeX 编译需要 TeX 发行版,推荐 TeX Live 或 MiKTeX。验证安装:
pandoc --version xelatex --version接下来是 Pandoc 的默认配置文件。Pandoc 从~/.pandoc/defaults/或当前目录的defaults文件夹读取.yaml文件,但很多人习惯用config.toml管理项目级参数。下面是一个可复制的config.toml骨架,放在项目根目录,配合pandoc --defaults config.toml使用:
# config.toml - Pandoc 项目配置骨架 # 用法: pandoc --defaults config.toml input.md -o output.pdf from = "markdown+tex_math_dollars+pipe_tables+footnotes" to = "latex" output-file = "output.pdf" pdf-engine = "xelatex" # 独立文档,保留完整 LaTeX 导言区 standalone = true table-of-contents = true toc-depth = 3 number-sections = true # 中文字体设置,避免 PDF 中文乱码 variables = { CJKmainfont = "Noto Sans CJK SC", mainfont = "Latin Modern Roman" } # 代码高亮 highlight-style = "tango" # 资源路径,图片和引用文件放这里 resource-path = ["."] # 元数据 metadata = { title = "Kimi 导出文档", author = "AI 产品经理" }如果你需要更细粒度的 LaTeX 控制,可以单独写一个header.tex文件,在config.toml里通过include-in-header引入:
include-in-header = ["header.tex"]header.tex里放宏包和页面设置:
\usepackage{geometry} \geometry{a4paper, margin=2.5cm} \usepackage{booktabs} \usepackage{longtable} \usepackage{graphicx} \usepackage{hyperref} \hypersetup{colorlinks=true, linkcolor=blue, urlcolor=blue}Markdown 源文件里,LaTeX 公式用$...$行内和$$...$$块级。Pandoc 的tex_math_dollars扩展会正确识别。表格用 pipe table 语法,Pandoc 会转成 LaTeX 的longtable或tabular。代码块标注语言,highlight-style会生效。
4. 验证请求与成功结果:从 Kimi 复制到 PDF 编译
手机端 Kimi 导出 Markdown 的实操:在对话页面长按选中需要的内容,选择「复制」,粘贴到手机上的 Markdown 编辑器(如 Obsidian 移动端、iA Writer 或纯文本编辑器),保存为.md文件。如果 Kimi 直接提供「导出为 Markdown」按钮,优先用原生导出。文件通过网盘、AirDrop 或 Git 同步到电脑。
到电脑后,先做一次格式清洗。用 Python 脚本调用 TaoToken API 清理对话残留:
import os, requests API_KEY = os.environ["TAOTOKEN_API_KEY"] BASE_URL = "https://taotoken.net/api" def clean_markdown(raw_text): resp = requests.post( f"{BASE_URL}/chat/completions", headers={"Authorization": f"Bearer {API_KEY}"}, json={ "model": "gpt-4o-mini", "messages": [ {"role": "system", "content": "你是 Markdown 清洗助手。删除对话前后缀,保留所有表格、代码块和 LaTeX 公式,只输出清洗后的 Markdown 正文。"}, {"role": "user", "content": raw_text} ], "temperature": 0 }, timeout=60 ) resp.raise_for_status() return resp.json()["choices"][0]["message"]["content"] if __name__ == "__main__": with open("kimi_raw.md", "r", encoding="utf-8") as f: raw = f.read() cleaned = clean_markdown(raw) with open("kimi_clean.md", "w", encoding="utf-8") as f: f.write(cleaned) print("清洗完成,输出 kimi_clean.md")运行后检查kimi_clean.md,确认表格分隔线完整、公式$配对、代码块围栏闭合。然后执行 Pandoc 转换:
pandoc --defaults config.toml kimi_clean.md -o kimi_output.pdf成功时终端无报错,当前目录生成kimi_output.pdf。用pdfinfo kimi_output.pdf查看页数和元数据。打开 PDF 检查:目录页存在,章节编号连续,中文无乱码,公式渲染为数学符号而非源码,表格边框正常,代码块有高亮。
如果只想生成.tex源文件而不直接编译:
pandoc --defaults config.toml kimi_clean.md -o kimi_output.tex然后用xelatex kimi_output.tex手动编译,方便排查 LaTeX 层面的问题。
5. 本篇常见错排查:Pandoc 报错与公式乱码
错误一:pandoc: Cannot decode byte '\xef': Data.Text.Encoding: Invalid UTF-8 stream
原因:手机端导出的 Markdown 文件编码不是 UTF-8,可能是 GBK 或带 BOM。解决:用file -i kimi_raw.md查看编码,转成 UTF-8:
iconv -f GBK -t UTF-8 kimi_raw.md -o kimi_raw_utf8.md如果带 BOM,用sed -i '1s/^\xEF\xBB\xBF//' kimi_raw.md去掉。
错误二:xelatex: Font "Noto Sans CJK SC" not found
原因:系统没装对应中文字体。解决:macOS 用brew install --cask font-noto-sans-cjk-sc,Ubuntu 用sudo apt install fonts-noto-cjk。或者把config.toml里的CJKmainfont改成系统已有字体,用fc-list :lang=zh查看可用中文字体。
错误三:公式在 PDF 里显示为源码$E=mc^2$
原因:Pandoc 的from格式没启用tex_math_dollars扩展,或者公式分隔符被清洗脚本改成了\(...\)。解决:确认config.toml里from = "markdown+tex_math_dollars+...",并检查清洗后的 Markdown 里公式仍是$...$或$$...$$。
错误四:表格列宽溢出页面
原因:LaTeX 的tabular不自动换行。解决:在header.tex里引入longtable和array,或者用 Pandoc 的--columns参数控制。更稳妥的方式是在 Markdown 里避免超宽表格,拆成多个小表。
错误五:API 返回 401 或 403
原因:Key 无效、过期或请求头格式不对。解决:检查Authorization: Bearer <Key>中间有空格,Key 没有多余引号。到控制台重新生成 Key:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api-keys&utm_campaign=rewrite。如果只是验证模型输出,可以直接用模型对话页面测试:https://taotoken.net/chat?utm_source=taotoken_aicg_blog_end&utm_content=model-chat&utm_campaign=rewrite。
错误六:Pandoc 转换后代码块没有高亮
原因:highlight-style指定的主题不存在,或代码块没标语言。解决:用pandoc --list-highlight-styles查看可用主题,代码块围栏后必须跟语言标识,如```python。
6. 语义一致 CTA:把链路固化成可复用工作流
这套流程跑通一次之后,建议把它固化成脚本。我自己的做法是建一个kimi2latex目录,里面放config.toml、header.tex、clean.py和一个Makefile。手机端 Kimi 导出 Markdown 后同步到raw/目录,执行make就自动完成清洗、转换、编译,输出到output/。Makefile 骨架:
RAW := $(wildcard raw/*.md) CLEAN := $(patsubst raw/%.md, clean/%.md, $(RAW)) PDF := $(patsubst clean/%.md, output/%.pdf, $(CLEAN)) all: $(PDF) clean/%.md: raw/%.md @mkdir -p clean python clean.py $< $@ output/%.pdf: clean/%.md config.toml header.tex @mkdir -p output pandoc --defaults config.toml $< -o $@ .PHONY: all长期做编码或 Agent 任务的话,Coding Plan 的额度模型更适合高频调用:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding-plan&utm_campaign=rewrite。接入细节和 SDK 示例在文档里:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite。如果你更习惯在 Claude Code 或 Anthropic 风格的工具里调用,参考:https://taotoken.net/claude-code-anthropic?utm_source=taotoken_aicg_blog_end&utm_content=claudecode&utm_campaign=rewrite。
最后提醒一个容易忽略的点:手机端 Kimi 导出的 Markdown 里,图片往往是远程链接或 base64。Pandoc 转 LaTeX 时,远程图片需要--extract-media参数先下载到本地,否则 PDF 里图片位置会空白。命令改成:
pandoc --defaults config.toml --extract-media=./media kimi_clean.md -o kimi_output.pdf这样图片会存到media/目录,LaTeX 引用本地路径,编译更稳定。整个链路从手机复制到本地 PDF,核心就是「Markdown 做中间格式,Pandoc 做转换引擎,TaoToken 做清洗通道」,三步各司其职,不互相耦合。