MiKTeX 和 Perl 脚本(以及一个 Python 脚本)

MiKTeX 和 Perl 脚本(以及一个 Python 脚本)

在 TeX.SX 上,MiKTeX 的用户一次又一次地问起一个问题,他们遇到一个软件包或包含的程序的问题,结果发现,其中涉及一个 Perl 脚本,特别是glossaries(因为脚本makeglossarieslatexdifflatexmk。在大多数情况下,错误消息如下所示:

makeglossaries.exe: The Perl interpreter could not be found.

如果我的记忆没错的话,它肯定可以在早期版本的 MiKTeX 中正常运行。

尽管除了特殊问题之外还有更多问题的答案,但我们能否在此提供一个基本的解决方案,即使它与 TeX 无关?

让我列出在撰写本文时 MiKTeX 中包含哪些 Perl 脚本(摘自 MiKTeX 配置文件scripts.ini),每个脚本行在二进制子文件夹中都存在一个可执行文件,其名称在等号之前:

OOopict=脚本/gapfill/OOopict.pl
afm2afm=脚本/fontools/perl/afm2afm.pl
arlatex=脚本/bundledoc/arlatex
作者索引=scripts/perl/作者索引/authorindex.pl
自动安装=脚本/fontools/perl/自动安装.pl
bib2xhtml=脚本/bib2xhtml/perl/bib2xhtml.pl
bibhtml=脚本/bibhtml/perl/bibhtml.pl
biokey2html1=scripts/shipunov/biokey2html1.pl
biokey2html2=scripts/shipunov/biokey2html2.pl
biokey2html3=scripts/shipunov/biokey2html3.pl
birm=脚本/缅甸/perl/birm.pl
bundledoc=脚本/bundledoc/bundledoc
cmap2enc=脚本/fontools/perl/cmap2enc.pl
csvtools=脚本/csvtools/perl/csvtools.pl
ctanify=脚本/ctanify/ctanify
ctanupload=脚本/ctanupload/ctanupload.pl
dosepsbin=scripts/dosepsbin/dosepsbin.pl
etexdef=脚本/texdef/perl/texdef.pl
exceltex=脚本/exceltex/perl/exceltex
feynmf=脚本/feynmf/perl/feynmf.pl
fig4latex=脚本/fig4latex/perl/fig4latex.pl
findhyph=脚本/findhyph/perl/findhyph.pl
font2afm=scripts/fontools/perl/font2afm.pl
fullref=scripts/aomart/perl/fullref.pl
htcopy=脚本/tex4ht/htcopy.pl
htmove=脚本/tex4ht/htmove.pl
ibyhyph=scripts/perl/ibycus-babel/ibyhyph.pl
latex-git-log=脚本/latex-git-log
latexdef=scripts/texdef/perl/texdef.pl
latexdiff-fast=脚本/latexdiff/latexdiff-fast
latexdiff-so=脚本/latexdiff/latexdiff-so
latexdiff-vc=脚本/latexdiff/latexdiff-vc
latexdiff=脚本/latexdiff/latexdiff
latexindent=脚本/latexindent/latexindent.pl
latexmk=脚本/latexmk/perl/latexmk.pl
latexand=脚本/latexand/latexand
latexrevise=脚本/latexdiff/latexrevise
ltximg=脚本/ltximg/ltximg.pl
lualatexdef=脚本/texdef/perl/texdef.pl
luatexdef=脚本/texdef/perl/texdef.pl
makeglossaries=脚本/词汇表/makeglossaries
makejmlrbook=脚本/jmlr/makejmlrbook
mathspic113=脚本/mathspic/mathspic113.pl
mathspic=脚本/mathspic/mathspic113.pl
mf2pt1=脚本/mf2pt1/mf2pt1.pl
mk4ht=脚本/tex4ht/mk4ht.pl
mkjobtexmf=脚本/mkjobtexmf/mkjobtexmf.pl
mkt1font=脚本/perl/accfonts/mkt1font.pl
mptopdf=脚本/上下文/perl/mptopdf.pl
orderrefs=scripts/perl/orderrefs/orderrefs.pl
ot2kpx=脚本/fontools/perl/ot2kpx.pl
pdfatfi=scripts/oberdiek/pdfatfi.pl
pdfcrop=脚本/pdfcrop/pdfcrop.pl
pdflatexdef=scripts/texdef/perl/texdef.pl
pdftexdef=scripts/texdef/perl/texdef.pl
谱系=scripts/pedigree-perl/pedigree-perl/perl/pedigree.pl
perltex=脚本/perltex/perl/perltex.pl
pfm2kpx=脚本/fontools/perl/pfm2kpx.pl
pkfix-helper=脚本/pkfix-helper/pkfix-helper
pkfix=脚本/pkfix/pkfix.pl
pn2pdf=scripts/perl/petri-nets/pn2pdf.pl
pst2pdf=脚本/pst2pdf/perl/pst2pdf.pl
rcsinfo=脚本/rcsinfo/perl/rcsinfo.pl
showglyphs=scripts/fontools/perl/showglyphs.pl
拆分索引=脚本/拆分索引/perl/拆分索引.pl
sty2dtx=脚本/sty2dtx/perl/sty2dtx.pl
svn-multi=脚本/svn-multi/svn-multi.pl
texcount=脚本/texcount/perl/texcount.pl
texdef=脚本/texdef/perl/texdef.pl
texdiff=脚本/texdiff/perl/texdiff.pl
texdirflatten=脚本/texdirflatten/perl/texdirflatten.pl
thumbpdf=脚本/thumbpdf/perl/thumbpdf.pl
urlbst=脚本/urlbst/urlbst
vpe=脚本/vpe/vpe.pl
vpl2ovp=脚本/perl/accfonts/vpl2ovp.pl
vpl2vpl=脚本/perl/accfonts/vpl2vpl.pl
xdv2pdf_mergemarks=scripts/xetex/perl/xdv2pdf_mergemarks.pl
xelatexdef=脚本/texdef/perl/texdef.pl
xetexdef=脚本/texdef/perl/texdef.pl

列出的 Python 脚本很可能存在类似的问题:

pgfplots=脚本/pgfplots/pgfplots.py

PS:Lua脚本不受影响!

答案1

只有 MiKTeX 的开发者 Christian Schenk 才能给出明确的解决方案。我和大多数人一样,只是一个简单的用户,不具备阅读MiKTEX 来源。但根据经验,我猜他是故意删除了早期版本中包含的基本 Perl(正如问题中所说:我的记忆会欺骗我),所以他不必跟上最新情况。在这种情况下,真正的问题是,这似乎在官方 MiKTeX 文档或MiKTeX网站 (再次强调:我可能犯错)

那么,该怎么办呢?

我将只描述 Perl 的方法,但对于 Python 来说也是类似的。下载概述适用于 Windows 的 Python

答案是:自行安装完整的 Perl 发行版!

您可以在以下位置找到 Windows 版本的 Perl 发行版链接:Perl.org 下载页面

如果你不知道选择哪一个,我建议你安装活动Perl由 ActiveState 提供。有一个“免费社区版”安装程序(在撰写本文时,请不要下载最新版本,而应下载推荐版本,因为否则您无法添加 perl 存储库进行模块更新)。默认情况下还会安装包管理器,以后可用于更新和配置。
对于高级用户,还有适用于 Windows 的 Strawberry Perl。稍后使用命令提示符终端完成配置。
两个安装程序都将 Perl 解释器添加到系统PATH环境变量并将文件扩展名链接.pl到解释器二进制文件perl.exe,因此通常只需单击文件或在命令提示符中单独输入文件即可 - 但这不适用于没有扩展名的文件(但perl file可以工作)。*)
我无法对提到的第三个发行版发表任何评论适用于 Windows 的 DWIM Perl,但由于据称是以草莓为基础的,所以它会非常相似。

*) (甚至可以更进一步将文件扩展名添加到系统变量中PATHEXT,请参阅如何使我的 Perl 脚本像 Windows 上的普通程序一样运行?) 了解更多。

但是,当 Perl 安装完成后,仍然出现错误,该怎么办?

有时错误是由其他问题引起的。过去,几乎每次都是因为脚本路径发生了变化,但开发人员忘记调整 中的条目scripts.ini。您无法编辑该文件,因为这会完全破坏功能!(该文件已签名。)但在这种情况下,你可以执行以下操作。我举latexdiff个例子,这真的发生过

  1. 确保您已经创建了本地根目录,参见在 MiKTeX 中创建本地 texmf 树。我们只需要 bin 子文件夹即可。您也可以使用其他文件夹。虽然它位于系统路径中,但请注意,必须找到它MiKTeX 二进制文件夹。

  2. 启动您最喜欢的文本编辑器并粘贴以下几行。当然,调整安装路径,确切的脚本路径和名称您必须自己查看:

    @echo off & setlocal
    
    :: Adjust path to MiKTeX root here, do not remove
    :: the double quotes, when you have spaces in path!
    :: By default in a 32-bit machine:
    :: set MiKTeXPath="C:\Program Files\MiKTeX 2.9"
    set MiKTeXPath="<Path-to-MiKTeX>"
    
    perl %MiKTeXPath%\scripts\latexdiff\latexdiff %*
    

    最后一行会有所不同texdef

    perl%MiKTeXPath%\scripts\texdef\perl\texdef.pl%*
    

    您可以删除开头带有双冒号的行。

  3. 在上面第 1 项中提到的二进制文件夹中保存为文本文件,并使用等号前面的名称scripts.ini和文件扩展名.bat(或者.cmd如果您更喜欢这样),例如latexdiff.bat。Windows 自己的记事本因.txt自动添加扩展名而臭名昭著。当您使用双引号保存文件时,您可以避免这种情况:"latexdiff.bat"

  4. 进行测试:打开命令提示符并输入latexdiff --versionlatexdiff --help。当您的 Perl 脚本没有输出时,您必须检查是否输入了正确的脚本路径和名称,并且包含批处理文件的二进制文件夹位于 MiKTeX bin 文件夹之前。省略了文件扩展名,因为实际调用也是在没有它的情况下进行的。

  5. 您应该不时测试一下 MiKTeX 中的函数是否已修复。您可以通过明确输入.exe包装器版本来执行此操作:latexdiff.exe --version。如果成功,您可以删除批处理文件。

相关内容