我指的是 ltxdoc 中多个索引仍然存在问题
那里给出的解决方案适用于那个简单的 MWE,但在我的实际项目中,我遇到了更严重的问题。下一个 M_not_WE 显示了它。当我运行“pdflatex testidx.dtx”时,它响应:
! Undefined control sequence.
\special@index ...w \immediate \write \@indexfile
{\string \indexentry
{#1}{...
l.26 % \begin{macro}{\my@macroA}
当我注释掉“\CodelineIndex”行时,它会运行
我的代码有什么问题?
% \iffalse
%<*driver>
\documentclass{ltxdoc}
\usepackage{imakeidx}
\CodelineIndex
\EnableCrossrefs
\indexsetup{level=\section*}
\makeindex[name=other]
\makeindex[options=-s gind.ist,title={General Index}]
\begin{document}
\DocInput{testidx.dtx}
\end{document}
%</driver>
% \fi
%
% \DescribeMacro{\my@macroA}
% \DescribeMacro{\mymacroB}
%
% \StopEventually{}
%
% \section{Implementation}
%
% \iffalse
%<*package>
% \fi
% \begin{macro}{\my@macroA}
% \begin{macrocode}
\def\my@macroA{A}
% \end{macrocode}
% \end{macro}
% \begin{macro}{\mymacroB}
% \begin{macrocode}
\def\mymacroB#1{B#1}
% \end{macrocode}
% \end{macro}
% \begin{macrocode}
\endinput
% \end{macrocode}
%
% \iffalse
%</package>
% \fi
%
% \Finale
\printindex
\printindex[other]
\endinput
答案1
根本没有回复,所以我回答了自己的问题。经过一些实验,我找到了一个解决方案,即根本不使用 imakeidx。我所做的基本上是这样的(请记住,我想在我的包文档末尾使用 ltxdoc 列出用户命令列表):
首先,我将命令写入一个包含一些格式化内容的文件中。然后,我使用 hyperref 来获取可点击的索引。最后,我读取此文件以获取列表。
前期工作
\newwrite\UCFile
\DeleteShortVerb{\|}
\immediate\openout\UCFile="| sort -d > \jobname.odw
\MakeShortVerb{\|}
阅读命令
\newcommand\bs{\texttt{\textbackslash}}
\newcommand\usercom[1]{%
\label{#1}\immediate\write\UCFile{%
\noexpand\hyperref[#1]{\noexpand\bs#1,
\thepage\noexpand\newline}}%
}
呼叫示例
\DescribeMacro{\CompassMid}\usercom{CompassMid}
写入文件
\immediate\closeout\UCFile
\begin{multicols}{3}[\section{List of User Commands}]
\IfFileExists{\jobname.odw}
{\noindent\input{\jobname.odw}}
{\PackageWarning{ODw}{File \jobname.odw not found}}
\end{multicols}
评论
pdflatex 必须使用选项 --shell-escape 来调用