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