在 Windows 中更新时自动编译 LaTeX 文档(在本例中通过 dropbox)

在 Windows 中更新时自动编译 LaTeX 文档(在本例中通过 dropbox)

目标:我希望能够在我的 Windows 计算机上运行一个脚本,每当主 .tex 文档更新时,该脚本就会自动生成我的 LaTeX 文档的 PDF。

用例我正在通过 iPad 编辑 .tex 文件,并且我希望我的主计算机编译 pdf,以便我可以在 iPad 上的 Dropbox 应用程序中打开它以查看结果,每当我通过 iPad 更新 .tex 文件时,Dropbox 都会同步它。

我的问题:我最不了解的是如何在 Windows 上运行一个可以自动执行此操作的脚本。我可以花费数小时在 Google 上搜索并了解此类事情,但更愿意听取知道快速解决方案的人的建议。简而言之,请不要只告诉我要学习一种 Windows 脚本语言。告诉我如何做到这一点。

为了大家的利益,以下是我所理解的实现这一目标所需要做的:

  1. Windows 机器上可用的 LaTeX 实现(miktex 是基本安装,TeXnicCenter 是 Windows 机器上的首选编辑器)
  2. 我的 iPad 上的一个 (LaTeX 友好型) 文本编辑器,可与 Dropbox 集成。 (对我来说,textastic)
  3. 每当 Dropbox 文件更新时,都会在我的 Windows 计算机上自动运行的脚本。这就是我需要建议的地方。

通过简单的方法启用和禁用脚本运行可获得加分。

答案1

我将把一个Powershell脚本扔到擂台上!以下代码检查预定义目录中的所有 TeX 文件,如果某个 TeX 文件未找到匹配的 PDF,则运行pdflatex它。但是,如果找到同名的 PDF 文件,则lastwritetime检查。如果 TeX 文件比 PDF 更新,pdflatex则也会运行。

$path = "C:\Users\Uwe\Dropbox\autocompile\"
cd $path

# run this script until infinity or the next Windows crash
while($true){

$files = gci "*.tex"

# check all TeX files in the $files array
foreach ($i in $files) {
   # Name of the PDF file
   $pdfpath = $path+ $i.BaseName + ".pdf"

   if (Test-Path -path $pdfpath){
           "A PDF for $i exists"
           $pdf = gci $pdfpath
           if ($i.LastWriteTime -gt $pdf.LastWriteTime) {
              "TeX file is newer, let's create the PDF!"
              pdflatex $i
          }
          else {
              "but the PDF is newer, so no compilation is needed"
          }

      } else {
            "No PDF found for $i, let's create it!"
             pdflatex $i
      }
}
# wait 60 seconds before your start over again
Start-Sleep -Seconds 60

}

编辑:有关电源外壳。它预装在自 Win 7 以来的所有 Windows 版本中,对于 Win XP 和 VISTA,可以安装它。它是一种非常棒的面向对象脚本语言,我在办公室经常使用它。要运行此脚本,请找到 Powershell IDE 的可执行文件(称为Windows Powershell ISE)。重要提示:默认设置是无法运行已保存的 Powershell 脚本(出于安全考虑),必须以管理员权限运行 Powershell ISE(或等效的 cmd 行挂件,我很少使用)并执行命令行set-executionPolicy设置执行策略帮助)。之后,您就可以保存上面的代码并运行它了。我无法在这里提供完整的介绍,请查看 MS 帮助页面POSH 的 MS 帮助。如果使用 Windows,了解一下 Powershell 是个不错的主意。

答案2

看一下 LaTeX Daemon:

http://william.famille-blum.org/software/latexdaemon/

如果文档发生变化,它会自动重新编译。它会预编译前言以加快编译速度。它不会因错误而挂起。

答案3

乳胶原则上可以满足您的要求。它会查找已更改的文件,并监视包含的 .tex 文件中的更改。它只需要 perl 和可运行的 LaTeX 安装。

但是它并不监视整个目录,因此需要进行一些调整来编译可能出现的文件。

答案4

我有另一种在 Linux 下运行良好的方法。它使用文件系统inotify来跟踪文件甚至目录的变化。以下是我在 Ubuntu 下尝试的方法:

  1. inotify-tools使用安装sudo apt-get install inotify-tools
  2. 从终端运行以下行来通知inotify监视 TeX 文件的任何更改(如有必要,请更改名称)。我pdflatex在这里使用一个简单的,make当然arara也可以。

当为真时;执行 inotifywait -e 修改 autocomp1.tex && pdflatex autocomp1.tex;完成

不幸的是,它不能与 TeXworks 自己的文档查看器一起使用,它无法识别 PDF 已被外部修改。

相关内容