修改 doc.sty 的 PrintDescribeMacro

修改 doc.sty 的 PrintDescribeMacro

我想重新定义命令PrintDescribeMacro以便doc.sty 创建一个可以使用 hyperref 链接到的标签。

但是,每当我向命令添加标签时,都会出现错误

\ifcsdef{PrintDescribeMacro}
   {\def\PrintDescribeMacro#1{%
   \label{doc:desc:#1}%
   \strut \MacroFont %
   \color{doctools@ColorCodeNames} \string #1\ }}{}

因为标签创建的内容与我预期的不同

\newlabel{doc:desc:\unhbox \voidb@x \relax \begingroup \catcode `\spacefactor 
\@m 11\relax \par }{{1}{3}{Commands provided by doc.sty and ltxdoc}{MacroName.1}{}}

关于如何修改 doc.sty 的命令还有更好的想法吗?

答案1

您需要考虑到#1这是一个命令,因此当它写入文件时.aux可能会扩展。您可以使用\string,但在读回命令时仍然会遇到问题。一种简单的方法是将其转换为字符串,然后吞噬\

\documentclass{article}
\usepackage{doc}
\usepackage{color}
\usepackage{hyperref}
\makeatletter
\renewcommand{\PrintDescribeMacro}[1]{%
 \label{doc:desc:\expandafter\@gobble\string#1}%
 \strut
 \MacroFont
 \color{red}%
 \string #1\ %
}
\makeatother
\begin{document}
\DescribeMacro{\foo}
\end{document}

请注意,如果您在这里传递除命令名之外的其他内容(比如说一个活动字符),则可能会出错:我猜更完整的修复程序将包括对此的测试。

相关内容