如何在 LaTex 中除以两个值

如何在 LaTex 中除以两个值

我需要在 LaTex 中将两个值相除,

\newcommand{\x}{30}
\newcommand{\y}{10}

有没有简单的方法可以做到这一点?即

x / y = 3

最好不要使用外部包或冗长的 \newcommand 函数。它需要尽可能简单。此外,我可能需要将浮点数除以整数值。

答案1

我不知道这是否足够,但对于你的例子来说这已经足够了(它需要 eTeX)

\documentclass{scrartcl}
\def\basiceval#1{\the\numexpr#1\relax}
\begin{document}
\def\x{30}
\def\y{10}
\basiceval{\x/\y}
\end{document}

答案2

您绝对应该使用 eTeX\numexpr选项;它很清晰并且几乎所有地方都支持。

不过,如果你对原始的 Knuthian TeX 感兴趣,那么还有算术运算符。对于这四个函数,你可以以一种非常独特且我认为非常巧妙的方式使用 TeX 基元\advance\multiply和:\divide

\documentclass{article}
\begin{document}
\def\x{30}
\def\y{10}
$\x \div \y =$
\newcount\a\a=\number\x
\newcount\b\b=\number\y
\divide\a by\b
\def\x{\the\a}
$\x$
\end{document}

因此,为了说明目的,我们首先打印出我们正在解决的问题:

$\x \div \y =$

接下来我们要做的就是将\x\y(TeX 将其视为字符3010,而不是十进制数 30 和 10)转换为数数值,TeX以十进制数形式查看。因此,我们创建两个计数器\a\b,然后使用以下代码将命令序列的十进制数版本\x和分配给它们:\y

\newcount\a\a=\number\x
\newcount\b\b=\number\y

现在\a\b有了正确的值(30 和 10),我们就可以进行实际的算术运算了:

\divide\a by\b
\def\x{\the\a}

它的作用正如它看起来的那样:它除以\a\b商存储在 中\a。然后我们使用\the指令(另一个 TeX 原语)将 的新值分配给\x,即您之前的控制序列\a。最后,我们打印商:

$\x$

打印内容如下:

使用 TeX 算法的数学方程。

TeX 为四种算术运算提供了三个原语:

  • \advance\a by\b 做加法。
  • \advance\a by-\b 做减法。
  • \multiply\a by\b 做乘法。
  • \divide\a by \b 做除法。

这些都适用于计数器、胶水、木胶和尺寸,您甚至可以混合它们,但是在添加计数器时必须小心,因为可能会失去可拉伸性。

值得注意的是,这些都处理整数除法;您不会得到小数值。另一方面,至少对于dimens,它们在缩放点中工作,这些点非常小,因此粒度非常令人印象深刻。

答案3

这是一个基于LuaLaTeX的解决方案:

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\begin{document}
\newcommand\x{30}
\newcommand\y{10}
\textbackslash x divided by \textbackslash y is \directlua{tex.sprint(\x/\y)}.

2.5 multiplied by 4 is \directlua{tex.sprint(2.5*4)}.
\end{document}

如果你需要做很多简单的除法——以及其他简单的计算——那么创建一个专用的宏可能是一个好主意,比如说,

\newcommand\mycalc[1]{\directlua{tex.sprint(#1)}}

在序言中,以节省在文档正文中输入的内容。请注意,的参数\mycalc不限于除法——所有满足 Lua 语法规则的计算都是允许的。

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\newcommand\mycalc[1]{\directlua{tex.sprint(#1)}}
\begin{document}
\newcommand\x{30}
\newcommand\y{10}

\textbackslash x divided by \textbackslash y  is \mycalc{\x/\y}.

42 divided by $(5\times7)$ is \mycalc{42/(5*7)}.
\end{document}

附录我刚刚注意到 Taco Hoekwater 已经\directlua{tex.sprint(...)在 TeX.SE 上提出了解决方案——请参阅他的回答发帖ConTeXt / e-TeX 实数?

相关内容