我用 xelatex 编译了一个 tex 文件后,用 Xindy 的 Glosarries 做了索引,结果显示:
$ makeglossaries test
makeglossaries version 2.04 (2012-05-19)
added glossary type 'main' (glg,gls,glo)
xindy -L english -I xindy -M "test" -t "test.glg" -o "test.gls" "test.glo"
Opening logfile "test.glg"
ERROR: Opening logfile "test.glg" failed!
***Call to xindy failed***
Check 'test.glg' for details
在test.glg中,有:
*** Unable to execute: 'xindy -L english -I xindy -M "test" -t "test.glg" -o "test.gls" "test.glo"' *** Status report:
Opening logfile "test.glg"
ERROR: Opening logfile "test.glg" failed!
但是我可以在 Mac 的终端上使用 xindy:
Jing@Jing2MacBook-Pro ~$ xindy
You need to specify --out-file if the raw index is read from standard input.
usage: xindy [-V?h] [-qv] [-d magic] [-o outfile.ind] [-t log] ................
有什么问题?
有一个类似的问题并为我提供了一个有用的想法:
真正的问题与我的问题相同:
对于不使用 Xindy 的“词汇表”,我们必须在 .tex 所在的文件夹中使用“makeglossaries test.tex”。
对于'glossaries',当使用Xindy时,Xindy也有路径问题,但我们必须将tex文件复制到xindy的Temp文件夹中,然后xindy才能工作。
重点是:
'makeglossaries' 或 xindy 无法使用 .tex 文件(以及一些其他文件经过 xelatex 编译后由 .tex 生成的文件)所在的文件夹作为 TMPDIR,它使用系统默认的 TMPDIR,因此 'makeglossaries' 找不到 .glg,进而 'makeglossaries' 无法创建索引。
您可以在终端中使用命令“env”来找出系统的默认 TMPDIR。我的系统中的默认 TMPDIR 是:
TMPDIR=/var/folders/9h/71txqqf572x998x6sm4c6l440000gn/T/
所以我必须把我想要索引的所有 tex 文件复制到 /var/folders/9h/71txqqf572x998x6sm4c6l440000gn/T/ 中,在那里编译 tex 文件,然后 xindy 才能工作。
否则,我们必须手动将终端中的 TMPDIR 更改为当前会话中 xelatex test.tex 之后的 .tex 文件所在的文件夹。
如果你的 tex 文件位于 /Users/Jhering/mynewbook/,在 Mac/Linux/Unix-like 中,更改 TMPDIR 如下:
export TMPDIR=/Users/Jhering/mynewbook/
在 Windows 中,例如:
set TEMP=C:\Users\Jhering\mynewbook
然后你可以
makeglossaries test
xelatex test.tex
但是我们怎样才能不需要每次都将 TMPDIR 更改为 .tex 文件所在的文件夹?
示例代码(最初来自软件包词汇表,未经任何编辑):
确保您已拥有如下参数“xindy”:
\usepackage[xindy]{glossaries}
test.tex 文件是:
% This file is public domain.
%
% This is a sample document illustrating how to use the
% glossaries package with xindy. To create the document:
%
% latex samplexdy
% makeglossaries samplexdy
% latex samplexdy
%
% If you don't have Perl installed, then use one of the
% following instead of makeglossaries:
%
% If you want to have a separate "Mc" letter group do:
%
% xindy -I xindy -M samplexdy-mc -t samplexdy.glg -o samplexdy.gls samplexdy.glo
%
% Otherwise do:
%
% xindy -L english -C utf8 -I xindy -M samplexdy -t samplexdy.glg -o samplexdy.gls samplexdy.glo
%
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{fmtcount}
\usepackage[colorlinks,plainpages]{hyperref}
\usepackage[xindy,style=altlistgroup]{glossaries}
% Define a new command to do bold italic:
\newcommand*{\hyperbfit}[1]{\textit{\hyperbf{#1}}}
% Need to add this to the list of attributes in order
% to use it with xindy:
% (This command will have no effect if \noist is used)
\GlsAddXdyAttribute{hyperbfit}
% Redefine the page numbers so that they appear as a word:
\renewcommand*{\thepage}{\Numberstring{page}}
% Need to add this to the list of location styles.
% \Numberstring{page} gets expanded to
% \protect \Numberstringnum {<n>} (where <n> is the page number)
% so need to define the location in that format:
% (This command will have no effect if \noist is used)
\GlsAddXdyLocation{Numberstring}{:sep "\string\protect\space
\string\Numberstringnum\space\glsopenbrace"
"arabic-numbers" :sep "\glsclosebrace"}
% (Need to redefine \glsXpageXhyperbfit and
% \glsXpageXglsnumberformat after \makeglossaries to get the
% hyperlinks working correctly.)
% To have Mc as a separate group uncomment the following three
% lines:
%\setStyleFile{samplexdy-mc} % note no extension
%\noist
%\GlsSetXdyLanguage{}
% The above three lines specify to use samplexdy-mc.xdy (supplied
% with this file) and don't overwrite it. The language is
% unset using \GlsSetXdyLanguage{} as all the language
% dependent information is contained in samplexdy-mc.xdy
% Note that using \noist means that commands like
% \GlsAddXdyAttribute and \GlsAddXdyLocation will no longer have
% an effect.
% Write the style file (if \noist isn't used)
% and activate glossary entries
\makeglossaries
% Each page location will be specified in the form:
%
% "\glsXpageXglsnumberformat{}{\protect \Numberstringnum "\marg{n}"}"
% or
% "\glsXpageXhyperbfit{}{\protect \Numberstringnum "\marg{n}"}"
%
% Redefine to allow hyperlinks:
\renewcommand{\glsXpageXglsnumberformat}[2]{%
\linkpagenumber#2%
}
\renewcommand{\glsXpageXhyperbfit}[2]{%
\textbf{\em\linkpagenumber#2}%
}
\newcommand{\linkpagenumber}[3]{\hyperlink{page.#3}{#1#2{#3}}}
% Define glossary entries
% \glshyperlink is used instead of \gls to prevent the glossary
% page numbers also appear in the locations, however I need
% to ensure that the referenced entries are added to the
% glossary via commands that use \glslink, \glsadd or \glssee
\newglossaryentry{mcadam}{name={McAdam, John Loudon},
first={John Loudon McAdam},text={McAdam},
description={Scottish engineer}}
\newglossaryentry{maclaurin}{name={Maclaurin, Colin},
first={Colin Maclaurin},text={Maclaurin},
description={Scottish mathematician best known for the
\gls{maclaurinseries}}}
\newglossaryentry{maclaurinseries}{name={Maclaurin series},
description={Series expansion},see={taylorstheorem}}
\newglossaryentry{taylorstheorem}{name={Taylor's theorem},
description={Theorem expressing a function $f(x)$ as the sum of
a polynomial and a remainder:
\[f(x) = f(a)+f'(a)(x-a)+f''(a)(x-a^2)/2!+\cdots+R_n\]
If $n\to\infty$ the expansion is a \glshyperlink{taylorseries}
and if $a=0$, the series is called a
\gls{maclaurinseries}}}
\newglossaryentry{taylorseries}{name={Taylor series},
description={Series expansion},see={taylorstheorem}}
\newglossaryentry{taylor}{name={Taylor, Brook},
first={Brook Taylor},text={Taylor},
description={English mathematician}}
\newglossaryentry{mcnemar}{name={McNemar, Quinn},
first={Quinn McNemar},text={McNemar},
description={Mathematician who introduced
\gls{mcnemarstest}. This entry has the number list
suppressed},nonumberlist}
\newglossaryentry{mcnemarstest}{name={McNemar's test},
description={A nonparametric test introduced by
\gls{mcnemar} in 1947}}
\newglossaryentry{mach}{name={Mach, Ernst},
first={Ernst Mach},text={Mach},
% if using samplexdy-mc.xdy, the following line is needed
% to prevent this entry being put in the "Mc" group
sort={mach, Ernst},
description={Czech/Austrian physicist and philosopher}}
\newglossaryentry{machnumber}{name={Mach number},
% if using samplexdy-mc.xdy, the following line is needed
% to prevent this entry being put in the "Mc" group
sort={mach number},
description={Ratio of the speed of a body in a fluid to the
speed of sound in that fluid named after \gls{mach}}}
\newglossaryentry{malthus}{name={Malthus, Thomas Robert},
first={Thomas Robert Malthus},text={Malthus},
description={English mathematician, sociologist and classicist}}
\newglossaryentry{ampereandre}{name={Ampère, André-Marie},
first={André-Marie Ampère},text={Ampère},
description={French mathematician and physicist}}
\newglossaryentry{ampere}{name={ampere},
description={SI unit of electric current named after
\gls{ampereandre}}}
\newglossaryentry{archimedes}{name={Archimedes of Syracuse},
first={Archimedes of Syracuse},text={Archimedes},
description={Greek mathematician}}
\newglossaryentry{archimedesprinciple}{name={Archemedes' principle},
description={Principle that if a body is submerged in a fluid
it experiences upthrust equal to the weight of the displaced
fluid. Named after \gls{archimedes}}}
\newglossaryentry{galton}{name={Galton, Sir Francis},
first={Sir Francis Galton},text={Galton},
description={English anthropologist}}
\newglossaryentry{gauss}{name={Gauss, Karl Friedrich},
first={Karl Friedrich Gauss},text={Gauss},
description={German mathematician}}
\newglossaryentry{gaussianint}{name={Gaussian integer},
description={Complex number where both real and imaginary
parts are integers}}
\newglossaryentry{peano}{name={Peano, Giuseppe},
first={Giuseppe Peano},text={Peano},
description={Italian mathematician}}
\newglossaryentry{peanoscurve}{name={Peano's curve},
description={A space-filling curve discovered by
\gls{peano}}}
\newglossaryentry{pearson}{name={Pearson, Karl},
first={Karl Pearson},text={Pearson},
description={English mathematician}}
\newglossaryentry{pearspmcc}{name={Pearson's product moment
correlation coefficient},description={Product moment correlation
coefficient named after \gls{pearson}}}
\begin{document}
\title{Sample Document Using the Glossaries Package With Xindy}
\author{Nicola Talbot}
\maketitle
\section{\glsentryfirst{gauss}}
This is a section on \gls[format=(]{gauss}. This section spans
several pages.
\newpage
This page talks about \glspl[format=hyperbfit]{gaussianint}. Since
it's the principle definition, the user-defined hyperbfit format is
used.
\newpage
The section on \gls[format=)]{gauss} ends here.
\section{Series Expansions}
This section is about series expansions. It mentions
\gls{maclaurin} and \gls{taylor}. It also discusses
\gls{taylorstheorem} which is related to the \gls{taylorseries}.
The \gls{maclaurinseries} is a special case of the
\gls{taylorseries}.
\section{\glsentryname{archimedesprinciple}}
This section discusses \gls{archimedesprinciple} which was
introduced by \gls{archimedes}.
\section{Another section}
This section covers \gls{mach} who introduced the \gls{machnumber}.
It also mentions \gls{ampereandre} after whom the
SI unit \gls{ampere} is named. It then discusses \gls{galton}
and \gls{malthus}. Finally it mentions \gls{mcadam}.
\newpage
This page discusses \gls{mcnemar} who introduced
\gls{mcnemarstest} and \gls{peano} who discovered \gls{peanoscurve}.
\printglossaries
\end{document}
当 PATH 中的文件夹名称和 .tex 文件名称不是 CJK 字符时,它可以正常工作。为了使用 xindy,我必须更改所有 CJK 文件的名称和文件夹的名称!
如今,这已是 21 世纪的一个大问题!
答案1
- test.tex 在文件夹 ~/翻译
- 我在终端中使用 xindy --interactive -L english -M.... 来查找 xindy 的临时文件夹的位置。
- 将 test.tex 复制到 xindy 的临时文件夹中。
4. 在此文件夹中使用
xelatex test.tex
makeglossaries test
xelatex test.tex
5.Xindy 的作品。