.png)
Я хочу определить команду для добавления строки в оглавление с номером страницы, где вызывается команда. Первая попытка была:
\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
будет правильным.