覆盖 nimsticks 包无法按预期工作

覆盖 nimsticks 包无法按预期工作

nimsticks是一个使绘制 nim 游戏更容易的包。例如,\nimgame{5,3,4}分别生成 5、3、4 根木棒的三堆。

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{nimsticks}
\title{}
\author{}
\date{}
\begin{document}

\nimgame{5,3,4}

\end{document}

可以覆盖该命令\onenimstick以将默认棍棒替换为自定义形状。我通过添加以下代码行将棍棒替换为星形表情符号。

\renewcommand{\onenimstick}{\node at (0,\lift) {\twemoji[height=1cm]{star}};}

这将用星星替换默认的棍棒,并为每个棍棒添加一个小的水平变化。但是,我想通过旋转它们来增加一点随机性,所以我添加了 rng。

\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\rng}{\pgfmathrandom{0,90}}
\renewcommand{\onenimstick}{\node at (0,\lift) {\twemoji[height=1cm,angle=\rng]{star}};}

最终的代码是:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{nimsticks}

\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\rng}{\pgfmathrandom{0,90}}
\renewcommand{\onenimstick}{\node at (0,\lift) {\twemoji[height=0.3cm,angle=\rng]{star}};}

\title{}
\author{}
\date{}
\begin{document}

\nimgame{5,3,4}

\end{document}

Undefined control sequence不幸的是,当我尝试添加 rng 时出现错误。前两个步骤工作正常。我的 rng 代码有什么问题?

答案1

与许多pgfmath操作一样,\pgfmathrandom它仅执行操作,而不显示结果。为此,\pgfmathresult使用宏,它始终包含最近\pgfmathXXX调用的值。因此,要获取实际值,您需要\pgfmathrandom{x,y}\pgfmathresult,或者使用问题中定义的宏\rng\pgfmathresult

在这个特殊情况下,angle=需要的是具体值,而不是一系列处理。这意味着和都angle=\rng\pgfmathresult不起作用。为了将随机数解耦\newcommand{\rng}{\pgfmathrandom{0,90}\pgfmathresult}angle=\rng一代来自用法您可以\rng在节点开始时首先调用,然后将其用作\pgfmathresultangle=

梅威瑟:

\documentclass{article}
\usepackage{tikz}
\usepackage{nimsticks}
\usepackage{twemojis}

\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\rng}{\pgfmathrandom{0,90}}
\renewcommand{\onenimstick}{\node at (0,\lift) {\rng\twemoji[height=0.3cm,angle=\pgfmathresult]{star}};}

\begin{document}

\nimgame{5,3,4}

\end{document}

结果:

在此处输入图片描述

相关内容