一种新型的“符号包装”

一种新型的“符号包装”

alphalph定义三种方法,用于在到达末尾时继续一组符号。

  • alph继续如下:a、b、c…z、aa、ab、ac…
  • mult继续如下:a、b、c…z、aa、bb、cc…
  • wrap继续如下:a,b,c…z,a,b,c…

我想要一些像这样工作的东西,但它的继续如下:

  • a、b、c…z、za、zb、zc…zy、zz、zza…

显然,这对于字母来说看起来很奇怪。但是如果你定义的东西以数字作为输入并输出那个数字点,那么这是有意义的。实际用例如下:我想定义一个以计数器为输入并输出的东西那个数字用骰子表示(使用epsdice)。目前,我只是明确定义数字函数,如下所示:

\newcommand*{\dicecount}[1]{%
  \expandafter\@dicecount\csname c@#1\endcsname%
}
\newcommand*{\@dicecount}[1]{%
  \ifcase#1\or\epsdice{1}\or\epsdice{2}\or\epsdice{3}%
  \or\epsdice{4}\or\epsdice{5}\or\epsdice{6}%
  \or\epsdice{3}\epsdice{4}%
  \or\epsdice{6}\epsdice{2}%
  \or\epsdice{5}\epsdice{4}%
  \or\epsdice{5}\epsdice{5}%
  \or\epsdice{6}\epsdice{5}%
  \or\epsdice{6}\epsdice{6}%
  \else\@ctrerr\fi%
}

(请注意,我在这里添加了一些随机性,但我会满足于只输出一堆六然后其他情况的情况。如果你能建立这种伪随机性,则可以获得加分)

我尝试查看 的代码alphalph,但我还没有理解。但我想对于“一次性”的情况,修补alphalph可能不是我想要的,还有一种更简单的方法,只需测试数字是否大于 6,如果是,则添加一个骰子,依此类推……

答案1

\documentclass[a4paper]{article}
\usepackage{expl3}
\usepackage{epsdice}

\ExplSyntaxOn
\cs_new:cpn {@weirdalph} #1
  {
   \prg_replicate:nn {\int_div_truncate:nn {#1}{26}}{z}
   \int_to_alph:n {\int_mod:nn {#1}{26}}
  }

\cs_new:cpn {@dicecount} #1
  {
   \prg_replicate:nn {\int_div_truncate:nn {#1}{6}}{\epsdice{6}}
   \exp_args:Nx \epsdice{\int_mod:nn{#1}{6}}
  }
\ExplSyntaxOff

\makeatletter
\def\weirdalph#1{\expandafter\@weirdalph\csname c@#1\endcsname}
\def\dicecount#1{\expandafter\@dicecount\csname c@#1\endcsname}
\makeatother


\newcounter{pippo}

\begin{document}

\setcounter{pippo}{4}

\arabic{pippo}: \weirdalph{pippo}

\setcounter{pippo}{27}

\arabic{pippo}: \weirdalph{pippo}

\setcounter{pippo}{53}

\arabic{pippo}: \dicecount{pippo}

\end{document}

我们用 计算商,也就是插入 的 的\int_div_truncate:nn数量(感谢 Bruno Le Floch)。然后我们计算余数(),通过 将其转换为字符。对于 6 和 ,很容易对其进行修改。z\prg_replicate:nn\int_mod:nn\int_to_alph:n\epsdice

在此处输入图片描述

答案2

我想到了这个 - 不是非常干净的代码,但它可以工作(没有包epsdice,我没有安装它)。

\documentclass{article}

\makeatletter
\newcounter{dicecount}
\newcommand{\setdicesize}[1]{\def\@dicesize{#1}}
\setdicesize{6}
\newcommand{\dice}[1]{%
  \setcounter{dicecount}{#1}%
  \@whilenum \c@dicecount>\@dicesize \do {%
    \texttt{\@dicesize}\addtocounter{dicecount}{-\@dicesize}%
  }%
  \ifnum \c@dicecount>0 \texttt{\number\c@dicecount}\fi
}
\makeatother

\begin{document}
\begin{enumerate}
\item \dice{1}
\item \dice{2}
\item \dice{3}
\item \dice{4}
\item \dice{5}
\item \dice{6}
\item \dice{7}
\item \dice{8}
\item \dice{9}
\item \dice{10}
\item \dice{11}
\item \dice{12}
\item \dice{13}
\item \dice{14}
\item \dice{15}
\item \dice{16}
\item \dice{17}
\item \dice{18}
\end{enumerate}
\end{document}

相关内容