我对 LaTeX 还很陌生,无法理解 foreach 循环。
我想在一些选定的点上画一个网格和一些半圆。
这是我的最小的非工作示例:
\documentclass[10pt, a4paper]{article}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\draw[very thick] (0,0) grid (10,8);
\foreach \i in { (1,0.5), (5,0.5)} { \tkzDrawSemiCircle(\i, \i+(0,-0.5)) };
\end{tikzpicture}
\end{document}
据我了解,\i+(0,-0.5)) 表示位于当前 \i 定义的点下方 0.5 个单位处的点。但是当我尝试运行它时,我得到了“Package pgf 错误:没有名为‘(1,0.5)+(0,-0.5’ 的形状是已知的。我想我的语法一定有问题,但我找不到我的错误。
我读过 tkz-euclide 文档,我想知道我是否不必已经定义并命名我想在 \tkzDrawSemiCircle 中使用的点。在这种情况下,我如何使用 \foreach 来做到这一点?
知道我哪里做错了吗?提前谢谢!
答案1
坐标计算
(1, 2) + (3, 4)
仅适用于calc
库及其$
语法。(
\tkzDrawSemiCircle
与所有\tkz…
命令一样)期望其参数中包含命名坐标。\tkzDefPoint
您可以用或预先定义它们\tkzDefPoints
。但
\tkzDefPoint
根本不接受坐标计算。TeX 很贪婪,不匹配括号。
在这种情况下,最简单的方法似乎是用普通的 TikZ 定义坐标然后使用\tkzDrawSemiCircle
它们。
由于您使用\i
,()
因此需要使用
\expandafter\tkzDefPoint\i{origin}
% or
\path \i coordinate (origin);
% or
\coordinate[at=\i](origin);
自从
\coordinate (origin) at \i;
不起作用。
calc
如果其中一个坐标(包括)()
在宏中,则库也不喜欢它,因此也($\i+(0,-0.5)$)
不起作用,但争论的
\coordinate (through) at ([shift=\i]0,-0.5);
确实如此。shift
变换与加法相同。
然后你可以用
\tkzDrawSemiCircle(origin,through)
代码
\documentclass[tikz]{standalone}
%\documentclass[10pt, a4paper]{article}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\draw[help lines] (0,0) grid (10,8);
\foreach \i in {(1,0.5), (5,0.5)}{
% \expandafter\tkzDefPoint\i{origin}
% \path \i coordinate (origin);
\coordinate[at=\i](origin);
\coordinate (through) at ([shift=\i] 0,-0.5);
\tkzDrawSemiCircle(origin,through)
}
\end{tikzpicture}
\end{document}