免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

tikz画带圈数字

  1. \newlength\szg
  2. \newcommand\quan[1]{%
  3. \settoheight\szg{#1}%
  4. \tikz[baseline]{\pgfmathparse{
  5. ifthenelse(#1 < 10, 1, ifthenelse(#1 < 100, 0.75, 0.5))
  6. }
  7. \let\hfs\pgfmathresult
  8. \node at (0,\szg/2) {\makebox[0em][c]{\scalebox{\hfs}[1]{#1}}};
  9. \draw (0,\szg/2) circle (\szg/2+0.35ex);
  10. }}
复制代码
设计的思路很简单,就懒得作解释了。

用法:\quan{数字}
其中,数字的取值范围为不超过999的自然数,如果数字不在这范围内,可能会出现溢出现象或者报错。

代码 \foreach \i in {0,1,...,100} { \quan\i} 的效果:
QQ截图20141027220447.gif
2014-10-27 22:04


测试文档: tikzquannum.tex (719 Bytes)
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
$\href{https://kuingggg.github.io/}{\text{About Me}}$

前段时间在 http://bbs.ctex.org/forum.php?mod=viewthread&tid=153386 继续讨论了相关问题,忘了存档这里了。

隔了一段时间,当时的理解都有点模糊了,只能大概整理下了。
该帖中遇到的问题大概是跟命令的“脆弱”有关,要加强保护,如:
将 \newcommand\quan[1]{... 改为 \protected\def\quan#1{...
后面相关的东西也有可能要改了,像楼上的就没必要再用 \protect 了,还有就是控制好展开顺序,即
\renewcommand\thefootnote{\expandafter\quan\expandafter{\number\value{footnote}}}
酱紫。

晚点再弄个测试文档。
$\href{https://kuingggg.github.io/}{\text{About Me}}$

TOP

若要用于脚注,则只需加一句:

\renewcommand\thefootnote{\protect\quan{\number\value{footnote}}}

测试文件: tikzquannum2.tex (904 Bytes)

顺便改进了一处,画圈的时候用 \draw[line width=0.1ex] ,这样即使字号变大,线粗也跟着变大,原先1#的是不变的。
$\href{https://kuingggg.github.io/}{\text{About Me}}$

TOP

其实还可以加颜色之类的可选参数,不过一般来说也没什么必要

TOP

居然忘记弄黑圈,类似地设计为:
  1. \newcommand\hquan[1]{%
  2. \settoheight\szg{#1}%
  3. \tikz[baseline]{\pgfmathparse{
  4. ifthenelse(#1 < 10, 1, ifthenelse(#1 < 100, 0.75, 0.5))
  5. }
  6. \let\hfs\pgfmathresult
  7. \filldraw (0,\szg/2) circle (\szg/2+0.35ex);
  8. \node[white] at (0,\szg/2) {\makebox[0em][c]{\scalebox{\hfs}[1]{\textbf{#1}}}};
  9. }}
复制代码
设计时有两点值得记录:
一是我用 \filldraw 而不用 \fill ,是为了和白圈的大小完全一致;
二是这里我加了 \textbf 是为了好看些,如果不加,会显得数字的线条很细,这大概是黑底白字的视觉原因。
QQ截图20141119143846.png
2014-11-19 14:38
$\href{https://kuingggg.github.io/}{\text{About Me}}$

TOP

这字不一般,不是一般的丑啊。

TOP

还有,我在1楼的测试文档里忘了加 \usepackage{graphicx} ,居然也能编译? 为毛印象中 \scalebox 应该是 graphicx 宏包里的命令?

TOP

有一件奇怪的事,我本来是直接写 \scalebox{\pgfmathresult}[1]{#1},但是居然出不来正确的效果,而先 \let\hfs\pgfmathresult 再 \scalebox{\hfs}[1]{#1} 就正常了,不知为什么。
PS、我这里的测试环境是 texlive2013 ,用 xelatex 编译,不知新版会不会这样。

TOP

返回列表 回复 发帖