为什么在文档类中加载其他语言时命名文本不是英语?

为什么在文档类中加载其他语言时命名文本不是英语?

我在命名方面遇到了麻烦。这是一个简单的例子:

\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

  1. nomencl使用时\ProcessOptions不带星号。这意味着选项按声明顺序处理,而不是按使用顺序处理。选项italian在选项之后声明english,因此italian最后执行。

  2. 即使nomencl会被修复并且会\ProcessOptions*与星号一起使用,你在这里也运气不佳,因为 LaTeX 处理其选项的方式。如果使用某个选项,则其代码仅执行一次。这允许\newcommand在选项代码中不必担心用户可能会调用该选项两次。全局选项将首先处理,并将nomencl忽略本地选项english,因为它已经将其视为全局选项。

  3. 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}%

相关内容