TikZ 如何使用 $ 计算相对坐标?

TikZ 如何使用 $ 计算相对坐标?

以下代码\node at ($(tag-node) + (2.5,0)$)允许通过计算来放置节点$(tag-node) + (2.5,0)$

TikZ 是否通过改变 catcode 来做到这一点$

答案1

不,TiZ 不会改变\catcode$。事实上,如果你尝试自己改变 TikZ 的 的,\catcode将会$出现错误:

! Package tikz Error: Sorry, some package has redefined the meaning of the math
-mode dollar sign. This is incompatible with tikz and its calc library and migh
t cause unrecoverable errors.

TikZ 假设这$是一个数学移位字符,并使用解析器来检查。其中tikz.code.tex有以下代码:

\def\tikz@@@scan@@absolute#1({%
  \tikz@ensure@dollar@catcode
  \pgfutil@ifnextchar{$}%$
  {\tikz@parse@calculator#1(}
  {\tikz@scan@no@calculator#1(}%
}%

如果 ,则会\tikz@ensure@dollar@catcode导致上述错误\catcode`$ != 3。然后\pgfutil@ifnextchar{$}检查 后面的字符是否(为,并在这种情况下$使用。\tikz@parse@calculator

其中tikzlibrarycalc.code.tex有的定义\tikz@parse@calculator

\def\tikz@parse@calculator#1(${%$
  \def\tikz@cc@command{#1}%
  \begingroup%
    %
    % Parse main computation. It's a series of optional factors in front
    % of coordinates.
    %
    \pgf@xa=0pt% We accumulate the result in here.
    \pgf@ya=0pt%
    \tikz@cc@parse+%
}%

\def\tikz@cc@parse{%
  \pgfutil@ifnextchar${%$
    % Ok, we found the end...
    \tikz@cc@end%
  }
  {\pgfutil@ifnextchar+{%
      % Ok, we found a coordinate...
      \tikz@cc@add%
    }{%
      \pgfutil@ifnextchar-{%
        \tikz@cc@sub%
      }{%
        \tikzerror{+ or - expected}%
        \tikz@cc@end$%$
      }%
    }%
  }%
}%

\tikz@parse@calculator将使用\tikz@cc@parse来解析表达式,最终检查结尾$并完成计算。所有这些都假设\catcode`$=3

相关内容