我正在尝试重新定义 LyX 中的nomencl_command
,以便能够使用 glossaries
包代替过时的nomencl
。
LyX 允许您指定 Nomenclature command
,默认情况下设置为:
makeindex -s nomencl.ist
因此,对于词汇表,命令更改为:
makeglossaries
但是,nomencl 的 LyX 实现使用较新的.nlo
作为输入文件,并使用.nls
作为输出文件。而词汇表使用"较旧"的.glo
和.gls
不幸的是,无法指定扩展名。
我发现首选项文件只说:
nomencl_command "makeglossaries"
但日志输出显示:
makeglossaries "[filename].nlo" -o [filename].nls
所以我的问题是nomencl_command
在哪里进一步定义?
相关代码在 src/LaTeX.cpp
中。请注意,某些诊断信息将写入 latex 调试标志。如果您在终端上运行带有 lyx -dbg latex
的 LyX,则可以在终端上看到此信息。
以下是即将发布的(几天)LyX 2.1的文件src/LaTeX.cpp
FileName const nlofile(changeExtension(file.absFileName(), ".nlo"));
// If all nomencl entries are removed, nomencl writes an empty nlo file.
// DepTable::hasChanged() returns false in this case, since it does not
// distinguish empty files from non-existing files. This is why we need
// the extra checks here (to trigger a rerun). Cf. discussions in #8905.
// FIXME: Sort out the real problem in DepTable.
if (head.haschanged(nlofile) || (nlofile.exists() && nlofile.isFileEmpty()))
rerun |= runMakeIndexNomencl(file, ".nlo", ".nls");
FileName const glofile(changeExtension(file.absFileName(), ".glo"));
if (head.haschanged(glofile))
rerun |= runMakeIndexNomencl(file, ".glo", ".gls");
和
bool LaTeX::runMakeIndexNomencl(FileName const & file,
string const & nlo, string const & nls)
{
LYXERR(Debug::LATEX, "Running MakeIndex for nomencl.");
message(_("Running MakeIndex for nomencl."));
string tmp = lyxrc.nomencl_command + ' ';
// onlyFileName() is needed for cygwin
tmp += quoteName(onlyFileName(changeExtension(file.absFileName(), nlo)));
tmp += " -o "
+ onlyFileName(changeExtension(file.toFilesystemEncoding(), nls));
Systemcall one;
one.startscript(Systemcall::Wait, tmp, path);
return true;
}
和
// nomencl file
FileName const nls(changeExtension(file.absFileName(), ".nls"));
nls.removeFile();
// nomencl file (old version of the package)
FileName const gls(changeExtension(file.absFileName(), ".gls"));
gls.removeFile();