跳到內容

LaTeX/索引

來自華夏公益教科書

LaTeX

入門
  1. 簡介
  2. 安裝
  3. 安裝額外的包
  4. 基礎
  5. 如何獲得幫助

常見元素

  1. 文件結構
  2. 文字格式
  3. 段落格式
  4. 顏色
  5. 字型
  6. 列表結構
  7. 特殊字元
  8. 國際化
  9. 旋轉
  10. 表格
  11. 標題建立
  12. 頁面佈局
  13. 自定義頁面頁首和頁尾‎
  14. 匯入圖形
  15. 浮動體、圖形和標題
  16. 腳註和邊注
  17. 超連結
  18. 標籤和交叉引用
  19. 首字母

機制

  1. 錯誤和警告
  2. 長度
  3. 計數器
  4. 規則和支撐

技術文字

  1. 數學
  2. 高階數學
  3. 定理
  4. 化學圖形
  5. 演算法
  6. 原始碼列表
  7. 語言學

特殊頁面

  1. 索引
  2. 詞彙表
  3. 參考文獻管理
  4. 更多參考文獻

特殊文件

  1. 科學報告(學士報告、碩士論文、博士論文)
  2. 信件
  3. 簡報
  4. 教師角
  5. 簡歷
  6. 學術期刊(MLA、APA 等)

建立圖形

  1. 介紹過程圖形
  2. MetaPost
  3. 圖片
  4. PGF/TikZ
  5. PSTricks
  6. Xy-pic
  7. 建立 3D 圖形

程式設計

  1. Plain TeX
  2. 建立包
  3. 建立包文件
  4. 主題

其他

  1. 模組化文件
  2. 協作編寫 LaTeX 文件
  3. 匯出到其他格式

幫助和建議

  1. 常見問題解答
  2. 技巧和竅門

附錄

  1. 作者
  2. 連結
  3. 包參考
  4. 示例 LaTeX 文件
  5. 索引
  6. 命令詞彙表

編輯此框編輯 TOC

索引在印刷書籍中尤為有用,它是一個按字母順序排列的單詞和表示式的列表,以及它們在書中出現的頁面。LaTeX 使用其包 makeidx 及其支援程式 makeindex(在某些系統上稱為 makeidx)支援建立索引。

使用makeidx

[編輯 | 編輯原始碼]

要啟用 LaTeX 的索引功能,必須在 前言 中使用以下命令載入 makeidx 包:

\usepackage{makeidx}

並將特殊的索引命令透過以下命令啟用:

\makeindex

此命令應放在前言中,因為它告訴 LaTeX 建立索引所需的必要檔案。要告訴 LaTeX 要索引的內容,請使用

\index{key}

其中 key 是索引條目,不會出現在最終佈局中。您可以在要將文字引用到索引的文字位置輸入索引命令,通常是在導致 key 的原因附近。例如,文字

To solve various problems in physics, it can be advantageous
to express any arbitrary piecewise-smooth function as a
Fourier Series composed of multiples of sine and cosine functions.

可以改寫為

To solve various problems in physics, it can be advantageous
to express any arbitrary piecewise-smooth function as a Fourier Series
\index{Fourier Series}
composed of multiples of sine and cosine functions.

以建立一個名為“傅立葉級數”的條目,並引用目標頁面。在不同頁面上對使用相同 key\index 的多次使用會將這些目標頁面新增到相同的索引條目中。


要顯示文件中的索引,只需使用以下命令

\printindex

通常將其放在文件末尾。預設索引格式為兩列。


與 LaTeX 捆綁在一起的 showidx 包會在文字的右側邊距處打印出所有索引條目。這對於校對文件並驗證索引非常有用。

編譯索引

[編輯 | 編輯原始碼]

當用 LaTeX 處理輸入檔案時,每個 \index 命令會將一個適當的索引條目及其當前頁碼寫入一個特殊檔案。該檔案與 LaTeX 輸入檔案具有相同的名稱,但副檔名不同 (.idx)。然後可以使用 makeindex 程式處理此 .idx 檔案。在命令列中鍵入

makeindex filename

請注意,filename 不帶副檔名:程式將查詢 filename.idx 並使用它。您可以選擇將 filename.idx 直接作為引數傳遞給程式。makeindex 程式會生成一個排序的索引,其基本檔名相同,但副檔名不同 (.ind)。如果現在再次處理 LaTeX 輸入檔案,則此排序的索引將在 LaTeX 找到 \printindex 的位置被包含到文件中。

latex 使用預設選項建立的索引可能看起來不像您期望的那樣美觀或合適。要改善索引的外觀,makeindex 附帶了一組樣式檔案,通常位於 tex 目錄結構的某個位置,通常位於 makeindex 子目錄之下。要告訴makeindex使用特定的樣式檔案,使用以下命令列選項執行它:

 makeindex -s [style file] filename

如果您使用 GUI 編譯 latex 和索引檔案,您可能需要在選項中設定此選項。以下是一些典型工具的配置提示

WinEdt 中的 MakeIndex 設定

[編輯 | 編輯原始碼]

假設您要新增一個名為 simpleidx.ist 的索引樣式檔案

  • Texify/PDFTexify:選項→執行模式→附件→PDFTeXify,新增到開關:--mkidx-option="-s simpleidx.ist"
  • 僅 MakeIndex:選項→執行模式→附件→MakeIndex,新增到命令列:-s simpleidx.ist

複雜索引

[編輯 | 編輯原始碼]

以下是一些 \index 條目的示例

示例 索引條目 註釋
\index{hello} hello, 1 普通條目
\index{hello!Peter}   Peter, 3 'hello' 下的子條目
\index{hello!Sam@\textsl{Sam}}   Sam, 2 格式化和排序的子條目
\index{Sam@\textsl{Sam}} Sam, 2 格式化條目
\index{Lin@\textbf{Lin}} Lin, 7 與上面相同
\index{Jenny|textbf} Jenny, 3 格式化的頁碼
\index{Joe|textit} Joe, 5 與上面相同
\index{ecole@\'ecole} école, 4 處理重音符號
\index{Peter|see {hello}} Peter, 參見 hello 交叉引用
\index{Greeting|see {hello, Peter}} Greeting, 參見 hello, Peter 交叉引用子條目
\index{Jen|seealso{Jenny}} Jen, 另請參見 Jenny 與上面相同

子條目

[編輯 | 編輯原始碼]

如果某個條目有小節,可以使用 ! 將其分隔開。例如,

\index{encodings!input!cp850}

將建立一個索引條目,其中 “cp850” 分類在 “input” 下(“input” 本身分類在 “encodings” 下)。在 makeidx 術語中,這些被稱為子子條目和子條目。

控制排序

[編輯 | 編輯原始碼]

為了確定索引鍵的排序方式,請使用 @ 作為分隔符,在鍵之前放置一個要排序的值。如果存在任何格式或數學模式,這將很有用,因此一個示例可能是

\index{F@$\vec{F}$}

以便索引中的條目顯示為“”,但排序為“F”。

為了與上述子條目功能結合使用,您應該對適當的元件進行樣式設定。

\index{bug reports!In re code@\emph{In re} code}

\index{LaTeX@\LaTeX!Typesetting engine}

更改頁碼樣式

[編輯 | 編輯原始碼]

要更改頁碼的格式,請在頁碼後面附加一個|和一個執行格式設定的命令名稱。此命令應只接受一個引數。

例如,如果在一本書的第 3 頁上你介紹了牛頭犬,幷包含了以下命令

\index{bulldog}

並且在同一本書的第 10 頁上,您希望用粗體頁碼顯示牛頭犬的主要部分,請使用

\index{bulldog|textbf}

這將在索引中顯示為牛頭犬,3,10

如果您使用texindy代替makeindex,則分類條目也將被排序,這樣所有加粗的條目預設情況下都將排在所有其他條目之前。

要執行多頁索引,請在 \index 命令的末尾新增一個|(|),如下所示

\index{Quantum Mechanics!History|(}
In 1901, Max Planck released his theory of radiation dependent on quantized energy.
While this explained the ultraviolet catastrophe in the spectrum of 
blackbody radiation, this had far larger consequences as the beginnings of quantum mechanics.
...
\index{Quantum Mechanics!History|)}

子條目“歷史”的索引條目將是兩個 \index 命令之間的頁碼範圍。

使用特殊字元

[編輯 | 編輯原始碼]

為了在索引中放置帶 !@| 的值,這些值通常是跳脫字元,必須在 \index 命令中使用雙引號 (") 對這些字元進行引用,並且只能透過引用來放置 " 在索引中(即,“ 的鍵將是 \index{""})。

此規則不適用於 \", 因此要將字母 ä 放入索引,您仍然可以使用 \index{a@\"{a}}

縮略語列表

[編輯 | 編輯原始碼]

您可以使用 nomencl [1] 包建立縮略語列表。您可能還希望使用 術語表 章中介紹的 glossaries 包。另一個選擇是 acronym [2] 包。

要啟用 LaTeX 的命名法功能,必須在序言中使用以下命令載入 nomencl

\usepackage[⟨options ⟩]{nomencl}
\makenomenclature

對要包含在命名法列表中的每個符號執行 \nomenclature[⟨prefix⟩]{⟨symbol⟩}{⟨description⟩} 命令。此命令的最佳位置是在您首次介紹該符號後立即執行。將 \printnomenclature 放置在您希望顯示命名法列表的位置。

執行 LaTeX 2 次,然後

makeindex filename.nlo  -s nomencl.ist -o filename.nls

再次執行 LaTeX。

要將縮略語列表新增到目錄中,在宣告 nomencl 包時可以使用 intoc 選項,即

\usepackage[intoc]{nomencl}

而不是使用 將索引新增到目錄 部分中的程式碼。

可以使用以下命令更改列表的標題

\renewcommand{\nomname}{List of Abbreviations}

多個索引

[編輯 | 編輯原始碼]

如果您需要多個索引,可以使用多種選項。

imakeidx 包是 TeX Live 和 MiKTeX 的一部分。

它是 makeidx 的擴充套件,允許建立除預設索引之外的其他索引或代替預設索引。它具有許多選項和命令來操縱生成的輸出。

索引透過多次呼叫 \makeindex 命令來定義,每個命令都可以有自己的選項。特定索引的條目透過在 \index 命令中新增索引名稱作為可選引數來給出。

\usepackage{imakeidx}
...
\makeindex[title=Concept index] % Create the default index
\makeindex[name=persons,title=Index of names,columns=3] % Create an index named 'persons'
...
\begin{document}
...
...relativity\index{relativity}... % Add an item to the default index
...
... Einstein\index[persons]{Einstein, Albert}...  % Add an item to the 'persons' index
...
And this is the end of the story.

\printindex % Ouput the default index here

\indexprologue{\small In this index you’ll find only famous people’s names}
\printindex[persons] % Output the 'persons' index
\end{document}

兩個索引的條目應按上述方式鍵入。此示例將生成兩個索引。預設索引將被賦予標題“概念索引”,並以預設的兩列格式排版。序言文字將僅在“人員”索引中列印,該索引將具有標題“姓名索引”,並以三列格式排版。

每個索引的其他選項允許您確定索引標題是否以及如何出現在目錄中,使用哪個樣式檔案,設定頁首等等。

無需從命令列顯式呼叫 makeindex 程式。與目錄生成類似,索引將透過簡單地執行 LaTeX 來生成。可以使用選項來使用 xindy 程式代替 makeindex

請注意,imakeidx 可以直接處理為 MakeIndex 編寫的任何 TeX 原始檔。如果您有一個現有的原始檔,並且想要拆分現有的索引或新增額外的索引,只需在 \usepackage{...} 命令中將 makeidx 更改為 imakeidx,輸出將相同。然後,您可以新增命令和選項來建立多個索引。

還提供 multind [3]

此包提供了與 makeidx 相同的命令,但現在您還必須將名稱作為第一個引數傳遞給每個命令。

\usepackage{multind}
\makeindex{books}
\makeindex{authors}
...
\index{books}{A book to index}
\index{authors}{Put this author in the index}
...
\printindex{books}{The Books index}
\printindex{authors}{The Authors index}

將索引新增到目錄

[編輯 | 編輯原始碼]

預設情況下,索引不會顯示在目錄中,因此您必須手動新增它。

要將索引新增為一章,請使用以下命令

\clearpage
\addcontentsline{toc}{chapter}{Index}
\printindex

如果您使用 book 類,您可能希望透過使用 \cleardoublepage 將其從奇數頁開始。

國際索引

[編輯 | 編輯原始碼]

如果您想對包含國際字元(如 ő、ą、ó、ç 等)的條目進行排序,您可能會發現排序“不完全正確”。在大多數情況下,字元被視為特殊字元,並最終與 @、¶ 或 µ 放在同一個組中。在大多數使用拉丁字母的語言中,這不是正確的。

以下部分描述了 xindy,但請注意,此程式目前已過時,並且存在新的替代方案,如 upmendexxindex

生成索引

[編輯 | 編輯原始碼]

不幸的是,當前版本的 xindyhyperref 不相容。當您使用 textbftextit 修飾符時,texindy 將列印錯誤訊息:unknown cross-reference-class `hyperindexformat'! (ignored) 並且不會將這些頁面新增到索引中。此錯誤的解決方法在 討論頁面 上有所描述。

要生成國際索引檔案,您必須使用 texindy 而不是 makeindex

xindy 是一個比 makeindex 系統更具可擴充套件性和魯棒性的索引系統。

例如,您不需要編寫

\index{Lin@\textbf{Lin}}

來獲取Lin條目後LAN並且之前LZA,相反,只需編寫

\index{\textbf{Lin}}

但更重要的是,它可以正確地對許多語言的索引檔案進行排序,而不僅僅是英語。

不幸的是,生成可以使用LaTeX使用 xindy 的索引比使用 makeindex 稍微複雜一些。

首先,我們需要知道.tex專案檔案儲存的編碼方式。在大多數情況下,它將是 UTF-8 或 ISO-8859-1,但如果您住在波蘭等國家,它可能是 ISO-8859-2 或 CP-1250。檢查 inputenc 包的引數。

首先,我們需要知道文件中主要使用的語言是什麼。xindy可以原生排序阿爾巴尼亞語、白俄羅斯語、保加利亞語、克羅埃西亞語、捷克語、丹麥語、荷蘭語、英語、世界語、愛沙尼亞語、芬蘭語、法語、喬治亞語、德語、希臘語、吉普賽語、豪薩語、希伯來語、匈牙利語、冰島語、義大利語、克林貢語、庫爾德語、拉丁語、拉脫維亞語、立陶宛語、馬其頓語、蒙古語、挪威語、波蘭語、葡萄牙語、羅馬尼亞語、俄語、塞爾維亞語斯洛伐克語、斯洛維尼亞語、索布語、西班牙語、瑞典語、土耳其語、烏克蘭語和越南語的索引。

我不知道其他語言是否有類似的問題,但對於波蘭語來說,如果你的 .tex 檔案使用 UTF-8 編碼儲存,而你只使用 -L polish 引數,texindy 生成的 .ind 檔案將使用 ISO-8859-2 編碼。雖然這對於包含波蘭字母的條目沒有問題,因為 LaTeX 在內部將所有字母編碼為純 ASCII,但對於單詞開頭的帶重音字母,則會出現問題,因為它們會建立新的索引條目組。例如,如果你有一個 "średnia" 條目,你將在 ISO-8859-2 編碼的 .ind 檔案中得到一個 "Ś"。 LaTeX 不喜歡檔案的一部分使用 UTF-8 編碼,而另一部分使用 ISO-8859-2 編碼。顯而易見的解決方案(新增 -C utf8)不起作用,texindy 會停止並提示

ERROR: Could not find file "tex/inputenc/utf8.xdy"

錯誤。為了解決這個問題,你必須使用 -M 開關 載入標題的定義樣式。

-M lang/polish/utf8

最後,你需要執行以下命令:

texindy -L polish -M lang/polish/utf8 filename.idx

另一種解決此問題的方法是使用 "iconv" 將 latin2.xdy 轉換為 utf8.xdy。

 iconv -f latin2 -t utf8 latin2.xdy >utf8.xdy 

在目錄

  /usr/share/xindy/tex/inputenc 

(你必須擁有 root 許可權)


在 kile 中使用 xindy

[編輯 | 編輯原始碼]

要在 kile 中使用 texindy 而不是 makeindex,你必須重新定義設定 → 配置 Kile... → 工具 → 構建中的 MakeIndex 工具,或者定義新的工具並重新定義其他工具以使用它(例如,將其新增到快速構建中)。

xindy 定義應該類似於以下內容:

General:
 Command: texindy
 Options: -L polish -M lang/polish/utf8 -I latex '%S.idx'
Advanced:
 Type: Run Outside of Kile
 Class: Compile
 Source extension: idx
 Target extension: ind
 Target file: <empty>
 Relative dir: <empty>
 State: Editor
Menu:
 Add tool to Build menu: Compile
 Icon: the one you like


前一節:語言學 索引 下一節:詞彙表
華夏公益教科書