仅打印列表中第一次提及的关键字索引

仅打印列表中第一次提及的关键字索引

我正在编写一份技术报告,其中使用整合了大量代码listings

我想keywords在列表中添加使用的索引(使用index=[1][keywords]),但在索引中仅报告第一的提到该关键词的页面——因为我在文中就是在那里介绍它的。

考虑一下这个MWE:

\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{listings}
\usepackage{makeidx}
\makeindex

\lstdefinelanguage{minion}{ % define the "minion language", known for its semantic complexity
morekeywords={bello,banana} % keywords for the "minion language"
}

\lstset{language=minion, % settings for the language
    frame=single, % box arround the code
    keywordstyle=\color{YellowOrange},
    index=[1][keywords]% index the keywords
}

\begin{document}
We introduce the commands \lstinline!bello! and \lstinline!banana!
\begin{lstlisting}
say(bello)
eat(banana)
\end{lstlisting}
\newpage
\begin{lstlisting}
bello
\end{lstlisting}
\printindex
\end{document}

使用makeidx\printindex创建索引每一页其中列表中提到了给定的关键字(例如,bello在索引的第 1 页和第 2 页中报告)。

我想显示仅包含第一的其中提到任何给定关键字的页面(即,bellobanana示例中仅在第 1 页)。

我很确定一定有一个简单的解决方案,但却找不到。

答案1

应该有一个解决方案indexstyle,但是手册对这个问题的描述相当隐晦。

\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{listings}
\usepackage{imakeidx}
\makeindex

\lstdefinelanguage{minion}{   % define the "minion language", known for its semantic complexity
  morekeywords={bello,banana} % keywords for the "minion language"
}

\lstset{language=minion, % settings for the language
  frame=single, % box around the code
  keywordstyle=\color{YellowOrange},
  index=[1][keywords]% index the keywords
}

\renewcommand{\lstindexmacro}[1]{%
  \ifcsname alreadyindexed#1\endcsname
    % do nothing, the keyword has already been indexed
  \else
    % globally define the stopper macro
    \global\expandafter\let\csname alreadyindexed#1\endcsname\empty
    % index the keyword
    \index{#1@\texttt{#1}}%
  \fi
}

\begin{document}
We introduce the commands \lstinline!bello! and \lstinline!banana!
\newpage
\begin{lstlisting}
say(bello)
eat(banana)
\end{lstlisting}
\newpage
\begin{lstlisting}
bello
\end{lstlisting}
\printindex
\end{document}

这是生成的.idx文件

\indexentry{bello@\texttt  {bello}}{1}
\indexentry{banana@\texttt  {banana}}{1}

相关内容