此功能由 ayaka-notes/ayakaleaf-pro 开发。它在 v6.3.1 中作为早期预览版引入,并将在 v6.4.0 中正式发布,因此其配置和行为仍可能发生变化。如果你遇到任何问题,我们需要你的反馈。
Apps/<your Dropbox app>/ 中显示为一个文件夹,在 Overleaf 中所做的更改会发送到 Dropbox,在 Dropbox 中所做的更改也会同步回 Overleaf。
设置 Dropbox 同步
使用将拥有该应用的 Dropbox 账户登录 Dropbox App Console,并创建一个应用:- 点击 Create app,然后填写页面:
- 1. Choose an API:选择 Scoped access。
- 2. Choose the type of access you need:选择 App folder,而不是 Full Dropbox。Overleaf 只会在该应用的文件夹内进行同步。
- 3. Name your app:输入一个名称,例如
Overleaf。该名称在 Dropbox 上必须唯一。每个用户的项目会显示在其 Dropbox 的Apps/<name of your app>/中,该名称即下文中的DROPBOX_APP_NAME。 - 点击 Create app。应用会在其 Settings 选项卡中打开。
- 在 Permissions 选项卡的 Files and folders 下,勾选
files.metadata.write、files.content.write和files.content.read。account_info.read和files.metadata.read会随之被勾选,且无法取消勾选。不要勾选其他权限。 - 点击 Permissions 选项卡底部栏中的 Submit。如果不点击 Submit,权限将不会被保存,Dropbox 会拒绝为关联账户的用户同步文件。

Dropbox App Console:需要勾选的权限,通过 Submit 保存
- 在 Settings 选项卡的 OAuth 2 下,在 Redirect URIs 中输入
${OVERLEAF_SITE_URL}/user/dropbox/oauth/callback,然后点击 Add。仅输入 URI 是不够的:只有当它显示在输入框上方的列表中时才算保存成功。

Dropbox App Console:输入重定向 URI,然后点击 Add
- 在 Settings 选项卡的 Webhooks 下,在 Webhook URIs 中输入
${OVERLEAF_SITE_URL}/dropbox/webhook,然后同样点击 Add。Dropbox 会立即调用它进行检查,因此 Overleaf 必须已经使用下面的设置运行,并且可以从互联网访问(参见 Webhook)。检查通过后,其状态会显示为 Enabled。
config/variables.env
DROPBOX_SYNC_PROXY_URL=http://10.0.0.1:10808。它必须是标准的 HTTP/HTTPS 正向代理,并且不能使用 127.0.0.1。
创建数据库索引
请在用户关联 Dropbox 账户之前运行一次。Server CE 和 Server Pro 不会创建 Dropbox 同步所使用的索引,如果没有这些索引,每次同步查找都会扫描整个集合。 Toolkit 用户:运行bin/mongo。Docker Compose 用户:运行 docker compose exec mongo mongosh sharelatex。然后粘贴:
请不要改为运行
tools/migrations 中的 dropboxEntities 迁移:20220825160708_recreate_dropboxEntities 会删除该集合,从而删除所有用户的同步状态。Webhook
Dropbox 通过 webhook 将 Dropbox 中的更改通知给 Overleaf,因此这些更改会在几秒钟内出现在 Overleaf 中。webhook 指向你网站的地址${OVERLEAF_SITE_URL}/dropbox/webhook,无需额外端口,但 Dropbox 必须能够从互联网访问它。当你在 App Console 中添加它时,Dropbox 会立即对其进行检查。
如果没有 webhook(例如服务器无法被 Dropbox 访问),Overleaf 中的更改仍会发送到 Dropbox,但 Dropbox 中的更改只有在用户点击编辑器 Dropbox 对话框中的 sync this project now 时才会同步回来。
同步的工作原理
- 关联:用户关联自己的 Dropbox 账户后,其拥有的项目会被发送到 Dropbox。与其共享的项目会在下一次发生更改时出现在 Dropbox 中。
- Overleaf 到 Dropbox:新文件、重命名、移动、删除以及项目重命名会立即发送。编辑器中的编辑会在 Overleaf 将其保存到存储后发送,即所有人离开项目几分钟后。如需更早发送,请点击编辑器 Dropbox 对话框中的 sync this project now(每分钟一次)。
- Dropbox 到 Overleaf:项目文件夹中新增和更改的文件、新建的文件夹以及删除操作都会应用到项目中。在应用文件夹顶层新建的文件夹会成为一个新项目。在 Dropbox 中删除项目文件夹会在 Overleaf 中将该项目标记为已删除。
- 冲突:当同一文件同时在两处发生更改时,以最后一次更改为准。Dropbox 可能会将另一个版本保留为 conflicted copy。
- 协作者:关联了 Dropbox 的协作者会获得与其共享的项目。只读查看者和审阅者也会获得该项目,但他们在 Dropbox 中所做的更改不会同步回 Overleaf。
- 忽略的文件:Overleaf 不同步的文件,例如编译输出(
.aux、.log……)、.DS_Store或 Python 虚拟环境,只会保留在 Dropbox 中。
Q&A
为什么用户无法关联自己的 Dropbox 账户?
为什么用户无法关联自己的 Dropbox 账户?
- Overleaf 尚不知道的 Dropbox 文件夹会按名称与项目匹配,因此如果用户的项目存在同名情况,系统会要求其先重命名这些项目。名称比较不区分大小写,已归档和已移至回收站的项目也计算在内。
- 一个 Dropbox 账户只能关联到一个 Overleaf 账户。
为什么 Dropbox 账户被取消关联了?
为什么 Dropbox 账户被取消关联了?
回答:当 Dropbox 拒绝其令牌(例如用户在 Dropbox 中删除了该应用后)、Dropbox 空间已满或 Dropbox 暂停了该账户时,Overleaf 会取消关联该 Dropbox 账户。项目列表中的通知会告诉用户发生了哪种情况,直到其重新关联该账户。问题解决后,用户可以重新关联。
我可以在 Dropbox 中重命名项目文件夹吗?
我可以在 Dropbox 中重命名项目文件夹吗?
回答:请改为在 Overleaf 中重命名项目:其在 Dropbox 中的文件夹也会随之重命名。对 Overleaf 而言,在 Dropbox 中重命名文件夹相当于删除项目文件夹并新建一个文件夹,因此旧项目会被标记为已删除,并根据这些文件创建一个新项目。
为什么有些项目文件夹带有编号,例如“Thesis (1)”?
为什么有些项目文件夹带有编号,例如“Thesis (1)”?
回答:每个项目都有自己的文件夹,即使两个项目同名也是如此。Dropbox 不能存放两个同名文件夹,因此会为后创建的文件夹添加编号。编号取决于当时 Dropbox 中哪些名称可用,而不是哪个项目更早创建。Overleaf 知道每个项目对应的文件夹,因此更改绝不会发送到另一个同名项目的文件夹中。如果上传的项目名称已被占用,它在 Overleaf 中也会以带编号的名称命名,例如“Thesis (1)”。
在 Dropbox 中删除项目文件夹会发生什么?
在 Dropbox 中删除项目文件夹会发生什么?
- 如果没有其他项目与该文件夹同名,该项目会在 Overleaf 中被标记为已删除。其文件和历史记录会被保留。
- 如果有多个项目使用该名称,Overleaf 无法判断该文件夹属于哪个项目。它会取消关联该 Dropbox 账户,并显示一条通知,要求重命名这些项目。在 Dropbox 中删除项目文件夹之前,请为项目设置不同的名称。
- 带编号的文件夹(例如“Thesis (1)”)不与任何项目名称匹配,因此删除它不会改变 Overleaf 中的项目。点击编辑器 Dropbox 对话框中的 sync this project now,即可将项目重新发送到 Dropbox。
在 Overleaf 中删除项目时,Dropbox 中会发生什么?
在 Overleaf 中删除项目时,Dropbox 中会发生什么?
回答:什么都不会发生,其文件夹会保留在 Dropbox 中。如果不再需要,请在 Dropbox 中删除该文件夹。
项目被归档或移至回收站期间,Dropbox 中的更改会怎样?
项目被归档或移至回收站期间,Dropbox 中的更改会怎样?
回答:这些更改不会应用到项目中,恢复项目也不会将其带回。恢复后,对于在此期间在 Dropbox 中被更改的文件,Overleaf 会停止发送其更改,因此两边会出现差异。要让这样的文件重新同步,请在 Dropbox 中再保存一次。Overleaf 随后会采用 Dropbox 中的版本:恢复后在 Overleaf 中对该文件所做的更改会被替换,但仍保留在项目历史记录中。请先恢复项目,再在 Dropbox 中修改它。
为什么编辑器中的 Dropbox 链接会打开 Dropbox 主页?
为什么编辑器中的 Dropbox 链接会打开 Dropbox 主页?
回答:该链接指向 dropbox.com 上的
Apps/<app folder>/<project>,与 Overleaf Cloud 上一致。当 Dropbox 以翻译后的名称显示其 Apps 文件夹时(例如中文的 应用),链接无法找到该文件夹,Dropbox 会转而打开其主页。请在 Dropbox 中从翻译后的 Apps 文件夹打开项目文件夹。为什么项目的某些文件在 Dropbox 中缺失?
为什么项目的某些文件在 Dropbox 中缺失?
回答:同步服务未运行期间(例如重启时)所做的更改,之后不会再发送到 Dropbox。点击编辑器 Dropbox 对话框中的 sync this project now:它会重新发送整个项目。

