如何显示 mark=text 的当前坐标?

如何显示 mark=text 的当前坐标?

在以下示例中,我使用该库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}

输出

在此处输入图片描述

相关内容