我使用 overleaf 来编辑乳胶文档。背面平台具有上传图像文件的功能,然后可以引用该图像文件并将其包含在乳胶文档中。
我可以手动将图像上传到背面平台,并从我的乳胶文档中成功使用/引用它们,但我想知道是否有一种方法可以通过 API 以编程方式进行上传。
我想我可能需要使用https://github.com/overleaf/filestore但我不知道如何开始。
仅供参考:我的主要用例是通过 Python(特别是 Google Colab 笔记本)执行此操作。
不幸的是,Overleaf API目前不允许以编程方式上传到现有项目。它的唯一目的是提供可用于手动单击特制链接的用户启动new项目的链接。相反,您可能想查看 Overleaf 的同步选项之一。目前他们提供 Git/GitHub 和 Dropbox 选项。设置同步后,您可以将文件添加到这些源,以允许 Overleaf 将它们拉入。
虽然 Overleaf 没有自己的上传 API,但 Dropbox 有。要使用它将文件放入 Overleaf,
现在您可以上传文件了! HTTP API 有详细记录,但 Python 至少有一个不错的 SDK。所以对我来说,程序化上传的结果是
pip install dropbox
import dropbox
from pathlib import Path
from io import BytesIO
import matplotlib.pyplot as plt
def upload(ax, project, path):
bs = BytesIO()
format = path.split('.')[-1]
ax.figure.savefig(bs, bbox_inches='tight', format=format)
token = Path('token.txt').read_text()
dbx = dropbox.Dropbox(token)
# Will throw an UploadError if it fails
dbx.files_upload(
f=bs.getvalue(),
path=f'/Apps/Overleaf/{project}/{path}',
mode=dropbox.files.WriteMode.overwrite)
if __name__ == '__main__':
fig, ax = plt.subplots()
upload(ax, 'project_name', 'images/test.png')
背页有一个非官方的 Python API:https://github.com/jkulhanek/pyoverleaf
您可以通过运行以下命令来安装 CLI:
pip install 'pyoverleaf[cli]'
上传图像可以按如下方式完成:
cat image.jpg | pyoverleaf write project-name/image.jpg
或者,您可以从 Python 访问它:
import pyoverleaf
api = pyoverleaf.Api()
projects = api.get_projects()
project_id = projects[0].id
rootdir = api.project_get_files(project_id)
api.project_upload_file(project_id, rootdir.id, "image.jpg", open("image.jpg", "rb").read())