如何在修改基础文件时自动刷新在macOS预览中打开的PDF文档?

如何在修改基础文件时自动刷新在macOS预览中打开的PDF文档?,macos,pdf,latex,preview,Macos,Pdf,Latex,Preview,我在macOS机器上用LaTeX编写,同时使用预安装的Preview.app查看编译的文档。重新编译LaTeX文件后,Preview.app: 不会自动刷新PDF,并且 单击其窗口时刷新,但跳到文档顶部 我想知道是否有办法对其进行配置,以便Preview.app: 当基础PDF文件更改时自动刷新,以及 刷新后,将保持在同一页上 我自己也对此感到恼火,不幸的是,我只有一个“黑客”解决方案给你 您可以在单页模式下查看PDF(由⌘+2)更新文件时保持在同一页面上 我希望有人发布一个在连续滚动模式下工作

我在macOS机器上用LaTeX编写,同时使用预安装的Preview.app查看编译的文档。重新编译LaTeX文件后,Preview.app:

  • 不会自动刷新PDF,并且
  • 单击其窗口时刷新,但跳到文档顶部
  • 我想知道是否有办法对其进行配置,以便Preview.app:

  • 当基础PDF文件更改时自动刷新,以及
  • 刷新后,将保持在同一页上

  • 我自己也对此感到恼火,不幸的是,我只有一个“黑客”解决方案给你

    您可以在单页模式下查看PDF(由⌘+2)更新文件时保持在同一页面上


    我希望有人发布一个在连续滚动模式下工作的永久解决方案。

    我相信,有两种选择

  • 安装PDF viewer,正如在问题解答中所建议的那样

  • 使用
    fswatch
    命令自己组装一些东西,您可以通过自制程序安装这些东西,在Linux上提供类似于
    inotify
    的东西,并使脚本监视PDF文件,以便在修改它时,某些AppleScript会在预览中触发刷新

  • 看起来是这样的:

    $ fswatch -iI ./*.pdf | xargs -I{} ./RefreshPreview {}
    
    其中,
    RefreshPreview
    脚本

    #!/usr/bin/env bash
    osascript -e 'tell application "Preview" to quit'
    sleep 1
    open -a Preview "$1"
    
    如果不希望预览出现并获得焦点,请使用以下选项:

    #!/usr/bin/env bash
    open -g -a Preview "$1"
    
    不要忘记通过运行命令使脚本可执行

    $ chmod +x RefreshPreview
    
    我刚刚发现,更简单、更优雅的脚本会更好:

    #!/usr/bin/env bash
    osascript<<EOF
    tell application "Preview" to open POSIX file "$1"
    EOF
    
    #/usr/bin/env bash
    
    osascript我在预览中找到了一种在连续滚动模式下工作的解决方案。我曾经在LaTeX编辑器中按下某个快捷键时,一个接一个地激活一系列命令和按键

    下面是BetterTouchTool窗口的屏幕截图。(我已将F5配置为此操作序列的触发快捷方式。)

    该链由以下操作组成:

  • 触发⌘+⇧+R keypress,它调用LyX中的更新操作

    如果使用不同的LaTeX编辑器,请将其替换为执行LaTeX源重新编译的相应快捷方式

  • 等半秒钟

    这允许在LyX中完成更新操作。您可以根据情况增加或减少延迟时间

  • 运行AppleScript命令
    告诉应用程序“预览”以激活

    这将切换到预览并使其成为活动应用程序。此时,“预览”将重新读取文件并重新加载视图

  • 触发⌘+2按键

  • 触发⌘+1个按键

  • 运行AppleScript命令
    告诉应用程序“LyX”激活

    这会将控件返回给LyX

  • 这不是预览的答案,但我发现Skim可以通过更改几个设置来实现这一点(从Skim帮助中):

    当磁盘上的文件内容发生变化时,Skim可以通过另一个程序自动重新加载您查看的文件

    要在磁盘上的文件内容更改时重新加载文件

    • 选择浏览>首选项
    • 单击同步,然后单击
    • 选择“检查文件更改”
    除非您选择了“自动”,否则Skim将始终首先询问您,当磁盘上的内容发生更改时,是否应重新加载文件

    然后选中“自动重新加载”框。 重新启动Skim,文件应该在构建后立即自动更新


    这个问题最好直接问。