\thepage をすぐに展開する (カスタム TOC)

\thepage をすぐに展開する (カスタム TOC)

コマンドが呼び出されたページ番号を含む行を TOC に追加するコマンドを定義したいと思います。最初の試みは次のとおりでした:

\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正しい結果が得られます。

関連情報