背景

背景

背景

各ページの下部に水平の「進捗状況バー」を描画します。最初のページにはページ番号の上に線が付かないようにし (または非常に短くし)、最後のページには\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

出力例

上記のコードを使用して動作する例をいくつか示します。

145 ページ中 4 ページ

145 ページ中 61 ページ

145 ページ中 144 ページ

残念ながら、他のドキュメントは算術エラー (おそらくゼロ除算) で失敗します。

質問

\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

関連情報