我在命名方面遇到了麻烦。这是一个简单的例子:
\documentclass[english,italian]{article}
\usepackage[english,refpage]{nomencl}
\makenomenclature
\begin{document}
text
\nomenclature{Item}{Any kind of item}
\printnomenclature{}
\end{document}
我的文档是用英语写的,但其中一部分也有意大利语翻译,因此我加载了两种语言。但是这样做后,命名法会得到意大利语文本:
你可能已经猜到了象征物方法符号列表(或者命名法) 和第 1 页方法 第 1 页。如果我只加载英文,它们就是英文的。
我可以重新定义命令来打印这些文本:
\renewcommand*{\nomname}{Nomenclature}
\renewcommand*{\pagedeclaration}[1]{, page~#1}
但我很好奇为什么它们一开始就显示为意大利语。也许我加载语言的方式不对(实际上我是通过从 LyX 导出来获取此源的,然后将其精简到最小,所以这可能是 LyX 的错误)。
答案1
包
nomencl
使用时\ProcessOptions
不带星号。这意味着选项按声明顺序处理,而不是按使用顺序处理。选项italian
在选项之后声明english
,因此italian
最后执行。即使
nomencl
会被修复并且会\ProcessOptions*
与星号一起使用,你在这里也运气不佳,因为 LaTeX 处理其选项的方式。如果使用某个选项,则其代码仅执行一次。这允许\newcommand
在选项代码中不必担心用户可能会调用该选项两次。全局选项将首先处理,并将nomencl
忽略本地选项english
,因为它已经将其视为全局选项。包
babel
不会有帮助,因为包nomencl
不支持它,并且不使用babel
语言相关字符串的接口,例如% nomencl: \addto\captionsenglish{\def\nomname{Nomenclature}} \addto\captionsitalian{\def\nomname{Elenco dei simboli}} % document: \selectlanguage{english} \printnomenclature
一个解决方案确实是明确定义名称宏。包nomencl
在 option 的代码中定义了这些english
:
\def\eqdeclaration#1{, see equation\nobreakspace(#1)}%
\def\pagedeclaration#1{, page\nobreakspace#1
\def\nomname{Nomenclature}%