LaTeX 折腾小记:Nomenclature 的实现及加入

LaTeX 折腾小记:Nomenclature 的实现及加入

我不得不说学习 LaTeX 的过程是有些痛楚在里面的。LaTeX 所生成的文档确实是简洁,优雅而赏心悦目的。但是其语法结构和部分写法确实让我吃了不少苦头。然而由于时间的缺乏,我却不能深入研究 LaTeX 本身,而只能「囫囵吞枣」的使用,这也是另一个让我很无奈的原因。

一些起因

最近着手撰写一份技术文档,由于相关技术术语太多,于是便萌生了撰写专门术语表 Nomenclature 的想法,文章由 LaTeX 写成,而我恰恰是一个刚刚入门的新手。遂查找相关方法。

经过

首先在经过相关关键词查找后发现了 Overleaf 在此网页关于这方面的详细说明。

加入宏包

首先在自己的文章导言位置必须加入 nomencl 宏包,然后紧跟的下一行使用 \makenomenclature

\usepackage{nomencl}
\makenomenclature

这样你就拥有了使用 Nomenclature 的条件。

加入一条术语

如果想写一条术语,那么只需要在某位置加入

\nomenclature{A}{Definition of A}

这个东西本质上就是一个 list,顺序怎么写无所谓,最后编译的时候会按照特定顺序排列。

加入术语表

在成功的写出所有术语之后,在 \end{document} 之前,你可以在想要的位置使用 \printnomenclature 来列出你的术语表。

应当注意到术语表和词汇表的差别。在此网页中,作者提到了如下观点:

要注意的是术语表有别于词汇表(Glossary),后者是索引的一种一般出现在文章末尾,用于检索文中出现的专业词汇。

所以我们可以将术语表放在文章目录的后面。

到这里看起来没什么问题对吧?

问题来了!

我又在此网页注意到了需要使用 MakeIndex 引擎来编译一遍,但是到了我这里无论如何都会产生如下图所示的错误。

我再次详细查看了上面的网页,看起来在 MakeIndex 里面需要通过一些参数来产生特定文件达到「编译术语表」的效果。文章中使用了如下命令:

makeindex %.nlo -s nomencl.ist -o %.nls -t %.nlg

大意是产生了一个 .nls 的后缀文件。虽然网站图片显示的界面看起来像是在 Mac 平台,但是由于我使用的是 TexShop 而不是 TexMaker,我并未找到如何配置自己的 MakeIndex 命令来达到快速编译的效果。

解决方案

我于是打开了 Terminal 尝试使用 CLI 来编译我的文档,编译结果是成功的,我得到了自己想要的结果,但是我不喜欢,因为我觉得这种方式不是十分优雅。如果能把这个「一键编译」命令嵌入到 TexShop 的图形界面,那就完美了。

终极解决方案

受到 TexShop 宏功能里面 AppleScript 的启发,我想到的解决方案是写个 Shell 脚本。思路是获取当前文件名,然后套用上面一行代码即可。继续寻找,我在此网页上找到了解决方案!这与我预想的一样。

首先用 Vim 或其他文本编辑器写入以下内容:

#!/bin/sh

bfname=$(dirname "$1")/"`basename "$1" .tex`"
makeindex "$bfname".nlo -s nomencl.ist -o "$bfname".nls

将其命名为 Nomenclature.engine 保存在 ~/Library/TeXShop/Engines/ 目录下。

授予执行权限:

sudo chmod u+x Nomenclature.engine

重启 TexShop,此时我们可以看到一个叫做 Nomenclature 的排版选项已经出现在了 TexShop 的图形界面。

至此,问题解决,以后只需要 LaTeX -> Nomenclature -> LaTex 编译即可。