枚举具有不同基数的列表

枚举具有不同基数的列表

这里的一些旧测试的问题包括分析几个项目(每个项目都有一个不同的数字),并将所有正确项目的数字相加。为了避免多个组合给出相同的答案(如1+3 = 4和)4=4,数字都是 2 的幂,因此:

01. This is the first item (2⁰)
02. This is the second item (2¹)
04. This is the third item (2²)
08. This is the forth item (2³)
16. This is the fifth item (2⁴)

所以我的目标是重新创建这种枚举列表,遵循 2 的幂(0 -- 1 -- 2 -- 4 -- 8 -- 16 -- 32 等等)。有没有可以做到这一点的包或者一种相当简单的解决方法?在我目前正在处理的文档中,我已经在使用该enumitem包了。

答案1

enumitem与特征的“可怕”混合expl3,定义一个新的counter formater名称baseenum ——然而我必须用更深层次的嵌套来测试。

\documentclass{article}

\usepackage{enumitem}
\usepackage{xparse}
\makeatletter


\def\basetwoenum#1{\expandafter\@basetwoenum\csname c@#1\endcsname}

\ExplSyntaxOn
\def\@basetwoenum#1{%
  \int_set:Nn \l_tmpa_int \c_one
  \int_step_inline:nnnn {2}{1}{\number#1}{%
    \int_set:Nn \l_tmpb_int { 2 * \l_tmpa_int }
    \int_set_eq:NN \l_tmpa_int \l_tmpb_int
  }
  \int_use:N \l_tmpa_int
}
\ExplSyntaxOff
\AddEnumerateCounter{\basetwoenum}{\@basetwoenum}{100}
\makeatother 

\begin{document}

\begin{enumerate}[label={\basetwoenum*}]
  \item First
  \item Second
  \item Third
  \item Fourth
  \item Fifth
\end{enumerate}

Resume it

\begin{enumerate}[label={\basetwoenum*},resume]
  \item First
  \item Second
  \item Third
  \item Fourth
  \item Fifth
\end{enumerate}


\end{document}

在此处输入图片描述

答案2

Christian Hupfer 解决方案的一个变体,但完全可以扩展:

\documentclass{article}

\usepackage{enumitem}
\usepackage{xparse}

\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\basetwoenum}{m}
 {
  \basetwoenum_main:n { #1 }
 }
\cs_new:Nn \basetwoenum_main:n
 {
  \exp_args:Nc \basetwoenum_eval:n { c@#1 }
 }
\cs_new:Nn \basetwoenum_eval:n
 {
  \fp_eval:n { 2 ** (#1-1) }
 }
%% for keeping enumitem happy
\cs_set_eq:cN { @basetwoenum } \basetwoenum_main:n
\ExplSyntaxOff

\makeatletter
\AddEnumerateCounter{\basetwoenum}{\@basetwoenum}{000}
\makeatother 

\begin{document}

\begin{enumerate}[label={\basetwoenum*}]
  \item First
  \item Second
  \item Third
  \item Fourth
  \item Fifth
\end{enumerate}

Resume it

\begin{enumerate}[label={\basetwoenum*},resume]
  \item First
  \item Second
  \item Third
  \item Fourth
  \item Fifth
\end{enumerate}

\end{document}

这给出了最高为 2 53 的正确结果;当然,如果您计划使用超过十个项目,则必须相应地将最后一个参数中的零的数量增加到\AddEnumerateCounter

在此处输入图片描述

答案3

\documentclass{article}

\usepackage{tikz}

\renewcommand*{\labelenumi}{\pgfmathparse{int(2^(\theenumi-1))} \pgfmathresult}


\begin{document}
    \begin{enumerate}
        \item One
        \item Two
        \item Three
        \item more
        \item more
        \item more
        \item more
        \item more
        \item more
        \item more
        \item more
        \item more
        \item more
    \end{enumerate}
\end{document}

在此处输入图片描述

答案4

这是一个基于 LuaLaTeX 的解决方案,可与enumitem包配合使用。它定义了一个名为 的枚举环境powertwoenum,其中连续的项目编号为 1、2、4、8、32 等。列表中的项目可以通过通常的-机制powertwoenum进行交叉引用。\label\ref

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\newcommand\powertwo{\directlua{tex.sprint(2^(\arabic{powertwoenumi}-1))}}
\usepackage{enumitem}
\newlist{powertwoenum}{enumerate}{1}
\setlist[powertwoenum]{label=\protect\powertwo.,ref=\protect\powertwo}


\begin{document}
\begin{powertwoenum}
  \item First
  \item Second
  \item Third
  \item Fourth
  \item Fifth \label{item:five}
\end{powertwoenum}

A cross-reference to item \ref{item:five}.

Resume the enumerated list.

\begin{powertwoenum}[resume]
  \item First
  \item Second
  \item Third
  \item Fourth
  \item Fifth
\end{powertwoenum}
\end{document}

相关内容