我遇到了一个问题,它破坏了我的工作流程(因为我正在处理一个非常大的文档,其中完整的 latexmk 运行可能需要 10 分钟,甚至编译我目前正在处理的章节也includeonly
需要一到几分钟)并且我希望有人可以提供帮助(也许已经看到过类似的事情发生):
我正在使用 TeXLive2011 和 TeXShop 2.43 作为编辑器在 MacOS X 10.6.8 上工作。
hyperref
在某些情况下,只要文档是用 编译的,我就会看到带有白页和绿色矩形的 PDF 预览pdflatex
。它看起来像这样:
- 这似乎只有当我的(大型)文档的第 3 章和第 4 章至少包含在内时才会发生。编辑:这可能是因为这些章节包含许多位图图形,从而增加了文件大小。
- pdf 的某些页面(例如标题页)似乎始终都能正确显示。
- 如果只包含其中一个,我可以在编译过程中一直查看和浏览(旧)pdf 的预览。
- 当我在 Skim.app 中打开 pdf 然后进行编译时,同样的事情发生了。
备注:编译完成后,pdf 看起来没问题!!
编辑:为了回答评论中的问题,我将添加更多信息。
- 这个显示问题仅存在于编译时,只要pdf准备好,它就可以正确显示。
- 然而情况并非总是如此,有些文档始终是可见的——即使在编译期间也是如此。
因此,jonalv 的想法可能是解决方案:pdf 查看器不会将整个文件保存在内存中,因此无法显示其他页面。由于它对某些文件有效,而对其他文件无效,因此也许这是一个文件大小问题...
目前我正在测试以找出问题所在。
- 一个示例文档,包含我的整个序言,但有近 300 页(仅)盲文和一个浮动文本始终可见(PDF 大小 881 kB)。
答案1
正如迈克尔已经指出的那样,期望对易失性文件(正在构建)的查看总是正确的是不合理的。
然而,它有时有效,有时无效,原帖者想知道背后的原因。以下是对背景技术细节的解释:
pdflatex
该问题与 OSX(以及其底层的 Mach 内核)的工作方式和文件通知的实现方式有关,大多数 PDF 查看器使用这些方式和通知来“在更改时”更新视图。
pdflatex
不会以原子方式写入 PDF 文件,而是在编译过程中或多或少地连续地向其中添加位和字节。文件系统会注意到对文件的写入,并向监控 PDF 查看器进程发送更新通知。它使用一些启发式方法,不为每个更改的字节发送更新事件(这将非常低效)。此处的常见方法是延迟更新通知,直到一段时间内没有出现新的更改(通常是几毫秒)。
如果此启发式方法与的写入模式交互不佳
pdflatex
,则 PDF 查看器会在 PDF 准备好之前收到通知,并尝试读取尚未完成的 PDF 文件。该问题并不局限于特定文档或文档类别。但是,我个人观察到,尤其是在大型
beamer
演示文稿和我的论文中。我的假设是,在编译“大”文档(需要大量计算或生成大量辅助文件)时,pdflatex
编译期间对 PDF 文件的更新频率较低,这增加了与文件系统启发式发送更改通知发生不良交互的可能性。
PDF 查看器在读取不完整的 PDF 文件时会做出不同的反应。例如,Skim 往往会崩溃或丢失文件系统的通知句柄,因此不会显示进一步的更新。显然,TexShop 的内部 PDF 查看器对此类问题更具有鲁棒性。
答案2
期望在文件构建过程中查看它是不合理的。这里没有特别的“问题”或“问题”。
答案3
我理解这个问题是:“我怎样才能在 LaTeX 重建 PDF 的同时继续浏览它?”。也许我们可以在这里使用一些缓冲。如果您使用在完成 PDF 后移动 PDF 的命令进行编译,那么您几乎不会有无法查看文件的情况。例如:(适用于 Mac)
latexmk -pdf text.tex && mv text.pdf viewMe.pdf
如果您将 pdf 查看器设置为观看,viewMe.pdf
我希望它在文件重建后能够正确更新,同时仍然允许您浏览 pdf,因为实际文件只有在实际重建时才会发生变化。