免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
Board logo

标题: tikz画带圈数字 [打印本页]

作者: kuing    时间: 2014-10-27 21:13     标题: 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

测试文档: tikzquannum.tex (719 Bytes)

附件: tikzquannum.tex (2014-10-27 21:12, 719 Bytes) / 下载次数 1215
http://kuing.orzweb.net/attachment.php?aid=2234&k=c5bd3d34a7c224172d3ba0fa7a00453e&t=1713597219&sid=54RG3A

图片附件: QQ截图20141027220447.gif (2014-10-27 22:04, 32.01 KB) / 下载次数 456
http://kuing.orzweb.net/attachment.php?aid=2236&k=c1a2397e21b212b72586745b8736fe14&t=1713597219&sid=54RG3A


作者: kuing    时间: 2014-10-27 21:17

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

还有,我在1楼的测试文档里忘了加 \usepackage{graphicx} ,居然也能编译? 为毛印象中 \scalebox 应该是 graphicx 宏包里的命令?
作者: 羊羊羊羊    时间: 2014-10-27 23:06

这字不一般,不是一般的丑啊。
作者: kuing    时间: 2014-11-19 14:38

居然忘记弄黑圈,类似地设计为:
  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

图片附件: QQ截图20141119143846.png (2014-11-19 14:38, 156.25 KB) / 下载次数 513
http://kuing.orzweb.net/attachment.php?aid=2318&k=9c0168cf683b4dc1129d552e84db03b9&t=1713597219&sid=54RG3A


作者: kuing    时间: 2014-11-20 00:53

其实还可以加颜色之类的可选参数,不过一般来说也没什么必要
作者: kuing    时间: 2015-12-12 02:02

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

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

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

顺便改进了一处,画圈的时候用 \draw[line width=0.1ex] ,这样即使字号变大,线粗也跟着变大,原先1#的是不变的。

附件: tikzquannum2.tex (2015-12-12 02:00, 904 Bytes) / 下载次数 1142
http://kuing.orzweb.net/attachment.php?aid=3391&k=60e0b9f043993f4a7560ed23f3d5be8a&t=1713597219&sid=54RG3A
作者: kuing    时间: 2017-8-24 18:26

前段时间在 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}}}
酱紫。

晚点再弄个测试文档。




欢迎光临 悠闲数学娱乐论坛(第2版) (http://kuing.orzweb.net/) Powered by Discuz! 7.2