makeindex - 使用许多数学符号按页码排序

makeindex - 使用许多数学符号按页码排序

我正在尝试使用 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)列表元素和条件格式进行迭代排序

相关内容