我正在尝试定义新的计数器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}