TikZ 中的乘法规则与标准 TeX 中的乘法规则是否不同?

TikZ 中的乘法规则与标准 TeX 中的乘法规则是否不同?

我想根据 来缩放一条线\figscale这里据说下面的语法在一般情况下应该可以工作,但在这个图中却不行。

如图所示,数字只是连接到,例如,-0.53cm而不是-0.5 * 3cm = 1.5cm,尽管我想将它们相乘。写作-0.5*\figscale效果很好。

为什么在关联不适用于此?

\def \figscale{3cm}

\begin{figure}
    \centering
    \begin{tikzpicture}
        \draw (-1.0,2) -- (0,2) node[midway, anchor=south] {$A$};
        \draw (-0.5\figscale,1) -- (0,1) node[midway, anchor=south] {$B$};
        \draw (-1.0\figscale,0) -- (0,0) node[midway, anchor=south] {$C$};
    \end{tikzpicture}
\end{figure}

在此处输入图片描述

答案1

在链接问题的答案中,\textwidth使用了,它是 TeX 的长度参数,因此语法规则允许4\textwidth(或任何十进制数而不是 4)。

当 TeX 寻找长度时,它会在过程中扩展标记。由于它期望长度,并且已经看到,-0.5它会扩展下一个标记,这可能会导致继续十进制数字或以长度寄存器开头的内容。您的情况是前者,因为\figscale扩展为3cm

-0.53cm

是 TeX 的完美长度规范。情况有点复杂,因为我们处于 TikZ 坐标的中间,这解释了为什么-0.5*\figscale有效。

如果你想要一个像维度一样的宏,请使用

\newcommand{\figscale}{\dimexpr3cm\relax}

因为 TeX 会将其转换\dimexpr3cm\relax为(无名的)内部长度寄存器。尽管如此,你最好使用

\newlength{\figscale}
\setlength{\figscale}{3cm}

答案2

在“变量”前面加上数字作为前缀,例如,4\textwidth 仅有的如果变量是维度或跳跃或框维度,则有效。这与通常的行为TeX一致。TeX

正如最新的 PGF 手册所述(第 88.1 节“解析表达式的命令”)

解析器将识别 TEX 寄存器和盒子维度,因此可以解析 \mydimen、0.5\mydimen、\wd\mybox、0.5\dp\mybox、\mycount\mydimen 等

数学解析器用以下方式扩展每个表达式\edef 解析,因此上面给出的 MWE-0.5\figscale变成了-0.53cm被评估为-15.07993(点)而不是所需的-42.67912

相关内容