在我之前的一个帖子,我问过如何为基本算术创建单独的练习和解决方案页面。我现在正在尝试对简单三项式进行因式分解,但它不起作用,我不确定为什么。我觉得代码的关键部分——定义练习页面和解决方案页面——基本相同,但它们显然不是,因为我的代码无法编译。
我确实知道,如果我注释掉主体中的行\FactoredPage
,它就会编译,但我仍然会收到小错误消息。
发生了什么?
\documentclass{article}
\usepackage{pgf}
\usepackage{pgffor}
\setlength{\parindent}{0pt}
\pagestyle{empty}
\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\InitVariablesSTA} %all positives
{%
\pgfmathsetmacro{\avar}{int(1)}
\pgfmathsetmacro{\bvar}{int(random(1,11))}
\pgfmathsetmacro{\cvar}{int(1)}
\pgfmathsetmacro{\dvar}{int(random(1,11))}
\pgfmathsetmacro{\Avar}{int(\avar*\cvar)}
\pgfmathsetmacro{\Bvar}{int(\avar*\dvar+\bvar*\cvar)}
\pgfmathsetmacro{\Cvar}{int(\bvar*\dvar)}
}
\newcommand{\STA}
{%
\InitVariablesSTA%
\newcommand{\factored}{\((x+\bvar)(x+\dvar)\)}%
\newcommand{\expanded}{\(x^2+{\Bvar}x+\Cvar\)}%
}
\newcommand{\FactoredPage}{}
\newcommand{\ExpandedPage}[1]
{%
\foreach \x in {1,...,#1}
{%
\STA \expanded \par
\xdef\FactoredPage{\FactoredPage \factored \par}%
}
}
\begin{document}
\ExpandedPage{10}
\FactoredPage
\end{document}
答案1
宏\(
和\)
不生存\xdef
。使用$
:
\newcommand{\STA}
{%
\InitVariablesSTA
\newcommand{\factored}{$(x+\bvar)(x+\dvar)$}%
\newcommand{\expanded}{\(x^2+{\Bvar}x+\Cvar\)}%
}
您可能会使用\protected@xdef
,因此\(
也\)
可能使用;另一种方法更简单。
答案2
以下是您需要做的。但无需任何 pgf(或类似)包。仅使用原语和纯 TeX 宏:
\input random
\newcount\tmpnum \newcount\loopnum
\randomi=1 % fixed random sequence (independent of time of document processing)
\parindent=0pt
\def\ExpandedPage#1{%
\def\FactoredPage{}\loopnum=0
\loop
\advance\loopnum by1
\preparepages
\ifnum\loopnum<#1 \repeat
}
\def\preparepages{\par
\setrannum\tmpnum{1}{10} \edef\bvar{\the\tmpnum}
\setrannum\tmpnum{1}{10} \edef\dvar{\the\tmpnum}
\tmpnum=\bvar \advance\tmpnum by\dvar \edef\Bvar{\the\tmpnum}
\tmpnum=\bvar \multiply\tmpnum by\dvar \edef\Cvar{\the\tmpnum}
$x^2 + \Bvar x + \Cvar$\par
\edef\FactoredPage{\FactoredPage$(x+\bvar)(x+\dvar)$\par}
}
\ExpandedPage{10}
\bigskip
\FactoredPage
\bye