错误: \@index 的使用与其定义不符

错误: \@index 的使用与其定义不符

首先,让我向你展示一些有用的方法。它创建了从索引术语到索引中相应条目的链接,反之亦然。

\newcommand{\myname}[2]{#1\renewcommand{\@currentlabel}{#2}}  % #1 is index entry; #2 is entry in the text

\begin{document}
\ref{314}\index{\myname{decision tree}{decision trees}\label{314}}
\end{document}

现在我想自动执行此操作并编写一个名为的宏Index。我想到了这个:

\newcommand{\myname}[2]{#1\renewcommand{\@currentlabel}{#2}}  % #1 is index entry; #2 is entry in the text
\newcommand{\Index}[2]{\index{\myname{#1}{#2}\label{#1}}}

\begin{document}
\Index{decision tree}{decision trees}
\end{document}

如果我不在Index主程序部分调用该函数,则不会出现错误。但是当我像上面的例子那样调用它时,我得到了这个错误:

! Use of \@index doesn't match its definition.
\new@ifnextchar ...served@d = #1\def \reserved@a {
                                                  #2}\def \reserved@b {#3}\f...

我对宏几乎没有经验。我知道如果我到处使用失败的Index函数,然后通过 Python 脚本运行我的 Latex 文档,该脚本会Index按应有的方式扩展宏,然后编译生成的扩展 Latex 源,它就会工作。所以我的宏没有按我认为应该的方式扩展。我想知道我的代码出了什么问题。

更新:工作示例

以下是一些有用的东西:

\documentclass[10pt]{article}
\usepackage{imakeidx}
\makeindex
\usepackage[nottoc]{tocbibind}
\usepackage[colorlinks = true, 
                   linkcolor = red]{hyperref}
\makeatletter
\newcommand{\myname}[2]{#1\renewcommand{\@currentlabel}{#2}}  
\newcommand{\Index}[2]{\index{\myname{#1}{#2}\label{#1}}}
\makeatother

\begin{document}
The technique presented here, called \ref{bvc}\index{\myname{decision tree!boosted tree}{boosted trees}\label{bvc}}, is used for ...
%The technique presented here, called \Index{decision tree!boosted tree}{boosted trees}, is used for ...
\printindex
\end{document}

现在,如果我用注释掉的行(我的最终目标)替换文档主体中的行,就会出现编译错误。我怀疑隐式嵌套的\newcommand\renewcommand问题的根源。

以下是有效版本(我上面发布的版本)的输出。第 1 页:

在此处输入图片描述

然后在第 2 页(索引页):

在此处输入图片描述

我尝试将索引条目视为方程式,以便于引用。但方程式的链接是一个计数器。我想避免这种情况,并用目标关键字覆盖计数器。所以这相当于重新标记。

答案1

我不确定指向索引有什么用。无论如何……

\documentclass{article}
\usepackage{makeidx}
\usepackage{hyperref}

\makeindex

\newcounter{indexcount}
\NewDocumentCommand{\Index}{mm}{%
  % #1 is index entry; #2 is entry in the text
  \refstepcounter{indexcount}%
  \index{#1@#1\indexlabel{\theindexcount}}%
  \hyperref[index\theindexcount]{#2}%
}
\NewDocumentCommand{\indexlabel}{m}{\label{index#1}}

\begin{document}

Some text

\Index{decision tree}{decision trees}

\printindex

\end{document}

相关内容