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}