我正在尝试在我的硕士论文中实现该nomencl
包,但在制作latexmk
/makeindex
创建或更新nls
文件时遇到了严重问题。我最终nls
从终端手动创建了文件(根据nomencl
文档),但它不会更新。我正在使用 TeX Live 和 Sublime Text 2 以及 LaTeXTools。
因此,根据相当广泛的网络信息,我不是唯一一个在正确创建nomencl
和latexmk
/或makeindex
通信方面遇到麻烦的人。根据一个帖子,我尝试将以下代码添加到文件中latexmkrc
:
# for nomenclature
add_cus_dep("nlo", "nls", 0, "nlo2nls");
sub nlo2nls {
system("makeindex $_[0].nlo -s nomencl.ist -o $_[0].nls -t $_[0].nlg");
}
latexmkrc
我在 Mac 上找到了不少于 8 个文件,但都无法根据latexmk
文档找到它们,而且没有print('Hello, world!');
对任何文件添加任何响应。我还尝试在(和,以防万一)中创建一个latexmkrc
文件。两者都没有响应/opt/local/share/latexmk/LatexmK
/opt/local/share/latexmk
Hello, world!
我的问题是:如何让nls
文件自动创建和更新?
答案1
以防万一latexmk
,第一步是latexmk -v
在命令行/终端上验证您当前的版本;当前版本是 4.35,日期为 2012 年 11 月 11 日。否则,请更新您的 TeXlive 发行版或通过以下方式更新到最新版本latexmk 在 ctan。
使用终端 (Linux)根据您的需求在.latexmkrc
主目录中的文件中添加自定义依赖命令。有关nomencl
示例,请参阅examplerc 脚本在ctan
gedit $HOME/.latexmkrc
内容如下
# Custom dependency and function for nomencl package
add_cus_dep( 'nlo', 'nls', 0, 'makenlo2nls' );
sub makenlo2nls {
system( "makeindex -s nomencl.ist -o \"$_[0].nls\" \"$_[0].nlo\"" );
}
那么它应该可以一起工作latexmk
,至少对我来说是这样的。
答案2
如果可以的话,我建议你尝试一下阿拉拉。
优点:
- 它有一本为人类编写的很棒的手册;-)
- 您可以在文档中使用指令,这意味着您可以用不同的方式编译不同的文档。换句话说,指令是特定于文档的。
- 编译很简单,只需一步:
arara yourfile
- 文档告诉您如何集成 arara 以在许多编辑器中获得一键工具栏按钮。因此,您可以在编辑器中运行 arara。
- 它随 texlive 一起提供。
- ....
- ......
这是一个示例文件(例如myfile.tex
):
% arara: pdflatex
% arara: nomencl
% arara: pdflatex
% arara: pdflatex
% !arara: indent: { overwrite: false, output: outputfile.tex, trace: true }
\documentclass{report}
\usepackage{nomencl}
\makenomenclature
\begin{document}
\printnomenclature
\chapter{Structural Analysis} \label{sec:Structural Analysis}
\section{Sectional Properties} \label{sec:Sectional Properties}
The cross-sectional area is defined as
\begin{equation} \label{eqn:Cross-sectional area}
A = \int_{S} \, dS
\end{equation}
\nomenclature{$A$}{cross-sectional area, m$^{2}$}
\nomenclature{$S$}{arbitrary surface}
\chapter{Structural Analysis} \label{sec:Structural Analysis2}
\section{Sectional Properties} \label{sec:Sectional Properties2}
The cross-sectional area is defined as
\begin{equation} \label{eqn:Cross-sectional area2}
A = \int_{S} \, dS
\end{equation}
\nomenclature{$A2$}{cross-sectional area, m$^{2}$}
\nomenclature{$S2$}{arbitrary surface}
\end{document}
使用 编译此文件arara myfile
。有关详细信息,请参阅文档。