Фон

Фон

Фон

Хотите нарисовать горизонтальную "полосу прогресса" вдоль нижней части каждой страницы. На первой странице не должно быть линии над номером страницы (или она должна быть очень, очень короткой), а на последней странице должна быть линия \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

Пример вывода

Вот несколько примеров, которые работают с использованием приведенного выше кода:

Страница 4 из 145

Страница 61 из 145

Страница 144 из 145

К сожалению, в других документах обнаружена арифметическая ошибка (вероятно, деление на ноль).

Вопрос

Как правильно рассчитать процент завершения, чтобы если \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

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