我正在尝试使用 makeindex 为我的论文创建一个符号索引,但它的效果并不如我所愿。
确实,我在工作中使用了很多数学符号(这意味着很多宏),我希望它们能够页码。
不幸的是,它们是按照“字母顺序”出现的,我还没有找到一种按页码快速对它们进行排序的方法。
以下是简短的 MWE:
\documentclass[a4paper, one side, 11pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsmath, amsfonts, amssymb, amsthm}
\usepackage{imakeidx}
\makeindex[title = Table des symboles, columns = 1, intoc]
\usepackage[colorlinks=true]{hyperref}
\begin{document}
\section{More blabla about $\epsilon$}
Blabla $\epsilon$\index{$\epsilon$}
\newpage
\section{More blabla about $\omega$}
Blabla $\omega$\index{$\omega$}
\newpage
\section{More blabla about $\beta$}
Blabla $\beta$\index{$\beta$}
\printindex
\end{document}
结果是:
符号表
β, 3
ε, 1
α, 2
而我想要的是:
符号表
ε, 1
α, 2
β, 3
有人知道如何解决我的问题吗?
任何帮助都将非常感激。
答案1
您可以使用这样的排序列表来完成此操作:
\documentclass[a4paper, one side, 11pt]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amsmath, amsfonts, amssymb, amsthm}
\usepackage{imakeidx}
\makeindex[title = Table des symboles, columns = 1, intoc]
\usepackage[colorlinks=true]{hyperref}
\usepackage{datatool}
\usepackage{tikz}
\newcounter{myitems}
\let\oldindex\index
\renewcommand{\index}[1]{
\stepcounter{myitems}
\xdef\myitemPage{\thepage}
\xdef\myitem{#1}
\global\expandafter\let\csname ItemPage\themyitems\endcsname\myitemPage
\global\expandafter\let\csname Item\themyitems\endcsname\myitem
\oldindex{#1}
}
\newcommand{\sortitem}[1]{%
\DTLnewrow{list}%
\dtlexpandnewvalue
\DTLnewdbentry{list}{description}{\csname ItemPage#1\endcsname}%
\DTLnewdbentry{list}{item}{\csname Item#1\endcsname}%
}
\newenvironment{sortedlist}{%
\DTLifdbexists{list}{\DTLcleardb{list}}{\DTLnewdb{list}}% Create new/discard old list
\pagebreak
\chapter*{Table des symboles}
\addcontentsline{toc}{chapter}{Table des symboles}
}{%
\DTLsort*{description}{list}% Sort list
\DTLforeach*{list}{\theDesc=description, \theItem=item}{%%
\theItem , \hyperlink{page.\theDesc}{\theDesc}%\theDesc
\\ }% Print each item
}
\begin{document}
\section{More blabla about $\epsilon$}
Blabla $\epsilon$\index{$\epsilon$}
\newpage
\section{More blabla about $\omega$}
Blabla $\omega$\index{$\omega$}
\newpage
\section{More blabla about $\beta$}
Blabla $\beta$\index{$\beta$}
\begin{sortedlist}
\foreach \i in {1,...,\themyitems}{\sortitem{\i}}
\end{sortedlist}
\printindex %Remove this
\end{document}
输出:
我已经使用了datatool
包(用于列表)和不必要的 tikz(用于排序循环 - 但如果您愿意,可以在不使用 tikz 的情况下更改它-)。
另外,我还保留了原始索引列表,看看它是相同的,但尚未排序。
我已经使用了我的答案:按字母顺序对扩展(newcommand/def)列表元素和条件格式进行迭代排序