每次编译脚本时,我都需要随机更改附加到特定命令的符号。
我曾希望使用 pgffor 包可以实现这一点,如下面的最小示例所示(每次编译时我都尝试重新定义 \add):
\documentclass{article}
\usepackage{fdsymbol}
\usepackage{pgffor}
\newcommand{\add}{\medtriangleright}
\pgfmathsetseed{\number\pdfrandomseed}
\begin{document}
\pgfmathdeclarerandomlist{choices}{{\renewcommand{\add}{\pm}}{\renewcommand{\add}{+}}{\renewcommand{\add}{\cdot}}}
\foreach\x in {1}{
\pgfmathrandomitem{\choice}{choices}
\choice\space
}
$$5\add4$$
\end{document}
但是这不起作用。这很奇怪,因为当我尝试从列表中生成随机数时,这个精确的代码可以正常工作:
\documentclass{article}
\usepackage{fdsymbol}
\usepackage{pgffor}
\newcommand{\add}{\medtriangleright}
\pgfmathsetseed{\number\pdfrandomseed}
\begin{document}
\pgfmathdeclarerandomlist{choices}{{1}{2}{3}}
\foreach\x in {1}{
\pgfmathrandomitem{\choice}{choices}
\choice\space
}
$$5\add4$$
\end{document}
你知道我在这里做错了什么吗?提前致谢。
答案1
除非我误解了你的问题,否则你不需要\renewcommand
宏或\foreach
循环。你也可以在文档中途随机更改运算符。
\documentclass{article}
\usepackage{fdsymbol}
\usepackage{pgf}
\pgfmathsetseed{\number\pdfrandomseed}
\pgfmathdeclarerandomlist{choices}{{\medtriangleright}{\pm}{+}{\cdot}}
\begin{document}
\pgfmathrandomitem{\op}{choices}
\[ 5 \op 4 \]
\pgfmathrandomitem{\op}{choices}
\[ 5 \op 4 \]
\pgfmathrandomitem{\op}{choices}
\[ 5 \op 4 \]
\pgfmathrandomitem{\op}{choices}
\[ 5 \op 4 \]
\end{document}
答案2
你不需要\renewcommand
。
\documentclass{article}
\usepackage{pgffor}
%\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\add}{\pgfmathrandomitem{\choice}{choices}\choice}
\pgfmathdeclarerandomlist{choices}{{\pm}{+}{\cdot}}
\begin{document}
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
\end{document}
一个更加直观的版本expl3
(但还不能与 XeLaTeX 一起使用)。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewExpandableDocumentCommand{\add}{}
{
\clist_rand_item:N \c_matthew_add_symbols_clist
}
\clist_const:Nn \c_matthew_add_symbols_clist { \pm, +, \cdot }
\ExplSyntaxOff
\begin{document}
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
$5\add4$
\end{document}
这个想法具有更多优势,因为它可以在“完全扩展”的环境中使用,而 PGF 版本则不能。