当我使用 Gonzalos Medinas 的方法时在链接中一切都很好,除了我的圆在 x 方向上似乎偏离了约 0.05。
这是他的代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw (0,-1)--(10,-1);
\node[mark size=3pt,color=red] at (0,-1) {\pgfuseplotmark{*}};
\node[mark size=5pt,color=blue] at (5cm,-1) {\pgfuseplotmark{triangle*}};
\node[mark size=4pt,color=olive] at (10cm,-1) {\pgfuseplotmark{square*}};
\draw[mark=*,mark size=3pt,mark options={color=olive}] plot coordinates {(0,-2)}
-- plot[mark=triangle*,mark options={color=blue}] coordinates {(5cm,-2)}
-- plot[mark=square*,mark size=4pt,mark options={color=red}] coordinates {(10cm,-2)};
\end{tikzpicture}
\end{document}
我在我的另一个图中只使用了他的部分代码:稍作修改(更改见下文)
\node[mark size=3pt,color=red] at (0,-1) {\pgfuseplotmark{*}};
\node[mark size=5pt,color=blue] at (2,-1) {\pgfuseplotmark{triangle*}};
\node[mark size=4pt,color=olive] at (1,-1) {\pgfuseplotmark{square*}};
他使用(例如)
\node[mark size=4pt,color=olive] at (10cm,-1) {\pgfuseplotmark{square*}};
当我使用(没有方块!)
\node[mark size=4pt,color=olive] at (1,-1) {\pgfuseplotmark{*}};
这里有什么问题?
答案1
新答案
Paul Gaborit 指出,pgfmanual
特别提到不应在需要文本的情况下(例如)使用pgf
诸如 之类的命令。相反,它们应该在(或)环境中使用。 \pgfuseplotmark
node
pgfpicture
tikzpicture
解决你的方法的一个(丑陋的)方法是在pgfpicture
环境中写入节点参数:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw (-1,0) -- ++(2,0);
\draw (0,-1) -- ++(0,2);
\node[mark size=5pt,color=blue,draw] at (0,0) {%
\begin{pgfpicture}
\pgfuseplotmark{triangle*}
\end{pgfpicture}%
};
\end{tikzpicture}
\end{document}
我在节点周围画了一个矩形来显示间距,与下面原始答案中展示的不良间距进行比较。
更好的方法是按照预期在只有一个点的图中使用标记机制:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw (-1,0) -- ++(2,0);
\draw (0,-1) -- ++(0,2);
\draw[color=blue] plot[mark=triangle*,mark size=5pt] (0,0);
\end{tikzpicture}
\end{document}
在你的代码中这将给出
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(0,-3);
\draw (5cm,0) -- ++(0,-3);
\draw (10cm,0) -- ++(0,-3);
\draw (0,-1)--(10,-1);
\draw[color=red] plot[mark=*,mark size=3pt] (0,-1);
\draw[color=blue] plot[mark=triangle*,mark size=5pt] (5cm,-1);
\draw[color=olive] plot[mark=square*,mark size=4pt] (10cm,-1);
\draw[mark=*,mark size=3pt,mark options={color=olive}] plot coordinates {(0,-2)}
-- plot[mark=triangle*,mark options={color=blue}] coordinates {(5cm,-2)}
-- plot[mark=square*,mark size=4pt,mark options={color=red}] coordinates {(10cm,-2)};
\end{tikzpicture}
\end{document}
原始答案
大多数绘图标记定义都有错误,因为换行符没有被注释掉。例如,定义triangle*
为:
\pgfdeclareplotmark{triangle*}
{%
\pgfpathmoveto{\pgfqpoint{0pt}{\pgfplotmarksize}}
\pgfpathlineto{\pgfqpointpolar{-30}{\pgfplotmarksize}}
\pgfpathlineto{\pgfqpointpolar{-150}{\pgfplotmarksize}}
\pgfpathclose
\pgfusepathqfillstroke
}
第 3、4 和 5 行没有转义换行符,因此在输出中插入一个空格,如您在节点周围绘制的框所示:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- ++(0,-2);
\node[mark size=5pt,color=blue,draw] at (0,-1) {\pgfuseplotmark{triangle*}};
\end{tikzpicture}
\end{document}
纠正这些定义,主要在pgflibraryplotmarks.code.tex
原始示例中发现:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\pgfdeclareplotmark{triangle*}
{%
\pgfpathmoveto{\pgfqpoint{0pt}{\pgfplotmarksize}}%
\pgfpathlineto{\pgfqpointpolar{-30}{\pgfplotmarksize}}%
\pgfpathlineto{\pgfqpointpolar{-150}{\pgfplotmarksize}}%
\pgfpathclose
\pgfusepathqfillstroke
}
\pgfdeclareplotmark{*}
{%
\pgfpathcircle{\pgfpointorigin}{\pgfplotmarksize}%
\pgfusepathqfillstroke
}
\draw (0,0) -- ++(0,-3);
\draw (5cm,0) -- ++(0,-3);
\draw (10cm,0) -- ++(0,-3);
\draw (0,-1)--(10,-1);
\node[mark size=3pt,color=red] at (0,-1) {\pgfuseplotmark{*}};
\node[mark size=5pt,color=blue] at (5cm,-1) {\pgfuseplotmark{triangle*}};
\node[mark size=4pt,color=olive] at (10cm,-1) {\pgfuseplotmark{square*}};
\draw[mark=*,mark size=3pt,mark options={color=olive}] plot
coordinates {(0,-2)}
-- plot[mark=triangle*,mark options={color=blue}] coordinates {(5cm,-2)}
-- plot[mark=square*,mark size=4pt,mark options={color=red}]
coordinates {(10cm,-2)};
\end{tikzpicture}
\end{document}
我添加了垂直线来显示对齐。