我想为我正在写的一本书准备一个符号索引(使用类memoir
)。符号的排序方式显然存在问题。由于其中许多符号不是字母顺序的,我认为按书中出现的顺序排序是最好的主意。我浏览了手册页makeindex
,但没有找到任何选项(出于显而易见的原因,我不想做诸如 等事情\index{01@symbol}
)\index{02@symbol}
。
如果解决方案中非字母符号首先出现(作为一组),按出现顺序排序,字母符号随后出现,按字典顺序排序,则可以获得加分,例如
Symbols
=
<
(,)
A
angle
apple
arrgh
B
Banach space
banana
答案1
像这样吗?
说明
\newsymbol{cos}
为该符号 ($\cos$
) 赋予一个唯一的 id (= 的当前值symbolcounter
)。该数字存储在宏 中symbolidofcos
。\symbolindex{cos}
检查此符号是否之前出现过。如果没有,则它确实出现过\newsymbol{cos}
。然后,无论符号是新的还是旧的,它都会将信息写入索引。- 符号将根据其 ID 进行排序。由于 ID 是按顺序给出的,因此符号将按照其首次出现的顺序显示。
以下是代码
\documentclass{memoir}
\usepackage{makeidx}
\makeindex
\newcounter{symbolcounter}\setcounter{symbolcounter}{1000}
\newcommand*\newsymbol[1]{
\stepcounter{symbolcounter}
\expandafter\edef\csname symbolidof#1\endcsname{\arabic{symbolcounter}}}
\newcommand*\symbolindex[1]{
\ifcsname symbolidof#1\endcsname\else\newsymbol{#1}\fi
\index{~@(Symbols)!\csname symbolidof#1\endcsname @$\csname#1\endcsname$}}
\begin{document}
\index{Lorem}
$\sin\theta$\symbolindex{sin}
\index{ipsum}
$\cos\theta$\symbolindex{cos}
\index{dolor}
$\tan\theta$\symbolindex{tan}
\index{sit}
\clearpage
\index{amet}
$\cos\phi$\symbolindex{cos}
\index{consectetur}
$\cosh\phi$\symbolindex{cosh}
\index{adipiscing}
\printindex
\end{document}