命名法包存在问题:pagenumber 吞噬

命名法包存在问题:pagenumber 吞噬

nomencl使用 时,我发现了软件包中的以下错误\pagenumbering{gobble}。以下 MWE 示例运行良好,但当\pagenumbering{gobble}取消注释时,我的命名法项目被拒绝。

平均能量损失 document.tex

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{nomencl}
\usepackage{lipsum}
\makenomenclature
\begin{document}
    %\pagenumbering{gobble}
    \nomenclature{$c$}{Speed of light in a vacuum inertial frame}
    \nomenclature{$h$}{Planck constant}
    \lipsum[1]
    \printnomenclature
\end{document}

运行命令:

pdflatex document.tex
makeindex -s nomencl.ist -o document.nls document.nlo
pdflatex document.tex

我为什么使用 \pagenumbering{gobble}

由于这个问题和答案

解决方法

我发现以下方法可以解决使用\thispagestyle{empty}而不是 的问题\pagenumbering{gobble},尽管这并不能解释为什么首先会出现问题。

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{nomencl}
\usepackage{lipsum}
\makenomenclature
\begin{document}
    \lipsum[1]
    \thispagestyle{empty}
    \clearpage
    \setcounter{section}{0}
    \pagenumbering{arabic}
    \nomenclature{$c$}{Speed of light in a vacuum inertial frame}
    \nomenclature{$h$}{Planck constant}
    \lipsum[1]
    \printnomenclature
\end{document}

答案1

结论makeindex:这不是一个错误,而是需要有效页码的结果,因为它是为创建索引而设计的。


诸如nomencl(和glossaries等) 之类的软件包必须对需要出现在命名法/符号/术语列表中的信息进行排序和整理。TeX 确实不是为这种数据处理而设计的。(该glossaries软件包有一个选项可以执行此操作,但它受到严重限制,例如构建时间长和排序不稳定。)这意味着需要一个外部工具。软件包作者有两个选择:

  1. 使用现有工具。
  2. 创建新工具。

第一种选择最简单,由 采用nomencl。TeX 发行版中有两个主要工具可用于此类操作:makeindexxindy。但是,这些工具专门用于需要页码(位置)的索引。两者中,xindy更灵活,但它仍然需要每个条目的有效位置或交叉引用,而makeindexalways 需要位置,并且它只识别特定样式的位置。(通过丢弃位置来处理交叉引用。)

对于附有说明的术语/术语/符号列表,页码通常不显示(或仅在索引中列出),但由于使用了索引工具,因此即使索引应用程序形成的位置列表可能会被 LaTeX 忽略,工具也需要有效的页码才能接受数据。

这是使用索引工具的一个根本缺点,因为它类似于索引,但又不完全相同。使用现有索引工具(尤其是makeindex已经存在很长时间的)的优势在于,大多数 TeX 发行版都应该已安装并准备好使用该应用程序。就 而言makeindex,它已经存在了很长时间,代码已经过检查,现在被认为足够安全,可以将其添加到 TeX 的受信任应用程序列表中,这意味着它可以在受限的 shell 转义中运行。

在 的情况下\pagenumbering{@gobble},位置(通过扩展 获得\thepage)变为空字符串,这不是一个有效的位置,因此被 拒绝makeindex

第二种选择(创建新工具)更为复杂,尤其是对于那些可以编写 LaTeX 代码但不熟悉编程语言的软件包作者来说。新应用程序需要一些时间才能进入 TeX 发行版:

  • 如果它们是用编译语言(如 C)编写的,则它们只能在编译它们的操作系统上运行。(例如,如果我用 C 编写程序,它将只能在 Linux 上运行,而不能在 Windows 等上运行。)如果您想在另一个操作系统上运行它,您需要移植代码并为您的平台编译它。
  • 如果它们是用解释型语言(比如 Perl)或者编译成需要运行时环境的代码的语言(比如 Java)编写的,那么它们将在安装了解释器或运行时环境的任何操作系统上运行。

不管哪种情况,新应用程序的分发都仅限于能够执行已编译应用程序或能够执行运行应用程序所需的解释器/运行时环境的系统。这通常不包括旧操作系统。

glossaries-extra软件包结合了两种方法:与基础软件包一样,它可以与或glossaries一起使用,但与基础软件包不同的是,它还可以与makeindexxindybib2gls,它是专门为该glossaries-extra包设计的,因此允许空位置(事实上,它允许任何位置,但只有在可以确定数值时才会形成范围)。

梅威瑟:

\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@symbol{speedoflight,
  name={\ensuremath{c}},
  description={Speed of light in a vacuum inertial frame}
}

@symbol{planck,
  name={\ensuremath{h}},
  description={Planck constant}
}
\end{filecontents*}

\usepackage{lipsum}
\usepackage[record]{glossaries-extra}% 'record' option required for bib2gls

\GlsXtrLoadResources[
  src={\jobname},% entries in \jobname.bib
  selection={all},% select all defined entries
  sort={none},% don't bother sorting
  save-locations=false% location lists not required
]

\begin{document}
\pagenumbering{gobble}
\lipsum[1]

\printunsrtglossary
\end{document}

文档构建(文件名为test.tex):

pdflatex test
bib2gls test
pdflatex test

结果:

文件图像

相关内容