我想画 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-pattern
Torbjø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}