![立即展开 \thepage (自定义目录)](https://linux22.com/image/405681/%E7%AB%8B%E5%8D%B3%E5%B1%95%E5%BC%80%20%5Cthepage%20(%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9B%AE%E5%BD%95).png)
我想定义一个命令,在目录中添加一行,并标明调用该命令的页码。第一次尝试是:
\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
将会做出正确的事。