Expanda imediatamente \thepage (TOC personalizado)

Expanda imediatamente \thepage (TOC personalizado)

Quero definir um comando para adicionar uma linha a um sumário com o número da página onde o comando é chamado. A primeira tentativa foi:

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

Dessa forma, aí eu chamo \toc, cada linha informa o número da página do TOC, e entendi o porquê.

Então modifiquei desta forma:

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

Nesse caso, recebo para todas as linhas o número da página da última vez que liguei \addlinetomytoce entendi o porquê também. Mas agora estou preso e não consigo encontrar outras soluções.

Não posso fazer algo como \edef\mytoc{...}porque \dotfillnão funciona \edef(sem que \dotfilleu consiga o que preciso).

Estou tentando fazer isso há algumas horas, mas não consigo encontrar nenhuma solução. Alguém pode me ajudar, por favor?

Responder1

Não tenho certeza para que isso é útil, porque \thepagenormalmente apontará para um número de página errado, a menos que você emita \addlinetomytocdepois de \clearpage.

De qualquer forma, você tem que expandir \thepageao adicionar os tokens:

\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
}

Desta forma \xtorna-se

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

e executar \xfará a coisa certa.

informação relacionada