在以下示例中,我使用该库plotmarks
在给定路径上设置文本。现在我感兴趣的是显示标记的当前坐标,而不是p
。
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw[thick,mark=text,
% text mark=(CURRENT COORDINATE)
] plot [smooth,] coordinates{
(-0.5,0)(-0.7,-0.75) (1.3,1)
(-1.6,0.8) (-1,0)
};
\end{tikzpicture}
\end{document}
现在我正在使用提供的解决方案,并扩展了精度:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw[thick,mark=text,
text mark={%
\pgfgetlastxy{\x}{\y}%
(\pgfmathparse{\x/28.45274}\pgfmathprintnumber[fixed,precision=0]{\pgfmathresult},% Convert to cm.
\pgfmathparse{\y/28.45274}\pgfmathprintnumber[fixed,precision=0]{\pgfmathresult})% Convert to cm.
}%
] plot [smooth,] coordinates{
(-0.5,0)(-0.7,-0.75) (1.3,1)
(-1.6,0.8) (-1,0)
};
\end{tikzpicture}
\end{document}
答案1
一个可能的“非常幸运”的解决方案是检查最后使用的坐标是否在命令中可用pgfgetlastxy
(是的)。
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw[thick,mark=text,
text mark={%
\pgfgetlastxy{\x}{\y}%
(\pgfmathparse{\x/28.45274}\pgfmathresult cm,% Convert to cm.
\pgfmathparse{\y/28.45274}\pgfmathresult cm)% Convert to cm.
}%
] plot [smooth,] coordinates{
(-0.5,0)(-0.7,-0.75) (1.3,1)
(-1.6,0.8) (-1,0)
};
\end{tikzpicture}
\end{document}
但显示数字错误,可以进一步修正。但我还没有找到任何优雅的解决方案。
答案2
您可以使用 获取坐标\pgfgetlastxy
。这将为您提供以点为单位的坐标,因此如果您想将它们用于显示目的,您将需要执行一些进一步的计算以获得可以很好地显示的值。
你可以像这样简单地使用它:
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{plotmarks}
\begin{document}
\begin{tikzpicture}
\draw[thick,mark=text,
text mark={\pgfgetlastxy{\myx}{\myy}(\myx,\myy)}
] plot [smooth,] coordinates{
(-0.5,0)(-0.7,-0.75) (1.3,1)
(-1.6,0.8) (-1,0)
};
\end{tikzpicture}
\end{document}
它看起来像这样(由于尺寸以点为单位并且因此很长,因此非常糟糕)。
答案3
这里有一个不同的方法,即在宏中保存实际输入并在稍后访问它。因为绘图标记位于实际路径之后,而不是在路径中使用点时。我们需要定义几个宏(每个坐标一个宏)。
尽管如此,这并没有显示真实的坐标(例如不是(1.5cm, 0cm)
但是(2-0.5,0)
),但如果你知道输入的类型,你也可以再次处理它(在处拆分,
,附加cm
,...)。
代码
\documentclass[tikz]{standalone}
\usepackage{etoolbox}
\usetikzlibrary{plotmarks}
\makeatletter
\newcount\tikz@plot@coordinate
\tikzset{text mark/.append code=\tikz@plot@coordinate\z@}
\pretocmd{\tikz@@scan@@no@calculator}{%
\expandafter\def\csname tikz@plot@coordinate@\the\tikz@plot@coordinate\endcsname{#2}%
\advance\tikz@plot@coordinate\@ne
}{}{\errmessage{!}}
\preto\tikz@@@plot{\tikz@plot@coordinate\z@}
\pgfdeclareplotmark{text*}
{
\pgfkeysgetvalue{/pgf/text mark style}\pgfmarktext@style
\pgfkeysgetvalue{/pgf/text mark}\pgfmarktext@
\expandafter\pgfutil@in@\expandafter*\expandafter{\pgfmarktext@}
\ifpgfutil@in@
\expandafter\def\expandafter\pgfmarktext@\expandafter{\expandafter\qrr@tikz@plot@replace\pgfmarktext@\@qrr@tikz@plot@replace
{\csname tikz@plot@coordinate@\the\tikz@plot@coordinate\endcsname}}
\fi
\ifpgfmarktext@usetikznode
\expandafter\node\expandafter[\pgfmarktext@style]{\pgfmarktext@};
\else
\expandafter\pgftext\expandafter[\pgfmarktext@style]{\pgfmarktext@}
\fi
\global\advance\tikz@plot@coordinate\@ne
}
\def\qrr@tikz@plot@replace#1*#2\@qrr@tikz@plot@replace#3{#1#3#2}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw[
thick,
mark=text*,
/pgf/text mark=$(*)$,
text mark as node,
text mark style={fill=white,fill opacity=.5,text opacity=1,inner sep=+0pt}
] plot [smooth] coordinates{
(2-0.5,0) (-0.7,-0.75) (1.3,1in)
(-1.6,0.8) (-1,0)
};
\end{tikzpicture}
\end{document}