Настройка нумерованных списков с помощью tikz печатает enumi вместо number

Настройка нумерованных списков с помощью tikz печатает enumi вместо number

Я пытаюсь создать 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. Я слежу за Викиучебниками нанастройка нумерованных списков. Я думаю, что должен быть способ заставить это работать без добавления дополнительных пакетов, но я не знаю как.

Если это не через enumi,как мне получить доступ к номеру списка?

Ваше здоровье!

решение1

Вам следуетнетскажем \textbf#1, но \bfseries#1или \textbf{#1}. Также должно быть \arabic{enumi}, а не enumi: с вашим кодом вы передаете enumias \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}просто выведет неукрашенное число.

Связанный контент