立即展开 \thepage (自定义目录)

立即展开 \thepage (自定义目录)

我想定义一个命令,在目录中添加一行,并标明调用该命令的页码。第一次尝试是:

\def\mytoc{}
\def\addlinetomytoc#1{
    \g@addto@macro\mytoc{
        #1\dotfill\thepage\par
    }
}

这样,然后我调用\toc,每一行都会报告目录的页码,我明白了为什么。

所以我修改成这样:

\def\mytoc{}
\def\addlinetomytoc#1{
    \edef\@tmp{\thepage}
    \g@addto@macro\mytoc{
        #1\dotfill\@tmp\par
    }
}

在这种情况下,我得到了上次调用时所有行的页码\addlinetomytoc,我也明白了原因。但现在我陷入困境,找不到其他解决方案。

我无法做类似的事情,\edef\mytoc{...}因为没有得到我需要的东西\dotfill就不起作用。\edef\dotfill

我已经尝试了几个小时,但找不到任何解决方案。有人能帮我吗?

答案1

我不确定这有什么用,因为\thepage通常会指向错误的页码,除非你\addlinetomytoc在之后发出\clearpage

\thepage无论如何,添加令牌时你必须进行扩展:

\def\mytoc{}
\def\addlinetomytoc#1{%
  \begingroup\edef\x{\endgroup
    \noexpand\g@addto@macro\noexpand\mytoc{%
      \unexpanded{#1\dotfill}\thepage\noexpand\par
    }% end of \g@addto@macro
  }\x
}

这样\x就变成了

\endgroup\g@addto@macro{#1\dotfill}<expansion of \thepage>\par}

并执行\x将会做出正确的事。

相关内容