我正在尝试制作一个enumerate
列表,其中的数字位于彩色圆圈内。对于圆圈,我使用包tikz
和color
包。我在序言中定义一个圆圈,然后重新定义列表项:
\documentclass{report}
\usepackage{color}
\usepackage{tikz}
% Defining the circle:
\newcommand*\circled[1]{\tikz[baseline=(char.base)]{
\node[shape=circle,draw,inner sep=2pt,fill=lightgray,lightgray] (char) {\color{gray}\textbf#1};}}
% Redefining the list items
\renewcommand{\labelenumi}{\protect\circled{enumi}}
\begin{document}
\begin{enumerate}
\item foo
\item bar
\end{enumerate}
\end{document}
问题是,它不打印列表数字,而只打印一个enumi
。我正在关注 Wikibooks自定义枚举列表。我认为应该有一种方法可以使其工作而无需添加额外的包,但我不知道如何做。
如果没有通过enumi
,我应该如何访问列表的号码?
干杯!
答案1
你应该不是说\textbf#1
,但是\bfseries#1
或\textbf{#1}
。此外,它应该是\arabic{enumi}
,而不是enumi
:您传递enumi
给的代码\circled
是#1
,而不是打印计数器值的指令。
不过我建议使用enumitem
:
\documentclass{report}
\usepackage{color}
\usepackage{tikz}
\usepackage{enumitem}
% Defining the circle:
\DeclareRobustCommand*\circled[1]{%
\tikz[
baseline=(char.base)
]{%
\node[
shape=circle,
draw,
inner sep=2pt,
fill=lightgray,
lightgray
] (char) {\color{gray}\bfseries#1};%
}%
}
\begin{document}
\begin{enumerate}[label=\circled{\arabic*},ref=\arabic*]
\item foo
\item bar
\end{enumerate}
\end{document}
您可以自定义所有第一级enumerate
环境以供\circled
使用
\setlist[enumerate,1]{label=\circled{\arabic*},ref=\arabic*}
在序言中,您不需要任何可选参数\begin{enumerate}
。
如果你不想要额外的包,但我不确定为什么,那么重新定义的方法\labelenumi
将起作用,前提是
\renewcommand{\labelenumi}{\protect\circled{\arabic{enumi}}}
\circled
然而请记住,在你的定义中必须要么这样做,\bfseries#1
要么这样做\textbf{#1}
,因为\textbf#1
这是错误的,并且会产生难以理解的错误。
你为什么要加载enumitem
?很简单;如果你这样做
\item\label{foo} text
然后尝试\ref{foo}
,您将在文本中得到一个带圆圈的数字,这看起来不正确。使用 上面的代码enumitem
,\ref{foo}
只会打印一个未修饰的数字。