如何获取 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}