eappto 与超链接一起使用时会触发未定义的控制序列错误

eappto 与超链接一起使用时会触发未定义的控制序列错误

如果你愿意,可以跳到底部粗体问题

我想在我的文档末尾添加定理的例子(在定理后面加上链接来访问例子),但同时在我的代码中的定理下写上例子(更容易管理)。

我制作了这个代码:

\documentclass{article}
\usepackage{etoolbox}
\usepackage{hyperref}

\newcounter{exemplei}

\def\exemples{}

\newcommand{\exemple}[1]{
\hypertarget{exemple\arabic{exemplei}}{\theexemplei}
    \appto\exemples{\hyperlink{exemple\arabic{exemplei}}{Back} \theexemplei #1

     }
    \stepcounter{exemplei}
}
\begin{document}

Additions
\exemple{1+1=2}

\newpage

Multiplications
\exemple{1x1=1}

\newpage

\exemples

\end{document}

不幸的是,反向链接不起作用。我发现这是因为\arabic{exemplei}返回的是最后一个值而不是当前值(可能是因为在显示变量时执行代码而不是在向变量添加文本时执行代码)。我发现我必须用以下代码\appto替换:\appto\eappto

\documentclass{article}
\usepackage{etoolbox}
\usepackage{hyperref}

\newcounter{exemplei}

\def\exemples{}

\newcommand{\exemple}[1]{
\hypertarget{exemple\arabic{exemplei}}{\theexemplei}
    \eappto\exemples{\hyperlink{exemple\arabic{exemplei}}{Back} \theexemplei #1

     }
    \stepcounter{exemplei}
}
\begin{document}

Additions
\exemple{1+1=2}

\newpage

Multiplications
\exemple{1x1=1}

\newpage

\exemples

\end{document}

但现在此代码触发未定义的控制序列错误。为什么?如何修复?

我还发现,当我添加到变量的内容中没有超链接时,不会出现错误。

答案1

虽然计数器值需要扩展,但\hyperlink不应该,因此您应该将其用作宏\noexpand\hyperlink的一部分\exemple

\newcommand{\exemple}[1]{%
  \hypertarget{exemple\arabic{exemplei}}{\theexemplei}%
  \eappto\exemples{\noexpand\hyperlink{exemple\arabic{exemplei}}{Back}
    \theexemplei{} #1\noexpand\par}%
  \stepcounter{exemplei}%
}

虚假空格已被删除(%在行尾使用),并且\par如果您想分隔每个元素,我插入了一个强制空格。

相关内容