写入 aux - 不能使用带有“字符 @”的前缀

写入 aux - 不能使用带有“字符 @”的前缀

在以前的项目中,我们使用了下面的宏来定义需求,以便在后面的文本中轻松引用。

\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在标签中使用 的星号来避免嵌套链接。另外,我还注释了行尾以避免不必要的空格。

相关内容