新答案

新答案

当我使用 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诸如 之类的命令。相反,它们应该在(或)环境中使用。 \pgfuseplotmarknodepgfpicturetikzpicture

解决你的方法的一个(丑陋的)方法是在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}

我添加了垂直线来显示对齐。

相关内容