使用 \foreach 循环时出现问题

使用 \foreach 循环时出现问题

我对 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. 坐标计算(1, 2) + (3, 4)仅适用于calc库及其$语法。

  2. \tkzDrawSemiCircle与所有\tkz…命令一样)期望其参数中包含命名坐标。

    \tkzDefPoint您可以用或预先定义它们\tkzDefPoints

  3. \tkzDefPoint根本不接受坐标计算。

  4. 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}

输出

在此处输入图片描述

相关内容