为什么弧不接受 \n1 作为半径?

为什么弧不接受 \n1 作为半径?

这个 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}

现在两个变量,\myradius0.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}

在此处输入图片描述

相关内容