首先,让我向你展示一些有用的方法。它创建了从索引术语到索引中相应条目的链接,反之亦然。
\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}