xindy 无法找到文件“lang/english/utf8-lang.xdy”,尽管该文件可用

xindy 无法找到文件“lang/english/utf8-lang.xdy”,尽管该文件可用

运行时出现奇怪的错误

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 主要

相关内容