![Как генерировать случайные величины и использовать их в вычислениях в pdflatex](https://rvso.com/image/281462/%D0%9A%D0%B0%D0%BA%20%D0%B3%D0%B5%D0%BD%D0%B5%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D1%8B%D0%B5%20%D0%B2%D0%B5%D0%BB%D0%B8%D1%87%D0%B8%D0%BD%D1%8B%20%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D0%B8%D1%85%20%D0%B2%20%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F%D1%85%20%D0%B2%20pdflatex.png)
Я в основном пытаюсь создать несколько версий рабочего листа, каждый с разными значениями для переменных в каждом вопросе. Чтобы сделать это, я определяю случайные переменные, затем каждый раз, когда я компилирую, значения меняются, и я печатаю «новую» версию рабочего листа.
Я понимаю, как создавать случайные величины, используя \pgfmathsetseed{\pdfrandomseed}
и определяя мои переменные в желаемых диапазонах, например:\def\A{pgfrandom{1,10}\pgfmathresult}
Проблема, с которой я сталкиваюсь, заключается в том, что я хочу сгенерировать ответ для каждой задачи в конце рабочего листа. Но он хочет выполнить расчет для ответа с другим случайным значением, чем то, которое было сгенерировано в исходном вопросе.
например, если я скажу
\def\A{pgfrandom{1,10}\pgfmathresult}
\def\B{pgfrandom{10,20}\pgfmathresult}
\def\answer{\A + \B, \pgfmathresult}
и я задаю вопрос:
What is \A + \B?
\answer
Это произведет что-то вроде...
What is 2 + 12?
5 + 19, 24
Итак, как мне заставить его отобразить ответ а) без отображения самого вычисления (т. е. 2 + 12) и б) как мне заставить его не генерировать заново новую случайную величину при вычислении ответа?
Извините, надеюсь, мои вопросы понятны. Я новичок во всем этом. Любая помощь приветствуется. Спасибо!
решение1
Исходя из вашего вопроса, вы могли бы сделать следующее:
Код
\documentclass{article}
\usepackage{pgf}
\pgfmathsetseed{\number\pdfrandomseed} % provide seed for pseudo random generator
% (change to constant, to get the same random numbers on every time compiling)
% new command to init variables
\newcommand\initVariables{%
\pgfmathsetmacro{\A}{random(1,10)}%
\pgfmathsetmacro{\B}{random(10,20)}%
}
\newcommand\answer{\pgfmathprint{int(\A + \B)}} % define command to calculate result
\begin{document}
\initVariables % initialize variables (do this every time you need new numbers)
What is $\A + \B$?
Result is \answer
\end{document}
Результат
Сколько будет 2 + 12?
Результат 14
Веселитесь со слоями ;)
Вы можете использовать слои, чтобы скрыть ответ, пока не будет включен слой решения (вы этого не просили, так что это просто для развлечения).
\documentclass{article}
\usepackage{pgf}
\usepackage{ocg-p}
\pgfmathsetseed{\number\pdfrandomseed} % provide seed for pseudo random generator
% new command to init variables
\newcommand\initVariables{%
\pgfmathsetmacro{\A}{random(1,10)}%
\pgfmathsetmacro{\B}{random(10,20)}%
}
\newcommand\answer{\pgfmathprint{int(\A + \B)}} %define command to calculate result
\begin{document}
\initVariables%initialize variables (do this every time you need new numbers)
What is $\A + \B$?
Result is
\begin{ocg}{result layer}{1}{0}
\answer
\end{ocg}
\end{document}
решение2
Решение sagetex
с использованиемМудрец. Настройка переменных в sagesilent
режиме. Доступ к переменным в документе через \sage
команду во время набора текста.
\documentclass[12point]{article}%
\usepackage{sagetex}% use Sage for it's math ability
\pagestyle{empty} % remove the page numbers
\begin{document}
\begin{sagesilent}
var('x')
a = Integer(randint(1,9))
b = Integer(randint(1,9))
\end{sagesilent}
% *********** END DEFINE VARIABLES ****************
\noindent What's $\sage{a}+\sage{b}$? $\sage{a}\times\sage{b}$? $\sage{a}\div\sage{b}$?\\
Answer: $\sage{a}+\sage{b}=\sage{a+b}$, $\sage{a}\times\sage{b}=\sage{a*b}$ and $\sage{a}\div\sage{b}=\sage{a/b}$\\
You can get a decimal for the division $\sage{a}\div\sage{b}\approx\sage{(a/b).n(digits=5)}$
\end{document}
Вот вывод, запущенный вОблако Sagemath: