Немедленно развернуть \thepage (пользовательский TOC)

Немедленно развернуть \thepage (пользовательский TOC)

Я хочу определить команду для добавления строки в оглавление с номером страницы, где вызывается команда. Первая попытка была:

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

Таким образом, затем я вызываю \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будет правильным.

Связанный контент