我正在使用随机数生成相对简单的方程式供学生解答。
例如:-5n - 3 = 7
但是当我在方程式中使用随机数和/或命令时,我得到了不想要的间距。它仍然可以使用,但看起来不太好看。
修复此问题最简单的方法是什么?
我猜测该问题与在等式中放入命令有关,但我不确定。
\documentclass{article}
\usepackage{pgf}
\usepackage{pgffor}
\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\InitVariables}
{ \pgfmathrandominteger{\A}{2}{10}
\pgfmathrandominteger{\B}{-10}{10}
\pgfmathtruncatemacro{\B}{\B}
\pgfmathsetmacro{\AbsoluteB}{\ifnum\B<0{int(-1*\B)}\fi}
\pgfmathrandominteger{\Answer}{0}{11}
\pgfmathsetmacro{\C}{int(\A*\Answer + \B)}
}
\setlength{\parindent}{0cm}
\begin{document}
\huge
BAD SPACING ON LEFT SIDE
\InitVariables
$\A x \ifnum\B<0{\B}\else{+\B}\fi = \C$
\InitVariables
$\A x \ifnum\B<0{\B}\else{+\B}\fi = \C$
\vskip 1cm
DESIRED SPACING ON LEFT SIDE
$2x-5=13$
$7x+8=36$
\vskip 1cm
FAILED ATTEMPT TO FIX SPACING
\InitVariables
$\A x \ifnum\B<0{-\AbsoluteB}\else{+\B}\fi = \C$
\InitVariables
$\A x \ifnum\B<0{-\AbsoluteB}\else{+\B}\fi = \C$
\end{document}
提前致谢。 :)
答案1
这里的问题是{+\B}
,使用 和\B
来表示负值,而不是二元-
运算符。 周围的括号+B
会改变其间距,就像您编写 一样\mathord{+\B}
。
在原子中,-B
的排版方式与 类似-2
, 为-
一元运算符, 两边的间距与 相同B
。也就是说,在右侧, 恰好是正确的,但在左侧, 和 之间的间距A
与和{-B}
之间的间距相同。A
B
Bernard 已经发布了一个可行的解决方案,但我认为可以补充一些关于为什么会发生这种情况的解释。
答案2
您必须考虑到左侧的+
或–
为 *binary {}` 来解决您的问题:symbols, that require something on either side, so you just have to add an empty
\documentclass{article}
\usepackage{pgf}
\usepackage{pgffor}
\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\InitVariables}
{ \pgfmathrandominteger{\A}{2}{10}
\pgfmathrandominteger{\B}{-10}{10}
\pgfmathtruncatemacro{\B}{\B}
\pgfmathsetmacro{\AbsoluteB}{\ifnum\B<0{int(-1*\B)}\fi}
\pgfmathrandominteger{\Answer}{0}{11}
\pgfmathsetmacro{\C}{int(\A*\Answer + \B)}
}
\setlength{\parindent}{0cm}
\begin{document}
\huge
BAD SPACING ON LEFT SIDE
\InitVariables
$\A x \ifnum\B<0{\B}\else{+\B}\fi = \C$
\InitVariables
$\A x \ifnum\B<0{\B}\else{+\B}\fi = \C$
\vskip 1cm
DESIRED SPACING ON LEFT SIDE
$2x-5=13$
$7x+8=36$
\vskip 1cm
SUCCESSFUL ATTEMPT TO FIX SPACING
\InitVariables
$\A x \ifnum\B<0{{}-\AbsoluteB}\else{{}+\B}\fi = \C$
\InitVariables
$\A x \ifnum\B<0{{}-\AbsoluteB}\else{{}+\B}\fi = \C$
\end{document}
答案3
TeX 条件语句的语法没有需要在真假枝周围加支架。更准确地说,加支架可能会造成伤害!
有什么害处?嗯,$1{+2}$
与 不同$1+2$
,因为 前者{+2}
被视为单个单位,而符号被视为一元的,因此附加在数字上,因为在子公式中它前面没有任何内容。
如果是负数,则需要\B
按原样打印,因为它已经配备了符号;+
如果是正数,则输出 a。
我将添加如何在它为零时不打印它,但您可以自己决定。
\documentclass{article}
\usepackage{pgf}
\usepackage{pgffor}
\pgfmathsetseed{\number\pdfrandomseed}
\newcommand{\InitVariables}{%
\pgfmathrandominteger{\A}{2}{10}%
\pgfmathrandominteger{\B}{-10}{10}%
\signedvar{\B}{\B}%
\pgfmathrandominteger{\Answer}{0}{11}%
\pgfmathsetmacro{\C}{int(\A*\Answer + \B)}%
}
\newcommand{\signedvar}[2]{%
\edef#1{%
\ifnum#1=0 \else
\ifnum#1<0 \else +\fi #1%
\fi
}%
}
\setlength{\parindent}{0cm}
\begin{document}
\InitVariables
$\A x \B = \C$
\InitVariables
$\A x \B = \C$
\InitVariables
$\A x \B = \C$
\InitVariables
$\A x \B = \C$
\end{document}
\signedvar
如果您想在文本中保留“无符号”值,该宏有两个参数。