在以前的项目中,我们使用了下面的宏来定义需求,以便在后面的文本中轻松引用。
\newcommand{\reqlabel}[2]{%
\label{#1}
\protected@write\@auxout{}{%
\string \newlabel {#1_long}{{\ref{#1} (#2)}{\thepage}{#2}{#1}{}}}
\hypertarget{#1}{#2}
}
我将其复制到另一个项目的新序言中,但现在无法使其工作。
我收到以下错误:
! You can't use a prefix with `the character @'.
我尝试使用写入而不是受保护的写入,这会导致另一个错误:
! Improper \spacefactor.
\@->\spacefactor
\@m
答案1
@
不是字母,可用于命令名称。可用于类和包文件中,其中@
有类别代码字母。否则\makeatletter
和\makeatother
可用于更改类别代码:
\makeatletter
\newcommand{\reqlabel}[2]{%
\label{#1}%
\protected@write\@auxout{}{%
\string \newlabel {#1_long}{{\string\ref{#1} (#2)}{\thepage}{#2}{#1}{}}}%
\hypertarget{#1}{#2}%
}
\makeatother
\reqlabel
我不太清楚 的用途,也许你想\ref
在标签中使用 的星号来避免嵌套链接。另外,我还注释了行尾以避免不必要的空格。