跳转至

写作

写作使用统一工作区,不再切换到独立写作模式。文件树在「论文库」下方将 thesis/ 显示为「写作」,展开后直接列出项目文件夹和源文件。旧的模式偏好不再恢复独立工作面。编译、编辑器、SyncTeX 和引用能力继续复用现有实现,见 LaTeX。

项目与文件

「写作」行右侧的加号打开新建项目面板,填写名称、选择模板后创建项目。模板的来源、打包方式和新增步骤见 写作模板。目录尚不存在时也保留入口。项目及文件使用通用文件树的展开、选中与文件操作,不再有单独项目窗口;编译生成的 PDF 也可以直接打开。

写作工作区按项目归属判断,不按文件后缀判断。点击项目目录名称恢复该项目最近编辑的源码(本次会话内,没有记录时打开主文件),点击目录箭头只展开或折叠;「写作」根目录只展开项目。项目内 .tex、.bib、.sty、图片、Markdown 和素材 PDF 都在项目编辑区左侧打开,右侧保留同一项目的编译预览。旧 Vault 直接位于 thesis/ 的主文件也兼容。

点击当前编译配置生成的 PDF(包括 main.pdf 和自定义输出目录、文件名)恢复所属项目的源码和预览,不另开普通 PDF 标签。其他素材 PDF 在左侧查看。各项目独立解析主文件,不会根据相同文件名跳到其他项目。

项目编辑区临时铺满中间工作区,其他阅读分栏隐藏;切回项目外的论文或笔记时恢复原分栏位置和宽度,不关闭已有文档。预览顶部沿用编译、引擎、诊断、历史和上传工具栏;分栏比例与工具排版不变。源码定位 PDF 优先使用当前项目内嵌预览。

源码与 PDF 分隔条约三分之一高度处的按钮使用随主题切换的浮层配色,悬停时显示手形光标;按钮独立于拖拽区域,点击不会调整分栏宽度。→ 按源码光标定位 PDF,不读取或同步源码选区;在源码或 PDF 中开始选择时,另一侧的选区会收起,同一时间只保留一侧的选区。在 PDF 中划选、单击或双击只选择/记录 PDF 位置,不会移动源码光标,也不会在源码编辑器里带出原生选区;反向定位只由 ← 按钮或 ⌘/Ctrl + 点击触发。← 优先使用当前 PDF 最近一次点击的页内位置。⌘/Ctrl + 点击 PDF 定位对应源码。悬停或键盘聚焦箭头时,在右侧显示跳转方向提示;← 额外提示用 ⌘/Ctrl + 点击可更准确地定位,→ 显示定位快捷键。缩放或滚动不会改变已记录的 PDF 坐标。尚未点击时,← 使用当前页可见区域中心;重新加载 PDF 后清除旧位置。此同步能力适用于编译后的 PDF,实时预览尚未接入。

PDF 上方一行的左边是编译按钮和黄色叹号入口。编译中按钮保持主色,文字是「正在编译…」,加载指示和右侧下拉外观一致;菜单里的再次编译、强制重建和清理不可用,停止编译仍可用。编译结束、失败或取消后按钮马上回到「编译」,成功时短暂显示「编译成功」,不会一直转圈。编译按钮旁的下拉菜单里,「实时预览」上方是 LaTeX 引擎列表,选择后记住到该项目,根文件用 % !TEX program 指定引擎时列表只读。实时预览需要 LuaLaTeX 和 realtime-tex 支持文件,打开后 PDF 右上角显示带状态圆点的「实时预览」卡片;点叹号打开问题小卡片,列出编辑器检查与编译日志里的警告和错误,卡片底部的「编译日志」进入完整列表:左边是问题,右边是原始日志,点一条会跳到源文件并滚到对应日志。编译失败时叹号变红,错误留在卡片里,不再另弹 toast;改好后重新编译,叹号恢复黄色。最右侧是带文字的历史与上传按钮。源文件保存后自动编译,⌘S 手动保存也会触发一次编译。编译引擎按主文件的 % !TEX program、你为这个项目选过的引擎、模板要求的引擎(CVPR、ICLR、ICML、NeurIPS、ACL、ECCV 用 pdfLaTeX;带 babelfont 的用 LuaLaTeX)来决定,没有这些时才用 XeLaTeX。每个项目单独绑定自己的 GitHub 仓库:还没连接仓库时,点上传打开设置对话框,在里面填这个项目的仓库、选上传时机并上传。上传可以是手动、每次编译后,或每 5、15、30、60 分钟。默认是每次编译后;还没填写仓库时不会上传,定时上传跟随当前打开的项目。PDF 底部悬浮页码、缩放滑动条和页面背景,位置与顺序和阅读里的 PDF 一致。论文库、笔记与写作文档共用工作区。

「历史」打开修改历史对话框:左边是每次上传,右边是这一版改动的文字。可以回退到选中的那一版,回退只改工作区里的文件,不删掉之后的上传记录。列表顶部是还没上传的修改。保存源文件不会另记一份本地快照。历史差异由 loadWritingGitDiff 读取 Git patch,前端直接展示,不再维护本地快照的行差异算法。上传只提交当前项目的目录(仓库根就是 thesis/<项目>)并推送到它自己的仓库,编译产物和 PDF 不上传。项目之间各有独立仓库和上传记录,不会混进彼此的结果,历史也只列出这个项目。没有改动时不会多出一条记录。还没登录时,由本机 Git 打开系统登录窗口。没有 Git,或写作目录和远端改动对不上时,不会覆盖任何一边,自动上传也会停下来,等你再点一次上传。

项目文件夹在应用外移走或删除后,文件树随文件监听刷新。thesis/ 这一层是书架,不当作项目。Windows 上编译把引擎输出写到临时文件再读,避免 pdfTeX 在管道上 fflush 失败。

Agent 与同步边界

文件树上不再提供编译。写作时 Agent 的默认上下文是当前打开的稿件,不再沿用阅读里的论文。空对话提供续写、收紧文字、检查论证,以及从文库起草带引用的下一段。源码和编译后的 PDF 都可以划词后加入对话或快速提问。编译问题列表里可以把这一条交给 Agent,并带上所在文件和行。Agent 回复里指向 thesis/ 源文件的链接会在工作区编辑器里打开。同步不会替你创建 GitHub 仓库,也不会在应用里保存密码。

诊断共享类型定义在 src/lib/tex/editor-diagnostic.ts,编辑器 UI 和 lint bridge 均依赖该契约,避免 lib 层反向依赖组件。

文件或目录移动后,Writing 会话与 TeX 编译根设置共用 lib/core/path.ts 的 createPathRemapper 更新路径;保留按顺序首个匹配、忽略大小写与目录边界匹配语义,未命中路径保持原样。