![覆盖 nimsticks 包无法按预期工作](https://linux22.com/image/455819/%E8%A6%86%E7%9B%96%20nimsticks%20%E5%8C%85%E6%97%A0%E6%B3%95%E6%8C%89%E9%A2%84%E6%9C%9F%E5%B7%A5%E4%BD%9C.png)
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
在节点开始时首先调用,然后将其用作\pgfmathresult
值angle=
。
梅威瑟:
\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}
结果: