有没有办法自动从生成的命名法中删除重复项?
例如多次添加:
\nomenclature{HTML}{HyperText Markup Language}
在你的 TeX 文件中应该产生只有一个术语表中的条目。
这个最小的例子展示了发生了什么:
% This is test.tex
\documentclass{book}
\usepackage{nomencl}
\makenomenclature
\begin{document}
Some text \nomenclature{HTML}{HyperText Markup Language}
\newpage
\chapter{Chapter}
Some text \nomenclature{HTML}{HyperText Markup Language}
\printnomenclature
\end{document}
命名法是用生成的makeindex test.nlo -s nomencl.ist -o test.nls
,如下所示test.nls
:
\begin{thenomenclature}
\nomgroup{A}
\item [{HTML}]\begingroup HyperText Markup Language\nomeqref {0}
\nompageref{1}
\item [{HTML}]\begingroup HyperText Markup Language\nomeqref {1.0}
\nompageref{3}
\end{thenomenclature}
问题出在以下行test.nlo
不一致:
\nomenclatureentry{aHTML@[{HTML}]\begingroup HyperText Markup Language\nomeqref {0}|nompageref}{1}
\nomenclatureentry{aHTML@[{HTML}]\begingroup HyperText Markup Language\nomeqref {1.0}|nompageref}{3}
在我的真实 tex 中,\nomeqref
内容是\relax x.x
重复的条目。
答案1
该nomencl
包的用途与您使用它的用途不同。
该包的目的是编写一个使用的符号或缩写列表,并引用它们定义或首次使用的位置(由用户选择)。因此,它并不意味着要对命名法进行多次引用。
对于首字母缩略词来说,最好的包是glossaries
,但更简单的acronym
经常被使用。
答案2
我可能错过了一些东西,但使用以下代码我只能得到一进入命名法。
% This is test.tex
\documentclass{article}
\usepackage{nomencl}
\makenomenclature
\begin{document}
Some text \nomenclature{HTML}{HyperText Markup Language}
\newpage
Some text \nomenclature{HTML}{HyperText Markup Language}
\printnomenclature
\end{document}
命名法是用生成的makeindex test.nlo -s nomencl.ist -o test.nls
,并且这里是test.nls
。
\begin{thenomenclature}
\nomgroup{A}
\item [{HTML}]\begingroup HyperText Markup Language\nomeqref {0}
\nompageref{1, 2}
\end{thenomenclature}
答案3
这是一个手动的、不太优雅的后期编辑解决方法test.nlo
在命令行中执行:
cat test.nlo | sort | uniq -w 49 > test.nlo
进而:
makeindex test.nlo -s nomencl.ist -o test.nls
uniq-w
参数为 49,因为这是 nomeqref 中差异之前最短命名法的宽度\nomenclatureentry{a@[{}]\begingroup \nomeqref {
,并且可以处理命名法中最多 30 个字符。
答案4
这是一个手动的、不太优雅的后期编辑解决方法test.nls
在 kile/kate 编辑器中用以下正则表达式替换整个文本:
Find: (.*\[\{)(.*)\}\].*\n.*\n.*\[\{\2\}\]
Replace: \1\2\}\]