배경

배경

배경

각 페이지 하단에 수평 "진행률 표시줄"을 그리려고 합니다. 첫 번째 페이지에는 페이지 번호 위에 줄이 없어야 하며(또는 매우 짧음) 마지막 페이지에는 줄 길이가 있어야 합니다 \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

불행하게도 다른 문서는 산술 오류(아마도 0으로 나누기)로 인해 실패합니다.

질문

\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

관련 정보