立即展開\thepage(自訂目錄)

立即展開\thepage(自訂目錄)

我想定義一個命令,以在目錄中添加一行以及調用該命令的頁碼。第一次嘗試是:

\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就會做正確的事。

相關內容