我想要生成一个索引,该索引条目仅指向自身,而不是文本中的任何其他位置。也就是说,我想要一个命令\phoneyindex{Smith, John}
,当它被放入序言中时,它会生成一个指向 John Smith 的索引条目,该条目仅指向索引中出现该条目的页面。
有任何想法吗?
答案1
这个问题很 Knuthian!索引条目可以写成以下形式
\index{John Smith|cmd}
其中\cmd
是应用于页码值的命令。第一种方法是使用
\newcommand{\mypageout}[1]{\thepage}
并发布
\index{John Smith|mypageout}
文档中的某个地方,因此打印的页码x
被替换为\mypageout{x}
,这只是的当前输出\thepage
。但是,正如您所指出的,由于页面构建的工作方式,页面边界处的页码\thepage
通常会偏离。或者,您可以按如下方式使用/机制:定义一个宏,丢弃其第二个参数并从第一个参数生成标签,并将其与命令部分的第一个参数一起使用1
\label
\pageref
\mypageout
\index
\newcommand{\phoneyindex}[2]{\index{#1|mypageout{#2}}}
\newcommand{\mypageout}[2]{\label{#1}\pageref{#1}}
然后使用 调用此方法\phoneyindex{John Smith}{phoneyj}
,其中 是phoneyj
您要使用的标签。现在,这对于页面边界后的条目来说是正确的。
第 5 页
第 6 页
\documentclass{article}
\usepackage{lipsum}
\usepackage{makeidx}
\makeindex
\newcommand{\phoneyindex}[2]{\index{#1|mypageout{#2}}}
\newcommand{\mypageout}[2]{\label{#1}\pageref{#1}}
\begin{document}
\phoneyindex{Allan Smith}{phoneya}
\phoneyindex{John Smith}{phoneyj}
\lipsum[1-20]
\index{Start}Start.
\lipsum[21]
\index{F}\index{G}\index{H}\index{I}\index{J}\index{B}\index{L}\index{Ba}\index{Ca}\index{Da}\index{Ea}\index{Fa}\index{Ga}\index{Ha}\index{Ia}\index{Ja}\index{Ba}\index{La}\index{Baa}\index{Caa}\index{Daa}\index{Eaa}\index{Faa}\index{Gaa}\index{Haa}\index{Iaa}\index{Jaa}\index{Baa}\index{Laa}\index{Bab}\index{Cab}\index{Dab}\index{Eab}\index{Fab}\index{Gab}\index{Hab}\index{Iab}\index{Jab}\index{Bab}\index{Lab}\index{Bb}\index{Cb}\index{Db}\index{Eb}\index{Fb}\index{Gb}\index{Hb}\index{Ib}\index{Jb}\index{Bb}\index{Lb}\index{Bc}\index{Cc}\index{Dc}\index{Ec}\index{Fc}\index{Gc}\index{Hc}\index{Ic}\index{Jc}\index{Bc}\index{Lc}\index{Bd}\index{Cd}\index{Dd}\index{Ed}\index{Fd}\index{Gd}\index{Hd}\index{Id}\index{Jd}\index{Bd}\index{Ld}\index{Be}\index{Ce}\index{De}\index{Ee}\index{Fe}\index{Ge}\index{He}\index{Ie}\index{Je}\index{Be}\index{Le}\index{Bf}\index{Cf}\index{Df}\index{Ef}\index{Ff}\index{Gf}\index{Hf}\index{If}\index{Jf}\index{Bf}\index{Lf}
\printindex
\end{document}