我正在使用 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}
即使你不懂 Python,代码也不太难读。掌握基本的 Python 命令也不难。你几乎肯定能找到以下行:A和b被选为 -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,为正。else
当b是正数,+
排版也是正数,b,为正,被插入。
Sage 不是 LaTeX 的一部分,因此,要么 1. 下载到您的计算机,然后让其与 LaTeX 配合使用(有时会出现问题),要么 2. 打开一个免费的可钙帐户。复制/粘贴后,5 分钟内即可完成。编辑:\sage{}
用于获取数值数据、\sagestr{}
获取字符串数据、\sageplot{}
绘制图表。在此站点搜索该软件包的众多应用程序sagetex
。
答案2
每次调用时,您都会调用一个新的随机整数\a
。
这是使用 的不同方法expl3
。我更喜欢使用 ,而不是使用变量的短命令,因为这可能会覆盖重要的命令(\def\c{...}
例如,从不执行 )\rv{<name>}
。
值-1
、0
和1
被丢弃,因为它们对于预期的应用程序来说不方便。
\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
为负只是为了测试代码。