我在 TikZ 中使用 sqrt 函数和 draw 时遇到了麻烦。下面是我的代码示例,其中说明了哪些功能有效,哪些功能无效。
可能是什么问题?
\documentclass{standalone}
\usepackage{amssymb,amsfonts,amsmath}
\usepackage{tikz,tkz-euclide}
\usetikzlibrary{arrows,calc,patterns}
\begin{document}
\begin{tikzpicture}
\def\y{1};\draw ($0.5*(\y+4,\y-4)$) -- ($0.5*(\y,\y)$); %WORKS OK
\def\y{1};\draw ($0.5*(\y+4,\y-4)$) -- ($0.5*(\y+{sqrt(\y)},\y)$); %DOES NOT WORK!
\end{tikzpicture}
\end{document}
更新:我发现以下代码变体有效,但我不知道之前的代码有什么问题
\documentclass{standalone}
\usepackage{amssymb,amsfonts,amsmath}
\usepackage{tikz,tkz-euclide}
\usetikzlibrary{arrows,calc,patterns}
\begin{document}
\begin{tikzpicture}
\def\y{1};\draw ($0.5*(\y+4,\y-4)$) -- ($0.5*(\y,\y)$); %WORKS OK
\def\y{1};\draw ($0.5*(\y+4,\y-4)$) -- ($0.5*(\y,\y)+sqrt(\y)*(1,0)$); %WORKS OK!
\end{tikzpicture}
\end{document}
答案1
对中的表达式被吸收为宏参数,但首先必须识别该对:
$0.5*(\y+sqrt(\y),\y)$
第一个)
会被误认为是该对的末尾,但事实并非如此。所以我们需要让它对解析器“隐藏”:
$0.5*({\y+sqrt(\y)},\y)$
第\y+{sqrt(\y)}
一个坐标将具有无效标记,即括号。相反,当将对拆分为$0.5*({\y+sqrt(\y)},\y)$
第一部分的组件时,将是\y+sqrt(\y)
,因为 TeX 在查找参数后会删除一组不需要的括号。