为变量分配静态值

为变量分配静态值

我正在使用 lgc 包来生成随机数。

\usepackage[first=-100, last=100]{lcg}

假设我想写出下面的等式

$$ a x^2 + b =0$$

在哪里

$a,b$ % are random integers ranged in $[-100,100]$

如果 b>0,则“+”号应为“+”(此处仅作为示例设置),否则应为“-”。我输入以下内容:

\def\a{\nbal} $$\a \qquad \a$$
$\nbal x ( \a ) \ifnum\value{\a} <0 {\ } \else {+}\fi \a $

第二行是我的控件。可以看到“\def”充当宏。问题是“如何为变量分配一个可以是静态的值?我被难住了。有什么想法吗?提前谢谢。M 由于我没有设法回答工作示例的请求,我正在编辑:


\documentclass{article}

\usepackage[utf8]{inputenc} 
\usepackage[gen]{eurosym}
\usepackage[x11names]{xcolor,colortbl}
\usepackage[light, oldstyle, largesmallcaps]{kpfonts}
\usepackage{ifthen}
\usepackage[first=-100, last=100]{lcg}
%
\def\nbal{\rand\arabic{rand}}
%
\begin{document}
%
\def\a{\nbal}
\def\b{\nbal}
\def\c{\nbal}
\def\d{\nbal}
%write down what you have
$$\a \qquad \a$$
$\nbal x \ifnum \value{\a} <0 {\ } \else {+}\fi \a $
%
\end{document}

答案1

尽管各种包(例如lgc)都很有用,但它们的范围通常有限,你可能会浪费时间去弄清楚其他细节(在你的情况下,如何避免打印+-ifb是负面的)。解决这个问题的一个简单方法是找到一个更好的工具:sagetex 包让你将数学内容外包给计算机代数系统,智者这恰好让你使用 Python(一种易于理解的编程语言,非常适合处理字符串)。LaTeX、Python 和 Sage 的强大功能将能够帮助你轻松处理几乎任何数学问题。对于你的问题,我们可以尝试以下代码:

\documentclass{article}
\usepackage{sagetex}
\begin{document}
Suppose I have the equation \[ax^2+b=0\] where $a$ and $b$ are random integers 
between $-100$ and $100$, inclusive.
\begin{sagesilent}
a = randint(-100,100)
b = randint(-100,100)
if b<0:
    output = r"\[ %d x^2 - %d = 0\]"%(a,-b)
else:
    output = r"\[ %d x^2 + %d = 0\]"%(a,b)
\end{sagesilent}
For example, if $a = \sage{a}$ and $b = \sage{b}$ then the equation is: 
\sagestr{output}
\end{document}

Cocalc 中运行的输出给出了这个随机二次函数: 在此处输入图片描述

即使你不懂 Python,代码也不太难读。掌握基本的 Python 命令也不难。你几乎肯定能找到以下行:Ab被选为 -100 到 100 之间的随机整数。正如你在问题中观察到的那样,如果b为负数,则符号需要改变。这通过 andif-then-else语句完成。不太容易理解的部分是行output = r"\[ %d x^2 - %d = 0\]"%(a,-b)。%d 表示要将整数放在该位置(%f 表示浮点数,%s 表示字符串)。有两个地方需要整数,%(a,-b) 表示A将在前 %d 个中,并且-b在第二个 %d 中。此行在以下情况下执行:b负号排版是负号后面跟着-b,为正。elseb是正数,+排版也是正数,b,为正,被插入。

Sage 不是 LaTeX 的一部分,因此,要么 1. 下载到您的计算机,然后让其与 LaTeX 配合使用(有时会出现问题),要么 2. 打开一个免费的可钙帐户。复制/粘贴后,5 分钟内即可完成。编辑:\sage{}用于获取数值数据、\sagestr{}获取字符串数据、\sageplot{}绘制图表。在此站点搜索该软件包的众多应用程序sagetex

答案2

每次调用时,您都会调用一个新的随机整数\a

这是使用 的不同方法expl3。我更喜欢使用 ,而不是使用变量的短命令,因为这可能会覆盖重要的命令(\def\c{...}例如,从不执行 )\rv{<name>}

-101被丢弃,因为它们对于预期的应用程序来说不方便。

\documentclass{article}

\ExplSyntaxOn
\NewDocumentCommand{\definerandomvariable}{O{100}O{-100}m}
 {
  % allocate the variable or clear it
  \tl_clear_new:c { l_moon_rv_#3_tl }
  % set the value
  \moon_rv_define:nnn { #2 } { #1 } { #3 }
 }
\NewExpandableDocumentCommand{\rv}{m}
 {
  \tl_use:c { l_moon_rv_#1_tl }
 }
\NewExpandableDocumentCommand{\signedrv}{m}
 {
  \int_compare:nT { \tl_use:c { l_moon_rv_#1_tl } > 0 } { + }
  \tl_use:c { l_moon_rv_#1_tl }
 }

\cs_new_protected:Nn \moon_rv_define:nnn
 {
  \int_set:Nn \l_tmpa_int { \int_rand:nn { #1 } { #2 } }
  \int_compare:nTF { -1 <= \l_tmpa_int <= 1 }
   {% discard values -1, 0 and 1
    \moon_rv_define:nnn { #1 } { #2 } { #3 }
   }
   {% set the value when not -1, 0 or 1
    \tl_set:cx { l_moon_rv_#3_tl } { \int_eval:n { \l_tmpa_int } }
   }
 }
\ExplSyntaxOff

\begin{document}

\definerandomvariable{a}
\definerandomvariable[20][-10]{b}
\definerandomvariable[-10][-100]{c}

$\rv{a} \qquad \rv{a}$

$\rv{b} x \signedrv{a}$

$\rv{b} x \signedrv{c}$

\end{document}

该命令\definerandomvariable有两个可选参数,分别表示上限和下限。默认值分别为100-100

如果是正数,我还提供\signedrv用 + 号打印变量。

在此处输入图片描述

在示例中,c为负只是为了测试代码。

相关内容