运行时出现奇怪的错误
perl.exe \path\to\xindy.pl -L english -C utf8 -I xindy -M "main" -t "main.alg" -o "main.acr" "main.acn"
或者等价地,
xindy.exe -L english -C utf8 -I xindy -M "main" -t "main.alg" -o "main.acr" "main.acn"
显示错误信息的控制台输出如下
打开日志文件“main.alg”(完成)
正在阅读 indexstyle......
加载模块
“C:\\Documents\\phd_thesis\\1htZ_vspxV”...
第 1 行错误:
(需要“lang/english/utf8-lang.xdy”)
错误:找不到文件“lang/english/utf8-lang.xdy”!
为什么我会收到此错误?如何修复它?
更新(临时解决方法)
这看起来像是一个xindy
错误。所需.sty
文件已存在于文件夹 中%TEXDIR%\texmf-dist\xindy\modules\lang\english\
,但 未找到(因此未加载)xindy
。为了使其正常工作,我必须做两件事
- 将树的内容和结构复制
lang\english
到我的项目的根目录中。 - 将
tex.xdy
文件从%TEXDIR%\texmf-dist\xindy\modules\base\
复制到我的项目的根目录。
这里的 TeX 专家可以研究一下这个问题并告诉我发生了什么吗?
重现问题的最小示例(main.tex)
\documentclass[12pt,a4paper,oneside,openright]{book}
\usepackage[nomain,acronym,xindy]{glossaries-extra}
\makeglossaries
\glssetcategoryattribute{acronym}{nohyperfirst}{true}
\setabbreviationstyle[acronym]{long-short} % applicable only for glossaries-extra.sty
\newacronym{adc}{ADC}{Analog to Digital Converter}
\begin{document}
\cleardoublepage
\printglossary[type=acronym,title={List of Acronyms}]\label{ch:glossary} % basic style
This is some random text which uses \glspl{adc}.
\end{document}
现在,运行
pdflatex main.tex
makeglossties main (fails)
pdflatex main.tex (redundant here since makeglossaries has failed. But required to print glossaries in the PDF once step 2 works.)
此外,我可以确认我上述的解决方法(复制xindy
语言树以及tex.xdy
到这个文件夹)对于这个最小示例有效。
环境
- Windows 10 64 位(v1709,内部版本 16299.846)
- pdfTeX 3.14159265-2.6-1.40.19(TeX Live 2018/W32TeX)
- xindy 版本:2.5.1
- xindy.pl 脚本版本:1.18
- 为 MSWin32-x64-multi-thread 构建的 Strawberry perl v5.28.1
- Makeglossaries 版本 4.41(2018-07-23)
TeXLive 便携式设置
我们大学的图书馆机器都运行 Windows 10。显然,学生没有安装软件的管理员权限。为了解决这个问题,并拥有一个可重现的工作环境,我把我最喜欢的所有实用程序和其他工具都放在一个网络安装的 上Home drive
,这个标签H:
是由大学提供给所有学生的。每天我都会使用不同的物理机器,但这不是问题,因为网络驱动器会在登录时自动安装。因此,我设置了一个便携式 TeXlive,其环境变量是在每次登录时通过运行以下命令来设置的batch script
。
setx path "H:\username\texlive\2018\bin\win32;H:\username\perl-portable\perl\bin;"
setx TEXDIR "H:\username\texlive\2018"
setx TEXMFLOCAL "H:\username\texlive\texmf-local"
setx TEXMFSYSVAR "H:\username\texlive\2018\texmf-var"
setx TEXMFSYSCONFIG "H:\username\texlive\2018\texmf-config"
setx TEXMFHOME "H:\username\texlive\texmf-local"
setx TEXMFDIST "H:\username\texlive\2018\texmf-dist"
setx TEXMFVAR "H:\username\texlive\2018\texmf-var"
setx TEXMFCONFIG "H:\username\texlive\2018\texmf-config"
setx TEXMFCACHE "H:\username\texlive\2018\texmf-var"
setx TEXLIVE_WINDOWS_TRY_EXTERNAL_PERL "1"
username
我用来登录所有大学公共计算机的用户名在哪里。
下面评论的一个人说我的最小示例对他们来说运行良好,没有出现任何错误。所以我想知道这个问题是否与这个便携式设置有关?
答案1
为了从命令行运行,需要设置一个额外的搜索变量(它不是递归的,所以在这种情况下它需要几个;位置)
Set XINDY_SEARCHPATH=H:\username\texlive\2018\texmf-dist\xindy\modules;H:\username\texlive\2018\texmf-dist\xindy\modules\base
或者在设置 TEXMFDIST 后用于便携用途
Set XINDY_SEARCHPATH=%TEXMFDIST%\xindy\modules;%TEXMFDIST%\xindy\modules\base
那么下面的应该可以像我一样工作
pdfLaTeX 主要
makeglossaries 主要
pdfLaTeX 主要