Skip to content

LaTeX 中的带圈数字一直是比较有趣的东西,今天来谈一谈在 LaTeX 中的实现方案

LaTeX 自带的 \textcircled

这个命令效果不好,数字在垂直方向并没有居中

latex
\textcircled{1}, \textcircled{2}, \textcircled{5}, 
\textcircled{9}, \textcircled{12}

当然可以手动调节一下

latex
\def\circled#1{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt}{#1}}}}

\circled{1}, \circled{2}, \circled{5},
\circled{9}, \circled{12}

看起来会好一些,但是遇到两位及以上的数字就没办法了.

pifont 宏包

latex
% \usepackage{tikz}
% \usepackage{pifont}

\foreach \x in {1, 2, ..., 10}
{
    \ding{\numexpr 171+\x\relax}, 
}

\foreach \x in {1, 2, ..., 10}
{
    \ding{\numexpr 181+\x\relax}, 
}

\foreach \x in {1, 2, ..., 10}
{
    \ding{\numexpr 191+\x\relax}, 
}

\foreach \x in {1, 2, ..., 10}
{
    \ding{\numexpr 201+\x\relax}, 
}

这个宏包提供了 \ding{number} 命令,只需要填入一个数字就能得到对应的符号,172-211 都是带圈数字,不过也还是有一个明显的缺陷,10 以上的数字无法表示. 并且里面的字体字形是固定的,没有办法更换.

TiKZ

latex
% \usepackage{tikz}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{\node[circle, draw, inner sep=2pt] (char) {#1};}}

\circled{1}, \circled{2}, \circled{5},
\circled{9}, \circled{12}

TiKZ 是比较简单且灵活的,这里只展示了它最基础的功能.

circledsteps 宏包

这个包提供了 \Circled[]{} 命令用来绘制带圈数字,

latex
% \usepackage{circledsteps}
\Circled{1}, \Circled[inner color = red]{2}, \Circled[outer color = green]{5}
\Circled[fill color = cyan]{9}, \Circled[inner xsep = 8pt]{12}

这个包是对 TiKZ 的封装,所以它能做到的 TiKZ 也能够做到.

circledtext 宏包

这个包是 耿楠 教授基于 l3drawlatex3 开发的,其中还做了字符压缩,值得推荐,可以看看说明手册

latex
\circledtextset{charf = \LARGE}

\foreach \x in {1,2,...,5,10,100}
{
    \circledtext{\x}\,
}

\foreach \x in {1,2,...,5,10,100}
{
    \circledtext[boxcolor=cyan,boxtype=ox,boxfill = red!20]{\x}\,
}

结合 enumitem 包

这里基于上面的 TiKZ 方案配合 enumitem 包实现带圈数字列表

latex
\documentclass{article}
\usepackage[margin = 2cm]{geometry}
\pagestyle{plain}
\usepackage{tikz}
\usepackage{enumitem}
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{\node[circle, draw, inner sep=0pt, minimum size = 1.3em] (char) {#1};}}
\begin{document}

\begin{enumerate}[label = \protect\circled{\arabic*}]
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
    \item test \verb|\circled|, test \verb|\circled|
\end{enumerate}
\end{document}

得到