跳转至

Overleaf 快速开始

这篇教程带你从零开始配置 ChatOL,并用 oleaf 连接一个自托管 Overleaf 实例。完成后,你可以列出项目、编译项目、下载 PDF 和日志。

前置条件

  • 一台能访问 Overleaf Web 服务的机器。
  • 一个可登录 Overleaf 的账号,或一个有效的 Overleaf session cookie。
  • Python 3.10+。

ChatOL 不部署 Overleaf;如果还没有 Overleaf 服务,请先看 部署与连接边界

1. 安装

从 PyPI 安装:

python -m pip install -U ChatOL
oleaf --version

从源码安装:

git clone https://github.com/ChatArch/ChatOL.git
cd ChatOL
python -m pip install -e ".[dev,docs]"

2. 配置连接

最直接的方式是使用环境变量:

export OVERLEAF_SITE_URL="https://overleaf.example.com"
export OVERLEAF_ADMIN_EMAIL="<email>"
export OVERLEAF_ADMIN_PASSWORD="<password>"
export OVERLEAF_HTTP_TIMEOUT=45

如果你已经有浏览器或服务端会话,也可以使用 session cookie:

export OVERLEAF_SITE_URL="https://overleaf.example.com"
export OVERLEAF_SESSION_COOKIE="<session-cookie>"
export OVERLEAF_SESSION_COOKIE_NAME="overleaf_session2"

也可以通过 ChatEnv 保存当前环境的 overleaf profile。保存后,oleaf 会自动读取 active profile,不需要在每条 CLI 命令里显式传账号密码:

python -m chatenv.cli init -t overleaf -I
python -m chatenv.cli set OVERLEAF_SITE_URL=https://overleaf.example.com -I
python -m chatenv.cli set OVERLEAF_ADMIN_EMAIL=<email> -I
printf 'OVERLEAF_ADMIN_PASSWORD=%s\n' "$OVERLEAF_PASSWORD" | python -m chatenv.cli paste --stdin -y -I
python -m chatenv.cli test -t overleaf -I

如果使用 session cookie,也可以把 cookie 存进 ChatEnv:

python -m chatenv.cli set OVERLEAF_SITE_URL=https://overleaf.example.com -I
printf 'OVERLEAF_SESSION_COOKIE=%s\n' "$OVERLEAF_SESSION_COOKIE" | python -m chatenv.cli paste --stdin -y -I
python -m chatenv.cli set OVERLEAF_SESSION_COOKIE_NAME=overleaf_session2 -I

不要把真实密码、cookie、token 或内部项目 ID 写进 shell history、README、issue 或 PR。

3. 检查连接

oleaf doctor --json

doctor 会检查当前配置能否访问项目列表。它不会修改 Overleaf 项目。

如果成功,可以继续列出项目:

oleaf projects list --json

4. 编译项目

项目参数可以是项目名或项目 ID。自动化脚本中建议优先使用项目 ID,避免同名项目造成歧义。

oleaf projects info "<project-name>" --json
oleaf compile run "<project-name>" --json
oleaf compile pdf "<project-name>" -o output.pdf --json
oleaf compile output "<project-name>" log -o output.log --json

如果想一次拿到 PDF 和日志,可以用 bundle 命令:

oleaf compile bundle "<project-name>" -o ./artifacts --json

需要同时保存项目源码 zip 时加上:

oleaf compile bundle "<project-name>" -o ./artifacts --include-source-zip --json

5. 使用模板

查看内置模板:

oleaf templates list --json

把模板写到本地目录:

oleaf templates init article-basic ./template --json

把模板根目录文件上传到 Overleaf 项目:

oleaf templates upload "<project-name>" ./template --json

模板上传只处理模板目录根层文件,不做嵌套目录同步。

6. 拉取和上传文件

把 Overleaf 项目拉到本地目录:

oleaf files pull "<project-name>" ./source --json

修改本地文件后,上传一个根目录文件:

oleaf files upload "<project-name>" ./source/main.tex --remote-path main.tex --json

删除远端文件需要显式确认:

oleaf files delete "<project-name>" old-note.tex --apply --json

更多说明见 Agent 任务闭环

7. Python 调用

from pathlib import Path
from chatol.workflows import download_compile_bundle, list_projects, write_template

projects = list_projects()
write_template("article-basic", Path("template"))
bundle = download_compile_bundle(projects[0].id, Path("artifacts"))

常见问题

问题 处理方式
doctor 无法登录 检查 OVERLEAF_SITE_URL、账号密码、cookie 名称和 cookie 是否过期
项目名找不到 先用 oleaf projects list --json 确认名称;脚本中优先使用项目 ID
拉取目录已有文件 默认不会覆盖;确认安全后加 --force
上传嵌套路径失败 当前只支持根目录单文件上传
模板上传后覆盖了远端文件 上传前先用 oleaf files list 检查远端文件名
删除文件失败 确认路径是文件而不是文件夹,并且命令包含 --apply