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