了解输出的值\thesubpara

了解输出的值\thesubpara

对于给定的作品,我使用计数器在整个文档中进行连续的数字旋转。我需要索引条目引用段落编号而不是页面编号。这与此主题,除了我没有使用memoirbook。不幸的是,从一个文档类切换到另一个文档类时,提出的解决方案不再起作用。

我一直在关注另一个线程。这个解决方案看起来确实不错,只不过它显示的是计数器的标题而不是计数器的数字。

以下是代码:

\begin{filecontents*}{raphink.ist}
delim_0 ""
\end{filecontents*}
\documentclass[a4paper]{report}
\usepackage{etoolbox}
\newcounter{subpara}
\newcommand\numsubpara[1]{%
  \stepcounter{subpara}%
  \expandafter\gdef\csname cursec\thesubpara\endcsname{#1}%
  \thesubpara. \textbf{#1}}

\usepackage{imakeidx}
\makeindex[options=-s raphink]

\makeatletter
\let\@Index\@index
\patchcmd{\@Index}{\@wrindex}{\@Wrindex}{}{}
\let\@Wrindex\@wrindex
\patchcmd{\@Wrindex}{\thepage}{\thesubpara}{}{}
\let\xIndex\index
\patchcmd{\xIndex}{\@index}{\@Index}{}{}
\patchcmd{\xIndex}{\@index}{\@Index}{}{}
\let\protected@iwrite\protected@write
\patchcmd{\protected@iwrite}{\write}{\immediate\write}{}{}
\patchcmd{\@Wrindex}{\protected@write}{\protected@iwrite}{}{}
\makeatother

\newcommand{\Index}[1]{\xIndex{#1|transform}}
\newcommand{\transform}[1]{\forcsvlist\decodesec{#1}}
\newcommand{\decodesec}[1]{, \csname cursec#1\endcsname}

\begin{document}

\chapter{Test1}

\numsubpara{title1}

\Index{Test}

\chapter{Test2}

\numsubpara{title2}
\Index{Test}


\printindex

\end{document}

结果如下:

在此处输入图片描述

如果我理解得好的话,我就必须转换一下:

\newcommand\numsubpara[1]{%
  \stepcounter{subpara}%
  \expandafter\gdef\csname cursec\thesubpara\endcsname{#1}%
  \thesubpara. \textbf{#1}}

为了那个原因 :

\newcommand\numsubpara[1]{%
  \stepcounter{subpara}%
  \expandafter\gdef\csname cursec\thesubpara\endcsname{\thesubpara}%
  \thesubpara. \textbf{#1}}

但是当我这样做时,我得到了这个结果:

在此处输入图片描述

而不是“测试,1,2”。

有人知道如何让索引条目引用段落编号而不是页码吗?

答案1

了解输出的值\thesubpara

在您的示例中,\thesubpara始终指计数器采用的最后一个值。如果您使用 4 个索引\subpara(而不是示例中的 2 个)进行测试,则始终会得到 4 个值,这表明\thesubpara索引中的值指的是文档中变量的“最后状态”,而不是它在设置位置的值(这是您想要获得的)- 因此它不指当前示例中的页面(这似乎是您最初的想法)。

顺便一提

使用您当前的配置,您最多只能使用相同的\Index标签两次,因此只有在您之后将其切换出来时它才会起作用,例如\Index{Bla},如果您添加

\newpage bla \newpage bla 

\chapter{Test3} 
\numsubpara{title3} 
\Index{Bla} 

\chapter{Test4} 
\numsubpara{title4} 
\Index{Bla} 

在您的文档中,您可以看到,即使使用\newpages,您仍然会得到值 4,而不是当前最后一页的 6。

快速解决方案

你看过这个(问题:对索引使用不同的计数器(makeidx))还没有?它似乎提供了想要的输出。添加:

\newcounter{NewCounter}

\makeatletter
\newcommand{\Indextest}[1]{\imki@wrindexentry{MyIndex}{#1}{\theNewCounter}}
\makeatother

\makeindex[name=MyIndex]

在当前示例之前\begin{document}和之后添加(用于测试):\printindex

\stepcounter{NewCounter}\chapter{Test}\Indextest{Test}
\arabic{NewCounter}

\stepcounter{NewCounter}\chapter{Test}\Indextest{Test}
\arabic{NewCounter}

\newpage 

\stepcounter{NewCounter}\chapter{Test}\Indextest{blurb}
\arabic{NewCounter}

\stepcounter{NewCounter}\chapter{Test}\Indextest{Test}
\arabic{NewCounter}

\printindex[MyIndex]

这应该会产生所需的行为,如下所示:

结果输出

相关内容