目标:我希望能够在我的 Windows 计算机上运行一个脚本,每当主 .tex 文档更新时,该脚本就会自动生成我的 LaTeX 文档的 PDF。
用例我正在通过 iPad 编辑 .tex 文件,并且我希望我的主计算机编译 pdf,以便我可以在 iPad 上的 Dropbox 应用程序中打开它以查看结果,每当我通过 iPad 更新 .tex 文件时,Dropbox 都会同步它。
我的问题:我最不了解的是如何在 Windows 上运行一个可以自动执行此操作的脚本。我可以花费数小时在 Google 上搜索并了解此类事情,但更愿意听取知道快速解决方案的人的建议。简而言之,请不要只告诉我要学习一种 Windows 脚本语言。告诉我如何做到这一点。
为了大家的利益,以下是我所理解的实现这一目标所需要做的:
- Windows 机器上可用的 LaTeX 实现(miktex 是基本安装,TeXnicCenter 是 Windows 机器上的首选编辑器)
- 我的 iPad 上的一个 (LaTeX 友好型) 文本编辑器,可与 Dropbox 集成。 (对我来说,textastic)
- 每当 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 下尝试的方法:
inotify-tools
使用安装sudo apt-get install inotify-tools
- 从终端运行以下行来通知
inotify
监视 TeX 文件的任何更改(如有必要,请更改名称)。我pdflatex
在这里使用一个简单的,make
当然arara
也可以。
当为真时;执行 inotifywait -e 修改 autocomp1.tex && pdflatex autocomp1.tex;完成
不幸的是,它不能与 TeXworks 自己的文档查看器一起使用,它无法识别 PDF 已被外部修改。