命名法包的問題:頁碼吞噬

命名法包的問題:頁碼吞噬

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

總長DRmakeindex:這不是錯誤,而是需要有效頁碼的結果,因為它是為建立索引而設計的。


諸如nomenclglossaries等)之類的包必須對需要出現在術語/符號/術語列表中的資訊進行排序和整理。 TeX 實際上並不是為這種資料處理而設計的。 (該glossaries套件有一個選項可以執行此操作,但它受到嚴重的限制,例如建置時間長和排序脆弱。)這意味著需要外部工具。包作者有兩個選擇:

  1. 使用現有工具。
  2. 建立一個新工具。

第一個選項最簡單,被 所採用nomencl。 TeX 發行版中有兩個主要工具專為此類操作而設計:makeindexxindy。但是,這些工具是專門為需要頁碼(位置)的索引而設計的。兩者中,xindy更靈活,但它仍然需要每個條目的有效位置或交叉引用,而makeindex始終需要位置,並且它僅識別特定樣式的位置。 (透過丟棄位置來處理交叉引用。)

對於帶有附帶說明的術語/術語/符號列表,通常不會顯示頁碼(或僅在索引中列出),但由於使用了索引工具,因此需要有效的頁碼即使由索引應用程式形成的位置列表可能會被LaTeX 忽略,工具也可以接受資料。

這是使用索引工具來處理類似索引但不完全相同的東西的一個根本缺點。使用現有索引工具(尤其是makeindex已經存在很長時間的 )的優點是大多數 TeX 發行版都應該安裝該應用程式並準備使用。就 而言makeindex,它也已經存在了足夠長的時間,可以對程式碼進行檢查,並且現在被認為足夠安全,可以將其添加到TeX 的受信任應用程式列表中,這意味著它可以在受限制的shell 轉義中運行。

在 的情況下\pagenumbering{@gobble},位置(透過展開 獲得\thepage)變成空字串,這不是有效位置,因此被 拒絕makeindex

第二個選項(創建一個新工具)更複雜,特別是對於可以編寫 LaTeX 程式碼但不熟悉程式語言的套件作者來說。新應用程式需要時間才能進入 TeX 發行版:

  • 如果它們是用編譯語言(例如 C)編寫的,則它們只能在編譯它們的作業系統上運行。 (例如,如果我用C 語言編寫一個程序,它只能在Linux 上運行,而不能在Windows 等上運行。)如果您想在另一個作業系統上運行它,您需要移植程式碼並針對您的平台進行編譯。
  • 如果它們是用解釋性語言(例如 Perl)或編譯成需要運行時環境(例如 Java)的程式碼的語言編寫的,那麼它們將在安裝了解釋器或運行時環境的任何作業系統上運行。

在任一情況下,新應用程式的分發僅限於可以執行編譯的應用程式或可以執行運行應用程式所需的解釋器/運行時環境的系統。這通常不包括舊作業系統。

glossaries-extrapackage 結合了兩種方法:與基礎套件一樣,它可以與或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

結果:

文件影像

相關內容