2

我正在尝试重新定义\nomencl_commandin LyX,以便能够使用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进一步定义?

4

1 回答 1

3

相关代码在src/LaTeX.cpp. 下面请注意,一些诊断信息被写入到 Latex 调试标志中。如果您使用lyx -dbg latex.

src/LaTeX.cpp以下是即将发布(几天之内)LyX 2.1文件的摘录。

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();
于 2014-04-09T20:32:12.283 回答