使用 tikz 自定义枚举列表打印 enumi 而不是 number

使用 tikz 自定义枚举列表打印 enumi 而不是 number

我正在尝试制作一个enumerate列表,其中的数字位于彩色圆圈内。对于圆圈,我使用包tikzcolor包。我在序言中定义一个圆圈,然后重新定义列表项:

\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}只会打印一个未修饰的数字。

相关内容