使用 tikz 绘制多条水平线

使用 tikz 绘制多条水平线

我想画 5 条水平线,每条长度为 0.5 厘米,间隔为 0.2 厘米。我有以下代码,但是,我没有得到 5 条单独的线,而是得到了一条长连续线。可能是什么问题?

\documentclass{article}
\usepackage{tikz}
\usepackage{pgfmath}

\title{Horizontal Lines}

\begin{document}
\begin{tikzpicture}
\begin{scope}

\draw[-] (0,0) -- coordinate (a1) (0,0); %Draw first line

\foreach \x in {2,3,4,5}{
    %Compute next starting point. 0.7 = 0.5 (line length) + 0.2 (line spacing)
    \pgfmathparse{0 + (\x-1) * 0.7} 
    \draw[-] (\pgfmathresult,0) -- coordinate (a\x) (\pgfmathresult+0.5,0);
}
\end{scope}


\end{tikzpicture} 

\end{document}

答案1

问题可能是对\pgfmathresult? 的结果进行进一步计算。尽管dash-patternTorbjørn 提出了另一个想法(我认为比 OP 的方法更具可读性),那就是 TikZcalc

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
    \begin{tikzpicture}
        \foreach \x in {0,1,2,3,4}{
            \draw (.7*\x,0) -- coordinate(a\x) (.5+.7*\x,0);
        }
    \end{tikzpicture}
\end{document}

答案2

我没有立即发现哪里出了问题,但如果您将计算保存到宏中并改用该宏,它就会正常工作。但是,执行相同操作的更简洁的方法是使用自定义dash pattern

\documentclass[border=2mm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}


\draw (0,0) -- coordinate (a1) (0.5,0); %Draw first line

\foreach \x in {2,3,4,5}{
    %Compute next starting point. 0.7 = 0.5 (line length) + 0.2 (line spacing)
    \pgfmathsetmacro\tmp{0 + (\x-1) * 0.7} 
    \draw (\tmp,0) -- coordinate (a\x) (\tmp+0.5,0);
}

\draw [dash pattern={on 0.5cm off 0.2cm}] (0,0.5) -- (5*0.7,0.5);


\end{tikzpicture} 

\end{document}

在此处输入图片描述

答案3

您太迟了,无法获取 的正确值\pgfmathresult。当您引用它时,TikZ 已经使用了大量数学运算并将其存储在 中\pgfmathresult。因此,如果您想进行一些计算,几乎总是需要将表达式\pgfmathparse{....}和结果\pgfmathresult背对背地保存。

例如这里

\begin{tikzpicture}
\draw[-] (0,0) -- coordinate (a1) (0,0); %Draw first line

\foreach \x in {2,3,4,5}{
    %Compute next starting point. 0.7 = 0.5 (line length) + 0.2 (line spacing)
    \pgfmathparse{(\x-1)*0.7}
    \draw[] (\pgfmathresult,-\x) node {\pgfmathresult} --  
            (\pgfmathresult+0.5cm,\x) node[left] {\pgfmathresult};
}
\end{tikzpicture}

在此处输入图片描述

我们可以看到谁劫持了计算,这是第二个坐标计算。要解决这个问题,你需要在 TikZ 尝试进行任何计算之前将物体移近,或者你可以通过 将结果保存到你的宏中\pgfmathsetmacro<macro name>{expression}。为此,我们需要暂停路径解析

\begin{tikzpicture}
\draw[-] (0,0) -- coordinate (a1) (0,0); %Draw first line

\foreach \x in {2,3,4,5}{
    \draw[] \pgfextra{\pgfmathparse{(\x-1)*0.7}} (\pgfmathresult,0)  -- ++ (0.5,0);
}
\end{tikzpicture}

在此处输入图片描述

或者更好的是,你可以把它留给foreach

\begin{tikzpicture}
\draw[-] (0,0) -- coordinate (a1) (0,0); %Draw first line
\foreach \x[evaluate=\x as \xm using {(\x-1)*0.7}] in {2,3,4,5}{
    \draw[-] (\xm,0) -- coordinate (a\x) (\xm+0.5,0);
}
\end{tikzpicture} 

相关内容