提问于:
浏览数:
1806
在[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 回答
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 回复
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。