在我的 windows10 机器上安装 MikTex 后,makeglossaries 出现问题。pdflatex 和 biber 工作正常,但调用时makeglossaries
失败并显示以下错误消息:
$makeglossaries Main
makeglossaries version 4.36 (2018-03-07)
added glossary type 'main' (glg,gls,glo)
xindy -L english -C duden-utf8 -I xindy -M "Main" -t "Main.glg" -o "Main.gls" " Main.glo"
/d/local/thesis/C:/Program Files/MiKTeX2.9/scripts/xindy/../../xindy /modules: No such file or directory at C:\Program Files\MiKTeX2.9\scripts\xindy\ xindy.pl line 402.
***Call to xindy failed***
Check 'Main.glg' for details
我退房了wolfie 的回答但发现这已经在xindy脚本中实现了。
错误似乎是在$real_cmd
第 372 行的脚本中的变量中连接了路径。
有想法该怎么解决这个吗?
这是我的乳胶设置的简化版本:
主文本:
\documentclass[
11pt,
english,
a4paper,
DIV=11,
listof=numbered,
]{scrreprt}
% -------------------------------------------------------------------------
\setlength{\parskip}{0.75em}
\usepackage{geometry}
\geometry{bindingoffset=0.5cm,hmarginratio=3:4, bottom=4.5cm}
\widowpenalty10000
\clubpenalty10000
%---- PACKAGES ----
%\usepackage{hyperref}
\usepackage[hidelinks]{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{lmodern}
\usepackage{pdfpages}
\pdfminorversion=7
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{hhline}
\renewcommand\arraystretch{1.1}
\makeatletter
\newcommand{\thickhline}{
\noalign {\ifnum 0=`}\fi \hrule height 1pt
\futurelet \reserved@a \@xhline
}
\makeatother
\def\hyph{-\penalty0\hskip0pt\relax}
\usepackage{xcolor}
\definecolor{bostonuniversityred}{rgb}{0.8, 0.0, 0.0}
% This is the interesting part I guess -------------------------------
\usepackage[section=section,numberedsection=autolabel,toc,nonumberlist,xindy]{glossaries}
\GlsSetXdyCodePage{duden-utf8}
\makeglossaries
\input{glossary.tex}
% -----------------------------------------------------------------
\usepackage[chapter]{minted}
\usepackage{scrhack}
\usepackage{listings}
\renewcommand{\listingscaption}{Code Snippets}
\renewcommand{\listoflistingscaption}{List of Code Snippet}
\usepackage[german=quotes]{csquotes}
\MakeOuterQuote{"}
%---- BIBLIOGRAPHY ---
\usepackage[block=ragged,backend=biber,bibstyle=ieee]{biblatex}
\addbibresource{Bibliography.bib}
\makeatletter
\def\blx@maxline{77}
\makeatother
\begin{document}
\gls{someEntry}
\gls{someEntry2}
\newpage
\printglossary[title=Glossary]
\end{document}
词汇表.tex:
\newglossaryentry{someEntry}{
name={Some Entry},
description={Some Description}
}
\newglossaryentry{someEntry2}{
name={Some Entry 2},
description={Some Description 2}
}
在生成的 pdf 文件中,名称是可见的,因此它正确读取了词汇表文件,但由于 makeglossaries 命令失败而无法打印它。
答案1
我深入挖掘了一下,找到了部分解决方案。但由于我的 karma 还不够,所以我无法将其作为评论发布(而且我不确定这是否是正确的方式)。
xindy.pl 第 372 行内容如下:
our $real_cmd = Cwd::realpath($0);
如果我添加
print "real_cmd: $real_cmd\n";
之后,它会打印
real_cmd: /c/Users/username/Desktop/TeX/auxdir/C:/Program Files/MiKTeX 2.9/scripts/xindy/xindy.pl
这是错误的。
将这些行放入名为的测试文件中test_Cwd.pl
:
#!/usr/bin/perl -w
use Cwd;
our $real_cmd = Cwd::realpath($0);
print "real_cmd: $real_cmd\n";
带有窗口路径的输出:
$ C:\\Users\\username\\Desktop\\test_Cwd.pl
real_cmd: /c/Users/username/Desktop/C:/Users/username/Desktop/test_Cwd.pl
在 Windows 上使用模拟 unix 路径的输出:
$ /c/Users/username/Desktop/test_Cwd.pl
real_cmd: /c/Users/username/Desktop/test_Cwd.pl
perl 行为上的这种差异是众所周知的,并描述在https://stackoverflow.com/a/46773471。
可能的解决方案:
- 修复
C:\Program Files\MiKTeX 2.9\miktex\bin\x64\xindy.exe
在 msys 上执行 perl 的问题/c/Program\ Files/MiKTeX\ 2.9/scripts/xindy/xindy.pl
。我不知道该怎么做,因为我找不到提供 xindy.exe 的包。 - 修复
C:/Program Files/MiKTeX 2.9/scripts/xindy/xindy.pl
将 Windows 样式路径转换为 Unix 样式路径的问题(肮脏的黑客行为,如下所示) - 修复 perl 解释器的
Cwd
包,将 Windows 样式的路径转换为 Unix 样式的路径(通用解决方案,可能会破坏其他代码)
Msys 和 Cygwin 也具有cygpath
有助于创建解决方法的实用程序:
您需要xindy.pl
先修复平台检测,请参阅https://sourceforge.net/p/xindy/feature-requests/47/。
然后替换xindy.pl
第 372 行,如下所示
our $real_cmd = Cwd::realpath($0);
经过
our $real_cmd = "";
if ( $is_w32 ) {
our $cygpath_cmdline = "cygpath \"$0\"";
our $unixified_cmd_path = `$cygpath_cmdline`;
$unixified_cmd_path =~ s/\r//g;
$unixified_cmd_path =~ s/\n//g;
our $real_cmd = Cwd::realpath($unixified_cmd_path);
} else {
our $real_cmd = Cwd::realpath($0);
}
但是 xindy-lisp.exe 将无法读取 tempdir 文件名:
*** - PARSE-NAMESTRING: syntax error in filename
"\"/c/Users/username/Desktop/TeX/auxdir/FVWzOBrFBF\"" at position 0
该文件确实存在,但 xindy-lisp.exe 似乎期望文件名不带,\"
但带有单双引号相反。手动编辑命令行并删除\"
使我更进一步。解析临时文件并从那里读取其他路径时,它再次失败。
我在 Windows 7 上将 git-bash(msys,64 位)中的 perl 与 MiKTeX 64 位一起使用。据我所知,所有软件都已更新至最新版本,也许除了 perl。
$ perl --version
This is perl 5, version 26, subversion 1 (v5.26.1) built for x86_64-
msys-thread-multi
附言:由于我刚接触 perl,所以代码风格可能不太好。欢迎提出建议!