Expandir inmediatamente \thepage (TOC personalizado)

Expandir inmediatamente \thepage (TOC personalizado)

Quiero definir un comando para agregar una línea a un TOC con el número de página donde se llama el comando. El primer intento fue:

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

De esta manera, luego llamé \toc, cada línea informa el número de página del TOC y entendí por qué.

Entonces modifiqué de esta manera:

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

En este caso, obtengo para todas las líneas el número de página de la última vez que llamé \addlinetomytocy también entendí por qué. Pero ahora estoy estancado y no puedo encontrar otras soluciones.

No puedo hacer algo así \edef\mytoc{...}porque \dotfillno funciona \edef(sin \dotfillobtener lo que necesito).

Llevo un par de horas intentando hacer esto, pero no encuentro ninguna solución. ¿Alguien puede ayudarme?

Respuesta1

No estoy seguro de para qué sirve esto, porque \thepagenormalmente apuntará a un número de página incorrecto, a menos que lo emita \addlinetomytocdespués de \clearpage.

De todos modos, hay que expandir \thepageal agregar los 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
}

De esta manera \xse convierte

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

y ejecutarlo \xhará lo correcto.

información relacionada