相关链接:
\documentclass[tikz,border=2pt]{standalone}
\usepackage{ctex}
\usepackage{graphicx}
\usepackage{circledtext}
\begin{document}
\tikz{
\foreach \x in {0,...,9} {
\node
at (\x,0)
[scale=2.75]
{\circledtext{\x}};
}
\foreach \x in {10,...,19} {
\node
at (\x-10,1)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
\foreach \x in {20,...,29} {
\node
at (\x-20,2)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
\foreach \x in {30,...,39} {
\node
at (\x-30,3)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
\foreach \x in {40,...,49} {
\node
at (\x-40,4)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
\foreach \x in {50,...,59} {
\node
at (\x-50,5)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
\foreach \x in {60,...,69} {
\node
at (\x-60,6)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
\foreach \x in {70,...,79} {
\node
at (\x-70,7)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
\foreach \x in {80,...,89} {
\node
at (\x-80,8)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
\foreach \x in {90,...,99} {
\node
at (\x-90,9)
[scale=2.75]
{\circledtext{\scalebox{1.25}[2]{\x}}};
}
}
\tikz{
\foreach \x in {100,...,109} {
\node
at (\x-100,10)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {110,...,119} {
\node
at (\x-110,11)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {120,...,129} {
\node
at (\x-120,12)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {130,...,139} {
\node
at (\x-130,13)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {140,...,149} {
\node
at (\x-140,14)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {150,...,159} {
\node
at (\x-150,15)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {160,...,169} {
\node
at (\x-160,16)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {170,...,179} {
\node
at (\x-170,17)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {180,...,189} {
\node
at (\x-180,18)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
\foreach \x in {190,...,199} {
\node
at (\x-190,19)
[scale=2.75]
{\circledtext{\scalebox{1}[2]{\x}}};
}
}
\end{document}
使用 LaTeX 自带的 picture 环境 + LaTeX 3 手搓了一个, 没有使用其它的任何宏包. 且带圈数字的大小会根据当前文档的字体大小自动调整.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lipsum}
\usepackage{xcolor}
\ExplSyntaxOn\makeatletter
\NewDocumentCommand{\circlenum}{O{black}m}
{
\__circle_num:nn {#1}{#2}
}
%%%%% box typesetting config %%%%%
\fp_const:Nn \c__circle_num_scale_fp { .85 }
\dim_const:Nn \c_circle_num_wd_dim { \f@size pt }
\dim_const:Nn \c__circle_num_typeset_box_dp { 1.6pt }
%%%%% box typesetting config %%%%%
\box_new:N \l__circle_num_box
\box_new:N \l__circle_num_typeset_box
\cs_set_protected:Npn \__circle_num:nn #1#2
{
% scale number
\hbox_set:Nn \l__circle_num_box { #2 }
\fp_set:Nn \l_tmpa_fp
{
\dim_ratio:nn
{ \fp_use:N \c__circle_num_scale_fp\c_circle_num_wd_dim }
{ \box_wd:N \l__circle_num_box }
}
\box_scale:Nnn \l__circle_num_box
{
\fp_min:nn {\fp_use:N \l_tmpa_fp}{1}
}{ 1 }
% typeset cirle num
\exp_args:Nne \__circle_num_typeset:nnN
{ \c_circle_num_wd_dim }
{ #1 }
\l__circle_num_box
}
\cs_new:Npn \__circle_num_typeset:nnN #1#2#3
{% #1:radius(float); #2:style; #3:content
\hbox_set:Nw \l__circle_num_typeset_box
\begin{picture}(0pt, 0pt)(\dim_eval:n {-\c_circle_num_wd_dim/2}, 0pt)
\put(0, \dim_to_decimal:n {\dim_eval:n {#1/2 - \c__circle_num_typeset_box_dp}})
{ \color{#2}\circle{#1} }
\put(0, 0) { \clap{\box_use_drop:N #3} }
\end{picture}
\hbox_set_end:
\box_set_wd:Nn \l__circle_num_typeset_box
{ \dim_use:N \c_circle_num_wd_dim }
\box_set_ht:Nn \l__circle_num_typeset_box
{
\dim_eval:n { \c_circle_num_wd_dim
- \c__circle_num_typeset_box_dp }
}
\box_set_dp:Nn \l__circle_num_typeset_box
{ \dim_use:N \c__circle_num_typeset_box_dp }
\box_use_drop:N \l__circle_num_typeset_box
}
\makeatother\ExplSyntaxOff
\begin{document}
\lipsum[1][1-2]
XXX, \kern2.3pt\relax1| 11| 111| 999| 9999| ZZZ
\def\vbar{\makebox[0pt]{|}}
\fboxsep0pt\relax
XXX, \fbox{\circlenum[blue]{11}}, \fbox{HxM}
XXX, \circlenum[red]{1}|\circlenum[blue]{11}|\circlenum[teal]{111}|%
\circlenum{\color{gray}999}|\circlenum[red]{\color{purple}9999}|\circlenum[yellow]{XXVII} ZZZ
\end{document}
如果用户需要自定义样式, 可以更改下面的配置:
%%%%% box typesetting config %%%%%
\fp_const:Nn \c__circle_num_scale_fp { .85 }
\dim_const:Nn \c_circle_num_wd_dim { \f@size pt }
\dim_const:Nn \c__circle_num_typeset_box_dp { 1.6pt }
%%%%% box typesetting config %%%%%
输出结果:
差不多就是小学生找规律问题((^_^))
07 -> (7,0)
23 -> (3,2)
152 -> (2,5)
使用取模和向下取整的函数即可,规律是显然的。
先把「10-99」缩为一重循环;再把「100-199」也缩为一重循环即可
\documentclass[tikz,border=2pt]{standalone}
\usepackage{ctex}
\usepackage{circledtext}
\begin{document}
\tikz{
\foreach \x in {0,...,9} {
\node[scale=2.75] at (\x,0) {\circledtext{\x}};
}
\foreach \x in {10,...,99}{%
\pgfmathtruncatemacro{\xx}{mod(\x,10)}
\pgfmathtruncatemacro{\yy}{floor(\x/10)}
\node[scale=2.75] at (\xx,\yy) {\circledtext{\scalebox{1.25}[2]{\x}}};
}%
}
\tikz{
\foreach \x in {100,...,199}{%
\pgfmathtruncatemacro{\xx}{mod(\x-100,10)}
\pgfmathtruncatemacro{\yy}{floor((\x-100)/10)}
\node[scale=2.75] at (\xx,\yy) {\circledtext{\scalebox{1}[2]{\x}}};
}%
}
\end{document}
根据数字的位数使用一个分支判断。这样可以把三个循环再缩为一个。
这里我不希望把0-199的数字拆分为两个tikzpicture
,所以我稍微修改了一下逻辑和目标效果。
\documentclass[tikz,border=2pt]{standalone}
\usepackage{ctex}
\usepackage{circledtext}
\begin{document}
\tikz{
\foreach \x in {0,...,299} {
\pgfmathtruncatemacro{\xx}{mod(\x,10)}
\pgfmathtruncatemacro{\yy}{floor(\x/10)}
\ifnum\yy<1\relax
\def\content{\x}
\else%
\ifnum\yy<10\relax
\def\content{\scalebox{1.25}[2]{\x}}
\else
\def\content{\scalebox{1}[2]{\x}}
\fi
\fi
\node[scale=2.75] at (\xx,\yy) {\circledtext{\content}};
}%
}
\end{document}
给个简单方法,对0-99,更大数字同理:
\documentclass[border=5pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[x=0.53cm, y=0.53cm, nodes={draw,circle,minimum size=5mm,inner sep=0pt}]
\foreach \x in {0,1,...,9}
{%
\node[font=\Large] at(\x,0){\x};
\foreach \y in {1,...,9}
{\node at(\x,\y){\y\x};}
}
\end{tikzpicture}
\end{document}
连
mod
和floor
是什么都不知道的我,还不会写条件判断,这个循环对我来说有点难了...@u101077
取模
mode
(%
)就是取余数啦..至于
floor
,就是向下取整而已..或许你听说过高斯函数...
@u101077 不想计算套个双重循环就行了,外层是纵坐标,内层是横坐标,内容直接拼接即可,清晰明了,借@u70550 的代码改了改。