是否有可能知道并使用一个列表的项目数量?

是否有可能知道并使用一个列表的项目数量?

以下代码给出了在列表中使用带圆圈数字的一种方法。目前,此解决方案使用用户提供的一个参数,即列表总项数的“宽度”。

% Sources :
%   1) http://tex.stackexchange.com/questions/7032/good-way-to-make-pgftextcircled-numbers
%   2) http://tex.stackexchange.com/questions/33738/customize-diameter-of-a-circle-around-numbers/33744#33744

\documentclass{article}
    \usepackage[utf8x]{inputenc}
    \usepackage{enumitem}
    \usepackage{tikz}

    \newbox\nodebox
    \newcommand\pgftextcircled[2][0]{%
        \ifnum#1=0%
            \setbox\nodebox\hbox{#2}%
        \else%
            \setbox\nodebox\hbox{0}\wd\nodebox\dimexpr\wd\nodebox*#1\relax
        \fi
        \begin{tikzpicture}[baseline=(a.base)]%
            \node[
                draw,circle,
                outer sep=0pt,
                inner sep=0.5pt
            ](a){\hbox to \wd\nodebox{\hss#2\hss}};
        \end{tikzpicture}%
    }


\begin{document}

\begin{enumerate}[label=\protect{\pgftextcircled[1]{\arabic*}}]
    \item Item n°1
    \item Item n°2
    \item Item n°3
    \item Item n°4
    \item Item n°5
    \item Item n°6
    \item Item n°7
    \item Item n°8
\end{enumerate}

\begin{enumerate}[label=\protect{\pgftextcircled[2]{\arabic*}}]
    \item Item n°1
    \item Item n°2
    \item Item n°3
    \item Item n°4
    \item Item n°5
    \item Item n°6
    \item Item n°7
    \item Item n°8
    \item Item n°9
    \item Item n°10
    \item Item n°11
    \item Item n°12
\end{enumerate}

\end{document}

是否可以定义一个enumerateCircle自动知道列表长度的环境以便使用以下语法?

\begin{enumerateCircle}
    \item Item n°1
    \item Item n°2
    \item Item n°3
    \item Item n°4
    \item Item n°5
    \item Item n°6
    \item Item n°7
    \item Item n°8
\end{enumerateCircle}

\begin{enumerateCircle}
    \item Item n°1
    \item Item n°2
    \item Item n°3
    \item Item n°4
    \item Item n°5
    \item Item n°6
    \item Item n°7
    \item Item n°8
    \item Item n°9
    \item Item n°10
    \item Item n°11
    \item Item n°12
\end{enumerateCircle}

答案1

您可以编译环境以获取项目总数;这是环境,重新定义\pgftextcircled以可选参数表示你想要包含的大小:

\documentclass{article}
    \usepackage[utf8]{inputenc}
    \usepackage{enumitem,environ}
    \usepackage{tikz}

\newbox\nodebox
\newcommand\pgftextcircled[2][0]{%
  \sbox\nodebox{#1}%
  \begin{tikzpicture}[baseline=(a.base)]
    \node[
          draw,circle,
          outer sep=0pt,
          inner sep=0.5pt
         ](a){\hbox to \wd\nodebox{\hss#2\hss}};
        \end{tikzpicture}%
    }

\makeatletter
\NewEnviron{enumerateCircle}
  {\setbox0=\vbox{
              \enumerate
                \BODY
                \global\chardef\enCir@final\value{\@enumctr}%
              \endenumerate}%
   \enumerate[label={\pgftextcircled[\number\enCir@final]{\arabic*}}]
     \BODY
   \endenumerate}
\makeatother

\begin{document}

\begin{enumerateCircle}
    \item Item n°1
    \item Item n°2
    \item Item n°3
    \item Item n°4
    \item Item n°5
    \item Item n°6
    \item Item n°7
    \item Item n°8
\end{enumerateCircle}

\begin{enumerateCircle}
    \item Item n°1
    \item Item n°2
    \item Item n°3
    \item Item n°4
    \item Item n°5
    \item Item n°6
    \item Item n°7
    \item Item n°8
    \item Item n°9
    \item Item n°10
    \item Item n°11
    \item Item n°12
\end{enumerateCircle}

\end{document}

答案2

这应该就是你要找的:

\documentclass{article}
\usepackage{enumitem}
\usepackage{tikz}
\makeatletter
\newcount\item@cnt
\newcommand*\circle@arg[1]{%
    \tikzpicture[baseline=(a.base)]%
        \node[draw,circle,outer sep=0pt,inner sep=0.5pt](a){\hbox to\max@wd{\hss#1\hss}};
    \endtikzpicture}

\long\def\get@body#1\end{%
    \expandafter\def\expandafter\collected@body\expandafter{\collected@body#1}\find@end}

\newcommand\find@end[1]{%
    \def\temp@name{#1}%
    \ifx\temp@name\name@env
        \count@item
        \setbox\z@\hbox{\item@number}\edef\max@wd{\the\wd\z@}%
        \begin{enumerate}[label=\protect\circle@arg{\arabic*}]
            \collected@body
        \end{enumerate}
    \else
        \expandafter\def\expandafter\collected@body\expandafter{\collected@body\end{#1}}%
        \expandafter\get@body
    \fi}

\newenvironment{enumcircle}
    {\expandafter\endgroup\expandafter\def\expandafter\name@env\expandafter{\@currenvir}%
    \let\collected@body\@empty\get@body}
    \relax

\long\def\count@item@i#1\item{\expandafter\ifx\@car#1\@nil\count@item\else\advance\item@cnt\@ne\expandafter\item\fi}

\long\def\count@item{%
    \begingroup
        \let\item\count@item@i
        \collected@body\item\count@item\item
    \expandafter\endgroup
    \expandafter\def\expandafter\item@number\expandafter{\number\item@cnt}}

\makeatother
\begin{document}
\begin{enumcircle}
    \item Item n°1
    \item Item n°2
    \item Item n°3
    \item Item n°4
    \item Item n°5
    \item Item n°6
    \item Item n°7
    \item Item n°8
\end{enumcircle}

\begin{enumcircle}
    \item Item n°1
    \item Item n°2
    \item Item n°3
    \item Item n°4
    \item Item n°5
    \item Item n°6
    \item Item n°7
    \item Item n°8
    \item Item n°9
    \item Item n°10
    \item Item n°11
    \item Item n°12
\end{enumcircle}
\end{document}

相关内容