배경
각 페이지 하단에 수평 "진행률 표시줄"을 그리려고 합니다. 첫 번째 페이지에는 페이지 번호 위에 줄이 없어야 하며(또는 매우 짧음) 마지막 페이지에는 줄 길이가 있어야 합니다 \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
예제 출력
위의 코드를 사용하여 작동하는 몇 가지 예는 다음과 같습니다.
불행하게도 다른 문서는 산술 오류(아마도 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