我想在 LaTeX 的索引中插入一个计数器

我想在 LaTeX 的索引中插入一个计数器

这是我在 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

您可以使用imakeidxpackage 而不是indexpackage。并且您可以使用另一个参数来定义此索引属于哪个字母表。我添加了一个样式文件 (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}

在此处输入图片描述

相关内容