这个 MWE 确实起作用了,这告诉我 let 操作被正确定义。
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\path
let \n1 ={2}
in
coordinate [label= $N$] (B) at (\n1,\n1); %to show that \n1 does work as a value
\draw (0,0) arc [start angle=0, end angle=180, radius=2];
\end{tikzpicture}
\end{document}
\end{document}
下面的代码与上面的不同之处在于使用 \n1 来指定半径。但它返回了错误消息
! 未定义控制序列。\pgfk@/tikz/x 半径 ->\n
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\path
let \n1 ={2}
in
coordinate [label= $N$] (B) at (\n1,\n1); %to show that \n1 does work as a value
\draw (0,0) arc [start angle=0, end angle=180, radius=\n1];
\end{tikzpicture}
\end{document}
\end{document}
正如@Zarko 所说,第一张图片的语法并不完全符合手册的建议。但是,对于我来说,这种语法在特定的 tikzpicture 中工作正常,并且 let 操作要复杂得多。就是这个。请注意,let 操作之后的命令在 \p1 到 \p4 上使用基于的事物成功(所以我认为 savenumber 可能对我有用,如果我弄清楚如何操作的话),但 arc 命令不允许我使用值 \n1:
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\[
\begin{tikzpicture}
\path % Given endpoints \p1 and \p2 and the placement of the divide everything but the semicircle radius is calculated
let
\p1 = (-2.2,0),
\p2 = (2.2,0),
\p{divide} = ($ (\p1) !.7! (\p2) $),
\p{center} = ($ (\p1) !.5! (\p2) $), % center of the semicircle
\p3 = ($ (\x1,{\x{divide}-\x2}) $),
\p4 = ($ (\x{divide},\y3) $)
in
coordinate [label= left:$B$] (B) at (\p1)
coordinate [label= right:$F$] (F) at (\p2)
coordinate [label= left:$C$] (C) at (\p3)
coordinate [label= right:$D$] (D) at (\p4)
coordinate [label= below right:$E$] (E) at (\p{divide})
coordinate (M) at (\p{center}); %the midpoint M is not labelled in the drawing
\path [name path=R] (E) -- ($(E) + 1*(0,2.5)$);%upper bound here is set by hand
\draw (F) [name path=P] arc [start angle=0, end angle=180, radius=2.2];%radius here is set by hand
\draw [name intersections={of=P and R, by={[label=above:$H$]H}}];
\draw[dashed] (0,0) -- (H);
\draw (B) -- (F) -- (H) --(B) -- (C) -- (D) -- (H); %all the solid straight lines
\end{tikzpicture}
\]
\end{document}
我需要这张 tikzpicture 用于出版物。我可以按照我目前编写的方式使用它并发布。但这个版本不够优雅,因为当我想稍微修改一下以查看哪个比例看起来最好时,我必须手动重新计算一个半径。如果有一种方法可以让 arc 以与“坐标”相同的方式接受 \n1 作为半径值,使用 let 的这个语法,那么我会使用它。
答案1
你可以用各种方法将你喜欢的任何值保存到宏中。你不需要破解任何 let 的机制。但你的图片也非常算法化,所以你不需要保存太多中间值,这里有一个替代方法
\documentclass[tikz]{standalone}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}[]
\def\myradius{2.2}
\draw[name path=P] (0,0) coordinate(o)+(\myradius,0) coordinate[label=0:$F$] (f)
arc(0:180:\myradius) coordinate[label=180:$B$](b) --($(b)!0.7!(f)$)
coordinate[label=-45:$E$] (e) --cycle;
\draw(e)--($(e)!1!-90:(f)$) coordinate[label=0:$C$] -| (b) coordinate[label=180:$D$,pos=0.5];
\path [name path=R,overlay] (e) -- ++(0,1.5*\myradius);
\draw [dashed,name intersections={of=P and R, by=h}] (h)coordinate[label=60:$H$] -- (o);
\draw (b) -- (h) -- (f) (e) -- (h);
\end{tikzpicture}
\end{document}
现在两个变量,\myradius
并0.7
定义了整个画面。
答案2
您的语法有误。请尝试以下操作:
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\draw let \n1 = {2} in
coordinate[label=above:$N$] (B) at (\n1,\n1)
(0,0) arc [start angle=0, end angle=180, radius=\n1];
\end{tikzpicture}
\end{document}
编辑: 来自 TikZ 手册:
请注意,let 操作的效果仅限于 let 操作的主体。
附录: 我确实很难理解是什么导致了你的问题。根据我的猜测,我制作了以下 MWE,它应该表明,你可以按照以下方式在你的图像中使用我的第一个 MWE(它只是虚拟案例,应该只是扩展到你的真实图像):
\documentclass[tikz,border=3mm]{standalone}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}
\draw[name path=A]
let \n1 = {2} in
coordinate[label=above:$N$] (B) at ( \n1,\n1)
coordinate[label=below:$O$] (O) at (-\n1,0)
(0,0) arc [start angle=0, end angle=180, radius=\n1];
\draw[name path=C] (O) -- (B);
\fill[red,
name intersections={of=A and C, by={D}}] (D) circle (2pt)
node[right=2mm] {intersection D};
\fill[gray] (O) circle (2pt) (B) circle (2pt);
\end{tikzpicture}
\end{document}