用圆圈数字自定义计数器

用圆圈数字自定义计数器

我正在尝试定义新的计数器lnum并以圆圈形式显示计数器数字。

circled从这里 tex.stackexchange 找到了命令,但是遇到了一个问题。

这是我的测试代码:

\documentclass{article}
\usepackage{tikz}
\newcommand*{\circled}[1]{\tikz[baseline=(char.base)]{%
            \node[shape=circle,fill=blue!20,draw,inner sep=2pt] (char) {#1};}}
\newcounter{lnum}
\renewcommand{\thelnum}{\circled{\arabic{lnum}}}

\begin{document}

\thelnum % fine
\refstepcounter{lnum}\thelnum % error here

\end{document}

从注释中可以看出,没有\refstepcounter,它工作正常。但是,有了\refstepcounter,它就不起作用了。以下是错误消息:

! Undefined control sequence.
\tikz@deactivatthings ->\def ;
                              {\tikz@nonactivesemicolon }\def :{\tikz@nonact...
l.11 \refstepcounter{lnum}
                          \thelnum
?

为什么这不起作用?我该如何修复它?

答案1

问题是命令\thelnum在内部展开\refstepcounter{lnum}。它本质上

\edef\@currentlabel{\p@lnum\thelnum}

其中\p@lnum是前缀。如果\thelnum是 Tikz 节点,则无法在此分配中扩展。通过测试定义

\edef\test{\tikz \node[draw]{Test};}

人们会遇到与问题类似的错误。

为了使打印的数字被圈出来,可以使用另一个命令来写入它:

\documentclass{article}
\usepackage{tikz}
\newcommand*{\circled}[1]{\tikz[baseline=(char.base)]
  \node[shape=circle,fill=blue!20,draw,inner sep=2pt] (char) {#1};
}
\newcounter{lnum}
\newcommand{\mylnum}{\circled{\arabic{lnum}}}
\begin{document}
\mylnum % fine
\refstepcounter{lnum}
\mylnum % error here
\end{document}

当然,对值的交叉引用不会以圆圈形式打印,但可以手动完成:

\refstepcounter{lnum}
\label{circ:test}
[...]
\circled{\ref{circ:test}}

答案2

这是包中的现成解决方案pifont

\begin{dingautolist}{"0AC}
   \item First
   \item Second
\end{dingautolist}

使用起始值,"0B6您可以得到黑色圆圈上的白色数字。数字范围从 1 到 10,Zapf Dingbats 字体中没有更高的数字。

答案3

\refstepcounter将扩展存储\thelnum在引用中。因此,如果执行复杂操作,\@currentlabel这不是一个好主意。要么永远不要与计数器一起使用(而是使用)。或者定义一些其他添加圆的命令:\thelnum\refstepcounter\stepcounter

\documentclass{article}
\usepackage{tikz}
\newcommand*{\circled}[1]{\tikz[baseline=(char.base)]{%
            \node[shape=circle,fill=blue!20,draw,inner sep=2pt] (char) {#1};}}
\newcounter{lnum}
\newcommand{\thecirclnum}{\circled{\arabic{lnum}}}

\begin{document}

\thecirclnum 

\refstepcounter{lnum}\label{test}

\thecirclnum, \ref{test}

\end{document}

相关内容