在[https://tex.stackexchange.com/questions/11390/drawing-stars-similar-with-tikz](https://tex.stackexchange.com/questions/11390/drawing-stars-similar-with-tikz)看到了五角星的画法,想用在书中代表进度。MWE: ```tex \documentclass{article} \usepackage{lastpage} \usepackage{tikz} \usetikzlibrary{shapes.geometric,calc} \newcommand\score[2]{ \pgfmathsetmacro\pgfxa{#1+1} \tikzstyle{scorestars}=[star, star points=5, star point ratio=2.25, draw,inner sep=0.15em,anchor=outer point 3] \begin{tikzpicture}[baseline] \foreach \i in {1,...,#2} { \pgfmathparse{(\i<=#1?"yellow":"gray")} \edef\starcolor{\pgfmathresult} \draw (\i*1em,0) node[name=star\i,scorestars,fill=\starcolor] {}; } \pgfmathparse{(#1>int(#1)?int(#1+1):0} \let\partstar=\pgfmathresult \ifnum\partstar>0 \pgfmathsetmacro\starpart{#1-(int(#1))} \path [clip] ($(star\partstar.outer point 3)!(star\partstar.outer point 2)!(star\partstar.outer point 4)$) rectangle ($(star\partstar.outer point 2 |- star\partstar.outer point 1)!\starpart!(star\partstar.outer point 1 -| star\partstar.outer point 5)$); \fill (\partstar*1em,0) node[scorestars,fill=yellow] {}; \fi ,\end{tikzpicture} } \begin{document} \score{5*\thepage/\pageref{LastPage}}{5} \end{document} ``` `\pageref{LastPage}`用在这里会报错,换作纯数字没有问题,该如何才能成功使用最后一页的页数?

1 回答1

0
首先,`\pageref{...}` 的输出不一定是数字,例如第一次编译时输出的是问号,所以不能直接使用它,要判断该引用(对应 `\r@<label>`)是否存在。 其次,就是找到一个存储了总页数的宏。 1. 一种方法是,从 `\r@LastPage` 里提取第二个 token 1. 从生成的 aux 文件里可以观察到,宏 `\lastpage@lastpage` 直接尺寸里总页数,也可以直接用它。 综上,改成下面的就行了。如果宏未定义(应对编译前 aux 文件不存在的情况),则实现为页码百分比为 0。 方法1,直接用 `\r@LastPage` ```tex \makeatletter \@ifundefined{r@LastPage}{% \score{0}{5}% }{% \edef\temp{\expandafter\@secondoftwo\r@LastPage}% \score{5 * \thepage / \temp}{5}% }% \makeatother ``` 方法2,用 `\lastpage@lastpage` ```tex \makeatletter \@ifundefined{lastpage@lastpage}{% \score{0}{5}% }{% \score{5 * \thepage / \lastpage@lastpage}{5}% }% \makeatother ``` 可能的定义新命令的事,留给提问者了。
  • 谢谢!问题解决了! – sikouhjw 2019-10-29 13:53 回复

你的回答

请登录后回答

你的回答将会帮助更多人,请务必认真回答问题。