以 2 的幂进行枚举

以 2 的幂进行枚举

我想列举一个列表,但不是标准编号

 1. bar
 2. bar
 3. bar
 4. bar
 5. bar

我希望标签是 2 的幂(自动生成):

 1. bar
 2. bar
 4. bar
 8. bar
16. bar

enumitem等等。可以用或来完成吗pgf

答案1

xfp带有或 的示例pgfmath如下所示。请注意,enumi计数器用于最外层,如果这是嵌套列表,则需要enumii/ enumiii/ enumiv,具体取决于嵌套级别。

代码输出

\documentclass{article}
\usepackage{enumitem}
\usepackage{xfp}
\usepackage{pgfmath}
\begin{document}
\begin{enumerate}[label={\protect\fpeval{2^(\value{enumi}-1)}.}]
\item
foo
\item
bar
\item
baz
\item
foo
\item
bar
\item
baz
\item
foo
\item
bar
\item
baz
\end{enumerate}
\begin{enumerate}[label={\protect\pgfmathparse{int(2^(\value{enumi}-1))}\protect\pgfmathresult.}]
\item
foo
\item
bar
\item
baz
\item
foo
\item
bar
\item
baz
\item
foo
\item
bar
\item
baz
\end{enumerate}
\end{document}

答案2

没有使用其他包,只有enumitem添加枚举计数器并用进行评估的方式\numexpr,定义一个新列表以保持常规enumerate列表清洁。

\documentclass{article}
\usepackage{enumitem}

\newcounter{powercntr}
\makeatletter
\DeclareRobustCommand{\poweroftwocalc}[1]{%
  \ifnum1<\value{#1}%
  \setcounter{powercntr}{\numexpr\c@powercntr*2}
  \fi
}
\def\poweroftwo#1{\poweroftwocalc{#1}\expandafter\@poweroftwo\csname the#1\endcsname}
\def\@poweroftwo#1{\thepowercntr}

\AddEnumerateCounter{\poweroftwo}{\@poweroftwo}{4096}

\newlist{powerlist}{enumerate}{1}
\setlist[powerlist,1]{before=\setcounter{powercntr}{1}}

\makeatother



\begin{document}
\begin{powerlist}[label={\poweroftwo*}]
\item And
\item Now
\item For
\item Something
\item Completely 
\item Different
\item Was
\item Said
\item Very
\item Frequently
\item In
\item Monty
\item Python's
\item Flying
\item Circus
\end{powerlist}
\end{document}

在此处输入图片描述

答案3

未使用其他软件包,无需 e-TeX。基本上是抄袭了 @ChristianHupfer 的想法。

\documentclass{article}
\usepackage{enumitem}

\newcounter{powercntr}

\DeclareRobustCommand{\updatepowercntr}[1]%
  {\arabic{powercntr}\addtocounter{powercntr}{\value{powercntr}}}

\newlist{powerlist}{enumerate}{1}
\setlist[powerlist,1]{before=\setcounter{powercntr}{1}}

\begin{document}
\begin{powerlist}[label={\updatepowercntr*}]
\item And
\item Now
\item For
\item Something
\item Completely 
\item Different
\item Was
\item Said
\item Very
\item Frequently
\item In
\item Monty
\item Python's
\item Flying
\item Circus
\end{powerlist}
\end{document}

在此处输入图片描述

答案4

\AddEnumerateCounter这是演示和使用算法的版本xintcore。这样,您可以从您选择的任何(正)2 的幂开始,并且嵌套没有问题。

示例输出

\documentclass{article}

\usepackage{enumitem,xintcore}

\AddEnumerateCounter*{\poweroftwo}{\internalpoweroftwoname}{1}
\newcommand{\poweroftwo}[1]{\xintiiPow{2}{\value{#1}}}

\begin{document}

\begin{enumerate}[label={\poweroftwo*},start={19}]
\item A
\item list
\item enumerated
\item with
\item powers
\item of
\item two
\item starting
\item at
\item the
\item initial
\item value
\item 5
\item 2
\item 4
\item 2
\item 8
\item 8
\end{enumerate}

\end{document}

您可能希望将其与 一起使用leftmargin=*,widest*=38

我最初使用的是bigintcalc包,但@jfbu 善意地指出,它xintcore的速度明显更快。对于bigintcalc语法

\newcommand{\poweroftwo}[1]{\bigintcalcPow{2}{\number\value{#1}}}

需要有\number

注意:我已根据手册简化了语法enumitem。我们不再需要辅助宏,并且可以避免使用@in 名称,因此不必将 in 括起来\makeatletter...\makeatother。的第二个参数\AddEnumerateCounter看起来像一个宏,但实际上被剥离了前导\以生成一个字符串来在 中构建内部名称enumitem

相关内容