获取 tikz 域和范围

获取 tikz 域和范围

如何获取 tikz 键值 /tikz/domain (2 个值) 和 /tikz/range (2 个值)?在以下示例中

\documentclass{article}
\usepackage{tikz}
\begin{document}
\tikz \draw[domain=0:3,range=1:4] plot function{x**2} -- (0,3) -- (1,4);
\end{document}

我想(0,3) -- (1,4)从存储的键值 domain=0:3 和 range=1:4 中读取数字。我尝试找到解决方案,\pgfkeysvalueof但无法让它工作。

答案1

正如@Heiko Oberdiek 所说,设置存储在内部命令\tikz@plot@domain和中\tikz@plot@range。因此,您可以编写一些宏来提取它们。以下是示例:

\documentclass[tikz,border=7pt]{standalone}

\makeatletter
% extract interval `start:end` values
\def\get@interval@start#1:#2\@nil{#1}
\def\get@interval@end#1:#2\@nil{#2}
% get domain
\def\domainstart{\expandafter\get@interval@start\tikz@plot@domain\@nil}
\def\domainend{\expandafter\get@interval@end\tikz@plot@domain\@nil}
% get range
\def\rangestart{\expandafter\get@interval@start\tikz@plot@range\@nil}
\def\rangeend{\expandafter\get@interval@end\tikz@plot@range\@nil}
\makeatother

\begin{document}
  \begin{tikzpicture}
    \draw[domain=0:3,range=1:4] plot  (\x,\x*\x) -- (\domainstart,\domainend) -- (\rangestart,\rangeend);
  \end{tikzpicture}
\end{document}

在此处输入图片描述

笔记:我不是专家,所以可能可以使用更好的宏。

答案2

设置存储在内部命令中\tikz@plot@domain并且\tikz@plot@range

\documentclass{article}
\usepackage{tikz}
\begin{document}
\makeatletter
\tikz\draw[domain=0:3,range=1:4] plot function{x**2} -- (0,3) -- (1,4)
  \pgfextra{%
    \typeout{Domain: \tikz@plot@domain}%
    \typeout{Range: \tikz@plot@range}%
  }
;
\end{document}

console/.log文件包含:

Domain: 0:3
Range: 1:4

我建议使用不同的方法,通过定义宏来保存值:

\documentclass[tikz]{standalone}
\begin{document}
\def\MyDomainMin{0}
\def\MyDomainMax{3}
\def\MyRangeMin{1}
\def\MyRangeMax{4}
\tikz\draw[
  domain=\MyDomainMin:\MyDomainMax,
  range=\MyRangeMin:\MyRangeMax,
]
  plot function{x**2}
  -- (\MyDomainMin,\MyDomainMax) -- (\MyRangeMin, \MyRangeMax)
;
\end{document}

举一个更有意义一点的例子:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \def\MyDomainMin{0}
  \def\MyDomainMax{2.5}
  \def\MyRangeMin{1}
  \def\MyRangeMax{4}

  \draw[
    domain=\MyDomainMin:\MyDomainMax,
    range=\MyRangeMin:\MyRangeMax,
  ]
    plot[smooth] (\x, \x*\x)
  ;

  \draw[red]
    (\MyDomainMin, \MyRangeMin) rectangle (\MyDomainMax, \MyRangeMax)
  ;
\end{tikzpicture}
\end{document}

结果

相关内容