Фон
Хотите нарисовать горизонтальную "полосу прогресса" вдоль нижней части каждой страницы. На первой странице не должно быть линии над номером страницы (или она должна быть очень, очень короткой), а на последней странице должна быть линия \textwidth
длиной в одну.
Код
Следующий код работает в некоторых, но не во всех ситуациях:
% Calculate the percentage complete for a progress meter.
\define\PercentComplete{\the\dimexpr\textwidth*\currentpage/\lastpage\relax}
%
\define\PageNumber{%
\inframed[
frame=off,
bottomframe=on,
width=\PercentComplete,
framecolor=ProgressBar,
]{\currentpage\ of \lastpage}
}
\startsetups[FooterLeft]
\midaligned{\FontFooter \PageNumber}
\stopsetups
\startsetups[FooterRight]
\midaligned{\FontFooter \PageNumber}
\stopsetups
Пример вывода
Вот несколько примеров, которые работают с использованием приведенного выше кода:
К сожалению, в других документах обнаружена арифметическая ошибка (вероятно, деление на ноль).
Вопрос
Как правильно рассчитать процент завершения, чтобы если \lastpage
он недействителен (т.е. первый проход из нескольких проходов), то расчет откладывался до тех пор, пока \lastpage
не станет известно значение?
решение1
Макрос \lastpage
равен 0 во время первого прохода, поскольку последняя страница документа неизвестна. Это позволяет установить процент на 0pt для первого прохода и на желаемый размер для всех остальных проходов. Кроме того, меры предоставляют интерфейс более высокого уровня для адаптивных размеров.
\doifelse{\lastpage}{0}{
\definemeasure
[percent complete]
[0pt]
}{
\definemeasure
[percent complete]
[\textwidth*\currentpage/\lastpage]
}
\define\PageNumber{%
\inframed[
frame=off,
bottomframe=on,
width=\measure{percent complete},
framecolor=ProgressBar,
]{\currentpage\ of \lastpage}
}
\def\FontFooter{\ss}
\startsetups[FooterLeft]
\midaligned{\FontFooter \PageNumber}
\stopsetups
\startsetups[FooterRight]
\midaligned{\FontFooter \PageNumber}
\stopsetups
\setupfootertexts[\setups{FooterLeft}][\setups{FooterRight}]
\starttext
\dorecurse{10}{\input knuth\relax}
\stoptext