
我想定義一個命令,以在目錄中添加一行以及調用該命令的頁碼。第一次嘗試是:
\def\mytoc{}
\def\addlinetomytoc#1{
\g@addto@macro\mytoc{
#1\dotfill\thepage\par
}
}
這樣,然後我調用\toc
,每一行報告 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
就會做正確的事。