以下是我的图的 MWE:
\documentclass{article}
\usepackage{caption}
\usepackage{pgf,tikz}
\usetikzlibrary{arrows,shapes,calc,intersections,through,backgrounds}
\begin{document}
\begin{figure}[b]
\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1cm,y=1cm]
\coordinate (a) at (1,4);
\coordinate (p) at (1,5);
\draw(a) let \p1 = ($ (a) - (p) $) in circle (\pgfmathparse{veclen(\x1,\y1) * 3}\pgfmathresult);
\end{tikzpicture}
\end{figure}
\end{document}
我收到以下错误:
! Incomplete \iffalse; all text was ignored after line 12.
我不确定这里的问题是什么——如果能得到一些帮助我将非常感激!
答案1
您不需要\pgfmathparse..\pgfmathresult
。请注意以下代码中计算周围的额外一对括号,它将函数的括号隐藏veclen
在圆半径的分隔符中。
\documentclass[border=1mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\coordinate (a) at (1,4);
\coordinate (p) at (1,5);
\draw(a) let \p1 = ($ (a) - (p) $) in
circle ({veclen(\x1,\y1)*3});
\fill (a) circle[radius=1pt] node[right]{a};
\fill (p) circle[radius=1pt] node[right]{p};
\end{tikzpicture}
\end{document}
答案2
请勿\pgfmathparse
在 TikZ 的坐标或其他值中使用。
无论如何,TikZ 都会通过 PGF 数学解析几乎所有内容,这也是它不起作用的原因,因为您不能使用不完全可扩展的内容。
你可以使用
\draw(a) let \p1 = ($ (a) - (p) $) in \pgfextra{\pgfmathparse{veclen(\x1,\y1) * 3}}
circle [radius=\pgfmathresult pt];
但其他人已经给出了比这更好的解决方案。
我想提出另一个选择:through
图书馆。
它只有一个目的:通过特定点绘制一个圆。使用这个calc
库,你现在可以编写
\node[draw] at (a) [circle through=($(a)!3!(p)$)] {};
效果相同。
如果没有这个calc
库,这个可以简化为
\node[draw] at (a) [circle through=(p), scale=3] {};
代码
\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{through,calc}
\begin{document}
\begin{tikzpicture}[thick, dot/.style={shape=circle,inner sep=+0pt, minimum size=+2pt, fill, label={#1}}]
\coordinate[dot=a] (a) at (1,4);
\coordinate[dot=p] (p) at (1,7);
\foreach \cnt[count=\Cnt] in {.25, .5, 1, 1.5, 2}
\node[draw, color=red!\Cnt 0!blue, label={[inner sep=+1pt, red!\Cnt 0!blue]below:$ f = \cnt$}] at (a) [circle through=($(a)!\cnt!(p)$)] {};
\end{tikzpicture}
\begin{tikzpicture}[thick, dot/.style={shape=circle,inner sep=+0pt, minimum size=+2pt, fill, label={#1}}]
\coordinate[dot=a] (a) at (1,4);
\coordinate[dot=p] (p) at (1,5);
\node[draw] at (a) [circle through=(p), scale=3] {};
\end{tikzpicture}
\end{document}
输出
答案3
既然您已经let..in
在代码中使用了语法,为什么不继续使用该语法来计算所需的半径(将其存储在中\n1
),而不是使用\pgfmathparse/\pgfmathresult
?
我的意思如下:
\begin{tikzpicture}
\coordinate (a) at (1,4);
\coordinate (p) at (1,5);
\foreach \p in {a,p} \fill[red] (\p) circle(1mm);
\draw[very thick]
let \p1 = ($ (a) - (p) $),
\n1 = {3*veclen(\x1,\y1)}
in (a) circle (\n1);
\end{tikzpicture}
答案4
使用 PSTricks
单身的
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\begin{pspicture}[showgrid=true](-5,-5)(5,5)
\pstGeonode(0,0){X}(0,2){Y}
\pstCircleOA[DistCoef=2,Radius=\pstDistAB{X}{Y}]{X}{<ignored>}
\end{pspicture}
\end{document}
多种的
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\begin{document}
\multido{\r=.5+.1}{15}{%
\begin{pspicture}[showgrid=true](-5,-5)(5,5)
\pstGeonode(0,0){X}(0,2){Y}
\pstCircleOA[DistCoef=\r,Radius=\pstDistAB{X}{Y}]{X}{<ignored>}
\end{pspicture}}
\end{document}