我已开始使用 make-glossaries 包,并正在创建多个词汇表。不幸的是,我的 latexmk 调用似乎跳过了调用 makeglossaries,所以我的构建没有结束。我使用的是非main
-type 词汇表,其中:
\newglossary[nlg]{notation}{not}{ntn}{Notation and Abbreviations}
我运行来构建文档的命令行是:
latexmk -pdf -outdir=aux/ -auxdir=aux/ -pdflatex="xelatex -shell-escape %O %S" my_doc
如果我调用它,latexmk 的控制台输出的结尾是:
Output written on aux/my_doc.pdf (37 pages).
Transcript written on aux/my_doc.log.
Latexmk: Examining 'aux/my_doc.log'
=== TeX engine is 'XeTeX'
Latexmk: Found input bbl file 'aux/pubinfo.bbl'
Latexmk: Missing input file: 'my_doc.not' from line
'No file my_doc.not.'
Latexmk: Found input bbl file 'aux/my_doc.bbl'
Latexmk: Found input bbl file 'aux/pubinfo.bbl'
Latexmk: Log file says output to 'aux/my_doc.pdf'
Latexmk: Found bibliography file(s) [front/pubinfo.bib]
Latexmk: Found bibliography file(s) [back/general.bib]
Latexmk: All targets (aux/my_doc.pdf) are up-to-date
现在,我已读到:
如何让 Latexmk 使用 makeglossaries?
但.latexmkrc
建议的文件不是我需要的:
add_cus_dep('glo', 'gls', 0, 'makeglo2gls');
sub makeglo2gls {
system("makeindex -s '$_[0]'.ist -t '$_[0]'.glg -o '$_[0]'.gls '$_[0]'.glo");
}
它使用makeindex
而不是makeglossaries
;并且需要每个词汇表文件类型的依赖项。我可以用更合适的东西替换它,这实际上确实会导致 makeglossaries 工作吗?此外,它是否适合使用 subdir aux/
?
如果没有,我该怎么做才能触发 makeglossaries 的执行?
笔记:
为了“半手动”完成处理,我在第一个 latexmk 调用后添加了以下命令:
makeglossaries -d aux/ my_doc
rm aux/my_doc.pdf
latexmk -pdf -outdir=aux/ -auxdir=aux/ -pdflatex="xelatex -shell-escape %O %S" my_doc
...然后一切都顺利进行。但如果不删除 .pdf,它仍然不起作用(!)
答案1
您提到的.latexmkrc
文件建议已过时。请参阅文件glossary_latexmkrc
中的example_rcfiles
最新建议。根据该文件的内容,您需要放入文件的代码.latexmkrc
是
add_cus_dep( 'acn', 'acr', 0, 'makeglossaries' );
add_cus_dep( 'glo', 'gls', 0, 'makeglossaries' );
add_cus_dep( 'ntn', 'not', 0, 'makeglossaries' );
$clean_ext .= " acr acn alg glo gls glg ist not ntn";
sub makeglossaries {
my ($base_name, $path) = fileparse( $_[0] );
pushd $path;
my $return = system "makeglossaries", $base_name;
popd;
return $return;
}
没有简单的方法可以说服您latexmk
了解符号词汇表文件的扩展名,因此您必须添加适当的自定义依赖项。但您不需要为此添加新的子程序。
上述代码在使用辅助目录时也能正常工作。这是通过 和pushd
的技巧实现的popd
。
我还添加了一行来指定在清理时要删除词汇表文件。
答案2
将@JohnCollins 的回答改编为对链接问题的回答中的一些观察:
- 传播静默模式
- 为防止出现空格或其他名称异常,请用双引号括起文件名。
- 更好地(?)支持不同的输入和输出目录<-不确定这是否真的有意义,请随意评论
- 不要忽略添加到生成的扩展集中
add_cus_dep( 'acn', 'acr', 0, 'run_makeglossaries' );
add_cus_dep( 'glo', 'gls', 0, 'run_makeglossaries' );
add_cus_dep( 'ntn', 'not', 0, 'run_makeglossaries' );
push @generated_exts, 'glo', 'gls', 'glg';
push @generated_exts, 'acn', 'acr', 'alg';
push @generated_exts, 'ntn', 'not', 'nlg';
$clean_ext .= " acr acn alg glo gls glg ist not ntn";
sub run_makeglossaries {
my $dir = dirname($_[0]);
my $base_name = basename($_[0]);
my $return;
if ( $silent ) {
$return = system "makeglossaries", "-q", "-d", "$dir", "$base_name";
}
else {
$return = system "makeglossaries", "-d", "$dir", "$base_name";
};
return $return;
}