这是我在 Stackexchange 上的第一个问题,如果我太天真,请原谅!
在我的讲义中,我在课文中插入练习。它们有一个特定的计数器,比如 \ExoCounter。我使用命令
\def\Exo#1{%
\stepcounter{ExoCounter}%
\index[exo]{\theExoCounter~#1}%
{\bf \textbf{Exercise}~\theExoCounter}~\textbf{#1}\par%
}
#1 是练习的标题,也包含在索引中,通过
\index[exo]{\theExoCounter~#1}
练习索引在主文件的开头创建:
\newindex{exo}{edx}{end}{Exercise Index}
在源文件中,当我使用命令时
\Exo{Critical exponent of the susceptibility}
blah blah blah
比如在输出文件的第 16 页,那么
\Exo{Critical exponent of the critical isotherm}
blah blah blah
在输出文件的第 17 页等处运行 make index,它会生成一个索引文件,其中包含
\item \theExoCounter ~Critical exponent of the critical isotherm, 17
\item \theExoCounter ~Critical exponent of the susceptibility, 16
即命令 \theExoCounter 被“逐字”执行,并在练习索引中提供输出
27 临界等温线的临界指数,17
27 敏感度的临界指数,16
等等,而不是
1 敏感度的临界指数,16
2 临界等温线的临界指数,17
如果我总共有 27 个练习。索引中的字母顺序而不是时间顺序是其中之一,但这不是重点。我首先担心的是 \index 命令中的 \theExoCounter 命令仅在编译结束时解释,此时索引已创建,并且计数器已经有了最终值,这里是 27。
当在宏 \Exo 中调用命令 \index[exo]{\theExoCounter~#1} 时,我想用其当前的数值。
答案1
您可以使用imakeidx
package 而不是index
package。并且您可以使用另一个参数来定义此索引属于哪个字母表。我添加了一个样式文件 (exostyle.ist) 来自定义索引外观。
\documentclass{article}
\usepackage{lipsum}
\usepackage{imakeidx}
\newcounter{ExoCounter}
\def\Exo#1#2{%
\stepcounter{ExoCounter}%
\index[exo]{#1@\theExoCounter~#2}%
{\bfseries Exercise~\theExoCounter~#2}%
}
\makeindex[name=exo,columns=1, options= -s exostyle.ist, title=The index of Exercises]
\begin{filecontents}{exostyle.ist}
headings_flag 1
heading_prefix "\n\\centering\\large\\sffamily\\bfseries%
\\noindent\\textbf{"heading_suffix "}\\par\\vspace{0.5cm}\\nopagebreak"
item_0 "\n \\item "
delim_0 " \\hfill "
delim_1 " \\hfill "
delim_2 " \\hfill "
\end{filecontents}
\begin{document}
\lipsum[2]\Exo{s}{susceptibility}
\clearpage
\lipsum[1]\Exo{c}{critical isotherm}
\clearpage
\printindex[exo]
\end{document}