我使用该nomenclature
软件包为我的论文创建命名法部分。我已经有一段时间没有用命名法写论文了,但今天它不起作用。
为了使用该nomenclature
包,我需要运行makeindex
并重新运行我的 LaTeX 文件。我通常在 LaTeX 文件的第一行写以下内容,一切都会自动正常运行。
\immediate\write18{makeindex "paper".nlo -s nomencl.ist -o "paper".nls}
但今天它却无法正常工作。问题似乎\write18
是受限模式。自从我上次撰写了一篇包含命名法部分的论文以来,TeX Live 可能发生了一些变化,当时我升级了操作系统。
我可以用bibtex
运行\write18
。有什么原因为什么makeindex
不能运行?我认为它应该是一个安全的程序。
如果我使用 运行--shell-escape
,一切都会正常工作,但我不想这样做,因为限制模式是出于某种原因而创建的。我也可以makeindex
在 bash shell 中手动运行该命令,一切都会正常工作,但我使用的是 kile,不想一直运行另一个命令。
我可以创建的最简单的示例文件:
\immediate\write18{makeindex "paper".nlo -s nomencl.ist -o "paper".nls}
\documentclass[11pt]{article}
\usepackage{nomencl}
\makenomenclature
\begin{document}
\printnomenclature
some text
\nomenclature{$symbol$}{description}
\end{document}
运行pdflatex paper.tex
不会产生命名法。运行pdflatex --shell-escape paper.tex
会产生命名法。测试时,请确保在运行后删除目录中的所有额外文件--shell-escape
或更改符号名称,因为您可能认为问题已解决,而实际上该makeindex
命令只是在上一次测试中运行的。
如何查看在受限模式下允许哪些命令?如果我kpsewhich --var-value shell_escape_commands
在 bash 中运行,它会返回“bibtex,bibtex8,kpsewhich,makeindex,mpost,repstopdf,”。因此,makeindex 似乎应该可以工作。
pdflatex
我在 Ubuntu 13.04 上使用。
答案1
如果我运行这个例子,我得到
runsystem(makeindex "donom".nlo -s nomencl.ist -o "donom".nls)...quotation error in system command.
在日志文件中;在 Mac OS X 上使用 MacTeX/TeX Live 2014 和在 Debian 系统上使用 TeX Live/Debian 2013 进行了测试。
另一方面,如果我将这一行改成
\immediate\write18{makeindex "\jobname.nlo" -s nomencl.ist -o "\jobname.nls"}
然后命令就会被执行。
请注意,使用\jobname
而不是实际文件名可以重复使用代码。另外,我会使用
\immediate\write18{makeindex -s nomencl.ist -o "\jobname.nls" "\jobname.nlo"}
因为这是一种更常见的语法(但是makeindex
在文件名后也接受选项)。
还有一种不同的策略,即使用arara
:
% arara: nomencl
% arara: pdflatex
\documentclass[11pt]{article}
\usepackage{nomencl}
\makenomenclature
\begin{document}
\printnomenclature
some text
\nomenclature{$symbol$}{description}
\end{document}
如果你运行命令行
arara -v <filename>
您将获得同样的效果。
答案2
看起来不寻常的文件名引号(即“paper”.nlo 和“paper”.nls)已成为受限 \write18 的问题。我不知道为什么我过去会使用它,但一定是与 makeindex 相关的一些怪癖需要它。这个怪癖现在似乎已经修复了。所以,如果我更改为
\immediate\write18{makeindex paper.nlo -s nomencl.ist -o paper.nls}
一切按预期进行。