xindy
一切都运行正常。突然,我在使用glossaries
包时开始收到错误
Warning: File 'PhDThesis.acn' is empty. Have you used any entries defined in glossary 'acronym'?
***Call to xindy failed*** Possible cause of problem: Sort key required for entries only containing command names Check 'PhDThesis.nlg' for details
我刚刚更新了我的 Ubuntu 12.10。
.nlg 文件的内容
;; This logfile was generated automatically by `xindy'
;; at 14.08.2013 17:25:07
;; Indexstyle: "/tmp/HCmyqynpuv", Rawindex: "/tmp/z3QRNA2BGB", Output: "PhDThesis.not"
Building indexentry-tree:
Hierdepth of index is :TREE
sort-indexentries: (FORWARD BACKWARD FORWARD FORWARD)
sort-indexentries: (FORWARD BACKWARD FORWARD FORWARD)
sort-indexentries: (FORWARD BACKWARD FORWARD FORWARD)
sort-indexentries: (FORWARD BACKWARD FORWARD FORWARD)
sort-indexentries: (FORWARD BACKWARD FORWARD FORWARD)
sort-indexentries: (FORWARD BACKWARD FORWARD FORWARD)
sort-indexentries: (FORWARD BACKWARD FORWARD FORWARD)
ERROR: CHAR: index 0 should be less than the length of the string
*** Unable to execute: 'xindy -L english -I xindy -M "PhDThesis" -t "PhDThesis.nlg" -o "PhDThesis.not" "PhDThesis.ntn"' ***
Status report:
Opening logfile "PhDThesis.nlg" (done)
Reading indexstyle...
Loading module "/tmp/HCmyqynpuv"...
Loading module "lang/english/latin9-lang.xdy"...
Loading module "lang/english/latin9.xdy"...
Finished loading module "lang/english/latin9.xdy".
Finished loading module "lang/english/latin9-lang.xdy".
Loading module "PhDThesis.xdy"...
Loading module "tex.xdy"...
Finished loading module "tex.xdy".
Finished loading module "PhDThesis.xdy".
Finished loading module "/tmp/HCmyqynpuv".
Finished reading indexstyle.
Finalizing indexstyle... (done)
Reading raw-index "/tmp/z3QRNA2BGB"...
Finished reading raw-index.
Processing index...
ERROR: CHAR: index 0 should be less than the length of the string
请帮助。
答案1
听起来 xindy 无法确定如何对一个或多个条目进行排序,但如果没有最简单的示例,很难准确判断。name
除非您指定了sort
值,否则 xindy 默认按条目进行排序。但是,xindy 会忽略 (La)TeX 命令,因此如果排序键仅包含命令,xindy 将留下一个空白的排序键并发出警告。xindy 的早期版本给出了一个有点神秘的错误:
ERROR: CHAR: index 0 should be less than the length of the string
较新的版本给出了稍微更容易理解的警告:
WARNING: Would replace complete index key by empty string, ignoring
由于第一个警告不是很容易理解,因此makeglossaries
搜索它的实例,如果找到则发出警告:
Possible cause of problem: Sort key required for entries only containing command names
这是一个说明该问题的简单例子:
\documentclass{article}
\usepackage[xindy]{glossaries}
\makeglossaries
\newglossaryentry{P}{name={\P},description={Paragraph symbol}}
\newglossaryentry{S}{name={\S},description={Section symbol}}
\begin{document}
Reference the terms: \gls{S} \gls{P}.
\printglossaries
\end{document}
在这种情况下,第一个术语具有排序键\P
,第二个术语具有排序键\S
。在这两种情况下,一旦 xindy 删除命令,它就会剩下一个空的排序字符串,并且不知道如何比较条目。应该\P
放在之前还是之后\S
?解决方案是为这些条目提供排序键:
\documentclass{article}
\usepackage[xindy]{glossaries}
\makeglossaries
\newglossaryentry{P}{name={\P},sort={P},description={Paragraph symbol}}
\newglossaryentry{S}{name={\S},sort={S},description={Section symbol}}
\begin{document}
Reference the terms: \gls{S} \gls{P}.
\printglossaries
\end{document}
如果所有术语都是这样的(例如,它们都是符号),那么按字母顺序对它们进行排序可能没有任何意义。在这种情况下,最好按定义(包选项sort=def
,如您在评论中提到的)或按文档中的用途对它们进行排序。在这两种情况下,glossaries
都会为每个术语生成一个数字排序键,因此问题不再出现。
编辑:glossaries
该软件包有一个名为makeglossariesgui
.aux
通过分析和相关词汇表文件,可以提供更多详细信息.log
。以下示例有三个有问题的条目和一个正常工作的条目,以供比较:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[xindy]{glossaries}
\makeglossaries
\newglossaryentry{sample}{name={sample},
description={an example}}
\newglossaryentry{S}{name={\S},
description={section symbol}}
\newglossaryentry{alpha}{name={\ensuremath{\alpha}},
description={alpha}}
\newglossaryentry{beta}{name={$\beta$},text={\beta},
description={beta}}
\begin{document}
Test: \gls{sample}, \gls{S}, $\gls{alpha}$, $\gls{beta}$.
\printglossaries
\end{document}
首先需要运行 LaTeX 来生成文件.aux
(尽管如果您正在尝试找出xindy
失败的原因,这通常已经存在)。.aux
然后可以makeglossariesgui
使用文件 > 打开菜单项。
对于上述 MWE,会显示一个错误对话框表明xindy
失败:
一旦关闭该对话框,“诊断”选项卡就会列出每个问题:
显示的文字为:
Xindy 不会接受排序值
\S
(对于 entry ),因为它被视为空字符串。这是因为 xindy 会忽略排序字段中的 (La)TeX 命令,一旦这些命令被删除,排序字段就会变为空。您需要使用entry 定义中的键S
明确设置排序字段。sort
Xindy 不会接受排序值
\ensuremath {\alpha }
(对于 entry ),因为它被视为空字符串。这是因为 xindy 会忽略排序字段中的 (La)TeX 命令,一旦这些命令被删除,排序字段就会变为空。您需要使用entry 定义中的键alpha
明确设置排序字段。sort
Xindy 不会接受排序值
$\beta $
(对于 entry ),因为它被视为空字符串。这是因为 xindy 会忽略排序字段中的 (La)TeX 命令,一旦这些命令被删除,排序字段就会变为空。您需要使用entry 定义中的键beta
明确设置排序字段。sort
Xindy 报告了以下内容:
WARNING: Would replace complete index key by empty string, ignoring #<ordrule-regexp: '\\[a-zA-Z@]+ *' => '' :again NIL :only-at-start NIL ERROR: CHAR: index 0 should be less than the length of the string
因此,这通过标签明确地标识了每个有问题的条目(既不是xindy
也不makeglossaries
是)。
“一般信息”选项卡包含一个“详细信息”链接,单击该链接将打开一个窗口,其中包含所有条目的摘要。第二列显示排序键,如果有问题,则显示为红色。
一旦问题得到解决,您可以切换回使用makeglossaries
或明确地xindy
。
顺便说一下,glossaries-extra
package,在使用 package 选项\glsxtrnewsymbol
时提供命令。这在内部使用但设置symbols
\newglossaryentry
sort
值设置为标签而不是字段name
。例如:
\glsxtrnewsymbol[text={\beta},description={beta example}]{beta}{$\beta$}
这相当于
\newglossaryentry{beta}{name={$\beta$},text={\beta},
sort={beta},
type=symbols,
category=symbol,
description={beta example}}
答案2
\indexentry
如果文件中的第一个参数.idx
为空,也会出现此错误。我在使用一些自动生成的索引时遇到了这个问题。