我想根据 来缩放一条线\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
。