xindy 软件包术语表存在问题

xindy 软件包术语表存在问题

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 已忽略一个或多个排序字符串为空的条目。Xindy 失败,退出代码为 1

一旦关闭该对话框,“诊断”选项卡就会列出每个问题:

诊断标签图像

显示的文字为:

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-extrapackage,在使用 package 选项\glsxtrnewsymbol时提供命令。这在内部使用但设置symbols\newglossaryentrysort值设置为标签而不是字段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为空,也会出现此错误。我在使用一些自动生成的索引时遇到了这个问题。

相关内容